"use client"; import { useCallback, useEffect, useRef } from "react"; import { Pencil, Copy, Trash2, Scissors } from "lucide-react"; interface ContextMenuItem { label: string; icon: React.ReactNode; onClick: () => void; danger?: boolean; disabled?: boolean; } interface NodeContextMenuProps { x: number; y: number; items: ContextMenuItem[]; onClose: () => void; } export function NodeContextMenu({ x, y, items, onClose }: NodeContextMenuProps) { const ref = useRef(null); useEffect(() => { const handleClick = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) { onClose(); } }; const handleEsc = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); }; document.addEventListener("mousedown", handleClick); document.addEventListener("keydown", handleEsc); return () => { document.removeEventListener("mousedown", handleClick); document.removeEventListener("keydown", handleEsc); }; }, [onClose]); return (
{items.map((item, i) => ( ))}
); }