vaiperui

componentes / toast

Toast

Notificações temporárias disparadas de qualquer lugar com toast(), renderizadas por um único Toaster.

Como usar

Monte `<Toaster />` uma vez perto da raiz e chame `toast({ ... })` (ou `useToast()`) em qualquer lugar; retorna o id, e `toast.dismiss(id)` fecha. Os toasts se empilham numa região em portal, fecham sozinhos após `duration` (5000 ms) e pausam com hover ou foco; `Esc` fecha o focado. `warning` e `danger` são anunciados de forma assertiva.

preview
Toast.tsx
import { Toaster, toast } from "vaiperui";
// once, at the app root
<Toaster position="top-right" />
toast({ variantColor: "success", title: "Salvo", description: "Suas alterações foram salvas." })
toast({
description: "Item removido.",
action: { label: "Desfazer", onClick: restore },
})

Cores

preview
variantColor
cores.tsx
toast({ variantColor: "primary", description: "primary" })
toast({ variantColor: "success", description: "success" })
toast({ variantColor: "warning", description: "warning" })
toast({ variantColor: "danger", description: "danger" })

Persistente e personalizado

preview
duration: 0
persistente.tsx
toast({ description: "...", duration: 0 })
toast({ customColor: "#8b5cf6", description: "Violeta" })

Props

PropValoresPadrãoDescrição
positiontop-left | top-center | top-right | bottom-left | bottom-center | bottom-righttop-rightToaster: onde a pilha fica
limitnumber5Toaster: máximo de toasts visíveis
durationnumber5000Padrão do Toaster, ou por toast: ms até fechar sozinho; 0 mantém até fechar
labelstringNotificationsToaster: nome acessível da região
dismissLabelstringDismissToaster: nome acessível dos botões de fechar
radiusnone | sm | md | lg | fulllgToaster: arredondamento dos cantos
title / descriptionReactNodenenhumtoast(): o conteúdo (uma string simples vira a descrição)
variantColor / customColorprimary | success | warning | danger / CSS colorprimarytoast(): cor; customColor a substitui
iconReactNode | falseícone de statustoast(): seu ícone, ou false para ocultar
action{ label, onClick }nenhumtoast(): botão de ação; também fecha o toast
dismissiblebooleantruetoast(): mostrar o botão de fechar
id / onClosestring / () => voidnenhumtoast(): id repetido substitui o toast; onClose roda ao fechar

Acessibilidade

  • `Toaster` renderiza uma `<section>` com `aria-label` vindo de `label` (padrão "Notifications") dentro de um portal no `document.body`.
  • Cada toast é sua própria região live: `role="alert"` para `warning` e `danger`, `role="status"` para `primary` e `success`.
  • O toast nunca recebe foco ao aparecer, então não interrompe a digitação nem a navegação.
  • O timer de fechamento automático pausa com o ponteiro sobre o toast, com o foco dentro dele e com a aba oculta; depois retoma com o tempo restante.
  • O botão de fechar é um `<button>` real com `aria-label` vindo de `dismissLabel` (padrão "Dismiss"); `dismissible: false` o remove.
  • A `action` de um toast é um `<button>` real que executa `onClick` e depois fecha o toast.

Teclado

TeclaAção
EscFecha o toast que contém o foco.
Tab / Shift+TabMove entre a ação e o botão de fechar do toast; o foco pausa o timer.

Tenha em mente

  • Como toasts não recebem foco e podem sumir, usuários de teclado e leitores de tela podem perdê-los: nunca use um toast como único meio de transmitir informação essencial ou um erro.
  • `Esc` só funciona quando o foco está dentro de um toast; não há atalho global para alcançar ou fechar toasts.
  • Traduza `label` e `dismissLabel` você mesmo; os padrões são em inglês. Dê a toasts com `action` um `duration` longo ou infinito (`0`).