adminator-admin-dashboard 2.8.1 → 4.1.5
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/CHANGELOG.md +499 -0
- package/CLAUDE.md +126 -154
- package/README.md +321 -370
- package/dist/2026.js +8751 -0
- package/dist/2026.js.map +1 -0
- package/dist/404.html +36 -16
- package/dist/500.html +36 -16
- package/dist/assets/static/images/logo.svg +3 -3
- package/dist/basic-table.html +152 -699
- package/dist/blank.html +42 -507
- package/dist/buttons.html +152 -448
- package/dist/calendar.html +246 -658
- package/dist/charts.html +124 -658
- package/dist/chat.html +209 -706
- package/dist/compose.html +141 -618
- package/dist/datatable.html +467 -991
- package/dist/email.html +430 -943
- package/dist/forms.html +208 -733
- package/dist/google-maps.html +123 -513
- package/dist/index.html +436 -1041
- package/dist/runtime.js +1299 -0
- package/dist/runtime.js.map +1 -0
- package/dist/signin.html +92 -92
- package/dist/signup.html +106 -91
- package/dist/ui.html +268 -897
- package/dist/vector-maps.html +132 -511
- package/dist/vendor-chartjs.js +14593 -0
- package/dist/vendor-chartjs.js.map +1 -0
- package/dist/vendor-fullcalendar.js +14793 -0
- package/dist/vendor-fullcalendar.js.map +1 -0
- package/dist/vendors.js +3758 -0
- package/dist/vendors.js.map +1 -0
- package/package.json +50 -52
- package/src/404.html +35 -15
- package/src/500.html +35 -15
- package/src/assets/scripts/2026/Shell.js +312 -0
- package/src/assets/scripts/2026/calendar.js +123 -0
- package/src/assets/scripts/2026/charts.js +259 -0
- package/src/assets/scripts/2026/index.js +35 -0
- package/src/assets/scripts/2026/init.js +207 -0
- package/src/assets/scripts/2026/maps.js +78 -0
- package/src/assets/scripts/2026/palette.js +266 -0
- package/src/assets/static/images/logo.svg +3 -3
- package/src/assets/styles/2026/_animations.scss +14 -0
- package/src/assets/styles/2026/_auth.scss +215 -0
- package/src/assets/styles/2026/_base.scss +37 -0
- package/src/assets/styles/2026/_calendar.scss +380 -0
- package/src/assets/styles/2026/_charts.scss +44 -0
- package/src/assets/styles/2026/_chat.scss +350 -0
- package/src/assets/styles/2026/_components.scss +140 -0
- package/src/assets/styles/2026/_dashboard.scss +520 -0
- package/src/assets/styles/2026/_data.scss +130 -0
- package/src/assets/styles/2026/_dropdowns.scss +128 -0
- package/src/assets/styles/2026/_email.scss +599 -0
- package/src/assets/styles/2026/_error.scss +98 -0
- package/src/assets/styles/2026/_forms.scss +215 -0
- package/src/assets/styles/2026/_fullcalendar.scss +134 -0
- package/src/assets/styles/2026/_palette.scss +173 -0
- package/src/assets/styles/2026/_responsive.scss +229 -0
- package/src/assets/styles/2026/_shell.scss +290 -0
- package/src/assets/styles/2026/_tokens.scss +80 -0
- package/src/assets/styles/2026/_ui.scss +365 -0
- package/src/assets/styles/2026/index.scss +23 -0
- package/src/basic-table.html +153 -710
- package/src/blank.html +42 -517
- package/src/buttons.html +152 -458
- package/src/calendar.html +246 -668
- package/src/charts.html +124 -668
- package/src/chat.html +209 -716
- package/src/compose.html +142 -629
- package/src/datatable.html +466 -1000
- package/src/email.html +429 -952
- package/src/forms.html +207 -742
- package/src/google-maps.html +128 -523
- package/src/index.html +438 -1050
- package/src/signin.html +92 -92
- package/src/signup.html +106 -91
- package/src/ui.html +267 -906
- package/src/vector-maps.html +133 -522
- package/dist/1e59d2330b4c6deb84b3.ttf +0 -0
- package/dist/20fd1704ea223900efa9.woff2 +0 -0
- package/dist/29b39089170885ae2967.woff +0 -0
- package/dist/8b43027f47b20503057d.eot +0 -0
- package/dist/9bad94440d49256265a5.eot +0 -0
- package/dist/assets/fontawesome-webfont.svg +0 -2671
- package/dist/assets/themify.svg +0 -362
- package/dist/eda8b94308c6f538f04a.ttf +0 -0
- package/dist/f691f37e57f04c152e23.woff +0 -0
- package/dist/main.js +0 -61323
- package/dist/main.js.map +0 -1
- package/src/assets/scripts/app 2.js +0 -645
- package/src/assets/scripts/app.js +0 -645
- package/src/assets/scripts/charts/chartJS/index.js +0 -148
- package/src/assets/scripts/charts/easyPieChart/index.js +0 -200
- package/src/assets/scripts/charts/index.js +0 -3
- package/src/assets/scripts/charts/sparkline/index.js +0 -208
- package/src/assets/scripts/chat/index.js +0 -11
- package/src/assets/scripts/components/Chart.js +0 -1390
- package/src/assets/scripts/components/Sidebar.js +0 -241
- package/src/assets/scripts/constants/colors.js +0 -274
- package/src/assets/scripts/datatable/index.js +0 -379
- package/src/assets/scripts/datepicker/index.js +0 -302
- package/src/assets/scripts/email/index.js +0 -25
- package/src/assets/scripts/fullcalendar/index.js +0 -86
- package/src/assets/scripts/googleMaps/index.js +0 -93
- package/src/assets/scripts/index.js +0 -18
- package/src/assets/scripts/masonry/index.js +0 -14
- package/src/assets/scripts/popover/index.js +0 -109
- package/src/assets/scripts/scrollbar/index.js +0 -10
- package/src/assets/scripts/search/index.js +0 -15
- package/src/assets/scripts/sidebar/index.js +0 -140
- package/src/assets/scripts/skycons/index.js +0 -52
- package/src/assets/scripts/ui/index.js +0 -412
- package/src/assets/scripts/utils/date.js +0 -242
- package/src/assets/scripts/utils/dom.js +0 -349
- package/src/assets/scripts/utils/index.js +0 -45
- package/src/assets/scripts/utils/theme.js +0 -107
- package/src/assets/scripts/vectorMaps/index.js +0 -277
- package/src/assets/styles/index.scss +0 -801
- package/src/assets/styles/spec/components/easyPieChart.scss +0 -11
- package/src/assets/styles/spec/components/footer.scss +0 -4
- package/src/assets/styles/spec/components/forms.scss +0 -288
- package/src/assets/styles/spec/components/index.scss +0 -9
- package/src/assets/styles/spec/components/loader.scss +0 -46
- package/src/assets/styles/spec/components/masonry.scss +0 -1
- package/src/assets/styles/spec/components/pageContainer.scss +0 -255
- package/src/assets/styles/spec/components/progressBar.scss +0 -6
- package/src/assets/styles/spec/components/sidebar.scss +0 -642
- package/src/assets/styles/spec/components/topbar.scss +0 -455
- package/src/assets/styles/spec/generic/base.scss +0 -102
- package/src/assets/styles/spec/generic/index.scss +0 -1
- package/src/assets/styles/spec/index.scss +0 -4
- package/src/assets/styles/spec/screens/chat.scss +0 -147
- package/src/assets/styles/spec/screens/email.scss +0 -108
- package/src/assets/styles/spec/screens/index.scss +0 -2
- package/src/assets/styles/spec/settings/baseColors.scss +0 -103
- package/src/assets/styles/spec/settings/borders.scss +0 -6
- package/src/assets/styles/spec/settings/breakpoints.scss +0 -26
- package/src/assets/styles/spec/settings/fonts.scss +0 -4
- package/src/assets/styles/spec/settings/index.scss +0 -4
- package/src/assets/styles/spec/settings/materialColors.scss +0 -550
- package/src/assets/styles/spec/tools/index.scss +0 -1
- package/src/assets/styles/spec/tools/mixins/clearfix.scss +0 -15
- package/src/assets/styles/spec/tools/mixins/index.scss +0 -3
- package/src/assets/styles/spec/tools/mixins/mediaQueriesRanges.scss +0 -58
- package/src/assets/styles/spec/tools/mixins/placeholder.scss +0 -10
- package/src/assets/styles/spec/utils/colors.scss +0 -33
- package/src/assets/styles/spec/utils/index.scss +0 -2
- package/src/assets/styles/spec/utils/layout/helpers/border.scss +0 -78
- package/src/assets/styles/spec/utils/layout/helpers/flex.scss +0 -220
- package/src/assets/styles/spec/utils/layout/helpers/index.scss +0 -11
- package/src/assets/styles/spec/utils/layout/helpers/layout.scss +0 -137
- package/src/assets/styles/spec/utils/layout/helpers/lists.scss +0 -23
- package/src/assets/styles/spec/utils/layout/helpers/margin.scss +0 -266
- package/src/assets/styles/spec/utils/layout/helpers/objects.scss +0 -91
- package/src/assets/styles/spec/utils/layout/helpers/padding.scss +0 -147
- package/src/assets/styles/spec/utils/layout/helpers/positions.scss +0 -118
- package/src/assets/styles/spec/utils/layout/helpers/pseudo.scss +0 -6
- package/src/assets/styles/spec/utils/layout/helpers/sizes.scss +0 -157
- package/src/assets/styles/spec/utils/layout/helpers/typography.scss +0 -127
- package/src/assets/styles/spec/utils/layout/index.scss +0 -3
- package/src/assets/styles/spec/utils/layout/mixins/generateResponsive.scss +0 -25
- package/src/assets/styles/spec/utils/layout/mixins/index.scss +0 -2
- package/src/assets/styles/spec/utils/layout/mixins/mediaQueryCondition.scss +0 -28
- package/src/assets/styles/spec/utils/layout/utils/center.scss +0 -54
- package/src/assets/styles/spec/utils/layout/utils/gap.scss +0 -229
- package/src/assets/styles/spec/utils/layout/utils/index.scss +0 -5
- package/src/assets/styles/spec/utils/layout/utils/layers.scss +0 -5
- package/src/assets/styles/spec/utils/layout/utils/peers.scss +0 -35
- package/src/assets/styles/utils/mobile.scss +0 -954
- package/src/assets/styles/utils/theme.css +0 -97
- package/src/assets/styles/vendor/datepicker.scss +0 -183
- package/src/assets/styles/vendor/font-awesome.css +0 -2337
- package/src/assets/styles/vendor/fullcalendar.scss +0 -217
- package/src/assets/styles/vendor/index.scss +0 -8
- package/src/assets/styles/vendor/jquery.datatables.scss +0 -162
- package/src/assets/styles/vendor/perfectScrollbar.scss +0 -4
- package/src/assets/styles/vendor/sparkline.scss +0 -6
- package/src/assets/styles/vendor/themify-icons.css +0 -1081
package/package.json
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adminator-admin-dashboard",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.5",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Adminator 2026 — vanilla-JS admin dashboard with a token-driven design system, dark mode, Chart.js, FullCalendar, and jsvectormap. No jQuery, no Bootstrap.",
|
|
6
6
|
"main": "dist/index.html",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"admin",
|
|
9
9
|
"dashboard",
|
|
10
10
|
"template",
|
|
11
|
-
"bootstrap",
|
|
12
|
-
"bootstrap5",
|
|
13
|
-
"jquery-free",
|
|
14
11
|
"vanilla-js",
|
|
15
12
|
"dark-mode",
|
|
13
|
+
"design-system",
|
|
14
|
+
"css-variables",
|
|
16
15
|
"responsive",
|
|
17
16
|
"mobile-first",
|
|
18
17
|
"scss",
|
|
@@ -21,7 +20,8 @@
|
|
|
21
20
|
"ui-kit",
|
|
22
21
|
"admin-panel",
|
|
23
22
|
"charts",
|
|
24
|
-
"
|
|
23
|
+
"fullcalendar",
|
|
24
|
+
"chartjs"
|
|
25
25
|
],
|
|
26
26
|
"author": "Aigars Silkalns <hello@colorlib.com> (https://colorlib.com)",
|
|
27
27
|
"license": "MIT",
|
|
@@ -49,67 +49,65 @@
|
|
|
49
49
|
"dev": "webpack-dashboard -t 'Project' -- webpack server",
|
|
50
50
|
"clean": "shx rm -rf ./dist",
|
|
51
51
|
"build": "npm run clean && cross-env webpack",
|
|
52
|
+
"build:analyze": "npm run clean && cross-env ANALYZE=true NODE_ENV=production webpack",
|
|
52
53
|
"release:minified": "npm run clean && NODE_ENV=production MINIFY=true cross-env webpack",
|
|
53
54
|
"release:unminified": "npm run clean && NODE_ENV=production MINIFY=false cross-env webpack",
|
|
54
55
|
"preview": "cross-env webpack server",
|
|
55
56
|
"lint:js": "eslint ./src ./webpack ./*.js -f table --ext .js --ext .jsx",
|
|
56
57
|
"lint:scss": "stylelint ./src/**/*.scss",
|
|
57
58
|
"lint": "npm run lint:js && npm run lint:scss",
|
|
58
|
-
"
|
|
59
|
+
"test": "vitest",
|
|
60
|
+
"test:run": "vitest run",
|
|
61
|
+
"test:coverage": "vitest run --coverage",
|
|
62
|
+
"screenshots": "node scripts/screenshots.mjs",
|
|
63
|
+
"prepublishOnly": "npm run lint && npm run build",
|
|
59
64
|
"postpublish": "echo 'Package published successfully! View at: https://www.npmjs.com/package/adminator-admin-dashboard'"
|
|
60
65
|
},
|
|
61
66
|
"devDependencies": {
|
|
62
|
-
"@babel/core": "^7.
|
|
63
|
-
"@babel/eslint-parser": "^7.28.
|
|
64
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
65
|
-
"@babel/preset-env": "^7.
|
|
66
|
-
"@eslint/js": "^9.
|
|
67
|
-
"@
|
|
68
|
-
"
|
|
69
|
-
"babel-loader": "^10.0.0",
|
|
67
|
+
"@babel/core": "^7.29.0",
|
|
68
|
+
"@babel/eslint-parser": "^7.28.6",
|
|
69
|
+
"@babel/plugin-transform-runtime": "^7.29.0",
|
|
70
|
+
"@babel/preset-env": "^7.29.5",
|
|
71
|
+
"@eslint/js": "^9.39.4",
|
|
72
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
73
|
+
"babel-loader": "^10.1.1",
|
|
70
74
|
"case-sensitive-paths-webpack-plugin": "^2.4.0",
|
|
71
|
-
"copy-webpack-plugin": "^
|
|
72
|
-
"cross-env": "^10.
|
|
73
|
-
"css-loader": "^7.1.
|
|
74
|
-
"css-minimizer-webpack-plugin": "^
|
|
75
|
-
"eslint": "^9.
|
|
75
|
+
"copy-webpack-plugin": "^14.0.0",
|
|
76
|
+
"cross-env": "^10.1.0",
|
|
77
|
+
"css-loader": "^7.1.4",
|
|
78
|
+
"css-minimizer-webpack-plugin": "^8.0.0",
|
|
79
|
+
"eslint": "^9.39.4",
|
|
76
80
|
"eslint-formatter-table": "^7.32.1",
|
|
77
|
-
"globals": "^
|
|
78
|
-
"html-webpack-plugin": "^5.6.
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"postcss
|
|
83
|
-
"
|
|
84
|
-
"
|
|
81
|
+
"globals": "^17.6.0",
|
|
82
|
+
"html-webpack-plugin": "^5.6.7",
|
|
83
|
+
"jsdom": "^29.1.1",
|
|
84
|
+
"mini-css-extract-plugin": "^2.10.2",
|
|
85
|
+
"playwright": "^1.60.0",
|
|
86
|
+
"postcss": "^8.5.15",
|
|
87
|
+
"postcss-loader": "^8.2.1",
|
|
88
|
+
"postcss-preset-env": "^11.3.0",
|
|
89
|
+
"sass": "^1.99.0",
|
|
90
|
+
"sass-loader": "^17.0.0",
|
|
85
91
|
"shx": "^0.4.0",
|
|
86
92
|
"style-loader": "^4.0.0",
|
|
87
|
-
"stylelint": "^
|
|
88
|
-
"stylelint-config-standard": "^
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"webpack
|
|
93
|
+
"stylelint": "^17.12.0",
|
|
94
|
+
"stylelint-config-standard": "^40.0.0",
|
|
95
|
+
"stylelint-config-standard-scss": "^17.0.0",
|
|
96
|
+
"vitest": "^4.1.7",
|
|
97
|
+
"webpack": "^5.107.0",
|
|
98
|
+
"webpack-bundle-analyzer": "^5.3.0",
|
|
99
|
+
"webpack-cli": "^7.0.2",
|
|
92
100
|
"webpack-dashboard": "^3.3.8",
|
|
93
|
-
"webpack-dev-server": "^5.2.
|
|
101
|
+
"webpack-dev-server": "^5.2.4"
|
|
94
102
|
},
|
|
95
103
|
"dependencies": {
|
|
96
|
-
"@babel/runtime": "^7.
|
|
97
|
-
"@fullcalendar/core": "^6.1.
|
|
98
|
-
"@fullcalendar/daygrid": "^6.1.
|
|
99
|
-
"@fullcalendar/interaction": "^6.1.
|
|
100
|
-
"@fullcalendar/list": "^6.1.
|
|
101
|
-
"@fullcalendar/timegrid": "^6.1.
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"brand-colors": "^2.1.1",
|
|
105
|
-
"chart.js": "^4.5.0",
|
|
106
|
-
"dayjs": "^1.11.13",
|
|
107
|
-
"jsvectormap": "^1.6.0",
|
|
108
|
-
"load-google-maps-api": "^2.0.2",
|
|
109
|
-
"lodash": "^4.17.21",
|
|
110
|
-
"masonry-layout": "^4.2.2",
|
|
111
|
-
"perfect-scrollbar": "^1.5.6",
|
|
112
|
-
"skycons": "^1.0.0",
|
|
113
|
-
"ts-api-utils": "^2.1.0"
|
|
104
|
+
"@babel/runtime": "^7.29.2",
|
|
105
|
+
"@fullcalendar/core": "^6.1.20",
|
|
106
|
+
"@fullcalendar/daygrid": "^6.1.20",
|
|
107
|
+
"@fullcalendar/interaction": "^6.1.20",
|
|
108
|
+
"@fullcalendar/list": "^6.1.20",
|
|
109
|
+
"@fullcalendar/timegrid": "^6.1.20",
|
|
110
|
+
"chart.js": "^4.5.1",
|
|
111
|
+
"jsvectormap": "^1.7.0"
|
|
114
112
|
}
|
|
115
113
|
}
|
package/src/404.html
CHANGED
|
@@ -1,22 +1,42 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
2
|
+
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1
|
|
6
|
-
<title>404</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>404 · 2026 Redesign Preview</title>
|
|
7
|
+
<script>
|
|
8
|
+
(function () {
|
|
9
|
+
try {
|
|
10
|
+
var saved = localStorage.getItem('dash26-theme');
|
|
11
|
+
var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
12
|
+
document.documentElement.setAttribute('data-theme', saved || (prefersDark ? 'dark' : 'light'));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
document.documentElement.setAttribute('data-theme', 'light');
|
|
15
|
+
}
|
|
16
|
+
})();
|
|
17
|
+
</script>
|
|
7
18
|
</head>
|
|
8
|
-
<body
|
|
9
|
-
<div class=
|
|
10
|
-
<div class=
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<body>
|
|
20
|
+
<div class="error-shell">
|
|
21
|
+
<div class="error-card">
|
|
22
|
+
<span class="error-eyebrow">Error · Not found</span>
|
|
23
|
+
<div class="error-code">404</div>
|
|
24
|
+
<h1 class="error-title">This page wandered off</h1>
|
|
25
|
+
<p class="error-sub">The link may be outdated, or the page might have been moved or deleted. Try the dashboard to get back on track.</p>
|
|
26
|
+
<div class="error-actions">
|
|
27
|
+
<a href="index.html" class="btn btn--primary">
|
|
28
|
+
<svg viewBox="0 0 24 24"><path d="M3 12 12 3l9 9"/><path d="M5 10v10h14V10"/></svg>
|
|
29
|
+
Back to dashboard
|
|
30
|
+
</a>
|
|
31
|
+
<a href="javascript:history.back()" class="btn btn--ghost">
|
|
32
|
+
<svg viewBox="0 0 24 24"><path d="M19 12H5M12 19l-7-7 7-7"/></svg>
|
|
33
|
+
Go back
|
|
34
|
+
</a>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="error-meta">
|
|
37
|
+
<span><strong>STATUS</strong> 404</span>
|
|
38
|
+
<span><strong>CODE</strong> NOT_FOUND</span>
|
|
39
|
+
<span><strong>REF</strong> a8c1-9f23</span>
|
|
20
40
|
</div>
|
|
21
41
|
</div>
|
|
22
42
|
</div>
|
package/src/500.html
CHANGED
|
@@ -1,22 +1,42 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
2
|
+
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1
|
|
6
|
-
<title>500</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>500 · 2026 Redesign Preview</title>
|
|
7
|
+
<script>
|
|
8
|
+
(function () {
|
|
9
|
+
try {
|
|
10
|
+
var saved = localStorage.getItem('dash26-theme');
|
|
11
|
+
var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
12
|
+
document.documentElement.setAttribute('data-theme', saved || (prefersDark ? 'dark' : 'light'));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
document.documentElement.setAttribute('data-theme', 'light');
|
|
15
|
+
}
|
|
16
|
+
})();
|
|
17
|
+
</script>
|
|
7
18
|
</head>
|
|
8
|
-
<body
|
|
9
|
-
<div class=
|
|
10
|
-
<div class=
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<body>
|
|
20
|
+
<div class="error-shell">
|
|
21
|
+
<div class="error-card">
|
|
22
|
+
<span class="error-eyebrow">Error · Server</span>
|
|
23
|
+
<div class="error-code">500</div>
|
|
24
|
+
<h1 class="error-title">Something broke on our end</h1>
|
|
25
|
+
<p class="error-sub">We've been notified and are looking into it. Please try again in a moment, or head back to the dashboard.</p>
|
|
26
|
+
<div class="error-actions">
|
|
27
|
+
<a href="javascript:location.reload()" class="btn btn--primary">
|
|
28
|
+
<svg viewBox="0 0 24 24"><path d="M21 12a9 9 0 1 1-3-6.7L21 8"/><path d="M21 3v5h-5"/></svg>
|
|
29
|
+
Try again
|
|
30
|
+
</a>
|
|
31
|
+
<a href="index.html" class="btn btn--ghost">
|
|
32
|
+
<svg viewBox="0 0 24 24"><path d="M3 12 12 3l9 9"/><path d="M5 10v10h14V10"/></svg>
|
|
33
|
+
Dashboard
|
|
34
|
+
</a>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="error-meta">
|
|
37
|
+
<span><strong>STATUS</strong> 500</span>
|
|
38
|
+
<span><strong>CODE</strong> INTERNAL_ERROR</span>
|
|
39
|
+
<span><strong>REF</strong> 7d2e-44b9</span>
|
|
20
40
|
</div>
|
|
21
41
|
</div>
|
|
22
42
|
</div>
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 2026 Shell renderer.
|
|
3
|
+
*
|
|
4
|
+
* Each page provides:
|
|
5
|
+
* <body data-active="dashboard" data-crumbs="Workspace | Dashboard">
|
|
6
|
+
* <div class="shell">
|
|
7
|
+
* <div data-shell-sidebar></div>
|
|
8
|
+
* <div class="main">
|
|
9
|
+
* <div data-shell-topbar></div>
|
|
10
|
+
* <main class="content"> ...page content... </main>
|
|
11
|
+
* <div data-shell-footer></div>
|
|
12
|
+
* </div>
|
|
13
|
+
* </div>
|
|
14
|
+
* </body>
|
|
15
|
+
*
|
|
16
|
+
* mountShell() fills the three placeholder divs with the shared chrome,
|
|
17
|
+
* marking the active sidebar item and writing the breadcrumbs.
|
|
18
|
+
*
|
|
19
|
+
* NAV is the single source of truth — adding a page is one entry here.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export const NAV = [
|
|
23
|
+
{
|
|
24
|
+
label: 'Workspace',
|
|
25
|
+
items: [
|
|
26
|
+
{ key: 'dashboard', text: 'Dashboard', href: 'index.html',
|
|
27
|
+
icon: '<path d="M3 12 12 3l9 9"/><path d="M5 10v10h14V10"/>' },
|
|
28
|
+
{ key: 'pro', text: 'Go Pro', href: '#', badge: { kind: 'pro', text: 'PRO' },
|
|
29
|
+
icon: '<path d="M12 2 15 8l6.5 1-4.8 4.6L18 20l-6-3-6 3 1.3-6.4L2.5 9 9 8z"/>' },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
label: 'Communications',
|
|
34
|
+
items: [
|
|
35
|
+
{ key: 'email', text: 'Email', href: 'email.html',
|
|
36
|
+
icon: '<rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/>' },
|
|
37
|
+
{ key: 'compose', text: 'Compose', href: 'compose.html',
|
|
38
|
+
icon: '<path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 1 1 3 3L7 19l-4 1 1-4z"/>' },
|
|
39
|
+
{ key: 'calendar', text: 'Calendar', href: 'calendar.html',
|
|
40
|
+
icon: '<rect x="3" y="4" width="18" height="18" rx="2"/><path d="M16 2v4M8 2v4M3 10h18"/>' },
|
|
41
|
+
{ key: 'chat', text: 'Chat', href: 'chat.html',
|
|
42
|
+
icon: '<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>' },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: 'Components',
|
|
47
|
+
items: [
|
|
48
|
+
{ key: 'charts', text: 'Charts', href: 'charts.html', badge: { kind: 'new', text: 'NEW' },
|
|
49
|
+
icon: '<path d="M3 20V4M7 20v-6M11 20v-10M15 20v-4M19 20V8"/>' },
|
|
50
|
+
{ key: 'forms', text: 'Forms', href: 'forms.html',
|
|
51
|
+
icon: '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 10h10M7 14h7"/>' },
|
|
52
|
+
{ key: 'ui', text: 'UI Elements', href: 'ui.html',
|
|
53
|
+
icon: '<circle cx="12" cy="12" r="9"/><path d="M8 12h8M12 8v8"/>' },
|
|
54
|
+
{ key: 'buttons', text: 'Buttons', href: 'buttons.html',
|
|
55
|
+
icon: '<rect x="3" y="8" width="18" height="8" rx="4"/>' },
|
|
56
|
+
{ key: 'tables', text: 'Tables',
|
|
57
|
+
icon: '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18M3 16h18M9 4v16"/>',
|
|
58
|
+
children: [
|
|
59
|
+
{ key: 'basic-table', text: 'Basic Table', href: 'basic-table.html' },
|
|
60
|
+
{ key: 'datatable', text: 'Data Table', href: 'datatable.html' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{ key: 'maps', text: 'Maps',
|
|
64
|
+
icon: '<path d="M9 20V4l6 4v16z"/><path d="M3 7l6-3v16l-6 3z"/><path d="M15 8l6-3v16l-6 3"/>',
|
|
65
|
+
children: [
|
|
66
|
+
{ key: 'google-maps', text: 'Google Map', href: 'google-maps.html' },
|
|
67
|
+
{ key: 'vector-maps', text: 'Vector Map', href: 'vector-maps.html' },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{ key: 'pages', text: 'Pages',
|
|
71
|
+
icon: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/>',
|
|
72
|
+
children: [
|
|
73
|
+
{ key: 'blank', text: 'Blank', href: 'blank.html' },
|
|
74
|
+
{ key: '404', text: '404', href: '404.html' },
|
|
75
|
+
{ key: '500', text: '500', href: '500.html' },
|
|
76
|
+
{ key: 'signin', text: 'Sign In', href: 'signin.html' },
|
|
77
|
+
{ key: 'signup', text: 'Sign Up', href: 'signup.html' },
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
const BRAND_LOGO = `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
|
|
85
|
+
<path fill="#ffffff" d="M14.747 9.125c.527-1.426 1.736-2.573 3.317-2.573c1.643 0 2.792 1.085 3.318 2.573l6.077 16.867c.186.496.248.931.248 1.147c0 1.209-.992 2.046-2.139 2.046c-1.303 0-1.954-.682-2.264-1.611l-.931-2.915h-8.62l-.93 2.884c-.31.961-.961 1.642-2.232 1.642c-1.24 0-2.294-.93-2.294-2.17c0-.496.155-.868.217-1.023l6.233-16.867zm.34 11.256h5.891l-2.883-8.992h-.062l-2.946 8.992z"/>
|
|
86
|
+
</svg>`;
|
|
87
|
+
|
|
88
|
+
const CHEV = '<svg class="chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="m9 18 6-6-6-6"/></svg>';
|
|
89
|
+
|
|
90
|
+
function renderNavLink(item, activeKey) {
|
|
91
|
+
const active = item.key === activeKey ? ' is-active' : '';
|
|
92
|
+
const badge = item.badge
|
|
93
|
+
? `<span class="nav-badge ${item.badge.kind}">${item.badge.text}</span>`
|
|
94
|
+
: '';
|
|
95
|
+
return `
|
|
96
|
+
<a class="nav-link${active}" href="${item.href}">
|
|
97
|
+
<svg viewBox="0 0 24 24">${item.icon}</svg>
|
|
98
|
+
<span>${item.text}</span>
|
|
99
|
+
${badge}
|
|
100
|
+
</a>`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function renderNavGroup(item, activeKey) {
|
|
104
|
+
const open = item.children.some((c) => c.key === activeKey) ? ' is-open' : '';
|
|
105
|
+
const submenu = item.children
|
|
106
|
+
.map((c) => `<a href="${c.href}">${c.text}</a>`)
|
|
107
|
+
.join('');
|
|
108
|
+
return `
|
|
109
|
+
<div class="nav-item-group${open}" data-nav-group>
|
|
110
|
+
<a class="nav-link" href="javascript:void(0)" data-nav-toggle>
|
|
111
|
+
<svg viewBox="0 0 24 24">${item.icon}</svg>
|
|
112
|
+
<span>${item.text}</span>
|
|
113
|
+
${CHEV}
|
|
114
|
+
</a>
|
|
115
|
+
<div class="nav-submenu">${submenu}</div>
|
|
116
|
+
</div>`;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function renderSection(section, activeKey) {
|
|
120
|
+
const items = section.items.map((item) => (
|
|
121
|
+
item.children ? renderNavGroup(item, activeKey) : renderNavLink(item, activeKey)
|
|
122
|
+
)).join('');
|
|
123
|
+
return `
|
|
124
|
+
<nav class="nav-section">
|
|
125
|
+
<div class="nav-label">${section.label}</div>
|
|
126
|
+
${items}
|
|
127
|
+
</nav>`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function renderSidebar(activeKey) {
|
|
131
|
+
const sections = NAV.map((s) => renderSection(s, activeKey)).join('');
|
|
132
|
+
return `
|
|
133
|
+
<aside class="d-sidebar">
|
|
134
|
+
<div class="brand">
|
|
135
|
+
<div class="brand-logo">${BRAND_LOGO}</div>
|
|
136
|
+
<div class="brand-text">
|
|
137
|
+
<div class="brand-name">Adminator</div>
|
|
138
|
+
<div class="brand-tag">v4.1.5 · preview</div>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
${sections}
|
|
142
|
+
<div class="sidebar-footer">
|
|
143
|
+
<div class="workspace">
|
|
144
|
+
<div class="workspace-avatar">JD</div>
|
|
145
|
+
<div class="workspace-text">
|
|
146
|
+
<div class="workspace-name">John Doe</div>
|
|
147
|
+
<div class="workspace-role">admin</div>
|
|
148
|
+
</div>
|
|
149
|
+
<svg class="workspace-chev" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8">
|
|
150
|
+
<path d="m7 9 5-5 5 5"/><path d="m7 15 5 5 5-5"/>
|
|
151
|
+
</svg>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
</aside>`;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function renderCrumbs(crumbsAttr) {
|
|
158
|
+
if (!crumbsAttr) return '';
|
|
159
|
+
const parts = crumbsAttr.split('|').map((p) => p.trim()).filter(Boolean);
|
|
160
|
+
const sep = '<svg class="sep" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="m9 18 6-6-6-6"/></svg>';
|
|
161
|
+
return parts.map((p, i) => {
|
|
162
|
+
const cls = i === parts.length - 1 ? ' class="current"' : '';
|
|
163
|
+
return `${i > 0 ? sep : ''}<span${cls}>${p}</span>`;
|
|
164
|
+
}).join('');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function renderTopbar(crumbsAttr) {
|
|
168
|
+
return `
|
|
169
|
+
<header class="d-topbar">
|
|
170
|
+
<div class="crumbs">
|
|
171
|
+
<button class="hamburger" data-drawer-open aria-label="Open navigation">
|
|
172
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
|
|
173
|
+
</button>
|
|
174
|
+
${renderCrumbs(crumbsAttr)}
|
|
175
|
+
</div>
|
|
176
|
+
<div class="topbar-actions">
|
|
177
|
+
<button class="cmd" data-palette-open>
|
|
178
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg>
|
|
179
|
+
<span>Search...</span>
|
|
180
|
+
<kbd class="kbd">⌘K</kbd>
|
|
181
|
+
</button>
|
|
182
|
+
|
|
183
|
+
<div class="dd-wrap">
|
|
184
|
+
<button class="icon-btn" data-dropdown aria-label="Notifications">
|
|
185
|
+
<svg viewBox="0 0 24 24"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
|
|
186
|
+
<span class="count danger">3</span>
|
|
187
|
+
</button>
|
|
188
|
+
<div class="dd-menu" role="menu">
|
|
189
|
+
<div class="dd-head">
|
|
190
|
+
<svg viewBox="0 0 24 24"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
|
|
191
|
+
Notifications
|
|
192
|
+
</div>
|
|
193
|
+
<div class="dd-list">
|
|
194
|
+
<a class="dd-item" href="#">
|
|
195
|
+
<div class="dd-avatar a1">JD</div>
|
|
196
|
+
<div class="dd-body">
|
|
197
|
+
<div class="dd-text"><strong>John Doe</strong> liked your <em>post</em></div>
|
|
198
|
+
<div class="dd-time">5 MIN AGO</div>
|
|
199
|
+
</div>
|
|
200
|
+
</a>
|
|
201
|
+
<a class="dd-item" href="#">
|
|
202
|
+
<div class="dd-avatar a2">MD</div>
|
|
203
|
+
<div class="dd-body">
|
|
204
|
+
<div class="dd-text"><strong>Moo Doe</strong> liked your <em>cover image</em></div>
|
|
205
|
+
<div class="dd-time">7 MIN AGO</div>
|
|
206
|
+
</div>
|
|
207
|
+
</a>
|
|
208
|
+
<a class="dd-item" href="#">
|
|
209
|
+
<div class="dd-avatar a3">LD</div>
|
|
210
|
+
<div class="dd-body">
|
|
211
|
+
<div class="dd-text"><strong>Lee Doe</strong> commented on your <em>video</em></div>
|
|
212
|
+
<div class="dd-time">10 MIN AGO</div>
|
|
213
|
+
</div>
|
|
214
|
+
</a>
|
|
215
|
+
</div>
|
|
216
|
+
<a class="dd-footer" href="#">View all notifications →</a>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<div class="dd-wrap">
|
|
221
|
+
<button class="icon-btn" data-dropdown aria-label="Messages">
|
|
222
|
+
<svg viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg>
|
|
223
|
+
<span class="count info">3</span>
|
|
224
|
+
</button>
|
|
225
|
+
<div class="dd-menu" role="menu">
|
|
226
|
+
<div class="dd-head">
|
|
227
|
+
<svg viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg>
|
|
228
|
+
Messages
|
|
229
|
+
</div>
|
|
230
|
+
<div class="dd-list">
|
|
231
|
+
<a class="dd-item" href="#">
|
|
232
|
+
<div class="dd-avatar a1">JD</div>
|
|
233
|
+
<div class="dd-body">
|
|
234
|
+
<div class="dd-row-head"><strong>John Doe</strong><span class="dd-time">5 MIN</span></div>
|
|
235
|
+
<div class="dd-preview">Want to create your own customized data generator for your app…</div>
|
|
236
|
+
</div>
|
|
237
|
+
</a>
|
|
238
|
+
<a class="dd-item" href="#">
|
|
239
|
+
<div class="dd-avatar a2">MD</div>
|
|
240
|
+
<div class="dd-body">
|
|
241
|
+
<div class="dd-row-head"><strong>Moo Doe</strong><span class="dd-time">15 MIN</span></div>
|
|
242
|
+
<div class="dd-preview">Want to create your own customized data generator for your app…</div>
|
|
243
|
+
</div>
|
|
244
|
+
</a>
|
|
245
|
+
<a class="dd-item" href="#">
|
|
246
|
+
<div class="dd-avatar a3">LD</div>
|
|
247
|
+
<div class="dd-body">
|
|
248
|
+
<div class="dd-row-head"><strong>Lee Doe</strong><span class="dd-time">25 MIN</span></div>
|
|
249
|
+
<div class="dd-preview">Want to create your own customized data generator for your app…</div>
|
|
250
|
+
</div>
|
|
251
|
+
</a>
|
|
252
|
+
</div>
|
|
253
|
+
<a class="dd-footer" href="#">View all messages →</a>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<button class="icon-btn" id="themeToggle" aria-label="Toggle theme"></button>
|
|
258
|
+
|
|
259
|
+
<div class="dd-wrap">
|
|
260
|
+
<div class="avatar" data-dropdown tabindex="0" role="button" aria-label="Account menu">JD</div>
|
|
261
|
+
<div class="dd-menu dd-profile" role="menu">
|
|
262
|
+
<div class="dd-profile-head">
|
|
263
|
+
<div class="dd-profile-name">John Doe</div>
|
|
264
|
+
<div class="dd-profile-email">john@adminator.app</div>
|
|
265
|
+
</div>
|
|
266
|
+
<a class="dd-menu-item" href="#">
|
|
267
|
+
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
|
|
268
|
+
Settings
|
|
269
|
+
</a>
|
|
270
|
+
<a class="dd-menu-item" href="#">
|
|
271
|
+
<svg viewBox="0 0 24 24"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
|
272
|
+
Profile
|
|
273
|
+
</a>
|
|
274
|
+
<a class="dd-menu-item" href="email.html">
|
|
275
|
+
<svg viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg>
|
|
276
|
+
Messages
|
|
277
|
+
</a>
|
|
278
|
+
<div class="dd-divider"></div>
|
|
279
|
+
<a class="dd-menu-item danger" href="#">
|
|
280
|
+
<svg viewBox="0 0 24 24"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9"/></svg>
|
|
281
|
+
Logout
|
|
282
|
+
</a>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</header>`;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function renderFooter() {
|
|
290
|
+
return `
|
|
291
|
+
<footer class="d-footer">
|
|
292
|
+
<div>© 2026 · Designed by <a href="https://colorlib.com" target="_blank" rel="nofollow noopener noreferrer">Colorlib</a></div>
|
|
293
|
+
<div class="d-footer-meta">
|
|
294
|
+
<span>v4.1.5</span>
|
|
295
|
+
<span>preview build</span>
|
|
296
|
+
</div>
|
|
297
|
+
</footer>`;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export function mountShell() {
|
|
301
|
+
const body = document.body;
|
|
302
|
+
const activeKey = body.getAttribute('data-active') || '';
|
|
303
|
+
const crumbs = body.getAttribute('data-crumbs') || '';
|
|
304
|
+
|
|
305
|
+
const sidebarHost = document.querySelector('[data-shell-sidebar]');
|
|
306
|
+
const topbarHost = document.querySelector('[data-shell-topbar]');
|
|
307
|
+
const footerHost = document.querySelector('[data-shell-footer]');
|
|
308
|
+
|
|
309
|
+
if (sidebarHost) sidebarHost.outerHTML = renderSidebar(activeKey);
|
|
310
|
+
if (topbarHost) topbarHost.outerHTML = renderTopbar(crumbs);
|
|
311
|
+
if (footerHost) footerHost.outerHTML = renderFooter();
|
|
312
|
+
}
|