@@ -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