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: