'use client'; import { forwardRef, HTMLAttributes, useEffect } from 'react'; import styles from './cyber-modal.module.css'; export interface CyberModalProps extends HTMLAttributes { /** Modal open state */ isOpen: boolean; /** Close callback */ onClose: () => void; /** Modal title */ title?: string; /** Neon color variant */ variant?: 'cyan' | 'pink' | 'green' | 'red'; /** Modal size */ size?: 'sm' | 'md' | 'lg'; } export const CyberModal = forwardRef( ( { isOpen, onClose, title, variant = 'cyan', size = 'md', children, className, ...props }, ref ) => { 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 = ''; }; }, [isOpen, onClose]); if (!isOpen) return null; return (
e.stopPropagation()} role="dialog" aria-modal="true" {...props} >
{title &&

{title}

}
{children}
); } ); CyberModal.displayName = 'CyberModal'; export default CyberModal;