Tag
Em andamentoEtiqueta curta em caixa alta que marca a oferta — a categoria do curso, "Mais procurado", "Lista de espera", "Ao vivo agora". A variante live traz um ponto que pulsa. Desde a E64 é também a pílula do CourseCard, com ícone e largura máxima.
- Função
- Estado e aviso
- Também chamado de
- etiqueta, chamada, ao vivo, tag
- Mora em
- app/components/atoms/Tag.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
Em cima de cartões e destaques, para uma chamada de uma a três palavras — principalmente o estado de um evento.
Faça
- Use
livesó no que está acontecendo agora. - Use
closedno que acabou (evento, inscrição). - Escreva o texto em caixa normal: a caixa alta vem do estilo.
- Use
vidrosobre foto,neutropara dado do curso (modalidade, carga horária),destaque,avisoeindisponivelpara a situação da oferta (E64). - Com
larguraMaxima, o texto longo corta com reticências e otitleguarda o inteiro.
Evite
- Tag clicável: não tem foco nem alvo.
- Refazer a pílula à mão num cartão: era o que o CourseCard fazia, com quatro raios e alturas diferentes.
- Várias tags
livena mesma tela — o ponto pulsante perde o sentido.
Quando não usar. Para estado ou categoria discretos ao lado de um título, use o Badge. Para mensagem com frase, o Alert.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Ponto — Só no `live`: 6px, claro, pulsando só com movimento liberado.
- Texto — 12px (`text-rotulo`) em negrito, caixa alta, espaçamento largo, centrado pela caixa de 20px em todas as variantes, inclusive a de contorno (E125).
- Ícone — Opcional (`icone`), 12px, decorativo, antes 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. |
| Vidro, destaque, aviso, indisponível, neutro | As pílulas do CourseCard (E64): bg-vidro sobre foto; --secondary; --warning; --destructive; --muted sem sombra. |
| Ao vivo | live: fundo --destructive, sombra avermelhada e o ponto que pulsa (motion-safe:animate-pulse). |
| Encerrado | closed: fundo --muted-foreground, texto --card. |
| Contorno | outline: sem fundo, com borda. |
| Movimento reduzido | O ponto do live para de pulsar. |
Comportamento
| Situação | O que acontece |
|---|---|
| Qualquer variante | Estática: sem hover, sem foco. |
| Texto maior que `larguraMaxima` | Corta com reticências; o title recebe o texto inteiro — conferido no teste da ficha. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { Tag } from '@/app/components/atoms/Tag';
<Tag>…</Tag>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' | 'live' | 'closed' | 'outline' | 'vidro' | 'destaque' | 'aviso' | 'indisponivel' | 'neutro' | 'default' | não | Variante do cva. |
icone | React.ReactNode | — | não | Ícone decorativo antes do texto (E64), com aria-hidden. |
larguraMaxima | string | — | não | Largura máxima (E64), em qualquer medida CSS: "12rem". Acima dela o texto corta com reticências, e o title guarda o texto inteiro. |
Aceita também: React.HTMLAttributes<HTMLSpanElement>.
Medidas
| Parte | Valor | Classe |
|---|---|---|
| Ponto do `live` | 6px | size-1.5 |
| Altura da etiqueta | 20px, fixa | h-5 leading-none |
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 |
|---|---|---|
--card | #FFFFFF | bg-cardtext-card |
--destructive | #BA0517 | bg-destructiveshadow-destructive/50 |
--destructive-foreground | #FFFFFF | bg-destructive-foregroundtext-destructive-foreground |
--muted-foreground | #595959 | bg-muted-foregroundtext-muted-foreground |
--border | #E5E5E5 | border-border |
--foreground | #1A1A1A | text-ink |
--muted | #F4F6F9 | bg-muted |
--primary | #D42B2B | bg-primary |
--primary-foreground | #FFFFFF | text-primary-foreground |
--secondary | #0B8434 | bg-secondary |
--secondary-foreground | #FFFFFF | text-secondary-foreground |
--warning | #DD7A01 | bg-warning |
--warning-foreground | #1A1A1A | text-warning-foreground |
Leitor de tela
O que é anunciado, e por quê.
- O ponto é
aria-hidden: o estado "ao vivo" tem de estar no texto. - O ícone também é
aria-hidden; o leitor lê o texto inteiro mesmo cortado na tela.
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/Tag.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).