Badge
Em andamentoRótulo estático e curto de estado ou categoria — "Novo", "Esgotado", "Aprovado" —, em sete cores. Não é clicável, não tem hover e não recebe foco.
- Função
- Estado e aviso
- Também chamado de
- selo, rótulo, etiqueta de estado, badge, pílula
- Mora em
- app/components/atoms/Badge.tsx
- Última mudança
- 2026-09-29
Prévia
A peça ao vivo, vinda da ficha, na largura escolhida. Em larguras fixas, ela roda num quadro do tamanho de uma tela de verdade.
Na largura da página: 0px
Variantes na ficha
Lidas da ficha no build, na ordem do palco. Cada uma abre sozinha, sem o styleguide em volta — é o endereço que o palco carrega.
Quando usar
Para marcar o estado ou a categoria de um item, ao lado do título dele — num cartão, numa linha de tabela.
Faça
- Escreva uma ou duas palavras.
- Use a cor que o estado já tem no sistema:
successpara concluído,warningpara prazo,destructivepara erro. - Deixe o texto dizer o estado — a cor acompanha, não substitui.
- Ponha o ícone de estado com
icone(E64): visto no sucesso, X no erro. Vai comaria-hidden, e sempre à esquerda do texto, em todas as variantes (E123).
Evite
- Embrulhar o Badge num link: ele não tem foco nem alvo de 44px. Ação vai no Button.
- Usar a cor como única informação ("verde" sem texto).
- Frase longa dentro do selo.
Quando não usar. Para destacar uma chamada de campanha em caixa alta ("Matrículas abertas", "Ao vivo agora"), use a Tag. Para uma mensagem com frase inteira, o Alert. Para algo clicável, o Button.
Nota de uso
Badge ou Tag (E64, decisão com padrão: as duas continuam peças separadas): o Badge diz o estado do objeto — "Inscrição confirmada", "Pagamento pendente" —, em caixa normal, ao lado do título. A Tag marca a oferta — a categoria, "Mais procurado", "Lista de espera", "Ao vivo" —, em caixa alta, por cima do cartão. Na dúvida: se muda quando a pessoa age, é Badge; se é o que se anuncia, é Tag. Com icone, o estado leva cor e ícone. É estático: sem hover e sem foco. Hover escurecendo um rótulo promete clique, e o consumidor acaba embrulhando o Badge num link sem nome nem alvo de 44px. Ação vai no Button.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Selo — Caixa com cantos `rounded-md`, `px-2.5 py-0.5`.
- Texto — `text-xs` em seminegrito.
- Ícone — Opcional (`icone`), 14px, decorativo, antes ou depois do texto (E64).
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Padrão | default: fundo --primary, texto branco. |
| Variantes de estado | secondary, success, warning, info e destructive: fundo do token e o texto de contraste dele. |
| Contorno | outline: sem fundo, borda --border e texto --foreground. |
Comportamento
| Situação | O que acontece |
|---|---|
| Hover ou clique | Nada — é estático de propósito. |
| Atributos passados | Vão para o <span>; a className se mescla às classes da variante. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { Badge } from '@/app/components/atoms/Badge';
<Badge>…</Badge>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
variant | 'default' | 'secondary' | 'destructive' | 'success' | 'warning' | 'info' | 'outline' | 'default' | não | Variante do cva. |
icone | React.ReactNode | — | não | Ícone de estado (E64), decorativo: visto no sucesso, X no erro. Cumpre o "cor + ícone" da convenção sem cada consumidor montar o seu. O sentido continua no texto — o ícone vai com aria-hidden. |
Aceita também: React.HTMLAttributes<HTMLSpanElement>.
Medidas
| Parte | Valor | Classe |
|---|---|---|
| Preenchimento | 10px × 2px | px-2.5 py-0.5 |
Tokens de cor
Os tokens semânticos que o código da peça usa, com o valor de hoje em app/globals.css.
| Token | Valor | Usado como |
|---|---|---|
--border | #E5E5E5 | border-border |
--destructive | #BA0517 | bg-destructive |
--destructive-foreground | #FFFFFF | text-destructive-foreground |
--foreground | #1A1A1A | text-ink |
--info | #1D345E | bg-info |
--info-foreground | #FFFFFF | text-info-foreground |
--primary | #D42B2B | bg-primary |
--primary-foreground | #FFFFFF | text-primary-foreground |
--secondary | #0B8434 | bg-secondary |
--secondary-foreground | #FFFFFF | text-secondary-foreground |
--success | #2E844A | bg-success |
--success-foreground | #FFFFFF | text-success-foreground |
--warning | #DD7A01 | bg-warning |
--warning-foreground | #1A1A1A | text-warning-foreground |
Leitor de tela
O que é anunciado, e por quê.
- É um
<span>de texto: o leitor lê o conteúdo, sem papel nem estado. - Se o selo for a única indicação do estado numa linha, garanta que o texto dele diga o estado por inteiro.
O que sustenta o estado
Esta peça usa estatico. O estado dela é o de quem já foi ouvido com leitor de tela nesses padrões — e não uma passada sobre esta peça em específico.
Falta ouvir: estatico — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/atoms/Badge.tsx | Disponível |
| Ficha | Storybook (abre em outra aba) | Disponível |
| Teste de acessibilidade | axe em npm run test | No gate de todo commit |
| Leitor de tela | Passada da E33 | Falta ouvir |
| Design | Figma | Desativado até a Fase 2 |
Histórico
Os últimos commits que tocaram o arquivo, lidos do git no build.
6ecd5a32026-09-29E130: MarketingHero — estrutura e layout refeitos
O histórico completo está no GitHub (abre em outra aba).