import React from 'react';
import { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner';
// 1. Exportamos el componente Toaster estandarizado con los Design Tokens
export const Toaster = (props: any) => {
return (
);
};
export interface ToastInterface {
(message: string | React.ReactNode, data?: any): string | number;
success: (message: string | React.ReactNode, data?: any) => string | number;
info: (message: string | React.ReactNode, data?: any) => string | number;
warning: (message: string | React.ReactNode, data?: any) => string | number;
error: (message: string | React.ReactNode, data?: any) => string | number;
custom: (message: string | React.ReactNode, data?: any) => string | number;
dismiss: (id?: string | number) => void;
loading: (message: string | React.ReactNode, data?: any) => string | number;
promise: (promise: Promise | (() => Promise), data?: any) => string | number;
}
// 2. Exportamos la función global con la interfaz simplificada para evitar fugas de tipos complejos
export const toast = sonnerToast as unknown as ToastInterface;
// 3. (Mock Legacy) Dejamos el hook useToast para compatibilidad con código antiguo
export function useToast() {
return {
addToast: (t: any) => {
// Mapeamos los tipos antiguos de @decido/ui a sonner
if (t.type === 'error') {
sonnerToast.error(t.title, { description: t.message });
} else if (t.type === 'success') {
sonnerToast.success(t.title, { description: t.message });
} else {
sonnerToast(t.title, { description: t.message });
}
},
removeToast: sonnerToast.dismiss
};
}
// 4. (Mock Legacy) Proveedor para no romper apps que aún envuelven su layout en
export function ToastProvider({ children }: { children: React.ReactNode }) {
return (
<>
{children}
>
);
}