@owdproject/nuxt 0.0.0-stage → 4.0.0-alpha.3

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 (169) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +77 -2
  3. package/dist/kit/authoring.d.ts +96 -0
  4. package/dist/kit/authoring.js +260 -0
  5. package/dist/kit/defineDesktopApp.d.ts +1 -0
  6. package/dist/kit/defineDesktopApp.js +1 -0
  7. package/dist/kit/defineDesktopPlugin.d.ts +1 -0
  8. package/dist/kit/defineDesktopPlugin.js +1 -0
  9. package/dist/module.d.mts +239 -0
  10. package/dist/module.json +12 -0
  11. package/dist/module.mjs +681 -0
  12. package/dist/runtime/components/Application/DesktopCoreApplicationRender.d.vue.ts +6 -0
  13. package/dist/runtime/components/Application/DesktopCoreApplicationRender.vue +18 -0
  14. package/dist/runtime/components/Application/DesktopCoreApplicationRender.vue.d.ts +6 -0
  15. package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.d.vue.ts +9 -0
  16. package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.vue +31 -0
  17. package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.vue.d.ts +9 -0
  18. package/dist/runtime/components/DesktopCore.d.vue.ts +19 -0
  19. package/dist/runtime/components/DesktopCore.vue +37 -0
  20. package/dist/runtime/components/DesktopCore.vue.d.ts +19 -0
  21. package/dist/runtime/components/background/DesktopCoreBackground.d.vue.ts +13 -0
  22. package/dist/runtime/components/background/DesktopCoreBackground.vue +16 -0
  23. package/dist/runtime/components/background/DesktopCoreBackground.vue.d.ts +13 -0
  24. package/dist/runtime/components/time/DesktopCoreTime.d.vue.ts +3 -0
  25. package/dist/runtime/components/time/DesktopCoreTime.vue +44 -0
  26. package/dist/runtime/components/time/DesktopCoreTime.vue.d.ts +3 -0
  27. package/dist/runtime/components/window/DesktopCoreWindow.d.vue.ts +49 -0
  28. package/dist/runtime/components/window/DesktopCoreWindow.vue +403 -0
  29. package/dist/runtime/components/window/DesktopCoreWindow.vue.d.ts +49 -0
  30. package/dist/runtime/components/window/DesktopCoreWindowContent.d.vue.ts +13 -0
  31. package/dist/runtime/components/window/DesktopCoreWindowContent.vue +34 -0
  32. package/dist/runtime/components/window/DesktopCoreWindowContent.vue.d.ts +13 -0
  33. package/dist/runtime/components/window/DesktopCoreWindowNav.d.vue.ts +13 -0
  34. package/dist/runtime/components/window/DesktopCoreWindowNav.vue +54 -0
  35. package/dist/runtime/components/window/DesktopCoreWindowNav.vue.d.ts +13 -0
  36. package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.d.vue.ts +19 -0
  37. package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.vue +46 -0
  38. package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.vue.d.ts +19 -0
  39. package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.d.vue.ts +24 -0
  40. package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.vue +50 -0
  41. package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.vue.d.ts +24 -0
  42. package/dist/runtime/composables/application/state.d.ts +1 -0
  43. package/dist/runtime/composables/application/state.js +2 -0
  44. package/dist/runtime/composables/application/useDesktopApplicationDefine.d.ts +4 -0
  45. package/dist/runtime/composables/application/useDesktopApplicationDefine.js +36 -0
  46. package/dist/runtime/composables/application/useDesktopApplicationExec.d.ts +3 -0
  47. package/dist/runtime/composables/application/useDesktopApplicationExec.js +26 -0
  48. package/dist/runtime/composables/application/useDesktopApplicationProcess.d.ts +24 -0
  49. package/dist/runtime/composables/application/useDesktopApplicationProcess.js +140 -0
  50. package/dist/runtime/composables/application/useDesktopApplicationRegistry.d.ts +11 -0
  51. package/dist/runtime/composables/application/useDesktopApplicationRegistry.js +60 -0
  52. package/dist/runtime/composables/useApplicationEntries.d.ts +5 -0
  53. package/dist/runtime/composables/useApplicationEntries.js +10 -0
  54. package/dist/runtime/composables/useApplicationManager.d.ts +16 -0
  55. package/dist/runtime/composables/useApplicationManager.js +30 -0
  56. package/dist/runtime/composables/useBlockNonInputContextMenu.d.ts +5 -0
  57. package/dist/runtime/composables/useBlockNonInputContextMenu.js +19 -0
  58. package/dist/runtime/composables/useDesktop.d.ts +210 -0
  59. package/dist/runtime/composables/useDesktop.js +52 -0
  60. package/dist/runtime/composables/useDesktopApplication.d.ts +34 -0
  61. package/dist/runtime/composables/useDesktopApplication.js +17 -0
  62. package/dist/runtime/composables/useDesktopCommands.d.ts +12 -0
  63. package/dist/runtime/composables/useDesktopCommands.js +348 -0
  64. package/dist/runtime/composables/useDesktopConfig.d.ts +3 -0
  65. package/dist/runtime/composables/useDesktopConfig.js +10 -0
  66. package/dist/runtime/composables/useDesktopDefaultApps.d.ts +15 -0
  67. package/dist/runtime/composables/useDesktopDefaultApps.js +21 -0
  68. package/dist/runtime/composables/useDesktopDialogs.d.ts +5 -0
  69. package/dist/runtime/composables/useDesktopDialogs.js +8 -0
  70. package/dist/runtime/composables/useDesktopDrag.d.ts +1 -0
  71. package/dist/runtime/composables/useDesktopDrag.js +1 -0
  72. package/dist/runtime/composables/useDesktopHooks.d.ts +15 -0
  73. package/dist/runtime/composables/useDesktopHooks.js +12 -0
  74. package/dist/runtime/composables/useDesktopIPC.d.ts +35 -0
  75. package/dist/runtime/composables/useDesktopIPC.js +72 -0
  76. package/dist/runtime/composables/useDesktopIdentity.d.ts +22 -0
  77. package/dist/runtime/composables/useDesktopIdentity.js +65 -0
  78. package/dist/runtime/composables/useDesktopManifest.d.ts +6 -0
  79. package/dist/runtime/composables/useDesktopManifest.js +17 -0
  80. package/dist/runtime/composables/useDesktopNotification.d.ts +13 -0
  81. package/dist/runtime/composables/useDesktopNotification.js +13 -0
  82. package/dist/runtime/composables/useDesktopResize.d.ts +1 -0
  83. package/dist/runtime/composables/useDesktopResize.js +1 -0
  84. package/dist/runtime/composables/useDesktopSession.d.ts +4 -0
  85. package/dist/runtime/composables/useDesktopSession.js +17 -0
  86. package/dist/runtime/composables/useDesktopShellIdentity.d.ts +1 -0
  87. package/dist/runtime/composables/useDesktopShellIdentity.js +3 -0
  88. package/dist/runtime/composables/useDesktopShellOptions.d.ts +5 -0
  89. package/dist/runtime/composables/useDesktopShellOptions.js +18 -0
  90. package/dist/runtime/composables/useDesktopTray.d.ts +5 -0
  91. package/dist/runtime/composables/useDesktopTray.js +10 -0
  92. package/dist/runtime/composables/useDesktopVolume.d.ts +4 -0
  93. package/dist/runtime/composables/useDesktopVolume.js +9 -0
  94. package/dist/runtime/composables/useDesktopWorkArea.d.ts +1 -0
  95. package/dist/runtime/composables/useDesktopWorkArea.js +3 -0
  96. package/dist/runtime/composables/useDesktopWorkarea.d.ts +12 -0
  97. package/dist/runtime/composables/useDesktopWorkarea.js +72 -0
  98. package/dist/runtime/composables/useTerminalManager.d.ts +15 -0
  99. package/dist/runtime/composables/useTerminalManager.js +9 -0
  100. package/dist/runtime/composables/useToggleWindowMaximize.d.ts +1 -0
  101. package/dist/runtime/composables/useToggleWindowMaximize.js +12 -0
  102. package/dist/runtime/composables/useWindowDragHandlers.d.ts +7 -0
  103. package/dist/runtime/composables/useWindowDragHandlers.js +7 -0
  104. package/dist/runtime/composables/window/useDesktopWindow.d.ts +14 -0
  105. package/dist/runtime/composables/window/useDesktopWindow.js +192 -0
  106. package/dist/runtime/composables/window/useDesktopWindowSnapDrop.d.ts +13 -0
  107. package/dist/runtime/composables/window/useDesktopWindowSnapDrop.js +78 -0
  108. package/dist/runtime/composables/workspace/useDesktopWorkspaceEdgeDrop.d.ts +25 -0
  109. package/dist/runtime/composables/workspace/useDesktopWorkspaceEdgeDrop.js +119 -0
  110. package/dist/runtime/composables/workspace/useDesktopWorkspaceManager.d.ts +8 -0
  111. package/dist/runtime/composables/workspace/useDesktopWorkspaceManager.js +46 -0
  112. package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewCapture.d.ts +20 -0
  113. package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewCapture.js +60 -0
  114. package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewLiveScale.d.ts +31 -0
  115. package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewLiveScale.js +92 -0
  116. package/dist/runtime/constants/desktopShellKeys.d.ts +5 -0
  117. package/dist/runtime/constants/desktopShellKeys.js +2 -0
  118. package/dist/runtime/constants/shellLayout.d.ts +4 -0
  119. package/dist/runtime/constants/shellLayout.js +2 -0
  120. package/dist/runtime/dialogs/desktopDialogProvider.d.ts +6 -0
  121. package/dist/runtime/dialogs/desktopDialogProvider.js +12 -0
  122. package/dist/runtime/internal/controllers/ApplicationController.d.ts +37 -0
  123. package/dist/runtime/internal/controllers/ApplicationController.js +434 -0
  124. package/dist/runtime/internal/controllers/WindowController.d.ts +83 -0
  125. package/dist/runtime/internal/controllers/WindowController.js +435 -0
  126. package/dist/runtime/plugins/01.desktop-shell-init.client.d.ts +2 -0
  127. package/dist/runtime/plugins/01.desktop-shell-init.client.js +18 -0
  128. package/dist/runtime/plugins/02.desktop-register-desktop-apps.client.d.ts +2 -0
  129. package/dist/runtime/plugins/02.desktop-register-desktop-apps.client.js +7 -0
  130. package/dist/runtime/stores/storeApplicationMeta.d.ts +2 -0
  131. package/dist/runtime/stores/storeApplicationMeta.js +20 -0
  132. package/dist/runtime/stores/storeApplicationWindows.d.ts +2 -0
  133. package/dist/runtime/stores/storeApplicationWindows.js +33 -0
  134. package/dist/runtime/stores/storeDesktop.d.ts +17 -0
  135. package/dist/runtime/stores/storeDesktop.js +16 -0
  136. package/dist/runtime/stores/storeDesktopDefaultApps.d.ts +8 -0
  137. package/dist/runtime/stores/storeDesktopDefaultApps.js +21 -0
  138. package/dist/runtime/stores/storeDesktopTray.d.ts +6 -0
  139. package/dist/runtime/stores/storeDesktopTray.js +21 -0
  140. package/dist/runtime/stores/storeDesktopVolume.d.ts +4 -0
  141. package/dist/runtime/stores/storeDesktopVolume.js +12 -0
  142. package/dist/runtime/stores/storeDesktopWorkspace.d.ts +26 -0
  143. package/dist/runtime/stores/storeDesktopWorkspace.js +91 -0
  144. package/dist/runtime/stores/storeNotification.d.ts +27 -0
  145. package/dist/runtime/stores/storeNotification.js +55 -0
  146. package/dist/runtime/types/index.d.ts +1 -0
  147. package/dist/runtime/types/index.js +1 -0
  148. package/dist/runtime/utils/defineDesktopApp.d.ts +2 -0
  149. package/dist/runtime/utils/defineDesktopApp.js +5 -0
  150. package/dist/runtime/utils/defineDesktopPlugin.d.ts +19 -0
  151. package/dist/runtime/utils/defineDesktopPlugin.js +29 -0
  152. package/dist/runtime/utils/utilApp.d.ts +2 -0
  153. package/dist/runtime/utils/utilApp.js +9 -0
  154. package/dist/runtime/utils/utilCaptureElementToCanvas.d.ts +1 -0
  155. package/dist/runtime/utils/utilCaptureElementToCanvas.js +21 -0
  156. package/dist/runtime/utils/utilDebug.d.ts +4 -0
  157. package/dist/runtime/utils/utilDebug.js +24 -0
  158. package/dist/runtime/utils/utilDetectSnapZone.d.ts +1 -0
  159. package/dist/runtime/utils/utilDetectSnapZone.js +5 -0
  160. package/dist/runtime/utils/utilWindowControllerAdapter.d.ts +2 -0
  161. package/dist/runtime/utils/utilWindowControllerAdapter.js +151 -0
  162. package/dist/runtime/utils/utilWindowLayout.d.ts +4 -0
  163. package/dist/runtime/utils/utilWindowLayout.js +34 -0
  164. package/dist/runtime/utils/utilWorkspaceWindows.d.ts +2 -0
  165. package/dist/runtime/utils/utilWorkspaceWindows.js +12 -0
  166. package/dist/types/index.d.ts +156 -0
  167. package/dist/types/index.js +1 -0
  168. package/dist/types.d.mts +2 -0
  169. package/package.json +145 -4
@@ -0,0 +1,681 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { defineNuxtModule, createResolver, installModule, addComponentsDir, addPlugin, addImportsDir } from '@nuxt/kit';
4
+ import { resolveDesktopConfigPath, warnLegacyDesktopConfig, assertValidDesktopUserConfig, warnDesktopConfigKeys, mergeDesktopConfig, installDesktopPackage } from '../dist/kit/authoring.js';
5
+ export { defineDesktopConfig, defineDesktopModule, defineDesktopTheme, hasDesktopModule, mergeDesktopExtensionConfig, setDesktopExtensionConfig } from '../dist/kit/authoring.js';
6
+ import { shallowRef, computed, getCurrentScope, onScopeDispose, reactive, markRaw, defineAsyncComponent } from 'vue';
7
+ import { createDesktop, WindowManager, DesktopPointerSession, windowMachine, IframeGuard } from '@owdproject/core';
8
+ export * from '@owdproject/core';
9
+ import { createActor } from 'xstate';
10
+
11
+ const version = "4.0.0-alpha.3";
12
+ const pkg = {
13
+ version: version};
14
+
15
+ function useDesktop(desktopOrOptions) {
16
+ const desktop = desktopOrOptions && "windows" in desktopOrOptions ? desktopOrOptions : createDesktop(desktopOrOptions);
17
+ const initial = desktop.getSnapshot();
18
+ const windows = shallowRef(initial.windows);
19
+ const applications = shallowRef(initial.applications);
20
+ const workspace = shallowRef(initial.workspace);
21
+ const commands = shallowRef(initial.commands);
22
+ const events = shallowRef(initial.events);
23
+ const unsubscribe = desktop.subscribe((snapshot) => {
24
+ windows.value = snapshot.windows;
25
+ applications.value = snapshot.applications;
26
+ workspace.value = snapshot.workspace;
27
+ commands.value = snapshot.commands;
28
+ events.value = snapshot.events;
29
+ });
30
+ const focusedWindow = computed(() => windows.value.find((w) => w.state.focused));
31
+ if (getCurrentScope()) {
32
+ onScopeDispose(() => {
33
+ unsubscribe();
34
+ });
35
+ }
36
+ return {
37
+ desktop,
38
+ windows,
39
+ applications,
40
+ workspace,
41
+ commands,
42
+ events,
43
+ focusedWindow
44
+ };
45
+ }
46
+
47
+ function useWindowManager(manager = new WindowManager()) {
48
+ const windows = shallowRef(manager.getSnapshot());
49
+ const unsubscribe = manager.subscribe((snapshot) => {
50
+ windows.value = [...snapshot];
51
+ });
52
+ const focused = computed(() => windows.value.find((w) => w.state.focused));
53
+ if (getCurrentScope()) {
54
+ onScopeDispose(() => {
55
+ unsubscribe();
56
+ });
57
+ }
58
+ return {
59
+ windows,
60
+ focused,
61
+ manager
62
+ };
63
+ }
64
+ const useVueWindowManager = useWindowManager;
65
+
66
+ function useWindowInstance(instance) {
67
+ const state = shallowRef(instance.getSnapshot());
68
+ const unsubscribe = instance.subscribe((newSnapshot) => {
69
+ state.value = newSnapshot;
70
+ });
71
+ if (getCurrentScope()) {
72
+ onScopeDispose(() => {
73
+ unsubscribe();
74
+ });
75
+ }
76
+ return {
77
+ state,
78
+ instance
79
+ };
80
+ }
81
+
82
+ function useDesktopDrag(options) {
83
+ function startDrag(event) {
84
+ return DesktopPointerSession.startDrag(event, {
85
+ initialBounds: options.getBounds(),
86
+ workarea: options.getWorkarea?.(),
87
+ onStart: options.onStart,
88
+ onMove: options.onMove,
89
+ onEnd: options.onEnd,
90
+ onCancel: options.onCancel
91
+ });
92
+ }
93
+ return {
94
+ startDrag
95
+ };
96
+ }
97
+ function useDesktopResize(options) {
98
+ function startResize(event, direction) {
99
+ return DesktopPointerSession.startResize(event, {
100
+ direction,
101
+ initialBounds: options.getBounds(),
102
+ minWidth: options.minWidth,
103
+ minHeight: options.minHeight,
104
+ maxWidth: options.maxWidth,
105
+ maxHeight: options.maxHeight,
106
+ onStart: options.onStart,
107
+ onMove: options.onMove,
108
+ onEnd: options.onEnd,
109
+ onCancel: options.onCancel
110
+ });
111
+ }
112
+ return {
113
+ startResize
114
+ };
115
+ }
116
+
117
+ function formatWindowSnapshotValue(value) {
118
+ if (typeof value === "string") return value;
119
+ if (value && typeof value === "object") {
120
+ const entries = Object.entries(value);
121
+ if (entries.length > 0) {
122
+ const [k, v] = entries[0];
123
+ return `${k}.${formatWindowSnapshotValue(v)}`;
124
+ }
125
+ }
126
+ return "normal";
127
+ }
128
+ function deepClone(obj) {
129
+ if (obj === null || typeof obj !== "object") return obj;
130
+ return JSON.parse(JSON.stringify(obj));
131
+ }
132
+ class WindowController {
133
+ application;
134
+ instanced = true;
135
+ model;
136
+ _stateValue = shallowRef("normal.focused.idle");
137
+ get stateValue() {
138
+ return this._stateValue.value;
139
+ }
140
+ config = {
141
+ title: "",
142
+ category: "",
143
+ component: void 0,
144
+ position: { x: 0, y: 0, z: 0 },
145
+ size: { width: void 0, height: void 0 },
146
+ minimizable: true,
147
+ maximized: false,
148
+ maximizable: true,
149
+ destroyable: true,
150
+ draggable: true,
151
+ resizable: true
152
+ };
153
+ override = reactive({});
154
+ storedState;
155
+ windowActor;
156
+ isDisposed = false;
157
+ actions;
158
+ constructor(application, model, windowConfig, windowStoredState, options) {
159
+ this.application = application;
160
+ this.model = model;
161
+ this.storedState = windowStoredState;
162
+ this.setConfig(windowConfig);
163
+ this.restoreState();
164
+ this.actions = Object.freeze({
165
+ setActive: this.setActive.bind(this),
166
+ setFocus: this.setFocus.bind(this),
167
+ bringToFront: this.focus.bind(this),
168
+ focus: this.focus.bind(this),
169
+ setPosition: this.setPosition.bind(this),
170
+ startDrag: this.startDrag.bind(this),
171
+ stopDrag: this.stopDrag.bind(this),
172
+ startResize: this.startResize.bind(this),
173
+ stopResize: this.stopResize.bind(this),
174
+ setSize: this.setSize.bind(this),
175
+ minimize: this.minimize.bind(this),
176
+ unminimize: this.unminimize.bind(this),
177
+ toggleMinimize: this.toggleMinimize.bind(this),
178
+ toggleMaximize: this.toggleMaximize.bind(this),
179
+ maximize: this.maximize.bind(this),
180
+ unmaximize: this.unmaximize.bind(this),
181
+ setLayout: this.setLayout.bind(this),
182
+ clearLayout: this.clearLayout.bind(this),
183
+ saveBoundsBeforeLayout: this.saveBoundsBeforeLayout.bind(this),
184
+ destroy: this.destroy.bind(this),
185
+ setWorkspace: this.setWorkspace.bind(this),
186
+ setTitleOverride: this.setTitleOverride.bind(this),
187
+ resetTitleOverride: this.resetTitleOverride.bind(this),
188
+ setWindowTitleOverride: this.setWindowTitleOverride.bind(this),
189
+ resetWindowTitleOverride: this.resetWindowTitleOverride.bind(this)
190
+ });
191
+ let initialValue = { normal: "unfocused" };
192
+ if (this.state.active === false) {
193
+ initialValue = "minimized";
194
+ } else if (this.state.maximized === true) {
195
+ initialValue = this.state.focused ? { maximized: "focused" } : { maximized: "unfocused" };
196
+ } else if (this.state.focused === true) {
197
+ initialValue = { normal: { focused: "idle" } };
198
+ }
199
+ this.windowActor = createActor(windowMachine, {
200
+ state: windowMachine.resolveState({
201
+ value: initialValue,
202
+ context: {
203
+ wasMaximized: !!this.state.maximized,
204
+ config: this.config
205
+ }
206
+ })
207
+ });
208
+ let wasLastMaximized = !!this.state.maximized;
209
+ this.windowActor.subscribe((snapshot) => {
210
+ if (this.isDisposed) return;
211
+ this._stateValue.value = formatWindowSnapshotValue(snapshot.value);
212
+ const isMinimized = snapshot.matches("minimized");
213
+ const isMaximized = snapshot.matches("maximized");
214
+ const isFocused = snapshot.matches("normal.focused") || snapshot.matches("maximized.focused");
215
+ const isDragging = snapshot.matches("normal.focused.dragging");
216
+ const isResizing = snapshot.matches("normal.focused.resizing");
217
+ if (this.state.active !== !isMinimized) this.state.active = !isMinimized;
218
+ if (this.state.maximized !== isMaximized) this.state.maximized = isMaximized;
219
+ if (this.state.focused !== isFocused) this.state.focused = isFocused;
220
+ if (this.state.dragging !== isDragging) this.state.dragging = isDragging;
221
+ if (this.state.resizing !== isResizing) this.state.resizing = isResizing;
222
+ if (isMaximized && !wasLastMaximized) {
223
+ this.saveBoundsBeforeLayout();
224
+ this.state.layout = "maximize";
225
+ const workarea = options?.getWorkarea?.();
226
+ if (workarea && workarea.width > 0 && workarea.height > 0) {
227
+ this.setPosition({ x: workarea.x, y: workarea.y });
228
+ this.setSize({ width: workarea.width, height: workarea.height });
229
+ }
230
+ } else if (!isMaximized && wasLastMaximized) {
231
+ if (this.state.layout === "maximize") {
232
+ this.clearLayout();
233
+ }
234
+ }
235
+ wasLastMaximized = isMaximized;
236
+ });
237
+ this.windowActor.start();
238
+ }
239
+ setConfig(config) {
240
+ if (config.component) {
241
+ this.config.component = markRaw(
242
+ typeof config.component === "function" ? defineAsyncComponent(config.component) : config.component
243
+ );
244
+ }
245
+ if (config.title) this.config.title = config.title;
246
+ if (config.icon) this.config.icon = config.icon;
247
+ if (!this.config.position) this.config.position = { x: 0, y: 0, z: 0 };
248
+ if (config.position?.x !== void 0) this.config.position.x = config.position.x;
249
+ if (config.position?.y !== void 0) this.config.position.y = config.position.y;
250
+ if (config.position?.z !== void 0) this.config.position.z = config.position.z;
251
+ if (config.size?.width !== void 0) this.config.size.width = config.size.width;
252
+ if (config.size?.height !== void 0) this.config.size.height = config.size.height;
253
+ if (config.size?.minWidth !== void 0) this.config.size.minWidth = config.size.minWidth;
254
+ if (config.size?.minHeight !== void 0) this.config.size.minHeight = config.size.minHeight;
255
+ if (config.size?.maxWidth !== void 0) this.config.size.maxWidth = config.size.maxWidth;
256
+ if (config.size?.maxHeight !== void 0) this.config.size.maxHeight = config.size.maxHeight;
257
+ if (typeof config.resizable !== "undefined") this.config.resizable = config.resizable;
258
+ if (typeof config.minimizable !== "undefined") this.config.minimizable = config.minimizable;
259
+ if (typeof config.maximizable !== "undefined") {
260
+ this.config.maximizable = config.maximizable;
261
+ } else {
262
+ this.config.maximizable = this.config.resizable !== false;
263
+ }
264
+ if (typeof config.maximized !== "undefined") this.config.maximized = config.maximized;
265
+ if (typeof config.draggable !== "undefined") this.config.draggable = config.draggable;
266
+ if (typeof config.destroyable !== "undefined") this.config.destroyable = config.destroyable;
267
+ const DEFAULT_OVERRIDABLE = {
268
+ draggable: true,
269
+ resizable: false,
270
+ position: false,
271
+ size: false,
272
+ maximized: false,
273
+ destroyable: false,
274
+ minimizable: false,
275
+ maximizable: false
276
+ };
277
+ DEFAULT_OVERRIDABLE.position = DEFAULT_OVERRIDABLE.draggable;
278
+ DEFAULT_OVERRIDABLE.size = DEFAULT_OVERRIDABLE.resizable;
279
+ DEFAULT_OVERRIDABLE.maximized = DEFAULT_OVERRIDABLE.maximizable;
280
+ this.config.overridable = {
281
+ ...DEFAULT_OVERRIDABLE,
282
+ ...config.overridable || {}
283
+ };
284
+ }
285
+ get state() {
286
+ return this.storedState.state;
287
+ }
288
+ restoreState() {
289
+ const overridable = this.config.overridable || {};
290
+ for (const key in overridable) {
291
+ if (overridable[key]) {
292
+ const stateKey = key;
293
+ if (typeof this.state[stateKey] === "undefined") {
294
+ if (typeof this.config[stateKey] === "object") {
295
+ this.state[stateKey] = deepClone(this.config[stateKey]);
296
+ } else {
297
+ this.state[stateKey] = !!this.config[stateKey];
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ get meta() {
304
+ return this.storedState.meta;
305
+ }
306
+ setPosition(data) {
307
+ if (!this.state.position) {
308
+ this.state.position = { x: 0, y: 0 };
309
+ }
310
+ this.state.position.x = Math.round(data.x);
311
+ this.state.position.y = Math.round(data.y);
312
+ }
313
+ setActive(value) {
314
+ if (this.isDisposed) return;
315
+ if (value) {
316
+ this.windowActor.send({ type: "RESTORE" });
317
+ } else {
318
+ this.windowActor.send({ type: "MINIMIZE" });
319
+ }
320
+ }
321
+ setFocus(value) {
322
+ if (this.isDisposed) return;
323
+ if (value) {
324
+ if (!this.state.focused) {
325
+ this.windowActor.send({ type: "FOCUS" });
326
+ }
327
+ } else {
328
+ if (this.state.focused) {
329
+ this.windowActor.send({ type: "BLUR" });
330
+ }
331
+ }
332
+ }
333
+ focus() {
334
+ if (this.isDisposed) return;
335
+ if (!this.state.position) {
336
+ this.state.position = { x: 0, y: 0, z: 0 };
337
+ }
338
+ if (this.application?.focusWindow) {
339
+ this.application.focusWindow(this);
340
+ } else {
341
+ this.setFocus(true);
342
+ }
343
+ }
344
+ get title() {
345
+ if (typeof this.override.title !== "undefined") return this.override.title;
346
+ if (this.config.title) return this.config.title;
347
+ return this.application?.config?.title ?? "";
348
+ }
349
+ get windowTitle() {
350
+ if (typeof this.override.windowTitle !== "undefined") return this.override.windowTitle;
351
+ return this.title;
352
+ }
353
+ get icon() {
354
+ if (typeof this.override.icon !== "undefined") return this.override.icon;
355
+ if (this.config.icon) return this.config.icon;
356
+ return this.application?.config?.icon;
357
+ }
358
+ get position() {
359
+ return this.state.position ?? this.config.position;
360
+ }
361
+ get size() {
362
+ const stateSize = this.state.size || {};
363
+ const configSize = this.config.size || {};
364
+ return {
365
+ width: stateSize.width !== void 0 ? stateSize.width : configSize.width,
366
+ height: stateSize.height !== void 0 ? stateSize.height : configSize.height,
367
+ minWidth: stateSize.minWidth !== void 0 ? stateSize.minWidth : configSize.minWidth,
368
+ maxWidth: stateSize.maxWidth !== void 0 ? stateSize.maxWidth : configSize.maxWidth,
369
+ minHeight: stateSize.minHeight !== void 0 ? stateSize.minHeight : configSize.minHeight,
370
+ maxHeight: stateSize.maxHeight !== void 0 ? stateSize.maxHeight : configSize.maxHeight
371
+ };
372
+ }
373
+ setSize(data) {
374
+ if (!this.state.size) {
375
+ this.state.size = { width: void 0, height: void 0 };
376
+ }
377
+ this.state.size.width = Math.round(data.width);
378
+ this.state.size.height = Math.round(data.height);
379
+ }
380
+ get isMinimizable() {
381
+ return this.config.overridable?.minimizable ? !!this.state.minimizable : !!this.config.minimizable;
382
+ }
383
+ minimize() {
384
+ if (this.isDisposed || !this.isMinimizable) return false;
385
+ this.windowActor.send({ type: "MINIMIZE" });
386
+ return true;
387
+ }
388
+ unminimize() {
389
+ if (this.isDisposed) return false;
390
+ this.windowActor.send({ type: "RESTORE" });
391
+ return true;
392
+ }
393
+ toggleMinimize() {
394
+ if (this.isDisposed) return;
395
+ if (this.windowActor.getSnapshot().matches("minimized")) {
396
+ this.unminimize();
397
+ this.focus();
398
+ } else if (this.state.focused) {
399
+ this.minimize();
400
+ } else {
401
+ this.focus();
402
+ }
403
+ }
404
+ get isMaximizable() {
405
+ return this.state.maximizable !== void 0 ? !!this.state.maximizable : !!this.config.maximizable;
406
+ }
407
+ get isMaximized() {
408
+ if (this.state.layout === "maximize") return true;
409
+ return this.config.overridable?.maximized ? !!this.state.maximized : !!this.config.maximized;
410
+ }
411
+ parseSizeValue(value, fallback) {
412
+ if (typeof value === "number") return value;
413
+ if (typeof value === "string") {
414
+ const parsed = Number.parseFloat(value);
415
+ if (!Number.isNaN(parsed)) return parsed;
416
+ }
417
+ return fallback;
418
+ }
419
+ saveBoundsBeforeLayout() {
420
+ if (this.state.layout && this.state.layout !== "normal") return;
421
+ const pos = this.position;
422
+ const size = this.size;
423
+ this.state.boundsBeforeLayout = {
424
+ x: pos?.x ?? 0,
425
+ y: pos?.y ?? 0,
426
+ width: this.parseSizeValue(size.width, 420),
427
+ height: this.parseSizeValue(size.height, 320)
428
+ };
429
+ }
430
+ setLayout(layout) {
431
+ if (this.isDisposed) return false;
432
+ if (layout === "normal") {
433
+ this.windowActor.send({ type: "RESTORE" });
434
+ this.clearLayout();
435
+ return true;
436
+ }
437
+ if (!this.isMaximizable) return false;
438
+ if (layout === "maximize") {
439
+ this.windowActor.send({ type: "MAXIMIZE" });
440
+ } else {
441
+ this.windowActor.send({ type: "RESTORE" });
442
+ this.saveBoundsBeforeLayout();
443
+ this.state.layout = layout;
444
+ }
445
+ return true;
446
+ }
447
+ clearLayout() {
448
+ const bounds = this.state.boundsBeforeLayout;
449
+ if (bounds) {
450
+ this.setPosition({ x: bounds.x, y: bounds.y });
451
+ this.setSize({ width: bounds.width, height: bounds.height });
452
+ delete this.state.boundsBeforeLayout;
453
+ }
454
+ this.state.layout = "normal";
455
+ this.state.maximized = false;
456
+ return true;
457
+ }
458
+ toggleMaximize() {
459
+ if (this.isDisposed || !this.isMaximizable) return false;
460
+ if (this.isMaximized) {
461
+ this.windowActor.send({ type: "RESTORE" });
462
+ } else {
463
+ this.windowActor.send({ type: "MAXIMIZE" });
464
+ }
465
+ return true;
466
+ }
467
+ maximize() {
468
+ if (this.isDisposed || !this.isMaximizable) return false;
469
+ this.windowActor.send({ type: "MAXIMIZE" });
470
+ return true;
471
+ }
472
+ unmaximize() {
473
+ if (this.isDisposed || !this.isMaximizable) return false;
474
+ this.windowActor.send({ type: "RESTORE" });
475
+ return true;
476
+ }
477
+ get isDestroyable() {
478
+ return this.config.overridable?.destroyable ? !!this.state.destroyable : !!this.config.destroyable;
479
+ }
480
+ dispose() {
481
+ if (this.isDisposed) return;
482
+ this.isDisposed = true;
483
+ try {
484
+ this.windowActor.stop();
485
+ } catch {
486
+ }
487
+ }
488
+ destroy() {
489
+ if (!this.isDestroyable) return false;
490
+ if (!this.isDisposed) {
491
+ this.windowActor.send({ type: "DESTROY" });
492
+ }
493
+ this.application?.closeWindow?.(this.state.id);
494
+ return true;
495
+ }
496
+ get isDraggable() {
497
+ return this.config.overridable?.draggable ? !!this.state.draggable : !!this.config.draggable;
498
+ }
499
+ get isResizable() {
500
+ return this.config.overridable?.resizable ? !!this.state.resizable : !!this.config.resizable;
501
+ }
502
+ setWorkspace(workspaceId) {
503
+ this.state.workspace = workspaceId;
504
+ }
505
+ startDrag() {
506
+ if (!this.isDisposed) {
507
+ IframeGuard.enable();
508
+ this.windowActor.send({ type: "DRAG_START" });
509
+ }
510
+ }
511
+ stopDrag() {
512
+ if (!this.isDisposed) {
513
+ IframeGuard.disable();
514
+ this.windowActor.send({ type: "DRAG_END" });
515
+ }
516
+ }
517
+ startResize() {
518
+ if (!this.isDisposed) {
519
+ IframeGuard.enable();
520
+ this.windowActor.send({ type: "RESIZE_START" });
521
+ }
522
+ }
523
+ stopResize() {
524
+ if (!this.isDisposed) {
525
+ IframeGuard.disable();
526
+ this.windowActor.send({ type: "RESIZE_END" });
527
+ }
528
+ }
529
+ setTitleOverride(value) {
530
+ this.override.title = value;
531
+ }
532
+ resetTitleOverride() {
533
+ this.override.title = void 0;
534
+ }
535
+ setWindowTitleOverride(value) {
536
+ this.override.windowTitle = value;
537
+ }
538
+ resetWindowTitleOverride() {
539
+ this.override.windowTitle = void 0;
540
+ }
541
+ menu = [];
542
+ setMenu(menu) {
543
+ this.menu = menu;
544
+ }
545
+ }
546
+
547
+ const module$1 = defineNuxtModule({
548
+ meta: {
549
+ name: "@owdproject/nuxt",
550
+ configKey: "desktop",
551
+ compatibility: {
552
+ nuxt: ">=3.0.0 || >=4.0.0"
553
+ }
554
+ },
555
+ defaults: {
556
+ theme: void 0,
557
+ apps: [],
558
+ modules: []
559
+ },
560
+ async setup(options, _nuxt) {
561
+ const { resolve } = createResolver(import.meta.url);
562
+ const require = createRequire(import.meta.url);
563
+ await installModule(require.resolve("@pinia/nuxt"));
564
+ await installModule(require.resolve("@nuxt/fonts"));
565
+ await installModule(require.resolve("@nuxt/icon"), {
566
+ clientBundle: {
567
+ scan: true,
568
+ sizeLimitKb: 256
569
+ }
570
+ });
571
+ await installModule(require.resolve("@vueuse/nuxt"));
572
+ await installModule(require.resolve("@nuxtjs/i18n"));
573
+ const kitExt = existsSync(resolve("./kit/authoring.js")) ? ".js" : existsSync(resolve("./kit/authoring.ts")) ? ".ts" : "";
574
+ _nuxt.options.alias["@owdproject/nuxt/kit/defineDesktopApp"] = resolve(`./kit/defineDesktopApp${kitExt}`);
575
+ _nuxt.options.alias["@owdproject/nuxt/kit/defineDesktopPlugin"] = resolve(`./kit/defineDesktopPlugin${kitExt}`);
576
+ _nuxt.options.alias["@owdproject/nuxt/kit/defineDesktopTheme"] = resolve(`./kit/authoring${kitExt}`);
577
+ _nuxt.options.alias["@owdproject/nuxt/kit/defineDesktopConfig"] = resolve(`./kit/authoring${kitExt}`);
578
+ _nuxt.options.alias["@owdproject/nuxt/kit"] = resolve(`./kit/authoring${kitExt}`);
579
+ _nuxt.options.alias["@owdproject/nuxt/runtime"] = resolve("./runtime");
580
+ _nuxt.options.alias["@owdproject/nuxt"] = resolve("./module");
581
+ _nuxt.options.experimental = {
582
+ ..._nuxt.options.experimental,
583
+ viteEnvironmentApi: _nuxt.options.experimental?.viteEnvironmentApi ?? true
584
+ };
585
+ _nuxt.options.runtimeConfig.public.desktop = {};
586
+ let clientConfig = {
587
+ theme: void 0,
588
+ apps: [],
589
+ modules: []
590
+ };
591
+ const resolvedConfig = resolveDesktopConfigPath(_nuxt.options.rootDir);
592
+ if (resolvedConfig) {
593
+ warnLegacyDesktopConfig(resolvedConfig);
594
+ _nuxt.options.watch ??= [];
595
+ _nuxt.options.watch.push(resolvedConfig.path);
596
+ try {
597
+ clientConfig = (await import(resolvedConfig.path)).default;
598
+ } catch (e) {
599
+ const hint = "Export default defineDesktopConfig({ theme, apps, modules }) from desktop.config.ts.";
600
+ throw new Error(
601
+ `[@owdproject/nuxt] Cannot load ${resolvedConfig.file}. ${hint}`,
602
+ { cause: e }
603
+ );
604
+ }
605
+ assertValidDesktopUserConfig(clientConfig, resolvedConfig.file);
606
+ const configRecord = clientConfig;
607
+ warnDesktopConfigKeys(configRecord, resolvedConfig.file);
608
+ }
609
+ const desktop = mergeDesktopConfig(options, clientConfig, pkg.version);
610
+ _nuxt.options.runtimeConfig.public.desktop = desktop;
611
+ {
612
+ if (desktop.theme) {
613
+ try {
614
+ await installDesktopPackage(_nuxt, desktop.theme, desktop);
615
+ } catch (e) {
616
+ const msg = e instanceof Error ? e.message : String(e);
617
+ throw new Error(`[@owdproject/nuxt] Could not load theme "${desktop.theme}". Details: ${msg}`);
618
+ }
619
+ }
620
+ if (Array.isArray(desktop.modules)) {
621
+ for (const modulePath of desktop.modules) {
622
+ try {
623
+ await installDesktopPackage(_nuxt, modulePath, desktop);
624
+ } catch (e) {
625
+ const msg = e instanceof Error ? e.message : String(e);
626
+ throw new Error(`[@owdproject/nuxt] Could not load module "${modulePath}". Details: ${msg}`);
627
+ }
628
+ }
629
+ }
630
+ if (Array.isArray(desktop.apps)) {
631
+ for (const appPath of desktop.apps) {
632
+ try {
633
+ await installDesktopPackage(_nuxt, appPath, desktop);
634
+ } catch (e) {
635
+ const msg = e instanceof Error ? e.message : String(e);
636
+ throw new Error(`[@owdproject/nuxt] Could not load app "${appPath}". Details: ${msg}`);
637
+ }
638
+ }
639
+ }
640
+ }
641
+ _nuxt.options.appConfig.desktop = _nuxt.options.runtimeConfig.public.desktop;
642
+ {
643
+ _nuxt.hook("vite:extendConfig", (viteConfig) => {
644
+ viteConfig.css = viteConfig.css || {};
645
+ viteConfig.css.preprocessorOptions = viteConfig.css.preprocessorOptions || {};
646
+ viteConfig.css.preprocessorOptions.scss = {
647
+ api: "modern-compiler"
648
+ };
649
+ });
650
+ }
651
+ {
652
+ try {
653
+ _nuxt.options.css.push(require.resolve("sanitize.css"));
654
+ } catch {
655
+ _nuxt.options.css.push("sanitize.css");
656
+ }
657
+ }
658
+ {
659
+ addComponentsDir({
660
+ path: resolve("./runtime/components"),
661
+ prefix: "Desktop",
662
+ pathPrefix: false,
663
+ global: true
664
+ });
665
+ }
666
+ {
667
+ addPlugin(
668
+ resolve("./runtime/plugins/01.desktop-shell-init.client")
669
+ );
670
+ addPlugin(
671
+ resolve("./runtime/plugins/02.desktop-register-desktop-apps.client")
672
+ );
673
+ addImportsDir(resolve("./runtime/composables"));
674
+ addImportsDir(resolve("./runtime/stores"));
675
+ addImportsDir(resolve("./runtime/utils"));
676
+ addImportsDir(resolve("./runtime/constants"));
677
+ }
678
+ }
679
+ });
680
+
681
+ export { WindowController, module$1 as default, useDesktop, useDesktopDrag, useDesktopResize, useVueWindowManager, useWindowInstance, useWindowManager };
@@ -0,0 +1,6 @@
1
+ type __VLS_Props = {
2
+ workspaceFilter?: 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,18 @@
1
+ <script setup>
2
+ import { useDesktop } from "../../composables/useDesktop";
3
+ defineProps({
4
+ workspaceFilter: { type: String, required: false }
5
+ });
6
+ const { applications } = useDesktop();
7
+ const runningApps = applications.running;
8
+ </script>
9
+
10
+ <template>
11
+ <DesktopCoreApplicationWindowsRender
12
+ v-for="app of runningApps"
13
+ :key="app.id"
14
+ :workspace-filter="workspaceFilter"
15
+ :windows="app.windowsOpened"
16
+ :window-revision="app.openWindowCount.value"
17
+ />
18
+ </template>