Componentes
27. Divider
seed-componentes.md v1.43 · §27seção 29 de 9827-divider-estavel-v0-26-dv1-dv3-validacao.md · MD5 7cf79d06Título completo no canon: Divider — estável (v0.26) · DV1–DV3 · validação executada + visual aprovada em 2026-08-05
Base: R1 — M3 divider (full-width × inset; "use sparingly"; itens repetitivos dispensam divider — margem basta), M1 dividers (overuse = ruído; whitespace/subheader como alternativas), Linzi Berry (inset consistente na tela inteira). R2 — MUI (vertical = div com ARIA), Material Web ("decorative by default and not announced"), React Aria useSeparator. R3 — MDN/WAI-ARIA 1.2 separator (fonte primária):
<hr>tem role implícitoseparatore É anunciado por leitores de tela — linha sob cada item vira ruído puro para AT.
27.1 Decisões DV1–DV3#
| # | Decisão | Porquê | Descartado |
|---|---|---|---|
| DV1 | Decorativo por default (div aria-hidden ou border no vizinho); a variante semântica (<hr>, separator implícito) só quando marca quebra temática REAL. Supersede: o uso livre de <hr> do seed-design-system.html v1.0 fica obsoleto — todo <hr> novo declara intenção semântica |
MDN/ARIA 1.2 (primária, verificada — decisão vira supersede); Material Web adota o mesmo default | <hr> sempre (polui a árvore de AT nas listas densas do ERP) |
| DV2 | Régua de separação em 3 degraus: espaço em branco → inset → full-width; inset separa itens relacionados (com âncora); full-width separa seções distintas, com parcimônia; quando convivem, a diferença reforça hierarquia; recuo do inset consistente na tela inteira, mesmo sem âncora em todos os itens | M3 + M1 (explícitos); Linzi Berry (Lyft) | Divider default entre todos os itens (LS4) |
| DV3 | Vertical: elemento com role="separator" + aria-orientation="vertical" quando semântico; decorativo dispensa ambos. 1px de espessura |
ARIA 1.2 (orientation default é horizontal); MUI/React Aria | hr rotacionado |
27.2 Tokens#
--seed-divider-color = border-subtle (1,21 sobre surface-page clara / 1,75 sobre surface-subtle escura — decorativo declarado) · --seed-divider-strong = border-default nos dois temas (1,49 sobre surface-page clara / 2,84 sobre surface-page escura — decorativo declarado) para full-width enfático · margens 12px vertical · inset alinha ao início do texto após a âncora.
⚠⚠ CORRIGIDO EM 2026-08-26, e o defeito é de uma classe que nenhuma guarda pegava: a spec afirmava um contraste que não existe. A redação anterior dava 1,91 ao
divider-strongno claro. Medidas as cinco superfícies do tema contra oborder-default, nenhuma produz 1,91 — page/raised/overlay dão 1,49, subtle 1,37, sunken 1,23. O número foi transplantado: 1,91 é o que oborder-subtleescuro dá sobre a página escura, e também o que o cinza-300 dá sobre branco. ⭐ O número estava certo em algum lugar do arquivo; só estava grudado no token errado. ⭐ E o irmão só batia porque foi medido contra outro fundo. O "1,75 dark" dodivider-colornão sai dasurface-page(que dá 1,91) — sai dasurface-subtle. Os dois temas foram medidos contra fundos diferentes, sem que a linha dissesse. ⭐⭐ Régua: contraste sem fundo declarado não é um número, é uma família de números — e foi variando o fundo, uma condição por vez (§14.5), que os três valores se explicaram. Daqui em diante esta linha declara o fundo de cada medida. ⚠ O par dark ficou decidido pelo que sobrou. A v1.22 recusou emitir este token justamente porque o consumidor vivo (banco-superficies.html) usa cinza-600 no escuro, que não é oborder-defaultdark — e emitir qualquer lado criaria contradição. Com o 1,91 desmentido, o cinza-600 se revela dialeto local, não valor derivado de spec, e vale a regra simétrica que o irmão já escreve:divider-color= border-subtle nos dois temas, logodivider-strong= border-default nos dois. O consumidor foi repontado para o token.
27.3 Os 7 testes#
- Pares decorativos declarados com justificativa (a informação de agrupamento mora no espaço+conteúdo). 2. Separação nunca depende só da linha (spacing coexiste). 3. Grayscale: já nasce acromático. 4. Inset × full a 1s (recuo). 5. Regra do um: um regime de divider por lista. 6. n/a (estático). 7. 360px: full-width não estoura o container; inset preserva o alinhamento. (Suite F ✓.)