Pular para o conteúdo
Índice

Componentes

A biblioteca

Os primitivos moram em src/components/ui/* — shadcn/ui sobre Radix, editados pro canon. As demonstrações destas páginas importam os componentes de verdade: o que você vê aqui é literalmente o que a tela do app renderiza.
src/components/ui/*shadcn/ui + radix-uicva pras variantes

Por assunto

Inventário

Tudo que existe hoje, com o arquivo. Se um componente não está aqui, ele não existe — e criar um novo é decisão de design system, não de tela.
ExportArquivoO que é
Buttonui/button.tsx7 variantes · 7 tamanhos · cva
Inputui/input.tsxCampo de uma linha, pílula
Textareaui/textarea.tsxMulti-linha, canto 16
SelectNativeui/select-native.tsxSelect do navegador com a pele do Input
SearchInputui/search-input.tsxInput + lupa decorativa
InputOTPui/input-otp.tsxCódigo de verificação, 6 slots
Checkboxui/checkbox.tsxRadix · a única forma de 6px do app
Labelui/label.tsxRadix · liga rótulo e controle
Field · SelectField · TextareaFieldui/field.tsxRótulo + controle + erro + dica, já costurados
FormAlert · FieldError · useFieldErrorsui/form-feedback.tsxErro de formulário e de campo
PositiveBannerui/positive-banner.tsxA contraparte calma do FormAlert
Card · CardHeader · CardTitle · CardDescription · CardContentui/card.tsxA superfície padrão
Dialogui/dialog.tsxRadix · modal do canon
ConfirmDialogui/confirm-dialog.tsxSim/não sobre o Dialog
ConfirmStrip · ConfirmTrigger · useConfirmui/confirm-strip.tsxConfirmação destrutiva sem modal
DropdownMenuui/dropdown-menu.tsxRadix · menu de AÇÃO
StatusPillui/status-pill.tsxSelo de status — fonte visual única
EmptyStateui/empty-state.tsxVazio padrão, moldura tracejada
SkeletonBlocosui/skeleton-blocos.tsxEsqueleto das telas de rail
Toasterui/sonner.tsxSonner com os ícones e o raio do canon
AvatarBubbleui/avatar-bubble.tsxRetrato de conta, 32px
CardIconBadgeui/card-icon-badge.tsxSelo circular no topo de cards de fluxo
SettingsRowui/settings-row.tsxLinha de configuração: texto à esquerda, ação à direita
RailLinks · RailGroupsui/rail-nav.tsxMiolo dos rails laterais
CrudCard · Gaveta · EditSurface · CrudRowShell …ui/crud-block.tsxVocabulário da edição no lugar
PageBar · PageBody · PageStagecomponents/page-*.tsxOs cabeçalhos e o corpo de uma tela

Como um componente entra

A pergunta não é “isso seria útil?”, e sim “o que já existe não resolve?”.

Primeiro, procure

Quase tudo já existe com outro nome. Escolher 1 entre N é SearchSelect; agir é DropdownMenu; confirmar destruição é ConfirmStrip; editar no lugar é CrudCard + Gaveta.

Depois, componha

Card + Field + Button resolvem a maioria das telas novas. Componente novo é o último recurso, não o primeiro.

Se entrar, entra em ui/

Com data-slot, className por cn(), props do elemento nativo repassadas e comentário dizendo QUAL regra do canon ele veste.

E entra nesta página

Componente sem página aqui é componente que vai divergir. A regra de manutenção é: mudou o canon, muda o guia no mesmo commit.

NotaA convenção data-slot

Todo primitivo carimba data-slot="button", data-slot="card" e afins. Não é enfeite: é o que permite uma regra global alcançar “todo card da tela” sem que nenhum card precise saber disso — é assim que o foco em camadas aplica a película sem tocar em um único componente.

Os primitivos aceitam className e passam adiante as props do elemento nativo. A classe do chamador entra por último no cn(), então ela vence — mas sobrepor a forma (trocar o raio, mudar a altura de um botão) é sinal de que a tela está fugindo do canon, não de que o componente falta uma prop.