Componentes
22. Chip
seed-componentes.md v2.00 · §22seção 45 de 18422-chip-estavel-validado-pelo-rafael-em-2026-08-04.md · MD5 e99a3b6fTítulo completo no canon: Chip — estável · validado pelo Rafael em 2026-08-04 (preview v0.19; suite C)
Em uma frase: Chip é interativo e a BORDA é o sinal disso; quatro papéis (filtro, seleção, removível, operacional) e nunca é link nem multifunção.
Ficha — Chip
Encurtada do canon; o texto inteiro está na seção ↓ e no Markdown.
Anatomia e partes — ver mais na seção §22.2 ↓
Altura 28px (denso) / 32px (confortável), radius 999, borda 1px em cinza-600…
Propriedades e variantes
Sem subseção própria — ver a seção §22.
Estados
Sem subseção própria — ver a seção §22. Regra geral dos estados: §0, item 2.
Acessibilidade
Sem subseção própria — ver a seção §22.
Faça · não faça — 3 de 10 decisões, na ordem do canon — ver mais na seção §22.1 ↓
| faça (decisão) | não faça (descartado) |
|---|---|
| W1 — 3 tipos SEED… | Os 4 tipos do M3 |
| W2 — Interatividade VISÍVEL… | Chip com cara de badge |
| W3 — Filtro selecionado = checkmark… | Seleção só por preenchimento |
Relacionados — as 3 mais citadas (de 5):
(decisão registrada — ver Histórico da seção)
22.1 Decisões W1–W8#
| # | Decisão | Porquê | Descartado |
|---|---|---|---|
| W1 | 3 tipos SEED: filtro (selecionável, alternativa a grupo de checkbox/switch), entrada (dismissível, valor inserido pelo usuário — o multi-select do combobox §11 consumirá este) e ação contextual (raro; ação primária/recorrente = botão §1). "Suggestion" do M3 DESCARTADO (predição/chat sem caso no SIGA; o tipo ação cobre se surgir) | M3 (tipos e critérios); chips aparecem dinamicamente em grupo, botões aparecem consistentemente | Os 4 tipos do M3 |
| W2 | Interatividade VISÍVEL: chip tem borda + cursor + hover/pressed que o badge NUNCA tem | Carbon (borda no container sinaliza interatividade de relance); M3 (indicador secundário exigido para baixa visão/cognitivo) | Chip com cara de badge |
| W3 | Filtro selecionado = checkmark visível + mudança de cor — nunca só cor | Angular Material: esconder o checkmark degrada a identificação visual do selecionado | Seleção só por preenchimento |
| W4 | Remoção: X com aria-label="Remover {valor}"; alvo do X ≥24×24 (WCAG 2.5.8) no desktop denso; em superfície touch, hitbox estendida ≥44px INVISÍVEL (pseudo-elemento) — visual compacto, alvo generoso |
ODG (aria-label nomeando o valor; remoção anunciada); WCAG 2.5.8 | X 16px sem hitbox; chip de 44px de altura (mata a densidade) |
| W5 | Teclado = padrão GRID (React Aria): grupo ROTULADO; setas navegam (roving tabindex); Delete/Backspace remove o focado; após remover, foco → chip SEGUINTE (anterior se era o último; grupo/campo se esvaziou); live region ÚNICA do grupo anuncia ("Filtro Coelba removido") — regime discreto 1.13-b | React Aria TagGroup; Angular | Cada chip como tab-stop (Tab-maratona); foco morto pós-remoção |
| W6 | Touch: X SEMPRE visível — divergência declarada do M3 (que dispensa o X quando remover é a única ação, via tecla Delete — pressupõe teclado físico; no toque não existe Delete: sem X, sem caminho) | M3 lido contra o contexto (ERP mobile = dedo) | M3 literal (beco sem saída no touch) |
| W7 | Overflow: default reflow (todos visíveis, empurrando conteúdo — filtro ativo nunca se esconde); variante densa "+N" abre a lista em popover — ESBOÇADA, spec final espera o §popover (sub-bloco D; ponta declarada) | M3 (reflow vs menu; exibir todos sem rolagem) | Rolagem horizontal de chips (esconde filtros ativos — mortal em ERP) |
| W8 | Proibições: chip nunca é LINK para outra página; nunca multifunção (máx.: corpo selecionável + X = 2 focusables); nunca aninhar controles dentro | Carbon; M3 (2 focusables); Angular (não aninhar) | Chip-canivete |
| W9 (QD-P18, 2026-10-10) | A COR do chip de STATUS é um campo editável por quem tem permissão de criar ou editar status (a permissão é do produto; o DS dá a forma), escolhida numa paleta FECHADA do DS (onze cores, §22.4.3), sem campo de hex livre. Cada status do conjunto padrão nasce com a sugestão do DS já marcada (§22.4.2). Só entra cor cujo chip passa 4,5 no texto nos dois temas. Veredito dele, verbatim (folha 3, G2, 2026-10-10 14:45:58Z): "a cor dos status quero que deixe a pessoa que tiver acesso a editar ou criar status, possa escolher a cor que quiser, dentro da nossa paleta de cores no DS. ja pode vir com as sugestoes, mas deve ser um campo editavel." | A fala dele (cor escolhida pela pessoa, dentro da paleta) + o piso WCAG 1.4.3 medido por tema; o controle é o radio nativo do §9 (J3/J4) | Cor fixa por estado; campo de hex livre (fora da paleta e sem garantia de contraste); só as cinco cores semânticas (4 dos 5 já são os padrões, sobra 1 escolha) |
| W10 (H3 = a, folha 4, 2026-10-11) | Cada TIPO de registro tem o SEU conjunto de status (obras e ordens de serviço: um; notas fiscais: outro; propostas: outro), e todos têm a cor editável da W9 — o mesmo controle, a mesma paleta fechada de onze cores, a sugestão inicial marcada. Quem muda entre os tipos é o vocabulário (os nomes dos status), não a regra da cor. O conjunto de obras e OS é Pendente · Em andamento · Ganho · Perdido (§22.4.2); notas fiscais (tela-lista) seguem Em aberto · Paga · Vencida · Em negociação, e propostas (tela-referencia) seguem Em análise · Enviada · Aprovada — esses dois vocabulários continuam próprios e só passam a seguir a regra da cor. A tela onde se edita é Configurações → Status (§86.4). |
A resposta dele à H3 (opção a) [a folha traz só a letra; o texto da opção está no corpo da folha 4 e no briefing da leva 33] | Um único conjunto para todos os tipos (as notas fiscais não têm "Ganho"; as propostas não têm "Vencida"); cor fixa por tipo |
22.2 Anatomia e tokens#
Altura 28px (denso) / 32px (confortável), radius 999, borda 1px em cinza-600 (token de componente chip-border; par light 4.74 e dark 3.60, ambos ≥3:1 — o border-default cinza-300 REPROVOU com 1.91 na medição e foi descartado: a borda é o sinal de interatividade do W2, não decoração), texto --seed-text-primary, fundo --seed-surface-page; hover: fundo --seed-surface-subtle; selecionado (filtro): fundo --seed-action-primary, texto --seed-text-on-action-primary, checkmark 14px; X: ícone 14px em botão de 24×24 com hitbox touch estendida; focus ring padrão. Grupo: flex com wrap (reflow W7), gap 8px, rótulo visível ou aria-label.
Tinta de marca sobre superfície suave — regra fixada por veredito (V-CT9 = a, 2026-09-15, MANIFESTO §224.1). Chip cuja tinta é de marca (
text-link/text-brand,#098475no claro) sobresurface-subtle(#F2F6F9) ousurface-brand-subtle(#E8FBF7) mede 4,23 e 4,28 — abaixo do piso 4,5 — em QUALQUER estado: chip preenchido, chip de filtro em repouso sobre superfície suave, chip dentro de cartão. A tinta étext-brand-strong(#006C62: 5,82 e 5,89). A regra mora no §73.5 (gramática de consumo); o censo da CT-P9 (MANIFESTO §223.3, régua RC em 208 de 208 HTML) não achou ocorrência viva em bancada nem em tela. No tema escuro nada muda (as duas tintas têm o mesmo valor).
22.3 Os 7 testes#
- Borda do chip: cinza-600 medido — 4.74 light / 3.60 dark ✓ (cinza-300 reprovado com 1.91); selecionado branco/tq-600 4.60 ✓; numérico branco/ve-500 4.30 ✓ (não-textual/negrito 12px); neutro ci-700/ci-100 5.43 ✓. 2. Seleção por checkmark+cor; remoção por X+anúncio. 3. Grayscale: checkmark e borda carregam. 4. Filtro × entrada a 1s (checkmark × X). 5. Uma live region por grupo. 6. Selecionado visível sem interação. 7. 360px: reflow empilha; X com hitbox 44 tocável de polegar. (Verificado: suite v0.19, aprovado.)
22.4 Os tons de status do chip e a cor escolhida (QD-P17, QD-P18; folha 3 de 2026-10-10)#
22.4.1 Os cinco tons semânticos (.chip-st). O chip de status (.chip-st, texto + ícone, nunca só cor) vive em fundo suave com a tinta do mesmo papel. O vocabulário tinha quatro tons escritos nas telas; a folha 3 (G1 = a) criou o quinto, st-erro, com o vermelho de perigo que já existia nos tokens — nenhum hex novo. Medido em 2026-10-10 (conta de luminância WCAG, 06-validacao/provas: a mesma que o gerador gen-banco-escolha.py refaz a cada geração):
| Tom | Fundo / tinta (tokens) | Texto × fundo do chip, claro | idem, escuro | Fundo do chip × página, claro | idem, escuro |
|---|---|---|---|---|---|
st-ok |
feedback-success-bg / -text |
5,89 | 9,35 | 1,07 | 1,37 |
st-info |
feedback-info-bg / -text |
5,79 | 9,38 | 1,11 | 1,36 |
st-neutro |
surface-sunken / text-secondary |
6,42 | 9,92 | 1,21 | 1,00 |
st-alerta |
feedback-warning-bg / -text |
9,05 | 9,27 | 1,09 | 1,33 |
st-erro (novo) |
feedback-danger-bg / -text |
6,58 | 9,47 | 1,09 | 1,28 |
O texto passa 4,5 nos cinco, nos dois temas. O fundo do chip contra a página é de 1,00 a 1,37 em todos (o st-neutro escuro é a cor da página, 1,00): o chip não é um limite de controle (não é clicável), então o SC 1.4.11 não o cobra [inferência] e quem carrega o significado é o texto e o ícone — como já era nos quatro tons antigos. O st-erro entra no CSS dos sete gabaritos que declaram .st-* (tela-chat, -detalhe, -gantt, -lista, -quadro, -referencia, -tabela), pelos moldes.
22.4.2 O conjunto padrão de status e o mapa das etapas (G2 = ok, G3 = a). O conjunto é Pendente (st-neutro) · Em andamento (st-info) · Ganho (st-ok) · Perdido (st-erro) — UM conjunto para tudo: quadro, lista e detalhe falam igual (G3 = a; descartado: status mais fino por domínio na lista e no detalhe). O mapa do gabarito de obras: Levantamento e Aguardando parecer = Pendente; Projeto, Execução e Comissionamento = Em andamento; Entregue = Ganho (o gabarito de obras não tem etapa de perda). Esses quatro tons são as sugestões iniciais da regra do W9.
H1 = a (folha 4, 2026-10-11 02:44:10Z): o Pendente vem CINZA (st-neutro) de fábrica, como já estava no gabarito do quadro e no detalhe. Nada mudou; a resposta confirma. Descartado: Pendente em âmbar (st-alerta).
H2 = a: a tabela e o chat de ORDENS DE SERVIÇO falam o mesmo conjunto (tela-tabela v0.6 e tela-chat v0.5, geradores gen-tela-tabela.py e gen-tela-chat.py): Em execução → Em andamento, Aguardando → Pendente, Concluída → Ganho. "Atrasada" deixou de ser status e virou MARCA DE PRAZO ao lado do chip (22.4.5). Consequências medidas nos gabaritos: o filtro "Situação: Atrasada" virou o filtro de Prazo ("Prazo: Atrasada"), ganhando ao lado o filtro de Status; o topo da tabela e do chat foi refeito ("Em andamento 15", que soma as 12 em dia e as 3 atrasadas, e "Fora do prazo 3") [inferência: os números do gabarito são fictícios; a soma preserva o total de OS abertas que a tela já mostrava]; a coluna Status da tabela passou de 140 para 220 px para caber o chip e a marca.
22.4.3 A paleta fechada da escolha (W9). Onze cores: os cinco tons de 22.4.1 + as seis da paleta de entidade (entity-1..6 com a tinta de cada posição, CP23). Medido (texto × fundo do chip; as seis de entidade são invariantes de tema, e o par é interno ao chip):
| Cor (nome visível) | Classe | Claro | Escuro |
|---|---|---|---|
| Verde · Azul · Cinza · Âmbar · Vermelho | st-ok · st-info · st-neutro · st-alerta · st-erro |
5,89 · 5,79 · 6,42 · 9,05 · 6,58 | 9,35 · 9,38 · 9,92 · 9,27 · 9,47 |
| Turquesa · Dourado · Ciano | st-e1 · st-e2 · st-e3 |
5,11 · 5,30 · 5,63 | 5,11 · 5,30 · 5,63 |
| Verde-floresta · Petróleo · Marrom | st-e4 · st-e5 · st-e6 |
9,37 · 6,43 · 6,68 | 9,37 · 6,43 · 6,68 |
H4 = a (folha 4, 2026-10-11 02:44:10Z): a paleta fica nas onze cores (os 5 tons st-* + as 6 de entidade). Era "proposta da sessão, exposta a veto" desde a leva 32; agora é resposta dele, e a pergunta das rampas inteiras fica fechada. Onze de onze passam 4,5 nos dois temas. A régua do W9 é "só entra cor que passa", e a geração aborta se uma cor da paleta cair (a conta lê os tokens do gêmeo). As rampas inteiras (turquesa, cinza, vermelho… de 50 a 900) não entram: cada degrau pediria um par fundo/tinta que ninguém mediu, e a rampa de marca no escuro acende ("competindo com as cores de alerta", QD15) — se ele quiser mais cores, a pergunta é em quais degraus e com qual tinta.
22.4.4 O controle. Um grupo de rádios NATIVOS (§9 J3/J4: fieldset + legend "Cor do status “…”", input type="radio" DENTRO do rótulo, círculo visível de 24 px com alvo de 44 px, um tab stop por grupo, as setas movem a escolha). Cada opção é o chip na própria cor com o nome da cor escrito (“Verde”, “Petróleo”…): o nome acessível é o nome da cor, e a pessoa nunca escolhe só por matiz. O valor atual leva três sinais além da cor: círculo preenchido, borda de 2 px na cor de ação e o nome. Sem campo de hex. Sobrevoo muda a borda do rótulo (nunca a cor do chip, que é a informação); pressionado soma um anel interno (HV1); foco visível 2 px; forced-colors usa Highlight. A pré-visualização no legend acompanha a escolha e a mudança é anunciada ("Cor do status Perdido: Vermelho."). A bancada é banco-escolha.html v0.5 (seção "Cor do status", gerador gen-banco-escolha.py). O controle tem dono único desde a leva 33 (H5 = b): a paleta, a conta de contraste (que aborta a geração se uma cor cair de 4,5), o CSS do chip e do rádio, o HTML do grupo e o script vivem em 06-validacao/ferramentas/cor_status_bloco.py, e a bancada e a tela Configurações → Status (§86.4) o pedem — nunca copiam. Byte a byte: a bancada regenerada depois da extração é idêntica à da leva 32.
22.4.5 A marca de prazo (H2 = a). "Atrasada" não é status: é uma marca ao lado do status que diz que o prazo passou, e o registro continua com o status que tem (uma OS atrasada segue Em andamento). A forma é a do selo "atrasada" do cartão do quadro (QD19, seed-componentes.md §57): fundo feedback-danger-bg, texto feedback-danger-text (6,58 claro · 9,47 escuro), ícone de alerta de 14 px — o sinal nunca depende só da cor (o texto "Atrasada" e o ícone dizem). A variante sólida do QD20 só existe dentro do cartão vermelho do quadro; numa linha de tabela a marca é a clara. Mora em 06-validacao/ferramentas/selo_prazo_bloco.py (.selo-prazo, .st-celula), usado por gen-tela-tabela.py e gen-tela-chat.py; o quadro mantém o .tarefa-selo--atrasada dele, de 3 declarações iguais [pendência a nascer: o quadro passar a consumir o módulo].
Também cita o §22: banco-dataviz-dg, banco-escolha, tela-configuracoes, tela-detalhe, tela-gantt, tela-portal-cliente, tela-portal-parceiro, tela-quadro, tela-quadro-funil, tela-referencia.