Use for React component implementation with shadcn/ui - accessible, customizable components
/plugin marketplace add alizain/wizard-wheezes/plugin install utils@eightzerothreeThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/docs.mdassets/docs/changelog.mdassets/docs/cli.mdassets/docs/components-json.mdassets/docs/components/accordion.mdassets/docs/components/alert-dialog.mdassets/docs/components/alert.mdassets/docs/components/aspect-ratio.mdassets/docs/components/avatar.mdassets/docs/components/badge.mdassets/docs/components/breadcrumb.mdassets/docs/components/button-group.mdassets/docs/components/button.mdassets/docs/components/calendar.mdassets/docs/components/card.mdassets/docs/components/carousel.mdassets/docs/components/chart.mdassets/docs/components/checkbox.mdassets/docs/components/collapsible.mdassets/docs/components/combobox.mdshadcn/ui provides beautifully designed, accessible components that you copy into your project. Components are not installed from npm - they're copied to your codebase for full customization.
npx shadcn@latest add <component>
# Examples:
npx shadcn@latest add button
npx shadcn@latest add dialog
npx shadcn@latest add form
npx shadcn@latest add button card dialog
button - Buttons with variants (default, destructive, outline, secondary, ghost, link)input - Text input with consistent stylingtextarea - Multi-line text inputselect - Native select with custom stylingcheckbox - Checkbox with label supportradio-group - Radio button groupsswitch - Toggle switchesslider - Range sliderform - Form with react-hook-form + zod validationdialog - Modal dialogsalert-dialog - Confirmation dialogssheet - Slide-out panels (top, right, bottom, left)popover - Floating content triggered by a buttontooltip - Hover tooltipsdropdown-menu - Accessible dropdown menuscontext-menu - Right-click context menusmenubar - Horizontal menu barcommand - Command palette (cmdk)table - Styled tablescard - Container with header, content, footerbadge - Small status indicatorsavatar - User avatars with fallbackseparator - Visual divideraspect-ratio - Maintain aspect ratiosscroll-area - Custom scrollbarscollapsible - Expandable sectionsaccordion - Multiple collapsible sectionshover-card - Preview cards on hovertabs - Tabbed interfacesnavigation-menu - Complex navigation with submenusbreadcrumb - Breadcrumb trailspagination - Page navigationalert - Static alert messagestoast / sonner - Toast notificationsprogress - Progress barsskeleton - Loading placeholdersresizable - Resizable panelscarousel - Image/content carouselsimport { Button } from "@/components/ui/button"
<Button variant="default">Click me</Button>
<Button variant="destructive">Delete</Button>
<Button variant="outline">Cancel</Button>
<Button variant="ghost">Menu</Button>
<Button size="sm">Small</Button>
<Button size="lg">Large</Button>
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
<Dialog>
<DialogTrigger asChild>
<Button>Open</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Title</DialogTitle>
<DialogDescription>Description text</DialogDescription>
</DialogHeader>
{/* Content */}
</DialogContent>
</Dialog>
import { useForm } from "react-hook-form"
import { zodResolver } from "@hookform/resolvers/zod"
import { z } from "zod"
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"
const schema = z.object({
email: z.string().email(),
})
function MyForm() {
const form = useForm({
resolver: zodResolver(schema),
})
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)}>
<FormField
control={form.control}
name="email"
render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
)
}
Components live in components/ui/. Modify directly:
cva definitionsshadcn uses CSS variables for theming. Modify in globals.css:
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 222.2 47.4% 11.2%;
--primary-foreground: 210 40% 98%;
/* ... */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* ... */
}