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,50 +4,60 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
6
|
<title>AdminLTE 4 | Widgets - Info Box</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="AdminLTE 4 | Widgets - Info Box" />
|
|
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
57
|
</head>
|
|
48
58
|
<!--end::Head-->
|
|
49
59
|
<!--begin::Body-->
|
|
50
|
-
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
|
|
60
|
+
<body class="layout-fixed sidebar-expand-lg sidebar-open bg-body-tertiary">
|
|
51
61
|
<!--begin::App Wrapper-->
|
|
52
62
|
<div class="app-wrapper">
|
|
53
63
|
<!--begin::Header-->
|
|
@@ -86,7 +96,7 @@
|
|
|
86
96
|
<div class="d-flex">
|
|
87
97
|
<div class="flex-shrink-0">
|
|
88
98
|
<img
|
|
89
|
-
src="
|
|
99
|
+
src="/assets/img/user1-128x128.jpg"
|
|
90
100
|
alt="User Avatar"
|
|
91
101
|
class="img-size-50 rounded-circle me-3"
|
|
92
102
|
/>
|
|
@@ -112,7 +122,7 @@
|
|
|
112
122
|
<div class="d-flex">
|
|
113
123
|
<div class="flex-shrink-0">
|
|
114
124
|
<img
|
|
115
|
-
src="
|
|
125
|
+
src="/assets/img/user8-128x128.jpg"
|
|
116
126
|
alt="User Avatar"
|
|
117
127
|
class="img-size-50 rounded-circle me-3"
|
|
118
128
|
/>
|
|
@@ -138,7 +148,7 @@
|
|
|
138
148
|
<div class="d-flex">
|
|
139
149
|
<div class="flex-shrink-0">
|
|
140
150
|
<img
|
|
141
|
-
src="
|
|
151
|
+
src="/assets/img/user3-128x128.jpg"
|
|
142
152
|
alt="User Avatar"
|
|
143
153
|
class="img-size-50 rounded-circle me-3"
|
|
144
154
|
/>
|
|
@@ -203,7 +213,7 @@
|
|
|
203
213
|
<li class="nav-item dropdown user-menu">
|
|
204
214
|
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
|
205
215
|
<img
|
|
206
|
-
src="
|
|
216
|
+
src="/assets/img/user2-160x160.jpg"
|
|
207
217
|
class="user-image rounded-circle shadow"
|
|
208
218
|
alt="User Image"
|
|
209
219
|
/>
|
|
@@ -213,7 +223,7 @@
|
|
|
213
223
|
<!--begin::User Image-->
|
|
214
224
|
<li class="user-header text-bg-primary">
|
|
215
225
|
<img
|
|
216
|
-
src="
|
|
226
|
+
src="/assets/img/user2-160x160.jpg"
|
|
217
227
|
class="rounded-circle shadow"
|
|
218
228
|
alt="User Image"
|
|
219
229
|
/>
|
|
@@ -257,7 +267,7 @@
|
|
|
257
267
|
<a href="../index.html" class="brand-link">
|
|
258
268
|
<!--begin::Brand Image-->
|
|
259
269
|
<img
|
|
260
|
-
src="
|
|
270
|
+
src="/assets/img/AdminLTELogo.png"
|
|
261
271
|
alt="AdminLTE Logo"
|
|
262
272
|
class="brand-image opacity-75 shadow"
|
|
263
273
|
/>
|
|
@@ -276,8 +286,10 @@
|
|
|
276
286
|
<ul
|
|
277
287
|
class="nav sidebar-menu flex-column"
|
|
278
288
|
data-lte-toggle="treeview"
|
|
279
|
-
role="
|
|
289
|
+
role="navigation"
|
|
290
|
+
aria-label="Main navigation"
|
|
280
291
|
data-accordion="false"
|
|
292
|
+
id="navigation"
|
|
281
293
|
>
|
|
282
294
|
<li class="nav-item">
|
|
283
295
|
<a href="#" class="nav-link">
|
|
@@ -365,6 +377,24 @@
|
|
|
365
377
|
<p>Fixed Sidebar</p>
|
|
366
378
|
</a>
|
|
367
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>
|
|
368
398
|
<li class="nav-item">
|
|
369
399
|
<a href="../layout/layout-custom-area.html" class="nav-link">
|
|
370
400
|
<i class="nav-icon bi bi-circle"></i>
|
|
@@ -995,7 +1025,7 @@
|
|
|
995
1025
|
<!--end::To the end-->
|
|
996
1026
|
<!--begin::Copyright-->
|
|
997
1027
|
<strong>
|
|
998
|
-
Copyright © 2014-
|
|
1028
|
+
Copyright © 2014-2025
|
|
999
1029
|
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
|
|
1000
1030
|
</strong>
|
|
1001
1031
|
All rights reserved.
|
|
@@ -1007,24 +1037,21 @@
|
|
|
1007
1037
|
<!--begin::Script-->
|
|
1008
1038
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
1009
1039
|
<script
|
|
1010
|
-
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
1011
|
-
integrity="sha256-dghWARbRe2eLlIJ56wNB+b760ywulqK3DzZYEpsg2fQ="
|
|
1040
|
+
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
|
|
1012
1041
|
crossorigin="anonymous"
|
|
1013
1042
|
></script>
|
|
1014
1043
|
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
|
|
1015
1044
|
<script
|
|
1016
1045
|
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
|
1017
|
-
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
|
1018
1046
|
crossorigin="anonymous"
|
|
1019
1047
|
></script>
|
|
1020
1048
|
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
|
|
1021
1049
|
<script
|
|
1022
|
-
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.
|
|
1023
|
-
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
|
1050
|
+
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
|
|
1024
1051
|
crossorigin="anonymous"
|
|
1025
1052
|
></script>
|
|
1026
1053
|
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
|
|
1027
|
-
<script src="
|
|
1054
|
+
<script src="../js/adminlte.js"></script>
|
|
1028
1055
|
<!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
|
|
1029
1056
|
<script>
|
|
1030
1057
|
const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
|
|
@@ -1035,7 +1062,7 @@
|
|
|
1035
1062
|
};
|
|
1036
1063
|
document.addEventListener('DOMContentLoaded', function () {
|
|
1037
1064
|
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
|
|
1038
|
-
if (sidebarWrapper &&
|
|
1065
|
+
if (sidebarWrapper && OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined) {
|
|
1039
1066
|
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
|
|
1040
1067
|
scrollbars: {
|
|
1041
1068
|
theme: Default.scrollbarTheme,
|
|
@@ -1046,7 +1073,31 @@
|
|
|
1046
1073
|
}
|
|
1047
1074
|
});
|
|
1048
1075
|
</script>
|
|
1049
|
-
<!--end::OverlayScrollbars Configure-->
|
|
1076
|
+
<!--end::OverlayScrollbars Configure--><!-- Image path runtime fix -->
|
|
1077
|
+
<script>
|
|
1078
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
1079
|
+
// Find the link tag for the main AdminLTE CSS file.
|
|
1080
|
+
const cssLink = document.querySelector('link[href*="css/adminlte.css"]');
|
|
1081
|
+
if (!cssLink) {
|
|
1082
|
+
return; // Exit if the link isn't found
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
// Extract the base path from the CSS href.
|
|
1086
|
+
// e.g., from "../css/adminlte.css", we get "../"
|
|
1087
|
+
// e.g., from "./css/adminlte.css", we get "./"
|
|
1088
|
+
const cssHref = cssLink.getAttribute('href');
|
|
1089
|
+
const deploymentPath = cssHref.slice(0, cssHref.indexOf('css/adminlte.css'));
|
|
1090
|
+
|
|
1091
|
+
// Find all images with absolute paths and fix them.
|
|
1092
|
+
document.querySelectorAll('img[src^="/assets/"]').forEach((img) => {
|
|
1093
|
+
const originalSrc = img.getAttribute('src');
|
|
1094
|
+
if (originalSrc) {
|
|
1095
|
+
const relativeSrc = originalSrc.slice(1); // Remove leading '/'
|
|
1096
|
+
img.src = deploymentPath + relativeSrc;
|
|
1097
|
+
}
|
|
1098
|
+
});
|
|
1099
|
+
});
|
|
1100
|
+
</script>
|
|
1050
1101
|
<!--end::Script-->
|
|
1051
1102
|
</body>
|
|
1052
1103
|
<!--end::Body-->
|
|
@@ -4,50 +4,60 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
6
6
|
<title>AdminLTE 4 | Widgets - Small Box</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="AdminLTE 4 | Widgets - Small Box" />
|
|
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
57
|
</head>
|
|
48
58
|
<!--end::Head-->
|
|
49
59
|
<!--begin::Body-->
|
|
50
|
-
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
|
|
60
|
+
<body class="layout-fixed sidebar-expand-lg sidebar-open bg-body-tertiary">
|
|
51
61
|
<!--begin::App Wrapper-->
|
|
52
62
|
<div class="app-wrapper">
|
|
53
63
|
<!--begin::Header-->
|
|
@@ -86,7 +96,7 @@
|
|
|
86
96
|
<div class="d-flex">
|
|
87
97
|
<div class="flex-shrink-0">
|
|
88
98
|
<img
|
|
89
|
-
src="
|
|
99
|
+
src="/assets/img/user1-128x128.jpg"
|
|
90
100
|
alt="User Avatar"
|
|
91
101
|
class="img-size-50 rounded-circle me-3"
|
|
92
102
|
/>
|
|
@@ -112,7 +122,7 @@
|
|
|
112
122
|
<div class="d-flex">
|
|
113
123
|
<div class="flex-shrink-0">
|
|
114
124
|
<img
|
|
115
|
-
src="
|
|
125
|
+
src="/assets/img/user8-128x128.jpg"
|
|
116
126
|
alt="User Avatar"
|
|
117
127
|
class="img-size-50 rounded-circle me-3"
|
|
118
128
|
/>
|
|
@@ -138,7 +148,7 @@
|
|
|
138
148
|
<div class="d-flex">
|
|
139
149
|
<div class="flex-shrink-0">
|
|
140
150
|
<img
|
|
141
|
-
src="
|
|
151
|
+
src="/assets/img/user3-128x128.jpg"
|
|
142
152
|
alt="User Avatar"
|
|
143
153
|
class="img-size-50 rounded-circle me-3"
|
|
144
154
|
/>
|
|
@@ -203,7 +213,7 @@
|
|
|
203
213
|
<li class="nav-item dropdown user-menu">
|
|
204
214
|
<a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
|
|
205
215
|
<img
|
|
206
|
-
src="
|
|
216
|
+
src="/assets/img/user2-160x160.jpg"
|
|
207
217
|
class="user-image rounded-circle shadow"
|
|
208
218
|
alt="User Image"
|
|
209
219
|
/>
|
|
@@ -213,7 +223,7 @@
|
|
|
213
223
|
<!--begin::User Image-->
|
|
214
224
|
<li class="user-header text-bg-primary">
|
|
215
225
|
<img
|
|
216
|
-
src="
|
|
226
|
+
src="/assets/img/user2-160x160.jpg"
|
|
217
227
|
class="rounded-circle shadow"
|
|
218
228
|
alt="User Image"
|
|
219
229
|
/>
|
|
@@ -257,7 +267,7 @@
|
|
|
257
267
|
<a href="../index.html" class="brand-link">
|
|
258
268
|
<!--begin::Brand Image-->
|
|
259
269
|
<img
|
|
260
|
-
src="
|
|
270
|
+
src="/assets/img/AdminLTELogo.png"
|
|
261
271
|
alt="AdminLTE Logo"
|
|
262
272
|
class="brand-image opacity-75 shadow"
|
|
263
273
|
/>
|
|
@@ -276,8 +286,10 @@
|
|
|
276
286
|
<ul
|
|
277
287
|
class="nav sidebar-menu flex-column"
|
|
278
288
|
data-lte-toggle="treeview"
|
|
279
|
-
role="
|
|
289
|
+
role="navigation"
|
|
290
|
+
aria-label="Main navigation"
|
|
280
291
|
data-accordion="false"
|
|
292
|
+
id="navigation"
|
|
281
293
|
>
|
|
282
294
|
<li class="nav-item">
|
|
283
295
|
<a href="#" class="nav-link">
|
|
@@ -365,6 +377,24 @@
|
|
|
365
377
|
<p>Fixed Sidebar</p>
|
|
366
378
|
</a>
|
|
367
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>
|
|
368
398
|
<li class="nav-item">
|
|
369
399
|
<a href="../layout/layout-custom-area.html" class="nav-link">
|
|
370
400
|
<i class="nav-icon bi bi-circle"></i>
|
|
@@ -857,7 +887,7 @@
|
|
|
857
887
|
<!--end::To the end-->
|
|
858
888
|
<!--begin::Copyright-->
|
|
859
889
|
<strong>
|
|
860
|
-
Copyright © 2014-
|
|
890
|
+
Copyright © 2014-2025
|
|
861
891
|
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
|
|
862
892
|
</strong>
|
|
863
893
|
All rights reserved.
|
|
@@ -869,24 +899,21 @@
|
|
|
869
899
|
<!--begin::Script-->
|
|
870
900
|
<!--begin::Third Party Plugin(OverlayScrollbars)-->
|
|
871
901
|
<script
|
|
872
|
-
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.
|
|
873
|
-
integrity="sha256-dghWARbRe2eLlIJ56wNB+b760ywulqK3DzZYEpsg2fQ="
|
|
902
|
+
src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
|
|
874
903
|
crossorigin="anonymous"
|
|
875
904
|
></script>
|
|
876
905
|
<!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
|
|
877
906
|
<script
|
|
878
907
|
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
|
|
879
|
-
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
|
|
880
908
|
crossorigin="anonymous"
|
|
881
909
|
></script>
|
|
882
910
|
<!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
|
|
883
911
|
<script
|
|
884
|
-
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.
|
|
885
|
-
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
|
|
912
|
+
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
|
|
886
913
|
crossorigin="anonymous"
|
|
887
914
|
></script>
|
|
888
915
|
<!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
|
|
889
|
-
<script src="
|
|
916
|
+
<script src="../js/adminlte.js"></script>
|
|
890
917
|
<!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
|
|
891
918
|
<script>
|
|
892
919
|
const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
|
|
@@ -897,7 +924,7 @@
|
|
|
897
924
|
};
|
|
898
925
|
document.addEventListener('DOMContentLoaded', function () {
|
|
899
926
|
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
|
|
900
|
-
if (sidebarWrapper &&
|
|
927
|
+
if (sidebarWrapper && OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined) {
|
|
901
928
|
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
|
|
902
929
|
scrollbars: {
|
|
903
930
|
theme: Default.scrollbarTheme,
|
|
@@ -908,7 +935,31 @@
|
|
|
908
935
|
}
|
|
909
936
|
});
|
|
910
937
|
</script>
|
|
911
|
-
<!--end::OverlayScrollbars Configure-->
|
|
938
|
+
<!--end::OverlayScrollbars Configure--><!-- Image path runtime fix -->
|
|
939
|
+
<script>
|
|
940
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
941
|
+
// Find the link tag for the main AdminLTE CSS file.
|
|
942
|
+
const cssLink = document.querySelector('link[href*="css/adminlte.css"]');
|
|
943
|
+
if (!cssLink) {
|
|
944
|
+
return; // Exit if the link isn't found
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
// Extract the base path from the CSS href.
|
|
948
|
+
// e.g., from "../css/adminlte.css", we get "../"
|
|
949
|
+
// e.g., from "./css/adminlte.css", we get "./"
|
|
950
|
+
const cssHref = cssLink.getAttribute('href');
|
|
951
|
+
const deploymentPath = cssHref.slice(0, cssHref.indexOf('css/adminlte.css'));
|
|
952
|
+
|
|
953
|
+
// Find all images with absolute paths and fix them.
|
|
954
|
+
document.querySelectorAll('img[src^="/assets/"]').forEach((img) => {
|
|
955
|
+
const originalSrc = img.getAttribute('src');
|
|
956
|
+
if (originalSrc) {
|
|
957
|
+
const relativeSrc = originalSrc.slice(1); // Remove leading '/'
|
|
958
|
+
img.src = deploymentPath + relativeSrc;
|
|
959
|
+
}
|
|
960
|
+
});
|
|
961
|
+
});
|
|
962
|
+
</script>
|
|
912
963
|
<!--end::Script-->
|
|
913
964
|
</body>
|
|
914
965
|
<!--end::Body-->
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import globals from 'globals'
|
|
2
|
+
import pluginJs from '@eslint/js'
|
|
3
|
+
import tseslint from 'typescript-eslint'
|
|
4
|
+
import pluginUnicorn from 'eslint-plugin-unicorn'
|
|
5
|
+
import astroPlugin from 'eslint-plugin-astro'
|
|
6
|
+
|
|
7
|
+
export default [
|
|
8
|
+
{
|
|
9
|
+
ignores: [
|
|
10
|
+
"dist/",
|
|
11
|
+
"node_modules/",
|
|
12
|
+
".cache/",
|
|
13
|
+
".astro/",
|
|
14
|
+
"**/*.min.js",
|
|
15
|
+
"**/plugins/",
|
|
16
|
+
"/.temp/",
|
|
17
|
+
"src/html/docs/",
|
|
18
|
+
"docs_html/",
|
|
19
|
+
"src/html/public/"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
...tseslint.config(
|
|
23
|
+
pluginJs.configs.recommended,
|
|
24
|
+
...tseslint.configs.recommended
|
|
25
|
+
),
|
|
26
|
+
{
|
|
27
|
+
...pluginUnicorn.configs['flat/recommended']
|
|
28
|
+
},
|
|
29
|
+
...astroPlugin.configs['flat/recommended'],
|
|
30
|
+
{
|
|
31
|
+
files: ['**/*.{js,mjs,cjs,ts,mts,cts,astro}'],
|
|
32
|
+
languageOptions: {
|
|
33
|
+
globals: {
|
|
34
|
+
...globals.browser,
|
|
35
|
+
...globals.node
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
rules: {
|
|
39
|
+
'arrow-body-style': 'off',
|
|
40
|
+
'capitalized-comments': 'off',
|
|
41
|
+
'comma-dangle': ['error', 'never'],
|
|
42
|
+
'indent': ['error', 2, { 'MemberExpression': 'off', 'SwitchCase': 1 }],
|
|
43
|
+
'max-params': ['warn', 5],
|
|
44
|
+
'multiline-ternary': ['error', 'always-multiline'],
|
|
45
|
+
'new-cap': 'off',
|
|
46
|
+
'no-console': 'off',
|
|
47
|
+
'no-negated-condition': 'off',
|
|
48
|
+
'object-curly-spacing': ['error', 'always'],
|
|
49
|
+
'operator-linebreak': ['error', 'after'],
|
|
50
|
+
'no-unused-vars': 'warn',
|
|
51
|
+
'no-new': 'off',
|
|
52
|
+
'semi': 'off',
|
|
53
|
+
'unicorn/explicit-length-check': 'off',
|
|
54
|
+
'unicorn/no-array-callback-reference': 'off',
|
|
55
|
+
'unicorn/no-array-for-each': 'off',
|
|
56
|
+
'unicorn/no-array-method-this-argument': 'off',
|
|
57
|
+
'unicorn/no-null': 'off',
|
|
58
|
+
'unicorn/no-unused-properties': 'off',
|
|
59
|
+
'unicorn/prefer-array-flat': 'off',
|
|
60
|
+
'unicorn/prefer-dom-node-dataset': 'off',
|
|
61
|
+
'unicorn/prefer-export-from': 'off',
|
|
62
|
+
'unicorn/prefer-module': 'off',
|
|
63
|
+
'unicorn/prefer-query-selector': 'off',
|
|
64
|
+
'unicorn/prefer-spread': 'off',
|
|
65
|
+
'unicorn/prefer-string-replace-all': 'off',
|
|
66
|
+
'unicorn/prevent-abbreviations': 'off',
|
|
67
|
+
'astro/no-set-html-directive': 'off'
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
files: ['src/config/**'],
|
|
72
|
+
languageOptions: {
|
|
73
|
+
globals: {
|
|
74
|
+
...globals.node
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
rules: {
|
|
78
|
+
'no-console': 'off',
|
|
79
|
+
'unicorn/prefer-top-level-await': 'off'
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]
|