Toast
Componente de notificação temporária usado para mostrar mensagens de feedback ao usuário.
Configuração
Adicione o componente ToastProvider ao layout raiz ou a um componente central da sua aplicação.
import { ToastProvider } from "@medway-ui/core";
export default function RootLayout({ children }) {
return (
<html lang="pt-BR">
<body>
<main>{children}</main>
<ToastProvider />
</body>
</html>
);
}Exemplos
Primary
Secondary
Success
Warning
Error
Green Gradient
Gold Gradient
Silver Gradient
Bronze Gradient
Com ação
Sem ícone
Ícone personalizado
Sem descrição
API
useToast
Os toasts são criados de forma imperativa pelo hook useToast(), que precisa ser chamado em um Client Component. O ToastProvider renderiza cada toast da fila com título, descrição, a action opcional e um botão ToastClose. No máximo 3 toasts aparecem ao mesmo tempo (o mais recente primeiro).
const { toast, dismiss, toasts } = useToast();
const { id, update, dismiss: dismissThis } = toast({
title: "Salvo",
description: "Suas alterações foram salvas.",
variant: "success",
});| Retorno | Tipo | Descrição |
|---|---|---|
| toast | (options) => { id: string; update: (options) => void; dismiss: () => void } | Coloca um novo toast na fila. options aceita title, description (ambos ReactNode), action (um elemento ToastAction) e todas as props de Toast abaixo (variant, showIcon, icon, duration, …). O open é controlado pelo hook e o valor passado é ignorado; o onOpenChange passado é chamado junto com o do hook (com false quando o toast fecha). Retorna o id do toast e os helpers update e dismiss desse toast. |
| dismiss | (toastId?: string) => void | Fecha o toast com o id informado, ou todos os toasts abertos quando chamada sem argumentos. |
| toasts | array | Os toasts que estão na fila no momento, como renderizados pelo ToastProvider. |
Toast
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| variant | "primary" | "secondary" | "success" | "warning" | "error" | "green-gradient" | "gold-gradient" | "silver-gradient" | "bronze-gradient" | "primary", "secondary", "success", "warning", "error", "green-gradient", "gold-gradient", "silver-gradient", "bronze-gradient" | "primary" | Define o estilo visual do toast. As variantes "-gradient" aplicam um fundo em degradê de cor fixa com texto de cor fixa, independente do tema (usadas em toasts de gamificação, como pontos ganhos ou posições no pódio). |
| showIcon | boolean | true, false | true | Mostra ou esconde o ícone resolvido (o icon personalizado, se houver, ou o ícone padrão da variante). |
| icon | ReactNode | - | - | Substitui o ícone padrão da variante atual. Funciona com todas as variantes, não só as de degradê. É renderizado como está (sem tamanho ou cor forçados), então estilize você mesmo se precisar fugir dos padrões dele. |
| duration | number | - | 5000 | Duração em milissegundos até o toast fechar sozinho. |
| className | string | - | - | Classes CSS adicionais para personalização. |
ToastAction
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| variant | "primary" | "secondary" | "success" | "warning" | "error" | "green-gradient" | "gold-gradient" | "silver-gradient" | "bronze-gradient" | "primary", "secondary", "success", "warning", "error", "green-gradient", "gold-gradient", "silver-gradient", "bronze-gradient" | "primary" | Define o estilo visual do botão de ação. Deve ser igual à variante do Toast pai. |
| size | "sm" | "md" | "lg" | "xl" | "sm", "md", "lg", "xl" | "sm" | Tamanho do Button interno. |
| iconLeft / iconRight | ReactNode | - | - | Ícones repassados ao Button interno. |
| altText | string | - | "Ação do toast" | Descreve a ação para quem usa leitor de tela e não consegue alcançar o botão a tempo (Toast.Action do Radix). |
| className | string | - | - | Classes CSS adicionais para personalização. |
ToastProvider
Renderiza os toasts enfileirados pelo useToast() e o viewport onde todos os toasts aparecem. Aceita children opcionais: toasts montados à mão ficam dentro dele e dividem o mesmo viewport com os da fila. Sem children, funciona exatamente como antes. Para mudar o viewport (rótulo, atalho ou classes), passe as props dele em viewportProps, por exemplo <ToastProvider viewportProps={{ label: "Avisos ({hotkey})" }} />.
"use client";
import { useState } from "react";
import { Toast, ToastClose, ToastProvider, ToastTitle } from "@medway-ui/core";
function ManualToast() {
const [open, setOpen] = useState(true);
return (
<Toast open={open} onOpenChange={setOpen}>
<ToastTitle>Alterações salvas</ToastTitle>
<ToastClose />
</Toast>
);
}
export function Layout({ children }: { children: React.ReactNode }) {
return (
<>
{children}
<ToastProvider>
<ManualToast />
</ToastProvider>
</>
);
}| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| children | React.ReactNode | - | - | Toasts montados à mão, que aparecem no mesmo viewport dos toasts da fila. |
| viewportProps | React.ComponentProps<typeof Toast.Viewport> | - | - | Props repassadas ao ToastViewport padrão (label, hotkey, className…). |
ToastClose
Botão de fechar só com ícone, feito com o Dismiss (28×28). O ToastProvider já renderiza um em cada toast, então use direto só quando montar um Toast à mão dentro do ToastProvider.
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| label | string | - | "Fechar" | Label acessível (aria-label) do botão de fechar. |
| variant | Variante do Toast | Mesmos valores de Toast | - | Adapta as cores do botão aos toasts em degradê. Passe a variante do Toast pai. |
| className | string | - | - | Classes CSS adicionais para personalização. |
ToastTitle
Título do toast, em destaque. O ToastProvider já o renderiza a partir do title passado ao toast(); use direto só ao montar um Toast à mão. Aceita as props do Toast.Title do Radix.
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| children | React.ReactNode | - | - | Texto do título. |
| className | string | - | - | Classes CSS adicionais para personalização. |
ToastDescription
Texto de apoio exibido abaixo do título. O ToastProvider já o renderiza a partir do description passado ao toast(); use direto só ao montar um Toast à mão. Aceita as props do Toast.Description do Radix.
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| children | React.ReactNode | - | - | Texto da descrição. |
| className | string | - | - | Classes CSS adicionais para personalização. |
ToastViewport
Região fixa no canto superior direito da tela onde os toasts aparecem. O ToastProvider já renderiza um, então não é preciso adicioná-lo à mão: as props abaixo são passadas pelo viewportProps do ToastProvider. Aceita as props do Toast.Viewport do Radix.
| Propriedade | Tipo | Valores possíveis | Padrão | Descrição |
|---|---|---|---|---|
| label | string | - | "Notificações ({hotkey})" | Nome acessível da região dos toasts, lido por leitores de tela. O trecho {hotkey} é trocado pelo atalho de teclado que leva o foco até os toasts. |
| hotkey | string[] | - | ["F8"] | Atalho de teclado que move o foco para a região dos toasts (padrão do Radix). |
| className | string | - | - | Classes CSS adicionais para personalização. |