vue-dockable-desktop 1.2.0 → 1.4.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,162 @@ correspondence lives, alongside the feature-by-feature map in [docs/PARITY.md](d
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [1.4.0] — 2026-09-30
15
+
16
+ **Parity: react-dockable-desktop 6.3.1, plus react-dockable-desktop 7.2.0 and 7.3.0's skin
17
+ branding.** Branding, part two: your own surfaces and corner shape on any built-in skin. See
18
+ [Your surfaces](docs/manual/10-theming.md#your-surfaces) and [Corners](docs/manual/10-theming.md#corners).
19
+
20
+ ### Added
21
+
22
+ - **`--vdd-brand-surface`** and **`--vdd-brand-text`**: set per scheme on `:root`, they replace
23
+ every built-in skin's backgrounds and text — the workspace, panels, tab bar, sidebar, floating
24
+ windows, modals, drawers, the taskbar, toasts, borders and muted text are all derived from the
25
+ two. Set both or neither: with only one set, every skin keeps its own surfaces. A skin keeps
26
+ its shape and effects (macOS's glass, Chrome's tabs, the VS Code accent bar) and each
27
+ translucent surface keeps the skin's own transparency; the accent, status colours and shadows
28
+ are not affected.
29
+ - **`--vdd-radius-scale`**: multiplies every corner the library draws — `0` square, `1` each
30
+ skin's own (the default), `1.5` rounder. Circles and pills stay round. It also scales the
31
+ radius tokens you set yourself (`--vdd-panel-float-radius`, `--vdd-panel-toolbar-btn-radius`,
32
+ `--vdd-tab-btn-active-radius`).
33
+ - Manual: **Your surfaces** and **Corners** under Brand your app, the corner habit for custom
34
+ skins, and the three variables in the token reference.
35
+
36
+ ### Fixed
37
+
38
+ - **The workspace-edge drop preview was Bootstrap blue** (`#007bff`) in every skin, instead of
39
+ the skin's accent. It follows `--vdd-accent-color` and `--vdd-brand-accent` now. It shows only
40
+ while you drag a panel to a workspace edge.
41
+ - **Colours no token reached**: the dock-target chips, the light-mode outline button (the
42
+ confirm dialog's Cancel) and the frosted panel toolbar painted literal colours in their own
43
+ rules. They read the surface tokens now, and follow a brand surface; unbranded they are
44
+ unchanged.
45
+
46
+ ### Tests
47
+
48
+ - **M16 browser gate** (`scripts/gates/browser/m16.mjs`, real Chrome): the corner radii of every
49
+ library element and pseudo-element, in all 7 skins × dark/light, match a 1.3.0 baseline with
50
+ the scale unset, are `0px` at scale `0` and 1.5× at `1.5`, with circles and pills unchanged;
51
+ with a brand surface set, no colour of any skin's own palette remains — rendered, hovered or as
52
+ a token — the workspace, panel and tab bar stay distinct, and text on panels meets 4.5:1
53
+ (muted 3:1); with only one of the two set, a scene matches M15's baseline. M15's gate still
54
+ holds with no brand set.
55
+ - `test/core/stylesheet.test.ts`, ported from rdd 7.3.0: every corner length is scaled and the
56
+ library never declares the scale; every coloured surface reads a derived value first, declared
57
+ only on `:root` and built on the guarded base; no element rule paints a colour of its own.
58
+ - M16 rules (`scripts/gates/m16.mjs`) and two selftest cases. The M15 browser gate's scene
59
+ helpers moved to `scripts/gates/lib/branding-scenes.mjs`, shared with M16. The playground
60
+ takes `?bs=`, `?bt=` and `?rs=`.
61
+
62
+ ### Documentation
63
+
64
+ - Theming chapter: Your surfaces, Corners, the fourth brandable-skin habit, token rows; README
65
+ snippet; ADR 0018; PARITY.md; the plan's M16.
66
+
67
+ ## [1.3.0] — 2026-09-29
68
+
69
+ **Parity: react-dockable-desktop 6.3.1, plus react-dockable-desktop 7.2.0's skin branding**
70
+ (the same port angular-dockable-desktop 1.1.0 made). Put your company's colour and font on any
71
+ built-in skin with a few CSS variables — no skin of your own needed. See
72
+ [Brand your app](docs/manual/10-theming.md#brand-your-app).
73
+
74
+ ### Added
75
+
76
+ - **`--vdd-brand-accent`**: set on `:root`, it replaces the accent of every built-in skin in dark
77
+ and light — tab indicators, active sidebar tabs and toolbar buttons, hover and active tints,
78
+ glows, the focused window's glow, the taskbar, the drop and snap highlights, the primary
79
+ button. Unset, each skin keeps its own accent.
80
+ - **`--vdd-brand-on-accent`**: the text colour on a solid accent fill (the confirm dialog's
81
+ primary button, the highlighted dock target), for light brand colours such as yellow — in both
82
+ schemes. Defaults as before: `#090b11`, and `#ffffff` on the primary button in light mode.
83
+ - **Per-skin fonts** through `--vdd-skin-font-family`: `vscode` uses VS Code's workbench font,
84
+ `macos` San Francisco, `chrome` Google's UI fonts, `slate` Fluent's Segoe UI stack, `nord` a
85
+ humanist sans (Avenir Next) and `tokyo` a monospace (JetBrains Mono); `obsidian` keeps the
86
+ library stack. All are system font stacks — the library still loads no fonts — and your own
87
+ `--vdd-font-family` replaces them all, teleported chrome included. `:root` now declares
88
+ `--vdd-font-family` as `var(--vdd-skin-font-family, 'Outfit', 'Inter', system-ui,
89
+ -apple-system, sans-serif)`.
90
+ - Manual: **Brand your app** — the brand variables, a per-scheme brand colour, loading your own
91
+ font, following a UI framework's theme (PrimeVue, Bootstrap, Tailwind, shadcn-vue), where to
92
+ put a logo (a custom `headerAction` entry on `<VddSidebar>`), and how to keep a custom skin
93
+ brandable.
94
+
95
+ ### Changed
96
+
97
+ - **Browser minimum**: CSS `color-mix()` — Chrome / Edge 111, Safari 16.2, Firefox 113 (all
98
+ 2023). In an older browser the tinted hover and active highlights lose their colour; layout and
99
+ behaviour are unaffected.
100
+ - **The default skin's font** is VS Code's workbench stack (`-apple-system, BlinkMacSystemFont,
101
+ 'Segoe WPC', 'Segoe UI', …`) instead of `'Outfit', 'Inter', …`, which is now the fallback for
102
+ skins that set no font (`obsidian`, and custom skins). If you loaded Outfit for the library,
103
+ set `--vdd-font-family` to it. In `tokyo`, `nord`, `macos`, `chrome` and `slate` the font changes
104
+ too — and panel content inherits it, so in `tokyo` your panels turn monospace unless they set a
105
+ font of their own.
106
+ - **Every tint of the accent is derived from it** (`color-mix()` of `--vdd-accent-color`) instead
107
+ of a hand-copied `rgba()`. With the built-in skins and no brand set, the look is unchanged
108
+ except for the fixes below.
109
+ - `vscode` light mode has an accent of its own, `#0066cc` — the blue its light-mode tokens
110
+ already used. The primary button, the taskbar's peek handle and the other accent uses, which
111
+ were cyan on a light background, are that blue now. A custom skin that sets no accent gets it
112
+ in light mode too.
113
+ - **Set the accent with `--vdd-brand-accent`, not `--vdd-accent-color`.** Every skin and the light
114
+ scheme declare `--vdd-accent-color` with a selector that also matches the workspace element, so
115
+ a `:root` override of it is replaced inside the workspace — now in `vscode` light mode as well,
116
+ where 1.2.0 had no light accent to replace it with.
117
+
118
+ ### Fixed
119
+
120
+ - **Overriding `--vdd-accent-color` on `:root` had no effect in 6 of the 7 skins**: each skin
121
+ redeclared it on the workspace element. `--vdd-brand-accent`, which every skin reads first, is
122
+ the supported way to rebrand.
123
+ - **Changing the accent left the old colour behind**: 142 hover, active and glow colours were
124
+ copies of a skin's accent written as fixed `rgba()` values. They follow the accent now.
125
+ - **Skins showed colours that weren't theirs**: the default cyan (and `#0066cc` in light mode)
126
+ left in other skins — the taskbar hover glow, the dock preview and corner-snap highlights, the
127
+ floating-widget drop zones, the light-mode focused-tab indicator and taskbar text, the
128
+ `--vdd-sidebar-card-*` and `--vdd-sidebar-btn-front-*` tokens — now show each skin's own
129
+ accent. `slate` and `tokyo` drew their active states in a blue that wasn't their accent, and
130
+ `obsidian`'s panel toolbar in a violet; they use their accent now. `obsidian`'s dark-mode white
131
+ glows no longer show in light mode, where its accent is black.
132
+ - **The rail and toolbar buttons ignored `--vdd-font-family`**: a `<button>` does not inherit a
133
+ font, so they drew their labels and badges in the browser's button font (Arial in Chrome) in
134
+ every skin. The library's own form controls inherit the chrome font now, as in rdd 6.4.0; your
135
+ own inputs and buttons inside a panel are left alone. Found by the M15 font check.
136
+
137
+ ### Tests
138
+
139
+ - **M15 browser gate** (`scripts/gates/browser/m15.mjs`, real Chrome): with no brand set, the
140
+ computed colours of every library element, its pseudo-elements, 8 hover states and every token
141
+ (inside the workspace, in the toolbar outside it, and on `<body>`), in all 7 skins × dark/light
142
+ with the chrome opened, match a 1.2.0 baseline — except exactly the fixes above; with a brand
143
+ set, no trace of any original accent remains; a light brand with a dark on-accent colour is
144
+ readable on the primary button in dark and light; each skin's font reaches every piece of
145
+ chrome, and a brand font set on `:root` wins in every skin, teleported chrome included. Its
146
+ `--control` run (a skin that redeclares its accent and its font) is rejected.
147
+ - `test/core/stylesheet.test.ts`, ported from rdd 7.2.0's branding contract: every
148
+ `--vdd-accent-color` reads `--vdd-brand-accent` first, nothing in the library declares a
149
+ `--vdd-brand-*` variable, no accent colour is written as a literal outside its one declaration,
150
+ only `:root` declares `--vdd-font-family`, and text on accent fills reads
151
+ `--vdd-brand-on-accent`.
152
+ - M15 rules (`scripts/gates/m15.mjs`): the release files, ADR 0017, the manual's skin-font table
153
+ against the stylesheet, the browser minimum in the README and chapter 1, and PARITY.md.
154
+ - The playground takes `?skin=`, `?cs=light`, `?ba=` / `?bon=` (brand variables before mount)
155
+ and `?anim=0`.
156
+ - **The gate runner no longer mistakes another app for its own**: with another dev server on
157
+ the demo's port, `--strictPort` stopped vdd's demo from starting, the runner took the other
158
+ app's answer as ready, and M14 timed out waiting for the demo. It now waits for its own Vite's
159
+ ready line, moves to the next free port when the usual one is taken, and passes the URL to the
160
+ browser gates (`VDD_APP_URL`; the usual ports stay the default when a gate is run by hand).
161
+
162
+ ### Documentation
163
+
164
+ - Theming chapter: **Brand your app**, **Skin fonts**, brandable custom skins (the demo's `mono`
165
+ skin now reads `--vdd-brand-accent` too), and the token reference (a branding table; tints
166
+ listed as "the accent at N%").
167
+ - The browser minimum in the README and chapter 1; a Branding item in the README's features;
168
+ the rdd 7.2.0 names in the migration chapter; ADR 0017; PARITY.md.
169
+
14
170
  ## [1.2.0] — 2026-09-24
15
171
 
16
172
  **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 and 7.3.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 851 tests.
38
39
 
39
40
  ## Quick start
40
41
 
@@ -103,7 +104,30 @@ 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). Your own surfaces and corner shape, too:
121
+
122
+ ```css
123
+ :root:not([data-color-scheme="light"]) { /* dark: the attribute's absence */
124
+ --vdd-brand-surface: #0b1f3a; /* app background — panels, bars and borders derive from it */
125
+ --vdd-brand-text: #e8eef7; /* main text — set both, or neither */
126
+ }
127
+ :root { --vdd-radius-scale: 0; } /* 0 square · 1 each skin's own · 1.5 rounder */
128
+ ```
129
+
130
+ See [Brand your app](docs/manual/10-theming.md#brand-your-app)
107
131
  - **i18n and RTL** — every string is a message key; `dir="rtl"` flips the whole workspace
108
132
  - **TypeScript-first** — complete types, no separate `@types` package
109
133