Componentes
57. Quadro / Kanban
seed-componentes.md v1.43 · §57seção 63 de 9857-quadro-kanban-estavel-f7-4-2026-08-16-qd1-qd14.md · MD5 13098370Título completo no canon: Quadro / Kanban — estável (F7.4, 2026-08-16) · QD1–QD14 · gabarito A7
Base. Rodada zero: o arquétipo TEM leitura visual — §13.5 do
estudo-clickup-completo.md, dispositivos C57–C59 —, somada às medições de valor da §2.3 e ao contrato de arquétipo já escrito noseed-composicao.md(CP2, tipo trilha). R1 canon: o quadro é colunas de etapa, cartões de item e teto de trabalho em curso (WIP) — o limite máximo de cartões por coluna, cuja função é forçar a terminar antes de começar. Colunas devem espelhar o fluxo real, e não um "A fazer / Fazendo / Feito" genérico, senão o gargalo não aparece. R2 stack: não há Kanban no shadcn/ui base; o padrão de mercado é o dnd-kit, cujo sensor de teclado move cartão por setas e confirma com Espaço ou Enter. Os componentes de 2026 tratam quatro superfícies: estrutura de colunas, cartão arrastável com reordenar e mover entre colunas, primitivos de acessibilidade (teclado e anúncio para leitor de tela) e o shell em volta. R3 normas: o SC 2.5.7 Dragging Movements (AA, WCAG 2.2) exige que toda função operada por arraste seja alcançável por ponteiro único sem arrastar — e a norma é explícita em que isso não é a mesma coisa que teclado, coberto em separado pelo SC 2.1.1, porque quem usa tela de toque pode não ter teclado físico. A técnica G219 do W3C foi escrita com este exemplo literal: mover uma tarefa num quadro. O padrão recomendado é "mover para…" em menu, ou tocar-e-colocar.
57.1 A decisão de fronteira — e ela contraria o produto de referência#
O C57 observou que lá a coluna tem fundo tingido na cor do status, e o próprio estudo registrou a divergência com a §2.3 (que dizia "transparente"), deixando a escolha para o gate.
Mantemos a lei do CP2: a trilha é agrupador TRANSPARENTE — sem fundo, sem raio, sem separação.
O motivo não é apego ao texto. Com quatro a seis colunas tingidas, a tela ganha seis superfícies cromáticas competindo com os cartões, que são o que carrega o dado — e o CP19 diz que o croma vem das peças. A identidade da coluna resolve-se onde a própria leitura já a resolvia: no cabeçalho, com a pílula saturada de status e o contador fora dela.
Alternativa descartada com o porquê, não por omissão. Se o gate quiser o tingido, a mudança é de uma linha no molde — mas ela reabre o CP19, e isso precisa ser dito antes, não depois.
57.2 Os contratos#
| # | Contrato | O que ele descarta, e por quê |
|---|---|---|
| QD1 | A coluna é TRILHA (CP2): sem fundo, sem raio, sem sombra, sem borda | Coluna como peça. Peça é o que se separa do canvas, e a coluna não se separa de nada — chamá-la de peça esvaziaria a definição |
| QD2 | A identidade da etapa vive no cabeçalho: pílula saturada de status + contador fora dela | Contador dentro da pílula. Isso obrigaria a medir contraste de número sobre seis fundos diferentes, e o número passaria a herdar a cor do status — que não é informação dele |
| QD3 | O cartão é PEÇA: par sombra+anel (CP17) e radius-lg |
Cartão sem separação: sem ele, a trilha vira uma lista de textos soltos sobre o canvas |
| QD4 | Metadado do cartão em LINHAS, cada uma com ícone + nome acessível + valor | Rodapé horizontal (C58). Ele comporta três metadados; um quadro de engenharia carrega responsável, prazo, potência e campo de domínio, e acima de três o rodapé quebra ou trunca |
| QD5 | Teto de trabalho em curso (WIP) por etapa. Excedido, o contador muda de tinta e ganha ícone com texto acessível | Sinal só por cor. E descarta não ter teto: sem ele o quadro mostra o trabalho, mas não mostra o gargalo, que é a razão de o quadro existir |
| QD6 | Mover sem arrastar é o caminho PRINCIPAL: menu "Mover para…" em todo cartão, sempre presente | Arraste como caminho único — reprova o SC 2.5.7. E descarta tratar o teclado como se fosse a alternativa: a norma pede os dois, porque quem usa toque pode não ter teclado |
| QD7 | Teclado completo: Espaço pega, setas escolhem a etapa, Enter solta, Esc cancela — e cada passo é anunciado em live region | Mover sem anúncio. Movimento que só se vê não existe para quem não vê |
| QD8 | A rolagem horizontal do quadro é exceção bidimensional DECLARADA ao SC 1.4.10: região focável, nomeada, com encaixe | Rolagem no documento inteiro. A exceção da norma vale para o conteúdo que exige duas dimensões, e vale para a região — não para a página |
| QD9 | Largura de trilha FIXA | Coluna elástica: a largura mudaria conforme o número de etapas, e o mesmo cartão teria tamanho diferente em cada quadro |
| QD10 | Dentro do cartão não nasce outro cartão: o seletor de campo do domínio é linha com fronteira | Peça dentro de peça (CP2) |
| QD11 | Alvo de soltura em borda TRACEJADA, nunca cor saturada (CP30) | Realce cromático: ele desaparece na escala de cinza, e o preview tem o controle que prova isso |
| QD12 | A coluna vazia NÃO colapsa e mostra o convite (C59) | Colapsar. A coluna vazia é lugar de pôr coisa — o vazio aqui é convite, não erro (§25, caso C) — e colapsar faria o quadro mudar de forma a cada movimento |
| QD13 | No degrau estreito, uma trilha por vez, com encaixe — densidade por container query (CP27) | Miniaturizar as colunas: quatro colunas de 80px não são um quadro |
| QD14 | Abrir o cartão leva ao detalhe (A8); o quadro não edita o registro | Editar tudo no cartão. O cartão é a face do objeto, não o objeto |
57.3 Números MEDIDOS na produção#
| Medida | Valor |
|---|---|
| Largura da trilha (fixa) | 288px |
| Calha entre trilhas · entre cartões | 12px · 8px |
| Alvo do gatilho "Mover para" | 44 × 32px |
| Alvo do convite da coluna vazia e do "+" da etapa | 44px no eixo curto |
| Raio do cartão · da trilha | 12px · 0px |
| Transbordo horizontal do documento | 0px (quem rola é a região declarada) |
| Pares de cor medidos (F7.3 + F7.4) | 54 pares × 2 temas = 108 · 0 |
57.4 Validação#
| Camada | Placar |
|---|---|
suite-quadro.mjs — blocos TRI · CAR · WIP · PTR · TEC · REG · VAZ · VIV |
35 · 0 |
suite-composicao.mjs (render, 2 temas) |
32 · 0 |
contraste-f73.py — 54 pares × 2 temas |
108 · 0 |
| Console e erros de página | limpo |
Nota sobre a
suite-composicao.mjs: a guardaMONO-03(coluna de valor à direita e em monoespaçada, contrato PN21d) passou a ser condicional à existência de tabela, e isso está impresso na saída, não silenciado. A distinção importa e não é a mesma coisa que "pular quando o elemento falta": quando há tabela, a coluna de valor tem de existir e obedecer; quando não há tabela, o contrato não se aplica. O quadro empilha cartões, não linhas — não há coluna a alinhar. Por isso o gabarito A7 fecha em 32, e não em 33.
57.5 Pendências#
| # | Pendência | Por que fica aberta |
|---|---|---|
| QD-P1 | Arraste com ponteiro (o 1º caminho do CP30) não está implementado no gabarito | Os caminhos obrigatórios pela norma são o de ponteiro único e o de teclado, e ambos estão prontos e provados. O arraste é conveniência, e implementá-lo sem dnd-kit no gabarito criaria código que o produto não vai usar |
| QD-P2 | Raias horizontais (swimlanes) não especificadas | Nenhum caso SEED atual exige. Entra quando houver — e o CP2 já prevê a trilha, que é o mesmo tipo em outro eixo |
| QD-P3 | Reordenar dentro da mesma coluna — o menu move entre etapas, não muda a posição | O quadro SEED ordena por prazo, não à mão. Reabre se surgir caso de prioridade manual |
| QD-P4 | A5 gantt e A15 carga de trabalho, os outros dois arquétipos da F7.4 | O gantt tem leitura (C77–C81); a carga não tem. Próximo movimento da fase |