A modern, production-ready React Native design system featuring pre-styled, customizable components, state-based UI logic, theme support, and seamless integration with Tailwind, Expo, and TypeScript. Built for scalable mobile app development with accessibility and performance in mind.
- π― 25+ Production-Ready Components - Buttons, Inputs, Cards, Modals, Navigation, Social Media Stack, and more
- π¨ Dual Styling Support - Works with both NativeWind className and React Native styles
- π§ State-Driven UI - Built-in hover, pressed, disabled, loading, and error states
- π± Cross-Platform - Optimized for iOS, Android, and React Native Web
- π Theme Ready - Consistent design tokens and customizable variants
- β‘ TypeScript First - Full type safety with comprehensive prop interfaces
- π§© Modular Architecture - Import only what you need for optimal bundle size
- βΏ Accessible - Built-in accessibility support for screen readers
- π¦ Zero Dependencies - No external UI library dependencies
npm install reactnativeepictrailsds # or yarn add reactnativeepictrailsdsFor enhanced className support (optional - components work with pure React Native styles too):
npm install nativewind tailwindcssFollow the NativeWind installation guide for your platform.
import React from "react"; import { View } from "react-native"; import { Button, NormalInput, Card, SocialLogin, SocialMediaStack, StoryProgressBar } from "reactnativeepictrailsds"; export default function App() { return ( <View style={{ flex: 1, padding: 20, justifyContent: 'center' }}> <Card> <NormalInput placeholder="Enter your email" size="full" /> <Button title="Sign In" variant="primary" onPress={() => console.log('Pressed!')} /> <SocialLogin google apple onGoogleSignIn={() => console.log('Google')} onAppleSignIn={() => console.log('Apple')} /> </Card> </View> ); />import React, { useState } from "react"; import { SocialMediaStack, SocialMediaContainer, SocialMediaEngagement, StoryProgressBar, BottomNav } from "reactnativeepictrailsds"; export default function StoriesScreen() { const [activeIndex, setActiveIndex] = useState(0); const contentItems = [ { type: "text" as const, text: "Welcome to our app!", backgroundColor: "#e74c3c" }, { type: "image" as const, imageUri: require("./assets/image.png"), isLocal: true } ]; const engagementIcons = [ { name: "heart-outline", onPress: () => console.log("Like") }, { name: "chatbox-outline", onPress: () => console.log("Comment") }, { name: "paper-plane-outline", onPress: () => console.log("Share") } ]; return ( <SocialMediaStack> <StoryProgressBar totalStories={contentItems.length} activeStoryIndex={activeIndex} /> <SocialMediaEngagement icons={engagementIcons} /> <SocialMediaContainer contentItems={contentItems} duration={5000} onActiveIndexChange={(index: number) => setActiveIndex(index)} index={activeIndex} /> </SocialMediaStack> ); }| Component | Description | Key Props |
|---|---|---|
| Button | Primary button with variants and states | label, variant, size, state |
| Input | Text input with label, hint, and validation | label, placeholder, state, curved |
| Card | Container with elevation and padding | elevation, padding, backgroundColor |
| Alert | Notification component with variants | type, message, dismissible |
| Loading | Loading spinner with customizable size | size, color |
| Skeleton | Loading placeholder animations | width, height, animated |
| Component | Description | Key Props |
|---|---|---|
| NavTabs | Tab navigation component | tabs, activeTab, onTabPress |
| BottomNav | Bottom navigation bar | items, activeIndex, onItemPress |
| Tabs | Horizontal tab switcher | items, selected, onChange |
| Component | Description | Key Props |
|---|---|---|
| Grid | Responsive grid layout | columns, spacing, children |
| Tile | Grid tile with content | title, subtitle, onPress |
| Collapse | Expandable/collapsible content | title, expanded, children |
| EmptyStates | Empty state illustrations | title, message, actionButton |
| Component | Description | Key Props |
|---|---|---|
| Select | Dropdown selection component | options, value, onSelect |
| Autocomplete | Auto-completing text input | data, onSelect, placeholder |
| NormalInput | Basic text input (alias for Input) | Same as Input |
| Component | Description | Key Props |
|---|---|---|
| Dialog | Modal dialog with actions | visible, title, message, actions |
| AndroidModalSheet | Android-style bottom sheet | visible, onClose, children |
| IosModalSheet | iOS-style modal presentation | visible, onClose, children |
| Component | Description | Key Props |
|---|---|---|
| SocialLogin | Social login buttons | google, apple, facebook, email |
| TypeDoc | Terms agreement with checkbox | label, buttonLabel, onAccept |
| Component | Description | Key Props |
|---|---|---|
| SocialMediaStack | Container for social media components | children |
| SocialMediaContainer | Story/post container with navigation | contentItems, duration, onActiveIndexChange |
| SocialMediaEngagement | Like, comment, share buttons | icons, onIconPress |
| StoryProgressBar | Progress indicator for stories | totalStories, activeStoryIndex |
| Component | Description | Key Props |
|---|---|---|
| Iconography | Icon component with avatars and placeholders | type, iconName, size, initials |
| Component | Description | Key Props |
|---|---|---|
| ButtonIcon | Button with icon support | label, icon, iconPosition |
| ButtonRect | Rectangular button variant | label, variant, size |
| RectButton | Alias for ButtonRect | label, variant, size |
| ButtonTypeDoc | Button with terms agreement | label, termsText, onAccept |
import { Button } from "reactnativeepictrailsds"; <Button label="Styled Button" className="bg-blue-500 rounded-lg shadow-md" />import { Button } from "reactnativeepictrailsds"; <Button label="Styled Button" style={{ backgroundColor: '#3b82f6', borderRadius: 8, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 5, }} /><Button label="Hybrid Button" className="rounded-lg shadow-md" // NativeWind classes style={{ backgroundColor: '#custom-color' }} // Direct styles />| State | Description | Availability |
|---|---|---|
default | Default appearance | All interactive components |
hover | Mouse hover effect | Web + compatible components |
pressed | Active press state | Pressable components |
disabled | Non-interactive state | Form + button components |
loading | Loading with spinner | Async action components |
success | Success state | Form validation components |
error | Error state | Form validation components |
# Clone the repository git clone https://github.com/gaureshpai/reactnativeepictrailsds.git cd reactnativeepictrailsds ```bash # Clone the demo repo git clone https://github.com/Milan-C-I/Demo-react-native-epic-trails-ds.git cd Demo-react-native-epic-trails-ds # Install dependencies npm install # Build the library npm run build# Build all formats (CommonJS, ESM, TypeScript declarations) npm run build # Development build with watch mode npm run build:watch # Type checking npm run type-check- Core component library (25+ components)
- Button variants with full state management
- Form and input controls with validation
- Modal and dialog primitives
- Navigation components (tabs, bottom nav)
- Layout components (grid, tiles, cards)
- Social authentication components
- Social Media Stack (Instagram-like stories)
- Iconography system with avatars and icons
- TypeScript support with full type definitions
- Dual styling system (NativeWind + React Native)
- Cross-platform compatibility (iOS, Android, Web)
- React Native 0.76.x compatibility
- Expo SDK 52 compatibility
- Enhanced theme system with design tokens
- Advanced animation support
- Component documentation site
- Storybook integration
- Video support for Social Media Stack
- Dark mode theme variants
- Advanced accessibility features
- Performance optimizations
- Extended icon library
- Form validation utilities
- Gesture-based components
We welcome contributions! Please refer to our contributing guidelines before submitting a PR.
- Fork the repository
- Create a new branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add my feature') - Push to your branch (
git push origin feature/my-feature) - Open a pull request and describe your changes
This project is licensed under the MIT License.
Thanks to these wonderful people: