import { useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { HiX } from 'react-icons/hi'; import './Modal.css'; /** * Modal component with overlay, animation, and close behavior */ export default function Modal({ isOpen, onClose, title, children, size = 'md', showClose = true }) { // Prevent body scroll when modal is open useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [isOpen]); // Close on Escape useEffect(() => { const handleEsc = (e) => e.key === 'Escape' && onClose(); if (isOpen) window.addEventListener('keydown', handleEsc); return () => window.removeEventListener('keydown', handleEsc); }, [isOpen, onClose]); return ( {isOpen && (
e.stopPropagation()} > {(title || showClose) && (
{title &&

{title}

} {showClose && ( )}
)}
{children}
)}
); }