@orchard9ai/design-system
Version:
DaisyUI-based component library for Orchard9 applications
380 lines (288 loc) โข 9.46 kB
Markdown
# @orchard9ai/design-system
**v0.1.2 - Complete Component Library**
A comprehensive React component library built on DaisyUI and TailwindCSS v4 for the Orchard9 ecosystem. This package provides a full suite of accessible, themeable UI components with TypeScript support.
## Features
- ๐งฉ **50+ React Components** - Full component library including Button, Card, Modal, Table, Forms, and more
- ๐จ **DaisyUI + TailwindCSS v4** - Modern CSS-first configuration with semantic component classes
- ๐ **6 Built-in Themes** - Light, dark, cupcake, business, plus custom Grove themes
- ๐ฏ **TypeScript Support** - Fully typed components with excellent IDE support
- ๐ฆ **Tree-shakeable** - Optimized bundle with only what you use
- โฟ **Accessible** - WCAG 2.1 AA compliant components
- ๐งช **Thoroughly Tested** - Jest, React Testing Library, accessibility testing
- ๐ **Storybook Documentation** - Interactive component explorer
- ๐ **Tiny Bundle** - Only 467B JS + optimized CSS
- ๐ ๏ธ **Developer Experience** - Theme hooks, utility functions, consistent APIs
## Installation
```bash
npm install @orchard9ai/design-system
# Install peer dependencies
npm install react react-dom
```
## Quick Start
### 1. Import Styles
Import the design system CSS in your app entry point:
```tsx
// In your main.tsx or App.tsx
import '@orchard9ai/design-system/styles.css';
```
### 2. Configure PostCSS (if using TailwindCSS v4)
If you're extending the design system with custom styles:
```js
// postcss.config.js
module.exports = {
plugins: {
'@tailwindcss/postcss': {},
autoprefixer: {},
},
};
```
### 3. Use Available Components and Utilities
```tsx
import { cn } from '@orchard9ai/design-system';
function MyComponent() {
return (
<div data-theme="light" className="min-h-screen bg-base-100">
<button className={cn('btn', 'btn-primary', 'loading')}>Click me</button>
</div>
);
}
```
## Available Components
### Core Components
- **Button** - Primary, secondary, variants with loading states
- **Card** - Flexible content containers with image support
- **Modal** - Accessible modal dialogs
- **Drawer** - Side panel navigation
- **Dropdown** - Menu and select dropdowns
### Form Components
- **FormControl** - Form field wrapper with labels
- **Input** - Text input with variants
- **Select** - Dropdown selection
- **Textarea** - Multi-line text input
- **Checkbox** - Single and group checkboxes
- **Radio** - Radio buttons and groups
- **Toggle** - Switch toggles
### Layout Components
- **Container** - Responsive content wrapper
- **Grid** - Flexible grid system
- **Stack** - Vertical/horizontal spacing
- **Hero** - Hero sections
### Data Display
- **Table** - Data tables with sorting
- **Stat** - Statistics display
- **Avatar** - User avatars with groups
- **Badge** - Status indicators
- **Timeline** - Event timelines
- **Accordion** - Collapsible content
### Feedback Components
- **Alert** - Inline notifications
- **Toast** - Toast notifications
- **Progress** - Progress bars
- **Skeleton** - Loading placeholders
- **EmptyState** - Empty data states
### Navigation
- **Breadcrumb** - Navigation breadcrumbs
- **Pagination** - Page navigation
- **Tabs** - Tabbed interfaces
## Quick Examples
### Using Components
```tsx
import { Button, Card, ThemeProvider, useTheme } from '@orchard9ai/design-system';
function App() {
return (
<ThemeProvider defaultTheme="grove-light">
<Card>
<Card.Body>
<Card.Title>Welcome to Orchard9</Card.Title>
<p>Build amazing interfaces with our component library.</p>
<Card.Actions>
<Button variant="primary">Get Started</Button>
</Card.Actions>
</Card.Body>
</Card>
</ThemeProvider>
);
}
```
### Form Example
```tsx
import { FormControl, Input, Button } from '@orchard9ai/design-system';
function LoginForm() {
return (
<form>
<FormControl>
<FormControl.Label>Email</FormControl.Label>
<Input type="email" placeholder="Enter your email" />
</FormControl>
<FormControl>
<FormControl.Label>Password</FormControl.Label>
<Input type="password" />
</FormControl>
<Button variant="primary" type="submit">
Sign In
</Button>
</form>
);
}
```
### Using Utility Functions
```tsx
import { cn } from '@orchard9ai/design-system';
// Conditional class merging
const buttonClass = cn(
'btn',
variant && `btn-${variant}`,
isLoading && 'loading',
isDisabled && 'btn-disabled'
);
// Complex conditional styling
const cardClass = cn(
'card',
'bg-base-100',
'shadow-xl',
isActive && 'ring-2 ring-primary',
isCompact && 'card-compact'
);
```
### Theme Switching
Using the ThemeProvider and useTheme hook:
```tsx
import { useTheme } from '@orchard9ai/design-system';
function ThemeSwitcher() {
const { theme, setTheme, themes } = useTheme();
return (
<select
className="select select-bordered"
value={theme}
onChange={(e) => setTheme(e.target.value as any)}
>
{themes.map((t) => (
<option key={t} value={t}>
{t}
</option>
))}
</select>
);
}
```
## Theme System
### DaisyUI Semantic Colors
The design system uses DaisyUI's semantic color system:
- `primary` - Brand color (customizable per theme)
- `secondary` - Secondary brand color
- `accent` - Accent color for highlights
- `neutral` - Neutral grays
- `base-100/200/300` - Background layers
- `info/success/warning/error` - Status colors
### Available Themes
- **Light** - Clean, minimal light theme
- **Dark** - High-contrast dark theme
- **Cupcake** - Soft, pastel color palette
- **Business** - Professional, corporate styling
- **Grove Light** - Orchard9 brand theme with emerald accents on light background
- **Grove Dark** - Orchard9 brand theme with vibrant emerald on dark background
### Theme Implementation
```tsx
// Set theme on document root
document.documentElement.setAttribute('data-theme', 'light');
// Or use React state
function App() {
const [theme, setTheme] = useState('light');
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme);
}, [theme]);
return <div className="min-h-screen bg-base-100">{/* Your app content */}</div>;
}
```
## Testing Your Integration
### Verification Steps
1. **Install and import**: Ensure the package installs and CSS imports correctly
2. **Theme switching**: Test all 4 themes work properly
3. **DaisyUI classes**: Verify DaisyUI utilities are available
4. **Bundle size**: Check impact on your app's bundle size
5. **Build process**: Ensure production builds work correctly
### Example Test Component
```tsx
import { cn } from '@orchard9ai/design-system';
import '@orchard9ai/design-system/styles.css';
export function DesignSystemTest() {
const [theme, setTheme] = useState('light');
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme);
}, [theme]);
return (
<div className="p-8 space-y-4">
<h2 className="text-2xl font-bold">Design System Test</h2>
{/* Theme Switcher */}
<select
className="select select-bordered"
value={theme}
onChange={(e) => setTheme(e.target.value)}
>
<option value="light">Light</option>
<option value="dark">Dark</option>
<option value="cupcake">Cupcake</option>
<option value="business">Business</option>
</select>
{/* Component Tests */}
<div className="space-x-2">
<button className={cn('btn', 'btn-primary')}>Primary</button>
<button className="btn btn-secondary">Secondary</button>
<button className="btn btn-accent">Accent</button>
</div>
<div className="alert alert-success">
<span>โ
Design system is working correctly!</span>
</div>
<div className="card bg-base-100 shadow">
<div className="card-body">
<h3 className="card-title">Test Card</h3>
<p>Testing DaisyUI components in {theme} theme</p>
</div>
</div>
</div>
);
}
```
## Development (for Contributors)
```bash
# Install dependencies
pnpm install
# Run tests
pnpm test
# Build package
pnpm build
# Start Storybook
pnpm storybook
# Check bundle size
pnpm size
# Type checking
pnpm typecheck
```
## Roadmap
### v0.1.2 โ
(Current)
- Complete component library (50+ components)
- Theme system with 6 themes
- Full TypeScript support
- Comprehensive test coverage
- Storybook documentation
### v0.2.0 (Next)
- Enhanced form validation
- Animation utilities
- Additional theme customization
- Component composition patterns
### v1.0.0 (Future)
- Stable API
- Performance optimizations
- Extended accessibility features
- Figma design kit
## Documentation
- ๐ [Usage Guide](./docs/USAGE_GUIDE.md) - Detailed usage instructions
- ๐งช [Testing Guide](./docs/TESTING_GUIDE.md) - Testing strategies and examples
- ๐จ [Design Tokens](./docs/DESIGN_TOKENS.md) - Color and spacing system
- โฟ [Accessibility](./docs/ACCESSIBILITY.md) - WCAG compliance guidelines
## Support
- **Issues**: [GitHub Issues](https://github.com/orchard9ai/frontend-packages/issues)
- **Discussions**: [GitHub Discussions](https://github.com/orchard9ai/frontend-packages/discussions)
- **Documentation**: [Storybook](https://design-system.orchard9.ai) _(coming soon)_
## License
MIT ยฉ Orchard9