"use client"; import { useModalStore } from "@/stores/useModalStore"; import { AnimatePresence, motion } from "framer-motion"; import { useEffect, useRef } from "react"; import { createPortal } from "react-dom"; const Modal = () => { const isOpen = useModalStore((s) => s.isOpen); const content = useModalStore((s) => s.content); const closeModal = useModalStore((s) => s.closeModal); const modalRef = useRef(null); // Handle escape key to close useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === "Escape") closeModal(); }; if (isOpen) { document.addEventListener("keydown", handleEscape); document.body.style.overflow = "hidden"; // Prevent scrolling } return () => { document.removeEventListener("keydown", handleEscape); document.body.style.overflow = "unset"; }; }, [isOpen, closeModal]); const handleClickOutside = (e: React.MouseEvent) => { if (modalRef.current && !modalRef.current.contains(e.target as Node)) { closeModal(); } }; if (!isOpen) return null; return createPortal( e.stopPropagation()} > {content} , document.body ); }; export default Modal;