import { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from '@/hooks/useTranslation'; import { isMacPlatform } from '@/services/environment'; import { getShortcutsForDisplay } from '@/helpers/shortcuts'; import { formatKeyForDisplay } from '@/utils/shortcutKeys'; import Dialog from './Dialog'; import Link from './Link'; export const setShortcutsDialogVisible = (visible: boolean) => { const dialog = document.getElementById('shortcuts_help'); if (dialog) { const event = new CustomEvent('setDialogVisibility', { detail: { visible }, }); dialog.dispatchEvent(event); } }; export const KeyboardShortcutsHelp = () => { const _ = useTranslation(); const [isOpen, setIsOpen] = useState(false); const isMac = isMacPlatform(); const sections = useMemo(() => getShortcutsForDisplay(isMac), [isMac]); // Split sections into two balanced columns by item count const [leftColumn, rightColumn] = useMemo(() => { const totalItems = sections.reduce((sum, s) => sum + s.items.length + 1, 0); // +1 for header const left: typeof sections = []; const right: typeof sections = []; let leftCount = 0; for (const section of sections) { const sectionWeight = section.items.length + 1; if (leftCount <= totalItems / 2) { left.push(section); leftCount += sectionWeight; } else { right.push(section); } } return [left, right]; }, [sections]); const renderSection = useCallback( (section: (typeof sections)[number]) => (