467 lines
9.8 KiB
Markdown
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!** 🎨
|