Files
playbook/ui-ux-pro-max/cli/assets/data/stacks/shadcn.csv
T
2026-08-14 17:16:04 +08:00

23 KiB

1NoCategoryGuidelineDescriptionDoDon'tCode GoodCode BadSeverityDocs URLApplies ToStatusVerified At
21SetupUse CLI for installationUse CLI v4 to resolve the selected base dependencies and registry itemsnpx shadcn@latest add component-nameBypass CLI resolution with stale copied codenpx shadcn@latest add buttonCopy an old component implementationHighhttps://ui.shadcn.com/docs/clishadcn cli 4; base=base|radix|ariaactive2026-08-13
32SetupInitialize project properlyRun init command to set up components.json and globals.cssnpx shadcn@latest init before adding componentsSkip init and add components directlynpx shadcn@latest initnpx shadcn@latest add button (without init)Highhttps://ui.shadcn.com/docs/installationshadcn cli 4; base=base|radix|ariaactive2026-08-13
43SetupConfigure path aliasesSet up proper import aliases in tsconfig and components.jsonUse @/components/ui path aliasesRelative imports like ../../componentsimport { Button } from "@/components/ui/button"import { Button } from "../../components/ui/button"Mediumhttps://ui.shadcn.com/docs/installationshadcn cli 4; base=base|radix|ariaactive2026-08-13
54ThemingUse CSS variables for colorsDefine semantic OKLCH variables in globals.css and expose them to Tailwind v4 with @theme inline:root and .dark variables plus @theme inline mappingsHardcode palette colors in components@theme inline { --color-primary: var(--primary); }bg-blue-500 text-whiteHighhttps://ui.shadcn.com/docs/themingshadcn cli 4; base=base|radix|ariaactive2026-08-13
65ThemingFollow semantic color pairsPair each semantic surface token with its foreground tokenprimary and primary-foreground; secondary and secondary-foregroundUse generic visual names that hide intent--primary and --primary-foreground--blue and --light-blueMediumhttps://ui.shadcn.com/docs/themingshadcn cli 4; base=base|radix|ariaactive2026-08-13
76ThemingSupport dark modeOverride semantic OKLCH variables under .dark for every custom theme tokenDefine complete :root and .dark semantic schemesKeep legacy space-separated HSL snippets or omit dark tokens.dark { --background: oklch(0.145 0 0); }.dark { --background: 240 10% 3.9%; }Highhttps://ui.shadcn.com/docs/dark-modeshadcn cli 4; base=base|radix|ariaactive2026-08-13
87ComponentsUse component variantsLeverage cva variants for consistent stylingUse variant prop for different stylesInline conditional classes<Button variant="destructive"><Button className={isError ? "bg-red-500" : "bg-blue-500"}>Mediumhttps://ui.shadcn.com/docs/components/buttonshadcn cli 4; base=base|radix|ariaactive2026-08-13
98ComponentsCompose with classNameAdd custom classes via className prop for overridesExtend with className for one-off customizationsModify component source directly<Button className="w-full">Edit button.tsx to add w-fullMediumhttps://ui.shadcn.com/docs/components/buttonshadcn cli 4; base=base|radix|ariaactive2026-08-13
109ComponentsUse size variants consistentlyApply size prop for consistent sizing across componentssize="sm" size="lg" for sizingMix size classes inconsistently<Button size="lg"><Button className="text-lg px-8 py-4">Mediumhttps://ui.shadcn.com/docs/components/buttonshadcn cli 4; base=base|radix|ariaactive2026-08-13
1110ComponentsPrefer compound componentsUse provided sub-components for complex UICard + CardHeader + CardContent patternSingle component with many props<Card><CardHeader><CardTitle><Card title="x" content="y" footer="z">Mediumhttps://ui.shadcn.com/docs/components/cardshadcn cli 4; base=base|radix|ariaactive2026-08-13
1211DialogUse Dialog for modal contentDialog component for overlay modal windowsDialog for confirmations forms detailsAlert for modal content<Dialog><DialogContent><Alert> styled as modalHighhttps://ui.shadcn.com/docs/components/dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
1312DialogHandle dialog state properlyUse open and onOpenChange for controlled dialogsControlled state with useStateUncontrolled with default open only<Dialog open={open} onOpenChange={setOpen}><Dialog defaultOpen={true}>Mediumhttps://ui.shadcn.com/docs/components/dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
1413DialogInclude proper dialog structureUse DialogHeader DialogTitle DialogDescriptionComplete semantic structureMissing title or description<DialogHeader><DialogTitle><DialogDescription><DialogContent><p>Content</p></DialogContent>Highhttps://ui.shadcn.com/docs/components/dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
1514SheetUse Sheet for side panelsSheet component for slide-out panels and drawersSheet for navigation filters settingsDialog for side content<Sheet side="right"><Dialog> with slide animationMediumhttps://ui.shadcn.com/docs/components/sheetshadcn cli 4; base=base|radix|ariaactive2026-08-13
1615SheetSpecify sheet sideSet side prop for sheet slide directionExplicit side="left" or side="right"Default side without consideration<Sheet><SheetContent side="left"><Sheet><SheetContent>Lowhttps://ui.shadcn.com/docs/components/sheetshadcn cli 4; base=base|radix|ariaactive2026-08-13
1716FormReact Hook Form integrationUse a native form with React Hook Form Controller and shadcn Field primitivesuseForm + Controller + FieldDepend on the retired FormField-only abstraction<Controller render={({ field }) => <Field><Input {...field}/></Field>}/><FormField control={form.control}>Highhttps://ui.shadcn.com/docs/forms/react-hook-formshadcn cli 4; base=base|radix|ariaactive2026-08-13
1817FormUse Field for input structureCompose Field Label and Control for accessible form structureField + FieldLabel + InputUnlabeled input or stale FormItem wrapper<Field><FieldLabel htmlFor='email'>Email</FieldLabel><Input id='email'/></Field><Input placeholder='Email'/>Highhttps://ui.shadcn.com/docs/components/fieldshadcn cli 4; base=base|radix|ariaactive2026-08-13
1918FormDisplay field errorsRender validation messages with FieldErrorFieldError with controller fieldState errorsUnassociated custom error text<FieldError errors={[fieldState.error]}/><span>{error.message}</span>Mediumhttps://ui.shadcn.com/docs/components/fieldshadcn cli 4; base=base|radix|ariaactive2026-08-13
2019FormUse schema validationUse a Standard Schema compatible validator such as Zod where it adds valueZod schema with resolver or form adapterAssume Zod is the only supported validatorzodResolver(formSchema)Hand-written divergent client rulesMediumhttps://ui.shadcn.com/docs/formsshadcn cli 4; base=base|radix|ariaactive2026-08-13
2120SelectUse Select for dropdownsSelect component for option selectionSelect for choosing from listNative select element<Select><SelectTrigger><SelectContent><select><option>Mediumhttps://ui.shadcn.com/docs/components/selectshadcn cli 4; base=base|radix|ariaactive2026-08-13
2221SelectStructure Select properlyInclude Trigger Value Content and ItemsComplete Select structureMissing SelectValue or SelectContent<SelectTrigger><SelectValue/></SelectTrigger><SelectContent><SelectItem><Select><option>Highhttps://ui.shadcn.com/docs/components/selectshadcn cli 4; base=base|radix|ariaactive2026-08-13
2322CommandUse Command for searchCommand component for searchable lists and palettesCommand for command palette searchInput with custom dropdown<Command><CommandInput><CommandList><Input><div className="dropdown">Mediumhttps://ui.shadcn.com/docs/components/commandshadcn cli 4; base=base|radix|ariaactive2026-08-13
2423CommandGroup command itemsUse CommandGroup for categorized itemsCommandGroup with heading for sectionsFlat list without grouping<CommandGroup heading="Suggestions"><CommandItem><CommandItem> without groupsLowhttps://ui.shadcn.com/docs/components/commandshadcn cli 4; base=base|radix|ariaactive2026-08-13
2524TableUse Table for data displayTable component for structured dataTable for tabular data displayDiv grid for table-like layouts<Table><TableHeader><TableBody><TableRow><div className="grid">Mediumhttps://ui.shadcn.com/docs/components/tableshadcn cli 4; base=base|radix|ariaactive2026-08-13
2625TableInclude proper table structureUse TableHeader TableBody TableRow TableCellSemantic table structureMissing thead or tbody<TableHeader><TableRow><TableHead><Table><TableRow> without headerHighhttps://ui.shadcn.com/docs/components/tableshadcn cli 4; base=base|radix|ariaactive2026-08-13
2726DataTableUse DataTable for complex tablesCombine Table with TanStack Table for featuresDataTable pattern for sorting filtering paginationCustom table implementationuseReactTable + Table componentsCustom sort filter pagination logicMediumhttps://ui.shadcn.com/docs/components/data-tableshadcn cli 4; base=base|radix|ariaactive2026-08-13
2827TabsUse Tabs for content switchingTabs component for tabbed interfacesTabs for related content sectionsCustom tab implementation<Tabs><TabsList><TabsTrigger><TabsContent><div onClick={() => setTab(...)}Mediumhttps://ui.shadcn.com/docs/components/tabsshadcn cli 4; base=base|radix|ariaactive2026-08-13
2928TabsSet default tab valueSpecify defaultValue for initial tabdefaultValue on Tabs componentNo default leaving first tab<Tabs defaultValue="account"><Tabs> without defaultValueLowhttps://ui.shadcn.com/docs/components/tabsshadcn cli 4; base=base|radix|ariaactive2026-08-13
3029AccordionUse Accordion for collapsibleAccordion for expandable content sectionsAccordion for FAQ settings panelsCustom collapse implementation<Accordion><AccordionItem><AccordionTrigger><div onClick={() => setOpen(!open)}>Mediumhttps://ui.shadcn.com/docs/components/accordionshadcn cli 4; base=base|radix|ariaactive2026-08-13
3130AccordionChoose accordion typeUse type="single" or type="multiple" appropriatelytype="single" for one open type="multiple" for manyDefault type without consideration<Accordion type="single" collapsible><Accordion> without typeLowhttps://ui.shadcn.com/docs/components/accordionshadcn cli 4; base=base|radix|ariaactive2026-08-13
3231ToastUse Sonner for toastsSonner integration for toast notificationstoast() from sonner for notificationsCustom toast implementationtoast("Event created")setShowToast(true)Mediumhttps://ui.shadcn.com/docs/components/sonnershadcn cli 4; base=base|radix|ariaactive2026-08-13
3332ToastAdd Toaster to layoutInclude Toaster component in root layout<Toaster /> in app layoutToaster in individual pagesapp/layout.tsx: <Toaster />page.tsx: <Toaster />Highhttps://ui.shadcn.com/docs/components/sonnershadcn cli 4; base=base|radix|ariaactive2026-08-13
3433ToastUse toast variantsApply toast.success toast.error for contextSemantic toast methodsGeneric toast for all messagestoast.success("Saved!") toast.error("Failed")toast("Saved!") toast("Failed")Mediumhttps://ui.shadcn.com/docs/components/sonnershadcn cli 4; base=base|radix|ariaactive2026-08-13
3534PopoverUse Popover for floating contentPopover for dropdown menus and floating panelsPopover for contextual actionsAbsolute positioned divs<Popover><PopoverTrigger><PopoverContent><div className="relative"><div className="absolute">Mediumhttps://ui.shadcn.com/docs/components/popovershadcn cli 4; base=base|radix|ariaactive2026-08-13
3635PopoverHandle popover alignmentUse align and side props for positioningExplicit alignment configurationDefault alignment for all<PopoverContent align="start" side="bottom"><PopoverContent>Lowhttps://ui.shadcn.com/docs/components/popovershadcn cli 4; base=base|radix|ariaactive2026-08-13
3736DropdownMenuUse DropdownMenu for actionsDropdownMenu for action lists and context menusDropdownMenu for user menu actionsPopover for action lists<DropdownMenu><DropdownMenuTrigger><DropdownMenuContent><Popover> for menu actionsMediumhttps://ui.shadcn.com/docs/components/dropdown-menushadcn cli 4; base=base|radix|ariaactive2026-08-13
3837DropdownMenuGroup menu itemsUse DropdownMenuGroup and DropdownMenuSeparatorOrganized menu with separatorsFlat list of items<DropdownMenuGroup><DropdownMenuItem><DropdownMenuSeparator><DropdownMenuItem> without organizationLowhttps://ui.shadcn.com/docs/components/dropdown-menushadcn cli 4; base=base|radix|ariaactive2026-08-13
3938TooltipUse Tooltip for hintsTooltip for icon buttons and truncated textTooltip for additional contextTitle attribute for tooltips<Tooltip><TooltipTrigger><TooltipContent><button title="Delete">Mediumhttps://ui.shadcn.com/docs/components/tooltipshadcn cli 4; base=base|radix|ariaactive2026-08-13
4039TooltipAdd TooltipProviderWrap app or section in TooltipProviderTooltipProvider at app levelTooltipProvider per tooltip<TooltipProvider><App/></TooltipProvider><Tooltip><TooltipProvider>Highhttps://ui.shadcn.com/docs/components/tooltipshadcn cli 4; base=base|radix|ariaactive2026-08-13
4140SkeletonUse Skeleton for loadingSkeleton component for loading placeholdersSkeleton matching content layoutSpinner for content loading<Skeleton className="h-4 w-[200px]"/><Spinner/> for card loadingMediumhttps://ui.shadcn.com/docs/components/skeletonshadcn cli 4; base=base|radix|ariaactive2026-08-13
4241SkeletonMatch skeleton dimensionsSize skeleton to match loaded contentSkeleton same size as expected contentGeneric skeleton size<Skeleton className="h-12 w-12 rounded-full"/><Skeleton/> without sizingMediumhttps://ui.shadcn.com/docs/components/skeletonshadcn cli 4; base=base|radix|ariaactive2026-08-13
4342AlertDialogUse AlertDialog for confirmsAlertDialog for destructive action confirmationAlertDialog for delete confirmationsDialog for confirmations<AlertDialog><AlertDialogTrigger><AlertDialogContent><Dialog> for delete confirmationHighhttps://ui.shadcn.com/docs/components/alert-dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
4443AlertDialogInclude action buttonsUse AlertDialogAction and AlertDialogCancelStandard confirm/cancel patternCustom buttons in AlertDialog<AlertDialogCancel>Cancel</AlertDialogCancel><AlertDialogAction><Button>Cancel</Button><Button>Confirm</Button>Mediumhttps://ui.shadcn.com/docs/components/alert-dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
4544SidebarUse Sidebar for navigationSidebar component for app navigationSidebar for main app navigationCustom sidebar implementation<SidebarProvider><Sidebar><SidebarContent><div className="w-64 fixed">Mediumhttps://ui.shadcn.com/docs/components/sidebarshadcn cli 4; base=base|radix|ariaactive2026-08-13
4645SidebarWrap in SidebarProviderUse SidebarProvider for sidebar state managementSidebarProvider at layout levelSidebar without provider<SidebarProvider><Sidebar></SidebarProvider><Sidebar> without providerHighhttps://ui.shadcn.com/docs/components/sidebarshadcn cli 4; base=base|radix|ariaactive2026-08-13
4746SidebarUse SidebarTriggerInclude SidebarTrigger for mobile toggleSidebarTrigger for responsive toggleCustom toggle button<SidebarTrigger/><Button onClick={() => toggleSidebar()}>Mediumhttps://ui.shadcn.com/docs/components/sidebarshadcn cli 4; base=base|radix|ariaactive2026-08-13
4847ChartUse Chart for data vizChart component with Recharts integrationChart component for dashboardsDirect Recharts without wrapper<ChartContainer config={chartConfig}><ResponsiveContainer><BarChart>Mediumhttps://ui.shadcn.com/docs/components/chartshadcn cli 4; base=base|radix|ariaactive2026-08-13
4948ChartDefine chart configCreate chartConfig for consistent themingchartConfig with color definitionsInline colors in charts{ desktop: { label: "Desktop", color: "#2563eb" } }<Bar fill="#2563eb"/>Mediumhttps://ui.shadcn.com/docs/components/chartshadcn cli 4; base=base|radix|ariaactive2026-08-13
5049ChartUse ChartTooltipApply ChartTooltip for interactive chartsChartTooltip with ChartTooltipContentRecharts Tooltip directly<ChartTooltip content={<ChartTooltipContent/>}/><Tooltip/> from rechartsLowhttps://ui.shadcn.com/docs/components/chartshadcn cli 4; base=base|radix|ariaactive2026-08-13
5150BlocksUse blocks for scaffoldingStart from shadcn blocks for common layoutsnpx shadcn@latest add dashboard-01Build dashboard from scratchnpx shadcn@latest add login-01Custom login page from scratchMediumhttps://ui.shadcn.com/blocksshadcn cli 4; base=base|radix|ariaactive2026-08-13
5251BlocksCustomize block componentsModify copied block code to fit needsEdit block files after installationUse blocks without modificationCustomize dashboard-01 layoutUse dashboard-01 as-isLowhttps://ui.shadcn.com/blocksshadcn cli 4; base=base|radix|ariaactive2026-08-13
5352A11yUse semantic componentsShadcn components have built-in ARIARely on component accessibilityOverride ARIA attributes<Button> has button role<div role="button">Highhttps://ui.shadcn.com/docs/components/buttonshadcn cli 4; base=base|radix|ariaactive2026-08-13
5453A11yMaintain focus managementDialog Sheet handle focus automaticallyLet components manage focusCustom focus handling<Dialog> traps focusdocument.querySelector().focus()Highhttps://ui.shadcn.com/docs/components/dialogshadcn cli 4; base=base|radix|ariaactive2026-08-13
5554A11yProvide labelsUse FieldLabel or an explicit accessible nameAssociate visible labels with form controlsPlaceholder as only label<FieldLabel htmlFor='email'>Email</FieldLabel><Input id='email'/><Input placeholder="Email"/>Highhttps://ui.shadcn.com/docs/components/fieldshadcn cli 4; base=base|radix|ariaactive2026-08-13
5655PerformanceImport components individuallyImport only needed componentsNamed imports from component filesImport all from indeximport { Button } from "@/components/ui/button"import { Button Card Dialog } from "@/components/ui"Mediumshadcn cli 4; base=base|radix|ariaactive2026-08-13
5756PerformanceLazy load dialogsDynamic import for heavy dialog contentReact.lazy for dialog contentImport all dialogs upfrontconst HeavyContent = lazy(() => import('./Heavy'))import HeavyContent from './Heavy'Mediumshadcn cli 4; base=base|radix|ariaactive2026-08-13
5857CustomizationExtend variants with cvaAdd new variants using class-variance-authorityExtend buttonVariants for new stylesInline classes for variantsvariants: { size: { xl: "h-14 px-8" } }className="h-14 px-8"Mediumhttps://ui.shadcn.com/docs/components/buttonshadcn cli 4; base=base|radix|ariaactive2026-08-13
5958CustomizationCreate custom componentsBuild new components following shadcn patternsUse cn() and cva for custom componentsDifferent patterns for customconst Custom = ({ className }) => <div className={cn("base" className)}>const Custom = ({ style }) => <div style={style}>Mediumshadcn cli 4; base=base|radix|ariaactive2026-08-13
6059PatternsUse asChild for Radix compositionRadix-based components support asChild for polymorphic compositionUse asChild only when the installed Radix component exposes itAssume Base UI or React Aria components share the Radix API<Button asChild><Link href="/"><Button><Link href="/"></Link></Button>Mediumhttps://ui.shadcn.com/docs/components/radix/buttonshadcn cli 4; base=radixactive2026-08-13
6160FormTanStack Form integrationUse TanStack Form field adapters with shadcn Field primitives when that form library is selectedform.Field + Field + FieldErrorApply React Hook Form Controller APIs to TanStack Form<form.Field name='email'>{field => <Field><Input value={field.state.value}/></Field>}</form.Field><Controller control={form.control}/>Highhttps://ui.shadcn.com/docs/forms/tanstack-formshadcn cli 4; base=base|radix|ariaactive2026-08-13
6261SetupSelect an explicit component baseCLI v4 supports base radix and aria; Base UI is the new-project default while existing projects retain their basePin --base in non-interactive automationInfer that an existing Radix project must migratenpx shadcn@latest init --base ariaAssume every base supports asChildHighhttps://ui.shadcn.com/docs/cli#initshadcn cli 4; base=base|radix|ariaactive2026-08-13
6362RegistryUse base and font registry item typesPublish base primitives as registry:base and fonts as registry:font so CLI v4 applies them correctlyExplicit registry item typesPublish every artifact as registry:uitype: 'registry:base' or type: 'registry:font'type: 'registry:ui' for a base definitionMediumhttps://ui.shadcn.com/docs/registry/registry-item-jsonshadcn cli 4; base=base|radix|ariaactive2026-08-13
6463RegistryInspect CLI changes before writingUse CLI v4 dry-run diff and view plus info and docs to inspect project and registry statenpx shadcn@latest add button --dry-runBlindly overwrite customized componentsnpx shadcn@latest add button --diffnpx shadcn@latest add button without reviewHighhttps://ui.shadcn.com/docs/cli#addshadcn cli 4; base=base|radix|ariaactive2026-08-13
6564RegistryInstall public GitHub registries directlyA public repository with root registry.json can be addressed as owner/repo/itemnpx shadcn@latest add owner/repo/itemRequire a separately hosted generated registrynpx shadcn@latest add acme/ui/buttonCopy raw GitHub source filesMediumhttps://ui.shadcn.com/docs/registry/getting-startedshadcn cli 4; base=base|radix|ariaactive2026-08-13
6665SetupUse CLI presets and apply workflowsUse CLI v4 preset and apply for repeatable project configurationnpx shadcn@latest preset then applyManually reproduce a saved project setupnpx shadcn@latest apply <preset>Copy configuration by handMediumhttps://ui.shadcn.com/docs/clishadcn cli 4; base=base|radix|ariaactive2026-08-13
6766RegistryKeep registry source declarationsConfigure namespaced registry URLs and required headers in components.jsonUse registries map with environment variablesHardcode private registry secrets in sourceregistries: { '@acme': { url: '${REGISTRY_URL}/{name}.json' } }Commit bearer tokensHighhttps://ui.shadcn.com/docs/registry/namespaceshadcn cli 4; base=base|radix|ariaactive2026-08-13
6867PatternsPreserve React Aria link semanticsStyle a semantic anchor with buttonVariants when navigation is intendedUse an anchor for a link and a button for an actionRender a React Aria Button that masquerades as a link<a href="/docs" className={buttonVariants()}>Docs</a><Button onPress={() => navigate('/docs')}>Docs</Button>Highhttps://ui.shadcn.com/docs/components/aria/buttonshadcn cli 4; base=ariaactive2026-08-13
6968PatternsUse render for Base UI compositionBase UI components compose another element through the render prop rather than Radix asChildUse render with the intended semantic elementPass the Radix-only asChild prop to a Base UI component<Button render={<a href="/docs" />}>Docs</Button><Button asChild><a href="/docs">Docs</a></Button>Highhttps://ui.shadcn.com/docs/components/base/buttonshadcn cli 4; base=baseactive2026-08-13