Aviso
Em andamentoConfirmação passageira de uma ação — "Inscrição salva", "Link copiado" —, no canto de baixo da tela, anunciada por região viva sem roubar o foco. Some sozinha em 6s, e o tempo para no hover e no foco; o erro não some sozinho.
- Função
- Estado e aviso
- Também chamado de
- toast, notificação, aviso passageiro, snackbar, mensagem flutuante
- Mora em
- app/components/molecules/Aviso.tsx
- Última mudança
- 2026-10-01
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
Logo depois de uma ação da pessoa, para confirmar que deu certo (ou avisar que falhou) sem tirá-la de onde está.
Faça
- Monte o
AvisosProvideruma vez, no alto da página, e dispare comuseAvisos().avisar({ … }). - Escreva o que aconteceu, curto: "Inscrição salva." — e, se couber, uma
acaoque desfaz ("Desfazer"). - Use
tipo="erro"para falha: vai para a regiãoalerte fica até a pessoa fechar.
Evite
- Informação que a pessoa ainda vai precisar: ela some.
- Mais de um aviso por ação. A pilha guarda no máximo três, e o mais antigo sai.
- Ação essencial só no aviso: quem não viu a tempo perde o caminho.
Quando não usar. Para uma mensagem que diz respeito à página ou ao formulário e precisa ficar, use o Alert. Para pedir uma decisão, o Modal. Para o erro de um campo, o FormField.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Ícone — Por tipo (informação, visto, alerta, X), 20px, decorativo.
- Tipo em texto — "Sucesso:", "Erro:"… só para o leitor, como no Alert.
- Título e mensagem — Título opcional em negrito e a mensagem em `text-sm`.
- Ação — Opcional: botão sublinhado de 44px de altura.
- Fechar — "Fechar aviso", 44×44.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Informação, sucesso, atenção, erro | Os pares tênue/forte do Alert (--*-subtle com --*-strong), 5,5:1 no mínimo. |
| Segurado | Com o ponteiro ou o foco em cima, o tempo para (data-segurado) — conferido no teste da ficha. |
| Entrando | Esmaece e sobe 8px em 300ms, só com movimento liberado. |
Comportamento
| Situação | O que acontece |
|---|---|
| Com ação | Não some sozinho, mesmo com duracao (E144): ação com cronômetro é limite de tempo (SC 2.2.1). Fica até alguém fechar — testado na ficha. |
| Esc | Com o foco num botão do aviso, dispensa o aviso (E144, guia de toasts do A11Y.md) — testado na ficha. |
| Tempo | Pelo tamanho do texto: 6 s no mínimo, cerca de 60 ms por caractere (E144; era 6 s para qualquer tamanho) — testado na ficha. |
| `avisar` com informação, sucesso ou atenção | Entra na região status, já montada, e é anunciado na próxima pausa — conferido no teste da ficha; o foco não se move. |
| `avisar` com erro | Entra na região alert e não some sozinho. |
| Fim do tempo | Some e chama onFechar; com o ponteiro em cima, espera — conferido no teste da ficha. |
| Quarto aviso | O mais antigo sai: no máximo três. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { Aviso } from '@/app/components/molecules/Aviso';
<Aviso mensagem={…}>…</Aviso>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
tipo | 'info' | 'sucesso' | 'atencao' | 'erro' | 'info' | não | Variante do cva. |
mensagem | string | — | sim | A mensagem, curta: "Inscrição salva." |
titulo | string | — | não | — |
acao | { rotulo: string; onClick: () => void } | — | não | Uma ação só, que desfaz ou completa: "Desfazer", "Ver inscrição". |
onFechar | () => void | — | não | Chamado pelo "Fechar aviso" e ao fim do tempo. |
duracao | number | null | — | não | Some sozinho depois deste tempo, em ms (padrão: pelo tamanho do texto, no mínimo 6 s). O erro nunca some sozinho: quem não viu a tempo perderia o que deu errado. Aviso com ação também não (E144): ação com cronômetro é limite de tempo (SC 2.2.1), que quem usa zoom ou leitor de tela perde — com acao, este valor é ignorado. O tempo para enquanto o ponteiro ou o foco estiverem no aviso. |
Aceita também: Omit<React.HTMLAttributes<HTMLDivElement>, 'title'>.
Medidas
| Parte | Valor | Classe |
|---|---|---|
| Largura, a partir de 768px (tablet) | 384px, no canto de baixo à direita | md:w-96 |
| Tempo | 6s; o erro não some | duracao |
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/25 |
--destructive-strong | #BA0517 | text-destructive-strong |
--destructive-subtle | #F9EBEC | bg-destructive-subtle |
--foreground | #1A1A1A | bg-ink/5 |
--info | #1D345E | border-info/25 |
--info-strong | #142544 | text-info-strong |
--info-subtle | #EDF0F5 | bg-info-subtle |
--success | #2E844A | border-success/25 |
--success-strong | #276F3E | text-success-strong |
--success-subtle | #EEF5F1 | bg-success-subtle |
--warning | #DD7A01 | border-warning/25 |
--warning-strong | #945201 | text-warning-strong |
--warning-subtle | #FCF4EB | bg-warning-subtle |
Teclado
| Tecla | Faz |
|---|---|
| Tab | O aviso não rouba o foco; ele entra na ordem de Tab no fim da página — a ação e o "Fechar aviso". Conferido no teste da ficha. |
| EnterEspaço | No "Fechar aviso", fecha; na ação, a executa — conferido no teste da ficha. |
Leitor de tela
O que é anunciado, e por quê.
- As regiões vivas existem antes do aviso: região criada junto com a mensagem não é anunciada.
- O tempo cumpre a WCAG 2.2.1: para no hover e no foco, e o erro não tem tempo.
- O tipo vai em texto escondido ("Erro: …"): a cor e o ícone não chegam a quem ouve.
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/Aviso.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.
251416b2026-10-01E159: Testimonials — o vídeo toca dentro do cartão, YouTube e Vimeo
O histórico completo está no GitHub (abre em outra aba).