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
!`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
- Use componentes existentes primeiro. Use
npx shadcn@latest search para verificar registros antes de escrever UI personalizada. Verifique registros da comunidade também.
- Componha, não reinvente. Página de configurações = Tabs + Card + controles de formulário. Dashboard = Sidebar + Card + Chart + Table.
- Use variantes built-in antes de estilos customizados.
variant="outline", size="sm", etc.
- 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
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
- 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.
- 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
- 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
- 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 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.
// 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 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.
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
- Obtenha contexto do projeto — já injetado acima. Execute
npx shadcn@latest info novamente se precisar atualizar.
- 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.
- Encontre componentes —
npx shadcn@latest search.
- 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.
- Instale ou atualize —
npx shadcn@latest add. Ao atualizar componentes existentes, use --dry-run e --diff para visualizar alterações primeiro (veja Atualizando Componentes abaixo).
- 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.
- 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. 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.
- 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.
- 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 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.
- Execute
npx shadcn@latest add <component> --dry-run para ver todos os arquivos que seriam afetados.
- Para cada arquivo, execute
npx shadcn@latest add <component> --diff <file> para ver o que mudou na upstream vs local.
- 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.
- Nunca use
--overwrite sem aprovação explícita do usuário.
Referência Rápida
# 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.
Referências Detalhadas
- rules/forms.md — FieldGroup, Field, InputGroup, ToggleGroup, FieldSet, validation states
- rules/composition.md — Groups, overlays, Card, Tabs, Avatar, Alert, Empty, Toast, Separator, Skeleton, Badge, Button loading
- rules/icons.md — data-icon, icon sizing, passing icons as objects
- rules/styling.md — Semantic colors, variants, className, spacing, size, truncate, dark mode, cn(), z-index
- rules/base-vs-radix.md — asChild vs render, Select, ToggleGroup, Slider, Accordion
- cli.md — Commands, flags, presets, templates
- customization.md — Theming, CSS variables, extending components
1---2name: shadcn3description: Gerencia componentes e projetos shadcn/ui, fornecendo contexto, documentação e padrões de uso para construir sistemas de design modernos.4---56# shadcn/ui78Um framework para construir UI, componentes e sistemas de design. Componentes são adicionados como código-fonte ao projeto do usuário via CLI.910> **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.1112## Quando Usar13- Use ao adicionar novos componentes do shadcn/ui ou registros da comunidade.14- Use ao estilizar, compor ou depurar componentes shadcn/ui existentes.15- Use ao inicializar um novo projeto ou alternar presets do sistema de design.16- Use para recuperar documentação de componentes, exemplos e referências de API.1718## Contexto Atual do Projeto1920```json21!`npx shadcn@latest info --json 2>/dev/null || echo '{"error": "No shadcn project found. Run shadcn init first."}'`22```2324O 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.2526## Princípios27281. **Use componentes existentes primeiro.** Use `npx shadcn@latest search` para verificar registros antes de escrever UI personalizada. Verifique registros da comunidade também.292. **Componha, não reinvente.** Página de configurações = Tabs + Card + controles de formulário. Dashboard = Sidebar + Card + Chart + Table.303. **Use variantes built-in antes de estilos customizados.** `variant="outline"`, `size="sm"`, etc.314. **Use cores semânticas.** `bg-primary`, `text-muted-foreground` — nunca valores brutos como `bg-blue-500`.3233## Regras Críticas3435Estas regras são **sempre aplicadas**. Cada uma link para um arquivo com pares de código Incorreto/Correto.3637### Estilos & Tailwind → [styling.md](./rules/styling.md)3839- **`className` para layout, não para estilos.** Nunca sobrescreva cores ou tipografia de componentes.40- **Sem `space-x-*` ou `space-y-*`.** Use `flex` com `gap-*`. Para pilhas verticais, `flex flex-col gap-*`.41- **Use `size-*` quando largura e altura são iguais.** `size-10` não `w-10 h-10`.42- **Use atalho `truncate`.** Não `overflow-hidden text-ellipsis whitespace-nowrap`.43- **Sem sobrescrita manual de cores `dark:`.** Use tokens semânticos (`bg-background`, `text-muted-foreground`).44- **Use `cn()` para classes condicionais.** Não escreva ternários com template literal manual.45- **Sem `z-index` manual em componentes de sobreposição.** Dialog, Sheet, Popover, etc. tratam seu próprio empilhamento.4647### Formulários & Inputs → [forms.md](./rules/forms.md)4849- **Formulários usam `FieldGroup` + `Field`.** Nunca use `div` bruto com `space-y-*` ou `grid gap-*` para layout de formulário.50- **`InputGroup` usa `InputGroupInput`/`InputGroupTextarea`.** Nunca `Input`/`Textarea` bruto dentro de `InputGroup`.51- **Botões dentro de inputs usam `InputGroup` + `InputGroupAddon`.**52- **Conjuntos de opções (2–7 escolhas) usam `ToggleGroup`.** Não faça loop `Button` com estado ativo manual.53- **`FieldSet` + `FieldLegend` para agrupar checkboxes/radios relacionados.** Não use `div` com heading.54- **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.5556### Estrutura de Componentes → [composition.md](./rules/composition.md)5758- **Items sempre dentro de seu Group.** `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`.59- **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)60- **Dialog, Sheet e Drawer sempre precisam de Title.** `DialogTitle`, `SheetTitle`, `DrawerTitle` obrigatórios para acessibilidade. Use `className="sr-only"` se oculto visualmente.61- **Use composição completa de Card.** `CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`. Não despeje tudo em `CardContent`.62- **Button não possui `isPending`/`isLoading`.** Componha com `Spinner` + `data-icon` + `disabled`.63- **`TabsTrigger` deve estar dentro de `TabsList`.** Nunca renderize triggers diretamente em `Tabs`.64- **`Avatar` sempre precisa de `AvatarFallback`.** Para quando a imagem falhar ao carregar.6566### Use Componentes, Não Markup Customizado → [composition.md](./rules/composition.md)6768- **Use componentes existentes antes de markup customizado.** Verifique se um componente existe antes de escrever uma `div` estilizada.69- **Callouts usam `Alert`.** Não construa divs estilizados customizados.70- **Estados vazios usam `Empty`.** Não construa markup de estado vazio customizado.71- **Toast via `sonner`.** Use `toast()` do `sonner`.72- **Use `Separator`** em vez de `<hr>` ou `<div className="border-t">`.73- **Use `Skeleton`** para placeholders de loading. Sem divs customizados `animate-pulse`.74- **Use `Badge`** em vez de spans estilizados customizados.7576### Ícones → [icons.md](./rules/icons.md)7778- **Ícones em `Button` usam `data-icon`.** `data-icon="inline-start"` ou `data-icon="inline-end"` no ícone.79- **Sem classes de dimensionamento em ícones dentro de componentes.** Componentes tratam dimensionamento de ícone via CSS. Sem `size-4` ou `w-4 h-4`.80- **Passe ícones como objetos, não como chaves string.** `icon={CheckIcon}`, não uma busca de string.8182### CLI8384- **Nunca decodifique ou busque códigos preset manualmente.** Passe-os diretamente para `npx shadcn@latest init --preset <code>`.8586## Padrões-Chave8788Estes 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.8990```tsx91// Layout de formulário: FieldGroup + Field, não div + Label.92<FieldGroup>93 <Field>94 <FieldLabel htmlFor="email">Email</FieldLabel>95 <Input id="email" />96 </Field>97</FieldGroup>9899// Validação: data-invalid em Field, aria-invalid no controle.100<Field data-invalid>101 <FieldLabel>Email</FieldLabel>102 <Input aria-invalid />103 <FieldDescription>Email inválido.</FieldDescription>104</Field>105106// Ícones em botões: data-icon, sem classes de dimensionamento.107<Button>108 <SearchIcon data-icon="inline-start" />109 Buscar110</Button>111112// Espaçamento: gap-*, não space-y-*.113<div className="flex flex-col gap-4"> // correto114<div className="space-y-4"> // errado115116// Dimensões iguais: size-*, não w-* h-*.117<Avatar className="size-10"> // correto118<Avatar className="w-10 h-10"> // errado119120// Cores de status: variantes Badge ou tokens semânticos, não cores brutas.121<Badge variant="secondary">+20.1%</Badge> // correto122<span className="text-emerald-600">+20.1%</span> // errado123```124125## Seleção de Componentes126127| Necessidade | Use |128| -------------------------- | --------------------------------------------------------------------------------------------------- |129| Botão/ação | `Button` com variante apropriada |130| Inputs de formulário | `Input`, `Select`, `Combobox`, `Switch`, `Checkbox`, `RadioGroup`, `Textarea`, `InputOTP`, `Slider` |131| Alternar entre 2–5 opções | `ToggleGroup` + `ToggleGroupItem` |132| Exibição de dados | `Table`, `Card`, `Badge`, `Avatar` |133| Navegação | `Sidebar`, `NavigationMenu`, `Breadcrumb`, `Tabs`, `Pagination` |134| Sobreposições | `Dialog` (modal), `Sheet` (painel lateral), `Drawer` (folha inferior), `AlertDialog` (confirmação) |135| Feedback | `sonner` (toast), `Alert`, `Progress`, `Skeleton`, `Spinner` |136| Paleta de comando | `Command` dentro de `Dialog` |137| Gráficos | `Chart` (encapsula Recharts) |138| Layout | `Card`, `Separator`, `Resizable`, `ScrollArea`, `Accordion`, `Collapsible` |139| Estados vazios | `Empty` |140| Menus | `DropdownMenu`, `ContextMenu`, `Menubar` |141| Tooltips/info | `Tooltip`, `HoverCard`, `Popover` |142143## Campos-Chave144145O contexto do projeto injetado contém estes campos-chave:146147- **`aliases`** → use o prefixo de alias real para imports (ex: `@/`, `~/`), nunca codifique.148- **`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.149- **`tailwindVersion`** → `"v4"` usa blocos `@theme inline`; `"v3"` usa `tailwind.config.js`.150- **`tailwindCssFile`** → o arquivo CSS global onde variáveis CSS customizadas são definidas. Sempre edite este arquivo, nunca crie um novo.151- **`style`** → tratamento visual do componente (ex: `nova`, `vega`).152- **`base`** → biblioteca primitiva (`radix` ou `base`). Afeta APIs de componentes e props disponíveis.153- **`iconLibrary`** → determina imports de ícone. Use `lucide-react` para `lucide`, `@tabler/icons-react` para `tabler`, etc. Nunca assuma `lucide-react`.154- **`resolvedPaths`** → destinos exatos no sistema de arquivos para componentes, utils, hooks, etc.155- **`framework`** → roteamento e convenções de arquivo (ex: Next.js App Router vs Vite SPA).156- **`packageManager`** → use isto para qualquer instalação de dependência não-shadcn (ex: `pnpm add date-fns` vs `npm install date-fns`).157158Veja [cli.md — `info` command](./cli.md) para referência completa de campos.159160## Documentação, Exemplos e Uso de Componentes161162Execute `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.163164```bash165npx shadcn@latest docs button dialog select166```167168**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.169170## Workflow1711721. **Obtenha contexto do projeto** — já injetado acima. Execute `npx shadcn@latest info` novamente se precisar atualizar.1732. **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.1743. **Encontre componentes** — `npx shadcn@latest search`.1754. **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`.1765. **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).1776. **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.1787. **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.1798. **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.1809. **Alternando presets** — Pergunte ao usuário primeiro: **reinstalar**, **mesclar**, ou **pular**?181 - **Reinstalar**: `npx shadcn@latest init --preset <code> --force --reinstall`. Sobrescreve todos os componentes.182 - **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.183 - **Pular**: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Apenas atualiza config e CSS, deixa componentes como estão.184185## Atualizando Componentes186187Quando 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.**1881891. Execute `npx shadcn@latest add <component> --dry-run` para ver todos os arquivos que seriam afetados.1902. Para cada arquivo, execute `npx shadcn@latest add <component> --diff <file>` para ver o que mudou na upstream vs local.1913. Decida por arquivo baseado no diff:192 - Sem alterações locais → seguro sobrescrever.193 - Tem alterações locais → leia o arquivo local, analise o diff, e aplique atualizações da upstream enquanto preserva modificações locais.194 - Usuário diz "apenas atualize tudo" → use `--overwrite`, mas confirme primeiro.1954. **Nunca use `--overwrite` sem aprovação explícita do usuário.**196197## Referência Rápida198199```bash200# Crie um novo projeto.201npx shadcn@latest init --name my-app --preset base-nova202npx shadcn@latest init --name my-app --preset a2r6bw --template vite203204# Crie um projeto monorepo.205npx shadcn@latest init --name my-app --preset base-nova --monorepo206npx shadcn@latest init --name my-app --preset base-nova --template next --monorepo207208# Inicialize projeto existente.209npx shadcn@latest init --preset base-nova210npx shadcn@latest init --defaults # atalho: --template=next --preset=base-nova211212# Adicione componentes.213npx shadcn@latest add button card dialog214npx shadcn@latest add @magicui/shimmer-button215npx shadcn@latest add --all216217# Visualize alterações antes de adicionar/atualizar.218npx shadcn@latest add button --dry-run219npx shadcn@latest add button --diff button.tsx220npx shadcn@latest add @acme/form --view button.tsx221222# Pesquise registros.223npx shadcn@latest search @shadcn -q "sidebar"224npx shadcn@latest search @tailark -q "stats"225226# Obtenha docs e URLs de exemplos de componentes.227npx shadcn@latest docs button dialog select228229# Veja detalhes de item de registro (para itens ainda não instalados).230npx shadcn@latest view @shadcn/button231```232233**Presets nomeados:** `base-nova`, `radix-nova`234**Templates:** `next`, `vite`, `start`, `react-router`, `astro` (todos suportam `--monorepo`) e `laravel` (não suportado para monorepo)235**Códigos de preset:** Strings Base62 começando com `a` (ex: `a2r6bw`), de [ui.shadcn.com](https://ui.shadcn.com).236237## Referências Detalhadas238239- [rules/forms.md](./rules/forms.md) — FieldGroup, Field, InputGroup, ToggleGroup, FieldSet, validation states240- [rules/composition.md](./rules/composition.md) — Groups, overlays, Card, Tabs, Avatar, Alert, Empty, Toast, Separator, Skeleton, Badge, Button loading241- [rules/icons.md](./rules/icons.md) — data-icon, icon sizing, passing icons as objects242- [rules/styling.md](./rules/styling.md) — Semantic colors, variants, className, spacing, size, truncate, dark mode, cn(), z-index243- [rules/base-vs-radix.md](./rules/base-vs-radix.md) — asChild vs render, Select, ToggleGroup, Slider, Accordion244- [cli.md](./cli.md) — Commands, flags, presets, templates245- [customization.md](./customization.md) — Theming, CSS variables, extending components