shadcn-uilisted
Install: claude install-skill vadimgaidai/react-feature-kit
# shadcn/ui + Tailwind
## Use a primitive before writing one
1. Does an installed primitive already cover this? Use it directly (`@/shared/ui/[name]` or wherever the project keeps them) — import the module, not a barrel.
2. Not installed? Search the registry with the `shadcn` MCP server and add it with the CLI. Don't hand-roll a Dialog.
3. Wrapping a primitive? Extend its prop type via `ComponentProps<typeof X>` and forward `...rest` — see [references/extending-components.md](references/extending-components.md).
4. Two or more tightly coupled sub-components? Compound Component Pattern with a `.Root` — see [references/compound-component.md](references/compound-component.md).
5. Otherwise one exported component per file, props as an interface.
## Styling
- **Semantic tokens only** — `bg-background`, `text-foreground`, `border-border`, `text-muted-foreground`. Never a raw hex, never an arbitrary value where a token exists.
- **No `dark:` overrides in components.** Dark mode is a token-layer concern; a `dark:` in a component means the token set is wrong. Fix the tokens (see the `theme-sync` agent), not the component.
- **`size-*` when width equals height** — `size-4`, not `h-4 w-4`.
- **`gap-*` over `space-y/x-*`** — space utilities break on wrapping and on flex direction changes.
- `className` on an exported component is for **layout positioning only** (margins, grid placement). Anything else belongs inside the component or in a variant.
- Spacing and sizes come from the Tai