From b14c925b9bd706f23ab9c3222a7a7da187520374 Mon Sep 17 00:00:00 2001 From: Vula Builder Date: Tue, 15 Sep 2026 18:02:59 +0000 Subject: [PATCH] Deploy --- src/components/ui/Modal.tsx | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/components/ui/Modal.tsx diff --git a/src/components/ui/Modal.tsx b/src/components/ui/Modal.tsx new file mode 100644 index 0000000..4d43116 --- /dev/null +++ b/src/components/ui/Modal.tsx @@ -0,0 +1,65 @@ +'use client' + +import React, { useEffect } from "react" +import { X } from 'lucide-react' +import { cn } from "@/lib/utils" + +interface ModalProps { + isOpen: boolean + onClose: () => void + title?: string + description?: string + children: React.ReactNode + className?: string +} + +export default function Modal({ isOpen, onClose, title, description, children, className }: ModalProps) { + useEffect(() => { + if (!isOpen) return + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") onClose() + } + document.addEventListener("keydown", handleKeyDown) + const previousOverflow = document.body.style.overflow + document.body.style.overflow = "hidden" + return () => { + document.removeEventListener("keydown", handleKeyDown) + document.body.style.overflow = previousOverflow + } + }, [isOpen, onClose]) + + if (!isOpen) return null + + return ( +
+ + ) +} \ No newline at end of file