import React, { ReactNode, useEffect } from 'react'; import { createPortal } from 'react-dom'; import { HiXMark, HiArrowsPointingOut, HiArrowsPointingIn } from 'react-icons/hi2'; import { Button } from './Button'; import Typography from './Typography'; interface ModalProps { children: ReactNode; isOpen: boolean; onClose: () => void; title?: string; isFullscreen?: boolean; onToggleFullscreen?: () => void; headerAction?: ReactNode; } /** * Modal component adapted from hashblocks design * Supports both fullscreen and regular modal modes */ const Modal: React.FC = ({ children, isOpen, onClose, title = 'Modal', isFullscreen = false, onToggleFullscreen, headerAction, }) => { useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = 'unset'; }; } }, [isOpen]); if (!isOpen) return null; return createPortal( isFullscreen ? (
{title}
{headerAction} {onToggleFullscreen && ( )}
{children}
) : (
{title}
{headerAction} {onToggleFullscreen && ( )}
{children}
), document.body, ); }; export default Modal;