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.
- package/.browserslistrc +9 -4
- package/.prettierrc +6 -0
- package/ACCESSIBILITY-COMPLIANCE.md +369 -0
- package/CHANGELOG.md +314 -0
- package/README.md +43 -7
- package/dist/css/adminlte.css +1417 -1269
- package/dist/css/adminlte.css.map +1 -1
- package/dist/css/adminlte.min.css +2 -2
- package/dist/css/adminlte.min.css.map +1 -1
- package/dist/css/adminlte.rtl.css +1437 -1263
- package/dist/css/adminlte.rtl.css.map +1 -1
- package/dist/css/adminlte.rtl.min.css +2 -2
- package/dist/css/adminlte.rtl.min.css.map +1 -1
- package/dist/js/adminlte.js +786 -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/UI/general.html +1918 -889
- package/dist/pages/UI/icons.html +848 -450
- package/dist/pages/UI/timeline.html +926 -496
- package/dist/pages/docs/browser-support.html +855 -442
- package/dist/pages/docs/color-mode.html +1002 -549
- package/dist/pages/docs/components/main-header.html +1032 -543
- package/dist/pages/docs/components/main-sidebar.html +848 -441
- package/dist/pages/docs/faq.html +846 -438
- package/dist/pages/docs/how-to-contribute.html +918 -478
- package/dist/pages/docs/introduction.html +900 -465
- package/dist/pages/docs/javascript/treeview.html +853 -451
- package/dist/pages/docs/layout.html +867 -479
- package/dist/pages/docs/license.html +843 -440
- package/dist/pages/examples/lockscreen.html +141 -66
- package/dist/pages/examples/login-v2.html +169 -85
- package/dist/pages/examples/login.html +159 -80
- package/dist/pages/examples/register-v2.html +179 -88
- package/dist/pages/examples/register.html +164 -81
- package/dist/pages/forms/general.html +1255 -605
- package/dist/pages/generate/theme.html +861 -386
- package/dist/pages/index.html +1417 -801
- package/dist/pages/index2.html +1884 -1057
- package/dist/pages/index3.html +1215 -690
- package/dist/pages/layout/collapsed-sidebar.html +861 -446
- package/dist/pages/layout/fixed-complete.html +862 -0
- package/dist/pages/layout/fixed-footer.html +861 -0
- package/dist/pages/layout/fixed-header.html +861 -0
- package/dist/pages/layout/fixed-sidebar.html +861 -446
- package/dist/pages/layout/layout-custom-area.html +891 -464
- package/dist/pages/layout/layout-rtl.html +861 -446
- package/dist/pages/layout/logo-switch.html +498 -233
- package/dist/pages/layout/sidebar-mini.html +861 -446
- package/dist/pages/layout/unfixed-sidebar.html +859 -445
- package/dist/pages/tables/simple.html +1111 -692
- package/dist/pages/widgets/cards.html +1066 -550
- package/dist/pages/widgets/info-box.html +1084 -577
- package/dist/pages/widgets/small-box.html +946 -480
- package/eslint.config.js +81 -0
- package/package.json +40 -36
- 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/_bootstrap-variables.scss +11 -9
- package/src/scss/_table.scss +1 -9
- package/src/scss/_variables.scss +2 -1
- package/src/scss/adminlte.scss +4 -1
- 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/util/index.ts +39 -7
- package/.astro/settings.json +0 -5
package/eslint.config.js
ADDED
|
@@ -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-
|
|
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 --
|
|
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": "
|
|
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.
|
|
61
|
-
"@astrojs/mdx": "^3.
|
|
62
|
-
"@rollup/plugin-typescript": "^
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
64
|
-
"@typescript-eslint/parser": "^
|
|
65
|
-
"astro": "^
|
|
66
|
-
"autoprefixer": "^10.4.
|
|
67
|
-
"bootstrap": "^5.3.
|
|
68
|
-
"bundlewatch": "^0.4.
|
|
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": "^
|
|
74
|
+
"concurrently": "^9.1.2",
|
|
71
75
|
"cross-env": "^7.0.3",
|
|
72
|
-
"eslint": "^
|
|
73
|
-
"eslint-config-xo": "^0.
|
|
74
|
-
"eslint-config-xo-typescript": "^
|
|
75
|
-
"eslint-plugin-astro": "^
|
|
76
|
-
"eslint-plugin-import": "^2.
|
|
77
|
-
"eslint-plugin-unicorn": "^
|
|
78
|
-
"fs-extra": "^11.
|
|
79
|
-
"
|
|
80
|
-
"
|
|
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.
|
|
84
|
-
"postcss-cli": "^11.0.
|
|
85
|
-
"prettier": "^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
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"stylelint
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
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
|
+
}
|
|
@@ -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.
|
|
75
|
-
// See https://www.w3.org/TR/
|
|
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.
|
|
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
|
-
|
|
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}'
|
|
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}'
|
|
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
|
|
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-.
|
|
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.
|
|
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;
|
package/src/scss/_table.scss
CHANGED
|
@@ -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
|
-
//
|
|
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
|
package/src/scss/_variables.scss
CHANGED
|
@@ -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;
|
package/src/scss/adminlte.scss
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* AdminLTE v4.0.0-
|
|
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";
|