Toast
Confirmar algo que ya pasó. Corto, se va solo en 4 s. Errores con acción para reintentar.
Avisos cortos sobre sonner para confirmar algo que ya pasó. Usa los tiempos por defecto de Sonner (4 s). Montá un <Toaster /> por app y llamá a toast() desde donde sea.
Instalación
shadcn
npx shadcn@latest add https://design.moodinary.com/r/toast.jsonimport
import { Toaster, toast } from "@moodinary/ui/components/toast";Ejemplos
Estados
Guardado, con Deshacer, error con Reintentar y una promesa que pasa de cargando a listo.
Código
states.tsx
import { Button } from "@moodinary/ui/components/button";
import { Toaster, toast } from "@moodinary/ui/components/toast";
const generarInforme = () =>
new Promise<string>((resolve) =>
setTimeout(() => resolve("Informe_sept_4A.pdf"), 1800)
);
export default function ToastStates() {
return (
<>
<Button
onClick={() =>
toast.success("Cambios guardados", {
description: "Personalización actualizada.",
})
}
variant="secondary"
>
Guardado
</Button>
<Button
onClick={() =>
toast("Equipo archivado", {
action: {
label: "Deshacer",
onClick: () =>
toast.success("Listo", { description: "5.º B restaurado." }),
},
description: "5.º B ya no recibe pulsos.",
})
}
variant="secondary"
>
Con acción
</Button>
<Button
onClick={() =>
toast.error("No pudimos enviar el informe", {
action: { label: "Reintentar", onClick: () => undefined },
description: "Revisá tu conexión.",
})
}
variant="secondary"
>
Error
</Button>
<Button
onClick={() =>
toast.promise(generarInforme(), {
error: "No pudimos generar el informe",
loading: "Generando informe…",
success: (archivo) => ({
description: archivo,
message: "Informe listo",
}),
})
}
variant="secondary"
>
Promesa
</Button>
<Toaster />
</>
);
}Props
Toaster
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
| duration | number | 4000 | Milisegundos antes de irse. |
| position | "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right" | "bottom-right" | Dónde aparecen. |
| toastOptions | ToastOptions | - | Opciones por defecto; las classNames se combinan con las del AppToaster real. |
toast
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
| toast(title, { description, action }) | function | - | Aviso neutro. |
| toast.success / toast.error | function | - | Con ícono de éxito o error. |
| toast.promise(promise, { loading, success, error }) | function | - | Sigue una promesa de punta a punta. |
Cuándo sí y cuándo no
Hacé
- Escribí en pasado: Cambios guardados.
- Ofrecé Deshacer en acciones reversibles.
- En errores, sumá Reintentar.
Evitá
- No uses toasts para errores de formulario; van junto al campo.
- No muestres dos toasts por la misma acción.
- No pongas info que haga falta leer después.
Accesibilidad
- Se anuncian en una región viva sin mover el foco.
- Los toasts con acción se pausan con hover y foco.
- Las acciones se alcanzan con teclado.