Components
NativeLaunch includes a structured set of UI components grouped into three main categories:
- Reusables — components from
react-native-reusables, organized in theshared/uifolder - UI primitives — reusable low-level components
- Widgets — high-level, logic-rich UI blocks
The component architecture is shared across UI stacks. Components are styled using a utility-first approach and work with both NativeWind and the alternative uniWind setup.
The default stack uses NativeWind, while the uniWind version provides the same component structure adapted for Tailwind CSS v4–powered uniWind.
Folders overview
widgets/ ← Custom animated and logic-based components
shared/
├── ui/ ← Components from react-native-reusables
├── ui-primitives/ ← Custom layout and interaction components1. 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.
In the default setup, these components are styled with NativeWind. In the alternative UI stack, they follow the same API but are styled using uniWind, keeping the component usage consistent across stacks.
import {Button} from '@/shared/ui'
<Button className="bg-primary text-white">
Continue
</Button>Adding new reusable components
If a component you need is not included in shared/ui, you can quickly scaffold it using the
React Native Reusables CLI:
npx @react-native-reusables/cli@latest add buttonThis command automatically installs the component, generates its files, and makes it available in
shared/ui with full TypeScript support and compatibility with both NativeWind and uniWind.
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,MonthYearPickerTextTicker,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/uifor standard elements like buttons and inputs - Use
ui-primitivesfor layout, control, and display logic - Use
widgetsfor animated or high-level interactive components - All components support
classNamein both NativeWind and uniWind - Themes are powered by shared design tokens
This component structure is designed to be clean, scalable, and easy to extend. You can add your
own folders inside shared/ while keeping compatibility with both UI stacks.