import { useEffect, useRef, useState } from "react"; export interface ExportCommand { id: string; label: string; description: string; disabled?: boolean; disabledReason?: string | undefined; busy?: boolean; onSelect(): void | Promise; } export interface ExportMenuProps { commands: ExportCommand[]; } export function ExportMenu({ commands }: ExportMenuProps) { const [open, setOpen] = useState(false); const menuRef = useRef(null); useEffect(() => { if (!open) { return; } const handlePointerDown = (event: PointerEvent) => { if ( event.target instanceof Node && !menuRef.current?.contains(event.target) ) { setOpen(false); } }; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") { setOpen(false); } }; window.addEventListener("pointerdown", handlePointerDown); window.addEventListener("keydown", handleKeyDown); return () => { window.removeEventListener("pointerdown", handlePointerDown); window.removeEventListener("keydown", handleKeyDown); }; }, [open]); return (
{open ? ( ) : null}
); }