Resumo De Erros
Em andamentoO resumo de erros do padrão GOV.UK, no topo do formulário: um título que diz quantos problemas há e um link para cada campo com erro. Recebe o foco quando o envio falha — quem usa leitor de tela ouve o resumo uma vez, em vez de um alerta por campo — e cada link leva o foco ao campo.
- Função
- Formulário e ação
- Também chamado de
- resumo de erros, lista de erros, error summary, erros do formulário
- Mora em
- app/components/molecules/ResumoDeErros.tsx
- Última mudança
- 2026-09-30
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 formulário com mais de um campo que pode dar erro ao enviar: contato, inscrição, matrícula.
Faça
- Passe os
errosna ordem dos campos na tela, cada um com oidDoCampoe a mensagem que diz como acertar. - Aumente a
tentativaa cada envio que falha: é ela que manda o foco para o resumo. - Nos FormField do mesmo formulário, passe
anunciarErro={false}: o resumo é o alerta; o erro continua ligado ao campo. - Acerte o
nivelDoTituloconforme a página (padrãoh2).
Evite
- Mostrar o resumo antes do primeiro envio: ele responde a uma tentativa, não à digitação.
- Mensagem diferente no resumo e no campo: a pessoa lê uma e procura a outra.
Quando não usar. Em formulário de um campo só (a Newsletter): o erro do FormField, anunciado na hora, basta. Para uma mensagem sobre a página, não sobre campos, use o Alert.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Caixa — Borda de 2px `--destructive` e fundo `--destructive-subtle`; recebe o foco e interrompe o leitor: `<div role="alert" tabIndex={-1}>`.
- Título — "Há um problema no formulário" ou "Há N problemas no formulário", com o ícone de alerta; nomeia a caixa.
- Links — Um por erro, com a mensagem do campo; levam o foco a ele.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Sem erro | Não aparece (e o título da página volta ao normal). |
| Um erro | Título no singular. |
| Vários erros | Título com a contagem e a lista. |
| Foco | O anel de foco do sistema na caixa, depois do envio. |
Comportamento
| Situação | O que acontece |
|---|---|
| Envio que falha | Com a tentativa nova, o resumo recebe o foco — testado na ficha. |
| Link de um erro | O foco vai para o campo, e a página rola até ele — testado na ficha. Sem JavaScript, o href leva até lá. |
| Título da página | Com prefixarTituloDaPagina (padrão), ganha "Erro: " enquanto houver erro, e volta ao normal depois — testado na ficha. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { ResumoDeErros } from '@/app/components/molecules/ResumoDeErros';
<ResumoDeErros erros={…}>…</ResumoDeErros>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
erros | ErroDoFormulario[] | — | sim | Os erros, na ordem dos campos na tela. Sem erro, o resumo não aparece. |
tentativa | number | 0 | não | Muda a cada envio que falha (um contador serve). O resumo recebe o foco quando ela muda e há erro — e não ao montar, para não roubar o foco de quem só abriu a página. |
nivelDoTitulo | 'h2' | 'h3' | 'h4' | 'h2' | não | Nível do título (padrão h2). Acerte conforme a página. |
prefixarTituloDaPagina | boolean | true | não | Põe "Erro: " na frente do título da página enquanto houver erro (padrão GOV.UK): é a primeira coisa que o leitor de tela diz ao voltar à aba. Desligue quando a página já cuida do próprio título. |
Aceita também: Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>.
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 |
|---|---|---|
--destructive | #BA0517 | border-destructive |
--destructive-strong | #BA0517 | text-destructive-strong |
--destructive-subtle | #F9EBEC | bg-destructive-subtle |
Teclado
| Tecla | Faz |
|---|---|
| Tab | Do resumo com foco, passa pelos links dos erros, na ordem dos campos. |
| Enter | Num link, leva o foco ao campo do erro. |
Leitor de tela
O que é anunciado, e por quê.
- Um anúncio por envio: o resumo tem o foco e é lido; os campos, com
anunciarErro={false}, não disparam alertas próprios. - O erro do campo continua na descrição dele, com "Erro:" na frente (
sr-only), lido quando o foco chega.
O que sustenta o estado
Esta peça usa regiaoViva. 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: regiaoViva — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/molecules/ResumoDeErros.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.
0298af82026-09-30E147: fechamento da Entrega 11 — REPORT.md, verificação cross-agent e o gate estático estrito
O histórico completo está no GitHub (abre em outra aba).