@@ -86,7 +86,7 @@ const findNodeAndSiblings = (nodes: DocumentNode[], id: string): {node: Document
8686} ;
8787
8888const Sidebar : React . FC < SidebarProps > = ( props ) => {
89- const { documentTree, navigableItems, searchTerm, setSearchTerm, setSelectedIds, lastClickedId, setLastClickedId, onContextMenu, renamingNodeId, onRenameComplete, onExpandAll, onCollapseAll, commands, pendingRevealId, onRevealHandled, onNewFromClipboard, customShortcuts } = props ;
89+ const { documentTree, navigableItems, searchTerm, setSearchTerm, setSelectedIds, lastClickedId, setLastClickedId, onContextMenu, renamingNodeId, onRenameComplete, onExpandAll, onCollapseAll, commands, pendingRevealId, onRevealHandled, onNewFromClipboard, customShortcuts, onSelectTemplate , onSelectNode } = props ;
9090 const [ focusedItemId , setFocusedItemId ] = useState < string | null > ( null ) ;
9191 const [ isTemplatesCollapsed , setIsTemplatesCollapsed ] = useState ( false ) ;
9292 const [ templatesPanelHeight , setTemplatesPanelHeight ] = useState ( DEFAULT_TEMPLATES_PANEL_HEIGHT ) ;
@@ -104,6 +104,38 @@ const Sidebar: React.FC<SidebarProps> = (props) => {
104104
105105
106106 const sidebarRef = useRef < HTMLDivElement > ( null ) ;
107+ const handleSearchKeyDown = useCallback (
108+ ( event : React . KeyboardEvent < HTMLInputElement > ) => {
109+ if ( event . key !== 'ArrowDown' ) {
110+ return ;
111+ }
112+
113+ const firstNavigableItem = navigableItems [ 0 ] ;
114+ if ( ! firstNavigableItem ) {
115+ return ;
116+ }
117+
118+ event . preventDefault ( ) ;
119+ event . currentTarget . blur ( ) ;
120+ setFocusedItemId ( firstNavigableItem . id ) ;
121+ setSelectedIds ( new Set ( [ firstNavigableItem . id ] ) ) ;
122+ setLastClickedId ( firstNavigableItem . id ) ;
123+
124+ if ( firstNavigableItem . type === 'template' ) {
125+ onSelectTemplate ( firstNavigableItem . id ) ;
126+ } else {
127+ const syntheticEvent = {
128+ shiftKey : false ,
129+ ctrlKey : false ,
130+ metaKey : false ,
131+ } as React . MouseEvent ;
132+ onSelectNode ( firstNavigableItem . id , syntheticEvent ) ;
133+ }
134+
135+ sidebarRef . current ?. focus ( ) ;
136+ } ,
137+ [ navigableItems , onSelectNode , onSelectTemplate , setLastClickedId , setSelectedIds ]
138+ ) ;
107139 const isResizingTemplates = useRef ( false ) ;
108140
109141 // Effect to manage focus state
@@ -432,6 +464,7 @@ const Sidebar: React.FC<SidebarProps> = (props) => {
432464 placeholder = "Search..."
433465 value = { searchTerm }
434466 onChange = { ( e ) => setSearchTerm ( e . target . value ) }
467+ onKeyDown = { handleSearchKeyDown }
435468 className = "w-full bg-background border border-border-color rounded-md pl-9 pr-9 py-1 text-xs text-text-main focus:ring-2 focus:ring-primary focus:outline-none placeholder:text-text-secondary"
436469 />
437470 { searchTerm . trim ( ) && (
0 commit comments