Skip to content
Back to skills

Shadcn

BSecurity

Gerencia componentes e projetos shadcn/ui, fornecendo contexto, documentação e padrões de uso para construir sistemas de design modernos.

  • 11 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
developmentgobashreactnextjsgitapi

Works with

  • cli
  • api

Security analysis

B84/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 13 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill shadcn --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Shadcn?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Shadcn
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/artubss-shadcn/badge)](https://www.skillsdirectory.com/skills/artubss-shadcn)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: shadcn
description: Gerencia componentes e projetos shadcn/ui, fornecendo contexto, documentação e padrões de uso para construir sistemas de design modernos.
user-invocable: false
risk: safe
source: https://github.com/shadcn-ui/ui/tree/main/skills/shadcn
date_added: "2026-03-07"
---

# shadcn/ui

Um framework para construir UI, componentes e sistemas de design. Componentes são adicionados como código-fonte ao projeto do usuário via CLI.

> **IMPORTANTE:** Execute todos os comandos da CLI usando o executor de pacotes do projeto: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, ou `bunx --bun shadcn@latest` — baseado no `packageManager` do projeto. Os exemplos abaixo usam `npx shadcn@latest`, mas substitua pelo executor correto do projeto.

## Quando Usar
- Use ao adicionar novos componentes do shadcn/ui ou registros da comunidade.
- Use ao estilizar, compor ou depurar componentes shadcn/ui existentes.
- Use ao inicializar um novo projeto ou alternar presets do sistema de design.
- Use para recuperar documentação de componentes, exemplos e referências de API.

## Contexto Atual do Projeto

```json
!`npx shadcn@latest info --json 2>/dev/null || echo '{"error": "No shadcn project found. Run shadcn init first."}'`
```

O JSON acima contém a config do projeto e componentes instalados. Use `npx shadcn@latest docs <component>` para obter documentação e URLs de exemplos para qualquer componente.

## Princípios

1. **Use componentes existentes primeiro.** Use `npx shadcn@latest search` para verificar registros antes de escrever UI personalizada. Verifique registros da comunidade também.
2. **Componha, não reinvente.** Página de configurações = Tabs + Card + controles de formulário. Dashboard = Sidebar + Card + Chart + Table.
3. **Use variantes built-in antes de estilos customizados.** `variant="outline"`, `size="sm"`, etc.
4. **Use cores semânticas.** `bg-primary`, `text-muted-foreground` — nunca valores brutos como `bg-blue-500`.

## Regras Críticas

Estas regras são **sempre aplicadas**. Cada uma link para um arquivo com pares de código Incorreto/Correto.

### Estilos & Tailwind → [styling.md](./rules/styling.md)

- **`className` para layout, não para estilos.** Nunca sobrescreva cores ou tipografia de componentes.
- **Sem `space-x-*` ou `space-y-*`.** Use `flex` com `gap-*`. Para pilhas verticais, `flex flex-col gap-*`.
- **Use `size-*` quando largura e altura são iguais.** `size-10` não `w-10 h-10`.
- **Use atalho `truncate`.** Não `overflow-hidden text-ellipsis whitespace-nowrap`.
- **Sem sobrescrita manual de cores `dark:`.** Use tokens semânticos (`bg-background`, `text-muted-foreground`).
- **Use `cn()` para classes condicionais.** Não escreva ternários com template literal manual.
- **Sem `z-index` manual em componentes de sobreposição.** Dialog, Sheet, Popover, etc. tratam seu próprio empilhamento.

### Formulários & Inputs → [forms.md](./rules/forms.md)

- **Formulários usam `FieldGroup` + `Field`.** Nunca use `div` bruto com `space-y-*` ou `grid gap-*` para layout de formulário.
- **`InputGroup` usa `InputGroupInput`/`InputGroupTextarea`.** Nunca `Input`/`Textarea` bruto dentro de `InputGroup`.
- **Botões dentro de inputs usam `InputGroup` + `InputGroupAddon`.**
- **Conjuntos de opções (2–7 escolhas) usam `ToggleGroup`.** Não faça loop `Button` com estado ativo manual.
- **`FieldSet` + `FieldLegend` para agrupar checkboxes/radios relacionados.** Não use `div` com heading.
- **Validação de Field usa `data-invalid` + `aria-invalid`.** `data-invalid` em `Field`, `aria-invalid` no controle. Para desabilitado: `data-disabled` em `Field`, `disabled` no controle.

### Estrutura de Componentes → [composition.md](./rules/composition.md)

- **Items sempre dentro de seu Group.** `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`.
- **Use `asChild` (radix) ou `render` (base) para triggers customizados.** Verifique campo `base` de `npx shadcn@latest info`. → [base-vs-radix.md](./rules/base-vs-radix.md)
- **Dialog, Sheet e Drawer sempre precisam de Title.** `DialogTitle`, `SheetTitle`, `DrawerTitle` obrigatórios para acessibilidade. Use `className="sr-only"` se oculto visualmente.
- **Use composição completa de Card.** `CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`. Não despeje tudo em `CardContent`.
- **Button não possui `isPending`/`isLoading`.** Componha com `Spinner` + `data-icon` + `disabled`.
- **`TabsTrigger` deve estar dentro de `TabsList`.** Nunca renderize triggers diretamente em `Tabs`.
- **`Avatar` sempre precisa de `AvatarFallback`.** Para quando a imagem falhar ao carregar.

### Use Componentes, Não Markup Customizado → [composition.md](./rules/composition.md)

- **Use componentes existentes antes de markup customizado.** Verifique se um componente existe antes de escrever uma `div` estilizada.
- **Callouts usam `Alert`.** Não construa divs estilizados customizados.
- **Estados vazios usam `Empty`.** Não construa markup de estado vazio customizado.
- **Toast via `sonner`.** Use `toast()` do `sonner`.
- **Use `Separator`** em vez de `<hr>` ou `<div className="border-t">`.
- **Use `Skeleton`** para placeholders de loading. Sem divs customizados `animate-pulse`.
- **Use `Badge`** em vez de spans estilizados customizados.

### Ícones → [icons.md](./rules/icons.md)

- **Ícones em `Button` usam `data-icon`.** `data-icon="inline-start"` ou `data-icon="inline-end"` no ícone.
- **Sem classes de dimensionamento em ícones dentro de componentes.** Componentes tratam dimensionamento de ícone via CSS. Sem `size-4` ou `w-4 h-4`.
- **Passe ícones como objetos, não como chaves string.** `icon={CheckIcon}`, não uma busca de string.

### CLI

- **Nunca decodifique ou busque códigos preset manualmente.** Passe-os diretamente para `npx shadcn@latest init --preset <code>`.

## Padrões-Chave

Estes são os padrões mais comuns que diferenciam código correto em shadcn/ui. Para casos extremos, veja os arquivos de regras linkados acima.

```tsx
// Layout de formulário: FieldGroup + Field, não div + Label.
<FieldGroup>
  <Field>
    <FieldLabel htmlFor="email">Email</FieldLabel>
    <Input id="email" />
  </Field>
</FieldGroup>

// Validação: data-invalid em Field, aria-invalid no controle.
<Field data-invalid>
  <FieldLabel>Email</FieldLabel>
  <Input aria-invalid />
  <FieldDescription>Email inválido.</FieldDescription>
</Field>

// Ícones em botões: data-icon, sem classes de dimensionamento.
<Button>
  <SearchIcon data-icon="inline-start" />
  Buscar
</Button>

// Espaçamento: gap-*, não space-y-*.
<div className="flex flex-col gap-4">  // correto
<div className="space-y-4">           // errado

// Dimensões iguais: size-*, não w-* h-*.
<Avatar className="size-10">   // correto
<Avatar className="w-10 h-10"> // errado

// Cores de status: variantes Badge ou tokens semânticos, não cores brutas.
<Badge variant="secondary">+20.1%</Badge>    // correto
<span className="text-emerald-600">+20.1%</span> // errado
```

## Seleção de Componentes

| Necessidade                | Use                                                                                                 |
| -------------------------- | --------------------------------------------------------------------------------------------------- |
| Botão/ação                 | `Button` com variante apropriada                                                                   |
| Inputs de formulário       | `Input`, `Select`, `Combobox`, `Switch`, `Checkbox`, `RadioGroup`, `Textarea`, `InputOTP`, `Slider` |
| Alternar entre 2–5 opções  | `ToggleGroup` + `ToggleGroupItem`                                                                  |
| Exibição de dados          | `Table`, `Card`, `Badge`, `Avatar`                                                                 |
| Navegação                  | `Sidebar`, `NavigationMenu`, `Breadcrumb`, `Tabs`, `Pagination`                                    |
| Sobreposições              | `Dialog` (modal), `Sheet` (painel lateral), `Drawer` (folha inferior), `AlertDialog` (confirmação)  |
| Feedback                   | `sonner` (toast), `Alert`, `Progress`, `Skeleton`, `Spinner`                                       |
| Paleta de comando          | `Command` dentro de `Dialog`                                                                       |
| Gráficos                   | `Chart` (encapsula Recharts)                                                                       |
| Layout                     | `Card`, `Separator`, `Resizable`, `ScrollArea`, `Accordion`, `Collapsible`                         |
| Estados vazios             | `Empty`                                                                                             |
| Menus                      | `DropdownMenu`, `ContextMenu`, `Menubar`                                                           |
| Tooltips/info              | `Tooltip`, `HoverCard`, `Popover`                                                                  |

## Campos-Chave

O contexto do projeto injetado contém estes campos-chave:

- **`aliases`** → use o prefixo de alias real para imports (ex: `@/`, `~/`), nunca codifique.
- **`isRSC`** → quando `true`, componentes usando `useState`, `useEffect`, manipuladores de eventos ou APIs do navegador precisam de `"use client"` no topo do arquivo. Sempre referencie este campo ao aconselhar sobre a diretiva.
- **`tailwindVersion`** → `"v4"` usa blocos `@theme inline`; `"v3"` usa `tailwind.config.js`.
- **`tailwindCssFile`** → o arquivo CSS global onde variáveis CSS customizadas são definidas. Sempre edite este arquivo, nunca crie um novo.
- **`style`** → tratamento visual do componente (ex: `nova`, `vega`).
- **`base`** → biblioteca primitiva (`radix` ou `base`). Afeta APIs de componentes e props disponíveis.
- **`iconLibrary`** → determina imports de ícone. Use `lucide-react` para `lucide`, `@tabler/icons-react` para `tabler`, etc. Nunca assuma `lucide-react`.
- **`resolvedPaths`** → destinos exatos no sistema de arquivos para componentes, utils, hooks, etc.
- **`framework`** → roteamento e convenções de arquivo (ex: Next.js App Router vs Vite SPA).
- **`packageManager`** → use isto para qualquer instalação de dependência não-shadcn (ex: `pnpm add date-fns` vs `npm install date-fns`).

Veja [cli.md — `info` command](./cli.md) para referência completa de campos.

## Documentação, Exemplos e Uso de Componentes

Execute `npx shadcn@latest docs <component>` para obter as URLs para documentação, exemplos e referência de API de um componente. Busque estas URLs para obter o conteúdo real.

```bash
npx shadcn@latest docs button dialog select
```

**Ao criar, corrigir, depurar ou usar um componente, sempre execute `npx shadcn@latest docs` e busque as URLs primeiro.** Isto garante que você está trabalhando com a API correta e padrões de uso em vez de adivinhar.

## Workflow

1. **Obtenha contexto do projeto** — já injetado acima. Execute `npx shadcn@latest info` novamente se precisar atualizar.
2. **Verifique componentes instalados primeiro** — antes de executar `add`, sempre verifique a lista `components` do contexto do projeto ou liste o diretório `resolvedPaths.ui`. Não importe componentes que não foram adicionados, e não re-adicione os já instalados.
3. **Encontre componentes** — `npx shadcn@latest search`.
4. **Obtenha docs e exemplos** — execute `npx shadcn@latest docs <component>` para obter URLs, depois busque-as. Use `npx shadcn@latest view` para navegar itens de registro que você não instalou. Para visualizar alterações em componentes instalados, use `npx shadcn@latest add --diff`.
5. **Instale ou atualize** — `npx shadcn@latest add`. Ao atualizar componentes existentes, use `--dry-run` e `--diff` para visualizar alterações primeiro (veja [Atualizando Componentes](#atualizando-componentes) abaixo).
6. **Corrija imports em componentes de terceiros** — Após adicionar componentes de registros da comunidade (ex: `@bundui`, `@magicui`), verifique os arquivos não-UI adicionados para caminhos de import codificados como `@/components/ui/...`. Estes não corresponderão aos aliases reais do projeto. Use `npx shadcn@latest info` para obter o alias `ui` correto (ex: `@workspace/ui/components`) e reescreva os imports accordingly. A CLI reescreve imports para seus próprios arquivos de UI, mas componentes de registro de terceiros podem usar caminhos padrão que não correspondem ao projeto.
7. **Analise componentes adicionados** — Após adicionar um componente ou bloco de qualquer registro, **sempre leia os arquivos adicionados e verifique se estão corretos**. Verifique sub-componentes faltantes (ex: `SelectItem` sem `SelectGroup`), imports faltando, composição incorreta, ou violações das [Regras Críticas](#regras-críticas). Também substitua qualquer import de ícone pela `iconLibrary` do projeto a partir do contexto do projeto (ex: se o item de registro usa `lucide-react` mas o projeto usa `hugeicons`, troque os imports e nomes de ícone accordingly). Corrija todos os problemas antes de prosseguir.
8. **Registro deve ser explícito** — Quando o usuário pedir para adicionar um bloco ou componente, **não adivinhe o registro**. Se nenhum registro for especificado (ex: usuário diz "adicione um bloco de login" sem especificar `@shadcn`, `@tailark`, etc.), pergunta qual registro usar. Nunca padrão para um registro em nome do usuário.
9. **Alternando presets** — Pergunte ao usuário primeiro: **reinstalar**, **mesclar**, ou **pular**?
   - **Reinstalar**: `npx shadcn@latest init --preset <code> --force --reinstall`. Sobrescreve todos os componentes.
   - **Mesclar**: `npx shadcn@latest init --preset <code> --force --no-reinstall`, depois execute `npx shadcn@latest info` para listar componentes instalados, depois para cada componente instalado use `--dry-run` e `--diff` para [mesclar inteligentemente](#atualizando-componentes) individualmente.
   - **Pular**: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Apenas atualiza config e CSS, deixa componentes como estão.

## Atualizando Componentes

Quando o usuário pede para atualizar um componente da upstream mantendo suas alterações locais, use `--dry-run` e `--diff` para mesclar inteligentemente. **NUNCA busque arquivos brutos do GitHub manualmente — sempre use a CLI.**

1. Execute `npx shadcn@latest add <component> --dry-run` para ver todos os arquivos que seriam afetados.
2. Para cada arquivo, execute `npx shadcn@latest add <component> --diff <file>` para ver o que mudou na upstream vs local.
3. Decida por arquivo baseado no diff:
   - Sem alterações locais → seguro sobrescrever.
   - Tem alterações locais → leia o arquivo local, analise o diff, e aplique atualizações da upstream enquanto preserva modificações locais.
   - Usuário diz "apenas atualize tudo" → use `--overwrite`, mas confirme primeiro.
4. **Nunca use `--overwrite` sem aprovação explícita do usuário.**

## Referência Rápida

```bash
# Crie um novo projeto.
npx shadcn@latest init --name my-app --preset base-nova
npx shadcn@latest init --name my-app --preset a2r6bw --template vite

# Crie um projeto monorepo.
npx shadcn@latest init --name my-app --preset base-nova --monorepo
npx shadcn@latest init --name my-app --preset base-nova --template next --monorepo

# Inicialize projeto existente.
npx shadcn@latest init --preset base-nova
npx shadcn@latest init --defaults  # atalho: --template=next --preset=base-nova

# Adicione componentes.
npx shadcn@latest add button card dialog
npx shadcn@latest add @magicui/shimmer-button
npx shadcn@latest add --all

# Visualize alterações antes de adicionar/atualizar.
npx shadcn@latest add button --dry-run
npx shadcn@latest add button --diff button.tsx
npx shadcn@latest add @acme/form --view button.tsx

# Pesquise registros.
npx shadcn@latest search @shadcn -q "sidebar"
npx shadcn@latest search @tailark -q "stats"

# Obtenha docs e URLs de exemplos de componentes.
npx shadcn@latest docs button dialog select

# Veja detalhes de item de registro (para itens ainda não instalados).
npx shadcn@latest view @shadcn/button
```

**Presets nomeados:** `base-nova`, `radix-nova`
**Templates:** `next`, `vite`, `start`, `react-router`, `astro` (todos suportam `--monorepo`) e `laravel` (não suportado para monorepo)
**Códigos de preset:** Strings Base62 começando com `a` (ex: `a2r6bw`), de [ui.shadcn.com](https://ui.shadcn.com).

## Referências Detalhadas

- [rules/forms.md](./rules/forms.md) — FieldGroup, Field, InputGroup, ToggleGroup, FieldSet, validation states
- [rules/composition.md](./rules/composition.md) — Groups, overlays, Card, Tabs, Avatar, Alert, Empty, Toast, Separator, Skeleton, Badge, Button loading
- [rules/icons.md](./rules/icons.md) — data-icon, icon sizing, passing icons as objects
- [rules/styling.md](./rules/styling.md) — Semantic colors, variants, className, spacing, size, truncate, dark mode, cn(), z-index
- [rules/base-vs-radix.md](./rules/base-vs-radix.md) — asChild vs render, Select, ToggleGroup, Slider, Accordion
- [cli.md](./cli.md) — Commands, flags, presets, templates
- [customization.md](./customization.md) — Theming, CSS variables, extending components

Files in this skill

  • SKILL.md17 KB
  • agents/openai.yml238 B
  • assets/shadcn-small.png1 KB
  • assets/shadcn.png3.8 KB
  • cli.md14.6 KB
  • customization.md5.8 KB
  • evals/evals.json3 KB
  • mcp.md2.3 KB
  • rules/base-vs-radix.md6.8 KB
  • rules/composition.md4.2 KB
  • rules/forms.md4.7 KB
  • rules/icons.md1.9 KB
  • rules/styling.md3.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…