Shadcn Ui

by jezweb64965d9d9fc7No license1K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 3 days ago

Install and configure shadcn/ui components for React projects. Guides component selection, installation order, dependency management, customisation with semantic tokens, and common UI recipes (forms, data tables, navigation, modals). Use after tailwind-theme-builder has set up the theme infrastructure, when adding components, building forms, creating data tables, or setting up navigation.

Instructions onlySoftware Development
AI-generated overview

Installs and customises shadcn/ui components in themed React projects, with dependency order and UI recipes.

What it does
This skill guides adding shadcn/ui components to a React project whose theme infrastructure already exists. It specifies installation order for foundation and feature components, lists external dependencies, documents common gotchas, and explains customisation through semantic CSS tokens. It also points to reference files with a component catalogue and complete UI recipes such as forms, data tables, modals and navigation.
When to use it
Use it when adding shadcn/ui components to a themed React project, building forms, creating data tables, or setting up navigation. It is intended to run after theme infrastructure such as CSS variables, components.json and the cn() utility are in place.
Requirements
Requires a React project with existing theme infrastructure (CSS variables, components.json, cn() utility) and a package manager such as pnpm. Components pull in external packages including react-hook-form, zod, @hookform/resolvers, sonner, @tanstack/react-table, cmdk and optionally date-fns. Ships no scripts; instructions and reference documents only.

shadcn/ui Components

Add shadcn/ui components to a themed React project. This skill runs AFTER tailwind-theme-builder has set up CSS variables, ThemeProvider, and dark mode. It handles component installation, customisation, and combining components into working patterns.

Prerequisite: Theme infrastructure must exist (CSS variables, components.json, cn() utility). Use tailwind-theme-builder first if not set up.

Installation Order

Install components in dependency order. Foundation components first, then feature components:

Foundation (install first)

bash
pnpm dlx shadcn@latest add buttonpnpm dlx shadcn@latest add input labelpnpm dlx shadcn@latest add card

Feature Components (install as needed)

bash
# Formspnpm dlx shadcn@latest add form        # needs: react-hook-form, zod, @hookform/resolverspnpm dlx shadcn@latest add textarea select checkbox switch
# Feedbackpnpm dlx shadcn@latest add toast        # needs: sonnerpnpm dlx shadcn@latest add alert badge
# Overlaypnpm dlx shadcn@latest add dialog sheet popover dropdown-menu
# Data Displaypnpm dlx shadcn@latest add table        # for data tables, also: @tanstack/react-tablepnpm dlx shadcn@latest add tabs separator avatar
# Navigationpnpm dlx shadcn@latest add navigation-menu command

External Dependencies

ComponentRequires
Formreact-hook-form, zod, @hookform/resolvers
Toastsonner
Data Table@tanstack/react-table
Commandcmdk
Date Pickerdate-fns (optional)

Install external deps separately: pnpm add react-hook-form zod @hookform/resolvers

Known Gotchas

These are documented corrections that prevent common bugs:

Radix Select — No Empty Strings

tsx
// Don't use empty string values<SelectItem value="">All</SelectItem>           // BREAKS
// Use sentinel value<SelectItem value="__any__">All</SelectItem>    // WORKSconst actual = value === "__any__" ? "" : value

React Hook Form — Null Values

tsx
// Don't spread {...field} — it passes null which Input rejects<Input  value={field.value ?? ''}  onChange={field.onChange}  onBlur={field.onBlur}  name={field.name}  ref={field.ref}/>

Lucide Icons — Tree-Shaking

tsx
// Don't use dynamic import — icons get tree-shaken in productionimport * as LucideIcons from 'lucide-react'const Icon = LucideIcons[iconName]  // BREAKS in prod
// Use explicit mapimport { Home, Users, Settings, type LucideIcon } from 'lucide-react'const ICON_MAP: Record<string, LucideIcon> = { Home, Users, Settings }const Icon = ICON_MAP[iconName]

Dialog Width Override

tsx
// Default sm:max-w-lg won't be overridden by max-w-6xl<DialogContent className="max-w-6xl">       // DOESN'T WORK
// Use same breakpoint prefix<DialogContent className="sm:max-w-6xl">    // WORKS

Customising Components

shadcn components use semantic CSS tokens from your theme. To customise:

Variant extension

Add custom variants by editing the component file in src/components/ui/:

tsx
// button.tsx — add a "brand" variantconst buttonVariants = cva("...", {  variants: {    variant: {      default: "bg-primary text-primary-foreground",      brand: "bg-brand text-brand-foreground hover:bg-brand/90",      // ... existing variants    },  },})

Colour overrides

Use semantic tokens from your theme — never raw Tailwind colours:

tsx
// Don't use raw colours<Button className="bg-blue-500">             // WRONG
// Use semantic tokens<Button className="bg-primary">              // RIGHT<Card className="bg-card text-card-foreground">  // RIGHT

Workflow

Step 1: Assess Needs

Determine what UI patterns the project needs:

NeedComponents
Forms with validationForm, Input, Label, Select, Textarea, Button, Toast
Data display with sortingTable, Badge, Pagination
Admin CRUD interfaceDialog, Form, Table, Button, Toast
Marketing/landing pageCard, Button, Badge, Separator
Settings/preferencesTabs, Form, Switch, Select, Toast
NavigationNavigationMenu (desktop), Sheet (mobile), ModeToggle

Step 2: Install Components

Install foundation first, then feature components for the identified needs. Use the commands above.

Step 3: Build Recipes

Combine components into working patterns. See references/recipes.md [blocked] for complete working examples:

  • Contact Form — Form + Input + Textarea + Button + Toast
  • Data Table — Table + Column sorting + Pagination + Search
  • Modal CRUD — Dialog + Form + Button
  • Navigation — Sheet + NavigationMenu + ModeToggle
  • Settings Page — Tabs + Form + Switch + Select + Toast

Step 4: Customise

Apply project-specific colours and variants using semantic tokens from the theme.

Reference Files

WhenRead
Choosing components, install commands, propsreferences/component-catalogue.md [blocked]
Building complete UI patternsreferences/recipes.md [blocked]

Source and attribution

Source:jezweb/claude-skillsinplugins/frontend/skills/shadcn-uiat commit64965d9

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal