admin-lte 4.0.0-beta3 → 4.0.0-rc3
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/.browserslistrc +9 -4
- package/ACCESSIBILITY-COMPLIANCE.md +369 -0
- package/CHANGELOG.md +460 -0
- package/README.md +50 -7
- package/dist/{pages/UI → UI}/general.html +79 -28
- package/dist/{pages/UI → UI}/icons.html +76 -25
- package/dist/{pages/UI → UI}/timeline.html +80 -29
- package/dist/css/adminlte.css +516 -332
- package/dist/css/adminlte.css.map +1 -1
- package/dist/css/adminlte.min.css +1 -1
- package/dist/css/adminlte.min.css.map +1 -1
- package/dist/css/adminlte.rtl.css +516 -332
- package/dist/css/adminlte.rtl.css.map +1 -1
- package/dist/css/adminlte.rtl.min.css +1 -1
- package/dist/css/adminlte.rtl.min.css.map +1 -1
- package/dist/{pages/docs → docs}/browser-support.html +77 -44
- package/dist/{pages/docs → docs}/color-mode.html +82 -50
- package/dist/{pages/docs → docs}/components/main-header.html +82 -49
- package/dist/{pages/docs → docs}/components/main-sidebar.html +78 -46
- package/dist/{pages/docs → docs}/faq.html +76 -42
- package/dist/{pages/docs → docs}/how-to-contribute.html +77 -44
- package/dist/{pages/docs → docs}/introduction.html +82 -54
- package/dist/{pages/docs → docs}/javascript/treeview.html +77 -44
- package/dist/{pages/docs → docs}/layout.html +76 -25
- package/dist/{pages/docs → docs}/license.html +76 -42
- package/dist/{pages/examples → examples}/lockscreen.html +49 -18
- package/dist/{pages/examples → examples}/login-v2.html +47 -16
- package/dist/{pages/examples → examples}/login.html +47 -16
- package/dist/{pages/examples → examples}/register-v2.html +47 -16
- package/dist/{pages/examples → examples}/register.html +47 -16
- package/dist/{pages/forms → forms}/general.html +76 -25
- package/dist/{pages/generate → generate}/theme.html +193 -24
- package/dist/{pages/index.html → index.html} +90 -57
- package/dist/{pages/index2.html → index2.html} +99 -48
- package/dist/{pages/index3.html → index3.html} +80 -29
- package/dist/js/adminlte.js +795 -345
- package/dist/js/adminlte.js.map +1 -1
- package/dist/js/adminlte.min.js +3 -3
- package/dist/js/adminlte.min.js.map +1 -1
- package/dist/{pages/layout → layout}/collapsed-sidebar.html +75 -24
- package/dist/layout/fixed-complete.html +883 -0
- package/dist/layout/fixed-footer.html +880 -0
- package/dist/layout/fixed-header.html +880 -0
- package/dist/{pages/layout → layout}/fixed-sidebar.html +76 -25
- package/dist/{pages/layout → layout}/layout-custom-area.html +76 -25
- package/dist/{pages/layout → layout}/layout-rtl.html +76 -25
- package/dist/{pages/layout → layout}/logo-switch.html +55 -24
- package/dist/{pages/layout → layout}/sidebar-mini.html +75 -24
- package/dist/{pages/layout → layout}/unfixed-sidebar.html +76 -25
- package/dist/{pages/tables → tables}/simple.html +76 -25
- package/dist/{pages/widgets → widgets}/cards.html +76 -25
- package/dist/{pages/widgets → widgets}/info-box.html +76 -25
- package/dist/{pages/widgets → widgets}/small-box.html +76 -25
- package/eslint.config.js +82 -0
- package/package.json +42 -37
- package/src/scss/_accessibility.scss +292 -0
- package/src/scss/_app-footer.scss +8 -0
- package/src/scss/_app-header.scss +8 -0
- package/src/scss/_app-sidebar.scss +12 -0
- package/src/scss/_table.scss +1 -9
- package/src/scss/_variables.scss +2 -1
- package/src/scss/adminlte.scss +3 -0
- package/src/ts/accessibility.ts +533 -0
- package/src/ts/adminlte.ts +48 -9
- package/src/ts/card-widget.ts +1 -2
- package/src/ts/push-menu.ts +1 -2
- package/src/ts/treeview.ts +13 -2
- package/src/ts/util/index.ts +39 -7
- package/.astro/content-assets.mjs +0 -1
- package/.astro/content-modules.mjs +0 -1
- package/.astro/content.d.ts +0 -166
- package/.astro/data-store.json +0 -1
- package/.astro/settings.json +0 -5
- package/.astro/types.d.ts +0 -2
- package/adminlte-v4.0.0-beta1-with-dist.zip +0 -0
- package/adminlte-v4.0.0-beta3.zip +0 -0
|
@@ -4,67 +4,60 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
6
|
<title>Browser Support | AdminLTE 4</title>
|
|
7
|
+
<!--begin::Accessibility Meta Tags-->
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
|
9
|
+
<meta name="color-scheme" content="light dark" />
|
|
10
|
+
<meta name="theme-color" content="#007bff" media="(prefers-color-scheme: light)" />
|
|
11
|
+
<meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)" />
|
|
12
|
+
<!--end::Accessibility Meta Tags-->
|
|
7
13
|
<!--begin::Primary Meta Tags-->
|
|
8
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
9
14
|
<meta name="title" content="Browser Support | AdminLTE 4" />
|
|
10
15
|
<meta name="author" content="ColorlibHQ" />
|
|
11
16
|
<meta
|
|
12
17
|
name="description"
|
|
13
|
-
content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS."
|
|
18
|
+
content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS. Fully accessible with WCAG 2.1 AA compliance."
|
|
14
19
|
/>
|
|
15
20
|
<meta
|
|
16
21
|
name="keywords"
|
|
17
|
-
content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard"
|
|
22
|
+
content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard, accessible admin panel, WCAG compliant"
|
|
18
23
|
/>
|
|
19
24
|
<!--end::Primary Meta Tags-->
|
|
25
|
+
<!--begin::Accessibility Features-->
|
|
26
|
+
<!-- Skip links will be dynamically added by accessibility.js -->
|
|
27
|
+
<meta name="supported-color-schemes" content="light dark" />
|
|
28
|
+
<link rel="preload" href="../css/adminlte.css" as="style" />
|
|
29
|
+
<!--end::Accessibility Features-->
|
|
20
30
|
<!--begin::Fonts-->
|
|
21
31
|
<link
|
|
22
32
|
rel="stylesheet"
|
|
23
33
|
href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
|
|
24
34
|
integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
|
|
25
35
|
crossorigin="anonymous"
|
|
36
|
+
media="print"
|
|
37
|
+
onload="this.media='all'"
|
|
26
38
|
/>
|
|
27
39
|
<!--end::Fonts-->
|
|
28
40
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
29
41
|
<link
|
|
30
42
|
rel="stylesheet"
|
|
31
|
-
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
32
|
-
integrity="sha256-tZHrRjVqNSRyWg2wbppGnT833E/Ys0DHWGwT04GiqQg="
|
|
43
|
+
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css"
|
|
33
44
|
crossorigin="anonymous"
|
|
34
45
|
/>
|
|
35
46
|
<!--end::Third Party Plugin(OverlayScrollbars)-->
|
|
36
47
|
<!--begin::Third Party Plugin(Bootstrap Icons)-->
|
|
37
48
|
<link
|
|
38
49
|
rel="stylesheet"
|
|
39
|
-
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.
|
|
40
|
-
integrity="sha256-9kPW/n5nn53j4WMRYAxe9c1rCY96Oogo/MKSVdKzPmI="
|
|
50
|
+
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css"
|
|
41
51
|
crossorigin="anonymous"
|
|
42
52
|
/>
|
|
43
53
|
<!--end::Third Party Plugin(Bootstrap Icons)-->
|
|
44
54
|
<!--begin::Required Plugin(AdminLTE)-->
|
|
45
|
-
<link rel="stylesheet" href="
|
|
55
|
+
<link rel="stylesheet" href="../css/adminlte.css" />
|
|
46
56
|
<!--end::Required Plugin(AdminLTE)-->
|
|
47
|
-
<style>
|
|
48
|
-
[data-astro-image] {
|
|
49
|
-
width: 100%;
|
|
50
|
-
height: auto;
|
|
51
|
-
object-fit: var(--fit);
|
|
52
|
-
object-position: var(--pos);
|
|
53
|
-
aspect-ratio: var(--w) / var(--h);
|
|
54
|
-
}
|
|
55
|
-
[data-astro-image='responsive'] {
|
|
56
|
-
max-width: calc(var(--w) * 1px);
|
|
57
|
-
max-height: calc(var(--h) * 1px);
|
|
58
|
-
}
|
|
59
|
-
[data-astro-image='fixed'] {
|
|
60
|
-
width: calc(var(--w) * 1px);
|
|
61
|
-
height: calc(var(--h) * 1px);
|
|
62
|
-
}
|
|
63
|
-
</style>
|
|
64
57
|
</head>
|
|
65
58
|
<!--end::Head-->
|
|
66
59
|
<!--begin::Body-->
|
|
67
|
-
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
|
|
60
|
+
<body class="layout-fixed sidebar-expand-lg sidebar-open bg-body-tertiary">
|
|
68
61
|
<!--begin::App Wrapper-->
|
|
69
62
|
<div class="app-wrapper">
|
|
70
63
|
<!--begin::Header-->
|
|
@@ -103,7 +96,7 @@
|
|
|
103
96
|
<div class="d-flex">
|
|
104
97
|
<div class="flex-shrink-0">
|
|
105
98
|
<img
|
|
106
|
-
src="
|
|
99
|
+
src="/assets/img/user1-128x128.jpg"
|
|
107
100
|
alt="User Avatar"
|
|
108
101
|
class="img-size-50 rounded-circle me-3"
|
|
109
102
|
/>
|
|
@@ -129,7 +122,7 @@
|
|
|
129
122
|
<div class="d-flex">
|
|
130
123
|
<div class="flex-shrink-0">
|
|
131
124
|
<img
|
|
132
|
-
src="
|
|
125
|
+
src="/assets/img/user8-128x128.jpg"
|
|
133
126
|
alt="User Avatar"
|
|
134
127
|
class="img-size-50 rounded-circle me-3"
|
|
135
128
|
/>
|
|
@@ -155,7 +148,7 @@
|
|
|
155
148
|
<div class="d-flex">
|
|
156
149
|
<div class="flex-shrink-0">
|
|
157
150
|
<img
|
|
158
|
-
src="
|
|
151
|
+
src="/assets/img/user3-128x128.jpg"
|
|
159
152
|
alt="User Avatar"
|
|
160
153
|
class="img-size-50 rounded-circle me-3"
|
|
161
154
|
/>
|
|
@@ -220,7 +213,7 @@
|
|
|
220
213
|
<li class="nav-item dropdown user-menu">
|
|
221
214
|
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
|
222
215
|
<img
|
|
223
|
-
src="
|
|
216
|
+
src="/assets/img/user2-160x160.jpg"
|
|
224
217
|
class="user-image rounded-circle shadow"
|
|
225
218
|
alt="User Image"
|
|
226
219
|
/>
|
|
@@ -230,7 +223,7 @@
|
|
|
230
223
|
<!--begin::User Image-->
|
|
231
224
|
<li class="user-header text-bg-primary">
|
|
232
225
|
<img
|
|
233
|
-
src="
|
|
226
|
+
src="/assets/img/user2-160x160.jpg"
|
|
234
227
|
class="rounded-circle shadow"
|
|
235
228
|
alt="User Image"
|
|
236
229
|
/>
|
|
@@ -274,7 +267,7 @@
|
|
|
274
267
|
<a href="../index.html" class="brand-link">
|
|
275
268
|
<!--begin::Brand Image-->
|
|
276
269
|
<img
|
|
277
|
-
src="
|
|
270
|
+
src="/assets/img/AdminLTELogo.png"
|
|
278
271
|
alt="AdminLTE Logo"
|
|
279
272
|
class="brand-image opacity-75 shadow"
|
|
280
273
|
/>
|
|
@@ -293,8 +286,10 @@
|
|
|
293
286
|
<ul
|
|
294
287
|
class="nav sidebar-menu flex-column"
|
|
295
288
|
data-lte-toggle="treeview"
|
|
296
|
-
role="
|
|
289
|
+
role="navigation"
|
|
290
|
+
aria-label="Main navigation"
|
|
297
291
|
data-accordion="false"
|
|
292
|
+
id="navigation"
|
|
298
293
|
>
|
|
299
294
|
<li class="nav-item">
|
|
300
295
|
<a href="#" class="nav-link">
|
|
@@ -382,6 +377,24 @@
|
|
|
382
377
|
<p>Fixed Sidebar</p>
|
|
383
378
|
</a>
|
|
384
379
|
</li>
|
|
380
|
+
<li class="nav-item">
|
|
381
|
+
<a href="../layout/fixed-header.html" class="nav-link">
|
|
382
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
383
|
+
<p>Fixed Header</p>
|
|
384
|
+
</a>
|
|
385
|
+
</li>
|
|
386
|
+
<li class="nav-item">
|
|
387
|
+
<a href="../layout/fixed-footer.html" class="nav-link">
|
|
388
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
389
|
+
<p>Fixed Footer</p>
|
|
390
|
+
</a>
|
|
391
|
+
</li>
|
|
392
|
+
<li class="nav-item">
|
|
393
|
+
<a href="../layout/fixed-complete.html" class="nav-link">
|
|
394
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
395
|
+
<p>Fixed Complete</p>
|
|
396
|
+
</a>
|
|
397
|
+
</li>
|
|
385
398
|
<li class="nav-item">
|
|
386
399
|
<a href="../layout/layout-custom-area.html" class="nav-link">
|
|
387
400
|
<i class="nav-icon bi bi-circle"></i>
|
|
@@ -778,8 +791,7 @@
|
|
|
778
791
|
<span class="line"><span>Firefox ESR</span></span>
|
|
779
792
|
<span class="line"><span>iOS >= 12</span></span>
|
|
780
793
|
<span class="line"><span>Safari >= 12</span></span>
|
|
781
|
-
<span class="line"><span>not Explorer <= 11</span></span>
|
|
782
|
-
<span class="line"><span></span></span></code></pre>
|
|
794
|
+
<span class="line"><span>not Explorer <= 11</span></span></code></pre>
|
|
783
795
|
</div>
|
|
784
796
|
<!--end::Container-->
|
|
785
797
|
</div>
|
|
@@ -793,7 +805,7 @@
|
|
|
793
805
|
<!--end::To the end-->
|
|
794
806
|
<!--begin::Copyright-->
|
|
795
807
|
<strong>
|
|
796
|
-
Copyright © 2014-
|
|
808
|
+
Copyright © 2014-2025
|
|
797
809
|
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
|
|
798
810
|
</strong>
|
|
799
811
|
All rights reserved.
|
|
@@ -805,24 +817,21 @@
|
|
|
805
817
|
<!--begin::Script-->
|
|
806
818
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
807
819
|
<script
|
|
808
|
-
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
809
|
-
integrity="sha256-dghWARbRe2eLlIJ56wNB+b760ywulqK3DzZYEpsg2fQ="
|
|
820
|
+
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
|
|
810
821
|
crossorigin="anonymous"
|
|
811
822
|
></script>
|
|
812
823
|
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
|
|
813
824
|
<script
|
|
814
825
|
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
|
815
|
-
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
|
816
826
|
crossorigin="anonymous"
|
|
817
827
|
></script>
|
|
818
828
|
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
|
|
819
829
|
<script
|
|
820
|
-
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.
|
|
821
|
-
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
|
830
|
+
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
|
|
822
831
|
crossorigin="anonymous"
|
|
823
832
|
></script>
|
|
824
833
|
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
|
|
825
|
-
<script src="
|
|
834
|
+
<script src="../js/adminlte.js"></script>
|
|
826
835
|
<!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
|
|
827
836
|
<script>
|
|
828
837
|
const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
|
|
@@ -833,7 +842,7 @@
|
|
|
833
842
|
};
|
|
834
843
|
document.addEventListener('DOMContentLoaded', function () {
|
|
835
844
|
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
|
|
836
|
-
if (sidebarWrapper &&
|
|
845
|
+
if (sidebarWrapper && OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined) {
|
|
837
846
|
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
|
|
838
847
|
scrollbars: {
|
|
839
848
|
theme: Default.scrollbarTheme,
|
|
@@ -844,7 +853,31 @@
|
|
|
844
853
|
}
|
|
845
854
|
});
|
|
846
855
|
</script>
|
|
847
|
-
<!--end::OverlayScrollbars Configure-->
|
|
856
|
+
<!--end::OverlayScrollbars Configure--><!-- Image path runtime fix -->
|
|
857
|
+
<script>
|
|
858
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
859
|
+
// Find the link tag for the main AdminLTE CSS file.
|
|
860
|
+
const cssLink = document.querySelector('link[href*="css/adminlte.css"]');
|
|
861
|
+
if (!cssLink) {
|
|
862
|
+
return; // Exit if the link isn't found
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
// Extract the base path from the CSS href.
|
|
866
|
+
// e.g., from "../css/adminlte.css", we get "../"
|
|
867
|
+
// e.g., from "./css/adminlte.css", we get "./"
|
|
868
|
+
const cssHref = cssLink.getAttribute('href');
|
|
869
|
+
const deploymentPath = cssHref.slice(0, cssHref.indexOf('css/adminlte.css'));
|
|
870
|
+
|
|
871
|
+
// Find all images with absolute paths and fix them.
|
|
872
|
+
document.querySelectorAll('img[src^="/assets/"]').forEach((img) => {
|
|
873
|
+
const originalSrc = img.getAttribute('src');
|
|
874
|
+
if (originalSrc) {
|
|
875
|
+
const relativeSrc = originalSrc.slice(1); // Remove leading '/'
|
|
876
|
+
img.src = deploymentPath + relativeSrc;
|
|
877
|
+
}
|
|
878
|
+
});
|
|
879
|
+
});
|
|
880
|
+
</script>
|
|
848
881
|
<!--end::Script-->
|
|
849
882
|
</body>
|
|
850
883
|
<!--end::Body-->
|
|
@@ -4,67 +4,60 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
6
|
<title>Color Mode | AdminLTE 4</title>
|
|
7
|
+
<!--begin::Accessibility Meta Tags-->
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
|
9
|
+
<meta name="color-scheme" content="light dark" />
|
|
10
|
+
<meta name="theme-color" content="#007bff" media="(prefers-color-scheme: light)" />
|
|
11
|
+
<meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)" />
|
|
12
|
+
<!--end::Accessibility Meta Tags-->
|
|
7
13
|
<!--begin::Primary Meta Tags-->
|
|
8
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
9
14
|
<meta name="title" content="Color Mode | AdminLTE 4" />
|
|
10
15
|
<meta name="author" content="ColorlibHQ" />
|
|
11
16
|
<meta
|
|
12
17
|
name="description"
|
|
13
|
-
content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS."
|
|
18
|
+
content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS. Fully accessible with WCAG 2.1 AA compliance."
|
|
14
19
|
/>
|
|
15
20
|
<meta
|
|
16
21
|
name="keywords"
|
|
17
|
-
content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard"
|
|
22
|
+
content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard, accessible admin panel, WCAG compliant"
|
|
18
23
|
/>
|
|
19
24
|
<!--end::Primary Meta Tags-->
|
|
25
|
+
<!--begin::Accessibility Features-->
|
|
26
|
+
<!-- Skip links will be dynamically added by accessibility.js -->
|
|
27
|
+
<meta name="supported-color-schemes" content="light dark" />
|
|
28
|
+
<link rel="preload" href="../css/adminlte.css" as="style" />
|
|
29
|
+
<!--end::Accessibility Features-->
|
|
20
30
|
<!--begin::Fonts-->
|
|
21
31
|
<link
|
|
22
32
|
rel="stylesheet"
|
|
23
33
|
href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
|
|
24
34
|
integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
|
|
25
35
|
crossorigin="anonymous"
|
|
36
|
+
media="print"
|
|
37
|
+
onload="this.media='all'"
|
|
26
38
|
/>
|
|
27
39
|
<!--end::Fonts-->
|
|
28
40
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
29
41
|
<link
|
|
30
42
|
rel="stylesheet"
|
|
31
|
-
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
32
|
-
integrity="sha256-tZHrRjVqNSRyWg2wbppGnT833E/Ys0DHWGwT04GiqQg="
|
|
43
|
+
href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css"
|
|
33
44
|
crossorigin="anonymous"
|
|
34
45
|
/>
|
|
35
46
|
<!--end::Third Party Plugin(OverlayScrollbars)-->
|
|
36
47
|
<!--begin::Third Party Plugin(Bootstrap Icons)-->
|
|
37
48
|
<link
|
|
38
49
|
rel="stylesheet"
|
|
39
|
-
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.
|
|
40
|
-
integrity="sha256-9kPW/n5nn53j4WMRYAxe9c1rCY96Oogo/MKSVdKzPmI="
|
|
50
|
+
href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css"
|
|
41
51
|
crossorigin="anonymous"
|
|
42
52
|
/>
|
|
43
53
|
<!--end::Third Party Plugin(Bootstrap Icons)-->
|
|
44
54
|
<!--begin::Required Plugin(AdminLTE)-->
|
|
45
|
-
<link rel="stylesheet" href="
|
|
55
|
+
<link rel="stylesheet" href="../css/adminlte.css" />
|
|
46
56
|
<!--end::Required Plugin(AdminLTE)-->
|
|
47
|
-
<style>
|
|
48
|
-
[data-astro-image] {
|
|
49
|
-
width: 100%;
|
|
50
|
-
height: auto;
|
|
51
|
-
object-fit: var(--fit);
|
|
52
|
-
object-position: var(--pos);
|
|
53
|
-
aspect-ratio: var(--w) / var(--h);
|
|
54
|
-
}
|
|
55
|
-
[data-astro-image='responsive'] {
|
|
56
|
-
max-width: calc(var(--w) * 1px);
|
|
57
|
-
max-height: calc(var(--h) * 1px);
|
|
58
|
-
}
|
|
59
|
-
[data-astro-image='fixed'] {
|
|
60
|
-
width: calc(var(--w) * 1px);
|
|
61
|
-
height: calc(var(--h) * 1px);
|
|
62
|
-
}
|
|
63
|
-
</style>
|
|
64
57
|
</head>
|
|
65
58
|
<!--end::Head-->
|
|
66
59
|
<!--begin::Body-->
|
|
67
|
-
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
|
|
60
|
+
<body class="layout-fixed sidebar-expand-lg sidebar-open bg-body-tertiary">
|
|
68
61
|
<!--begin::App Wrapper-->
|
|
69
62
|
<div class="app-wrapper">
|
|
70
63
|
<!--begin::Header-->
|
|
@@ -103,7 +96,7 @@
|
|
|
103
96
|
<div class="d-flex">
|
|
104
97
|
<div class="flex-shrink-0">
|
|
105
98
|
<img
|
|
106
|
-
src="
|
|
99
|
+
src="/assets/img/user1-128x128.jpg"
|
|
107
100
|
alt="User Avatar"
|
|
108
101
|
class="img-size-50 rounded-circle me-3"
|
|
109
102
|
/>
|
|
@@ -129,7 +122,7 @@
|
|
|
129
122
|
<div class="d-flex">
|
|
130
123
|
<div class="flex-shrink-0">
|
|
131
124
|
<img
|
|
132
|
-
src="
|
|
125
|
+
src="/assets/img/user8-128x128.jpg"
|
|
133
126
|
alt="User Avatar"
|
|
134
127
|
class="img-size-50 rounded-circle me-3"
|
|
135
128
|
/>
|
|
@@ -155,7 +148,7 @@
|
|
|
155
148
|
<div class="d-flex">
|
|
156
149
|
<div class="flex-shrink-0">
|
|
157
150
|
<img
|
|
158
|
-
src="
|
|
151
|
+
src="/assets/img/user3-128x128.jpg"
|
|
159
152
|
alt="User Avatar"
|
|
160
153
|
class="img-size-50 rounded-circle me-3"
|
|
161
154
|
/>
|
|
@@ -220,7 +213,7 @@
|
|
|
220
213
|
<li class="nav-item dropdown user-menu">
|
|
221
214
|
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
|
222
215
|
<img
|
|
223
|
-
src="
|
|
216
|
+
src="/assets/img/user2-160x160.jpg"
|
|
224
217
|
class="user-image rounded-circle shadow"
|
|
225
218
|
alt="User Image"
|
|
226
219
|
/>
|
|
@@ -230,7 +223,7 @@
|
|
|
230
223
|
<!--begin::User Image-->
|
|
231
224
|
<li class="user-header text-bg-primary">
|
|
232
225
|
<img
|
|
233
|
-
src="
|
|
226
|
+
src="/assets/img/user2-160x160.jpg"
|
|
234
227
|
class="rounded-circle shadow"
|
|
235
228
|
alt="User Image"
|
|
236
229
|
/>
|
|
@@ -274,7 +267,7 @@
|
|
|
274
267
|
<a href="../index.html" class="brand-link">
|
|
275
268
|
<!--begin::Brand Image-->
|
|
276
269
|
<img
|
|
277
|
-
src="
|
|
270
|
+
src="/assets/img/AdminLTELogo.png"
|
|
278
271
|
alt="AdminLTE Logo"
|
|
279
272
|
class="brand-image opacity-75 shadow"
|
|
280
273
|
/>
|
|
@@ -293,8 +286,10 @@
|
|
|
293
286
|
<ul
|
|
294
287
|
class="nav sidebar-menu flex-column"
|
|
295
288
|
data-lte-toggle="treeview"
|
|
296
|
-
role="
|
|
289
|
+
role="navigation"
|
|
290
|
+
aria-label="Main navigation"
|
|
297
291
|
data-accordion="false"
|
|
292
|
+
id="navigation"
|
|
298
293
|
>
|
|
299
294
|
<li class="nav-item">
|
|
300
295
|
<a href="#" class="nav-link">
|
|
@@ -382,6 +377,24 @@
|
|
|
382
377
|
<p>Fixed Sidebar</p>
|
|
383
378
|
</a>
|
|
384
379
|
</li>
|
|
380
|
+
<li class="nav-item">
|
|
381
|
+
<a href="../layout/fixed-header.html" class="nav-link">
|
|
382
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
383
|
+
<p>Fixed Header</p>
|
|
384
|
+
</a>
|
|
385
|
+
</li>
|
|
386
|
+
<li class="nav-item">
|
|
387
|
+
<a href="../layout/fixed-footer.html" class="nav-link">
|
|
388
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
389
|
+
<p>Fixed Footer</p>
|
|
390
|
+
</a>
|
|
391
|
+
</li>
|
|
392
|
+
<li class="nav-item">
|
|
393
|
+
<a href="../layout/fixed-complete.html" class="nav-link">
|
|
394
|
+
<i class="nav-icon bi bi-circle"></i>
|
|
395
|
+
<p>Fixed Complete</p>
|
|
396
|
+
</a>
|
|
397
|
+
</li>
|
|
385
398
|
<li class="nav-item">
|
|
386
399
|
<a href="../layout/layout-custom-area.html" class="nav-link">
|
|
387
400
|
<i class="nav-icon bi bi-circle"></i>
|
|
@@ -934,8 +947,7 @@
|
|
|
934
947
|
<span class="line"><span style="color:#808080"> </</span><span style="color:#569CD6">div</span><span style="color:#808080">></span></span>
|
|
935
948
|
<span class="line"><span style="color:#6A9955"> <!--end::Container--></span></span>
|
|
936
949
|
<span class="line"><span style="color:#808080"></</span><span style="color:#569CD6">nav</span><span style="color:#808080">></span></span>
|
|
937
|
-
<span class="line"><span style="color:#6A9955"><!--end::Header--></span></span>
|
|
938
|
-
<span class="line"></span></code></pre>
|
|
950
|
+
<span class="line"><span style="color:#6A9955"><!--end::Header--></span></span></code></pre>
|
|
939
951
|
<pre
|
|
940
952
|
class="astro-code dark-plus"
|
|
941
953
|
style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
|
|
@@ -1020,8 +1032,7 @@
|
|
|
1020
1032
|
<span class="line"><span style="color:#D4D4D4"> });</span></span>
|
|
1021
1033
|
<span class="line"><span style="color:#D4D4D4"> }</span></span>
|
|
1022
1034
|
<span class="line"><span style="color:#D4D4D4"> });</span></span>
|
|
1023
|
-
<span class="line"><span style="color:#D4D4D4">})();</span></span>
|
|
1024
|
-
<span class="line"></span></code></pre>
|
|
1035
|
+
<span class="line"><span style="color:#D4D4D4">})();</span></span></code></pre>
|
|
1025
1036
|
</div>
|
|
1026
1037
|
</div>
|
|
1027
1038
|
<!--end::Row-->
|
|
@@ -1038,7 +1049,7 @@
|
|
|
1038
1049
|
<!--end::To the end-->
|
|
1039
1050
|
<!--begin::Copyright-->
|
|
1040
1051
|
<strong>
|
|
1041
|
-
Copyright © 2014-
|
|
1052
|
+
Copyright © 2014-2025
|
|
1042
1053
|
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
|
|
1043
1054
|
</strong>
|
|
1044
1055
|
All rights reserved.
|
|
@@ -1049,24 +1060,21 @@
|
|
|
1049
1060
|
<!--end::App Wrapper-->
|
|
1050
1061
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
1051
1062
|
<script
|
|
1052
|
-
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
1053
|
-
integrity="sha256-dghWARbRe2eLlIJ56wNB+b760ywulqK3DzZYEpsg2fQ="
|
|
1063
|
+
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
|
|
1054
1064
|
crossorigin="anonymous"
|
|
1055
1065
|
></script>
|
|
1056
1066
|
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
|
|
1057
1067
|
<script
|
|
1058
1068
|
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
|
1059
|
-
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
|
1060
1069
|
crossorigin="anonymous"
|
|
1061
1070
|
></script>
|
|
1062
1071
|
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
|
|
1063
1072
|
<script
|
|
1064
|
-
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.
|
|
1065
|
-
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
|
1073
|
+
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
|
|
1066
1074
|
crossorigin="anonymous"
|
|
1067
1075
|
></script>
|
|
1068
1076
|
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
|
|
1069
|
-
<script src="
|
|
1077
|
+
<script src="../js/adminlte.js"></script>
|
|
1070
1078
|
<!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
|
|
1071
1079
|
<script>
|
|
1072
1080
|
const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
|
|
@@ -1077,7 +1085,7 @@
|
|
|
1077
1085
|
};
|
|
1078
1086
|
document.addEventListener('DOMContentLoaded', function () {
|
|
1079
1087
|
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
|
|
1080
|
-
if (sidebarWrapper &&
|
|
1088
|
+
if (sidebarWrapper && OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined) {
|
|
1081
1089
|
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
|
|
1082
1090
|
scrollbars: {
|
|
1083
1091
|
theme: Default.scrollbarTheme,
|
|
@@ -1088,7 +1096,31 @@
|
|
|
1088
1096
|
}
|
|
1089
1097
|
});
|
|
1090
1098
|
</script>
|
|
1091
|
-
<!--end::OverlayScrollbars Configure-->
|
|
1099
|
+
<!--end::OverlayScrollbars Configure--><!-- Image path runtime fix -->
|
|
1100
|
+
<script>
|
|
1101
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
1102
|
+
// Find the link tag for the main AdminLTE CSS file.
|
|
1103
|
+
const cssLink = document.querySelector('link[href*="css/adminlte.css"]');
|
|
1104
|
+
if (!cssLink) {
|
|
1105
|
+
return; // Exit if the link isn't found
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
// Extract the base path from the CSS href.
|
|
1109
|
+
// e.g., from "../css/adminlte.css", we get "../"
|
|
1110
|
+
// e.g., from "./css/adminlte.css", we get "./"
|
|
1111
|
+
const cssHref = cssLink.getAttribute('href');
|
|
1112
|
+
const deploymentPath = cssHref.slice(0, cssHref.indexOf('css/adminlte.css'));
|
|
1113
|
+
|
|
1114
|
+
// Find all images with absolute paths and fix them.
|
|
1115
|
+
document.querySelectorAll('img[src^="/assets/"]').forEach((img) => {
|
|
1116
|
+
const originalSrc = img.getAttribute('src');
|
|
1117
|
+
if (originalSrc) {
|
|
1118
|
+
const relativeSrc = originalSrc.slice(1); // Remove leading '/'
|
|
1119
|
+
img.src = deploymentPath + relativeSrc;
|
|
1120
|
+
}
|
|
1121
|
+
});
|
|
1122
|
+
});
|
|
1123
|
+
</script>
|
|
1092
1124
|
<script>
|
|
1093
1125
|
// Color Mode Toggler
|
|
1094
1126
|
(() => {
|
|
@@ -1101,11 +1133,11 @@
|
|
|
1101
1133
|
return storedTheme;
|
|
1102
1134
|
}
|
|
1103
1135
|
|
|
1104
|
-
return
|
|
1136
|
+
return globalThis.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
1105
1137
|
};
|
|
1106
1138
|
|
|
1107
1139
|
const setTheme = function (theme) {
|
|
1108
|
-
if (theme === 'auto' &&
|
|
1140
|
+
if (theme === 'auto' && globalThis.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
1109
1141
|
document.documentElement.setAttribute('data-bs-theme', 'dark');
|
|
1110
1142
|
} else {
|
|
1111
1143
|
document.documentElement.setAttribute('data-bs-theme', theme);
|
|
@@ -1142,13 +1174,13 @@
|
|
|
1142
1174
|
}
|
|
1143
1175
|
};
|
|
1144
1176
|
|
|
1145
|
-
|
|
1177
|
+
globalThis.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
|
1146
1178
|
if (storedTheme !== 'light' || storedTheme !== 'dark') {
|
|
1147
1179
|
setTheme(getPreferredTheme());
|
|
1148
1180
|
}
|
|
1149
1181
|
});
|
|
1150
1182
|
|
|
1151
|
-
|
|
1183
|
+
globalThis.addEventListener('DOMContentLoaded', () => {
|
|
1152
1184
|
showActiveTheme(getPreferredTheme());
|
|
1153
1185
|
|
|
1154
1186
|
for (const toggle of document.querySelectorAll('[data-bs-theme-value]')) {
|