Files

467 lines
9.8 KiB
Markdown

# shadcn/ui Design Skill for QwenClaw
## Overview
This skill provides **shadcn/ui design patterns and component knowledge** to QwenClaw, enabling it to generate beautiful, accessible, and production-ready UI components using the shadcn/ui design system.
**Source:** https://github.com/shadcn/ui
---
## What is shadcn/ui?
**shadcn/ui** is a set of beautifully designed, customizable UI components built with:
- **React** - Component framework
- **Tailwind CSS** - Styling
- **Radix UI** - Accessible primitives
- **TypeScript** - Type safety
### Key Principles
- **Open Code** - Copy/paste components into your project
- **Customizable** - Full control over styles and behavior
- **Accessible** - WCAG compliant components
- **Modern** - Built with latest React patterns
---
## Components Available
### Forms & Input
- **Form** - Form container with validation
- **Input** - Text input fields
- **Textarea** - Multi-line text input
- **Checkbox** - Checkbox with labels
- **Radio Group** - Radio button groups
- **Select** - Dropdown selection
- **Switch** - Toggle switch
- **Slider** - Range slider
- **Label** - Form labels
### Navigation
- **Button** - Button variants (default, secondary, outline, ghost, link)
- **Link** - Styled links
- **Tabs** - Tab navigation
- **Dropdown Menu** - Context menus
- **Navigation Menu** - Main navigation
- **Pagination** - Pagination controls
- **Breadcrumb** - Breadcrumb navigation
### Feedback
- **Alert** - Status messages
- **Toast** - Toast notifications
- **Progress** - Progress indicators
- **Skeleton** - Loading skeletons
- **Spinner** - Loading spinners
- **Badge** - Status badges
### Data Display
- **Card** - Card containers
- **Table** - Data tables
- **Avatar** - User avatars
- **Calendar** - Date picker
- **Command** - Command palette (cmd+k)
### Overlays
- **Dialog** - Modal dialogs
- **Sheet** - Side sheets
- **Popover** - Popover overlays
- **Tooltip** - Hover tooltips
- **Hover Card** - Hover previews
### Layout
- **Separator** - Visual dividers
- **Scroll Area** - Custom scrollbars
- **Resizable** - Resizable panels
- **Aspect Ratio** - Maintain aspect ratios
---
## Usage in QwenClaw
### Basic Component Generation
```
Use shadcn/ui skill to create a login form with:
- Email input
- Password input
- Remember me checkbox
- Submit button
- Forgot password link
```
### Complex UI Generation
```
Use shadcn/ui patterns to build a dashboard with:
- Sidebar navigation
- Header with user menu
- Stats cards
- Recent activity table
- Theme toggle
```
### Component Customization
```
Generate a shadcn/ui button with:
- Primary variant
- Large size
- Custom color: blue-600
- Icon: ArrowRight
```
---
## Design Tokens
### Colors
```
Background: bg-background
Foreground: text-foreground
Primary: bg-primary / text-primary
Secondary: bg-secondary / text-secondary
Muted: bg-muted / text-muted
Accent: bg-accent / text-accent
Destructive: bg-destructive / text-destructive
```
### Typography
```
font-sans - Inter font family
text-xs/sm/base/lg/xl/2xl - Font sizes
font-normal/medium/semibold/bold - Font weights
```
### Spacing
```
p-4 - Padding
m-4 - Margin
gap-4 - Gap
w-full - Width
h-full - Height
```
### Border Radius
```
rounded - Default (0.5rem)
rounded-md - Medium (0.375rem)
rounded-lg - Large (0.5rem)
rounded-xl - Extra large (0.75rem)
rounded-full - Full circle
```
---
## Component Patterns
### Form Pattern
```tsx
<form className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="Enter email" />
</div>
<Button type="submit" className="w-full">Submit</Button>
</form>
```
### Card Pattern
```tsx
<Card>
<CardHeader>
<CardTitle>Title</CardTitle>
<CardDescription>Description</CardDescription>
</CardHeader>
<CardContent>
Content here
</CardContent>
<CardFooter>
Footer actions
</CardFooter>
</Card>
```
### Dialog Pattern
```tsx
<Dialog>
<DialogTrigger asChild>
<Button>Open</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Title</DialogTitle>
<DialogDescription>Description</DialogDescription>
</DialogHeader>
Content
</DialogContent>
</Dialog>
```
---
## Accessibility Guidelines
### Always Include
- `aria-label` for icon buttons
- `htmlFor` on labels
- `role` attributes where needed
- Keyboard navigation support
- Focus management
- Screen reader announcements
### Color Contrast
- Minimum 4.5:1 for normal text
- Minimum 3:1 for large text
- Don't rely on color alone
### Keyboard Support
- Tab navigation
- Enter/Space for buttons
- Escape for dialogs
- Arrow keys for menus
---
## Best Practices
### 1. Component Composition
```tsx
// Good: Compose small components
<Card>
<CardHeader>
<CardTitle>
<Icon className="mr-2" />
Title
</CardTitle>
</CardHeader>
</Card>
// Avoid: Monolithic components
```
### 2. Responsive Design
```tsx
// Mobile-first approach
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
```
### 3. Dark Mode Support
```tsx
// Use semantic color tokens
<div className="bg-background text-foreground">
```
### 4. Loading States
```tsx
// Show skeleton during loading
{isLoading ? (
<Skeleton className="h-4 w-full" />
) : (
<Content />
)}
```
---
## Integration with QwenClaw Rig
### Using with Rig Agents
```typescript
import { RigClient } from "./rig";
const rig = new RigClient({ host: "127.0.0.1", port: 8080 });
// Create UI specialist agent
const uiAgentId = await rig.createAgent({
name: "ui-designer",
preamble: `You are a UI expert specializing in shadcn/ui design patterns.
When generating UI components:
1. Use shadcn/ui component patterns
2. Follow accessibility guidelines
3. Support dark mode
4. Include responsive breakpoints
5. Use Tailwind CSS for styling`,
provider: "qwen",
model: "qwen-plus",
});
// Generate UI
const component = await rig.executePrompt(uiAgentId, `
Create a user profile card using shadcn/ui patterns.
Include avatar, name, role, and action buttons.
`);
```
### Multi-Agent UI Workflow
```typescript
// Create UI council
const councilId = await rig.createCouncil("UI Team", [
{
name: "designer",
preamble: "Expert in shadcn/ui design patterns and aesthetics",
},
{
name: "accessibility",
preamble: "Ensures WCAG compliance and accessibility best practices",
},
{
name: "developer",
preamble: "Implements clean, maintainable React code",
},
]);
// Generate complete UI
const result = await rig.executeCouncil(councilId, `
Build a complete settings page with:
- Profile section
- Notifications preferences
- Security settings
- Theme toggle
`);
```
---
## Resources
### Official
- **Website**: https://ui.shadcn.com/
- **GitHub**: https://github.com/shadcn/ui
- **Documentation**: https://ui.shadcn.com/docs
- **Components**: https://ui.shadcn.com/docs/components
### Related
- **Radix UI**: https://www.radix-ui.com/
- **Tailwind CSS**: https://tailwindcss.com/
- **Vercel**: https://vercel.com/
---
## Examples
### Login Page
```tsx
export function LoginForm() {
return (
<Card className="w-full max-w-md mx-auto">
<CardHeader>
<CardTitle>Welcome back</CardTitle>
<CardDescription>
Enter your credentials to sign in
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="you@example.com" />
</div>
<div className="space-y-2">
<Label htmlFor="password">Password</Label>
<Input id="password" type="password" />
</div>
<Button className="w-full">Sign In</Button>
</CardContent>
<CardFooter className="justify-center">
<Link href="/forgot" className="text-sm text-muted-foreground">
Forgot password?
</Link>
</CardFooter>
</Card>
);
}
```
### Dashboard Layout
```tsx
export function Dashboard() {
return (
<div className="flex h-screen">
{/* Sidebar */}
<aside className="w-64 border-r p-4">
<nav className="space-y-2">
<a href="/dashboard" className="block p-2 rounded hover:bg-accent">
Dashboard
</a>
<a href="/settings" className="block p-2 rounded hover:bg-accent">
Settings
</a>
</nav>
</aside>
{/* Main content */}
<main className="flex-1 p-6">
<header className="flex justify-between items-center mb-6">
<h1 className="text-2xl font-bold">Dashboard</h1>
<Button variant="outline">Settings</Button>
</header>
{/* Stats */}
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
<Card>
<CardHeader>
<CardTitle className="text-sm">Total Users</CardTitle>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">1,234</div>
</CardContent>
</Card>
{/* More stat cards... */}
</div>
</main>
</div>
);
}
```
---
## Skill Metadata
```yaml
name: shadcn-ui-design
version: 1.0.0
category: design
description: shadcn/ui design patterns and component generation
author: shadcn (https://github.com/shadcn)
license: MIT
tags:
- ui
- design
- react
- tailwind
- components
- accessibility
```
---
## Quick Reference
### Button Variants
- `default` - Primary action
- `secondary` - Secondary action
- `outline` - Tertiary action
- `ghost` - Subtle action
- `link` - Link-style action
- `destructive` - Dangerous action
### Input Sizes
- `sm` - Small (h-9)
- `default` - Medium (h-10)
- `lg` - Large (h-11)
### Dialog Triggers
- `DialogTrigger` - Standard trigger
- `asChild` - Use child as trigger
### Toast Types
- `default` - Standard notification
- `destructive` - Error notification
---
**Skill ready for QwenClaw integration!** 🎨