'use client'; import { Fragment, ReactNode, useEffect, useSyncExternalStore } from 'react'; import { createPortal } from 'react-dom'; interface ModalProps { isOpen: boolean; onClose: () => void; title?: string; children: ReactNode; size?: 'sm' | 'md' | 'lg' | 'xl'; } const sizeStyles = { sm: 'max-w-sm', md: 'max-w-md', lg: 'max-w-lg', xl: 'max-w-xl', }; function subscribe() { return () => {}; } function useIsMounted() { return useSyncExternalStore( subscribe, () => true, () => false ); } export function Modal({ isOpen, onClose, title, children, size = 'md' }: ModalProps) { const isMounted = useIsMounted(); useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; if (isOpen) { document.addEventListener('keydown', handleEscape); document.body.style.overflow = 'hidden'; } return () => { document.removeEventListener('keydown', handleEscape); document.body.style.overflow = 'unset'; }; }, [isOpen, onClose]); if (!isMounted || !isOpen) return null; return createPortal( {/* Backdrop */}