import { useEffect } from "react"; import type { ReactNode } from "react"; import { Plus, Trash2 } from "lucide-react"; import { useTranslation } from "react-i18next"; import { canvasThemes } from "@/lib/canvas-theme"; import { useThemeStore } from "@/stores/use-theme-store"; import type { ContextMenuState } from "@/types/canvas"; export function CanvasNodeContextMenu({ menu, onClose, onDuplicate, onDelete }: { menu: ContextMenuState; onClose: () => void; onDuplicate: () => void; onDelete: () => void }) { const { t } = useTranslation(); const theme = canvasThemes[useThemeStore((state) => state.theme)]; useEffect(() => { const close = (event: PointerEvent) => { const target = event.target; if (target instanceof Element && target.closest(".ant-popover")) return; onClose(); }; window.addEventListener("pointerdown", close); return () => window.removeEventListener("pointerdown", close); }, [onClose]); return (
event.stopPropagation()} > {menu.type === "node" ? } label={t("canvas.controls.duplicate")} onClick={onDuplicate} /> : null} } label={t("canvas.controls.delete")} onClick={onDelete} danger />
); } function MenuButton({ icon, label, onClick, danger = false }: { icon: ReactNode; label: string; onClick?: () => void; danger?: boolean }) { const theme = canvasThemes[useThemeStore((state) => state.theme)]; return ( ); }