import { useEffect, useRef, useState, type CSSProperties } from 'react'; import { WORKSPACE_DESCRIPTORS, type WorkspaceKind, } from '../workspaces/workspace'; type WorkspaceMenuProps = { value: WorkspaceKind; onChange: (kind: WorkspaceKind) => void; }; const noDrag: CSSProperties & { WebkitAppRegion?: 'no-drag' } = { WebkitAppRegion: 'no-drag', }; export function WorkspaceMenu({ value, onChange }: WorkspaceMenuProps) { const [open, setOpen] = useState(false); const rootRef = useRef(null); const current = WORKSPACE_DESCRIPTORS.find((d) => d.kind === value); useEffect(() => { if (!open) return; const onDocMouseDown = (event: MouseEvent) => { if (!rootRef.current) return; if (!rootRef.current.contains(event.target as Node)) { setOpen(false); } }; const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false); }; document.addEventListener('mousedown', onDocMouseDown); document.addEventListener('keydown', onKey); return () => { document.removeEventListener('mousedown', onDocMouseDown); document.removeEventListener('keydown', onKey); }; }, [open]); return (
{open ? (
{WORKSPACE_DESCRIPTORS.map((descriptor) => { const selected = descriptor.kind === value; return ( ); })}
) : null}
); }