v0.1 public beta early access on GitHub
Home / Components / pull-to-refresh

Pull To RefreshiOS

Physics-driven pull-to-refresh ScrollView — resisted pull, threshold snap, custom ring indicator.

$ npx lumioui add pull-to-refresh
import { RefreshableScrollView, PullToRefresh } from "@/components/ui/pull-to-refresh/pull-to-refresh";
Parts: RefreshableScrollView
Props8
refreshing? boolean Controlled refresh flag. Omit it and the component tracks the onRefresh promise internally (uncontrolled).
onRefresh? () => void | Promise<void> Runs when the pull passes the threshold and the finger lifts. May return a Promise — uncontrolled mode awaits it.
haptic? boolean Light haptic on threshold cross + success haptic on completion. Default true.
disabled? boolean Disable the pull gesture (content still scrolls).
threshold? number Resisted pull distance (pt) required to trigger. Default 80.
maxPull? number Resisted pull distance ceiling. Default 140.
holdDistance? number Gap the content holds open while refreshing. Default 64.
className? string Applied to the outer frame (the scroller fills it) — pass flex-1 or an explicit height exactly as you would have on the old ScrollView.
Pull To Refreshpull-to-refresh.tsx
pull-to-refresh/pull-to-refresh.tsx open

Physics-driven pull-to-refresh ScrollView — resisted pull, threshold snap, custom ring indicator.