---
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