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.
- package/CHANGELOG.md +39 -0
- package/README.md +17 -1
- package/dist/css/adminlte-docs.css +1 -1
- package/dist/css/adminlte-docs.css.map +1 -1
- package/dist/css/adminlte-docs.min.css +1 -1
- package/dist/css/adminlte-docs.min.css.map +1 -1
- package/dist/css/adminlte-docs.rtl.css +1 -1
- package/dist/css/adminlte-docs.rtl.css.map +1 -1
- package/dist/css/adminlte-docs.rtl.min.css +1 -1
- package/dist/css/adminlte-docs.rtl.min.css.map +1 -1
- package/dist/css/adminlte-select2.css +329 -0
- package/dist/css/adminlte-select2.css.map +1 -0
- package/dist/css/adminlte-select2.min.css +12 -0
- package/dist/css/adminlte-select2.min.css.map +1 -0
- package/dist/css/adminlte-select2.rtl.css +328 -0
- package/dist/css/adminlte-select2.rtl.css.map +1 -0
- package/dist/css/adminlte-select2.rtl.min.css +12 -0
- package/dist/css/adminlte-select2.rtl.min.css.map +1 -0
- package/dist/css/adminlte.css +202 -1
- package/dist/css/adminlte.css.map +1 -1
- package/dist/css/adminlte.min.css +2 -2
- package/dist/css/adminlte.min.css.map +1 -1
- package/dist/css/adminlte.rtl.css +202 -1
- package/dist/css/adminlte.rtl.css.map +1 -1
- package/dist/css/adminlte.rtl.min.css +2 -2
- package/dist/css/adminlte.rtl.min.css.map +1 -1
- package/dist/js/adminlte.esm.js +231 -81
- package/dist/js/adminlte.esm.js.map +1 -1
- package/dist/js/adminlte.esm.min.js +2 -2
- package/dist/js/adminlte.esm.min.js.map +1 -1
- package/dist/js/adminlte.js +231 -80
- package/dist/js/adminlte.js.map +1 -1
- package/dist/js/adminlte.min.js +2 -2
- package/dist/js/adminlte.min.js.map +1 -1
- package/dist/js/types/adminlte.d.ts +2 -1
- package/dist/js/types/sidebar-search.d.ts +46 -0
- package/package.json +1 -1
- package/src/scss/_app-sidebar.scss +12 -0
- package/src/scss/_ribbon.scss +75 -0
- package/src/scss/_variables.scss +28 -0
- package/src/scss/_widgets.scss +192 -0
- package/src/scss/adminlte-docs.scss +1 -1
- package/src/scss/adminlte-select2.scss +31 -0
- package/src/scss/adminlte.scss +1 -1
- package/src/scss/compat/_select2.scss +476 -0
- package/src/scss/parts/_extra-components.scss +2 -0
- package/src/ts/accessibility.ts +25 -13
- package/src/ts/adminlte.ts +3 -1
- package/src/ts/sidebar-search.ts +252 -0
package/dist/js/adminlte.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* AdminLTE v4.
|
|
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$
|
|
196
|
-
const EVENT_KEY$
|
|
197
|
-
const EVENT_COLLAPSE$2 = `collapse${EVENT_KEY$
|
|
198
|
-
const EVENT_EXPAND$1 = `expand${EVENT_KEY$
|
|
199
|
-
const EVENT_REMOVE = `remove${EVENT_KEY$
|
|
200
|
-
const EVENT_COLLAPSED$3 = `collapsed${EVENT_KEY$
|
|
201
|
-
const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$
|
|
202
|
-
const EVENT_REMOVED = `removed${EVENT_KEY$
|
|
203
|
-
const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$
|
|
204
|
-
const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$
|
|
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$
|
|
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$
|
|
393
|
-
const EVENT_KEY$
|
|
394
|
-
const EVENT_EXPAND = `expand${EVENT_KEY$
|
|
395
|
-
const EVENT_COLLAPSE$1 = `collapse${EVENT_KEY$
|
|
396
|
-
const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$
|
|
397
|
-
const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$
|
|
398
|
-
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
526
|
-
const EVENT_KEY$
|
|
527
|
-
const EVENT_EXPANDED = `expanded${EVENT_KEY$
|
|
528
|
-
const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$
|
|
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$
|
|
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$
|
|
570
|
-
const EVENT_KEY$
|
|
571
|
-
const EVENT_MAXIMIZED = `maximized${EVENT_KEY$
|
|
572
|
-
const EVENT_MINIMIZED = `minimized${EVENT_KEY$
|
|
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$
|
|
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$
|
|
635
|
-
const EVENT_OPEN = `open${EVENT_KEY$
|
|
636
|
-
const EVENT_COLLAPSE = `collapse${EVENT_KEY$
|
|
637
|
-
const EVENT_OPENED = `opened${EVENT_KEY$
|
|
638
|
-
const EVENT_COLLAPSED = `collapsed${EVENT_KEY$
|
|
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
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
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
|