--- name: shadcn-ui description: Create beautiful, accessible React Native components following shadcn/ui design principles. Use for building UI components with consistent styling, proper TypeScript types, and accessibility features. --- # shadcn/ui Style Components for React Native This skill helps create React Native components following shadcn/ui design principles: ## Core Principles 1. **Component Philosophy** - Components are copied into the project (not npm installed) - Full ownership and customization - TypeScript-first with proper type definitions - Composable and reusable 2. **Design Tokens** - Use the project's theme system from `src/lib/theme/index.ts` - Consistent spacing, colors, and typography - Support light/dark mode if configured 3. **Component Structure** ```typescript import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; import { theme } from '@/lib/theme'; export interface ComponentProps { variant?: 'default' | 'outline' | 'ghost'; size?: 'sm' | 'md' | 'lg'; // Add prop types } export function Component({ variant = 'default', size = 'md', ...props }: ComponentProps) { return ( {/* Component content */} ); } const styles = StyleSheet.create({ base: { // Base styles }, // Variant styles default: {}, outline: {}, ghost: {}, // Size styles sm: {}, md: {}, lg: {}, }); ``` 4. **Accessibility** - Always include `accessibilityLabel` - Use `accessibilityRole` appropriately - Support `accessibilityHint` when helpful - Test with screen readers 5. **Common Patterns** **Button Component:** - Variants: default, outline, ghost, destructive - Sizes: sm, md, lg - States: disabled, loading - Supports press feedback **Card Component:** - Header, Content, Footer sections - Optional borders and shadows - Consistent padding **Input Component:** - Label and error message support - Focus states - Validation feedback **Badge Component:** - Variants: default, success, warning, error - Compact sizing 6. **File Organization** - Place components in `src/components/` - Export from `src/components/index.ts` - Keep component + styles in same file - Create compound components when needed 7. **Styling Approach** - Use StyleSheet.create for performance - Leverage theme tokens - Support style prop for overrides - Use flexbox for layouts ## Examples ### Button with Variants ```typescript ``` ### Card Composition ```typescript Title Content here ``` ### Form Input ```typescript ``` ## When to Use This Skill - Creating new UI components - Refactoring existing components to be more consistent - Adding variants or sizes to components - Improving component accessibility - Establishing a design system