AgentSkillsCN

shadcn-components

shadcn/ui 的组件模式,同时涵盖 Radix UI 和 Base UI 原语。包括 API 差异、原语映射及正确使用模式。

SKILL.md
--- frontmatter
name: shadcn-components
description: Component patterns for shadcn/ui with both Radix UI and Base UI primitives. Covers API differences, mapping between primitives, and correct usage patterns.
versions:
  shadcn-ui: "2.x"
  radix-ui: "1.x"
  base-ui: "1.x"
user-invocable: true
allowed-tools: Read, Write, Edit, Glob, Grep, Task, mcp__shadcn__search_items_in_registries, mcp__shadcn__view_items_in_registries, mcp__shadcn__get_item_examples_from_registries, mcp__shadcn__get_add_command_for_items
references: references/radix-components.md, references/baseui-components.md, references/templates/dialog-example.md
related-skills: shadcn-detection, shadcn-registries

shadcn Components

Agent Workflow (MANDATORY)

Before component work, use TeamCreate to spawn agents:

  1. fuse-ai-pilot:explore-codebase - Find existing components
  2. fuse-ai-pilot:research-expert - Verify component APIs via Context7
  3. mcp__shadcn__search_items_in_registries - Search available components

After: Run fuse-ai-pilot:sniper for validation.


Overview

FeatureDescription
Radix primitivesDefault shadcn/ui since 2021
Base UI primitivesNew option since late 2025
Component mapping1:1 mapping between both
API differencesasChild vs render, naming

Critical Rules

  1. ALWAYS detect primitive before component work (shadcn-detection)
  2. ALWAYS consult MCP before adding any component
  3. NEVER mix Radix and Base UI APIs in same component
  4. MATCH composition pattern to detected primitive
  5. USE registry source as truth, not manual code

Architecture

code
components/ui/
├── dialog.tsx          # Adapted to detected primitive
├── select.tsx
├── accordion.tsx
└── ...

-> See dialog-example.md for complete component


MCP Usage (MANDATORY)

ALWAYS consult shadcn MCP before adding components:

code
mcp__shadcn__search_items_in_registries -> find component
mcp__shadcn__view_items_in_registries   -> view source
mcp__shadcn__get_add_command_for_items  -> get install command

Component Mapping Table

ComponentRadix PartBase UI Part
DialogDialogContentDialog.Popup
DialogDialogOverlayDialog.Backdrop
SelectSelectContentSelect.Positioner + Select.Popup
TooltipTooltipContentTooltip.Positioner + Tooltip.Popup
AccordionAccordionContentAccordion.Panel
PopoverPopoverContentPopover.Positioner + Popover.Popup
MenuDropdownMenuContentMenu.Positioner + Menu.Popup

Composition Patterns

Radix: asChild

tsx
<Dialog.Trigger asChild>
  <Button variant="outline">Open</Button>
</Dialog.Trigger>

Base UI: render

tsx
<Dialog.Trigger render={<Button variant="outline" />}>
  Open
</Dialog.Trigger>

Reference Guide

Concepts

TopicReferenceWhen to Consult
Radix APIsradix-components.mdBuilding with Radix primitives
Base UI APIsbaseui-components.mdBuilding with Base UI primitives

Templates

TemplateWhen to Use
dialog-example.mdCreating Dialog components

Best Practices

DO

  • Detect primitive FIRST (use shadcn-detection)
  • Consult MCP for component source before editing
  • Follow existing naming conventions in project
  • Use correct composition pattern for detected primitive

DON'T

  • Mix asChild and render in same component
  • Assume Radix without detection
  • Manually write component internals (use MCP)
  • Skip registry check before adding new components