admin-lte 4.0.0-rc7 → 4.0.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 (104) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +202 -102
  3. package/dist/UI/general.html +330 -129
  4. package/dist/UI/icons.html +330 -129
  5. package/dist/UI/timeline.html +330 -129
  6. package/dist/css/adminlte.css +2798 -1167
  7. package/dist/css/adminlte.css.map +1 -1
  8. package/dist/css/adminlte.min.css +2 -2
  9. package/dist/css/adminlte.min.css.map +1 -1
  10. package/dist/css/adminlte.rtl.css +2798 -1167
  11. package/dist/css/adminlte.rtl.css.map +1 -1
  12. package/dist/css/adminlte.rtl.min.css +2 -2
  13. package/dist/css/adminlte.rtl.min.css.map +1 -1
  14. package/dist/docs/browser-support.html +287 -399
  15. package/dist/docs/color-mode.html +268 -384
  16. package/dist/docs/components/main-header.html +264 -376
  17. package/dist/docs/components/main-sidebar.html +279 -391
  18. package/dist/docs/customization.html +1080 -0
  19. package/dist/docs/deployment.html +1145 -0
  20. package/dist/docs/faq.html +883 -411
  21. package/dist/docs/getting-started.html +991 -0
  22. package/dist/docs/how-to-contribute.html +361 -464
  23. package/dist/docs/index.html +16 -0
  24. package/dist/docs/integrations.html +1231 -0
  25. package/dist/docs/introduction.html +479 -448
  26. package/dist/docs/javascript/accessibility.html +387 -493
  27. package/dist/docs/javascript/card-widget.html +472 -452
  28. package/dist/docs/javascript/direct-chat.html +350 -423
  29. package/dist/docs/javascript/fullscreen.html +374 -418
  30. package/dist/docs/javascript/layout.html +371 -438
  31. package/dist/docs/javascript/plugins-overview.html +1144 -0
  32. package/dist/docs/javascript/pushmenu.html +511 -494
  33. package/dist/docs/javascript/treeview.html +492 -402
  34. package/dist/docs/layout-blueprint.html +1087 -0
  35. package/dist/docs/layout.html +313 -417
  36. package/dist/docs/license.html +278 -389
  37. package/dist/docs/migration.html +1149 -0
  38. package/dist/docs/recipes.html +1185 -0
  39. package/dist/docs/rtl.html +957 -0
  40. package/dist/examples/lockscreen.html +91 -1
  41. package/dist/examples/login-v2.html +91 -1
  42. package/dist/examples/login.html +91 -1
  43. package/dist/examples/register-v2.html +91 -1
  44. package/dist/examples/register.html +91 -1
  45. package/dist/forms/elements.html +1405 -0
  46. package/dist/forms/{general.html → layout.html} +401 -489
  47. package/dist/forms/validation.html +1275 -0
  48. package/dist/forms/wizard.html +1410 -0
  49. package/dist/generate/theme.html +160 -4
  50. package/dist/index.html +330 -129
  51. package/dist/index2.html +333 -129
  52. package/dist/index3.html +330 -129
  53. package/dist/js/adminlte.js +8 -5
  54. package/dist/js/adminlte.js.map +1 -1
  55. package/dist/js/adminlte.min.js +2 -2
  56. package/dist/js/adminlte.min.js.map +1 -1
  57. package/dist/layout/collapsed-sidebar-without-hover.html +330 -129
  58. package/dist/layout/collapsed-sidebar.html +330 -129
  59. package/dist/layout/fixed-complete.html +330 -129
  60. package/dist/layout/fixed-footer.html +330 -129
  61. package/dist/layout/fixed-header.html +330 -129
  62. package/dist/layout/fixed-sidebar.html +330 -129
  63. package/dist/layout/layout-custom-area.html +330 -129
  64. package/dist/layout/layout-rtl.html +330 -129
  65. package/dist/layout/logo-switch.html +160 -4
  66. package/dist/layout/sidebar-mini.html +330 -129
  67. package/dist/layout/unfixed-sidebar.html +330 -129
  68. package/dist/mailbox/compose.html +1151 -0
  69. package/dist/mailbox/inbox.html +1509 -0
  70. package/dist/mailbox/read.html +1202 -0
  71. package/dist/pages/404.html +239 -0
  72. package/dist/pages/500.html +227 -0
  73. package/dist/pages/calendar.html +1266 -0
  74. package/dist/pages/chat.html +1427 -0
  75. package/dist/pages/faq.html +1383 -0
  76. package/dist/pages/file-manager.html +1835 -0
  77. package/dist/pages/invoice.html +1199 -0
  78. package/dist/pages/kanban.html +1439 -0
  79. package/dist/pages/maintenance.html +230 -0
  80. package/dist/pages/pricing.html +1279 -0
  81. package/dist/pages/profile.html +1382 -0
  82. package/dist/pages/projects.html +1644 -0
  83. package/dist/pages/settings.html +1387 -0
  84. package/dist/tables/data.html +1319 -0
  85. package/dist/tables/simple.html +330 -129
  86. package/dist/widgets/cards.html +330 -129
  87. package/dist/widgets/info-box.html +330 -129
  88. package/dist/widgets/small-box.html +330 -129
  89. package/github-issue-response.md +40 -0
  90. package/netlify.toml +16 -0
  91. package/package.json +31 -24
  92. package/src/scss/_app-header.scss +27 -0
  93. package/src/scss/_app-sidebar.scss +24 -30
  94. package/src/scss/_bootstrap-variables.scss +11 -4
  95. package/src/scss/_docs.scss +816 -0
  96. package/src/scss/_table.scss +4 -4
  97. package/src/scss/adminlte.scss +4 -1
  98. package/src/ts/accessibility.ts +9 -1
  99. package/src/ts/adminlte.ts +1 -1
  100. package/src/ts/fullscreen.ts +8 -4
  101. package/src/ts/push-menu.ts +66 -5
  102. package/.claude/settings.local.json +0 -37
  103. package/CLAUDE.md +0 -79
  104. package/release.md +0 -75
package/dist/index.html CHANGED
@@ -5,6 +5,32 @@
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
6
  <title>AdminLTE v4 | Dashboard</title>
7
7
 
8
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
9
+ <script>
10
+ (() => {
11
+ 'use strict';
12
+ const STORAGE_KEY = 'lte-theme';
13
+ let stored = null;
14
+ try {
15
+ stored = localStorage.getItem(STORAGE_KEY);
16
+ } catch {
17
+ // localStorage may be unavailable (private mode, sandboxed iframe).
18
+ }
19
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
20
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
21
+ // otherwise ("auto" or unset) fall back to the OS preference.
22
+ let resolved = 'light';
23
+ if (stored === 'dark' || stored === 'light') {
24
+ resolved = stored;
25
+ } else if (prefersDark) {
26
+ resolved = 'dark';
27
+ }
28
+ document.documentElement.setAttribute('data-bs-theme', resolved);
29
+ document.documentElement.style.colorScheme = resolved;
30
+ })();
31
+ </script>
32
+ <!--end::Theme Init-->
33
+
8
34
  <!--begin::Accessibility Meta Tags-->
9
35
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
10
36
  <meta name="color-scheme" content="light dark" />
@@ -94,11 +120,18 @@
94
120
  <i class="bi bi-list"></i>
95
121
  </a>
96
122
  </li>
123
+
97
124
  <li class="nav-item d-none d-md-block">
98
- <a href="#" class="nav-link">Home</a>
125
+ <a href="./index.html" class="nav-link">
126
+ <i class="bi bi-grid-1x2 me-1" aria-hidden="true"></i>
127
+ Live preview
128
+ </a>
99
129
  </li>
100
130
  <li class="nav-item d-none d-md-block">
101
- <a href="#" class="nav-link">Contact</a>
131
+ <a href="./docs/introduction.html" class="nav-link">
132
+ <i class="bi bi-book me-1" aria-hidden="true"></i>
133
+ Documentation
134
+ </a>
102
135
  </li>
103
136
  </ul>
104
137
  <!--end::Start Navbar Links-->
@@ -236,11 +269,70 @@
236
269
  <li class="nav-item">
237
270
  <a class="nav-link" href="#" data-lte-toggle="fullscreen">
238
271
  <i data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i>
239
- <i data-lte-icon="minimize" class="bi bi-fullscreen-exit" style="display: none"></i>
272
+ <i data-lte-icon="minimize" class="bi bi-fullscreen-exit d-none"></i>
240
273
  </a>
241
274
  </li>
242
275
  <!--end::Fullscreen Toggle-->
243
276
 
277
+ <!--begin::Color Mode Toggle (#6010)-->
278
+ <li class="nav-item dropdown">
279
+ <a
280
+ class="nav-link"
281
+ href="#"
282
+ id="bd-theme"
283
+ aria-label="Toggle color scheme"
284
+ data-bs-toggle="dropdown"
285
+ aria-expanded="false"
286
+ >
287
+ <i class="bi bi-sun-fill" data-lte-theme-icon="light"></i>
288
+ <i class="bi bi-moon-fill d-none" data-lte-theme-icon="dark"></i>
289
+ <i class="bi bi-circle-half d-none" data-lte-theme-icon="auto"></i>
290
+ </a>
291
+ <ul
292
+ class="dropdown-menu dropdown-menu-end"
293
+ aria-labelledby="bd-theme"
294
+ style="--bs-dropdown-min-width: 8rem"
295
+ >
296
+ <li>
297
+ <button
298
+ type="button"
299
+ class="dropdown-item d-flex align-items-center"
300
+ data-bs-theme-value="light"
301
+ aria-pressed="false"
302
+ >
303
+ <i class="bi bi-sun-fill me-2"></i>
304
+ Light
305
+ <i class="bi bi-check-lg ms-auto d-none"></i>
306
+ </button>
307
+ </li>
308
+ <li>
309
+ <button
310
+ type="button"
311
+ class="dropdown-item d-flex align-items-center"
312
+ data-bs-theme-value="dark"
313
+ aria-pressed="false"
314
+ >
315
+ <i class="bi bi-moon-fill me-2"></i>
316
+ Dark
317
+ <i class="bi bi-check-lg ms-auto d-none"></i>
318
+ </button>
319
+ </li>
320
+ <li>
321
+ <button
322
+ type="button"
323
+ class="dropdown-item d-flex align-items-center active"
324
+ data-bs-theme-value="auto"
325
+ aria-pressed="true"
326
+ >
327
+ <i class="bi bi-circle-half me-2"></i>
328
+ Auto
329
+ <i class="bi bi-check-lg ms-auto d-none"></i>
330
+ </button>
331
+ </li>
332
+ </ul>
333
+ </li>
334
+ <!--end::Color Mode Toggle-->
335
+
244
336
  <!--begin::User Menu Dropdown-->
245
337
  <li class="nav-item dropdown user-menu">
246
338
  <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
@@ -319,13 +411,11 @@
319
411
  <!--end::Sidebar Brand-->
320
412
  <!--begin::Sidebar Wrapper-->
321
413
  <div class="sidebar-wrapper">
322
- <nav class="mt-2">
414
+ <nav class="mt-2" aria-label="Main navigation">
323
415
  <!--begin::Sidebar Menu-->
324
416
  <ul
325
417
  class="nav sidebar-menu flex-column"
326
418
  data-lte-toggle="treeview"
327
- role="navigation"
328
- aria-label="Main navigation"
329
419
  data-accordion="false"
330
420
  id="navigation"
331
421
  >
@@ -500,6 +590,36 @@
500
590
  </li>
501
591
  </ul>
502
592
  </li>
593
+ <li class="nav-item">
594
+ <a href="#" class="nav-link">
595
+ <i class="nav-icon bi bi-envelope"></i>
596
+ <p>
597
+ Mailbox
598
+ <i class="nav-arrow bi bi-chevron-right"></i>
599
+ </p>
600
+ </a>
601
+ <ul class="nav nav-treeview">
602
+ <li class="nav-item">
603
+ <a href="./mailbox/inbox.html" class="nav-link">
604
+ <i class="nav-icon bi bi-circle"></i>
605
+ <p>Inbox</p>
606
+ </a>
607
+ </li>
608
+ <li class="nav-item">
609
+ <a href="./mailbox/read.html" class="nav-link">
610
+ <i class="nav-icon bi bi-circle"></i>
611
+ <p>Read Message</p>
612
+ </a>
613
+ </li>
614
+ <li class="nav-item">
615
+ <a href="./mailbox/compose.html" class="nav-link">
616
+ <i class="nav-icon bi bi-circle"></i>
617
+ <p>Compose</p>
618
+ </a>
619
+ </li>
620
+ </ul>
621
+ </li>
622
+
503
623
  <li class="nav-item">
504
624
  <a href="#" class="nav-link">
505
625
  <i class="nav-icon bi bi-pencil-square"></i>
@@ -510,9 +630,27 @@
510
630
  </a>
511
631
  <ul class="nav nav-treeview">
512
632
  <li class="nav-item">
513
- <a href="./forms/general.html" class="nav-link">
633
+ <a href="./forms/elements.html" class="nav-link">
634
+ <i class="nav-icon bi bi-circle"></i>
635
+ <p>Elements</p>
636
+ </a>
637
+ </li>
638
+ <li class="nav-item">
639
+ <a href="./forms/layout.html" class="nav-link">
640
+ <i class="nav-icon bi bi-circle"></i>
641
+ <p>Layout</p>
642
+ </a>
643
+ </li>
644
+ <li class="nav-item">
645
+ <a href="./forms/validation.html" class="nav-link">
514
646
  <i class="nav-icon bi bi-circle"></i>
515
- <p>General Elements</p>
647
+ <p>Validation</p>
648
+ </a>
649
+ </li>
650
+ <li class="nav-item">
651
+ <a href="./forms/wizard.html" class="nav-link">
652
+ <i class="nav-icon bi bi-circle"></i>
653
+ <p>Wizard</p>
516
654
  </a>
517
655
  </li>
518
656
  </ul>
@@ -532,6 +670,114 @@
532
670
  <p>Simple Tables</p>
533
671
  </a>
534
672
  </li>
673
+ <li class="nav-item">
674
+ <a href="./tables/data.html" class="nav-link">
675
+ <i class="nav-icon bi bi-circle"></i>
676
+ <p>Data Tables</p>
677
+ </a>
678
+ </li>
679
+ </ul>
680
+ </li>
681
+
682
+ <li class="nav-header">PAGES</li>
683
+ <li class="nav-item">
684
+ <a href="#" class="nav-link">
685
+ <i class="nav-icon bi bi-file-earmark-text"></i>
686
+ <p>
687
+ Pages
688
+ <i class="nav-arrow bi bi-chevron-right"></i>
689
+ </p>
690
+ </a>
691
+ <ul class="nav nav-treeview">
692
+ <li class="nav-item">
693
+ <a href="./pages/profile.html" class="nav-link">
694
+ <i class="nav-icon bi bi-circle"></i>
695
+ <p>Profile</p>
696
+ </a>
697
+ </li>
698
+ <li class="nav-item">
699
+ <a href="./pages/settings.html" class="nav-link">
700
+ <i class="nav-icon bi bi-circle"></i>
701
+ <p>Settings</p>
702
+ </a>
703
+ </li>
704
+ <li class="nav-item">
705
+ <a href="./pages/invoice.html" class="nav-link">
706
+ <i class="nav-icon bi bi-circle"></i>
707
+ <p>Invoice</p>
708
+ </a>
709
+ </li>
710
+ <li class="nav-item">
711
+ <a href="./pages/calendar.html" class="nav-link">
712
+ <i class="nav-icon bi bi-circle"></i>
713
+ <p>Calendar</p>
714
+ </a>
715
+ </li>
716
+ <li class="nav-item">
717
+ <a href="./pages/kanban.html" class="nav-link">
718
+ <i class="nav-icon bi bi-circle"></i>
719
+ <p>Kanban</p>
720
+ </a>
721
+ </li>
722
+ <li class="nav-item">
723
+ <a href="./pages/chat.html" class="nav-link">
724
+ <i class="nav-icon bi bi-circle"></i>
725
+ <p>Chat</p>
726
+ </a>
727
+ </li>
728
+ <li class="nav-item">
729
+ <a href="./pages/file-manager.html" class="nav-link">
730
+ <i class="nav-icon bi bi-circle"></i>
731
+ <p>File Manager</p>
732
+ </a>
733
+ </li>
734
+ <li class="nav-item">
735
+ <a href="./pages/projects.html" class="nav-link">
736
+ <i class="nav-icon bi bi-circle"></i>
737
+ <p>Projects</p>
738
+ </a>
739
+ </li>
740
+ <li class="nav-item">
741
+ <a href="./pages/pricing.html" class="nav-link">
742
+ <i class="nav-icon bi bi-circle"></i>
743
+ <p>Pricing</p>
744
+ </a>
745
+ </li>
746
+ <li class="nav-item">
747
+ <a href="./pages/faq.html" class="nav-link">
748
+ <i class="nav-icon bi bi-circle"></i>
749
+ <p>FAQ</p>
750
+ </a>
751
+ </li>
752
+ <li class="nav-item">
753
+ <a href="#" class="nav-link">
754
+ <i class="nav-icon bi bi-circle"></i>
755
+ <p>
756
+ Error
757
+ <i class="nav-arrow bi bi-chevron-right"></i>
758
+ </p>
759
+ </a>
760
+ <ul class="nav nav-treeview">
761
+ <li class="nav-item">
762
+ <a href="./pages/404.html" class="nav-link">
763
+ <i class="nav-icon bi bi-circle"></i>
764
+ <p>404</p>
765
+ </a>
766
+ </li>
767
+ <li class="nav-item">
768
+ <a href="./pages/500.html" class="nav-link">
769
+ <i class="nav-icon bi bi-circle"></i>
770
+ <p>500</p>
771
+ </a>
772
+ </li>
773
+ <li class="nav-item">
774
+ <a href="./pages/maintenance.html" class="nav-link">
775
+ <i class="nav-icon bi bi-circle"></i>
776
+ <p>Maintenance</p>
777
+ </a>
778
+ </li>
779
+ </ul>
780
+ </li>
535
781
  </ul>
536
782
  </li>
537
783
 
@@ -600,126 +846,6 @@
600
846
  </ul>
601
847
  </li>
602
848
 
603
- <li class="nav-header">DOCUMENTATIONS</li>
604
- <li class="nav-item">
605
- <a href="./docs/introduction.html" class="nav-link">
606
- <i class="nav-icon bi bi-download"></i>
607
- <p>Installation</p>
608
- </a>
609
- </li>
610
- <li class="nav-item">
611
- <a href="./docs/layout.html" class="nav-link">
612
- <i class="nav-icon bi bi-grip-horizontal"></i>
613
- <p>Layout</p>
614
- </a>
615
- </li>
616
- <li class="nav-item">
617
- <a href="./docs/color-mode.html" class="nav-link">
618
- <i class="nav-icon bi bi-star-half"></i>
619
- <p>Color Mode</p>
620
- </a>
621
- </li>
622
- <li class="nav-item">
623
- <a href="#" class="nav-link">
624
- <i class="nav-icon bi bi-ui-checks-grid"></i>
625
- <p>
626
- Components
627
- <i class="nav-arrow bi bi-chevron-right"></i>
628
- </p>
629
- </a>
630
- <ul class="nav nav-treeview">
631
- <li class="nav-item">
632
- <a href="./docs/components/main-header.html" class="nav-link">
633
- <i class="nav-icon bi bi-circle"></i>
634
- <p>Main Header</p>
635
- </a>
636
- </li>
637
- <li class="nav-item">
638
- <a href="./docs/components/main-sidebar.html" class="nav-link">
639
- <i class="nav-icon bi bi-circle"></i>
640
- <p>Main Sidebar</p>
641
- </a>
642
- </li>
643
- </ul>
644
- </li>
645
- <li class="nav-item">
646
- <a href="#" class="nav-link">
647
- <i class="nav-icon bi bi-filetype-js"></i>
648
- <p>
649
- Javascript
650
- <i class="nav-arrow bi bi-chevron-right"></i>
651
- </p>
652
- </a>
653
- <ul class="nav nav-treeview">
654
- <li class="nav-item">
655
- <a href="./docs/javascript/layout.html" class="nav-link">
656
- <i class="nav-icon bi bi-circle"></i>
657
- <p>Layout</p>
658
- </a>
659
- </li>
660
- <li class="nav-item">
661
- <a href="./docs/javascript/pushmenu.html" class="nav-link">
662
- <i class="nav-icon bi bi-circle"></i>
663
- <p>PushMenu</p>
664
- </a>
665
- </li>
666
- <li class="nav-item">
667
- <a href="./docs/javascript/treeview.html" class="nav-link">
668
- <i class="nav-icon bi bi-circle"></i>
669
- <p>Treeview</p>
670
- </a>
671
- </li>
672
- <li class="nav-item">
673
- <a href="./docs/javascript/card-widget.html" class="nav-link">
674
- <i class="nav-icon bi bi-circle"></i>
675
- <p>Card Widget</p>
676
- </a>
677
- </li>
678
- <li class="nav-item">
679
- <a href="./docs/javascript/direct-chat.html" class="nav-link">
680
- <i class="nav-icon bi bi-circle"></i>
681
- <p>Direct Chat</p>
682
- </a>
683
- </li>
684
- <li class="nav-item">
685
- <a href="./docs/javascript/fullscreen.html" class="nav-link">
686
- <i class="nav-icon bi bi-circle"></i>
687
- <p>Fullscreen</p>
688
- </a>
689
- </li>
690
- <li class="nav-item">
691
- <a href="./docs/javascript/accessibility.html" class="nav-link">
692
- <i class="nav-icon bi bi-circle"></i>
693
- <p>Accessibility</p>
694
- </a>
695
- </li>
696
- </ul>
697
- </li>
698
- <li class="nav-item">
699
- <a href="./docs/browser-support.html" class="nav-link">
700
- <i class="nav-icon bi bi-browser-edge"></i>
701
- <p>Browser Support</p>
702
- </a>
703
- </li>
704
- <li class="nav-item">
705
- <a href="./docs/how-to-contribute.html" class="nav-link">
706
- <i class="nav-icon bi bi-hand-thumbs-up-fill"></i>
707
- <p>How To Contribute</p>
708
- </a>
709
- </li>
710
- <li class="nav-item">
711
- <a href="./docs/faq.html" class="nav-link">
712
- <i class="nav-icon bi bi-question-circle-fill"></i>
713
- <p>FAQ</p>
714
- </a>
715
- </li>
716
- <li class="nav-item">
717
- <a href="./docs/license.html" class="nav-link">
718
- <i class="nav-icon bi bi-patch-check-fill"></i>
719
- <p>License</p>
720
- </a>
721
- </li>
722
-
723
849
  <li class="nav-header">MULTI LEVEL EXAMPLE</li>
724
850
  <li class="nav-item">
725
851
  <a href="#" class="nav-link">
@@ -807,6 +933,17 @@
807
933
  </li>
808
934
  </ul>
809
935
  <!--end::Sidebar Menu-->
936
+
937
+ <!-- Docs CTA (bottom of sidebar) -->
938
+ <div class="p-3 mt-3 border-top border-secondary border-opacity-25">
939
+ <a
940
+ href="./docs/introduction.html"
941
+ class="btn btn-sm btn-outline-light w-100 d-flex align-items-center justify-content-center gap-2"
942
+ >
943
+ <i class="bi bi-book" aria-hidden="true"></i>
944
+ View documentation
945
+ </a>
946
+ </div>
810
947
  </nav>
811
948
  </div>
812
949
  <!--end::Sidebar Wrapper-->
@@ -1343,7 +1480,71 @@
1343
1480
  }
1344
1481
  });
1345
1482
  </script>
1346
- <!--end::OverlayScrollbars Configure-->
1483
+ <!--end::OverlayScrollbars Configure--><!--begin::Color Mode Toggle (#6010)-->
1484
+ <script>
1485
+ (() => {
1486
+ 'use strict';
1487
+
1488
+ const STORAGE_KEY = 'lte-theme';
1489
+
1490
+ const getStoredTheme = () => localStorage.getItem(STORAGE_KEY);
1491
+ const setStoredTheme = (theme) => localStorage.setItem(STORAGE_KEY, theme);
1492
+
1493
+ const prefersDark = () => globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
1494
+
1495
+ const getPreferredTheme = () => {
1496
+ const stored = getStoredTheme();
1497
+ if (stored) return stored;
1498
+ return prefersDark() ? 'dark' : 'light';
1499
+ };
1500
+
1501
+ const setTheme = (theme) => {
1502
+ const resolved = theme === 'auto' ? (prefersDark() ? 'dark' : 'light') : theme;
1503
+ document.documentElement.setAttribute('data-bs-theme', resolved);
1504
+ };
1505
+
1506
+ setTheme(getPreferredTheme());
1507
+
1508
+ const showActiveTheme = (theme) => {
1509
+ // Highlight the active dropdown option
1510
+ document.querySelectorAll('[data-bs-theme-value]').forEach((el) => {
1511
+ el.classList.remove('active');
1512
+ el.setAttribute('aria-pressed', 'false');
1513
+ const check = el.querySelector('.bi-check-lg');
1514
+ if (check) check.classList.add('d-none');
1515
+ });
1516
+ const active = document.querySelector(`[data-bs-theme-value="${theme}"]`);
1517
+ if (active) {
1518
+ active.classList.add('active');
1519
+ active.setAttribute('aria-pressed', 'true');
1520
+ const check = active.querySelector('.bi-check-lg');
1521
+ if (check) check.classList.remove('d-none');
1522
+ }
1523
+ // Sync the topbar trigger icon
1524
+ document.querySelectorAll('[data-lte-theme-icon]').forEach((icon) => {
1525
+ icon.classList.toggle('d-none', icon.dataset.lteThemeIcon !== theme);
1526
+ });
1527
+ };
1528
+
1529
+ globalThis.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
1530
+ const stored = getStoredTheme();
1531
+ if (!stored || stored === 'auto') setTheme(getPreferredTheme());
1532
+ });
1533
+
1534
+ document.addEventListener('DOMContentLoaded', () => {
1535
+ showActiveTheme(getPreferredTheme());
1536
+ document.querySelectorAll('[data-bs-theme-value]').forEach((toggle) => {
1537
+ toggle.addEventListener('click', () => {
1538
+ const theme = toggle.getAttribute('data-bs-theme-value');
1539
+ setStoredTheme(theme);
1540
+ setTheme(theme);
1541
+ showActiveTheme(theme);
1542
+ });
1543
+ });
1544
+ });
1545
+ })();
1546
+ </script>
1547
+ <!--end::Color Mode Toggle-->
1347
1548
 
1348
1549
  <!-- OPTIONAL SCRIPTS -->
1349
1550