import React, {useContext} from "react"; import {Table, TableBody, TableCell, TableHeader, TableHeaderCell, TableRow} from "semantic-ui-react"; import {Button, Header, Modal} from "./Theme"; import {ThemeContext} from "../contexts/contexts"; import {SHORTCUTS} from "./KeyboardShortcutsProvider"; // Format keyboard keys for display function KeyboardKey({children}) { return ( {children} ); } // Parse shortcut keys string and render as keyboard keys function ShortcutKeys({keys}) { // Handle multiple key combinations (e.g., "meta+k, ctrl+k") const combinations = keys.split(', '); return ( {combinations.map((combo, idx) => { const parts = combo.split('+').map(part => { // Convert key names to display format switch (part.toLowerCase()) { case 'meta': return 'Cmd'; case 'ctrl': return 'Ctrl'; case 'shift': return 'Shift'; case 'escape': return 'Esc'; default: return part.toUpperCase(); } }); // Handle sequence shortcuts like "g h" const isSequence = combo.includes(' ') && !combo.includes('+'); if (isSequence) { const seqParts = combo.split(' '); return ( {idx > 0 && ' / '} {seqParts.map((p, i) => ( {p.toUpperCase()} {i < seqParts.length - 1 && ' then '} ))} ); } return ( {idx > 0 && ' / '} {parts.map((p, i) => ( {p} {i < parts.length - 1 && ' + '} ))} ); })} ); } // Group shortcuts by category function groupShortcutsByCategory(shortcuts) { const groups = {}; shortcuts.forEach(shortcut => { const category = shortcut.category || 'Other'; if (!groups[category]) { groups[category] = []; } groups[category].push(shortcut); }); return groups; } export default function HelpModal({open, onClose}) { const {i, t} = useContext(ThemeContext); const groupedShortcuts = groupShortcutsByCategory(SHORTCUTS); // Order categories const categoryOrder = ['Search', 'General', 'Help', 'Navigation']; const orderedCategories = categoryOrder.filter(cat => groupedShortcuts[cat]); return ( Keyboard Shortcuts {orderedCategories.map(category => (
{category}
{groupedShortcuts[category].map((shortcut, idx) => ( {shortcut.description} ))}
))}
); }