Claude-skill-registry add-shadcn-component
Add shadcn/ui components via pnpm dlx, then normalize generated Tailwind color classes to Scaffa theme tokens
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/add-shadcn-component" ~/.claude/skills/majiayu000-claude-skill-registry-add-shadcn-component && rm -rf "$T"
skills/data/add-shadcn-component/SKILL.mdAdd 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
exists (assume true; do not check).src/renderer/components.json - The renderer theme tokens are defined in
(Tailwind v4src/renderer/styles.css
tokens).@theme
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 +
+ push), respecting the repo workflowbd sync
Instructions
You MUST follow these steps in order.
Phase 1: Add the component(s)
-
Run shadcn from the same folder as
:src/renderer/components.jsonpushd src/renderer -
While still in
, add the requested components.src/rendererPreferred (explicit) command:
pnpm dlx shadcn@latest add <component...>If this repo’s shadcn init documented a shorter alias (e.g.
), use the repo’s convention instead, but keep the semantics identical: “run shadcn add for these components”.pnpm dlx add ... -
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
(reserved; currently aliases panel),bg-surface-pane
,bg-surface-card
,bg-surface-overlaybg-surface-inset- For text/borders/rings, keep using
,text-fg*
,border-*
, etc.ring-focus
2.1 Required mapping (default)
Use this mapping as the baseline. Adjust only if the component semantics demand it.
-
Backgrounds
→bg-backgroundbg-surface-app
→bg-cardbg-surface-card
→bg-popoverbg-surface-overlay
→bg-mutedbg-surface-inset
→bg-accentbg-hover
→bg-primarybg-selected
→bg-secondarybg-surface-card
→bg-destructivebg-danger
-
Text
→text-foregroundtext-fg
→text-muted-foregroundtext-fg-muted
→text-popover-foregroundtext-fg
→text-card-foregroundtext-fg
→text-primary-foregroundtext-selected-fg
→text-secondary-foregroundtext-fg
→text-accent-foregroundtext-fg
→text-destructive-foregroundtext-fg-inverse
→text-destructivetext-danger
-
Borders
→border-borderborder-default
→border-inputborder-default
→border-ringborder-focus
→border-destructiveborder-danger
-
Rings / focus
→ring-ringring-focus
→outline-ringoutline-focus
For common shadcn focus patterns:
→focus-visible:ring-ringfocus-visible:ring-focus
→focus-visible:ring-offset-backgroundfocus-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.jsonlgit 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
tokens; prefer@theme
,bg-surface-*
,text-fg*
,border-*
,ring-focus
, etc over shadcn’s palette tokens.bg-selected - Prefer surface roles (
) over numeric surface levels (bg-surface-app/panel/card/overlay/inset
) when choosing container backgrounds.bg-surface-0..3 - If a generated component requires additional tokens not in the Scaffa theme, file a ticket instead of inventing new one-off colors inside components.