import { useSuspendPlayback } from '@/hooks/use-suspend-playback'; import { useEffect } from 'react'; import { createPortal } from 'react-dom'; import { KeyHint } from '@/components/key-hint'; export interface KeybindingEntry { keys: string[]; description: string; } export interface KeybindingGroup { label: string; bindings: KeybindingEntry[]; } interface KeybindingsOverlayProps { open: boolean; onClose: () => void; groups: KeybindingGroup[]; title?: string; } export function KeybindingsOverlay({ open, onClose, groups, title = 'Keyboard Shortcuts', }: KeybindingsOverlayProps) { useSuspendPlayback(open, 'keybindings'); useEffect(() => { if (!open) return; const handler = (e: KeyboardEvent) => { if (e.key === 'Escape' || e.key === '?') { e.preventDefault(); e.stopPropagation(); onClose(); } }; window.addEventListener('keydown', handler, { capture: true }); return () => window.removeEventListener('keydown', handler, { capture: true }); }, [open, onClose]); if (!open) return null; return createPortal(
{/* Backdrop */}
{/* Panel */}

{title}

to close
{groups.map((group) => (

{group.label}

    {group.bindings.map((binding) => (
  • {binding.description}
  • ))}
))}
, document.body, ); }