# Changelog All notable changes to this project will be documented in this file. ## [4.0.3] - 2026-07-21 Dependency refresh. Toolchain bumps to latest minor/patch; no source or API changes. Build verified (~8 s, identical chunk layout), `eslint src/` clean, `npm audit` reports 0 vulnerabilities. ### Changed - **Dev dependencies** bumped to latest: - `@playwright/test`, `playwright`: 1.61.0 → 1.61.1 - `eslint`: 10.5.0 → 10.7.0 - `prettier`: 3.8.4 → 3.9.6 - `sass`: 1.101.0 → 1.101.3 - `terser`: 5.48.0 → 5.49.0 - `vite`: 8.0.16 → 8.1.5 - **`brace-expansion`** (transitive) 5.0.6 → 5.0.7 — the bump Dependabot proposed in #996, folded into the lockfile refresh. This resolves Dependabot alert #85, a **high-severity** DoS advisory (exponential-time expansion of consecutive non-expanding `{}` groups) affecting `brace-expansion < 5.0.7`. `npm audit` now reports 0 vulnerabilities. - Runtime dependencies (`datatables.net` 2.3.8, `echarts` 6.1.0, `leaflet` 1.9.4) and the remaining dev deps (`@eslint/js` 10.0.1, `eslint-config-prettier` 10.1.8, `rollup-plugin-visualizer` 7.0.1) were already at their latest published versions — no change. ## [4.0.2] - 2026-06-17 Dependency refresh. Toolchain bumps to latest minor/patch; no source or API changes. Build verified (5 s, identical chunk layout), `eslint src/` clean, `npm audit` reports 0 vulnerabilities. ### Changed - **Dev dependencies** bumped to latest: - `@playwright/test`, `playwright`: 1.60.0 → 1.61.0 - `eslint`: 10.4.0 → 10.5.0 - `prettier`: 3.8.3 → 3.8.4 - `sass`: 1.99.0 → 1.101.0 - `terser`: 5.47.1 → 5.48.0 - `vite`: 8.0.13 → 8.0.16 - Runtime dependencies (`datatables.net` 2.3.8, `echarts` 6.1.0, `leaflet` 1.9.4) and the remaining dev deps (`@eslint/js` 10.0.1, `eslint-config-prettier` 10.1.8, `rollup-plugin-visualizer` 7.0.1) were already at their latest published versions — no change. ## [4.0.1] - 2026-06-11 Distribution fix plus the v4 documentation and AI-tooling pass. ### Fixed - **Ship `dist/` in the npm tarball.** 4.0.0 published before `dist/` was in the `files` field, so every `cdn.jsdelivr.net/npm/gentelella@4/dist/*` URL in the docs 404'd. 4.0.1 ships the pre-built `dist/` so the demo HTML pages and assets are reachable straight off jsDelivr. The `prepublishOnly` hook rebuilds `dist/` before publish, so the tarball always matches the current source. - **Dropzone alignment** on the file-upload page (#985). - **Button-group active border** + radio-style toggle (#986). - Broken Apex and Zenith DashboardPack promo URLs. - `showModal`/`showToast` API usage in the AI helper files. ### Added - **AI tool support** and **comprehensive v4 documentation** — cross-tool guidance files plus a full docs pass; README links out to the hosted docs. - **DashboardPack premium templates** promo section in the README. ### Changed - **Docs moved off the local `/docs` tree** to ; a Docs link was added to the topbar. - README screenshots now link to the live demo pages. ## [4.0.0] - 2026-05-20 First stable v4 release. Drops the `-rc.2` suffix; content is rc.2 plus a dependency refresh. ### Changed - **Dependencies** bumped to latest minor/patch, with a moderate `brace-expansion` advisory resolved via `npm audit fix`: - `@playwright/test`, `playwright`: 1.48.0 → 1.60.0 - `eslint`: 10.2.1 → 10.4.0 - `prettier`: 3.7.4 → 3.8.3 - `sass`: 1.97.2 → 1.99.0 - `terser`: 5.44.1 → 5.47.1 - `vite`: 8.0.10 → 8.0.13 - `datatables.net`: 2.3.6 → 2.3.8 - `echarts`: 6.0.0 → 6.1.0 ## [4.0.0-rc.2] - 2026-05-05 Polish pass on top of rc.1: a real mobile responsive sweep, npm-package-ready distribution metadata with TypeScript declarations, a page generator script, an optional API-hydration data adapter, and quality-of-life fixes. ### Added - **`npm run new`** — page generator ([scripts/new-page.mjs](scripts/new-page.mjs)). One command stamps out a `production/*.html` from the standard skeleton and (with `--nav-group`) wires the entry into the `NAV` array in [src/v4/shell-render.js](src/v4/shell-render.js). Flags: `--title`, `--pretitle`, `--breadcrumb`, `--nav-group`, `--icon`, `--dry-run`. Run `npm run new -- --help` for the full list. - **TypeScript declarations** — [types/gentelella.d.ts](types/gentelella.d.ts) typed-up the public JS surface (`mountShell`, `showModal`, `showToast`, `openMenu`, chart/table init, the `NAV` schema, `seedAdapter` / `httpAdapter`). Wired up via `types` field in [package.json](package.json) so VS Code IntelliSense resolves automatically — no `tsconfig` required. - **npm package metadata** — `exports`, `files`, and `types` fields added. The package is now consumable as `import { mountShell } from "gentelella"`. Subpath exports (`gentelella/v4/*`, `gentelella/scss/*`) for granular imports. - **Markup helpers** — [src/v4/markup.js](src/v4/markup.js) docs added to README and Playground. `statTile()`, `statusBadge()`, `customerCell()`, `activityItem()`, `visitorRow()`, `emptyState()`, `banner()`, `skeletonRows()`, `escapeHtml()`. For JS-rendered content (orders rows, inbox threads, kanban cards) where boilerplate adds up. - **Data adapter** ([src/v4/data-adapter.js](src/v4/data-adapter.js)) — `seedAdapter()` for in-memory demo state; `httpAdapter(url)` for REST. Add `?api=1` to a page URL to hydrate from a real backend. - **Inbox API mode** — append `?api=1` to [inbox.html](production/inbox.html) and the inbox loads its initial messages from `/api/messages` instead of the seed. Mutations stay client-side in the demo; extend the adapter to PATCH them back. - **Playground** — new sections for async/loading patterns (skeleton table, skeleton tiles, list lifecycle, submit spinner, banners) and `markup.js` helper examples with copy-pasteable HTML output. ### Changed - **Vite config auto-discovers entries** — replaces the hand-maintained 60-entry `rollupOptions.input` list. Adding a new page is now just dropping a file into [production/](production/); Vite picks it up. [vite.config.js](vite.config.js). - **Semantic `

` page titles** — every page's `
` is now `

`. Improves landmark navigation for screen readers and SEO. ~60 pages updated. - **DataTables search input** gains an `aria-label="Search table"` since DataTables 2 emits it nameless. [src/v4/tables.js](src/v4/tables.js). - **Table row checkboxes** gain `aria-label="Select row"` / `"Select all rows"`. - **SCSS spacing tokens** — replaced ad-hoc `4px` / `12px` / `16px` `gap` values with `var(--space-1)` / `--space-3` / `--space-4` across pagination, chip, calendar toolbar, and other components. Now responds to the theme generator. ### Fixed - **Mobile responsive pass.** Every page renders at native pixel scale on iPhone SE / iPhone 13 / Pixel without the browser shrink-to-fit zooming the layout. Audited 22 pages × 3 viewports (320 / 375 / 390 px); 0 overflows on mainstream sizes. - **Topbar** ([src/scss/v4/_layout.scss](src/scss/v4/_layout.scss)) — at ≤768 px the breadcrumb, 240 px search box, notifications and messages buttons hide; theme toggle + avatar (now 32×32) remain. The shell no longer pushes layout viewport to ~540 px on phones. - **Grid `minmax(0, 1fr)` bug.** Four spots in the grid system (`.col-1`, `.col-8-4`/`.col-4-8` ≤1100 px collapse, `.col-4`/`.col-3`/`.col-2` ≤768 px collapse) used `1fr` without `minmax(0, …)`. Wide intrinsic content (tables, code blocks, long unbreakable text) inside those columns pushed the column past viewport, triggering Chromium's shrink-to-fit on phones. All four now use `minmax(0, 1fr)`. - **Form wizard steps** stack vertically below 600 px ([src/scss/v4/_pages.scss](src/scss/v4/_pages.scss)) — connector lines and sub-labels suppressed. - **Invoice page** — header and 2-col billed-to / pay-to grid stack below 768 px; padding reduces from 32 px to 16 px. - **Invoice line-row** reflows to a 2-row layout (description above, qty / rate / amount below) below 600 px. - **Typography showcase** type-rows stack below 600 px, with `overflow-wrap: anywhere` so 56 px display words can break. - **Settings layout** stacking on mobile uses `minmax(0, 1fr)` ([src/scss/v4/_apps.scss](src/scss/v4/_apps.scss)). - **Calendar grid** scrolls horizontally with scroll-snap below 700 px instead of collapsing day cells. - **Chart-tab segmented controls** get larger padding on coarse pointers (touch devices) for hit-target compliance ([src/scss/v4/_widgets.scss](src/scss/v4/_widgets.scss)). ### Known limitations - Connected-account rows on [profile.html](production/profile.html) overflow ~42 px at exactly 320 px viewport (Galaxy Fold cover screen). Mainstream 360+ phones unaffected. - Image assets in `public/images/` aren't optimized — AVIF conversion is on the rc.3 docket. - ECharts vendor chunk is still ~360 KB gz; per-page chart-type tree-shaking deferred. ## [4.0.0-rc.1] - 2026-05-01 Release candidate. Massive expansion since beta.2 — 60 pages, 20 chart variants, full mail client, live theme generator, component playground, PWA, sidebar rail mode. The published `latest` tag still points at the v2.x line; v4 ships under the `next` distribution tag until 4.0.0 stable. ### Added #### New top-level features - **Live theme generator** ([production/theme.html](production/theme.html)) — pick a primary color from 11 swatches or a hex input; tune corner radius, sidebar width, body font size; switch sidebar style (Dark / Black / Light / Brand); flip light/dark mode. Every chart, button, badge, card and link restyles in real time. Generated SCSS preview is copyable and downloadable as `_tokens-override.scss`. - **Component playground** ([production/playground.html](production/playground.html)) — every reusable component on a single scrolling page, side-by-side with its **exact HTML** and a "Copy" button. Sticky left rail with scrollspy nav, 13 sections covering buttons, status, alerts, cards, forms, tables, tabs, progress, stats, timeline, accordion, empty state. - **Command palette** (⌘K / Ctrl+K) — fuzzy search across all 60 pages and inline actions (toggle theme, open profile, sign out, etc.). Built-in matcher with subsequence + word-boundary scoring. Topbar search input now opens the palette on focus. - **PWA** — full `site.webmanifest` with shortcuts, service worker (network-first HTML, cache-first assets, offline fallback), apple-touch-icon, theme-color metas (light + dark). Installable on macOS / Windows / mobile. - **Sidebar rail mode** — desktop hamburger collapses sidebar from 252px → 64px showing icons only. Tooltip on hover via `data-rail-label`. Submenu groups become click-to-flyout when collapsed. Persists in localStorage. Same hamburger toggles drawer on mobile. #### New pages (8) - `production/theme.html` — theme generator - `production/playground.html` — component playground - `production/offline.html` — PWA offline fallback - `production/chat.html` — fully interactive 8-conversation chat - `production/kanban.html` — HTML5 drag-drop kanban with edit modals - `production/file_manager.html` — tree + grid file browser with breadcrumbs - `production/notifications.html` — filterable notifications page - `production/settings.html` — persisted settings with 8 sections #### New chart factories (added to [src/v4/charts.js](src/v4/charts.js); 20 total now) - `stacked-area` · multi-series stacked area with smooth fills - `horizontal-bar` · top categories ranked - `mixed-bar-line` · bars + secondary-axis trend line - `radar` · 6-axis comparison - `gauge` · single-KPI progress arc - `scatter` · bubble plot with size encoding - `heatmap` · week × hour activity - `funnel` · conversion stages - `candlestick` · OHLC market data - `polar-bar` · circular bar chart - `treemap` · proportional cells - `sankey` · flow diagram - `calendar-heatmap` · GitHub-contribution-style 12-month grid - `gantt` · project timeline using `custom` series #### New form components ([src/v4/form-controls.js](src/v4/form-controls.js)) - **Date-range picker** — two-month grid, 6 presets (Today / Last 7 days / Last 30 days / This month / Last month / This year), hover preview, Monday-first weeks. No library. - **Rich text editor** — toolbar (bold / italic / underline / H2 / blockquote / lists / link / code / clear), keyboard shortcuts (⌘B/I/U/K), syncs to a hidden textarea for form submission. - **Multi-select with chips** — autocomplete on type, ↑/↓/Enter keyboard nav, Backspace removes last chip, binds to a real `