"use client"; import { useEffect, useState } from "react"; import { create } from "zustand"; interface ToastState { message: string | null; type: "info" | "success" | "warning" | "error"; persistent: boolean; details: string | null; show: (message: string, type?: "info" | "success" | "warning" | "error", persistent?: boolean, details?: string | null) => void; hide: () => void; } export const useToast = create((set) => ({ message: null, type: "info", persistent: false, details: null, show: (message, type = "info", persistent = false, details = null) => set({ message, type, persistent, details }), hide: () => set({ message: null, persistent: false, details: null }), })); const typeStyles = { info: "bg-neutral-800 border-neutral-600 text-neutral-100", success: "bg-green-900 border-green-700 text-green-100", warning: "bg-orange-900 border-orange-600 text-orange-100", error: "bg-red-900 border-red-700 text-red-100", }; const typeIcons = { info: ( ), success: ( ), warning: ( ), error: ( ), }; export function Toast() { const { message, type, persistent, details, hide } = useToast(); const [isExpanded, setIsExpanded] = useState(false); useEffect(() => { // Reset expanded state when toast changes setIsExpanded(false); }, [message]); useEffect(() => { if (message && !persistent) { const timer = setTimeout(() => { hide(); }, 4000); return () => clearTimeout(timer); } }, [message, persistent, hide]); if (!message) return null; return (
{typeIcons[type]} {message}
{details && ( <> {isExpanded && (
                  {details}
                
)} )}
); }