Components
ExpoLaunch includes a structured set of UI components grouped into three main categories:
- Reusables — components from
@react-native-reusables
, organized in theshared/ui
folder - UI primitives — reusable low-level components
- Widgets — high-level, logic-rich UI blocks
All components are designed to work with Tailwind CSS via NativeWind and follow consistent styling
via theme.ts
.
Folders overview
widgets/ ← Custom animated and logic-based components
shared/
├── ui/ ← Components from @react-native-reusables
├── ui-primitives/ ← Custom layout and interaction components
1. Reusable UI components
The shared/ui
folder contains prebuilt components from
@react-native-reusables
. These include
common UI elements like Button
, Card
, Switch
, TextField
, Checkbox
, Tabs
, and more — all
styled with Tailwind and ready for drop-in use.
import {Button} from '@/shared/ui'
<Button className="bg-primary text-white">
Continue
</Button>
2. UI Primitives
Located in shared/ui-primitives
, these are small building blocks used throughout the app:
Sheet
— modal bottom sheet (@gorhom/bottom-sheet
)Skeleton
— loading placeholderConfirmationDialog
— modal with confirm/cancelExternalLink
— consistent styled external anchorColorPicker
,DatePicker
,MonthYearPicker
TextTicker
,GenericIcon
,MenuItem
, etc.
import {ConfirmationDialog} from '@/shared/ui-primitives'
<ConfirmationDialog
title="Are you sure?"
description="This action cannot be undone."
onConfirm={() => doSomething()}
/>
3. Widgets
In shared/widgets
, you'll find more advanced, logic-based components:
AnimatedNumber
— number counting animation using ReanimatedLoadingModal
— full-screen modal with spinner and statusDonutChart
,CircularProgressBar
— data visualizationsScreenContent
— page layout wrapperNumericPad
— custom number input for money, PINs, etc.
import {AnimatedNumber} from '@/shared/widgets'
<AnimatedNumber value={4523} />
Best practices
- Use
shared/ui
for standard elements like buttons and inputs - Use
ui-primitives
for layout, control, and display logic - Use
widgets
for animated or high-level interactive components - Everything supports
className
via NativeWind - Themes are powered by tokens in
theme.ts
This component structure is designed to be clean, scalable, and easy to extend. Feel free to
create your own folders inside shared/
following the same convention.