// Signature format: 4.0
package com.google.accompanist.swiperefresh {

  public final class SlingshotKt {
  }

  public final class SwipeRefreshIndicatorKt {
    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeRefreshIndicator(com.google.accompanist.swiperefresh.SwipeRefreshState state, float refreshTriggerDistance, optional androidx.compose.ui.Modifier modifier, optional boolean fade, optional boolean scale, optional boolean arrowEnabled, optional long backgroundColor, optional long contentColor, optional androidx.compose.ui.graphics.Shape shape, optional float refreshingOffset, optional boolean largeIndication, optional float elevation);
  }

  public final class SwipeRefreshKt {
    method @Deprecated @androidx.compose.runtime.Composable public static void SwipeRefresh(com.google.accompanist.swiperefresh.SwipeRefreshState state, kotlin.jvm.functions.Function0<kotlin.Unit> onRefresh, optional androidx.compose.ui.Modifier modifier, optional boolean swipeEnabled, optional float refreshTriggerDistance, optional androidx.compose.ui.Alignment indicatorAlignment, optional androidx.compose.foundation.layout.PaddingValues indicatorPadding, optional kotlin.jvm.functions.Function2<? super com.google.accompanist.swiperefresh.SwipeRefreshState,? super androidx.compose.ui.unit.Dp,kotlin.Unit> indicator, optional boolean clipIndicatorToPadding, kotlin.jvm.functions.Function0<kotlin.Unit> content);
    method @Deprecated @androidx.compose.runtime.Composable public static com.google.accompanist.swiperefresh.SwipeRefreshState rememberSwipeRefreshState(boolean isRefreshing);
  }

  @Deprecated @androidx.compose.runtime.Stable public final class SwipeRefreshState {
    ctor @Deprecated public SwipeRefreshState(boolean isRefreshing);
    method @Deprecated public float getIndicatorOffset();
    method @Deprecated public boolean isRefreshing();
    method @Deprecated public boolean isSwipeInProgress();
    method @Deprecated public void setRefreshing(boolean);
    property public final float indicatorOffset;
    property public final boolean isRefreshing;
    property public final boolean isSwipeInProgress;
  }

}

