import React from "react"; import { Button } from "./button"; import { Card, CardContent, CardHeader, CardTitle } from "./card"; import { cn } from "../../lib/utils"; interface ModalProps { isOpen: boolean; onClose: () => void; title: string; children: React.ReactNode; className?: string; } /** * 기본 모달 컴포넌트 * - 배경 클릭으로 닫기 * - ESC 키로 닫기 * - 접근성 지원 (ARIA) */ export function Modal({ isOpen, onClose, title, children, className, }: ModalProps) { // ESC 키 이벤트 처리 React.useEffect(() => { const handleEscape = (event: KeyboardEvent) => { if (event.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 (!isOpen) return null; return (
다음 파일들을 업로드할 수 없습니다:
{error.fileName}
{error.error}