admin-lte 4.0.0 → 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 (82) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +185 -111
  3. package/dist/UI/general.html +27 -3
  4. package/dist/UI/icons.html +27 -3
  5. package/dist/UI/timeline.html +27 -3
  6. package/dist/docs/browser-support.html +27 -3
  7. package/dist/docs/color-mode.html +27 -3
  8. package/dist/docs/components/main-header.html +27 -3
  9. package/dist/docs/components/main-sidebar.html +27 -3
  10. package/dist/docs/customization.html +27 -3
  11. package/dist/docs/deployment.html +27 -3
  12. package/dist/docs/faq.html +27 -3
  13. package/dist/docs/getting-started.html +27 -3
  14. package/dist/docs/how-to-contribute.html +27 -3
  15. package/dist/docs/integrations.html +27 -3
  16. package/dist/docs/introduction.html +27 -3
  17. package/dist/docs/javascript/accessibility.html +27 -3
  18. package/dist/docs/javascript/card-widget.html +27 -3
  19. package/dist/docs/javascript/direct-chat.html +27 -3
  20. package/dist/docs/javascript/fullscreen.html +27 -3
  21. package/dist/docs/javascript/layout.html +27 -3
  22. package/dist/docs/javascript/plugins-overview.html +27 -3
  23. package/dist/docs/javascript/pushmenu.html +27 -3
  24. package/dist/docs/javascript/treeview.html +27 -3
  25. package/dist/docs/layout-blueprint.html +27 -3
  26. package/dist/docs/layout.html +27 -3
  27. package/dist/docs/license.html +27 -3
  28. package/dist/docs/migration.html +27 -3
  29. package/dist/docs/recipes.html +27 -3
  30. package/dist/docs/rtl.html +27 -3
  31. package/dist/examples/lockscreen.html +26 -0
  32. package/dist/examples/login-v2.html +26 -0
  33. package/dist/examples/login.html +26 -0
  34. package/dist/examples/register-v2.html +26 -0
  35. package/dist/examples/register.html +26 -0
  36. package/dist/forms/elements.html +27 -3
  37. package/dist/forms/layout.html +27 -3
  38. package/dist/forms/validation.html +27 -3
  39. package/dist/forms/wizard.html +27 -3
  40. package/dist/generate/theme.html +26 -0
  41. package/dist/index.html +27 -3
  42. package/dist/index2.html +27 -3
  43. package/dist/index3.html +27 -3
  44. package/dist/js/adminlte.js +4 -1
  45. package/dist/js/adminlte.js.map +1 -1
  46. package/dist/js/adminlte.min.js +2 -2
  47. package/dist/js/adminlte.min.js.map +1 -1
  48. package/dist/layout/collapsed-sidebar-without-hover.html +27 -3
  49. package/dist/layout/collapsed-sidebar.html +27 -3
  50. package/dist/layout/fixed-complete.html +27 -3
  51. package/dist/layout/fixed-footer.html +27 -3
  52. package/dist/layout/fixed-header.html +27 -3
  53. package/dist/layout/fixed-sidebar.html +27 -3
  54. package/dist/layout/layout-custom-area.html +27 -3
  55. package/dist/layout/layout-rtl.html +27 -3
  56. package/dist/layout/logo-switch.html +26 -0
  57. package/dist/layout/sidebar-mini.html +27 -3
  58. package/dist/layout/unfixed-sidebar.html +27 -3
  59. package/dist/mailbox/compose.html +27 -3
  60. package/dist/mailbox/inbox.html +43 -11
  61. package/dist/mailbox/read.html +27 -3
  62. package/dist/pages/404.html +26 -0
  63. package/dist/pages/500.html +26 -0
  64. package/dist/pages/calendar.html +27 -3
  65. package/dist/pages/chat.html +27 -3
  66. package/dist/pages/faq.html +27 -3
  67. package/dist/pages/file-manager.html +27 -3
  68. package/dist/pages/invoice.html +27 -3
  69. package/dist/pages/kanban.html +27 -3
  70. package/dist/pages/maintenance.html +26 -0
  71. package/dist/pages/pricing.html +27 -3
  72. package/dist/pages/profile.html +27 -3
  73. package/dist/pages/projects.html +27 -3
  74. package/dist/pages/settings.html +27 -3
  75. package/dist/tables/data.html +27 -3
  76. package/dist/tables/simple.html +27 -3
  77. package/dist/widgets/cards.html +27 -3
  78. package/dist/widgets/info-box.html +27 -3
  79. package/dist/widgets/small-box.html +27 -3
  80. package/github-issue-response.md +40 -0
  81. package/package.json +14 -13
  82. package/src/ts/accessibility.ts +9 -1
@@ -5,6 +5,32 @@
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
6
  <title>AdminLTE 4 | Sidebar Mini</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" />
@@ -5,6 +5,32 @@
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
6
  <title>AdminLTE 4 | Sidebar Mini</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" />
@@ -369,13 +395,11 @@
369
395
  <!--end::Sidebar Brand-->
370
396
  <!--begin::Sidebar Wrapper-->
371
397
  <div class="sidebar-wrapper">
372
- <nav class="mt-2">
398
+ <nav class="mt-2" aria-label="Main navigation">
373
399
  <!--begin::Sidebar Menu-->
374
400
  <ul
375
401
  class="nav sidebar-menu flex-column"
376
402
  data-lte-toggle="treeview"
377
- role="navigation"
378
- aria-label="Main navigation"
379
403
  data-accordion="false"
380
404
  id="navigation"
381
405
  >
@@ -5,6 +5,32 @@
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
6
  <title>AdminLTE 4 | Unfixed Sidebar</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" />
@@ -369,13 +395,11 @@
369
395
  <!--end::Sidebar Brand-->
370
396
  <!--begin::Sidebar Wrapper-->
371
397
  <div class="sidebar-wrapper">
372
- <nav class="mt-2">
398
+ <nav class="mt-2" aria-label="Main navigation">
373
399
  <!--begin::Sidebar Menu-->
374
400
  <ul
375
401
  class="nav sidebar-menu flex-column"
376
402
  data-lte-toggle="treeview"
377
- role="navigation"
378
- aria-label="Main navigation"
379
403
  data-accordion="false"
380
404
  id="navigation"
381
405
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | Mailbox - Compose</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -365,13 +391,11 @@
365
391
  <!--end::Sidebar Brand-->
366
392
  <!--begin::Sidebar Wrapper-->
367
393
  <div class="sidebar-wrapper">
368
- <nav class="mt-2">
394
+ <nav class="mt-2" aria-label="Main navigation">
369
395
  <!--begin::Sidebar Menu-->
370
396
  <ul
371
397
  class="nav sidebar-menu flex-column"
372
398
  data-lte-toggle="treeview"
373
- role="navigation"
374
- aria-label="Main navigation"
375
399
  data-accordion="false"
376
400
  id="navigation"
377
401
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | Mailbox</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -365,13 +391,11 @@
365
391
  <!--end::Sidebar Brand-->
366
392
  <!--begin::Sidebar Wrapper-->
367
393
  <div class="sidebar-wrapper">
368
- <nav class="mt-2">
394
+ <nav class="mt-2" aria-label="Main navigation">
369
395
  <!--begin::Sidebar Menu-->
370
396
  <ul
371
397
  class="nav sidebar-menu flex-column"
372
398
  data-lte-toggle="treeview"
373
- role="navigation"
374
- aria-label="Main navigation"
375
399
  data-accordion="false"
376
400
  id="navigation"
377
401
  >
@@ -1092,11 +1116,12 @@
1092
1116
  <a
1093
1117
  href="../mailbox/read.html"
1094
1118
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1119
+ style="min-width: 0"
1095
1120
  >
1096
1121
  <span class="text-truncate" style="min-width: 9rem">
1097
1122
  Olivia Bennett
1098
1123
  </span>
1099
- <span class="flex-grow-1 text-truncate">
1124
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1100
1125
  <span class="badge text-bg-primary me-2"> &middot; </span>
1101
1126
  Re: design system v2.4 sign-off
1102
1127
  <span class="fw-normal text-secondary">
@@ -1129,9 +1154,10 @@
1129
1154
  <a
1130
1155
  href="../mailbox/read.html"
1131
1156
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1157
+ style="min-width: 0"
1132
1158
  >
1133
1159
  <span class="text-truncate" style="min-width: 9rem"> GitHub </span>
1134
- <span class="flex-grow-1 text-truncate">
1160
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1135
1161
  <span class="badge text-bg-secondary me-2"> &middot; </span>
1136
1162
  [fullcalendar/fullcalendar] PR #6912 merged
1137
1163
  <span class="fw-normal text-secondary">
@@ -1163,9 +1189,10 @@
1163
1189
  <a
1164
1190
  href="../mailbox/read.html"
1165
1191
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1192
+ style="min-width: 0"
1166
1193
  >
1167
1194
  <span class="text-truncate" style="min-width: 9rem"> Stripe </span>
1168
- <span class="flex-grow-1 text-truncate">
1195
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1169
1196
  <span class="badge text-bg-success me-2"> &middot; </span>
1170
1197
  Your May invoice is ready
1171
1198
  <span class="fw-normal text-secondary">
@@ -1195,9 +1222,10 @@
1195
1222
  <a
1196
1223
  href="../mailbox/read.html"
1197
1224
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1225
+ style="min-width: 0"
1198
1226
  >
1199
1227
  <span class="text-truncate" style="min-width: 9rem"> Marcus Reyes </span>
1200
- <span class="flex-grow-1 text-truncate">
1228
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1201
1229
  <span class="badge text-bg-info me-2"> &middot; </span>
1202
1230
  Lunch on Thursday?
1203
1231
  <span class="fw-normal text-secondary">
@@ -1227,9 +1255,10 @@
1227
1255
  <a
1228
1256
  href="../mailbox/read.html"
1229
1257
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1258
+ style="min-width: 0"
1230
1259
  >
1231
1260
  <span class="text-truncate" style="min-width: 9rem"> Linear </span>
1232
- <span class="flex-grow-1 text-truncate">
1261
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1233
1262
  <span class="badge text-bg-warning me-2"> &middot; </span>
1234
1263
  [ADM-441] Calendar drag-and-drop not working on Safari iOS
1235
1264
  <span class="fw-normal text-secondary">
@@ -1260,9 +1289,10 @@
1260
1289
  <a
1261
1290
  href="../mailbox/read.html"
1262
1291
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1292
+ style="min-width: 0"
1263
1293
  >
1264
1294
  <span class="text-truncate" style="min-width: 9rem"> Vercel </span>
1265
- <span class="flex-grow-1 text-truncate">
1295
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1266
1296
  <span class="badge text-bg-success me-2"> &middot; </span>
1267
1297
  Deployment succeeded — production
1268
1298
  <span class="fw-normal text-secondary">
@@ -1292,9 +1322,10 @@
1292
1322
  <a
1293
1323
  href="../mailbox/read.html"
1294
1324
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1325
+ style="min-width: 0"
1295
1326
  >
1296
1327
  <span class="text-truncate" style="min-width: 9rem"> Sara Khan </span>
1297
- <span class="flex-grow-1 text-truncate">
1328
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1298
1329
  <span class="badge text-bg-primary me-2"> &middot; </span>
1299
1330
  Customer interview notes — Acme Corp
1300
1331
  <span class="fw-normal text-secondary">
@@ -1325,9 +1356,10 @@
1325
1356
  <a
1326
1357
  href="../mailbox/read.html"
1327
1358
  class="flex-grow-1 d-flex flex-column flex-md-row gap-md-3 text-decoration-none text-body"
1359
+ style="min-width: 0"
1328
1360
  >
1329
1361
  <span class="text-truncate" style="min-width: 9rem"> AWS </span>
1330
- <span class="flex-grow-1 text-truncate">
1362
+ <span class="flex-grow-1 text-truncate" style="min-width: 0">
1331
1363
  <span class="badge text-bg-danger me-2"> &middot; </span>
1332
1364
  Your monthly bill summary
1333
1365
  <span class="fw-normal text-secondary">
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | Mailbox - Read</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -365,13 +391,11 @@
365
391
  <!--end::Sidebar Brand-->
366
392
  <!--begin::Sidebar Wrapper-->
367
393
  <div class="sidebar-wrapper">
368
- <nav class="mt-2">
394
+ <nav class="mt-2" aria-label="Main navigation">
369
395
  <!--begin::Sidebar Menu-->
370
396
  <ul
371
397
  class="nav sidebar-menu flex-column"
372
398
  data-lte-toggle="treeview"
373
- role="navigation"
374
- aria-label="Main navigation"
375
399
  data-accordion="false"
376
400
  id="navigation"
377
401
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | 404 Error Page</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | 500 Error Page</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | Calendar</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -374,13 +400,11 @@
374
400
  <!--end::Sidebar Brand-->
375
401
  <!--begin::Sidebar Wrapper-->
376
402
  <div class="sidebar-wrapper">
377
- <nav class="mt-2">
403
+ <nav class="mt-2" aria-label="Main navigation">
378
404
  <!--begin::Sidebar Menu-->
379
405
  <ul
380
406
  class="nav sidebar-menu flex-column"
381
407
  data-lte-toggle="treeview"
382
- role="navigation"
383
- aria-label="Main navigation"
384
408
  data-accordion="false"
385
409
  id="navigation"
386
410
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | Chat</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -485,13 +511,11 @@
485
511
  <!--end::Sidebar Brand-->
486
512
  <!--begin::Sidebar Wrapper-->
487
513
  <div class="sidebar-wrapper">
488
- <nav class="mt-2">
514
+ <nav class="mt-2" aria-label="Main navigation">
489
515
  <!--begin::Sidebar Menu-->
490
516
  <ul
491
517
  class="nav sidebar-menu flex-column"
492
518
  data-lte-toggle="treeview"
493
- role="navigation"
494
- aria-label="Main navigation"
495
519
  data-accordion="false"
496
520
  id="navigation"
497
521
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | FAQ</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -365,13 +391,11 @@
365
391
  <!--end::Sidebar Brand-->
366
392
  <!--begin::Sidebar Wrapper-->
367
393
  <div class="sidebar-wrapper">
368
- <nav class="mt-2">
394
+ <nav class="mt-2" aria-label="Main navigation">
369
395
  <!--begin::Sidebar Menu-->
370
396
  <ul
371
397
  class="nav sidebar-menu flex-column"
372
398
  data-lte-toggle="treeview"
373
- role="navigation"
374
- aria-label="Main navigation"
375
399
  data-accordion="false"
376
400
  id="navigation"
377
401
  >
@@ -4,6 +4,32 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>AdminLTE 4 | File Manager</title>
6
6
 
7
+ <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
+ <script>
9
+ (() => {
10
+ 'use strict';
11
+ const STORAGE_KEY = 'lte-theme';
12
+ let stored = null;
13
+ try {
14
+ stored = localStorage.getItem(STORAGE_KEY);
15
+ } catch {
16
+ // localStorage may be unavailable (private mode, sandboxed iframe).
17
+ }
18
+ const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
+ // otherwise ("auto" or unset) fall back to the OS preference.
21
+ let resolved = 'light';
22
+ if (stored === 'dark' || stored === 'light') {
23
+ resolved = stored;
24
+ } else if (prefersDark) {
25
+ resolved = 'dark';
26
+ }
27
+ document.documentElement.setAttribute('data-bs-theme', resolved);
28
+ document.documentElement.style.colorScheme = resolved;
29
+ })();
30
+ </script>
31
+ <!--end::Theme Init-->
32
+
7
33
  <!--begin::Accessibility Meta Tags-->
8
34
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
35
  <meta name="color-scheme" content="light dark" />
@@ -365,13 +391,11 @@
365
391
  <!--end::Sidebar Brand-->
366
392
  <!--begin::Sidebar Wrapper-->
367
393
  <div class="sidebar-wrapper">
368
- <nav class="mt-2">
394
+ <nav class="mt-2" aria-label="Main navigation">
369
395
  <!--begin::Sidebar Menu-->
370
396
  <ul
371
397
  class="nav sidebar-menu flex-column"
372
398
  data-lte-toggle="treeview"
373
- role="navigation"
374
- aria-label="Main navigation"
375
399
  data-accordion="false"
376
400
  id="navigation"
377
401
  >