vue-dockable-desktop 1.1.2 → 1.2.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,54 @@ correspondence lives, alongside the feature-by-feature map in [docs/PARITY.md](d
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [1.2.0] — 2026-09-24
15
+
16
+ **Parity: react-dockable-desktop 6.3.1.**
17
+
18
+ The remaining items from the user bug report that 1.1.2 left for a minor release: they add
19
+ behaviour, change a default, or extend a public type.
20
+
21
+ ### Added
22
+
23
+ - **Tabs work from the keyboard.** Each tab group is one stop in the Tab order — its selected
24
+ tab. ArrowLeft and ArrowRight move to the previous or next tab and show it, wrapping, and
25
+ mirrored under RTL; Delete closes the focused tab, asking first if it has unsaved changes.
26
+ The tab strip is a `tablist` and the body a `tabpanel`; a tab's close × is hidden from
27
+ assistive technology, since Delete and the menu's Close cover it. A focus ring shows for
28
+ keyboard focus only.
29
+
30
+ - **The context menu works from the keyboard.** It takes focus when it opens; ArrowDown and
31
+ ArrowUp move between enabled items, Enter or Space runs one, and Tab or Escape closes it.
32
+ Closing from the keyboard, or by running an item, hands focus back to whatever had it. A
33
+ submenu now also opens on click, which helps on touch screens. A custom menu slot manages
34
+ its own focus.
35
+
36
+ - **`--vdd-font-family`, one token for the font of all library chrome.** Set it to change the
37
+ font of the workspace, sidebar, toolbar, modals, side panels, toasts, menus and flyouts in
38
+ one place, or to `inherit` to use your page's font. See the theming chapter.
39
+
40
+ - **Two message keys: `notifications` and `closeNotification`.** The toast region's
41
+ accessible name and a toast's close button were hard-coded English, as was the sidebar
42
+ drawer's close button (now the existing `close` key). They go through the message table and
43
+ formatter like every other string, and fall back to English where there is no workspace.
44
+
45
+ - **`<VddDesktop>` can be set up without a DOM.** Server-rendering it threw
46
+ `document is not defined` and took the whole page render down. It now renders the chrome and
47
+ leaves the panels to the client. `<ClientOnly>` remains the supported setup under Nuxt or
48
+ other SSR, and the getting-started chapter says so.
49
+
50
+ ### Changed
51
+
52
+ - **The chrome's default font.** The context menu used the system font stack while the rest of
53
+ the chrome used the workspace's, and everything rendered outside the workspace — the sidebar
54
+ and toolbar around it, modals, side panels, toasts, menus and flyouts — took the host page's
55
+ body font. All of it now uses `--vdd-font-family`, which defaults to the workspace's stack.
56
+ To keep the page's font, set `--vdd-font-family: inherit`.
57
+
58
+ - **`MessageKey` has two more keys.** A table typed `Record<MessageKey, string>`, as the i18n
59
+ chapter recommends, fails to compile until it adds `notifications` and `closeNotification`.
60
+ That is the check doing its job; partial `messages` overrides are unaffected.
61
+
14
62
  ## [1.1.2] — 2026-09-24
15
63
 
16
64
  **Parity: react-dockable-desktop 6.3.1.**
@@ -0,0 +1,10 @@
1
+ import type { MessageKey } from '../core/messages';
2
+ /**
3
+ * One of the library's own strings, for a component that may render with no workspace.
4
+ *
5
+ * Toasts work from anywhere and a sidebar can stand alone, so these cannot `useWorkspace()`,
6
+ * which throws without one. With a workspace the string goes through its message table and
7
+ * formatter, exactly as every other library label does; without one it is the English
8
+ * default. Call the returned function during render, so a locale change is followed. @internal
9
+ */
10
+ export declare function useLibraryMessage(): (key: MessageKey) => string;
@@ -107,6 +107,14 @@ export declare const defaultMessages: {
107
107
  readonly id: "vdd.search";
108
108
  readonly defaultMessage: "Search";
109
109
  };
110
+ readonly notifications: {
111
+ readonly id: "vdd.notifications";
112
+ readonly defaultMessage: "Notifications";
113
+ };
114
+ readonly closeNotification: {
115
+ readonly id: "vdd.closeNotification";
116
+ readonly defaultMessage: "Close notification";
117
+ };
110
118
  };
111
119
  /**
112
120
  * Every message key. Import it in your own message table to get a compile-time guarantee
@@ -13,7 +13,7 @@
13
13
  * workspaces on a page shared panel DOM.
14
14
  */
15
15
  export declare class PanelDomCache {
16
- private readonly doc;
16
+ private readonly ownerDocument?;
17
17
  private elements;
18
18
  /**
19
19
  * Preserved state, **owned per panel and outliving the hidden period**.
@@ -34,7 +34,13 @@ export declare class PanelDomCache {
34
34
  */
35
35
  private sizes;
36
36
  private hidden;
37
- constructor(doc?: Document);
37
+ /**
38
+ * The document is looked up on first use, not in a parameter default: constructing the cache
39
+ * then touches nothing, so `<VddDesktop>` can be set up where there is no DOM (server
40
+ * rendering) as long as no panel element is asked for.
41
+ */
42
+ constructor(ownerDocument?: Document | undefined);
43
+ private get doc();
38
44
  /** The off-screen store. Panels live here while minimised, and before their first host. */
39
45
  hiddenStore(): HTMLElement;
40
46
  /**