import { type ComponentPropsWithoutRef } from 'react'; import { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner'; import { Notification, type NotificationActionProps, type NotificationProps } from '../notification'; export interface ToasterProps extends ComponentPropsWithoutRef {} const Toaster = ({ style, ...props }: ToasterProps) => { return ( ); }; interface ToastIconParams extends Pick { action?: NotificationActionProps; } const successToast = (title: string, params?: ToastIconParams) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} title={title} actionProps={params?.action} {...params} /> )); }; const errorToast = (title: string, params?: ToastIconParams) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} title={title} actionProps={params?.action} {...params} /> )); }; const warningToast = (title: string, params?: ToastIconParams) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} title={title} actionProps={params?.action} {...params} /> )); }; interface ToastAvatarParams extends Pick { action?: NotificationActionProps; } const avatarToast = (title: string, params?: ToastAvatarParams) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} title={title} actionProps={params?.action} {...params} /> )); }; interface ToastImageParams extends Pick { action?: NotificationActionProps; } const imageToast = (title: string, params?: ToastImageParams) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} title={title} actionProps={params?.action} {...params} /> )); }; const baseToast = (params?: NotificationProps) => { return sonnerToast.custom((t) => ( { params?.onClose?.(); sonnerToast.dismiss(t); }} {...params} /> )); }; const toast = { success: successToast, error: errorToast, warning: warningToast, avatar: avatarToast, image: imageToast, base: baseToast, custom: sonnerToast.custom, }; export { toast, Toaster };