Pular para o conteúdo
UI

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.

layout.tsx
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",
});
RetornoTipoDescriçã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) => voidFecha o toast com o id informado, ou todos os toasts abertos quando chamada sem argumentos.
toastsarrayOs toasts que estão na fila no momento, como renderizados pelo ToastProvider.

Toast

PropriedadeTipoValores possíveisPadrãoDescriçã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).
showIconbooleantrue, falsetrueMostra ou esconde o ícone resolvido (o icon personalizado, se houver, ou o ícone padrão da variante).
iconReactNode--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.
durationnumber-5000Duração em milissegundos até o toast fechar sozinho.
classNamestring--Classes CSS adicionais para personalização.

ToastAction

PropriedadeTipoValores possíveisPadrãoDescriçã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 / iconRightReactNode--Ícones repassados ao Button interno.
altTextstring-"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).
classNamestring--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>
    </>
  );
}
PropriedadeTipoValores possíveisPadrãoDescrição
childrenReact.ReactNode--Toasts montados à mão, que aparecem no mesmo viewport dos toasts da fila.
viewportPropsReact.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.

PropriedadeTipoValores possíveisPadrãoDescrição
labelstring-"Fechar"Label acessível (aria-label) do botão de fechar.
variantVariante do ToastMesmos valores de Toast-Adapta as cores do botão aos toasts em degradê. Passe a variante do Toast pai.
classNamestring--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.

PropriedadeTipoValores possíveisPadrãoDescrição
childrenReact.ReactNode--Texto do título.
classNamestring--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.

PropriedadeTipoValores possíveisPadrãoDescrição
childrenReact.ReactNode--Texto da descrição.
classNamestring--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.

PropriedadeTipoValores possíveisPadrãoDescrição
labelstring-"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.
hotkeystring[]-["F8"]Atalho de teclado que move o foco para a região dos toasts (padrão do Radix).
classNamestring--Classes CSS adicionais para personalização.