import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; export function Toast({ toast }: { toast: { message: string; type: "success" | "error" } | null }) { const [visible, setVisible] = useState(false); const [current, setCurrent] = useState(toast); useEffect(() => { if (toast) { setCurrent(toast); setVisible(true); } else { setVisible(false); const timer = setTimeout(() => setCurrent(null), 200); return () => clearTimeout(timer); } }, [toast]); if (!current) return null; // Portal to document.body so the toast escapes any ancestor stacking context // (e.g.
has `relative z-2`, which would trap z-50 below the header's z-40). return createPortal(
{current.message}
, document.body, ); }