admin-lte 4.0.0-beta3 → 4.0.0-rc2

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 (74) hide show
  1. package/.browserslistrc +9 -4
  2. package/ACCESSIBILITY-COMPLIANCE.md +369 -0
  3. package/CHANGELOG.md +314 -0
  4. package/README.md +43 -7
  5. package/dist/css/adminlte.css +1412 -1264
  6. package/dist/css/adminlte.css.map +1 -1
  7. package/dist/css/adminlte.min.css +1 -1
  8. package/dist/css/adminlte.min.css.map +1 -1
  9. package/dist/css/adminlte.rtl.css +1430 -1256
  10. package/dist/css/adminlte.rtl.css.map +1 -1
  11. package/dist/css/adminlte.rtl.min.css +1 -1
  12. package/dist/css/adminlte.rtl.min.css.map +1 -1
  13. package/dist/js/adminlte.js +786 -345
  14. package/dist/js/adminlte.js.map +1 -1
  15. package/dist/js/adminlte.min.js +3 -3
  16. package/dist/js/adminlte.min.js.map +1 -1
  17. package/dist/pages/UI/general.html +41 -9
  18. package/dist/pages/UI/icons.html +38 -6
  19. package/dist/pages/UI/timeline.html +38 -6
  20. package/dist/pages/docs/browser-support.html +39 -25
  21. package/dist/pages/docs/color-mode.html +44 -31
  22. package/dist/pages/docs/components/main-header.html +39 -25
  23. package/dist/pages/docs/components/main-sidebar.html +40 -27
  24. package/dist/pages/docs/faq.html +38 -23
  25. package/dist/pages/docs/how-to-contribute.html +39 -25
  26. package/dist/pages/docs/introduction.html +44 -35
  27. package/dist/pages/docs/javascript/treeview.html +39 -25
  28. package/dist/pages/docs/layout.html +38 -6
  29. package/dist/pages/docs/license.html +38 -23
  30. package/dist/pages/examples/lockscreen.html +17 -5
  31. package/dist/pages/examples/login-v2.html +16 -4
  32. package/dist/pages/examples/login.html +16 -4
  33. package/dist/pages/examples/register-v2.html +16 -4
  34. package/dist/pages/examples/register.html +16 -4
  35. package/dist/pages/forms/general.html +38 -6
  36. package/dist/pages/generate/theme.html +155 -5
  37. package/dist/pages/index.html +42 -27
  38. package/dist/pages/index2.html +39 -7
  39. package/dist/pages/index3.html +38 -6
  40. package/dist/pages/layout/collapsed-sidebar.html +38 -6
  41. package/dist/pages/layout/fixed-complete.html +862 -0
  42. package/dist/pages/layout/fixed-footer.html +861 -0
  43. package/dist/pages/layout/fixed-header.html +861 -0
  44. package/dist/pages/layout/fixed-sidebar.html +38 -6
  45. package/dist/pages/layout/layout-custom-area.html +38 -6
  46. package/dist/pages/layout/layout-rtl.html +38 -6
  47. package/dist/pages/layout/logo-switch.html +17 -5
  48. package/dist/pages/layout/sidebar-mini.html +38 -6
  49. package/dist/pages/layout/unfixed-sidebar.html +38 -6
  50. package/dist/pages/tables/simple.html +38 -6
  51. package/dist/pages/widgets/cards.html +38 -6
  52. package/dist/pages/widgets/info-box.html +38 -6
  53. package/dist/pages/widgets/small-box.html +38 -6
  54. package/eslint.config.js +81 -0
  55. package/package.json +34 -31
  56. package/src/scss/_accessibility.scss +292 -0
  57. package/src/scss/_app-footer.scss +8 -0
  58. package/src/scss/_app-header.scss +8 -0
  59. package/src/scss/_table.scss +1 -9
  60. package/src/scss/_variables.scss +2 -1
  61. package/src/scss/adminlte.scss +3 -0
  62. package/src/ts/accessibility.ts +533 -0
  63. package/src/ts/adminlte.ts +48 -9
  64. package/src/ts/card-widget.ts +1 -2
  65. package/src/ts/push-menu.ts +1 -2
  66. package/src/ts/util/index.ts +39 -7
  67. package/.astro/content-assets.mjs +0 -1
  68. package/.astro/content-modules.mjs +0 -1
  69. package/.astro/content.d.ts +0 -166
  70. package/.astro/data-store.json +0 -1
  71. package/.astro/settings.json +0 -5
  72. package/.astro/types.d.ts +0 -2
  73. package/adminlte-v4.0.0-beta1-with-dist.zip +0 -0
  74. package/adminlte-v4.0.0-beta3.zip +0 -0
@@ -0,0 +1,292 @@
1
+ /* ==========================================================================
2
+ AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance
3
+ ========================================================================== */
4
+
5
+ /* Skip Links - WCAG 2.4.1: Bypass Blocks */
6
+ .skip-link {
7
+ position: absolute;
8
+ top: -40px;
9
+ left: 6px;
10
+ z-index: 999999;
11
+ padding: 8px 16px;
12
+ font-weight: 600;
13
+ color: var(--bs-white);
14
+ text-decoration: none;
15
+ background: var(--bs-primary);
16
+
17
+ &:focus {
18
+ top: 0;
19
+ outline: 3px solid var(--bs-warning);
20
+ outline-offset: 2px;
21
+ }
22
+
23
+ &:hover {
24
+ color: var(--bs-white);
25
+ text-decoration: none;
26
+ background: var(--bs-primary-emphasis);
27
+ }
28
+ }
29
+
30
+ /* Enhanced Focus Indicators - WCAG 2.4.7: Focus Visible */
31
+ .focus-enhanced {
32
+ &:focus {
33
+ outline: 3px solid var(--bs-focus-ring-color, #0d6efd);
34
+ outline-offset: 2px;
35
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
36
+ }
37
+ }
38
+
39
+ /* High Contrast Mode Support */
40
+ @media (prefers-contrast: high) {
41
+ .card {
42
+ border: 2px solid;
43
+ }
44
+
45
+ .btn {
46
+ border-width: 2px;
47
+ }
48
+
49
+ .nav-link {
50
+ border: 1px solid transparent;
51
+
52
+ &:hover,
53
+ &:focus {
54
+ border-color: currentcolor;
55
+ }
56
+ }
57
+ }
58
+
59
+ /* Reduced Motion Support - WCAG 2.3.3: Animation from Interactions */
60
+ @media (prefers-reduced-motion: reduce) {
61
+ *,
62
+ *::before,
63
+ *::after {
64
+ transition-duration: .01ms !important;
65
+ animation-duration: .01ms !important;
66
+ animation-iteration-count: 1 !important;
67
+ scroll-behavior: auto !important;
68
+ }
69
+
70
+ .fade {
71
+ display: block;
72
+ }
73
+
74
+ .collapse {
75
+ display: block;
76
+ }
77
+ }
78
+
79
+ /* Screen Reader Only Content */
80
+ .sr-only {
81
+ position: absolute !important;
82
+ width: 1px !important;
83
+ height: 1px !important;
84
+ padding: 0 !important;
85
+ margin: -1px !important;
86
+ overflow: hidden !important;
87
+ clip: rect(0, 0, 0, 0) !important;
88
+ white-space: nowrap !important;
89
+ border: 0 !important;
90
+ }
91
+
92
+ .sr-only-focusable:focus {
93
+ position: static !important;
94
+ width: auto !important;
95
+ height: auto !important;
96
+ padding: inherit !important;
97
+ margin: inherit !important;
98
+ overflow: visible !important;
99
+ clip: auto !important;
100
+ white-space: normal !important;
101
+ }
102
+
103
+ /* Focus Trap Utilities */
104
+ .focus-trap {
105
+ &:focus {
106
+ box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
107
+ }
108
+ }
109
+
110
+ /* Accessible Color Combinations - WCAG 1.4.3: Contrast (Minimum) */
111
+ .text-accessible-primary {
112
+ color: #003d82; /* 4.5:1 contrast on white */
113
+ }
114
+
115
+ .text-accessible-success {
116
+ color: #0f5132; /* 4.5:1 contrast on white */
117
+ }
118
+
119
+ .text-accessible-danger {
120
+ color: #842029; /* 4.5:1 contrast on white */
121
+ }
122
+
123
+ .text-accessible-warning {
124
+ color: #664d03; /* 4.5:1 contrast on white */
125
+ }
126
+
127
+ /* ARIA Live Regions */
128
+ .live-region {
129
+ position: absolute;
130
+ left: -10000px;
131
+ width: 1px;
132
+ height: 1px;
133
+ overflow: hidden;
134
+
135
+ &.live-region-visible {
136
+ position: static;
137
+ left: auto;
138
+ width: auto;
139
+ height: auto;
140
+ overflow: visible;
141
+ }
142
+ }
143
+
144
+ /* Enhanced Error States - WCAG 3.3.1: Error Identification */
145
+ .form-control.is-invalid {
146
+ border-color: var(--bs-danger);
147
+
148
+ &:focus {
149
+ border-color: var(--bs-danger);
150
+ box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25);
151
+ }
152
+ }
153
+
154
+ .invalid-feedback {
155
+ display: block;
156
+ width: 100%;
157
+ margin-top: .25rem;
158
+ font-size: .875em;
159
+ color: var(--bs-danger);
160
+
161
+ &[role="alert"] {
162
+ font-weight: 600;
163
+ }
164
+ }
165
+
166
+ /* Target Size - WCAG 2.5.8: Target Size (Minimum) */
167
+ .touch-target {
168
+ min-width: 44px;
169
+ min-height: 44px;
170
+
171
+ &.touch-target-small {
172
+ min-width: 24px;
173
+ min-height: 24px;
174
+ }
175
+ }
176
+
177
+ /* Table Accessibility */
178
+ .table-accessible {
179
+ th {
180
+ font-weight: 600;
181
+ background-color: var(--bs-secondary-bg);
182
+
183
+ &[scope="col"] {
184
+ border-bottom: 2px solid var(--bs-border-color);
185
+ }
186
+
187
+ &[scope="row"] {
188
+ border-right: 2px solid var(--bs-border-color);
189
+ }
190
+ }
191
+
192
+ caption {
193
+ padding: .75rem;
194
+ font-weight: 600;
195
+ color: var(--bs-secondary);
196
+ text-align: left;
197
+ caption-side: top;
198
+ }
199
+ }
200
+
201
+ /* Navigation Landmarks */
202
+ nav[role="navigation"] {
203
+ &:not([aria-label]):not([aria-labelledby]) {
204
+ &::before {
205
+ position: absolute;
206
+ left: -10000px;
207
+ content: "Navigation";
208
+ }
209
+ }
210
+ }
211
+
212
+ /* Form Fieldset Styling */
213
+ fieldset {
214
+ padding: 1rem;
215
+ margin-bottom: 1rem;
216
+ border: 1px solid var(--bs-border-color);
217
+
218
+ legend {
219
+ padding: 0 .5rem;
220
+ margin-bottom: .5rem;
221
+ font-size: 1.1em;
222
+ font-weight: 600;
223
+ }
224
+ }
225
+
226
+ /* Loading States */
227
+ .loading[aria-busy="true"] {
228
+ position: relative;
229
+ pointer-events: none;
230
+
231
+ &::after {
232
+ position: absolute;
233
+ top: 50%;
234
+ left: 50%;
235
+ width: 20px;
236
+ height: 20px;
237
+ margin-top: -10px;
238
+ margin-left: -10px;
239
+ content: "";
240
+ border: 2px solid var(--bs-primary);
241
+ border-top-color: transparent;
242
+ animation: spin 1s linear infinite;
243
+ }
244
+
245
+ @media (prefers-reduced-motion: reduce) {
246
+ &::after {
247
+ border-top-color: var(--bs-primary);
248
+ animation: none;
249
+ }
250
+ }
251
+ }
252
+
253
+ @keyframes spin {
254
+ to {
255
+ transform: rotate(360deg);
256
+ }
257
+ }
258
+
259
+ /* Dark Mode Accessibility */
260
+ [data-bs-theme="dark"] {
261
+ .text-accessible-primary {
262
+ color: #6ea8fe;
263
+ }
264
+
265
+ .text-accessible-success {
266
+ color: #75b798;
267
+ }
268
+
269
+ .text-accessible-danger {
270
+ color: #f1aeb5;
271
+ }
272
+
273
+ .text-accessible-warning {
274
+ color: #ffda6a;
275
+ }
276
+ }
277
+
278
+ /* Print Accessibility */
279
+ @media print {
280
+ .skip-link,
281
+ .btn,
282
+ .nav-link {
283
+ color: #000 !important;
284
+ background: transparent !important;
285
+ border: 1px solid #000 !important;
286
+ }
287
+
288
+ a[href^="http"]::after {
289
+ font-size: .8em;
290
+ content: " (" attr(href) ")";
291
+ }
292
+ }
@@ -13,3 +13,11 @@
13
13
  border-top: $lte-app-footer-border-top;
14
14
  @include transition($lte-transition-speed $lte-transition-fn);
15
15
  }
16
+
17
+ .fixed-footer {
18
+ .app-footer {
19
+ position: sticky;
20
+ bottom: 0;
21
+ z-index: $lte-zindex-fixed-footer;
22
+ }
23
+ }
@@ -24,3 +24,11 @@
24
24
  font-size: .6rem;
25
25
  font-weight: 400;
26
26
  }
27
+
28
+ .fixed-header {
29
+ .app-header {
30
+ position: sticky;
31
+ top: 0;
32
+ z-index: $lte-zindex-fixed-header;
33
+ }
34
+ }
@@ -18,15 +18,7 @@
18
18
  box-shadow: inset 0 1px 0 $table-border-color, inset 0 -1px 0 $table-border-color;
19
19
  }
20
20
 
21
- // TODO: add $table-dark
22
- // &.table-dark {
23
- // thead tr {
24
- // &:nth-child(1) th {
25
- // background-color: $table-dark-bg;
26
- // box-shadow: inset 0 1px 0 $table-dark-border-color, inset 0 -1px 0 $table-dark-border-color;
27
- // }
28
- // }
29
- // }
21
+ // Note: Dark table styling for fixed headers is handled by Bootstrap's built-in dark table classes
30
22
  }
31
23
 
32
24
  // no border
@@ -58,6 +58,7 @@ $lte-app-header-bottom-border: $lte-app-header-bottom-border-width solid
58
58
  $lte-app-header-link-padding-y: $navbar-padding-y !default;
59
59
  $lte-app-header-height: ($nav-link-height + ($lte-app-header-link-padding-y * 2)) !default;
60
60
  $lte-app-header-height-compact: ($nav-link-height-compact + ($lte-app-header-link-padding-y * 2)) !default;
61
+ $lte-zindex-fixed-header: $zindex-fixed !default;
61
62
 
62
63
  // APP MAIN
63
64
  // --------------------------------------------------------
@@ -77,7 +78,7 @@ $lte-app-footer-border-top-color: var(--#{$prefix}border-color) !default;
77
78
  $lte-app-footer-border-top: $lte-app-footer-border-top-width solid $lte-app-footer-border-top-color !default;
78
79
  $lte-app-footer-bg: var(--#{$prefix}body-bg) !default;
79
80
  $lte-app-footer-color: var(--#{$prefix}secondary-color) !default;
80
-
81
+ $lte-zindex-fixed-footer: $zindex-fixed !default;
81
82
  // CONTENT BOTTOM AREA
82
83
  // --------------------------------------------------------
83
84
  $lte-app-content-bottom-area-margin-bottom: -$lte-app-main-padding-bottom !default;
@@ -73,3 +73,6 @@
73
73
  @import "parts/extra-components";
74
74
  @import "parts/pages";
75
75
  @import "parts/miscellaneous";
76
+
77
+ // AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance
78
+ @import "accessibility";