Skip to content

Commit aa496ea

Browse files
author
whitebrendan
committed
Fix: Keyboard navigation in Command Palette overridden by mouse hover
1 parent 781b6da commit aa496ea

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/components/palette/CommandPalette.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export function PaletteCommandPalette() {
7575
const [selectedIndex, setSelectedIndex] = createSignal(0);
7676
const [recentIds, setRecentIds] = createSignal<string[]>([]);
7777
const [subMode, setSubMode] = createSignal<{ parentId: string; label: string; items: Array<{ id: string; label: string }> } | null>(null);
78+
const [lastNavMode, setLastNavMode] = createSignal<"keyboard" | "mouse">("keyboard");
7879
let inputRef: HTMLInputElement | undefined;
7980
let listRef: HTMLDivElement | undefined;
8081

@@ -151,8 +152,8 @@ export function PaletteCommandPalette() {
151152

152153
const handleKeyDown = (e: KeyboardEvent) => {
153154
const list = flatList();
154-
if (e.key === "ArrowDown") { e.preventDefault(); setSelectedIndex(i => Math.min(i + 1, list.length - 1)); }
155-
else if (e.key === "ArrowUp") { e.preventDefault(); setSelectedIndex(i => Math.max(i - 1, 0)); }
155+
if (e.key === "ArrowDown") { e.preventDefault(); setLastNavMode("keyboard"); setSelectedIndex(i => Math.min(i + 1, list.length - 1)); }
156+
else if (e.key === "ArrowUp") { e.preventDefault(); setLastNavMode("keyboard"); setSelectedIndex(i => Math.max(i - 1, 0)); }
156157
else if (e.key === "Enter") { e.preventDefault(); const c = list[selectedIndex()]; if (c) handleSelect(c.id); }
157158
else if (e.key === "Escape") { e.preventDefault(); if (subMode()) exitSubMode(); else setShowCommandPalette(false); }
158159
else if (e.key === "Backspace" && !query() && subMode()) { e.preventDefault(); exitSubMode(); }
@@ -173,7 +174,8 @@ export function PaletteCommandPalette() {
173174
const sel = () => flatIdx() === selectedIndex();
174175
return (
175176
<div data-palette-item style={itemStyle(sel())} role="option" aria-selected={sel()}
176-
onMouseEnter={() => setSelectedIndex(flatIdx())} onClick={() => handleSelect(cmd.id)}>
177+
onMouseMove={() => setLastNavMode("mouse")}
178+
onMouseEnter={() => { if (lastNavMode() === "mouse") setSelectedIndex(flatIdx()); }} onClick={() => handleSelect(cmd.id)}>
177179
<Icon name="command" size={10} style={{ color: "var(--jb-text-muted-color)", "flex-shrink": "0" }} />
178180
<Show when={!subMode()}>
179181
<span style={{ "font-size": "10px", color: "var(--jb-text-muted-color)", "white-space": "nowrap" }}>{cmd.category || "General"}</span>

0 commit comments

Comments
 (0)