vue-dockable-desktop 1.0.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +21 -0
  3. package/README.md +169 -0
  4. package/dist/components/VddConfirm.vue.d.ts +19 -0
  5. package/dist/components/VddContextMenu.vue.d.ts +35 -0
  6. package/dist/components/VddDesktop.vue.d.ts +28 -0
  7. package/dist/components/VddDragGhost.vue.d.ts +3 -0
  8. package/dist/components/VddDropZones.vue.d.ts +6 -0
  9. package/dist/components/VddEdgeZones.vue.d.ts +3 -0
  10. package/dist/components/VddFloatingWidget.vue.d.ts +51 -0
  11. package/dist/components/VddFloatingWindow.vue.d.ts +12 -0
  12. package/dist/components/VddLeafGroup.vue.d.ts +7 -0
  13. package/dist/components/VddModalHost.vue.d.ts +9 -0
  14. package/dist/components/VddModals.vue.d.ts +3 -0
  15. package/dist/components/VddOverlayFrame.vue.d.ts +28 -0
  16. package/dist/components/VddPanelMount.vue.d.ts +8 -0
  17. package/dist/components/VddPanelOverlay.vue.d.ts +13 -0
  18. package/dist/components/VddPanelSlot.vue.d.ts +9 -0
  19. package/dist/components/VddPanelToolbar.vue.d.ts +26 -0
  20. package/dist/components/VddSecondarySidebar.vue.d.ts +16 -0
  21. package/dist/components/VddSidePanelHost.vue.d.ts +10 -0
  22. package/dist/components/VddSidePanels.vue.d.ts +12 -0
  23. package/dist/components/VddSidebar.vue.d.ts +54 -0
  24. package/dist/components/VddSidebarDrawer.vue.d.ts +51 -0
  25. package/dist/components/VddSidebarRail.vue.d.ts +22 -0
  26. package/dist/components/VddSidebarTabScope.vue.d.ts +22 -0
  27. package/dist/components/VddTaskbar.vue.d.ts +17 -0
  28. package/dist/components/VddTaskbarPreview.vue.d.ts +24 -0
  29. package/dist/components/VddToastIcon.vue.d.ts +8 -0
  30. package/dist/components/VddToastItem.vue.d.ts +18 -0
  31. package/dist/components/VddToasts.vue.d.ts +36 -0
  32. package/dist/components/VddToolbar.vue.d.ts +20 -0
  33. package/dist/components/VddToolbarButton.vue.d.ts +25 -0
  34. package/dist/components/VddToolbarCenter.vue.d.ts +13 -0
  35. package/dist/components/VddToolbarGroupButton.vue.d.ts +8 -0
  36. package/dist/components/VddToolbarItem.vue.d.ts +13 -0
  37. package/dist/components/VddToolbarSearch.vue.d.ts +27 -0
  38. package/dist/components/VddToolbarSeparator.vue.d.ts +3 -0
  39. package/dist/components/VddToolbarSpacer.vue.d.ts +3 -0
  40. package/dist/components/VddToolbarToggle.vue.d.ts +32 -0
  41. package/dist/components/VddWorkspaceGrid.vue.d.ts +8 -0
  42. package/dist/composables/useColorScheme.d.ts +19 -0
  43. package/dist/composables/useContextMenu.d.ts +29 -0
  44. package/dist/composables/useContributions.d.ts +48 -0
  45. package/dist/composables/useDragDock.d.ts +59 -0
  46. package/dist/composables/useOverlayHost.d.ts +30 -0
  47. package/dist/composables/useOverlays.d.ts +51 -0
  48. package/dist/composables/usePanel.d.ts +82 -0
  49. package/dist/composables/usePanelDom.d.ts +7 -0
  50. package/dist/composables/usePanelOverlay.d.ts +35 -0
  51. package/dist/composables/useSidebar.d.ts +15 -0
  52. package/dist/composables/useToolbar.d.ts +9 -0
  53. package/dist/composables/useWorkspace.d.ts +18 -0
  54. package/dist/core/anchorGeometry.d.ts +39 -0
  55. package/dist/core/contextMenu.d.ts +74 -0
  56. package/dist/core/contributions.d.ts +56 -0
  57. package/dist/core/dragResize.d.ts +67 -0
  58. package/dist/core/eventBus.d.ts +73 -0
  59. package/dist/core/layoutTree.d.ts +96 -0
  60. package/dist/core/messages.d.ts +117 -0
  61. package/dist/core/overlayState.d.ts +64 -0
  62. package/dist/core/overlays.d.ts +114 -0
  63. package/dist/core/panelDom.d.ts +79 -0
  64. package/dist/core/panelMenu.d.ts +45 -0
  65. package/dist/core/panelOverlay.d.ts +121 -0
  66. package/dist/core/registry.d.ts +61 -0
  67. package/dist/core/serializable.d.ts +26 -0
  68. package/dist/core/serialize.d.ts +32 -0
  69. package/dist/core/sidebarTypes.d.ts +102 -0
  70. package/dist/core/stretch.d.ts +47 -0
  71. package/dist/core/toast.d.ts +474 -0
  72. package/dist/core/toolbarState.d.ts +13 -0
  73. package/dist/core/toolbarTypes.d.ts +99 -0
  74. package/dist/core/workspace.d.ts +222 -0
  75. package/dist/index.cjs +5 -0
  76. package/dist/index.cjs.map +1 -0
  77. package/dist/index.d.ts +64 -0
  78. package/dist/index.js +4851 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/styles.css +3944 -0
  81. package/dist/types.d.ts +145 -0
  82. package/package.json +102 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,60 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ Every release states which `react-dockable-desktop` release it corresponds to, as a
8
+ **Parity** line. The two libraries version independently — a shared number would break the
9
+ first time either needed a breaking change the other did not — so this is where the
10
+ correspondence lives, alongside the feature-by-feature map in [docs/PARITY.md](docs/PARITY.md).
11
+
12
+ ## [Unreleased]
13
+
14
+ ## [1.0.0] — 2026-09-16
15
+
16
+ **Parity: react-dockable-desktop 6.3.0.**
17
+
18
+ First release. 1.0.0 rather than 0.x because the API is not speculative: it is a deliberate
19
+ port of an API that has been through six majors of real use, and it is pinned by
20
+ `api-surface.json`, so it cannot drift by accident.
21
+
22
+ ### Added
23
+
24
+ - **A Vue 3 port of [react-dockable-desktop](https://github.com/felipecarrillo100/react-dockable-desktop).**
25
+ A window manager and dockable layout engine: split-docking grid, tabbed groups, workspace
26
+ edge docking, floating resizable windows with corner anchoring and stacking, a taskbar with
27
+ live previews, sidebars, toolbars, per-panel overlays with anchored toolbars and floating
28
+ widgets, side panels, a modal stack, toasts, context menus, panel contributions, theming,
29
+ and internationalisation with RTL.
30
+
31
+ Written as a native Vue library rather than a transliteration: `createWorkspace()` is a
32
+ plugin in the shape of `createPinia()`, two-way state is `v-model`, subscriptions are refs,
33
+ render props are slots, and panel persistence is one cache element per panel plus a
34
+ `<Teleport>`. The reasoning for each is recorded in [`docs/decisions/`](docs/decisions/).
35
+
36
+ - **Layout compatibility with rdd, in both directions.** `saveLayout()` output is byte-compatible
37
+ with `react-dockable-desktop`'s `SerializedLayout`, so a layout saved by either library loads
38
+ in the other. Asserted against fixtures captured from rdd, and exercised in the demo's
39
+ browser walkthrough by restoring a layout written by hand in rdd's format.
40
+
41
+ - **A floating widget's title can be a message descriptor, not just a string.** `ManagedWidget.title`
42
+ — the object `useFloatingWidgets().open()` stores — and `<VddFloatingWidget title>` are both
43
+ `Label` (`string | MessageDescriptor`), resolved through `ws.format()` on every render. A
44
+ descriptor therefore follows a locale change with no reopen, which a resolved string cannot:
45
+ the library stores that object, so it has no way to resolve the text again.
46
+
47
+ This closes the last gap in the rule that **every title the library stores is a `Label`** —
48
+ panel titles, side panels, modals, context menus and the unsaved-changes dialog were already
49
+ covered. Two M12 gate rules and PO28–PO30 keep it closed. The same defect was
50
+ [reported against rdd 6.2.0](https://github.com/felipecarrillo100/react-dockable-desktop) and
51
+ is fixed there in 6.3.0; recorded here as divergence **D16** in
52
+ [`docs/PARITY.md`](docs/PARITY.md).
53
+
54
+ ### Notes
55
+
56
+ - Sixteen behaviours deliberately differ from rdd 6.2.0 — fifteen of them defects vdd does not
57
+ reproduce, each with a test and a gate rule. They are listed with their evidence in
58
+ [`docs/PARITY.md`](docs/PARITY.md), which also carries the full API and test maps.
59
+ - The published surface is pinned by `api-surface.json`; the gate fails if an export appears or
60
+ disappears without that file changing, so nothing can leak into the API by accident.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Felipe Carrillo Romero
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,169 @@
1
+ # vue-dockable-desktop
2
+
3
+ [![npm version](https://img.shields.io/npm/v/vue-dockable-desktop.svg?color=blue)](https://www.npmjs.com/package/vue-dockable-desktop)
4
+ [![Vue 3](https://img.shields.io/badge/Vue-3.4%2B-42b883.svg)](https://vuejs.org/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-first-3178c6.svg)](https://www.typescriptlang.org/)
6
+ [![parity](https://img.shields.io/badge/parity-react--dockable--desktop%206.3.0-orange.svg)](docs/PARITY.md)
7
+ [![license](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
8
+
9
+ A window manager and dockable layout engine for **Vue 3**. Fluid grid splits, tabbed
10
+ groups, floating resizable windows, zero-unmount state preservation, side panels and
11
+ modals, toasts, context menus, per-panel overlays, and internationalisation.
12
+
13
+ **[Live demo](https://felipecarrillo100.github.io/vue-dockable-desktop/demo/)** &nbsp;|&nbsp;
14
+ **[Users manual](docs/manual/)** &nbsp;|&nbsp;
15
+ **[Design decisions](docs/decisions/)** &nbsp;|&nbsp;
16
+ **[Parity with the React version](docs/PARITY.md)**
17
+
18
+ Written as a native Vue library — plugins, composables, `v-model`, slots — not as a
19
+ transliteration of its React sibling. It reads and writes the **same serialised layout
20
+ format** as [`react-dockable-desktop`](https://github.com/felipecarrillo100/react-dockable-desktop),
21
+ so a layout saved by either library loads in the other.
22
+
23
+ > **Versioning.** vdd follows its own semver, independently of `react-dockable-desktop`:
24
+ > matching the two numbers would be a promise that breaks the first time either library needs
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).
28
+
29
+ ## Install
30
+
31
+ ```bash
32
+ npm install vue-dockable-desktop
33
+ ```
34
+
35
+ Requires Vue 3.4+. No other runtime dependencies. The published package is
36
+ [`vue-dockable-desktop`](https://www.npmjs.com/package/vue-dockable-desktop); the public API
37
+ is pinned by `api-surface.json` and covered by 725 tests.
38
+
39
+ ## Quick start
40
+
41
+ ```ts
42
+ // main.ts
43
+ import { createApp } from 'vue'
44
+ import { createWorkspace } from 'vue-dockable-desktop'
45
+ import 'vue-dockable-desktop/styles.css' // required
46
+ import App from './App.vue'
47
+ import MapPanel from './panels/MapPanel.vue'
48
+ import EditorPanel from './panels/EditorPanel.vue'
49
+
50
+ const workspace = createWorkspace({
51
+ panels: {
52
+ map: { component: MapPanel, defaultOptions: { title: 'Map' } },
53
+ editor: { component: EditorPanel, defaultOptions: { title: 'Editor' } },
54
+ },
55
+ })
56
+
57
+ createApp(App).use(workspace).mount('#app')
58
+ ```
59
+
60
+ ```vue
61
+ <!-- App.vue -->
62
+ <script setup lang="ts">
63
+ // Components are imported, not registered globally, so a build only carries the ones it uses.
64
+ import { VddDesktop, VddModals, VddSidePanels, VddToasts } from 'vue-dockable-desktop'
65
+ </script>
66
+
67
+ <template>
68
+ <div class="app">
69
+ <VddDesktop />
70
+ <VddModals />
71
+ <VddSidePanels />
72
+ <VddToasts />
73
+ </div>
74
+ </template>
75
+
76
+ <style>
77
+ .app { height: 100vh; overflow: hidden; }
78
+ </style>
79
+ ```
80
+
81
+ `createWorkspace()` returns a Vue plugin — the same shape as `createPinia()` or
82
+ `createRouter()` — so `app.use(workspace)` makes `useWorkspace()` available anywhere:
83
+
84
+ ```ts
85
+ import { useWorkspace } from 'vue-dockable-desktop'
86
+
87
+ const ws = useWorkspace()
88
+ // openPanel(instanceId, panelKey, options?) — the id is yours, the key is from `panels`.
89
+ ws.openPanel('overview', 'map', { title: 'Overview' })
90
+ localStorage.setItem('layout', ws.saveLayout())
91
+ ```
92
+
93
+ ## Features
94
+
95
+ - **Split-docking grid** — drag a panel to any zone to split it into rows or columns, or
96
+ drop it onto a tab strip to group it
97
+ - **Floating windows** — 8-direction resize, maximise, minimise, and corner anchoring with
98
+ automatic stacking
99
+ - **Zero-unmount persistence** — panel DOM is moved, never destroyed, across docking,
100
+ floating and tab switching, so maps, WebGL contexts and editors keep their state
101
+ - **Sidebar and toolbar** — primary and secondary sidebars, a declarative toolbar, and
102
+ per-panel contributions that follow the active panel
103
+ - **Panel overlay** — anchored toolbars and floating widgets inside a single panel
104
+ - **Overlays** — side panels, a modal stack, dirty-close confirmation, and toasts
105
+ - **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
+ - **i18n and RTL** — every string is a message key; `dir="rtl"` flips the whole workspace
108
+ - **TypeScript-first** — complete types, no separate `@types` package
109
+
110
+ ## Documentation
111
+
112
+ | | |
113
+ |---|---|
114
+ | [Live demo](https://felipecarrillo100.github.io/vue-dockable-desktop/demo/) | Every capability in one application — published from `demo/` by GitHub Pages on each push to `main` |
115
+ | [`docs/manual/`](docs/manual/) | Users manual — 13 chapters, start with [Getting started](docs/manual/01-getting-started.md) |
116
+ | [`docs/decisions/`](docs/decisions/) | ADRs — why the Vue design diverges from the React one |
117
+ | [`docs/PARITY.md`](docs/PARITY.md) | Feature-by-feature parity with `react-dockable-desktop`, and the 16 deliberate divergences |
118
+ | [`docs/IMPLEMENTATION_PLAN.md`](docs/IMPLEMENTATION_PLAN.md) | The milestone plan and its gates |
119
+ | [`docs/PROGRESS.md`](docs/PROGRESS.md) | One row per gate run |
120
+ | [`CHANGELOG.md`](CHANGELOG.md) | What has changed, newest first |
121
+
122
+ ## Repository layout
123
+
124
+ ```
125
+ src/ the library — core/ (framework-free logic), components/, composables/
126
+ test/ Vitest suites; the executable specification
127
+ demo/ full sample application (maps, Monaco, Markdown, 16 panels)
128
+ playground/ minimal harness used by the browser gates
129
+ docs/ manual, ADRs, parity and plan
130
+ scripts/gates/ the verification gates
131
+ docs/evidence/ a written record per milestone gate (the gate's own output is not committed)
132
+ ```
133
+
134
+ ## Development
135
+
136
+ ```bash
137
+ npm install
138
+
139
+ npm test # Vitest
140
+ npm run typecheck # vue-tsc
141
+ npm run lint # ESLint
142
+ npm run build # library build + .d.ts + styles.css
143
+
144
+ npm run demo # the demo app
145
+ npm run playground # the minimal harness
146
+
147
+ npm run gate -- M14 # the full standing gate for a milestone
148
+ npm run gate:selftest # prove every gate rule is non-vacuous
149
+ npm run gate:sweep # coverage + non-vacuity sweep
150
+ ```
151
+
152
+ `npm run gate -- M<n>` runs types, lint, tests, build, test counts, the CSS-prefix and
153
+ API-surface checks, the docs/API cross-check, the demo build, the milestone's own rules,
154
+ and a real-Chrome browser gate. Gates are never edited to make a run pass.
155
+
156
+ ## Continuous integration
157
+
158
+ Two workflows, both on Node 22 (vitest 5 will not run on Node 20):
159
+
160
+ - [`.github/workflows/gate.yml`](.github/workflows/gate.yml) runs `npm run gate -- M14` on
161
+ every push and pull request, browser gate included — the runner image already ships
162
+ Chrome — and keeps the gate's evidence as a build artifact.
163
+ - [`.github/workflows/pages.yml`](.github/workflows/pages.yml) builds the demo and publishes
164
+ it to GitHub Pages on each push to `main`: the landing page at the site root, the demo
165
+ under `/demo/`. The demo's `base` is relative, so no deployment path is baked into the build.
166
+
167
+ ## License
168
+
169
+ MIT
@@ -0,0 +1,19 @@
1
+ import type { AlertType, Label } from '../types';
2
+ type __VLS_Props = {
3
+ message: Label;
4
+ /** An extra banner above the message — which fields are invalid, say. */
5
+ alert?: string;
6
+ alertType?: AlertType;
7
+ /** Label the buttons "Yes"/"No" rather than "OK"/"Cancel". */
8
+ yesNo?: boolean;
9
+ onOk?: () => void;
10
+ onCancel?: () => void;
11
+ /** Called exactly once, whichever way the dialog closes. `ok` says which. */
12
+ onSettled?: (ok: boolean) => void;
13
+ };
14
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
15
+ alertType: AlertType;
16
+ yesNo: boolean;
17
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
@@ -0,0 +1,35 @@
1
+ import type { ContextMenuItem } from '../core/contextMenu';
2
+ type __VLS_Props = {
3
+ /** Visual theme hook, mirrored onto the menu's class. @default 'dark' */
4
+ theme?: string;
5
+ };
6
+ type __VLS_Slots = {
7
+ /**
8
+ * Render the whole menu yourself, with your own UI kit.
9
+ *
10
+ * Replaces rdd's `ContextMenuAdapter`, whose single field was a component to swap in — a
11
+ * slot is the Vue spelling of exactly that (docs/decisions/0007-slots-over-render-props.md),
12
+ * and it needs no provider, no ref handshake and no adapter object.
13
+ *
14
+ * `items` is the pending menu, `x`/`y` the requested position, and `close` dismisses it.
15
+ * Positioning and dismissal are then yours: the built-in clamping, Escape handling and
16
+ * outside-click handling belong to the built-in markup this replaces.
17
+ */
18
+ default?: (props: {
19
+ items: ContextMenuItem[];
20
+ x: number;
21
+ y: number;
22
+ close: () => void;
23
+ }) => unknown;
24
+ };
25
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
26
+ theme: string;
27
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
28
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
29
+ declare const _default: typeof __VLS_export;
30
+ export default _default;
31
+ type __VLS_WithSlots<T, S> = T & {
32
+ new (): {
33
+ $slots: S;
34
+ };
35
+ };
@@ -0,0 +1,28 @@
1
+ import type { TaskbarVisibility } from './VddTaskbar.vue';
2
+ type __VLS_Props = {
3
+ /** Built-in skin, or a name you scope your own tokens to. @default 'vscode' */
4
+ skin?: string;
5
+ /** Enable the library's own transitions. Never affects the host app's animations. @default true */
6
+ animations?: boolean;
7
+ /**
8
+ * When the minimised-panel taskbar is shown.
9
+ * - `'always'` — a permanent strip
10
+ * - `'compact'` — only while something is minimised
11
+ * - `'autohide'` — an overlay collapsed to an 8px peek strip, expanding on hover
12
+ * @default 'always'
13
+ */
14
+ taskbar?: TaskbarVisibility;
15
+ /** Fallback icon for panels that register none. */
16
+ defaultPanelIcon?: unknown;
17
+ };
18
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ taskbarContextMenu: (panelId: string, event: MouseEvent | PointerEvent) => any;
20
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
+ onTaskbarContextMenu?: ((panelId: string, event: MouseEvent | PointerEvent) => any) | undefined;
22
+ }>, {
23
+ skin: string;
24
+ animations: boolean;
25
+ taskbar: TaskbarVisibility;
26
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
+ declare const _default: typeof __VLS_export;
28
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ type __VLS_Props = {
2
+ leafId: string;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,51 @@
1
+ import type { Component } from 'vue';
2
+ import type { PanelFloatPlacement } from '../core/stretch';
3
+ import type { Label } from '../types';
4
+ type __VLS_Props = {
5
+ /** Unique within this panel's overlay. Drives z-order and stack membership. */
6
+ widgetId: string;
7
+ /** Header text: plain, or a localisable descriptor resolved on every render. */
8
+ title: Label;
9
+ icon?: Component;
10
+ /** Width in pixels. Ignored while the inline axis is stretched, and returned to on release. */
11
+ width?: number;
12
+ /** Height in pixels. Ignored while the block axis is stretched, and returned to on release. */
13
+ height?: number;
14
+ /** `false` disables resize-to-stretch snapping, for content that needs a bounded size. @default true */
15
+ stretchable?: boolean;
16
+ };
17
+ type __VLS_ModelProps = {
18
+ /** Whether the widget is mounted. `v-model:open` replaces rdd's `usePanelFloatingWindow()`. */
19
+ 'open'?: boolean;
20
+ /**
21
+ * Where the widget sits: its corner, and which axes span the panel.
22
+ *
23
+ * Bind it and the caller owns placement — which is also the only way to persist it, since the
24
+ * library serialises nothing about inner widgets. Leave it off and the widget keeps its own.
25
+ */
26
+ 'placement'?: PanelFloatPlacement;
27
+ };
28
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
29
+ declare var __VLS_6: {};
30
+ type __VLS_Slots = {} & {
31
+ default?: (props: typeof __VLS_6) => any;
32
+ };
33
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
34
+ "update:open": (value: boolean) => any;
35
+ "update:placement": (value: PanelFloatPlacement) => any;
36
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
38
+ "onUpdate:placement"?: ((value: PanelFloatPlacement) => any) | undefined;
39
+ }>, {
40
+ width: number;
41
+ height: number;
42
+ stretchable: boolean;
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
45
+ declare const _default: typeof __VLS_export;
46
+ export default _default;
47
+ type __VLS_WithSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -0,0 +1,12 @@
1
+ import type { FloatingWindow } from '../types';
2
+ type __VLS_Props = {
3
+ window: FloatingWindow;
4
+ /** The workspace's measured size, for the clamps. */
5
+ viewport: {
6
+ width: number;
7
+ height: number;
8
+ };
9
+ };
10
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { LayoutLeafNode } from '../types';
2
+ type __VLS_Props = {
3
+ leaf: LayoutLeafNode;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import type { OverlayInstance } from '../core/overlays';
2
+ type __VLS_Props = {
3
+ instance: OverlayInstance;
4
+ /** Depth in the stack, which is what separates the modals' z-indexes. */
5
+ index: number;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,28 @@
1
+ import type { Component } from 'vue';
2
+ type __VLS_Props = {
3
+ block: 'side-panel' | 'modal';
4
+ title: string;
5
+ icon: Component | null;
6
+ /** `false` hides the close button entirely — a modal opened with `closable: false`. */
7
+ closable: boolean;
8
+ closeLabel: string;
9
+ /** Body padding, or `undefined` to leave it to the stylesheet. */
10
+ bodyPadding?: string;
11
+ };
12
+ declare var __VLS_6: {};
13
+ type __VLS_Slots = {} & {
14
+ default?: (props: typeof __VLS_6) => any;
15
+ };
16
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
17
+ close: () => any;
18
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
19
+ onClose?: (() => any) | undefined;
20
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
21
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
22
+ declare const _default: typeof __VLS_export;
23
+ export default _default;
24
+ type __VLS_WithSlots<T, S> = T & {
25
+ new (): {
26
+ $slots: S;
27
+ };
28
+ };
@@ -0,0 +1,8 @@
1
+ import type { PanelDomCache } from '../core/panelDom';
2
+ type __VLS_Props = {
3
+ panelId: string;
4
+ cache: PanelDomCache;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,9 @@
1
+ type __VLS_Props = {
2
+ /** The panel to show here. */
3
+ panelId: string;
4
+ /** Extra class for the host box. */
5
+ hostClass?: string;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,26 @@
1
+ import type { ButtonVariant, ToolbarPosition, ToolbarVariant } from '../core/panelOverlay';
2
+ type __VLS_Props = {
3
+ position: ToolbarPosition;
4
+ /** @default 'transparent' */
5
+ variant?: ToolbarVariant;
6
+ /** Inherited by this toolbar's buttons unless they override it. @default 'ghost' */
7
+ buttonVariant?: ButtonVariant;
8
+ /** Icon button size in pixels. Left to the stylesheet when unset. */
9
+ buttonSize?: number;
10
+ };
11
+ declare var __VLS_1: {};
12
+ type __VLS_Slots = {} & {
13
+ default?: (props: typeof __VLS_1) => any;
14
+ };
15
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
16
+ variant: ToolbarVariant;
17
+ buttonVariant: ButtonVariant;
18
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -0,0 +1,16 @@
1
+ import type { SidebarProps } from '../core/sidebarTypes';
2
+ /** Everything the primary accepts, except the two it decides for itself. */
3
+ type __VLS_Props = Omit<SidebarProps, 'position' | 'isSecondary'>;
4
+ declare var __VLS_10: string, __VLS_11: any;
5
+ type __VLS_Slots = {} & {
6
+ [K in NonNullable<typeof __VLS_10>]?: (props: typeof __VLS_11) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
12
+ type __VLS_WithSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
@@ -0,0 +1,10 @@
1
+ import type { OverlayInstance } from '../core/overlays';
2
+ type __VLS_Props = {
3
+ instance: OverlayInstance;
4
+ position: 'left' | 'right';
5
+ /** Used when the instance did not ask for a width. */
6
+ defaultWidth: number | string;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1,12 @@
1
+ type __VLS_Props = {
2
+ /** Applied when `openLeftPanel`/`openRightPanel` did not specify a width. @default 400 */
3
+ defaultWidth?: number | string;
4
+ /** Which edges this instance is responsible for. @default 'both' */
5
+ sides?: 'both' | 'left' | 'right';
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
8
+ defaultWidth: number | string;
9
+ sides: "both" | "left" | "right";
10
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -0,0 +1,54 @@
1
+ import type { SidebarProps, SidebarTab } from '../core/sidebarTypes';
2
+ type __VLS_Props = SidebarProps;
3
+ type __VLS_Slots = {
4
+ default?: () => unknown;
5
+ /** Replaces the library's drawer header, for whichever tab is open. */
6
+ header?: (props: {
7
+ tab: SidebarTab;
8
+ close: () => void;
9
+ open: () => void;
10
+ }) => unknown;
11
+ /** Content for one tab, by id: `#tab-layers`. */
12
+ [key: `tab-${string}`]: (props: {
13
+ tab: SidebarTab;
14
+ close: () => void;
15
+ open: () => void;
16
+ }) => unknown;
17
+ };
18
+ type __VLS_ModelProps = {
19
+ /** The open tab, or `null` when the drawer is closed. */
20
+ 'activeTabId'?: string | null;
21
+ /** Whether the whole sidebar — strip and drawer — is shown. */
22
+ 'visible'?: boolean;
23
+ /** Whether the activity strip is shown. The drawer is unaffected. */
24
+ 'stripVisible'?: boolean;
25
+ /** Drawer width in pixels. */
26
+ 'width'?: number;
27
+ };
28
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
29
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
30
+ "update:activeTabId": (value: string | null) => any;
31
+ "update:visible": (value: boolean) => any;
32
+ "update:stripVisible": (value: boolean) => any;
33
+ "update:width": (value: number) => any;
34
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
35
+ "onUpdate:activeTabId"?: ((value: string | null) => any) | undefined;
36
+ "onUpdate:visible"?: ((value: boolean) => any) | undefined;
37
+ "onUpdate:stripVisible"?: ((value: boolean) => any) | undefined;
38
+ "onUpdate:width"?: ((value: number) => any) | undefined;
39
+ }>, {
40
+ position: "left" | "right";
41
+ minWidth: number;
42
+ maxWidth: number;
43
+ showCloseButton: boolean;
44
+ hideDefaultHeader: boolean;
45
+ isSecondary: boolean;
46
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
48
+ declare const _default: typeof __VLS_export;
49
+ export default _default;
50
+ type __VLS_WithSlots<T, S> = T & {
51
+ new (): {
52
+ $slots: S;
53
+ };
54
+ };