@@ -279,13 +279,62 @@ export class NodeSidebarMenuComponent extends Component<
279279 class = { `overflow-visible flex flex-col gap-2 relative pt-2 pb-2` }
280280 getElement = { ( element : HTMLElement ) => {
281281 taskbar = element ;
282+ renderElement (
283+ < div
284+ class = { `sticky w-full top-0 max-w-[150px] flex flex-col pb-2 bg-slate-700 ` }
285+ >
286+ < input
287+ type = "text"
288+ input = { ( event : InputEvent ) => {
289+ const value = ( event . target as HTMLInputElement ) . value ;
290+ if ( taskbar ) {
291+ taskbar
292+ . querySelectorAll ( '.taskbar__node-type' )
293+ . forEach ( ( node ) => {
294+ if ( node ) {
295+ const title = node . getAttribute ?.( 'title' ) ;
296+ if ( title ) {
297+ if ( title . toLowerCase ( ) . includes ( value ) ) {
298+ node . classList . remove ( 'hidden' ) ;
299+ } else {
300+ node . classList . add ( 'hidden' ) ;
301+ }
302+ }
303+ }
304+ } ) ;
305+
306+ taskbar
307+ . querySelectorAll ( '.taskbar__category' )
308+ . forEach ( ( node ) => {
309+ if ( node && taskbar ) {
310+ const category = ( node as HTMLElement ) . innerText ;
311+ if (
312+ taskbar . querySelectorAll (
313+ `[data-category="${ category } "]:not(.hidden)`
314+ ) . length > 0
315+ ) {
316+ node . classList . remove ( 'hidden' ) ;
317+ } else {
318+ node . classList . add ( 'hidden' ) ;
319+ }
320+ }
321+ } ) ;
322+ }
323+ } }
324+ placeholder = "Search"
325+ />
326+ </ div > ,
327+ taskbar
328+ ) ;
282329 sortedCategories . forEach ( ( categoryName ) => {
283330 const category = categorizedNodeTasks . get ( categoryName ) ;
284331 if ( categoryName === 'deprecated' ) {
285332 return ;
286333 }
287334 renderElement (
288- < h2 class = { `text-white py-2` } > { categoryName } </ h2 > ,
335+ < h2 class = { `text-white py-2 taskbar__category` } >
336+ { categoryName }
337+ </ h2 > ,
289338 taskbar
290339 ) ;
291340
@@ -296,7 +345,7 @@ export class NodeSidebarMenuComponent extends Component<
296345
297346 renderElement (
298347 < div
299- class = { `cursor-pointer
348+ class = { `taskbar__node-type cursor-pointer
300349 bg-slate-500
301350 text-white
302351 rounded
@@ -307,6 +356,7 @@ export class NodeSidebarMenuComponent extends Component<
307356 this . startDragNode ( event , taskbar , nodeTask . nodeType ) ;
308357 } }
309358 title = { label }
359+ data-category = { categoryName }
310360 >
311361 { label }
312362 </ div > ,
0 commit comments