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.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
|
*/
|
|
@@ -198,16 +198,16 @@
|
|
|
198
198
|
return event;
|
|
199
199
|
};
|
|
200
200
|
|
|
201
|
-
const NAME$
|
|
202
|
-
const EVENT_KEY$
|
|
203
|
-
const EVENT_COLLAPSE$2 = `collapse${EVENT_KEY$
|
|
204
|
-
const EVENT_EXPAND$1 = `expand${EVENT_KEY$
|
|
205
|
-
const EVENT_REMOVE = `remove${EVENT_KEY$
|
|
206
|
-
const EVENT_COLLAPSED$3 = `collapsed${EVENT_KEY$
|
|
207
|
-
const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$
|
|
208
|
-
const EVENT_REMOVED = `removed${EVENT_KEY$
|
|
209
|
-
const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$
|
|
210
|
-
const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$
|
|
201
|
+
const NAME$5 = 'card-widget';
|
|
202
|
+
const EVENT_KEY$6 = `.lte.${NAME$5}`;
|
|
203
|
+
const EVENT_COLLAPSE$2 = `collapse${EVENT_KEY$6}`;
|
|
204
|
+
const EVENT_EXPAND$1 = `expand${EVENT_KEY$6}`;
|
|
205
|
+
const EVENT_REMOVE = `remove${EVENT_KEY$6}`;
|
|
206
|
+
const EVENT_COLLAPSED$3 = `collapsed${EVENT_KEY$6}`;
|
|
207
|
+
const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$6}`;
|
|
208
|
+
const EVENT_REMOVED = `removed${EVENT_KEY$6}`;
|
|
209
|
+
const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$6}`;
|
|
210
|
+
const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$6}`;
|
|
211
211
|
const CLASS_NAME_CARD = 'card';
|
|
212
212
|
const CLASS_NAME_COLLAPSED = 'collapsed-card';
|
|
213
213
|
const CLASS_NAME_COLLAPSING = 'collapsing-card';
|
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
};
|
|
229
229
|
class CardWidget extends BaseComponent {
|
|
230
230
|
static get NAME() {
|
|
231
|
-
return NAME$
|
|
231
|
+
return NAME$5;
|
|
232
232
|
}
|
|
233
233
|
static getInstance(element) {
|
|
234
234
|
return this._getInstance(element);
|
|
@@ -395,29 +395,29 @@
|
|
|
395
395
|
}
|
|
396
396
|
});
|
|
397
397
|
|
|
398
|
-
const NAME$
|
|
399
|
-
const EVENT_KEY$
|
|
400
|
-
const EVENT_EXPAND = `expand${EVENT_KEY$
|
|
401
|
-
const EVENT_COLLAPSE$1 = `collapse${EVENT_KEY$
|
|
402
|
-
const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$
|
|
403
|
-
const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$
|
|
404
|
-
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$
|
|
405
|
-
const CLASS_NAME_MENU_OPEN = 'menu-open';
|
|
406
|
-
const SELECTOR_NAV_ITEM = '.nav-item';
|
|
407
|
-
const SELECTOR_NAV_LINK = '.nav-link';
|
|
408
|
-
const SELECTOR_TREEVIEW_MENU = '.nav-treeview';
|
|
409
|
-
const SELECTOR_DATA_TOGGLE$
|
|
398
|
+
const NAME$4 = 'treeview';
|
|
399
|
+
const EVENT_KEY$5 = `.lte.${NAME$4}`;
|
|
400
|
+
const EVENT_EXPAND = `expand${EVENT_KEY$5}`;
|
|
401
|
+
const EVENT_COLLAPSE$1 = `collapse${EVENT_KEY$5}`;
|
|
402
|
+
const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$5}`;
|
|
403
|
+
const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$5}`;
|
|
404
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$5}`;
|
|
405
|
+
const CLASS_NAME_MENU_OPEN$1 = 'menu-open';
|
|
406
|
+
const SELECTOR_NAV_ITEM$1 = '.nav-item';
|
|
407
|
+
const SELECTOR_NAV_LINK$1 = '.nav-link';
|
|
408
|
+
const SELECTOR_TREEVIEW_MENU$1 = '.nav-treeview';
|
|
409
|
+
const SELECTOR_DATA_TOGGLE$2 = '[data-lte-toggle="treeview"]';
|
|
410
410
|
const Default = {
|
|
411
411
|
animationSpeed: 300,
|
|
412
412
|
accordion: true
|
|
413
413
|
};
|
|
414
414
|
const setAriaExpanded = (navItem, expanded) => {
|
|
415
|
-
const link = navItem.querySelector(`:scope > ${SELECTOR_NAV_LINK}`);
|
|
415
|
+
const link = navItem.querySelector(`:scope > ${SELECTOR_NAV_LINK$1}`);
|
|
416
416
|
link?.setAttribute('aria-expanded', String(expanded));
|
|
417
417
|
};
|
|
418
418
|
class Treeview extends BaseComponent {
|
|
419
419
|
static get NAME() {
|
|
420
|
-
return NAME$
|
|
420
|
+
return NAME$4;
|
|
421
421
|
}
|
|
422
422
|
static getInstance(element) {
|
|
423
423
|
return this._getInstance(element);
|
|
@@ -435,26 +435,26 @@
|
|
|
435
435
|
return;
|
|
436
436
|
}
|
|
437
437
|
if (this._config.accordion) {
|
|
438
|
-
const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`);
|
|
438
|
+
const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM$1}.${CLASS_NAME_MENU_OPEN$1}`);
|
|
439
439
|
openMenuList?.forEach(openMenu => {
|
|
440
440
|
if (!this._element.contains(openMenu)) {
|
|
441
|
-
openMenu.classList.remove(CLASS_NAME_MENU_OPEN);
|
|
441
|
+
openMenu.classList.remove(CLASS_NAME_MENU_OPEN$1);
|
|
442
442
|
setAriaExpanded(openMenu, false);
|
|
443
|
-
const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU);
|
|
443
|
+
const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU$1);
|
|
444
444
|
if (childElement) {
|
|
445
445
|
slideUp(childElement, this._config.animationSpeed);
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
});
|
|
449
449
|
}
|
|
450
|
-
this._element.classList.add(CLASS_NAME_MENU_OPEN);
|
|
450
|
+
this._element.classList.add(CLASS_NAME_MENU_OPEN$1);
|
|
451
451
|
setAriaExpanded(this._element, true);
|
|
452
|
-
const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU);
|
|
452
|
+
const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU$1);
|
|
453
453
|
if (childElement) {
|
|
454
454
|
slideDown(childElement, this._config.animationSpeed);
|
|
455
455
|
}
|
|
456
456
|
setTimeout(() => {
|
|
457
|
-
if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
|
|
457
|
+
if (this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
|
|
458
458
|
dispatchCustomEvent(this._element, EVENT_EXPANDED$1);
|
|
459
459
|
}
|
|
460
460
|
}, this._config.animationSpeed);
|
|
@@ -463,20 +463,20 @@
|
|
|
463
463
|
if (dispatchCustomEvent(this._element, EVENT_COLLAPSE$1, { cancelable: true }).defaultPrevented) {
|
|
464
464
|
return;
|
|
465
465
|
}
|
|
466
|
-
this._element.classList.remove(CLASS_NAME_MENU_OPEN);
|
|
466
|
+
this._element.classList.remove(CLASS_NAME_MENU_OPEN$1);
|
|
467
467
|
setAriaExpanded(this._element, false);
|
|
468
|
-
const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU);
|
|
468
|
+
const childElement = this._element.querySelector(SELECTOR_TREEVIEW_MENU$1);
|
|
469
469
|
if (childElement) {
|
|
470
470
|
slideUp(childElement, this._config.animationSpeed);
|
|
471
471
|
}
|
|
472
472
|
setTimeout(() => {
|
|
473
|
-
if (!this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
|
|
473
|
+
if (!this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
|
|
474
474
|
dispatchCustomEvent(this._element, EVENT_COLLAPSED$2);
|
|
475
475
|
}
|
|
476
476
|
}, this._config.animationSpeed);
|
|
477
477
|
}
|
|
478
478
|
toggle() {
|
|
479
|
-
if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {
|
|
479
|
+
if (this._element.classList.contains(CLASS_NAME_MENU_OPEN$1)) {
|
|
480
480
|
this.close();
|
|
481
481
|
}
|
|
482
482
|
else {
|
|
@@ -489,13 +489,13 @@
|
|
|
489
489
|
if (!(target instanceof Element)) {
|
|
490
490
|
return;
|
|
491
491
|
}
|
|
492
|
-
const toggleRoot = target.closest(SELECTOR_DATA_TOGGLE$
|
|
492
|
+
const toggleRoot = target.closest(SELECTOR_DATA_TOGGLE$2);
|
|
493
493
|
if (!toggleRoot) {
|
|
494
494
|
return;
|
|
495
495
|
}
|
|
496
|
-
const targetItem = target.closest(SELECTOR_NAV_ITEM);
|
|
497
|
-
const targetLink = target.closest(SELECTOR_NAV_LINK);
|
|
498
|
-
if (!targetItem?.querySelector(SELECTOR_TREEVIEW_MENU)) {
|
|
496
|
+
const targetItem = target.closest(SELECTOR_NAV_ITEM$1);
|
|
497
|
+
const targetLink = target.closest(SELECTOR_NAV_LINK$1);
|
|
498
|
+
if (!targetItem?.querySelector(SELECTOR_TREEVIEW_MENU$1)) {
|
|
499
499
|
return;
|
|
500
500
|
}
|
|
501
501
|
if (target.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') {
|
|
@@ -510,34 +510,34 @@
|
|
|
510
510
|
Treeview.getOrCreateInstance(targetItem, config).toggle();
|
|
511
511
|
});
|
|
512
512
|
onDOMContentLoaded(() => {
|
|
513
|
-
const openMenuItems = document.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`);
|
|
513
|
+
const openMenuItems = document.querySelectorAll(`${SELECTOR_NAV_ITEM$1}.${CLASS_NAME_MENU_OPEN$1}`);
|
|
514
514
|
openMenuItems.forEach(menuItem => {
|
|
515
|
-
const childElement = menuItem.querySelector(SELECTOR_TREEVIEW_MENU);
|
|
515
|
+
const childElement = menuItem.querySelector(SELECTOR_TREEVIEW_MENU$1);
|
|
516
516
|
if (childElement) {
|
|
517
517
|
slideDown(childElement, 0);
|
|
518
518
|
const event = new Event(EVENT_LOAD_DATA_API);
|
|
519
519
|
menuItem.dispatchEvent(event);
|
|
520
520
|
}
|
|
521
521
|
});
|
|
522
|
-
document.querySelectorAll(SELECTOR_DATA_TOGGLE$
|
|
523
|
-
root.querySelectorAll(SELECTOR_NAV_ITEM).forEach(item => {
|
|
524
|
-
if (item.querySelector(`:scope > ${SELECTOR_TREEVIEW_MENU}`)) {
|
|
525
|
-
setAriaExpanded(item, item.classList.contains(CLASS_NAME_MENU_OPEN));
|
|
522
|
+
document.querySelectorAll(SELECTOR_DATA_TOGGLE$2).forEach(root => {
|
|
523
|
+
root.querySelectorAll(SELECTOR_NAV_ITEM$1).forEach(item => {
|
|
524
|
+
if (item.querySelector(`:scope > ${SELECTOR_TREEVIEW_MENU$1}`)) {
|
|
525
|
+
setAriaExpanded(item, item.classList.contains(CLASS_NAME_MENU_OPEN$1));
|
|
526
526
|
}
|
|
527
527
|
});
|
|
528
528
|
});
|
|
529
529
|
});
|
|
530
530
|
|
|
531
|
-
const NAME$
|
|
532
|
-
const EVENT_KEY$
|
|
533
|
-
const EVENT_EXPANDED = `expanded${EVENT_KEY$
|
|
534
|
-
const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$
|
|
535
|
-
const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="chat-pane"]';
|
|
531
|
+
const NAME$3 = 'direct-chat';
|
|
532
|
+
const EVENT_KEY$4 = `.lte.${NAME$3}`;
|
|
533
|
+
const EVENT_EXPANDED = `expanded${EVENT_KEY$4}`;
|
|
534
|
+
const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$4}`;
|
|
535
|
+
const SELECTOR_DATA_TOGGLE$1 = '[data-lte-toggle="chat-pane"]';
|
|
536
536
|
const SELECTOR_DIRECT_CHAT = '.direct-chat';
|
|
537
537
|
const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open';
|
|
538
538
|
class DirectChat extends BaseComponent {
|
|
539
539
|
static get NAME() {
|
|
540
|
-
return NAME$
|
|
540
|
+
return NAME$3;
|
|
541
541
|
}
|
|
542
542
|
static getInstance(element) {
|
|
543
543
|
return this._getInstance(element);
|
|
@@ -561,7 +561,7 @@
|
|
|
561
561
|
if (!(target instanceof Element)) {
|
|
562
562
|
return;
|
|
563
563
|
}
|
|
564
|
-
const trigger = target.closest(SELECTOR_DATA_TOGGLE);
|
|
564
|
+
const trigger = target.closest(SELECTOR_DATA_TOGGLE$1);
|
|
565
565
|
if (!trigger) {
|
|
566
566
|
return;
|
|
567
567
|
}
|
|
@@ -572,10 +572,10 @@
|
|
|
572
572
|
}
|
|
573
573
|
});
|
|
574
574
|
|
|
575
|
-
const NAME$
|
|
576
|
-
const EVENT_KEY$
|
|
577
|
-
const EVENT_MAXIMIZED = `maximized${EVENT_KEY$
|
|
578
|
-
const EVENT_MINIMIZED = `minimized${EVENT_KEY$
|
|
575
|
+
const NAME$2 = 'fullscreen';
|
|
576
|
+
const EVENT_KEY$3 = `.lte.${NAME$2}`;
|
|
577
|
+
const EVENT_MAXIMIZED = `maximized${EVENT_KEY$3}`;
|
|
578
|
+
const EVENT_MINIMIZED = `minimized${EVENT_KEY$3}`;
|
|
579
579
|
const SELECTOR_FULLSCREEN_TOGGLE = '[data-lte-toggle="fullscreen"]';
|
|
580
580
|
const SELECTOR_MAXIMIZE_ICON = '[data-lte-icon="maximize"]';
|
|
581
581
|
const SELECTOR_MINIMIZE_ICON = '[data-lte-icon="minimize"]';
|
|
@@ -592,7 +592,7 @@
|
|
|
592
592
|
}
|
|
593
593
|
class FullScreen extends BaseComponent {
|
|
594
594
|
static get NAME() {
|
|
595
|
-
return NAME$
|
|
595
|
+
return NAME$2;
|
|
596
596
|
}
|
|
597
597
|
static getInstance(element) {
|
|
598
598
|
return this._getInstance(element);
|
|
@@ -636,12 +636,12 @@
|
|
|
636
636
|
document.addEventListener('fullscreenchange', syncFullScreenState, { signal: getLifecycleSignal() });
|
|
637
637
|
});
|
|
638
638
|
|
|
639
|
-
const NAME = 'push-menu';
|
|
640
|
-
const EVENT_KEY$
|
|
641
|
-
const EVENT_OPEN = `open${EVENT_KEY$
|
|
642
|
-
const EVENT_COLLAPSE = `collapse${EVENT_KEY$
|
|
643
|
-
const EVENT_OPENED = `opened${EVENT_KEY$
|
|
644
|
-
const EVENT_COLLAPSED = `collapsed${EVENT_KEY$
|
|
639
|
+
const NAME$1 = 'push-menu';
|
|
640
|
+
const EVENT_KEY$2 = `.lte.${NAME$1}`;
|
|
641
|
+
const EVENT_OPEN = `open${EVENT_KEY$2}`;
|
|
642
|
+
const EVENT_COLLAPSE = `collapse${EVENT_KEY$2}`;
|
|
643
|
+
const EVENT_OPENED = `opened${EVENT_KEY$2}`;
|
|
644
|
+
const EVENT_COLLAPSED = `collapsed${EVENT_KEY$2}`;
|
|
645
645
|
const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini';
|
|
646
646
|
const CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand';
|
|
647
647
|
const CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay';
|
|
@@ -658,7 +658,7 @@
|
|
|
658
658
|
};
|
|
659
659
|
class PushMenu extends BaseComponent {
|
|
660
660
|
static get NAME() {
|
|
661
|
-
return NAME;
|
|
661
|
+
return NAME$1;
|
|
662
662
|
}
|
|
663
663
|
static getInstance(element) {
|
|
664
664
|
return this._getInstance(element);
|
|
@@ -859,8 +859,8 @@
|
|
|
859
859
|
});
|
|
860
860
|
|
|
861
861
|
const DATA_KEY = 'lte.color-mode';
|
|
862
|
-
const EVENT_KEY = `.${DATA_KEY}`;
|
|
863
|
-
const EVENT_CHANGED = `changed${EVENT_KEY}`;
|
|
862
|
+
const EVENT_KEY$1 = `.${DATA_KEY}`;
|
|
863
|
+
const EVENT_CHANGED = `changed${EVENT_KEY$1}`;
|
|
864
864
|
const STORAGE_KEY = 'lte-theme';
|
|
865
865
|
const ATTRIBUTE_THEME = 'data-bs-theme';
|
|
866
866
|
const ATTRIBUTE_TOGGLE = 'data-bs-theme-value';
|
|
@@ -972,6 +972,154 @@
|
|
|
972
972
|
}, { signal: getLifecycleSignal() });
|
|
973
973
|
});
|
|
974
974
|
|
|
975
|
+
const NAME = 'sidebar-search';
|
|
976
|
+
const EVENT_KEY = `.lte.${NAME}`;
|
|
977
|
+
const EVENT_FILTERED = `filtered${EVENT_KEY}`;
|
|
978
|
+
const CLASS_NAME_MENU_OPEN = 'menu-open';
|
|
979
|
+
const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="sidebar-search"]';
|
|
980
|
+
const SELECTOR_SIDEBAR = '.app-sidebar';
|
|
981
|
+
const SELECTOR_MENU = '.sidebar-menu';
|
|
982
|
+
const SELECTOR_NAV_ITEM = '.nav-item';
|
|
983
|
+
const SELECTOR_NAV_HEADER = '.nav-header';
|
|
984
|
+
const SELECTOR_NAV_LINK = ':scope > .nav-link';
|
|
985
|
+
const SELECTOR_TREEVIEW_MENU = ':scope > .nav-treeview';
|
|
986
|
+
const SELECTOR_EMPTY_STATE = '[data-lte-search-empty]';
|
|
987
|
+
const submenuOf = (item) => item.querySelector(SELECTOR_TREEVIEW_MENU);
|
|
988
|
+
const setOpen = (item, submenu, open, display) => {
|
|
989
|
+
item.classList.toggle(CLASS_NAME_MENU_OPEN, open);
|
|
990
|
+
item.querySelector(SELECTOR_NAV_LINK)?.setAttribute('aria-expanded', String(open));
|
|
991
|
+
submenu.style.display = display;
|
|
992
|
+
};
|
|
993
|
+
class SidebarSearch extends BaseComponent {
|
|
994
|
+
static get NAME() {
|
|
995
|
+
return NAME;
|
|
996
|
+
}
|
|
997
|
+
static getInstance(element) {
|
|
998
|
+
return this._getInstance(element);
|
|
999
|
+
}
|
|
1000
|
+
static getOrCreateInstance(element) {
|
|
1001
|
+
return this.getInstance(element) ?? new this(element);
|
|
1002
|
+
}
|
|
1003
|
+
_menu;
|
|
1004
|
+
_emptyState;
|
|
1005
|
+
_snapshot = null;
|
|
1006
|
+
constructor(element) {
|
|
1007
|
+
super(element);
|
|
1008
|
+
const target = element.dataset.lteTarget;
|
|
1009
|
+
const scope = element.closest(SELECTOR_SIDEBAR) ?? document;
|
|
1010
|
+
this._menu = target ?
|
|
1011
|
+
document.querySelector(target) :
|
|
1012
|
+
scope.querySelector(SELECTOR_MENU);
|
|
1013
|
+
this._emptyState = scope.querySelector(SELECTOR_EMPTY_STATE);
|
|
1014
|
+
}
|
|
1015
|
+
search(term) {
|
|
1016
|
+
const menu = this._menu;
|
|
1017
|
+
if (!menu) {
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
const query = term.trim().toLowerCase();
|
|
1021
|
+
if (!query) {
|
|
1022
|
+
this.clear();
|
|
1023
|
+
return;
|
|
1024
|
+
}
|
|
1025
|
+
this._snapshot ??= this._takeSnapshot(menu);
|
|
1026
|
+
const items = [...menu.querySelectorAll(SELECTOR_NAV_ITEM)];
|
|
1027
|
+
const matched = new Set();
|
|
1028
|
+
for (const item of items) {
|
|
1029
|
+
const label = item.querySelector(SELECTOR_NAV_LINK)?.textContent?.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
1030
|
+
if (label?.includes(query)) {
|
|
1031
|
+
matched.add(item);
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
for (let index = items.length - 1; index >= 0; index--) {
|
|
1035
|
+
const item = items[index];
|
|
1036
|
+
item.hidden = !(matched.has(item) || item.querySelector(`${SELECTOR_NAV_ITEM}:not([hidden])`));
|
|
1037
|
+
}
|
|
1038
|
+
for (const item of matched) {
|
|
1039
|
+
for (const descendant of item.querySelectorAll(SELECTOR_NAV_ITEM)) {
|
|
1040
|
+
descendant.hidden = false;
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
let visible = 0;
|
|
1044
|
+
for (const item of items) {
|
|
1045
|
+
if (!item.hidden) {
|
|
1046
|
+
visible++;
|
|
1047
|
+
}
|
|
1048
|
+
const submenu = submenuOf(item);
|
|
1049
|
+
if (submenu) {
|
|
1050
|
+
const expand = !item.hidden && Boolean(item.querySelector(`${SELECTOR_NAV_ITEM}:not([hidden])`));
|
|
1051
|
+
setOpen(item, submenu, expand, expand ? 'block' : 'none');
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
for (const header of menu.querySelectorAll(SELECTOR_NAV_HEADER)) {
|
|
1055
|
+
header.hidden = true;
|
|
1056
|
+
}
|
|
1057
|
+
if (this._emptyState) {
|
|
1058
|
+
this._emptyState.hidden = visible > 0;
|
|
1059
|
+
}
|
|
1060
|
+
dispatchCustomEvent(this._element, EVENT_FILTERED, { detail: { query, matches: visible } });
|
|
1061
|
+
}
|
|
1062
|
+
clear() {
|
|
1063
|
+
const menu = this._menu;
|
|
1064
|
+
if (!menu) {
|
|
1065
|
+
return;
|
|
1066
|
+
}
|
|
1067
|
+
for (const item of menu.querySelectorAll(`${SELECTOR_NAV_ITEM}, ${SELECTOR_NAV_HEADER}`)) {
|
|
1068
|
+
item.hidden = false;
|
|
1069
|
+
}
|
|
1070
|
+
if (this._snapshot) {
|
|
1071
|
+
for (const [item, state] of this._snapshot) {
|
|
1072
|
+
const submenu = submenuOf(item);
|
|
1073
|
+
if (submenu) {
|
|
1074
|
+
setOpen(item, submenu, state.open, state.display);
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
this._snapshot = null;
|
|
1078
|
+
}
|
|
1079
|
+
if (this._emptyState) {
|
|
1080
|
+
this._emptyState.hidden = true;
|
|
1081
|
+
}
|
|
1082
|
+
dispatchCustomEvent(this._element, EVENT_FILTERED, { detail: { query: '', matches: -1 } });
|
|
1083
|
+
}
|
|
1084
|
+
dispose() {
|
|
1085
|
+
this.clear();
|
|
1086
|
+
super.dispose();
|
|
1087
|
+
}
|
|
1088
|
+
_takeSnapshot(menu) {
|
|
1089
|
+
const snapshot = new Map();
|
|
1090
|
+
for (const item of menu.querySelectorAll(SELECTOR_NAV_ITEM)) {
|
|
1091
|
+
const submenu = submenuOf(item);
|
|
1092
|
+
if (submenu) {
|
|
1093
|
+
snapshot.set(item, {
|
|
1094
|
+
open: item.classList.contains(CLASS_NAME_MENU_OPEN),
|
|
1095
|
+
display: submenu.style.display
|
|
1096
|
+
});
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
return snapshot;
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
document.addEventListener('input', event => {
|
|
1103
|
+
const target = event.target;
|
|
1104
|
+
if (target instanceof HTMLInputElement && target.matches(SELECTOR_DATA_TOGGLE)) {
|
|
1105
|
+
SidebarSearch.getOrCreateInstance(target).search(target.value);
|
|
1106
|
+
}
|
|
1107
|
+
});
|
|
1108
|
+
document.addEventListener('keydown', event => {
|
|
1109
|
+
const target = event.target;
|
|
1110
|
+
if (event.key === 'Escape' && target instanceof HTMLInputElement && target.matches(SELECTOR_DATA_TOGGLE)) {
|
|
1111
|
+
target.value = '';
|
|
1112
|
+
SidebarSearch.getOrCreateInstance(target).clear();
|
|
1113
|
+
}
|
|
1114
|
+
});
|
|
1115
|
+
onDOMContentLoaded(() => {
|
|
1116
|
+
document.querySelectorAll(SELECTOR_DATA_TOGGLE).forEach(input => {
|
|
1117
|
+
if (input.value) {
|
|
1118
|
+
SidebarSearch.getOrCreateInstance(input).search(input.value);
|
|
1119
|
+
}
|
|
1120
|
+
});
|
|
1121
|
+
});
|
|
1122
|
+
|
|
975
1123
|
class AccessibilityManager {
|
|
976
1124
|
config;
|
|
977
1125
|
liveRegion = null;
|
|
@@ -1045,19 +1193,21 @@
|
|
|
1045
1193
|
this.ensureSkipTargets();
|
|
1046
1194
|
}
|
|
1047
1195
|
ensureSkipTargets() {
|
|
1048
|
-
const
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1196
|
+
const targets = [
|
|
1197
|
+
['main', 'main, [role="main"]'],
|
|
1198
|
+
['navigation', 'nav, [role="navigation"]']
|
|
1199
|
+
];
|
|
1200
|
+
for (const [id, fallbackSelector] of targets) {
|
|
1201
|
+
const target = document.getElementById(id) ?? document.querySelector(fallbackSelector);
|
|
1202
|
+
if (!target) {
|
|
1203
|
+
continue;
|
|
1204
|
+
}
|
|
1205
|
+
if (!target.id) {
|
|
1206
|
+
target.id = id;
|
|
1207
|
+
}
|
|
1208
|
+
if (!target.hasAttribute('tabindex')) {
|
|
1209
|
+
target.setAttribute('tabindex', '-1');
|
|
1210
|
+
}
|
|
1061
1211
|
}
|
|
1062
1212
|
}
|
|
1063
1213
|
initFocusManagement() {
|
|
@@ -1414,6 +1564,7 @@
|
|
|
1414
1564
|
exports.FullScreen = FullScreen;
|
|
1415
1565
|
exports.Layout = Layout;
|
|
1416
1566
|
exports.PushMenu = PushMenu;
|
|
1567
|
+
exports.SidebarSearch = SidebarSearch;
|
|
1417
1568
|
exports.Treeview = Treeview;
|
|
1418
1569
|
exports.initAccessibility = initAccessibility;
|
|
1419
1570
|
exports.initialize = initialize;
|