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} ); }