name: add-shadcn-component description: Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens
Add shadcn Component
Add one or more shadcn/ui components, then replace any generated “design system” color utility classes with Scaffa’s Tailwind theme tokens.
Usage
/add-shadcn-component <component...>
Example:
/add-shadcn-component button dropdown-menu dialog
Prerequisites (assumed)
- shadcn is initialized for the renderer and
src/renderer/components.jsonexists (assume true; do not check). - The renderer theme tokens are defined in
src/renderer/styles.css(Tailwind v4@themetokens).
If shadcn is not initialized yet, STOP and ask the user to run init first.
What This Skill Does
- Adds shadcn components using
pnpm dlx … add <componentList> - Identifies the files that were created/modified
- Rewrites generated Tailwind color classes to Scaffa theme tokens (surfaces/fg/border/focus/selected/etc.)
- Runs a build to verify TypeScript + CSS compilation
- Lands the change (commit +
bd sync+ push), respecting the repo workflow
Instructions
You MUST follow these steps in order.
Phase 1: Add the component(s)
-
Run shadcn from the same folder as
src/renderer/components.json:pushd src/renderer -
While still in
src/renderer, add the requested components.Preferred (explicit) command:
pnpm dlx shadcn@latest add <component...>If this repo’s shadcn init documented a shorter alias (e.g.
pnpm dlx add ...), use the repo’s convention instead, but keep the semantics identical: “run shadcn add for these components”. -
Return to the repo root:
popd -
Capture what changed:
git status --porcelain
Phase 2: Normalize generated colors to Scaffa theme tokens
Scaffa’s renderer uses Tailwind v4 theme tokens defined in src/renderer/styles.css (e.g. bg-surface-panel, bg-surface-card, bg-surface-overlay, text-fg-muted, border-default, ring-focus, bg-selected, etc).
The shadcn generator commonly emits palette tokens like bg-background, text-foreground, border-border, ring-ring, bg-primary, text-muted-foreground, etc. Those MUST be replaced with Scaffa tokens.
Prefer Scaffa’s surface role tokens over numeric surface levels:
bg-surface-app,bg-surface-panel,bg-surface-pane(reserved; currently aliases panel),bg-surface-card,bg-surface-overlay,bg-surface-inset- For text/borders/rings, keep using
text-fg*,border-*,ring-focus, etc.
2.1 Required mapping (default)
Use this mapping as the baseline. Adjust only if the component semantics demand it.
-
Backgrounds
bg-background→bg-surface-appbg-card→bg-surface-cardbg-popover→bg-surface-overlaybg-muted→bg-surface-insetbg-accent→bg-hoverbg-primary→bg-selectedbg-secondary→bg-surface-cardbg-destructive→bg-danger
-
Text
text-foreground→text-fgtext-muted-foreground→text-fg-mutedtext-popover-foreground→text-fgtext-card-foreground→text-fgtext-primary-foreground→text-selected-fgtext-secondary-foreground→text-fgtext-accent-foreground→text-fgtext-destructive-foreground→text-fg-inversetext-destructive→text-danger
-
Borders
border-border→border-defaultborder-input→border-defaultborder-ring→border-focusborder-destructive→border-danger
-
Rings / focus
ring-ring→ring-focusoutline-ring→outline-focus
For common shadcn focus patterns:
focus-visible:ring-ring→focus-visible:ring-focusfocus-visible:ring-offset-background→focus-visible:ring-offset-surface-app
If you encounter shadcn tokens not covered above (e.g. bg-input, text-primary, etc.), prefer mapping them to the closest Scaffa semantic token from src/renderer/styles.css rather than introducing a new color.
2.2 How to apply the mapping safely
- Find newly added/modified component files (from
git status). - Search within those files for shadcn palette tokens:
rg -n \"bg-(background|card|popover|muted|accent|primary|secondary|destructive)|text-(foreground|muted-foreground|popover-foreground|card-foreground|primary-foreground|secondary-foreground|accent-foreground|destructive(-foreground)?)|border-(border|input|ring|destructive)|ring-ring|ring-offset-background|outline-ring\" <file-or-folder> - Replace only the color tokens. Do not “re-style” spacing, sizing, or layout unless necessary for compile or obvious correctness.
- After edits, re-run the search to ensure no shadcn palette tokens remain in the touched files.
Phase 3: Verify
Run a production build:
pnpm build
Phase 4: Landing protocol
-
Stage changes:
git add <files> -
Commit code changes (do NOT include
.beads/issues.jsonl):git commit -m \"feat(ui): add shadcn <components> (Scaffa theme)\" -
Persist beads updates (if any) and push:
git pull --rebase # If this session is explicitly "no beads", skip `bd sync`. bd sync git push git status # MUST show up to date
Notes / Gotchas
- This repo uses Tailwind v4
@themetokens; preferbg-surface-*,text-fg*,border-*,ring-focus,bg-selected, etc over shadcn’s palette tokens. - Prefer surface roles (
bg-surface-app/panel/card/overlay/inset) over numeric surface levels (bg-surface-0..3) when choosing container backgrounds. - If a generated component requires additional tokens not in the Scaffa theme, file a ticket instead of inventing new one-off colors inside components.