Components Native (@otfdashkit/ui-native) Patterns 48 high-level UX patterns — bottom sheets, onboarding, paywalls, chips, search bars, and more.
Patterns are finished UX flows or UI shapes. They're the largest pieces in @otfdashkit/ui-native —
where you'd otherwise pull in five hooks and a third-party library and tune for two days.
Pattern What it is BottomSheetBottom-anchored sheet with snap points, drag-to-close, backdrop dim ActionSheetiOS-style bottom action picker — title + description + ordered actions + cancel ConfirmDialogModal confirmation with destructive variant OtfDialogCentered dialog (overrides Tamagui's default styling with kit tokens) OtfPopoverAnchored popover with auto-positioning OtfSelectNative select bottom-sheet — long list, search, single/multi NotificationBannerIn-app toast banner, dismiss-on-swipe
< BottomSheet
open = {open}
onOpenChange = {setOpen}
snapPoints = {[ '33%' , '66%' ]}
>
< H2 >Choose a workout</ H2 >
< List >...</ List >
</ BottomSheet >
Pattern What it is ChipsTabBarTop-of-screen filter chips that act as tab nav TabBarBottom tab bar — 5 tabs, icon + label, active accent, hairline top border SearchBarSearch input with clear button + cancel transition AppHeaderTop header that pairs with useCollapsibleHeader for shrink-on-scroll FloatingActionButtonBottom-right FAB — fitness-kit's theme switcher uses this
Pattern What it is OnboardingCarouselFull-screen swipeable intro with dot indicators MultiStepWizard orchestrator wrapping StepPageLayout + ProgressSteps ProgressStepsTop dot/bar indicator for wizards LoginScreenPre-built sign-in page (email + password + OAuth + demo button) — drop-in for kits OTPInputOne-time-passcode input row PasswordInputPassword input with reveal-toggle eye icon
Pattern What it is CarouselHorizontal swipeable cards (paginated) CardScrollerHorizontal-scroll list of cards EventCardCalendar-event card with date stripe + time + venue MediaCardCover-image card with title overlay ProductCardE-commerce card — image, name, price, rating TestimonialCardQuote + author + role + avatar ChipSingle chip (filter, tag, removable) AvatarGroupStacked overlapping avatars (+N more) SelectableTappable card row with checked/selected state ExpandableCard row that expands to show more content on tap SwipeableRowRow with reveal actions on swipe (archive / delete / etc.) SwipeCardsTinder-style swipeable card stack DataTableNative data table with sort + scroll ChatBubbleSingle chat message bubble (mine vs theirs)
Pattern What it is DatePickeriOS/Android-styled date picker bottom sheet WheelPickeriOS-style spinning wheel picker RulerScrubberHorizontal "ruler" picker for height/weight (the fitness kit uses it for body measurements)
Pattern What it is PaywallScreenDrop-in paywall — feature list, pricing toggle, primary CTA, fine print PricingTableMulti-tier pricing comparison cards ProfileHeaderAvatar + name + email + stats — pre-baked profile-screen header SettingsScreenPre-built settings layout — sections + rows + dividers UserPreferencesToggle group for common app prefs (notifications, units, language) ImmersiveMediaScreenFull-bleed media-first screen layout FinanceDashboardKPI grid + chart + recent-transactions list — finance-kit-shaped CountdownBannerTime-bounded promo banner (red when expired) EmptyStateNative empty-state with icon + title + description + CTA SkeletonLoading placeholder (matches the web Skeleton API) GlassCardFrosted-glass card (BlurView-backed) AnimatedViewReanimated wrapper with fade/slide presets PullToRefreshPull-to-refresh wrapper with branded spinner
import { BottomSheet, DatePicker, Button, H2 } from '@otfdashkit/ui-native'
const [ open , setOpen ] = useState ( false )
const [ date , setDate ] = useState < Date | null >( null )
<>
< Button onPress = {() => setOpen ( true )}>
{date ? date. toLocaleDateString () : 'Pick a date' }
</ Button >
< BottomSheet open = {open} onOpenChange = {setOpen} snapPoints = {[ '50%' ]}>
< H2 >When?</ H2 >
< DatePicker value = {date} onChange = {( d ) => { setDate (d); setOpen ( false ) }} />
</ BottomSheet >
</>
Layouts — screen-shape components patterns plug into
Interface — smaller, single-purpose components