adminator-admin-dashboard 2.9.0 → 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.
Files changed (179) hide show
  1. package/CHANGELOG.md +422 -0
  2. package/CLAUDE.md +126 -154
  3. package/README.md +322 -376
  4. package/dist/2026.js +8751 -0
  5. package/dist/2026.js.map +1 -0
  6. package/dist/404.html +36 -16
  7. package/dist/500.html +36 -16
  8. package/dist/assets/static/images/logo.svg +3 -3
  9. package/dist/basic-table.html +152 -699
  10. package/dist/blank.html +42 -507
  11. package/dist/buttons.html +152 -448
  12. package/dist/calendar.html +246 -658
  13. package/dist/charts.html +124 -658
  14. package/dist/chat.html +209 -706
  15. package/dist/compose.html +141 -618
  16. package/dist/datatable.html +467 -991
  17. package/dist/email.html +430 -943
  18. package/dist/forms.html +208 -733
  19. package/dist/google-maps.html +123 -513
  20. package/dist/index.html +436 -1041
  21. package/dist/runtime.js +1299 -0
  22. package/dist/runtime.js.map +1 -0
  23. package/dist/signin.html +92 -92
  24. package/dist/signup.html +106 -91
  25. package/dist/ui.html +268 -897
  26. package/dist/vector-maps.html +132 -511
  27. package/dist/vendor-chartjs.js +14593 -0
  28. package/dist/vendor-chartjs.js.map +1 -0
  29. package/dist/vendor-fullcalendar.js +14793 -0
  30. package/dist/vendor-fullcalendar.js.map +1 -0
  31. package/dist/vendors.js +3758 -0
  32. package/dist/vendors.js.map +1 -0
  33. package/package.json +47 -50
  34. package/src/404.html +35 -15
  35. package/src/500.html +35 -15
  36. package/src/assets/scripts/2026/Shell.js +312 -0
  37. package/src/assets/scripts/2026/calendar.js +123 -0
  38. package/src/assets/scripts/2026/charts.js +259 -0
  39. package/src/assets/scripts/2026/index.js +35 -0
  40. package/src/assets/scripts/2026/init.js +207 -0
  41. package/src/assets/scripts/2026/maps.js +78 -0
  42. package/src/assets/scripts/2026/palette.js +266 -0
  43. package/src/assets/static/images/logo.svg +3 -3
  44. package/src/assets/styles/2026/_animations.scss +14 -0
  45. package/src/assets/styles/2026/_auth.scss +215 -0
  46. package/src/assets/styles/2026/_base.scss +37 -0
  47. package/src/assets/styles/2026/_calendar.scss +380 -0
  48. package/src/assets/styles/2026/_charts.scss +44 -0
  49. package/src/assets/styles/2026/_chat.scss +350 -0
  50. package/src/assets/styles/2026/_components.scss +140 -0
  51. package/src/assets/styles/2026/_dashboard.scss +520 -0
  52. package/src/assets/styles/2026/_data.scss +130 -0
  53. package/src/assets/styles/2026/_dropdowns.scss +128 -0
  54. package/src/assets/styles/2026/_email.scss +599 -0
  55. package/src/assets/styles/2026/_error.scss +98 -0
  56. package/src/assets/styles/2026/_forms.scss +215 -0
  57. package/src/assets/styles/2026/_fullcalendar.scss +134 -0
  58. package/src/assets/styles/2026/_palette.scss +173 -0
  59. package/src/assets/styles/2026/_responsive.scss +229 -0
  60. package/src/assets/styles/2026/_shell.scss +290 -0
  61. package/src/assets/styles/2026/_tokens.scss +80 -0
  62. package/src/assets/styles/2026/_ui.scss +365 -0
  63. package/src/assets/styles/2026/index.scss +23 -0
  64. package/src/basic-table.html +153 -710
  65. package/src/blank.html +42 -517
  66. package/src/buttons.html +152 -458
  67. package/src/calendar.html +246 -668
  68. package/src/charts.html +124 -668
  69. package/src/chat.html +209 -716
  70. package/src/compose.html +142 -629
  71. package/src/datatable.html +466 -1000
  72. package/src/email.html +429 -952
  73. package/src/forms.html +207 -742
  74. package/src/google-maps.html +128 -523
  75. package/src/index.html +438 -1050
  76. package/src/signin.html +92 -92
  77. package/src/signup.html +106 -91
  78. package/src/ui.html +267 -906
  79. package/src/vector-maps.html +133 -522
  80. package/dist/1e59d2330b4c6deb84b3.ttf +0 -0
  81. package/dist/20fd1704ea223900efa9.woff2 +0 -0
  82. package/dist/29b39089170885ae2967.woff +0 -0
  83. package/dist/8b43027f47b20503057d.eot +0 -0
  84. package/dist/9bad94440d49256265a5.eot +0 -0
  85. package/dist/assets/fontawesome-webfont.svg +0 -2671
  86. package/dist/assets/themify.svg +0 -362
  87. package/dist/eda8b94308c6f538f04a.ttf +0 -0
  88. package/dist/f691f37e57f04c152e23.woff +0 -0
  89. package/dist/main.js +0 -61331
  90. package/dist/main.js.map +0 -1
  91. package/src/assets/scripts/app 2.js +0 -645
  92. package/src/assets/scripts/app.js +0 -645
  93. package/src/assets/scripts/charts/chartJS/index.js +0 -148
  94. package/src/assets/scripts/charts/easyPieChart/index.js +0 -200
  95. package/src/assets/scripts/charts/index.js +0 -3
  96. package/src/assets/scripts/charts/sparkline/index.js +0 -208
  97. package/src/assets/scripts/chat/index.js +0 -11
  98. package/src/assets/scripts/components/Chart.js +0 -1390
  99. package/src/assets/scripts/components/Sidebar.js +0 -241
  100. package/src/assets/scripts/constants/colors.js +0 -274
  101. package/src/assets/scripts/datatable/index.js +0 -379
  102. package/src/assets/scripts/datepicker/index.js +0 -302
  103. package/src/assets/scripts/email/index.js +0 -25
  104. package/src/assets/scripts/fullcalendar/index.js +0 -86
  105. package/src/assets/scripts/googleMaps/index.js +0 -93
  106. package/src/assets/scripts/index.js +0 -18
  107. package/src/assets/scripts/masonry/index.js +0 -14
  108. package/src/assets/scripts/popover/index.js +0 -109
  109. package/src/assets/scripts/scrollbar/index.js +0 -10
  110. package/src/assets/scripts/search/index.js +0 -15
  111. package/src/assets/scripts/sidebar/index.js +0 -140
  112. package/src/assets/scripts/skycons/index.js +0 -52
  113. package/src/assets/scripts/ui/index.js +0 -412
  114. package/src/assets/scripts/utils/date.js +0 -242
  115. package/src/assets/scripts/utils/dom.js +0 -349
  116. package/src/assets/scripts/utils/index.js +0 -45
  117. package/src/assets/scripts/utils/theme.js +0 -107
  118. package/src/assets/scripts/vectorMaps/index.js +0 -277
  119. package/src/assets/styles/index.scss +0 -801
  120. package/src/assets/styles/spec/components/easyPieChart.scss +0 -11
  121. package/src/assets/styles/spec/components/footer.scss +0 -4
  122. package/src/assets/styles/spec/components/forms.scss +0 -288
  123. package/src/assets/styles/spec/components/index.scss +0 -9
  124. package/src/assets/styles/spec/components/loader.scss +0 -46
  125. package/src/assets/styles/spec/components/masonry.scss +0 -1
  126. package/src/assets/styles/spec/components/pageContainer.scss +0 -255
  127. package/src/assets/styles/spec/components/progressBar.scss +0 -6
  128. package/src/assets/styles/spec/components/sidebar.scss +0 -642
  129. package/src/assets/styles/spec/components/topbar.scss +0 -455
  130. package/src/assets/styles/spec/generic/base.scss +0 -102
  131. package/src/assets/styles/spec/generic/index.scss +0 -1
  132. package/src/assets/styles/spec/index.scss +0 -4
  133. package/src/assets/styles/spec/screens/chat.scss +0 -147
  134. package/src/assets/styles/spec/screens/email.scss +0 -108
  135. package/src/assets/styles/spec/screens/index.scss +0 -2
  136. package/src/assets/styles/spec/settings/baseColors.scss +0 -103
  137. package/src/assets/styles/spec/settings/borders.scss +0 -6
  138. package/src/assets/styles/spec/settings/breakpoints.scss +0 -26
  139. package/src/assets/styles/spec/settings/fonts.scss +0 -4
  140. package/src/assets/styles/spec/settings/index.scss +0 -4
  141. package/src/assets/styles/spec/settings/materialColors.scss +0 -550
  142. package/src/assets/styles/spec/tools/index.scss +0 -1
  143. package/src/assets/styles/spec/tools/mixins/clearfix.scss +0 -15
  144. package/src/assets/styles/spec/tools/mixins/index.scss +0 -3
  145. package/src/assets/styles/spec/tools/mixins/mediaQueriesRanges.scss +0 -58
  146. package/src/assets/styles/spec/tools/mixins/placeholder.scss +0 -10
  147. package/src/assets/styles/spec/utils/colors.scss +0 -33
  148. package/src/assets/styles/spec/utils/index.scss +0 -2
  149. package/src/assets/styles/spec/utils/layout/helpers/border.scss +0 -78
  150. package/src/assets/styles/spec/utils/layout/helpers/flex.scss +0 -220
  151. package/src/assets/styles/spec/utils/layout/helpers/index.scss +0 -11
  152. package/src/assets/styles/spec/utils/layout/helpers/layout.scss +0 -137
  153. package/src/assets/styles/spec/utils/layout/helpers/lists.scss +0 -23
  154. package/src/assets/styles/spec/utils/layout/helpers/margin.scss +0 -266
  155. package/src/assets/styles/spec/utils/layout/helpers/objects.scss +0 -91
  156. package/src/assets/styles/spec/utils/layout/helpers/padding.scss +0 -147
  157. package/src/assets/styles/spec/utils/layout/helpers/positions.scss +0 -118
  158. package/src/assets/styles/spec/utils/layout/helpers/pseudo.scss +0 -6
  159. package/src/assets/styles/spec/utils/layout/helpers/sizes.scss +0 -157
  160. package/src/assets/styles/spec/utils/layout/helpers/typography.scss +0 -127
  161. package/src/assets/styles/spec/utils/layout/index.scss +0 -3
  162. package/src/assets/styles/spec/utils/layout/mixins/generateResponsive.scss +0 -25
  163. package/src/assets/styles/spec/utils/layout/mixins/index.scss +0 -2
  164. package/src/assets/styles/spec/utils/layout/mixins/mediaQueryCondition.scss +0 -28
  165. package/src/assets/styles/spec/utils/layout/utils/center.scss +0 -54
  166. package/src/assets/styles/spec/utils/layout/utils/gap.scss +0 -229
  167. package/src/assets/styles/spec/utils/layout/utils/index.scss +0 -5
  168. package/src/assets/styles/spec/utils/layout/utils/layers.scss +0 -5
  169. package/src/assets/styles/spec/utils/layout/utils/peers.scss +0 -35
  170. package/src/assets/styles/utils/mobile.scss +0 -954
  171. package/src/assets/styles/utils/theme.css +0 -97
  172. package/src/assets/styles/vendor/datepicker.scss +0 -183
  173. package/src/assets/styles/vendor/font-awesome.css +0 -2337
  174. package/src/assets/styles/vendor/fullcalendar.scss +0 -217
  175. package/src/assets/styles/vendor/index.scss +0 -8
  176. package/src/assets/styles/vendor/jquery.datatables.scss +0 -162
  177. package/src/assets/styles/vendor/perfectScrollbar.scss +0 -4
  178. package/src/assets/styles/vendor/sparkline.scss +0 -6
  179. package/src/assets/styles/vendor/themify-icons.css +0 -1081
package/CHANGELOG.md CHANGED
@@ -1,5 +1,427 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.1.5] - 2026-05-22
4
+
5
+ ### Sidebar scroll + submenu clipping fix at rail widths
6
+
7
+ Follow-up to v4.1.4. At rail mode (721–1100px viewports), short-but-tall sidebars (e.g. 750×590) had two issues:
8
+
9
+ - The sidebar didn't scroll, so users on short viewports couldn't reach the lower nav items
10
+ - Submenu flyouts (Pages, Tables, Maps) were clipped when opened near the bottom of the viewport because the flyout was `position: absolute` inside an `overflow-y: visible` sidebar
11
+
12
+ Fix: switched the sidebar to `overflow-y: auto` at the 1100px breakpoint, and re-anchored the rail-mode submenu flyouts to `position: fixed` so they can escape the sidebar's scroll container and be shifted up by JS when opened near the viewport bottom.
13
+
14
+ ### Docs site live
15
+
16
+ The new documentation site at [adminator.colorlib.com/docs/](https://adminator.colorlib.com/docs/) is now linked from the README's header row. Eight pages covering architecture, theming, charts, calendar/maps, page authoring, deployment, and migrating from v3.
17
+
18
+ ### NPM publish
19
+
20
+ This is the first npm publish on the v4 line. Previous npm versions (2.7.x – 2.9.0) point to legacy code; do not install with `@^2` or `@^3` if you want the 2026 redesign. Always use `npm install adminator-admin-dashboard` (no version pin) or `npm install adminator-admin-dashboard@latest`.
21
+
22
+ ## [4.1.4] - 2026-05-21
23
+
24
+ ### Mobile sidebar drawer — submenu and scroll fixes
25
+
26
+ Two issues at ≤720px viewports, both caused by the 1100px rail-mode rules leaking through to mobile without proper overrides.
27
+
28
+ #### Submenu rendered as a right-hand flyout instead of expanding inline
29
+
30
+ When a child page was active (e.g. Pages → Blank), opening the mobile drawer showed the submenu as a floating card positioned to the right of the parent — the same `position: absolute; left: calc(100% + 10px)` styling intended for the 72px rail mode. The ≤720px block did `display: revert` on `.nav-submenu` but didn't reset the absolute positioning, background, or shadow, so the rail flyout styling carried over.
31
+
32
+ Fix: at ≤720px, reset `.nav-item-group` and `.nav-submenu` back to inline-accordion (static positioning, transparent background, no border/shadow, normal `margin-left: 20px`, max-height transition) — matching desktop behavior at ≥1101px.
33
+
34
+ Closes [#348](https://github.com/puikinsh/Adminator-admin-dashboard/issues/348).
35
+
36
+ #### Sidebar drawer couldn't scroll when content exceeded viewport
37
+
38
+ The rail-mode block sets `.d-sidebar { overflow-y: visible }` so flyout submenus can escape the sidebar bounds. The ≤720px block didn't restore `overflow-y: auto`, so on phones the drawer was a fixed-height non-scrolling container — bottom nav items (workspace footer, last sidebar entries) were unreachable when the screen was shorter than the menu.
39
+
40
+ Fix: at ≤720px, restore `overflow-y: auto` plus `overscroll-behavior: contain` so the drawer scrolls independently without bleeding scroll events into the locked page behind it.
41
+
42
+ Closes [#349](https://github.com/puikinsh/Adminator-admin-dashboard/issues/349).
43
+
44
+ ## [4.1.3] - 2026-05-20
45
+
46
+ ### Sidebar submenu fix at rail widths (721–1100px)
47
+
48
+ Parent nav items with children (Pages, Tables, Maps) didn't expand when the sidebar collapsed to its 72px icon rail. The responsive rule was hiding `.nav-submenu` entirely with `display: none`, so clicking the parent toggled `is-open` on an unreachable element. The chevron was hidden too, removing any affordance for the behavior.
49
+
50
+ The submenu now renders as a click-triggered flyout anchored to the right of the rail icon (200px wide, card background, dismisses on outside click, only one open at a time). Desktop inline expansion (>1100px) and the mobile drawer (≤720px) are unchanged.
51
+
52
+ Closes [#346](https://github.com/puikinsh/Adminator-admin-dashboard/issues/346).
53
+
54
+ ### Dependency updates
55
+
56
+ - `eslint` family held at 9.x — `@babel/eslint-parser` doesn't yet support ESLint 10
57
+ - Bumped: `@babel/preset-env`, `@vitest/coverage-v8`, `globals`, `jsdom`, `playwright`, `postcss`, `postcss-preset-env`, `sass-loader` (16→17), `stylelint`, `vitest`, `webpack` 5.106→5.107
58
+ - Resolved 5 security advisories via `npm audit fix`:
59
+ - `fast-uri` <3.1.1 — path traversal + host confusion (GHSA-q3j6-qgpj-74h6, GHSA-v39h-62p7-jpjc)
60
+ - `ws` 8.0.0–8.20.0 — uninitialized memory disclosure (GHSA-58qx-3vcg-4xpx)
61
+ - 0 vulnerabilities reported by `npm audit`
62
+
63
+ ## [4.1.2] - 2026-04-29
64
+
65
+ ### Mobile layout fixes
66
+
67
+ The ≤720px viewport was effectively unusable: the entire app squeezed into a 0px-wide strip, the topbar overflowed, dropdowns ran off-screen, and the chat/auth pages still rendered their desktop split layouts. v4.1.2 makes the template actually work on a phone.
68
+
69
+ #### The shell collapse bug (root cause)
70
+
71
+ `_responsive.scss` switched the shell to `grid-template-columns: 0 1fr` at ≤720px so `.main` would fill the viewport while the sidebar became a position-fixed drawer. But making the sidebar `position: fixed` removes it from grid auto-placement, and the auto-placer dropped `.main` into the (now empty) column-1 — which is 0px wide. Result: a 0px main column, the topbar reduced to 24px, and the entire content strip rendered at zero width while the rest of the viewport sat blank.
72
+
73
+ Fix: collapse the shell to `display: block` at ≤720px so `.main` flows naturally below the off-grid drawer.
74
+
75
+ #### The source-order bug (chat / auth)
76
+
77
+ `_chat.scss` and `_auth.scss` defined responsive overrides like `.chat-rail { display: none }` inside an `@media (max-width: 720px)` block — *before* the rule that gives `.chat-rail` its default `display: flex`. CSS resolves equal-specificity conflicts by source order, so the later default rule won at every viewport, including mobile. The chat page rendered both the conversations rail and the chat pane stacked vertically; the auth pages kept the marketing aside even on phones.
78
+
79
+ Fix: moved chat (`max-width: 720px` + `1100px` overrides) and auth (`max-width: 900px` + `720px` overrides) media blocks into `_responsive.scss`, which is `@use`d last in `index.scss` so its rules win.
80
+
81
+ #### Topbar overcrowding
82
+
83
+ At 390px the topbar tried to fit hamburger + crumbs + 220px-wide search + 3 icon buttons + theme toggle + avatar. Now at ≤720px:
84
+
85
+ - Crumbs hide everything except the current page (with ellipsis if long)
86
+ - Search collapses from a 220px text button to a 36×36 icon button
87
+ - Action gap tightens from 6px to 2px
88
+ - Topbar padding drops from 32px to 12px
89
+
90
+ #### Dropdowns overflowing the viewport
91
+
92
+ Notification, message, and profile dropdowns had `min-width: 340px` — wider than a 320–375px viewport, so they clipped off-screen. Now constrained to `width: calc(100vw - 16px)` with sane max-widths.
93
+
94
+ #### Other missing rules
95
+
96
+ - `.sv-regions` (4-col → 1-col), `.wx-hero` and `.sales-summary` stacking, KPI grid full-width, hero actions wrap
97
+ - `.chart-canvas-wrap` min-height drops from 240px to 200px so charts breathe
98
+ - New `.table-scroll` wrapper utility — wrapping any `<table>` lets it scroll horizontally instead of overflowing the card
99
+ - Compose form's three inline `grid-template-columns: 64px 1fr` rows tagged with a `.compose-row` class so they collapse to a single column on mobile
100
+ - New ≤480px breakpoint for very narrow phones: monthly-footer 1-col, weather forecast 2-col, form actions full-width, social row stacked
101
+
102
+ #### Brand version
103
+
104
+ `Shell.js` brand tag and footer were still showing `v3.1` / `v3.1.0` from a pre-redesign snapshot — now match `package.json` (`v4.1.2`).
105
+
106
+ ### Files touched
107
+
108
+ - `src/assets/styles/2026/_responsive.scss` — main rewrite (chat/auth/email/dashboard/topbar/dropdowns/tables consolidated here)
109
+ - `src/assets/styles/2026/_chat.scss`, `_auth.scss` — removed broken in-partial @media blocks
110
+ - `src/assets/styles/2026/_components.scss` — new `.table-scroll` utility
111
+ - `src/basic-table.html` — wrapped both tables in `.table-scroll`
112
+ - `src/compose.html` — added `.compose-row` class to three grid rows
113
+ - `src/assets/scripts/2026/Shell.js` — brand tag + footer version strings
114
+
115
+ ### Verified
116
+
117
+ Lint clean (eslint 0/0, stylelint 0/0). Production build clean. Visual mobile verification (390×844 via CDP) on dashboard, email, calendar, charts, datatable, basic-table, compose, chat, forms, and signin — all render correctly.
118
+
119
+ ---
120
+
121
+ ## [4.1.1] - 2026-04-29
122
+
123
+ ### Live preview migrated to R2
124
+
125
+ Adminator's live preview was on the legacy `colorlib.com/polygon/adminator/` path (manually maintained, was running an outdated v4.0.0 build). Migrated to the modern Cloudflare R2 hosting where the other 45 Colorlib templates live:
126
+
127
+ - **New preview URL:** <https://preview.colorlib.com/theme/adminator/>
128
+ - **New download URL:** <https://downloads.colorlib.com/theme/adminator.zip>
129
+
130
+ Now serves the v4.1.0 build (with the ⌘K palette and mobile drawer working). Future releases auto-update via the same `rclone sync` deploy.
131
+
132
+ ### URL refactor
133
+
134
+ Updated 7 WP posts that linked to the old polygon URL:
135
+
136
+ - **Colorlib:** #34814 (35 Best Free Admin Dashboards), #374836 (20 Best Dark Admin Dashboards)
137
+ - **AdminLTE.io:** #322 (32 Best Free & Premium), #712 (18 Best HTML), #989 (26 Best Bootstrap Login Forms — sign-in URL), #4605 (20 Best E-Commerce), #1146 (25 Best Bootstrap 5)
138
+
139
+ Plus 25 local references across `scripts/`, `README.md`, `docs/`, and `docs/_config.yml`.
140
+
141
+ ### No source changes
142
+
143
+ JS/CSS/HTML in `src/` are unchanged from v4.1.0. This is a deploy + URL maintenance release.
144
+
145
+ ---
146
+
147
+ ## [4.1.0] - 2026-04-28
148
+
149
+ ### Three quality fixes for the v4 release
150
+
151
+ #### Command palette (⌘K / Ctrl+K)
152
+
153
+ The "⌘K" search button in the topbar now actually opens a real command palette. Previously it was decorative.
154
+
155
+ - Click the topbar search button, or press **⌘K / Ctrl+K** anywhere on the page, or press **/** when no input is focused
156
+ - Searches every page in the NAV manifest plus a few global actions (toggle theme, view docs, view repo)
157
+ - Keyboard navigation: ↑/↓ to move, Enter to select, Esc to close
158
+ - Case-insensitive substring + ranked matching (exact > prefix > substring)
159
+ - Closes on backdrop click, Esc, or selecting a result
160
+
161
+ New module: `src/assets/scripts/2026/palette.js`. New SCSS partial: `_palette.scss`. The `NAV` manifest in `Shell.js` is now exported so the palette can read it.
162
+
163
+ #### Mobile drawer
164
+
165
+ The sidebar previously collapsed to `display: none` under 720px viewport with no way to open it — mobile users couldn't navigate at all. Now:
166
+
167
+ - A hamburger button appears in the topbar at ≤720px (rendered by `Shell.js`)
168
+ - Clicking it slides the sidebar in from the left as an off-canvas drawer
169
+ - A semi-transparent backdrop appears behind the drawer
170
+ - Closes on backdrop click, Esc, or selecting a real navigation link
171
+ - Body scroll is locked while the drawer is open
172
+
173
+ Implementation: `_responsive.scss` rewrites the ≤720px sidebar from `display: none` to `position: fixed; transform: translateX(-100%)` with a `.has-drawer-open` body class as the trigger. `init.js` adds an `initMobileDrawer()` function that handles the toggle + auto-close behavior.
174
+
175
+ #### Test suite (75 tests)
176
+
177
+ v3 had 65 tests for utility modules that no longer exist. This release adds a fresh suite covering the v4 modules:
178
+
179
+ | Test file | Coverage |
180
+ |-----------|----------|
181
+ | `tests/shell.test.js` | NAV manifest validation, mountShell rendering, active state, breadcrumbs, hamburger + palette triggers, standalone-page no-op |
182
+ | `tests/init.test.js` | Theme toggle (icon swap, persistence, dark/light flip), hero date, nav groups, dropdowns (open/close/escape/exclusivity), todos, accordions, tab groups, mobile drawer (open/close/Esc/backdrop/auto-close-on-link) |
183
+ | `tests/palette.test.js` | open/close/isOpen, mounting (lazy + remount-after-detach), all triggers (button click, ⌘K, Ctrl+K, /), keyboard navigation (↑/↓ bounds), filtering (substring, case-insensitive, no-results), action execution (open external link, toggle theme) |
184
+ | `tests/charts-seeds.test.js` | SEEDS export, every seed function returns a valid Chart.js config and references the tokens it received (so theme changes flow through) |
185
+
186
+ Run with `npm run test:run` (one-shot) or `npm run test` (watch mode). Coverage report via `npm run test:coverage`.
187
+
188
+ ### Bug fixes shaken out by tests
189
+
190
+ - **Palette listeners registered on every `initPalette()` call.** Multiple identical handlers fired per event, which cancelled out toggles (e.g. ⌘K to open then ⌘K to close). Added `_initialized` guard so listeners attach exactly once per page.
191
+ - **Palette cached stale DOM refs after `<body>` reset.** When `<body>` was wiped (e.g. between tests, or by user code), the cached `modal/input/resultsEl` references pointed to detached nodes. `ensureMounted()` now checks `document.contains(modal)` and re-mounts if needed.
192
+
193
+ ### Other
194
+
195
+ - `vitest.config.js` updated to scope coverage to `src/assets/scripts/2026/**` and exclude the entry file
196
+ - `tests/setup.js` provides an in-memory localStorage mock (jsdom 29 ships without one) and a `matchMedia` stub
197
+
198
+ ### Build size
199
+
200
+ Practically unchanged — the palette adds ~1.2 KB minified JS and ~1.1 KB minified CSS. Drawer adds <1 KB to JS, ~600 bytes to CSS. Test files don't ship.
201
+
202
+ ---
203
+
204
+ ## [4.0.1] - 2026-04-28
205
+
206
+ ### Documentation rewrite
207
+
208
+ Full rewrite of the documentation site at <https://puikinsh.github.io/Adminator-admin-dashboard/> for the v4 architecture. Removes all v3-era references (Bootstrap, AdminatorApp, Sidebar component, Theme JS module, DOM/Events/Storage utility classes).
209
+
210
+ **New pages:**
211
+
212
+ - **Architecture** — page anatomy, Shell.js renderer, boot sequence
213
+ - **Components reference** — every UI primitive with markup (buttons, alerts, badges, forms, tabs, accordions, modals, dropdowns, tables)
214
+ - **Library integrations** — how Chart.js / FullCalendar / jsvectormap stay theme-aware
215
+ - **Pages reference** — what each of the 18 pages contains
216
+ - **Migration from v3** — full v3 → v4 mapping (CSS vars, classes, JS APIs)
217
+ - **Adding a new page** — three-step recipe
218
+
219
+ **Rewritten pages:**
220
+
221
+ - Home, Getting started flow (installation, project structure, development, production build)
222
+ - Token system (the new `_tokens.scss` reference replacing v3's CSS variable docs)
223
+ - JavaScript API reference (Shell.js, init.js, charts.js, calendar.js, maps.js)
224
+ - Practical recipes (replaces "Theme integration examples")
225
+ - Component dev guide (was COMPONENT_GUIDE.md)
226
+
227
+ Also publishes the content/listing scripts under `scripts/`:
228
+
229
+ - `screenshots-for-posts.mjs` — Playwright captures at exact target dimensions
230
+ - `publish-post-screenshots.mjs` — swaps existing post images and bumps publish dates
231
+ - `insert-adminator-listings.mjs` — inserts new entries into listicle posts
232
+ - `move-adminator-position.mjs` — reorders a listicle entry's position
233
+
234
+ And the `screenshots/posts/` library used by the publish pipeline.
235
+
236
+ No source changes — all 18 pages, the JS modules, and the SCSS partials are unchanged from v4.0.0. This is a documentation-only release.
237
+
238
+ ---
239
+
240
+ ## [4.0.0] - 2026-04-27
241
+
242
+ ### The 2026 Redesign
243
+
244
+ A ground-up rewrite of the design system. New visual language, new shell architecture, dramatically smaller bundle. Every page redesigned. **Bootstrap dropped.** The legacy v3 architecture is preserved on the [`legacy-v3`](https://github.com/puikinsh/Adminator-admin-dashboard/tree/legacy-v3) branch for anyone who prefers the old look.
245
+
246
+ ### Highlights
247
+
248
+ - **New design system, single source of truth.** All visual decisions live in `_tokens.scss` — colors, typography, spacing, shadows, all as CSS variables with light/dark variants. Change one variable, every component updates.
249
+ - **Token-driven dark mode.** No more dual stylesheets. Toggle `data-theme="dark"` on `<html>` and every component (including Chart.js, FullCalendar, jsvectormap) re-renders in the active theme.
250
+ - **Bootstrap removed.** All UI primitives are custom — buttons, dropdowns, tabs, modals, alerts, badges, progress bars, accordions. None of them depend on Bootstrap CSS or JS. The bundle is ~85% smaller as a result.
251
+ - **Single shell, rendered from a manifest.** `Shell.js` reads a `NAV` array and renders the sidebar, topbar, and footer for every page. Adding a nav item is one line; updating the workspace name updates 18 pages at once.
252
+ - **All 18 pages redesigned**: Dashboard, Email, Calendar, Chat, Compose, Charts, Forms, UI Elements, Buttons, Basic Table, Data Table, Google Maps, Vector Maps, Blank, Sign In, Sign Up, 404, 500.
253
+
254
+ ### Bundle size
255
+
256
+ | Metric | v3.0.0 | v4.0.0 | Δ |
257
+ | -------------------------- | ---------------- | ---------------- | -------- |
258
+ | Production JS (total) | ~4.5 MB | ~700 KB | **−85%** |
259
+ | Production CSS | ~280 KB | 90 KB | **−68%** |
260
+ | Webpack entries | 1 (legacy) | 1 (clean) | — |
261
+ | Webpack plugins/configs | 7 files | 7 files (cleaner)| — |
262
+ | Top-level npm dependencies | 16 | 8 | **−50%** |
263
+
264
+ ### Architecture changes
265
+
266
+ - **One JS entry**: `src/assets/scripts/2026/index.js`. Imports the SCSS bundle, mounts the shell, runs init.
267
+ - **One SCSS root**: `src/assets/styles/2026/index.scss`. 18 partials covering tokens, base, animations, shell, dropdowns, components, forms, UI, auth, error, chat, data, charts, dashboard, email, calendar, FullCalendar overrides, and responsive.
268
+ - **Page anatomy**: every shell page declares `<body data-active="..." data-crumbs="...">` and three placeholder divs. The shell renders around them. See [CLAUDE.md](CLAUDE.md) for the full pattern.
269
+ - **Real, themed library integrations**: Chart.js (6 chart types), FullCalendar (full month/week/day/agenda views with 24 seed events), jsvectormap (world map with markers). All read CSS variables and re-render on theme toggle via a `MutationObserver` on `data-theme`.
270
+
271
+ ### Removed
272
+
273
+ - `bootstrap` (5.3.8) — not used anywhere in the new design
274
+ - `@popperjs/core` (2.11.8) — only needed by Bootstrap
275
+ - `dayjs` (1.11.20) — replaced by native `Intl.DateTimeFormat`
276
+ - `perfect-scrollbar` (1.5.6) — native scrollbars styled via CSS
277
+ - `masonry-layout` (4.2.2) — unused
278
+ - `load-google-maps-api` (2.0.2) — replaced with iframe embed
279
+ - `skycons` (1.0.0) — replaced with inline SVG weather icons
280
+ - `brand-colors` (2.1.1) — replaced by token system
281
+ - Legacy `src/assets/scripts/{app.js, components/, utils/, charts/, fullcalendar/, datatable/, ...}` — entire legacy JS tree
282
+ - Legacy `src/assets/styles/{spec/, vendor/, utils/, index.scss}` — entire legacy SCSS tree
283
+ - `tests/utils/` (3 test files) — they tested utils that no longer exist; new tests pending
284
+
285
+ ### Migration guide
286
+
287
+ If you're upgrading an existing v3 project:
288
+
289
+ 1. **Treat this as a rewrite, not a patch.** Class names, file paths, and JS APIs all changed.
290
+ 2. **Custom theme work?** Move your color overrides from Bootstrap variables to `_tokens.scss`.
291
+ 3. **Custom pages?** Adopt the new page anatomy (`data-active`, `data-crumbs`, three placeholder divs).
292
+ 4. **Custom JS components?** The legacy `AdminatorApp` / `Sidebar` / `ChartComponent` classes are gone — port to the data-attribute driven pattern (see `init.js` for examples).
293
+ 5. **Want to stay on v3?** Use the [`legacy-v3`](https://github.com/puikinsh/Adminator-admin-dashboard/tree/legacy-v3) branch — it's preserved indefinitely.
294
+
295
+ ### Tooling
296
+
297
+ - ESLint 9 (flat config) — 0 errors, 0 warnings
298
+ - Stylelint 17 — 0 errors, 0 warnings
299
+ - Sass migrated from `@import` (deprecated) to `@use`
300
+ - Webpack 5 build still in place; **Vite migration planned for v4.1.0**
301
+
302
+ ---
303
+
304
+ ## [3.0.0] - 2026-01-13
305
+
306
+ ### Major Architecture & Developer Experience Release
307
+
308
+ This release represents a comprehensive overhaul of the template's architecture, adding professional-grade utilities, testing infrastructure, security hardening, and optimized build configuration. This is the most developer-friendly release yet.
309
+
310
+ ### Key Improvements
311
+
312
+ #### New Utility Modules
313
+ - **Events** (`src/assets/scripts/utils/events.js`) - Event delegation, debounce, throttle utilities
314
+ - **Performance** (`src/assets/scripts/utils/performance.js`) - ResizeObserver, IntersectionObserver, lazy loading
315
+ - **Storage** (`src/assets/scripts/utils/storage.js`) - Safe localStorage wrapper with in-memory fallback
316
+ - **Sanitize** (`src/assets/scripts/utils/sanitize.js`) - HTML/input sanitization for XSS prevention
317
+ - **Logger** (`src/assets/scripts/utils/logger.js`) - Development-only logging utility
318
+
319
+ #### Testing Infrastructure
320
+ - **Vitest** - Modern testing framework with fast execution
321
+ - **Coverage Reports** - V8-based code coverage via `npm run test:coverage`
322
+ - **JSDOM** - Browser environment simulation for DOM testing
323
+ - **Test Files** - Initial test suites for theme, DOM, and logger utilities
324
+
325
+ #### Build & Bundle Optimization
326
+ - **Code Splitting** - Separate chunks for Chart.js, FullCalendar, Bootstrap
327
+ - **Bundle Analyzer** - New `npm run build:analyze` command for visual bundle inspection
328
+ - **TerserPlugin** - Console/debugger removal in production builds
329
+ - **Runtime Chunk** - Extracted webpack runtime for better caching
330
+ - **Lodash Removed** - Replaced with custom Events utility (~70KB saved)
331
+
332
+ #### Documentation
333
+ - **API Reference** (`docs/API.md`) - Complete API documentation for all utilities
334
+ - **Component Guide** (`docs/COMPONENT_GUIDE.md`) - Development patterns and examples
335
+ - **Updated CLAUDE.md** - Enhanced project documentation
336
+
337
+ #### Code Quality
338
+ - **Removed Dead Code** - Deleted `app 2.js` and unused `sidebar/index.js`
339
+ - **HTML Accessibility** - Added `lang="en"` to all 18 HTML files
340
+ - **TypeScript Declarations** - Added `types/adminator.d.ts` for IDE support
341
+ - **JSConfig** - Enhanced IDE autocomplete via `jsconfig.json`
342
+ - **VSCode Settings** - Project-specific editor configuration
343
+
344
+ ### Technical Details
345
+
346
+ **Removed Dependencies:**
347
+ - `lodash` (4.17.21) - Replaced with custom Events.debounce/throttle
348
+
349
+ **New Dev Dependencies:**
350
+ - `vitest` (4.0.17) - Testing framework
351
+ - `@vitest/coverage-v8` (4.0.17) - Coverage reporting
352
+ - `jsdom` (27.4.0) - DOM testing environment
353
+ - `webpack-bundle-analyzer` (5.1.1) - Bundle visualization
354
+
355
+ **Updated Dependencies:**
356
+ - All dependencies updated to latest versions
357
+ - Webpack 5.104.1 with code splitting configuration
358
+ - Full security audit with zero vulnerabilities
359
+
360
+ **Build Output (Code Splitting):**
361
+ | Chunk | Size |
362
+ |-------|------|
363
+ | runtime.js | 49.6 KB |
364
+ | vendor-fullcalendar.js | 654 KB |
365
+ | vendor-chartjs.js | 529 KB |
366
+ | vendors.js | 384 KB |
367
+ | main.js | 2.81 MB |
368
+
369
+ ### New Scripts
370
+
371
+ ```bash
372
+ npm run test # Run tests in watch mode
373
+ npm run test:run # Run tests once
374
+ npm run test:coverage # Run tests with coverage
375
+ npm run build:analyze # Build with bundle analyzer
376
+ ```
377
+
378
+ ### Files Added
379
+
380
+ **Utilities:**
381
+ - `src/assets/scripts/utils/events.js`
382
+ - `src/assets/scripts/utils/performance.js`
383
+ - `src/assets/scripts/utils/storage.js`
384
+ - `src/assets/scripts/utils/sanitize.js`
385
+ - `src/assets/scripts/utils/logger.js`
386
+
387
+ **Testing:**
388
+ - `vitest.config.js`
389
+ - `tests/setup.js`
390
+ - `tests/utils/theme.test.js`
391
+ - `tests/utils/dom.test.js`
392
+ - `tests/utils/logger.test.js`
393
+
394
+ **Documentation:**
395
+ - `docs/API.md`
396
+ - `docs/COMPONENT_GUIDE.md`
397
+
398
+ **IDE Support:**
399
+ - `types/adminator.d.ts`
400
+ - `jsconfig.json`
401
+ - `.vscode/settings.json`
402
+ - `.vscode/extensions.json`
403
+
404
+ ### Files Removed
405
+ - `src/assets/scripts/app 2.js` (dead code)
406
+ - `src/assets/scripts/sidebar/index.js` (unused)
407
+
408
+ ### Build Status
409
+ - Zero build errors
410
+ - Zero build warnings
411
+ - Zero security vulnerabilities
412
+ - JavaScript linting: 0 errors, 0 warnings
413
+ - SCSS linting: 0 errors, 0 warnings
414
+ - All tests passing
415
+
416
+ ### Compatibility
417
+ - Node.js 14+ (tested with latest versions)
418
+ - All modern browsers supported
419
+ - Mobile-responsive functionality maintained
420
+ - Dark mode functionality preserved
421
+ - Full backward compatibility with v2.x
422
+
423
+ ---
424
+
3
425
  ## [2.9.0] - 2025-12-02
4
426
 
5
427
  ### Comprehensive Dependency Updates & Linting Modernization