admin-lte 4.0.0-beta2 → 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 (69) hide show
  1. package/.browserslistrc +9 -4
  2. package/.prettierrc +6 -0
  3. package/ACCESSIBILITY-COMPLIANCE.md +369 -0
  4. package/CHANGELOG.md +314 -0
  5. package/README.md +43 -7
  6. package/dist/css/adminlte.css +1417 -1269
  7. package/dist/css/adminlte.css.map +1 -1
  8. package/dist/css/adminlte.min.css +2 -2
  9. package/dist/css/adminlte.min.css.map +1 -1
  10. package/dist/css/adminlte.rtl.css +1437 -1263
  11. package/dist/css/adminlte.rtl.css.map +1 -1
  12. package/dist/css/adminlte.rtl.min.css +2 -2
  13. package/dist/css/adminlte.rtl.min.css.map +1 -1
  14. package/dist/js/adminlte.js +786 -345
  15. package/dist/js/adminlte.js.map +1 -1
  16. package/dist/js/adminlte.min.js +3 -3
  17. package/dist/js/adminlte.min.js.map +1 -1
  18. package/dist/pages/UI/general.html +1918 -889
  19. package/dist/pages/UI/icons.html +848 -450
  20. package/dist/pages/UI/timeline.html +926 -496
  21. package/dist/pages/docs/browser-support.html +855 -442
  22. package/dist/pages/docs/color-mode.html +1002 -549
  23. package/dist/pages/docs/components/main-header.html +1032 -543
  24. package/dist/pages/docs/components/main-sidebar.html +848 -441
  25. package/dist/pages/docs/faq.html +846 -438
  26. package/dist/pages/docs/how-to-contribute.html +918 -478
  27. package/dist/pages/docs/introduction.html +900 -465
  28. package/dist/pages/docs/javascript/treeview.html +853 -451
  29. package/dist/pages/docs/layout.html +867 -479
  30. package/dist/pages/docs/license.html +843 -440
  31. package/dist/pages/examples/lockscreen.html +141 -66
  32. package/dist/pages/examples/login-v2.html +169 -85
  33. package/dist/pages/examples/login.html +159 -80
  34. package/dist/pages/examples/register-v2.html +179 -88
  35. package/dist/pages/examples/register.html +164 -81
  36. package/dist/pages/forms/general.html +1255 -605
  37. package/dist/pages/generate/theme.html +861 -386
  38. package/dist/pages/index.html +1417 -801
  39. package/dist/pages/index2.html +1884 -1057
  40. package/dist/pages/index3.html +1215 -690
  41. package/dist/pages/layout/collapsed-sidebar.html +861 -446
  42. package/dist/pages/layout/fixed-complete.html +862 -0
  43. package/dist/pages/layout/fixed-footer.html +861 -0
  44. package/dist/pages/layout/fixed-header.html +861 -0
  45. package/dist/pages/layout/fixed-sidebar.html +861 -446
  46. package/dist/pages/layout/layout-custom-area.html +891 -464
  47. package/dist/pages/layout/layout-rtl.html +861 -446
  48. package/dist/pages/layout/logo-switch.html +498 -233
  49. package/dist/pages/layout/sidebar-mini.html +861 -446
  50. package/dist/pages/layout/unfixed-sidebar.html +859 -445
  51. package/dist/pages/tables/simple.html +1111 -692
  52. package/dist/pages/widgets/cards.html +1066 -550
  53. package/dist/pages/widgets/info-box.html +1084 -577
  54. package/dist/pages/widgets/small-box.html +946 -480
  55. package/eslint.config.js +81 -0
  56. package/package.json +40 -36
  57. package/src/scss/_accessibility.scss +292 -0
  58. package/src/scss/_app-footer.scss +8 -0
  59. package/src/scss/_app-header.scss +8 -0
  60. package/src/scss/_bootstrap-variables.scss +11 -9
  61. package/src/scss/_table.scss +1 -9
  62. package/src/scss/_variables.scss +2 -1
  63. package/src/scss/adminlte.scss +4 -1
  64. package/src/ts/accessibility.ts +533 -0
  65. package/src/ts/adminlte.ts +48 -9
  66. package/src/ts/card-widget.ts +1 -2
  67. package/src/ts/push-menu.ts +1 -2
  68. package/src/ts/util/index.ts +39 -7
  69. package/.astro/settings.json +0 -5
@@ -0,0 +1,81 @@
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
+ ]
20
+ },
21
+ ...tseslint.config(
22
+ pluginJs.configs.recommended,
23
+ ...tseslint.configs.recommended
24
+ ),
25
+ {
26
+ ...pluginUnicorn.configs['flat/recommended']
27
+ },
28
+ ...astroPlugin.configs['flat/recommended'],
29
+ {
30
+ files: ['**/*.{js,mjs,cjs,ts,mts,cts,astro}'],
31
+ languageOptions: {
32
+ globals: {
33
+ ...globals.browser,
34
+ ...globals.node
35
+ }
36
+ },
37
+ rules: {
38
+ 'arrow-body-style': 'off',
39
+ 'capitalized-comments': 'off',
40
+ 'comma-dangle': ['error', 'never'],
41
+ 'indent': ['error', 2, { 'MemberExpression': 'off', 'SwitchCase': 1 }],
42
+ 'max-params': ['warn', 5],
43
+ 'multiline-ternary': ['error', 'always-multiline'],
44
+ 'new-cap': 'off',
45
+ 'no-console': 'off',
46
+ 'no-negated-condition': 'off',
47
+ 'object-curly-spacing': ['error', 'always'],
48
+ 'operator-linebreak': ['error', 'after'],
49
+ 'no-unused-vars': 'warn',
50
+ 'no-new': 'off',
51
+ 'semi': 'off',
52
+ 'unicorn/explicit-length-check': 'off',
53
+ 'unicorn/no-array-callback-reference': 'off',
54
+ 'unicorn/no-array-for-each': 'off',
55
+ 'unicorn/no-array-method-this-argument': 'off',
56
+ 'unicorn/no-null': 'off',
57
+ 'unicorn/no-unused-properties': 'off',
58
+ 'unicorn/prefer-array-flat': 'off',
59
+ 'unicorn/prefer-dom-node-dataset': 'off',
60
+ 'unicorn/prefer-export-from': 'off',
61
+ 'unicorn/prefer-module': 'off',
62
+ 'unicorn/prefer-query-selector': 'off',
63
+ 'unicorn/prefer-spread': 'off',
64
+ 'unicorn/prefer-string-replace-all': 'off',
65
+ 'unicorn/prevent-abbreviations': 'off',
66
+ 'astro/no-set-html-directive': 'off'
67
+ }
68
+ },
69
+ {
70
+ files: ['src/config/**'],
71
+ languageOptions: {
72
+ globals: {
73
+ ...globals.node
74
+ }
75
+ },
76
+ rules: {
77
+ 'no-console': 'off',
78
+ 'unicorn/prefer-top-level-await': 'off'
79
+ }
80
+ }
81
+ ]
package/package.json CHANGED
@@ -1,14 +1,17 @@
1
1
  {
2
2
  "name": "admin-lte",
3
3
  "description": "Responsive open source admin dashboard and control panel.",
4
- "version": "4.0.0-beta2",
4
+ "version": "4.0.0-rc2",
5
+ "type": "module",
5
6
  "license": "MIT",
6
7
  "author": "Colorlib <https://colorlib.com>",
7
8
  "main": "dist/js/adminlte.min.js",
8
9
  "scripts": {
10
+ "start": "npm run dev",
9
11
  "dev": "npm-run-all --parallel watch docs-serve",
12
+ "build": "npm-run-all clean compile",
10
13
  "css": "npm-run-all css-compile css-prefix css-rtl css-minify",
11
- "css-compile": "sass --style expanded --load-path=\"node_modules\" --source-map --embed-sources --no-error-css src/scss/:dist/css/",
14
+ "css-compile": "sass --style expanded --load-path=\"node_modules\" --source-map --embed-sources --no-error-css --quiet src/scss/:dist/css/",
12
15
  "css-rtl": "cross-env NODE_ENV=RTL postcss --config src/config/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
13
16
  "css-lint": "stylelint \"src/scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache --rd",
14
17
  "css-minify": "npm-run-all --aggregate-output --parallel css-minify-*",
@@ -17,18 +20,19 @@
17
20
  "css-prefix": "postcss --config src/config/postcss.config.mjs --replace \"dist/css/*.css\" \"!dist/css/*.rtl*.css\" \"!dist/css/*.min.css\"",
18
21
  "js": "npm-run-all js-compile js-minify",
19
22
  "js-compile": "rollup --config src/config/rollup.config.js --sourcemap",
20
- "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives .",
23
+ "js-lint": "eslint --format=stylish .",
21
24
  "js-minify": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/adminlte.js.map,includeSources,url=adminlte.min.js.map\" --output dist/js/adminlte.min.js dist/js/adminlte.js",
22
25
  "bundlewatch": "bundlewatch --config .bundlewatch.config.json",
23
26
  "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
24
27
  "docs-compile": "astro --config src/config/astro.config.mjs build",
25
28
  "docs-lint": "astro --config src/config/astro.config.mjs check",
26
- "docs-format": "js-beautify --file \"dist/pages/**/*.html\"",
29
+ "docs-format": "prettier --write \"dist/pages/**/*.html\"",
27
30
  "docs-serve": "astro --config src/config/astro.config.mjs dev --open --port 3000",
28
31
  "assets": "node src/config/assets.config.mjs",
29
32
  "lint": "npm-run-all --aggregate-output --continue-on-error --parallel js-lint css-lint docs-lint lockfile-lint",
33
+ "clean": "rimraf dist",
30
34
  "compile": "npm-run-all docs-compile docs-format assets css js",
31
- "production": "npm-run-all lint compile",
35
+ "production": "npm-run-all clean lint compile bundlewatch",
32
36
  "watch": "concurrently \"npm:watch-*\"",
33
37
  "watch-css-main": "nodemon --watch src/scss/ --ext scss --exec \"npm-run-all css-lint css-compile\"",
34
38
  "watch-css-dist": "nodemon --watch dist/css/ --ext css --ignore \"dist/css/*.rtl.*\" --exec \"npm run css-rtl\"",
@@ -57,40 +61,40 @@
57
61
  "url": "https://github.com/ColorlibHQ/AdminLTE/issues"
58
62
  },
59
63
  "devDependencies": {
60
- "@astrojs/check": "^0.9.3",
61
- "@astrojs/mdx": "^3.1.5",
62
- "@rollup/plugin-typescript": "^11.1.6",
63
- "@typescript-eslint/eslint-plugin": "^7.5.0",
64
- "@typescript-eslint/parser": "^7.5.0",
65
- "astro": "^4.15.1",
66
- "autoprefixer": "^10.4.20",
67
- "bootstrap": "^5.3.2",
68
- "bundlewatch": "^0.4.0",
64
+ "@astrojs/check": "^0.9.4",
65
+ "@astrojs/mdx": "^4.3.0",
66
+ "@rollup/plugin-typescript": "^12.1.3",
67
+ "@typescript-eslint/eslint-plugin": "^8.34.1",
68
+ "@typescript-eslint/parser": "^8.34.1",
69
+ "astro": "^5.10.0",
70
+ "autoprefixer": "^10.4.21",
71
+ "bootstrap": "^5.3.7",
72
+ "bundlewatch": "^0.4.1",
69
73
  "clean-css-cli": "^5.6.3",
70
- "concurrently": "^8.2.2",
74
+ "concurrently": "^9.1.2",
71
75
  "cross-env": "^7.0.3",
72
- "eslint": "^8.55.0",
73
- "eslint-config-xo": "^0.44.0",
74
- "eslint-config-xo-typescript": "^4.0.0",
75
- "eslint-plugin-astro": "^0.34.0",
76
- "eslint-plugin-import": "^2.29.1",
77
- "eslint-plugin-unicorn": "^52.0.0",
78
- "fs-extra": "^11.1.1",
79
- "js-beautify": "^1.15.1",
80
- "lockfile-lint": "^4.14.0",
81
- "nodemon": "^3.1.2",
76
+ "eslint": "^9.29.0",
77
+ "eslint-config-xo": "^0.47.0",
78
+ "eslint-config-xo-typescript": "^8.0.1",
79
+ "eslint-plugin-astro": "^1.3.1",
80
+ "eslint-plugin-import": "^2.31.0",
81
+ "eslint-plugin-unicorn": "^59.0.1",
82
+ "fs-extra": "^11.3.0",
83
+ "lockfile-lint": "^4.14.1",
84
+ "nodemon": "^3.1.10",
82
85
  "npm-run-all": "^4.1.5",
83
- "postcss": "^8.4.41",
84
- "postcss-cli": "^11.0.0",
85
- "prettier": "^3.3.3",
86
+ "postcss": "^8.5.6",
87
+ "postcss-cli": "^11.0.1",
88
+ "prettier": "^3.5.3",
86
89
  "prettier-plugin-astro": "^0.14.1",
87
- "rollup": "^4.21.0",
88
- "rtlcss": "^4.2.0",
89
- "sass": "^1.77.4",
90
- "stylelint": "^16.8.2",
91
- "stylelint-config-twbs-bootstrap": "^14.2.0",
92
- "terser": "^5.31.6",
93
- "tslib": "^2.7.0",
94
- "typescript": "^5.5.4"
90
+ "rimraf": "^6.0.1",
91
+ "rollup": "^4.44.0",
92
+ "rtlcss": "^4.3.0",
93
+ "sass": "^1.89.2",
94
+ "stylelint": "^16.21.0",
95
+ "stylelint-config-twbs-bootstrap": "^16.1.0",
96
+ "terser": "^5.43.1",
97
+ "tslib": "^2.8.1",
98
+ "typescript": "^5.8.3"
95
99
  }
96
100
  }
@@ -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
+ }
@@ -71,8 +71,8 @@ $colors: (
71
71
  ) !default;
72
72
  // scss-docs-end colors-map
73
73
 
74
- // The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.
75
- // See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast
74
+ // The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.2 are 3, 4.5 and 7.
75
+ // See https://www.w3.org/TR/WCAG/#contrast-minimum
76
76
  $min-contrast-ratio: 4.5 !default;
77
77
 
78
78
  // Customize the light and dark text colors for use in our color contrast function.
@@ -1101,7 +1101,7 @@ $form-feedback-valid-color: $success !default;
1101
1101
  $form-feedback-invalid-color: $danger !default;
1102
1102
 
1103
1103
  $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
1104
- $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
1104
+ $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/></svg>") !default;
1105
1105
  $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
1106
1106
  $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
1107
1107
  // scss-docs-end form-feedback-variables
@@ -1393,7 +1393,9 @@ $accordion-transition: $btn-transition, border-radius .15s ea
1393
1393
  $accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
1394
1394
  $accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;
1395
1395
 
1396
- $accordion-button-focus-border-color: $input-focus-border-color !default;
1396
+ // fusv-disable
1397
+ $accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3
1398
+ // fusv-enable
1397
1399
  $accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
1398
1400
 
1399
1401
  $accordion-icon-width: 1.25rem !default;
@@ -1402,8 +1404,8 @@ $accordion-icon-active-color: $primary-text-emphasis !default;
1402
1404
  $accordion-icon-transition: transform .2s ease-in-out !default;
1403
1405
  $accordion-icon-transform: rotate(-180deg) !default;
1404
1406
 
1405
- $accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
1406
- $accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
1407
+ $accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>") !default;
1408
+ $accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>") !default;
1407
1409
  // scss-docs-end accordion-variables
1408
1410
 
1409
1411
  // Tooltips
@@ -1677,8 +1679,8 @@ $carousel-caption-spacer: 1.25rem !default;
1677
1679
 
1678
1680
  $carousel-control-icon-width: 2rem !default;
1679
1681
 
1680
- $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>") !default;
1681
- $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>") !default;
1682
+ $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/></svg>") !default;
1683
+ $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/></svg>") !default;
1682
1684
 
1683
1685
  $carousel-transition-duration: .6s !default;
1684
1686
  $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
@@ -1714,7 +1716,7 @@ $btn-close-height: $btn-close-width !default;
1714
1716
  $btn-close-padding-x: .25em !default;
1715
1717
  $btn-close-padding-y: $btn-close-padding-x !default;
1716
1718
  $btn-close-color: $black !default;
1717
- $btn-close-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>") !default;
1719
+ $btn-close-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/></svg>") !default;
1718
1720
  $btn-close-focus-shadow: $focus-ring-box-shadow !default;
1719
1721
  $btn-close-opacity: .5 !default;
1720
1722
  $btn-close-hover-opacity: .75 !default;
@@ -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;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * AdminLTE v4.0.0-beta2
2
+ * AdminLTE v4.0.0-beta3
3
3
  * Author: Colorlib
4
4
  * Website: AdminLTE.io <https://adminlte.io>
5
5
  * License: Open source - MIT <https://opensource.org/licenses/MIT>
@@ -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";