fix: keyboard shortcuts bugs and add shortcut hint

- Fix ? shortcut: add shiftKey: true so it matches on standard keyboards
- Fix Escape: keep hook always enabled so ESC closes the modal
  (remove dead showKeyboardHelp branch, read all state at invocation time)
- Fix formatShortcutKey: don't show redundant ⇧ for shifted punctuation
- Remove stale showKeyboardHelp from useMemo deps
- Add "Press ? for keyboard shortcuts" hint in graph area

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lum1104
2026-03-24 10:19:31 +08:00
Unverified
parent dbd761d72d
commit cd8cd0fb5c
2 changed files with 14 additions and 8 deletions
@@ -32,6 +32,7 @@ function App() {
// Help
{
key: "?",
shiftKey: true,
description: "Show keyboard shortcuts",
action: () => setShowKeyboardHelp((prev) => !prev),
category: "General",
@@ -43,14 +44,14 @@ function App() {
action: () => {
// Read from store at invocation time to avoid stale closures
const state = useDashboardStore.getState();
if (showKeyboardHelp) {
setShowKeyboardHelp(false);
} else if (state.codeViewerOpen) {
if (state.codeViewerOpen) {
state.closeCodeViewer();
} else if (state.selectedNodeId) {
state.selectNode(null);
} else if (state.tourActive) {
state.stopTour();
} else {
setShowKeyboardHelp(false);
}
},
category: "Navigation",
@@ -109,11 +110,11 @@ function App() {
category: "View",
},
],
[showKeyboardHelp]
[]
);
// Register keyboard shortcuts
useKeyboardShortcuts(shortcuts, !showKeyboardHelp);
useKeyboardShortcuts(shortcuts);
useEffect(() => {
fetch("/knowledge-graph.json")
@@ -219,8 +220,11 @@ function App() {
{/* Main content: Graph + Sidebar */}
<div className="flex-1 flex min-h-0 relative">
{/* Graph area */}
<div className="flex-1 min-w-0 min-h-0">
<div className="flex-1 min-w-0 min-h-0 relative">
<GraphView />
<div className="absolute top-3 right-3 text-sm text-text-muted/60 pointer-events-none select-none">
Press <kbd className="kbd">?</kbd> for keyboard shortcuts
</div>
</div>
{/* Right sidebar */}
@@ -60,10 +60,12 @@ export function formatShortcutKey(shortcut: KeyboardShortcut): string {
if (shortcut.ctrlKey || shortcut.metaKey) {
keys.push(isMac ? "⌘" : "Ctrl");
}
if (shortcut.shiftKey) keys.push("⇧");
// Don't show ⇧ for keys that inherently require Shift (e.g. ?, !, @)
const isShiftedPunctuation = shortcut.key.length === 1 && /[^a-zA-Z0-9]/.test(shortcut.key);
if (shortcut.shiftKey && !isShiftedPunctuation) keys.push("⇧");
if (shortcut.altKey) keys.push(isMac ? "⌥" : "Alt");
keys.push(shortcut.key.toUpperCase());
keys.push(isShiftedPunctuation ? shortcut.key : shortcut.key.toUpperCase());
return keys.join(" + ");
}