admin-lte 4.2.0 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +17 -1
  3. package/dist/css/adminlte-docs.css +1 -1
  4. package/dist/css/adminlte-docs.css.map +1 -1
  5. package/dist/css/adminlte-docs.min.css +1 -1
  6. package/dist/css/adminlte-docs.min.css.map +1 -1
  7. package/dist/css/adminlte-docs.rtl.css +1 -1
  8. package/dist/css/adminlte-docs.rtl.css.map +1 -1
  9. package/dist/css/adminlte-docs.rtl.min.css +1 -1
  10. package/dist/css/adminlte-docs.rtl.min.css.map +1 -1
  11. package/dist/css/adminlte-select2.css +329 -0
  12. package/dist/css/adminlte-select2.css.map +1 -0
  13. package/dist/css/adminlte-select2.min.css +12 -0
  14. package/dist/css/adminlte-select2.min.css.map +1 -0
  15. package/dist/css/adminlte-select2.rtl.css +328 -0
  16. package/dist/css/adminlte-select2.rtl.css.map +1 -0
  17. package/dist/css/adminlte-select2.rtl.min.css +12 -0
  18. package/dist/css/adminlte-select2.rtl.min.css.map +1 -0
  19. package/dist/css/adminlte.css +202 -1
  20. package/dist/css/adminlte.css.map +1 -1
  21. package/dist/css/adminlte.min.css +2 -2
  22. package/dist/css/adminlte.min.css.map +1 -1
  23. package/dist/css/adminlte.rtl.css +202 -1
  24. package/dist/css/adminlte.rtl.css.map +1 -1
  25. package/dist/css/adminlte.rtl.min.css +2 -2
  26. package/dist/css/adminlte.rtl.min.css.map +1 -1
  27. package/dist/js/adminlte.esm.js +231 -81
  28. package/dist/js/adminlte.esm.js.map +1 -1
  29. package/dist/js/adminlte.esm.min.js +2 -2
  30. package/dist/js/adminlte.esm.min.js.map +1 -1
  31. package/dist/js/adminlte.js +231 -80
  32. package/dist/js/adminlte.js.map +1 -1
  33. package/dist/js/adminlte.min.js +2 -2
  34. package/dist/js/adminlte.min.js.map +1 -1
  35. package/dist/js/types/adminlte.d.ts +2 -1
  36. package/dist/js/types/sidebar-search.d.ts +46 -0
  37. package/package.json +1 -1
  38. package/src/scss/_app-sidebar.scss +12 -0
  39. package/src/scss/_ribbon.scss +75 -0
  40. package/src/scss/_variables.scss +28 -0
  41. package/src/scss/_widgets.scss +192 -0
  42. package/src/scss/adminlte-docs.scss +1 -1
  43. package/src/scss/adminlte-select2.scss +31 -0
  44. package/src/scss/adminlte.scss +1 -1
  45. package/src/scss/compat/_select2.scss +476 -0
  46. package/src/scss/parts/_extra-components.scss +2 -0
  47. package/src/ts/accessibility.ts +25 -13
  48. package/src/ts/adminlte.ts +3 -1
  49. package/src/ts/sidebar-search.ts +252 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * AdminLTE v4.2.0 (https://adminlte.io)
2
+ * AdminLTE v4.3.1 (https://adminlte.io)
3
3
  * Copyright 2014-2026 Colorlib <https://colorlib.com>
4
4
  * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE)
5
5
  */
@@ -192,16 +192,16 @@ const dispatchCustomEvent = (element, name, options = {}) => {
192
192
  return event;
193
193
  };
194
194
 
195
- const NAME$4 = 'card-widget';
196
- const EVENT_KEY$5 = `.lte.${NAME$4}`;
197
- const EVENT_COLLAPSE$2 = `collapse${EVENT_KEY$5}`;
198
- const EVENT_EXPAND$1 = `expand${EVENT_KEY$5}`;
199
- const EVENT_REMOVE = `remove${EVENT_KEY$5}`;
200
- const EVENT_COLLAPSED$3 = `collapsed${EVENT_KEY$5}`;
201
- const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$5}`;
202
- const EVENT_REMOVED = `removed${EVENT_KEY$5}`;
203
- const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$5}`;
204
- const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$5}`;
195
+ const NAME$5 = 'card-widget';
196
+ const EVENT_KEY$6 = `.lte.${NAME$5}`;
197
+ const EVENT_COLLAPSE$2 = `collapse${EVENT_KEY$6}`;
198
+ const EVENT_EXPAND$1 = `expand${EVENT_KEY$6}`;
199
+ const EVENT_REMOVE = `remove${EVENT_KEY$6}`;
200
+ const EVENT_COLLAPSED$3 = `collapsed${EVENT_KEY$6}`;
201
+ const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$6}`;
202
+ const EVENT_REMOVED = `removed${EVENT_KEY$6}`;
203
+ const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$6}`;
204
+ const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$6}`;
205
205
  const CLASS_NAME_CARD = 'card';
206
206
  const CLASS_NAME_COLLAPSED = 'collapsed-card';
207
207
  const CLASS_NAME_COLLAPSING = 'collapsing-card';
@@ -222,7 +222,7 @@ const Default$1 = {
222
222
  };
223
223
  class CardWidget extends BaseComponent {
224
224
  static get NAME() {
225
- return NAME$4;
225
+ return NAME$5;
226
226
  }
227
227
  static getInstance(element) {
228
228
  return this._getInstance(element);
@@ -389,29 +389,29 @@ document.addEventListener('click', event => {
389
389
  }
390
390
  });
391
391
 
392
- const NAME$3 = 'treeview';
393
- const EVENT_KEY$4 = `.lte.${NAME$3}`;
394
- const EVENT_EXPAND = `expand${EVENT_KEY$4}`;
395
- const EVENT_COLLAPSE$1 = `collapse${EVENT_KEY$4}`;
396
- const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$4}`;
397
- const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$4}`;
398
- const EVENT_LOAD_DATA_API = `load${EVENT_KEY$4}`;
399
- const CLASS_NAME_MENU_OPEN = 'menu-open';
400
- const SELECTOR_NAV_ITEM = '.nav-item';
401
- const SELECTOR_NAV_LINK = '.nav-link';
402
- const SELECTOR_TREEVIEW_MENU = '.nav-treeview';
403
- const SELECTOR_DATA_TOGGLE$1 = '[data-lte-toggle="treeview"]';
392
+ const NAME$4 = 'treeview';
393
+ const EVENT_KEY$5 = `.lte.${NAME$4}`;
394
+ const EVENT_EXPAND = `expand${EVENT_KEY$5}`;
395
+ const EVENT_COLLAPSE$1 = `collapse${EVENT_KEY$5}`;
396
+ const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$5}`;
397
+ const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$5}`;
398
+ const EVENT_LOAD_DATA_API = `load${EVENT_KEY$5}`;
399
+ const CLASS_NAME_MENU_OPEN$1 = 'menu-open';
400
+ const SELECTOR_NAV_ITEM$1 = '.nav-item';
401
+ const SELECTOR_NAV_LINK$1 = '.nav-link';
402
+ const SELECTOR_TREEVIEW_MENU$1 = '.nav-treeview';
403
+ const SELECTOR_DATA_TOGGLE$2 = '[data-lte-toggle="treeview"]';
404
404
  const Default = {
405
405
  animationSpeed: 300,
406
406
  accordion: true
407
407
  };
408
408
  const setAriaExpanded = (navItem, expanded) => {
409
- const link = navItem.querySelector(`:scope > ${SELECTOR_NAV_LINK}`);
409
+ const link = navItem.querySelector(`:scope > ${SELECTOR_NAV_LINK$1}`);
410
410
  link?.setAttribute('aria-expanded', String(expanded));
411
411
  };
412
412
  class Treeview extends BaseComponent {
413
413
  static get NAME() {
414
- return NAME$3;
414
+ return NAME$4;
415
415
  }
416
416
  static getInstance(element) {
417
417
  return this._getInstance(element);
@@ -429,26 +429,26 @@ class Treeview extends BaseComponent {
429
429
  return;
430
430
  }
431
431
  if (this._config.accordion) {
432
- const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`);
432
+ const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM$1}.${CLASS_NAME_MENU_OPEN$1}`);
433
433
  openMenuList?.forEach(openMenu => {
434
434
  if (!this._element.contains(openMenu)) {
435
- openMenu.classList.remove(CLASS_NAME_MENU_OPEN);
435
+ openMenu.classList.remove(CLASS_NAME_MENU_OPEN$1);
436
436
  setAriaExpanded(openMenu, false);
437
- const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU);
437
+ const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU$1);
438
438
  if (childElement) {
439
439
  slideUp(childElement, this._config.animationSpeed);
440
440
  }
441
441
  }
442
442
  });
443
443
  }
444
- this._element.classList.add(CLASS_NAME_MENU_OPEN);
444
+ this._element.classList.add(CLASS_NAME_MENU_OPEN$1);
445
445
  setAriaExpanded(this._element, true);
446
- const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU);
446
+ const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU$1);
447
447
  if (childElement) {
448
448
  slideDown(childElement, this._config.animationSpeed);
449
449
  }
450
450
  setTimeout(() => {
451
- if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
451
+ if (this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
452
452
  dispatchCustomEvent(this._element, EVENT_EXPANDED$1);
453
453
  }
454
454
  }, this._config.animationSpeed);
@@ -457,20 +457,20 @@ class Treeview extends BaseComponent {
457
457
  if (dispatchCustomEvent(this._element, EVENT_COLLAPSE$1, { cancelable: true }).defaultPrevented) {
458
458
  return;
459
459
  }
460
- this._element.classList.remove(CLASS_NAME_MENU_OPEN);
460
+ this._element.classList.remove(CLASS_NAME_MENU_OPEN$1);
461
461
  setAriaExpanded(this._element, false);
462
- const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU);
462
+ const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU$1);
463
463
  if (childElement) {
464
464
  slideUp(childElement, this._config.animationSpeed);
465
465
  }
466
466
  setTimeout(() => {
467
- if (!this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
467
+ if (!this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
468
468
  dispatchCustomEvent(this._element, EVENT_COLLAPSED$2);
469
469
  }
470
470
  }, this._config.animationSpeed);
471
471
  }
472
472
  toggle() {
473
- if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
473
+ if (this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
474
474
  this.close();
475
475
  }
476
476
  else {
@@ -483,13 +483,13 @@ document.addEventListener('click', event => {
483
483
  if (!(target instanceof Element)) {
484
484
  return;
485
485
  }
486
- const toggleRoot = target.closest(SELECTOR_DATA_TOGGLE$1);
486
+ const toggleRoot = target.closest(SELECTOR_DATA_TOGGLE$2);
487
487
  if (!toggleRoot) {
488
488
  return;
489
489
  }
490
- const targetItem = target.closest(SELECTOR_NAV_ITEM);
491
- const targetLink = target.closest(SELECTOR_NAV_LINK);
492
- if (!targetItem?.querySelector(SELECTOR_TREEVIEW_MENU)) {
490
+ const targetItem = target.closest(SELECTOR_NAV_ITEM$1);
491
+ const targetLink = target.closest(SELECTOR_NAV_LINK$1);
492
+ if (!targetItem?.querySelector(SELECTOR_TREEVIEW_MENU$1)) {
493
493
  return;
494
494
  }
495
495
  if (target.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') {
@@ -504,34 +504,34 @@ document.addEventListener('click', event => {
504
504
  Treeview.getOrCreateInstance(targetItem, config).toggle();
505
505
  });
506
506
  onDOMContentLoaded(() => {
507
- const openMenuItems = document.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`);
507
+ const openMenuItems = document.querySelectorAll(`${SELECTOR_NAV_ITEM$1}.${CLASS_NAME_MENU_OPEN$1}`);
508
508
  openMenuItems.forEach(menuItem => {
509
- const childElement = menuItem.querySelector(SELECTOR_TREEVIEW_MENU);
509
+ const childElement = menuItem.querySelector(SELECTOR_TREEVIEW_MENU$1);
510
510
  if (childElement) {
511
511
  slideDown(childElement, 0);
512
512
  const event = new Event(EVENT_LOAD_DATA_API);
513
513
  menuItem.dispatchEvent(event);
514
514
  }
515
515
  });
516
- document.querySelectorAll(SELECTOR_DATA_TOGGLE$1).forEach(root => {
517
- root.querySelectorAll(SELECTOR_NAV_ITEM).forEach(item => {
518
- if (item.querySelector(`:scope > ${SELECTOR_TREEVIEW_MENU}`)) {
519
- setAriaExpanded(item, item.classList.contains(CLASS_NAME_MENU_OPEN));
516
+ document.querySelectorAll(SELECTOR_DATA_TOGGLE$2).forEach(root => {
517
+ root.querySelectorAll(SELECTOR_NAV_ITEM$1).forEach(item => {
518
+ if (item.querySelector(`:scope > ${SELECTOR_TREEVIEW_MENU$1}`)) {
519
+ setAriaExpanded(item, item.classList.contains(CLASS_NAME_MENU_OPEN$1));
520
520
  }
521
521
  });
522
522
  });
523
523
  });
524
524
 
525
- const NAME$2 = 'direct-chat';
526
- const EVENT_KEY$3 = `.lte.${NAME$2}`;
527
- const EVENT_EXPANDED = `expanded${EVENT_KEY$3}`;
528
- const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$3}`;
529
- const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="chat-pane"]';
525
+ const NAME$3 = 'direct-chat';
526
+ const EVENT_KEY$4 = `.lte.${NAME$3}`;
527
+ const EVENT_EXPANDED = `expanded${EVENT_KEY$4}`;
528
+ const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$4}`;
529
+ const SELECTOR_DATA_TOGGLE$1 = '[data-lte-toggle="chat-pane"]';
530
530
  const SELECTOR_DIRECT_CHAT = '.direct-chat';
531
531
  const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open';
532
532
  class DirectChat extends BaseComponent {
533
533
  static get NAME() {
534
- return NAME$2;
534
+ return NAME$3;
535
535
  }
536
536
  static getInstance(element) {
537
537
  return this._getInstance(element);
@@ -555,7 +555,7 @@ document.addEventListener('click', event => {
555
555
  if (!(target instanceof Element)) {
556
556
  return;
557
557
  }
558
- const trigger = target.closest(SELECTOR_DATA_TOGGLE);
558
+ const trigger = target.closest(SELECTOR_DATA_TOGGLE$1);
559
559
  if (!trigger) {
560
560
  return;
561
561
  }
@@ -566,10 +566,10 @@ document.addEventListener('click', event => {
566
566
  }
567
567
  });
568
568
 
569
- const NAME$1 = 'fullscreen';
570
- const EVENT_KEY$2 = `.lte.${NAME$1}`;
571
- const EVENT_MAXIMIZED = `maximized${EVENT_KEY$2}`;
572
- const EVENT_MINIMIZED = `minimized${EVENT_KEY$2}`;
569
+ const NAME$2 = 'fullscreen';
570
+ const EVENT_KEY$3 = `.lte.${NAME$2}`;
571
+ const EVENT_MAXIMIZED = `maximized${EVENT_KEY$3}`;
572
+ const EVENT_MINIMIZED = `minimized${EVENT_KEY$3}`;
573
573
  const SELECTOR_FULLSCREEN_TOGGLE = '[data-lte-toggle="fullscreen"]';
574
574
  const SELECTOR_MAXIMIZE_ICON = '[data-lte-icon="maximize"]';
575
575
  const SELECTOR_MINIMIZE_ICON = '[data-lte-icon="minimize"]';
@@ -586,7 +586,7 @@ function syncFullScreenState() {
586
586
  }
587
587
  class FullScreen extends BaseComponent {
588
588
  static get NAME() {
589
- return NAME$1;
589
+ return NAME$2;
590
590
  }
591
591
  static getInstance(element) {
592
592
  return this._getInstance(element);
@@ -630,12 +630,12 @@ onDOMContentLoaded(() => {
630
630
  document.addEventListener('fullscreenchange', syncFullScreenState, { signal: getLifecycleSignal() });
631
631
  });
632
632
 
633
- const NAME = 'push-menu';
634
- const EVENT_KEY$1 = `.lte.${NAME}`;
635
- const EVENT_OPEN = `open${EVENT_KEY$1}`;
636
- const EVENT_COLLAPSE = `collapse${EVENT_KEY$1}`;
637
- const EVENT_OPENED = `opened${EVENT_KEY$1}`;
638
- const EVENT_COLLAPSED = `collapsed${EVENT_KEY$1}`;
633
+ const NAME$1 = 'push-menu';
634
+ const EVENT_KEY$2 = `.lte.${NAME$1}`;
635
+ const EVENT_OPEN = `open${EVENT_KEY$2}`;
636
+ const EVENT_COLLAPSE = `collapse${EVENT_KEY$2}`;
637
+ const EVENT_OPENED = `opened${EVENT_KEY$2}`;
638
+ const EVENT_COLLAPSED = `collapsed${EVENT_KEY$2}`;
639
639
  const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini';
640
640
  const CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand';
641
641
  const CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay';
@@ -652,7 +652,7 @@ const Defaults = {
652
652
  };
653
653
  class PushMenu extends BaseComponent {
654
654
  static get NAME() {
655
- return NAME;
655
+ return NAME$1;
656
656
  }
657
657
  static getInstance(element) {
658
658
  return this._getInstance(element);
@@ -853,8 +853,8 @@ onDOMContentLoaded(() => {
853
853
  });
854
854
 
855
855
  const DATA_KEY = 'lte.color-mode';
856
- const EVENT_KEY = `.${DATA_KEY}`;
857
- const EVENT_CHANGED = `changed${EVENT_KEY}`;
856
+ const EVENT_KEY$1 = `.${DATA_KEY}`;
857
+ const EVENT_CHANGED = `changed${EVENT_KEY$1}`;
858
858
  const STORAGE_KEY = 'lte-theme';
859
859
  const ATTRIBUTE_THEME = 'data-bs-theme';
860
860
  const ATTRIBUTE_TOGGLE = 'data-bs-theme-value';
@@ -966,6 +966,154 @@ onDOMContentLoaded(() => {
966
966
  }, { signal: getLifecycleSignal() });
967
967
  });
968
968
 
969
+ const NAME = 'sidebar-search';
970
+ const EVENT_KEY = `.lte.${NAME}`;
971
+ const EVENT_FILTERED = `filtered${EVENT_KEY}`;
972
+ const CLASS_NAME_MENU_OPEN = 'menu-open';
973
+ const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="sidebar-search"]';
974
+ const SELECTOR_SIDEBAR = '.app-sidebar';
975
+ const SELECTOR_MENU = '.sidebar-menu';
976
+ const SELECTOR_NAV_ITEM = '.nav-item';
977
+ const SELECTOR_NAV_HEADER = '.nav-header';
978
+ const SELECTOR_NAV_LINK = ':scope > .nav-link';
979
+ const SELECTOR_TREEVIEW_MENU = ':scope > .nav-treeview';
980
+ const SELECTOR_EMPTY_STATE = '[data-lte-search-empty]';
981
+ const submenuOf = (item) => item.querySelector(SELECTOR_TREEVIEW_MENU);
982
+ const setOpen = (item, submenu, open, display) => {
983
+ item.classList.toggle(CLASS_NAME_MENU_OPEN, open);
984
+ item.querySelector(SELECTOR_NAV_LINK)?.setAttribute('aria-expanded', String(open));
985
+ submenu.style.display = display;
986
+ };
987
+ class SidebarSearch extends BaseComponent {
988
+ static get NAME() {
989
+ return NAME;
990
+ }
991
+ static getInstance(element) {
992
+ return this._getInstance(element);
993
+ }
994
+ static getOrCreateInstance(element) {
995
+ return this.getInstance(element) ?? new this(element);
996
+ }
997
+ _menu;
998
+ _emptyState;
999
+ _snapshot = null;
1000
+ constructor(element) {
1001
+ super(element);
1002
+ const target = element.dataset.lteTarget;
1003
+ const scope = element.closest(SELECTOR_SIDEBAR) ?? document;
1004
+ this._menu = target ?
1005
+ document.querySelector(target) :
1006
+ scope.querySelector(SELECTOR_MENU);
1007
+ this._emptyState = scope.querySelector(SELECTOR_EMPTY_STATE);
1008
+ }
1009
+ search(term) {
1010
+ const menu = this._menu;
1011
+ if (!menu) {
1012
+ return;
1013
+ }
1014
+ const query = term.trim().toLowerCase();
1015
+ if (!query) {
1016
+ this.clear();
1017
+ return;
1018
+ }
1019
+ this._snapshot ??= this._takeSnapshot(menu);
1020
+ const items = [...menu.querySelectorAll(SELECTOR_NAV_ITEM)];
1021
+ const matched = new Set();
1022
+ for (const item of items) {
1023
+ const label = item.querySelector(SELECTOR_NAV_LINK)?.textContent?.replace(/\s+/g, ' ').trim().toLowerCase();
1024
+ if (label?.includes(query)) {
1025
+ matched.add(item);
1026
+ }
1027
+ }
1028
+ for (let index = items.length - 1; index >= 0; index--) {
1029
+ const item = items[index];
1030
+ item.hidden = !(matched.has(item) || item.querySelector(`${SELECTOR_NAV_ITEM}:not([hidden])`));
1031
+ }
1032
+ for (const item of matched) {
1033
+ for (const descendant of item.querySelectorAll(SELECTOR_NAV_ITEM)) {
1034
+ descendant.hidden = false;
1035
+ }
1036
+ }
1037
+ let visible = 0;
1038
+ for (const item of items) {
1039
+ if (!item.hidden) {
1040
+ visible++;
1041
+ }
1042
+ const submenu = submenuOf(item);
1043
+ if (submenu) {
1044
+ const expand = !item.hidden && Boolean(item.querySelector(`${SELECTOR_NAV_ITEM}:not([hidden])`));
1045
+ setOpen(item, submenu, expand, expand ? 'block' : 'none');
1046
+ }
1047
+ }
1048
+ for (const header of menu.querySelectorAll(SELECTOR_NAV_HEADER)) {
1049
+ header.hidden = true;
1050
+ }
1051
+ if (this._emptyState) {
1052
+ this._emptyState.hidden = visible > 0;
1053
+ }
1054
+ dispatchCustomEvent(this._element, EVENT_FILTERED, { detail: { query, matches: visible } });
1055
+ }
1056
+ clear() {
1057
+ const menu = this._menu;
1058
+ if (!menu) {
1059
+ return;
1060
+ }
1061
+ for (const item of menu.querySelectorAll(`${SELECTOR_NAV_ITEM}, ${SELECTOR_NAV_HEADER}`)) {
1062
+ item.hidden = false;
1063
+ }
1064
+ if (this._snapshot) {
1065
+ for (const [item, state] of this._snapshot) {
1066
+ const submenu = submenuOf(item);
1067
+ if (submenu) {
1068
+ setOpen(item, submenu, state.open, state.display);
1069
+ }
1070
+ }
1071
+ this._snapshot = null;
1072
+ }
1073
+ if (this._emptyState) {
1074
+ this._emptyState.hidden = true;
1075
+ }
1076
+ dispatchCustomEvent(this._element, EVENT_FILTERED, { detail: { query: '', matches: -1 } });
1077
+ }
1078
+ dispose() {
1079
+ this.clear();
1080
+ super.dispose();
1081
+ }
1082
+ _takeSnapshot(menu) {
1083
+ const snapshot = new Map();
1084
+ for (const item of menu.querySelectorAll(SELECTOR_NAV_ITEM)) {
1085
+ const submenu = submenuOf(item);
1086
+ if (submenu) {
1087
+ snapshot.set(item, {
1088
+ open: item.classList.contains(CLASS_NAME_MENU_OPEN),
1089
+ display: submenu.style.display
1090
+ });
1091
+ }
1092
+ }
1093
+ return snapshot;
1094
+ }
1095
+ }
1096
+ document.addEventListener('input', event => {
1097
+ const target = event.target;
1098
+ if (target instanceof HTMLInputElement && target.matches(SELECTOR_DATA_TOGGLE)) {
1099
+ SidebarSearch.getOrCreateInstance(target).search(target.value);
1100
+ }
1101
+ });
1102
+ document.addEventListener('keydown', event => {
1103
+ const target = event.target;
1104
+ if (event.key === 'Escape' && target instanceof HTMLInputElement && target.matches(SELECTOR_DATA_TOGGLE)) {
1105
+ target.value = '';
1106
+ SidebarSearch.getOrCreateInstance(target).clear();
1107
+ }
1108
+ });
1109
+ onDOMContentLoaded(() => {
1110
+ document.querySelectorAll(SELECTOR_DATA_TOGGLE).forEach(input => {
1111
+ if (input.value) {
1112
+ SidebarSearch.getOrCreateInstance(input).search(input.value);
1113
+ }
1114
+ });
1115
+ });
1116
+
969
1117
  class AccessibilityManager {
970
1118
  config;
971
1119
  liveRegion = null;
@@ -1039,19 +1187,21 @@ class AccessibilityManager {
1039
1187
  this.ensureSkipTargets();
1040
1188
  }
1041
1189
  ensureSkipTargets() {
1042
- const main = document.querySelector('#main, main, [role="main"]');
1043
- if (main && !main.id) {
1044
- main.id = 'main';
1045
- }
1046
- if (main && !main.hasAttribute('tabindex')) {
1047
- main.setAttribute('tabindex', '-1');
1048
- }
1049
- const nav = document.querySelector('#navigation, nav, [role="navigation"]');
1050
- if (nav && !nav.id) {
1051
- nav.id = 'navigation';
1052
- }
1053
- if (nav && !nav.hasAttribute('tabindex')) {
1054
- nav.setAttribute('tabindex', '-1');
1190
+ const targets = [
1191
+ ['main', 'main, [role="main"]'],
1192
+ ['navigation', 'nav, [role="navigation"]']
1193
+ ];
1194
+ for (const [id, fallbackSelector] of targets) {
1195
+ const target = document.getElementById(id) ?? document.querySelector(fallbackSelector);
1196
+ if (!target) {
1197
+ continue;
1198
+ }
1199
+ if (!target.id) {
1200
+ target.id = id;
1201
+ }
1202
+ if (!target.hasAttribute('tabindex')) {
1203
+ target.setAttribute('tabindex', '-1');
1204
+ }
1055
1205
  }
1056
1206
  }
1057
1207
  initFocusManagement() {
@@ -1402,5 +1552,5 @@ onDOMContentLoaded(() => {
1402
1552
  accessibilityManager.addLandmarks();
1403
1553
  });
1404
1554
 
1405
- export { CardWidget, ColorMode, DirectChat, FullScreen, Layout, PushMenu, Treeview, initAccessibility, initialize, teardown };
1555
+ export { CardWidget, ColorMode, DirectChat, FullScreen, Layout, PushMenu, SidebarSearch, Treeview, initAccessibility, initialize, teardown };
1406
1556
  //# sourceMappingURL=adminlte.esm.js.map