vue-dockable-desktop 1.2.0 → 1.3.0

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 CHANGED
@@ -11,6 +11,109 @@ correspondence lives, alongside the feature-by-feature map in [docs/PARITY.md](d
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [1.3.0] — 2026-09-29
15
+
16
+ **Parity: react-dockable-desktop 6.3.1, plus react-dockable-desktop 7.2.0's skin branding**
17
+ (the same port angular-dockable-desktop 1.1.0 made). Put your company's colour and font on any
18
+ built-in skin with a few CSS variables — no skin of your own needed. See
19
+ [Brand your app](docs/manual/10-theming.md#brand-your-app).
20
+
21
+ ### Added
22
+
23
+ - **`--vdd-brand-accent`**: set on `:root`, it replaces the accent of every built-in skin in dark
24
+ and light — tab indicators, active sidebar tabs and toolbar buttons, hover and active tints,
25
+ glows, the focused window's glow, the taskbar, the drop and snap highlights, the primary
26
+ button. Unset, each skin keeps its own accent.
27
+ - **`--vdd-brand-on-accent`**: the text colour on a solid accent fill (the confirm dialog's
28
+ primary button, the highlighted dock target), for light brand colours such as yellow — in both
29
+ schemes. Defaults as before: `#090b11`, and `#ffffff` on the primary button in light mode.
30
+ - **Per-skin fonts** through `--vdd-skin-font-family`: `vscode` uses VS Code's workbench font,
31
+ `macos` San Francisco, `chrome` Google's UI fonts, `slate` Fluent's Segoe UI stack, `nord` a
32
+ humanist sans (Avenir Next) and `tokyo` a monospace (JetBrains Mono); `obsidian` keeps the
33
+ library stack. All are system font stacks — the library still loads no fonts — and your own
34
+ `--vdd-font-family` replaces them all, teleported chrome included. `:root` now declares
35
+ `--vdd-font-family` as `var(--vdd-skin-font-family, 'Outfit', 'Inter', system-ui,
36
+ -apple-system, sans-serif)`.
37
+ - Manual: **Brand your app** — the brand variables, a per-scheme brand colour, loading your own
38
+ font, following a UI framework's theme (PrimeVue, Bootstrap, Tailwind, shadcn-vue), where to
39
+ put a logo (a custom `headerAction` entry on `<VddSidebar>`), and how to keep a custom skin
40
+ brandable.
41
+
42
+ ### Changed
43
+
44
+ - **Browser minimum**: CSS `color-mix()` — Chrome / Edge 111, Safari 16.2, Firefox 113 (all
45
+ 2023). In an older browser the tinted hover and active highlights lose their colour; layout and
46
+ behaviour are unaffected.
47
+ - **The default skin's font** is VS Code's workbench stack (`-apple-system, BlinkMacSystemFont,
48
+ 'Segoe WPC', 'Segoe UI', …`) instead of `'Outfit', 'Inter', …`, which is now the fallback for
49
+ skins that set no font (`obsidian`, and custom skins). If you loaded Outfit for the library,
50
+ set `--vdd-font-family` to it. In `tokyo`, `nord`, `macos`, `chrome` and `slate` the font changes
51
+ too — and panel content inherits it, so in `tokyo` your panels turn monospace unless they set a
52
+ font of their own.
53
+ - **Every tint of the accent is derived from it** (`color-mix()` of `--vdd-accent-color`) instead
54
+ of a hand-copied `rgba()`. With the built-in skins and no brand set, the look is unchanged
55
+ except for the fixes below.
56
+ - `vscode` light mode has an accent of its own, `#0066cc` — the blue its light-mode tokens
57
+ already used. The primary button, the taskbar's peek handle and the other accent uses, which
58
+ were cyan on a light background, are that blue now. A custom skin that sets no accent gets it
59
+ in light mode too.
60
+ - **Set the accent with `--vdd-brand-accent`, not `--vdd-accent-color`.** Every skin and the light
61
+ scheme declare `--vdd-accent-color` with a selector that also matches the workspace element, so
62
+ a `:root` override of it is replaced inside the workspace — now in `vscode` light mode as well,
63
+ where 1.2.0 had no light accent to replace it with.
64
+
65
+ ### Fixed
66
+
67
+ - **Overriding `--vdd-accent-color` on `:root` had no effect in 6 of the 7 skins**: each skin
68
+ redeclared it on the workspace element. `--vdd-brand-accent`, which every skin reads first, is
69
+ the supported way to rebrand.
70
+ - **Changing the accent left the old colour behind**: 142 hover, active and glow colours were
71
+ copies of a skin's accent written as fixed `rgba()` values. They follow the accent now.
72
+ - **Skins showed colours that weren't theirs**: the default cyan (and `#0066cc` in light mode)
73
+ left in other skins — the taskbar hover glow, the dock preview and corner-snap highlights, the
74
+ floating-widget drop zones, the light-mode focused-tab indicator and taskbar text, the
75
+ `--vdd-sidebar-card-*` and `--vdd-sidebar-btn-front-*` tokens — now show each skin's own
76
+ accent. `slate` and `tokyo` drew their active states in a blue that wasn't their accent, and
77
+ `obsidian`'s panel toolbar in a violet; they use their accent now. `obsidian`'s dark-mode white
78
+ glows no longer show in light mode, where its accent is black.
79
+ - **The rail and toolbar buttons ignored `--vdd-font-family`**: a `<button>` does not inherit a
80
+ font, so they drew their labels and badges in the browser's button font (Arial in Chrome) in
81
+ every skin. The library's own form controls inherit the chrome font now, as in rdd 6.4.0; your
82
+ own inputs and buttons inside a panel are left alone. Found by the M15 font check.
83
+
84
+ ### Tests
85
+
86
+ - **M15 browser gate** (`scripts/gates/browser/m15.mjs`, real Chrome): with no brand set, the
87
+ computed colours of every library element, its pseudo-elements, 8 hover states and every token
88
+ (inside the workspace, in the toolbar outside it, and on `<body>`), in all 7 skins × dark/light
89
+ with the chrome opened, match a 1.2.0 baseline — except exactly the fixes above; with a brand
90
+ set, no trace of any original accent remains; a light brand with a dark on-accent colour is
91
+ readable on the primary button in dark and light; each skin's font reaches every piece of
92
+ chrome, and a brand font set on `:root` wins in every skin, teleported chrome included. Its
93
+ `--control` run (a skin that redeclares its accent and its font) is rejected.
94
+ - `test/core/stylesheet.test.ts`, ported from rdd 7.2.0's branding contract: every
95
+ `--vdd-accent-color` reads `--vdd-brand-accent` first, nothing in the library declares a
96
+ `--vdd-brand-*` variable, no accent colour is written as a literal outside its one declaration,
97
+ only `:root` declares `--vdd-font-family`, and text on accent fills reads
98
+ `--vdd-brand-on-accent`.
99
+ - M15 rules (`scripts/gates/m15.mjs`): the release files, ADR 0017, the manual's skin-font table
100
+ against the stylesheet, the browser minimum in the README and chapter 1, and PARITY.md.
101
+ - The playground takes `?skin=`, `?cs=light`, `?ba=` / `?bon=` (brand variables before mount)
102
+ and `?anim=0`.
103
+ - **The gate runner no longer mistakes another app for its own**: with another dev server on
104
+ the demo's port, `--strictPort` stopped vdd's demo from starting, the runner took the other
105
+ app's answer as ready, and M14 timed out waiting for the demo. It now waits for its own Vite's
106
+ ready line, moves to the next free port when the usual one is taken, and passes the URL to the
107
+ browser gates (`VDD_APP_URL`; the usual ports stay the default when a gate is run by hand).
108
+
109
+ ### Documentation
110
+
111
+ - Theming chapter: **Brand your app**, **Skin fonts**, brandable custom skins (the demo's `mono`
112
+ skin now reads `--vdd-brand-accent` too), and the token reference (a branding table; tints
113
+ listed as "the accent at N%").
114
+ - The browser minimum in the README and chapter 1; a Branding item in the README's features;
115
+ the rdd 7.2.0 names in the migration chapter; ADR 0017; PARITY.md.
116
+
14
117
  ## [1.2.0] — 2026-09-24
15
118
 
16
119
  **Parity: react-dockable-desktop 6.3.1.**
package/README.md CHANGED
@@ -23,8 +23,8 @@ so a layout saved by either library loads in the other.
23
23
  > **Versioning.** vdd follows its own semver, independently of `react-dockable-desktop`:
24
24
  > matching the two numbers would be a promise that breaks the first time either library needs
25
25
  > a breaking change the other does not. Which rdd release a given version corresponds to is
26
- > stated per release in [CHANGELOG.md](CHANGELOG.md) — this one tracks **rdd 6.3.0** — and
27
- > feature by feature in [docs/PARITY.md](docs/PARITY.md).
26
+ > stated per release in [CHANGELOG.md](CHANGELOG.md) — this one tracks **rdd 6.3.1**, plus
27
+ > rdd 7.2.0's skin branding — and feature by feature in [docs/PARITY.md](docs/PARITY.md).
28
28
 
29
29
  ## Install
30
30
 
@@ -32,9 +32,10 @@ so a layout saved by either library loads in the other.
32
32
  npm install vue-dockable-desktop
33
33
  ```
34
34
 
35
- Requires Vue 3.4+. No other runtime dependencies. The published package is
35
+ Requires Vue 3.4+, and a browser with CSS `color-mix()` (Chrome / Edge 111, Safari 16.2,
36
+ Firefox 113 or later). No other runtime dependencies. The published package is
36
37
  [`vue-dockable-desktop`](https://www.npmjs.com/package/vue-dockable-desktop); the public API
37
- is pinned by `api-surface.json` and covered by 730 tests.
38
+ is pinned by `api-surface.json` and covered by 846 tests.
38
39
 
39
40
  ## Quick start
40
41
 
@@ -103,7 +104,21 @@ localStorage.setItem('layout', ws.saveLayout())
103
104
  - **Panel overlay** — anchored toolbars and floating widgets inside a single panel
104
105
  - **Overlays** — side panels, a modal stack, dirty-close confirmation, and toasts
105
106
  - **Layout serialisation** — save and restore the whole workspace as a JSON string
106
- - **Theming** — built-in skins, light/dark colour schemes, all `--vdd-*` CSS variables
107
+ - **Theming** — built-in skins, each with its own font, light/dark colour schemes, all
108
+ `--vdd-*` CSS variables
109
+ - **Branding** — your company's colour and font on any built-in skin, from three variables:
110
+
111
+ ```css
112
+ :root {
113
+ --vdd-brand-accent: #e4002b; /* every accent use, in every skin, dark and light */
114
+ --vdd-brand-on-accent: #ffffff; /* text on a brand-coloured fill — a dark one for light brands */
115
+ --vdd-font-family: 'Acme Sans', sans-serif; /* your font (the library loads none) */
116
+ }
117
+ ```
118
+
119
+ Point them at your UI framework's theme to follow it — `var(--p-primary-color)` (PrimeVue),
120
+ `var(--bs-primary)` (Bootstrap). See
121
+ [Brand your app](docs/manual/10-theming.md#brand-your-app)
107
122
  - **i18n and RTL** — every string is a message key; `dir="rtl"` flips the whole workspace
108
123
  - **TypeScript-first** — complete types, no separate `@types` package
109
124