@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.
- package/LICENSE +20 -0
- package/README.md +77 -2
- package/dist/kit/authoring.d.ts +96 -0
- package/dist/kit/authoring.js +260 -0
- package/dist/kit/defineDesktopApp.d.ts +1 -0
- package/dist/kit/defineDesktopApp.js +1 -0
- package/dist/kit/defineDesktopPlugin.d.ts +1 -0
- package/dist/kit/defineDesktopPlugin.js +1 -0
- package/dist/module.d.mts +239 -0
- package/dist/module.json +12 -0
- package/dist/module.mjs +681 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationRender.d.vue.ts +6 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationRender.vue +18 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationRender.vue.d.ts +6 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.d.vue.ts +9 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.vue +31 -0
- package/dist/runtime/components/Application/DesktopCoreApplicationWindowsRender.vue.d.ts +9 -0
- package/dist/runtime/components/DesktopCore.d.vue.ts +19 -0
- package/dist/runtime/components/DesktopCore.vue +37 -0
- package/dist/runtime/components/DesktopCore.vue.d.ts +19 -0
- package/dist/runtime/components/background/DesktopCoreBackground.d.vue.ts +13 -0
- package/dist/runtime/components/background/DesktopCoreBackground.vue +16 -0
- package/dist/runtime/components/background/DesktopCoreBackground.vue.d.ts +13 -0
- package/dist/runtime/components/time/DesktopCoreTime.d.vue.ts +3 -0
- package/dist/runtime/components/time/DesktopCoreTime.vue +44 -0
- package/dist/runtime/components/time/DesktopCoreTime.vue.d.ts +3 -0
- package/dist/runtime/components/window/DesktopCoreWindow.d.vue.ts +49 -0
- package/dist/runtime/components/window/DesktopCoreWindow.vue +403 -0
- package/dist/runtime/components/window/DesktopCoreWindow.vue.d.ts +49 -0
- package/dist/runtime/components/window/DesktopCoreWindowContent.d.vue.ts +13 -0
- package/dist/runtime/components/window/DesktopCoreWindowContent.vue +34 -0
- package/dist/runtime/components/window/DesktopCoreWindowContent.vue.d.ts +13 -0
- package/dist/runtime/components/window/DesktopCoreWindowNav.d.vue.ts +13 -0
- package/dist/runtime/components/window/DesktopCoreWindowNav.vue +54 -0
- package/dist/runtime/components/window/DesktopCoreWindowNav.vue.d.ts +13 -0
- package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.d.vue.ts +19 -0
- package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.vue +46 -0
- package/dist/runtime/components/window/DesktopCoreWindowSnapHintsBase.vue.d.ts +19 -0
- package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.d.vue.ts +24 -0
- package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.vue +50 -0
- package/dist/runtime/components/workspace/DesktopCoreWorkspaceEdgeHintsBase.vue.d.ts +24 -0
- package/dist/runtime/composables/application/state.d.ts +1 -0
- package/dist/runtime/composables/application/state.js +2 -0
- package/dist/runtime/composables/application/useDesktopApplicationDefine.d.ts +4 -0
- package/dist/runtime/composables/application/useDesktopApplicationDefine.js +36 -0
- package/dist/runtime/composables/application/useDesktopApplicationExec.d.ts +3 -0
- package/dist/runtime/composables/application/useDesktopApplicationExec.js +26 -0
- package/dist/runtime/composables/application/useDesktopApplicationProcess.d.ts +24 -0
- package/dist/runtime/composables/application/useDesktopApplicationProcess.js +140 -0
- package/dist/runtime/composables/application/useDesktopApplicationRegistry.d.ts +11 -0
- package/dist/runtime/composables/application/useDesktopApplicationRegistry.js +60 -0
- package/dist/runtime/composables/useApplicationEntries.d.ts +5 -0
- package/dist/runtime/composables/useApplicationEntries.js +10 -0
- package/dist/runtime/composables/useApplicationManager.d.ts +16 -0
- package/dist/runtime/composables/useApplicationManager.js +30 -0
- package/dist/runtime/composables/useBlockNonInputContextMenu.d.ts +5 -0
- package/dist/runtime/composables/useBlockNonInputContextMenu.js +19 -0
- package/dist/runtime/composables/useDesktop.d.ts +210 -0
- package/dist/runtime/composables/useDesktop.js +52 -0
- package/dist/runtime/composables/useDesktopApplication.d.ts +34 -0
- package/dist/runtime/composables/useDesktopApplication.js +17 -0
- package/dist/runtime/composables/useDesktopCommands.d.ts +12 -0
- package/dist/runtime/composables/useDesktopCommands.js +348 -0
- package/dist/runtime/composables/useDesktopConfig.d.ts +3 -0
- package/dist/runtime/composables/useDesktopConfig.js +10 -0
- package/dist/runtime/composables/useDesktopDefaultApps.d.ts +15 -0
- package/dist/runtime/composables/useDesktopDefaultApps.js +21 -0
- package/dist/runtime/composables/useDesktopDialogs.d.ts +5 -0
- package/dist/runtime/composables/useDesktopDialogs.js +8 -0
- package/dist/runtime/composables/useDesktopDrag.d.ts +1 -0
- package/dist/runtime/composables/useDesktopDrag.js +1 -0
- package/dist/runtime/composables/useDesktopHooks.d.ts +15 -0
- package/dist/runtime/composables/useDesktopHooks.js +12 -0
- package/dist/runtime/composables/useDesktopIPC.d.ts +35 -0
- package/dist/runtime/composables/useDesktopIPC.js +72 -0
- package/dist/runtime/composables/useDesktopIdentity.d.ts +22 -0
- package/dist/runtime/composables/useDesktopIdentity.js +65 -0
- package/dist/runtime/composables/useDesktopManifest.d.ts +6 -0
- package/dist/runtime/composables/useDesktopManifest.js +17 -0
- package/dist/runtime/composables/useDesktopNotification.d.ts +13 -0
- package/dist/runtime/composables/useDesktopNotification.js +13 -0
- package/dist/runtime/composables/useDesktopResize.d.ts +1 -0
- package/dist/runtime/composables/useDesktopResize.js +1 -0
- package/dist/runtime/composables/useDesktopSession.d.ts +4 -0
- package/dist/runtime/composables/useDesktopSession.js +17 -0
- package/dist/runtime/composables/useDesktopShellIdentity.d.ts +1 -0
- package/dist/runtime/composables/useDesktopShellIdentity.js +3 -0
- package/dist/runtime/composables/useDesktopShellOptions.d.ts +5 -0
- package/dist/runtime/composables/useDesktopShellOptions.js +18 -0
- package/dist/runtime/composables/useDesktopTray.d.ts +5 -0
- package/dist/runtime/composables/useDesktopTray.js +10 -0
- package/dist/runtime/composables/useDesktopVolume.d.ts +4 -0
- package/dist/runtime/composables/useDesktopVolume.js +9 -0
- package/dist/runtime/composables/useDesktopWorkArea.d.ts +1 -0
- package/dist/runtime/composables/useDesktopWorkArea.js +3 -0
- package/dist/runtime/composables/useDesktopWorkarea.d.ts +12 -0
- package/dist/runtime/composables/useDesktopWorkarea.js +72 -0
- package/dist/runtime/composables/useTerminalManager.d.ts +15 -0
- package/dist/runtime/composables/useTerminalManager.js +9 -0
- package/dist/runtime/composables/useToggleWindowMaximize.d.ts +1 -0
- package/dist/runtime/composables/useToggleWindowMaximize.js +12 -0
- package/dist/runtime/composables/useWindowDragHandlers.d.ts +7 -0
- package/dist/runtime/composables/useWindowDragHandlers.js +7 -0
- package/dist/runtime/composables/window/useDesktopWindow.d.ts +14 -0
- package/dist/runtime/composables/window/useDesktopWindow.js +192 -0
- package/dist/runtime/composables/window/useDesktopWindowSnapDrop.d.ts +13 -0
- package/dist/runtime/composables/window/useDesktopWindowSnapDrop.js +78 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceEdgeDrop.d.ts +25 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceEdgeDrop.js +119 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceManager.d.ts +8 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceManager.js +46 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewCapture.d.ts +20 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewCapture.js +60 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewLiveScale.d.ts +31 -0
- package/dist/runtime/composables/workspace/useDesktopWorkspaceOverviewLiveScale.js +92 -0
- package/dist/runtime/constants/desktopShellKeys.d.ts +5 -0
- package/dist/runtime/constants/desktopShellKeys.js +2 -0
- package/dist/runtime/constants/shellLayout.d.ts +4 -0
- package/dist/runtime/constants/shellLayout.js +2 -0
- package/dist/runtime/dialogs/desktopDialogProvider.d.ts +6 -0
- package/dist/runtime/dialogs/desktopDialogProvider.js +12 -0
- package/dist/runtime/internal/controllers/ApplicationController.d.ts +37 -0
- package/dist/runtime/internal/controllers/ApplicationController.js +434 -0
- package/dist/runtime/internal/controllers/WindowController.d.ts +83 -0
- package/dist/runtime/internal/controllers/WindowController.js +435 -0
- package/dist/runtime/plugins/01.desktop-shell-init.client.d.ts +2 -0
- package/dist/runtime/plugins/01.desktop-shell-init.client.js +18 -0
- package/dist/runtime/plugins/02.desktop-register-desktop-apps.client.d.ts +2 -0
- package/dist/runtime/plugins/02.desktop-register-desktop-apps.client.js +7 -0
- package/dist/runtime/stores/storeApplicationMeta.d.ts +2 -0
- package/dist/runtime/stores/storeApplicationMeta.js +20 -0
- package/dist/runtime/stores/storeApplicationWindows.d.ts +2 -0
- package/dist/runtime/stores/storeApplicationWindows.js +33 -0
- package/dist/runtime/stores/storeDesktop.d.ts +17 -0
- package/dist/runtime/stores/storeDesktop.js +16 -0
- package/dist/runtime/stores/storeDesktopDefaultApps.d.ts +8 -0
- package/dist/runtime/stores/storeDesktopDefaultApps.js +21 -0
- package/dist/runtime/stores/storeDesktopTray.d.ts +6 -0
- package/dist/runtime/stores/storeDesktopTray.js +21 -0
- package/dist/runtime/stores/storeDesktopVolume.d.ts +4 -0
- package/dist/runtime/stores/storeDesktopVolume.js +12 -0
- package/dist/runtime/stores/storeDesktopWorkspace.d.ts +26 -0
- package/dist/runtime/stores/storeDesktopWorkspace.js +91 -0
- package/dist/runtime/stores/storeNotification.d.ts +27 -0
- package/dist/runtime/stores/storeNotification.js +55 -0
- package/dist/runtime/types/index.d.ts +1 -0
- package/dist/runtime/types/index.js +1 -0
- package/dist/runtime/utils/defineDesktopApp.d.ts +2 -0
- package/dist/runtime/utils/defineDesktopApp.js +5 -0
- package/dist/runtime/utils/defineDesktopPlugin.d.ts +19 -0
- package/dist/runtime/utils/defineDesktopPlugin.js +29 -0
- package/dist/runtime/utils/utilApp.d.ts +2 -0
- package/dist/runtime/utils/utilApp.js +9 -0
- package/dist/runtime/utils/utilCaptureElementToCanvas.d.ts +1 -0
- package/dist/runtime/utils/utilCaptureElementToCanvas.js +21 -0
- package/dist/runtime/utils/utilDebug.d.ts +4 -0
- package/dist/runtime/utils/utilDebug.js +24 -0
- package/dist/runtime/utils/utilDetectSnapZone.d.ts +1 -0
- package/dist/runtime/utils/utilDetectSnapZone.js +5 -0
- package/dist/runtime/utils/utilWindowControllerAdapter.d.ts +2 -0
- package/dist/runtime/utils/utilWindowControllerAdapter.js +151 -0
- package/dist/runtime/utils/utilWindowLayout.d.ts +4 -0
- package/dist/runtime/utils/utilWindowLayout.js +34 -0
- package/dist/runtime/utils/utilWorkspaceWindows.d.ts +2 -0
- package/dist/runtime/utils/utilWorkspaceWindows.js +12 -0
- package/dist/types/index.d.ts +156 -0
- package/dist/types/index.js +1 -0
- package/dist/types.d.mts +2 -0
- package/package.json +145 -4
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
import { apps } from "../application/state.js";
|
|
3
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace.js";
|
|
4
|
+
import { useDesktopIPC } from "../useDesktopIPC.js";
|
|
5
|
+
import { useDesktopHooks } from "../useDesktopHooks.js";
|
|
6
|
+
const sharedWindowList = computed(() => {
|
|
7
|
+
const windows = [];
|
|
8
|
+
for (const app of apps.values()) {
|
|
9
|
+
if (!app.isRunning && app.openWindowCount.value === 0) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
for (const window2 of app.windows.values()) {
|
|
13
|
+
windows.push(window2);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return windows;
|
|
17
|
+
});
|
|
18
|
+
const sharedWindowIndex = computed(() => {
|
|
19
|
+
const index = /* @__PURE__ */ new Map();
|
|
20
|
+
for (const win of sharedWindowList.value) {
|
|
21
|
+
index.set(win.state.id, win);
|
|
22
|
+
}
|
|
23
|
+
return index;
|
|
24
|
+
});
|
|
25
|
+
const sharedFocusedWindow = computed(() => {
|
|
26
|
+
for (const win of sharedWindowList.value) {
|
|
27
|
+
if (win.state.focused) {
|
|
28
|
+
return win;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return void 0;
|
|
32
|
+
});
|
|
33
|
+
export function useDesktopWindow() {
|
|
34
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
35
|
+
const activeWorkspaceWindows = computed(() => {
|
|
36
|
+
const activeWs = desktopWorkspaceStore.active;
|
|
37
|
+
return sharedWindowList.value.filter(
|
|
38
|
+
(win) => !win.state.workspace || win.state.workspace === activeWs
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
const topMaximizedWindow = computed(() => {
|
|
42
|
+
if (desktopWorkspaceStore.overview) return void 0;
|
|
43
|
+
let topWin;
|
|
44
|
+
let maxZ = -Infinity;
|
|
45
|
+
for (const win of activeWorkspaceWindows.value) {
|
|
46
|
+
if (win.state.active !== false && win.state.maximized) {
|
|
47
|
+
const z = win.position?.z ?? 0;
|
|
48
|
+
if (z > maxZ) {
|
|
49
|
+
maxZ = z;
|
|
50
|
+
topWin = win;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return topWin;
|
|
55
|
+
});
|
|
56
|
+
function get(windowId) {
|
|
57
|
+
return sharedWindowIndex.value.get(windowId);
|
|
58
|
+
}
|
|
59
|
+
function tileWindows(mode = "horizontal", workspaceId) {
|
|
60
|
+
const targetWs = workspaceId || desktopWorkspaceStore.active;
|
|
61
|
+
const visibleWindows = sharedWindowList.value.filter(
|
|
62
|
+
(win) => (!win.state.workspace || win.state.workspace === targetWs) && win.state.active !== false
|
|
63
|
+
);
|
|
64
|
+
if (visibleWindows.length === 0) return 0;
|
|
65
|
+
const workarea = desktopWorkspaceStore.workarea;
|
|
66
|
+
const areaX = workarea.width > 0 ? workarea.x : 0;
|
|
67
|
+
const areaY = workarea.height > 0 ? workarea.y : 48;
|
|
68
|
+
const areaW = workarea.width > 0 ? workarea.width : window.innerWidth;
|
|
69
|
+
const areaH = workarea.height > 0 ? workarea.height : window.innerHeight - 48;
|
|
70
|
+
const gap = 8;
|
|
71
|
+
const count = visibleWindows.length;
|
|
72
|
+
const { callHook } = useDesktopHooks();
|
|
73
|
+
if (count === 1) {
|
|
74
|
+
const win = visibleWindows[0];
|
|
75
|
+
win.actions.saveBoundsBeforeLayout();
|
|
76
|
+
win.actions.setPosition({ x: areaX + gap, y: areaY + gap });
|
|
77
|
+
win.actions.setSize({ width: areaW - gap * 2, height: areaH - gap * 2 });
|
|
78
|
+
win.actions.bringToFront();
|
|
79
|
+
void callHook("window:layout-change", { window: win, layout: "normal" });
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
if (mode === "horizontal") {
|
|
83
|
+
const colW = Math.floor((areaW - gap * (count + 1)) / count);
|
|
84
|
+
visibleWindows.forEach((win, idx) => {
|
|
85
|
+
win.actions.saveBoundsBeforeLayout();
|
|
86
|
+
win.state.maximized = false;
|
|
87
|
+
const nextLayout = count === 2 ? idx === 0 ? "left-half" : "right-half" : "normal";
|
|
88
|
+
win.state.layout = nextLayout;
|
|
89
|
+
win.actions.setPosition({
|
|
90
|
+
x: areaX + gap + idx * (colW + gap),
|
|
91
|
+
y: areaY + gap
|
|
92
|
+
});
|
|
93
|
+
win.actions.setSize({
|
|
94
|
+
width: colW,
|
|
95
|
+
height: areaH - gap * 2
|
|
96
|
+
});
|
|
97
|
+
void callHook("window:layout-change", { window: win, layout: nextLayout });
|
|
98
|
+
});
|
|
99
|
+
} else if (mode === "vertical") {
|
|
100
|
+
const rowH = Math.floor((areaH - gap * (count + 1)) / count);
|
|
101
|
+
visibleWindows.forEach((win, idx) => {
|
|
102
|
+
win.actions.saveBoundsBeforeLayout();
|
|
103
|
+
win.state.maximized = false;
|
|
104
|
+
win.state.layout = "normal";
|
|
105
|
+
win.actions.setPosition({
|
|
106
|
+
x: areaX + gap,
|
|
107
|
+
y: areaY + gap + idx * (rowH + gap)
|
|
108
|
+
});
|
|
109
|
+
win.actions.setSize({
|
|
110
|
+
width: areaW - gap * 2,
|
|
111
|
+
height: rowH
|
|
112
|
+
});
|
|
113
|
+
void callHook("window:layout-change", { window: win, layout: "normal" });
|
|
114
|
+
});
|
|
115
|
+
} else {
|
|
116
|
+
const cols = Math.ceil(Math.sqrt(count));
|
|
117
|
+
const rows = Math.ceil(count / cols);
|
|
118
|
+
const cellW = Math.floor((areaW - gap * (cols + 1)) / cols);
|
|
119
|
+
const cellH = Math.floor((areaH - gap * (rows + 1)) / rows);
|
|
120
|
+
visibleWindows.forEach((win, idx) => {
|
|
121
|
+
const col = idx % cols;
|
|
122
|
+
const row = Math.floor(idx / cols);
|
|
123
|
+
win.actions.saveBoundsBeforeLayout();
|
|
124
|
+
win.state.maximized = false;
|
|
125
|
+
win.state.layout = "normal";
|
|
126
|
+
win.actions.setPosition({
|
|
127
|
+
x: areaX + gap + col * (cellW + gap),
|
|
128
|
+
y: areaY + gap + row * (cellH + gap)
|
|
129
|
+
});
|
|
130
|
+
win.actions.setSize({
|
|
131
|
+
width: cellW,
|
|
132
|
+
height: cellH
|
|
133
|
+
});
|
|
134
|
+
void callHook("window:layout-change", { window: win, layout: "normal" });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
useDesktopIPC().emit(
|
|
138
|
+
"window:tiled",
|
|
139
|
+
{
|
|
140
|
+
mode,
|
|
141
|
+
count,
|
|
142
|
+
workspace: targetWs
|
|
143
|
+
},
|
|
144
|
+
{ source: "display-server", severity: "info" }
|
|
145
|
+
);
|
|
146
|
+
return count;
|
|
147
|
+
}
|
|
148
|
+
function minimizeAll(workspaceId) {
|
|
149
|
+
const targetWs = workspaceId || desktopWorkspaceStore.active;
|
|
150
|
+
for (const win of sharedWindowList.value) {
|
|
151
|
+
if (!win.state.workspace || win.state.workspace === targetWs) {
|
|
152
|
+
win.minimize();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function restoreAll(workspaceId) {
|
|
157
|
+
const targetWs = workspaceId || desktopWorkspaceStore.active;
|
|
158
|
+
for (const win of sharedWindowList.value) {
|
|
159
|
+
if (!win.state.workspace || win.state.workspace === targetWs) {
|
|
160
|
+
win.unminimize();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
list: sharedWindowList,
|
|
166
|
+
index: sharedWindowIndex,
|
|
167
|
+
activeWorkspaceWindows,
|
|
168
|
+
focused: sharedFocusedWindow,
|
|
169
|
+
topMaximizedWindow,
|
|
170
|
+
get,
|
|
171
|
+
tileWindows,
|
|
172
|
+
minimizeAll,
|
|
173
|
+
restoreAll,
|
|
174
|
+
close: (windowId) => {
|
|
175
|
+
const window2 = get(windowId);
|
|
176
|
+
window2?.application.closeWindow(window2.state.id);
|
|
177
|
+
},
|
|
178
|
+
closeAll: (appId) => {
|
|
179
|
+
if (appId) {
|
|
180
|
+
const app = apps.get(appId);
|
|
181
|
+
if (app) {
|
|
182
|
+
app.closeAllWindows();
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
for (const app of apps.values()) {
|
|
186
|
+
app.closeAllWindows();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export const useDesktopWindows = useDesktopWindow;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DesktopWorkareaRect, IWindowController } from '../../../types/index.js';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
/**
|
|
4
|
+
* While dragging a maximizable window, highlight snap zones in the shell work area.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useDesktopWindowSnapDrop(): {
|
|
7
|
+
snapHint: any;
|
|
8
|
+
snapHintRect: import("vue").ComputedRef<import("@owdproject/core").WindowBounds | null>;
|
|
9
|
+
isSnapDragActive: Ref<boolean, boolean>;
|
|
10
|
+
beginWindowSnapDrag: (windowId: string, workarea: DesktopWorkareaRect, maximizable: boolean) => void;
|
|
11
|
+
endWindowSnapDrag: (win: IWindowController) => boolean;
|
|
12
|
+
activeWorkarea: () => DesktopWorkareaRect;
|
|
13
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { computed, ref } from "vue";
|
|
2
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace.js";
|
|
3
|
+
import {
|
|
4
|
+
detectSnapZone
|
|
5
|
+
} from "../../utils/utilDetectSnapZone.js";
|
|
6
|
+
import { applySnapToWindow, computeSnapRect } from "../../utils/utilWindowLayout.js";
|
|
7
|
+
const snapHint = ref(null);
|
|
8
|
+
const isSnapDragActive = ref(false);
|
|
9
|
+
let snapDraggingWindowId = null;
|
|
10
|
+
let activeWorkarea = { x: 0, y: 0, width: 0, height: 0 };
|
|
11
|
+
function onDocumentPointerMove(e) {
|
|
12
|
+
updateSnapHintFromPointer(e.clientX, e.clientY);
|
|
13
|
+
}
|
|
14
|
+
function onDocumentMouseMove(e) {
|
|
15
|
+
updateSnapHintFromPointer(e.clientX, e.clientY);
|
|
16
|
+
}
|
|
17
|
+
function stopSnapPointerTracking() {
|
|
18
|
+
document.removeEventListener("pointermove", onDocumentPointerMove);
|
|
19
|
+
document.removeEventListener("mousemove", onDocumentMouseMove);
|
|
20
|
+
}
|
|
21
|
+
function updateSnapHintFromPointer(clientX, clientY) {
|
|
22
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
23
|
+
if (!isSnapDragActive.value || desktopWorkspaceStore.overview) {
|
|
24
|
+
snapHint.value = null;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const deferSide = desktopWorkspaceStore.list.length > 1 && !desktopWorkspaceStore.overview;
|
|
28
|
+
snapHint.value = detectSnapZone(clientX, clientY, activeWorkarea, {
|
|
29
|
+
deferSideSnapForWorkspaceEdge: deferSide
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function useDesktopWindowSnapDrop() {
|
|
33
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
34
|
+
function beginWindowSnapDrag(windowId, workarea, maximizable) {
|
|
35
|
+
if (desktopWorkspaceStore.overview) return;
|
|
36
|
+
if (!maximizable) return;
|
|
37
|
+
if (workarea.width <= 0 || workarea.height <= 0) return;
|
|
38
|
+
snapDraggingWindowId = windowId;
|
|
39
|
+
isSnapDragActive.value = true;
|
|
40
|
+
activeWorkarea = { ...workarea };
|
|
41
|
+
snapHint.value = null;
|
|
42
|
+
document.addEventListener("pointermove", onDocumentPointerMove, {
|
|
43
|
+
passive: true
|
|
44
|
+
});
|
|
45
|
+
document.addEventListener("mousemove", onDocumentMouseMove, {
|
|
46
|
+
passive: true
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function commitSnapDrop(win) {
|
|
50
|
+
const zone = snapHint.value;
|
|
51
|
+
if (!zone || !snapDraggingWindowId) return false;
|
|
52
|
+
return applySnapToWindow(win, zone, activeWorkarea);
|
|
53
|
+
}
|
|
54
|
+
function endWindowSnapDrag(win) {
|
|
55
|
+
stopSnapPointerTracking();
|
|
56
|
+
let snapped = false;
|
|
57
|
+
if (isSnapDragActive.value && snapHint.value) {
|
|
58
|
+
snapped = commitSnapDrop(win);
|
|
59
|
+
}
|
|
60
|
+
isSnapDragActive.value = false;
|
|
61
|
+
snapDraggingWindowId = null;
|
|
62
|
+
snapHint.value = null;
|
|
63
|
+
return snapped;
|
|
64
|
+
}
|
|
65
|
+
const snapHintRect = computed(() => {
|
|
66
|
+
const zone = snapHint.value;
|
|
67
|
+
if (!zone || activeWorkarea.width <= 0) return null;
|
|
68
|
+
return computeSnapRect(zone, activeWorkarea);
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
snapHint,
|
|
72
|
+
snapHintRect,
|
|
73
|
+
isSnapDragActive,
|
|
74
|
+
beginWindowSnapDrag,
|
|
75
|
+
endWindowSnapDrag,
|
|
76
|
+
activeWorkarea: () => activeWorkarea
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IWindowController } from '../../../types/index.js';
|
|
2
|
+
declare function adjacentWorkspaceId(side: 'left' | 'right'): string | null;
|
|
3
|
+
/**
|
|
4
|
+
* While dragging a window (normal desktop, not overview), highlight left/right
|
|
5
|
+
* screen edges when an adjacent workspace exists so the user can drop there.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useDesktopWorkspaceEdgeDrop(): {
|
|
8
|
+
edgeHint: import("vue").Ref<"left" | "right" | null, "left" | "right" | null>;
|
|
9
|
+
edgeTargetDesktopIndex: import("vue").ComputedRef<number | null>;
|
|
10
|
+
isWindowDragActive: import("vue").Ref<boolean, boolean>;
|
|
11
|
+
beginWindowDrag: (windowId: string) => void;
|
|
12
|
+
endWindowDrag: (windowInstance?: IWindowController) => boolean;
|
|
13
|
+
adjacentWorkspaceId: typeof adjacentWorkspaceId;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Wire {@link useDesktopWorkspaceEdgeDrop} to DesktopWindow drag events (theme Window wrapper).
|
|
17
|
+
*/
|
|
18
|
+
export declare function useDesktopWorkspaceEdgeDropWindowHandlers(getWindow: () => IWindowController | undefined): {
|
|
19
|
+
onDragStart: () => void;
|
|
20
|
+
onDragEnd: (data: {
|
|
21
|
+
left: number;
|
|
22
|
+
top: number;
|
|
23
|
+
}) => void;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { computed, ref } from "vue";
|
|
2
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace.js";
|
|
3
|
+
import { WORKSPACE_EDGE_DROP_PX } from "../../constants/shellLayout.js";
|
|
4
|
+
const edgeHint = ref(null);
|
|
5
|
+
const isWindowDragActive = ref(false);
|
|
6
|
+
let draggingWindowId = null;
|
|
7
|
+
function adjacentWorkspaceId(side) {
|
|
8
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
9
|
+
if (desktopWorkspaceStore.overview) return null;
|
|
10
|
+
const list = desktopWorkspaceStore.list;
|
|
11
|
+
if (list.length < 2) return null;
|
|
12
|
+
const index = desktopWorkspaceStore.workspaceActiveIndex;
|
|
13
|
+
if (index < 0) return null;
|
|
14
|
+
if (side === "left" && index > 0) {
|
|
15
|
+
return list[index - 1] ?? null;
|
|
16
|
+
}
|
|
17
|
+
if (side === "right" && index < list.length - 1) {
|
|
18
|
+
return list[index + 1] ?? null;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function updateEdgeHintFromClientX(clientX) {
|
|
23
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
24
|
+
if (!isWindowDragActive.value || desktopWorkspaceStore.overview) {
|
|
25
|
+
edgeHint.value = null;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const viewportWidth = typeof globalThis !== "undefined" ? globalThis.innerWidth : 0;
|
|
29
|
+
if (clientX <= WORKSPACE_EDGE_DROP_PX && adjacentWorkspaceId("left")) {
|
|
30
|
+
edgeHint.value = "left";
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (clientX >= viewportWidth - WORKSPACE_EDGE_DROP_PX && adjacentWorkspaceId("right")) {
|
|
34
|
+
edgeHint.value = "right";
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
edgeHint.value = null;
|
|
38
|
+
}
|
|
39
|
+
function onDocumentPointerMove(e) {
|
|
40
|
+
updateEdgeHintFromClientX(e.clientX);
|
|
41
|
+
}
|
|
42
|
+
function stopPointerTracking() {
|
|
43
|
+
document.removeEventListener("pointermove", onDocumentPointerMove);
|
|
44
|
+
}
|
|
45
|
+
export function useDesktopWorkspaceEdgeDrop() {
|
|
46
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
47
|
+
function beginWindowDrag(windowId) {
|
|
48
|
+
if (desktopWorkspaceStore.overview) return;
|
|
49
|
+
if (desktopWorkspaceStore.list.length < 2) return;
|
|
50
|
+
draggingWindowId = windowId;
|
|
51
|
+
isWindowDragActive.value = true;
|
|
52
|
+
edgeHint.value = null;
|
|
53
|
+
document.addEventListener("pointermove", onDocumentPointerMove, {
|
|
54
|
+
passive: true
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function commitEdgeDrop(windowInstance) {
|
|
58
|
+
const side = edgeHint.value;
|
|
59
|
+
if (!side || !draggingWindowId) return false;
|
|
60
|
+
const targetWorkspaceId = adjacentWorkspaceId(side);
|
|
61
|
+
if (!targetWorkspaceId) return false;
|
|
62
|
+
windowInstance.actions.setWorkspace(targetWorkspaceId);
|
|
63
|
+
desktopWorkspaceStore.setWorkspace(targetWorkspaceId);
|
|
64
|
+
const inset = WORKSPACE_EDGE_DROP_PX + 24;
|
|
65
|
+
const pos = windowInstance.position;
|
|
66
|
+
if (pos && typeof pos.y === "number") {
|
|
67
|
+
const viewportWidth = typeof globalThis !== "undefined" ? globalThis.innerWidth : 1920;
|
|
68
|
+
const rawWidth = windowInstance.size?.width ?? 400;
|
|
69
|
+
const width = typeof rawWidth === "number" ? rawWidth : Number.parseFloat(String(rawWidth)) || 400;
|
|
70
|
+
const x = side === "left" ? inset : Math.max(inset, viewportWidth - width - inset);
|
|
71
|
+
windowInstance.actions.setPosition({ x, y: pos.y });
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
function endWindowDrag(windowInstance) {
|
|
76
|
+
stopPointerTracking();
|
|
77
|
+
let moved = false;
|
|
78
|
+
if (windowInstance && edgeHint.value) {
|
|
79
|
+
moved = commitEdgeDrop(windowInstance);
|
|
80
|
+
}
|
|
81
|
+
isWindowDragActive.value = false;
|
|
82
|
+
draggingWindowId = null;
|
|
83
|
+
edgeHint.value = null;
|
|
84
|
+
return moved;
|
|
85
|
+
}
|
|
86
|
+
const edgeTargetDesktopIndex = computed(() => {
|
|
87
|
+
const side = edgeHint.value;
|
|
88
|
+
if (!side) return null;
|
|
89
|
+
const targetId = adjacentWorkspaceId(side);
|
|
90
|
+
if (!targetId) return null;
|
|
91
|
+
const index = desktopWorkspaceStore.list.indexOf(targetId);
|
|
92
|
+
return index >= 0 ? index + 1 : null;
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
edgeHint,
|
|
96
|
+
edgeTargetDesktopIndex,
|
|
97
|
+
isWindowDragActive,
|
|
98
|
+
beginWindowDrag,
|
|
99
|
+
endWindowDrag,
|
|
100
|
+
adjacentWorkspaceId
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function useDesktopWorkspaceEdgeDropWindowHandlers(getWindow) {
|
|
104
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
105
|
+
const { beginWindowDrag, endWindowDrag } = useDesktopWorkspaceEdgeDrop();
|
|
106
|
+
function onDragStart() {
|
|
107
|
+
const windowInstance = getWindow();
|
|
108
|
+
if (!windowInstance?.state?.id || desktopWorkspaceStore.overview) return;
|
|
109
|
+
beginWindowDrag(windowInstance.state.id);
|
|
110
|
+
}
|
|
111
|
+
function onDragEnd(data) {
|
|
112
|
+
const windowInstance = getWindow();
|
|
113
|
+
const moved = Boolean(windowInstance) && !desktopWorkspaceStore.overview && endWindowDrag(windowInstance);
|
|
114
|
+
if (!moved && windowInstance) {
|
|
115
|
+
windowInstance.actions.setPosition({ x: data.left, y: data.top });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { onDragStart, onDragEnd };
|
|
119
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard + HTML5 drop handlers for workspace management (move windows between desktops).
|
|
3
|
+
*/
|
|
4
|
+
export declare function useDesktopWorkspaceManager(): {
|
|
5
|
+
onWorkspaceDragOver: (e: DragEvent) => void;
|
|
6
|
+
onWorkspaceDrop: (e: DragEvent, workspaceId: string) => void;
|
|
7
|
+
removeWorkspace: (workspaceId: string) => boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useEventListener } from "@vueuse/core";
|
|
2
|
+
import { useDesktopWindow } from "../window/useDesktopWindow.js";
|
|
3
|
+
import { apps } from "../application/state.js";
|
|
4
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace.js";
|
|
5
|
+
import { collectWindowsOnWorkspace } from "../../utils/utilWorkspaceWindows.js";
|
|
6
|
+
export function useDesktopWorkspaceManager() {
|
|
7
|
+
const desktopWindow = useDesktopWindow();
|
|
8
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
9
|
+
useEventListener(window, "keydown", (e) => {
|
|
10
|
+
if (e.key !== "Escape") return;
|
|
11
|
+
if (!desktopWorkspaceStore.overview) return;
|
|
12
|
+
desktopWorkspaceStore.setOverview(false);
|
|
13
|
+
});
|
|
14
|
+
function onWorkspaceDragOver(e) {
|
|
15
|
+
if (!desktopWorkspaceStore.overview) return;
|
|
16
|
+
e.preventDefault();
|
|
17
|
+
}
|
|
18
|
+
function onWorkspaceDrop(e, workspaceId) {
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
if (!desktopWorkspaceStore.overview) return;
|
|
21
|
+
const raw = e.dataTransfer?.getData("text/plain") || e.dataTransfer?.getData("text") || "";
|
|
22
|
+
if (!raw) return;
|
|
23
|
+
const windowInstance = desktopWindow.get(raw);
|
|
24
|
+
windowInstance?.actions.setWorkspace(workspaceId);
|
|
25
|
+
}
|
|
26
|
+
function removeWorkspace(workspaceId) {
|
|
27
|
+
if (desktopWorkspaceStore.list.length <= 2) return false;
|
|
28
|
+
const fallbackId = desktopWorkspaceStore.resolveWorkspaceFallback(workspaceId);
|
|
29
|
+
if (!fallbackId) return false;
|
|
30
|
+
const activeId = desktopWorkspaceStore.active;
|
|
31
|
+
const windows = collectWindowsOnWorkspace(
|
|
32
|
+
apps.values(),
|
|
33
|
+
workspaceId,
|
|
34
|
+
activeId
|
|
35
|
+
);
|
|
36
|
+
for (const windowInstance of windows) {
|
|
37
|
+
windowInstance.actions.setWorkspace(fallbackId);
|
|
38
|
+
}
|
|
39
|
+
return desktopWorkspaceStore.removeWorkspace(workspaceId);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
onWorkspaceDragOver,
|
|
43
|
+
onWorkspaceDrop,
|
|
44
|
+
removeWorkspace
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type WorkspaceRootResolver = (workspaceId: string) => HTMLElement | null | undefined;
|
|
2
|
+
export type UseWorkspaceOverviewCaptureOptions = {
|
|
3
|
+
/** Delay before capturing after overview opens (ms). Default 150. */
|
|
4
|
+
debounceMs?: number;
|
|
5
|
+
/** JPEG quality for thumbnail data URLs (0–1). Default 0.7. */
|
|
6
|
+
jpegQuality?: number;
|
|
7
|
+
/** Passed through to html2canvas. */
|
|
8
|
+
captureOptions?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Captures workspace desktop roots as JPEG data URLs while workspace overview is open.
|
|
12
|
+
* Themes supply a resolver that maps each workspace id to its DOM root (e.g. a layer wrapping
|
|
13
|
+
* {@link DesktopApplicationRender} with `workspace-filter`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function useDesktopWorkspaceOverviewCapture(resolveWorkspaceRoot: WorkspaceRootResolver, options?: UseWorkspaceOverviewCaptureOptions): {
|
|
16
|
+
thumbnails: import("vue").ShallowRef<Map<string, string>, Map<string, string>>;
|
|
17
|
+
isCapturing: import("vue").Ref<boolean, boolean>;
|
|
18
|
+
refreshThumbnails: () => Promise<void>;
|
|
19
|
+
thumbnailFor: (workspaceId: string) => string | undefined;
|
|
20
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { useDebounceFn } from "@vueuse/core";
|
|
2
|
+
import { nextTick, ref, shallowRef, watch } from "vue";
|
|
3
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace.js";
|
|
4
|
+
import { captureElementToCanvas } from "../../utils/utilCaptureElementToCanvas.js";
|
|
5
|
+
export function useDesktopWorkspaceOverviewCapture(resolveWorkspaceRoot, options = {}) {
|
|
6
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
7
|
+
const thumbnails = shallowRef(/* @__PURE__ */ new Map());
|
|
8
|
+
const isCapturing = ref(false);
|
|
9
|
+
const debounceMs = options.debounceMs ?? 150;
|
|
10
|
+
const jpegQuality = options.jpegQuality ?? 0.7;
|
|
11
|
+
async function captureWorkspace(workspaceId) {
|
|
12
|
+
const element = resolveWorkspaceRoot(workspaceId);
|
|
13
|
+
const canvas = await captureElementToCanvas(element, options.captureOptions);
|
|
14
|
+
if (!canvas) return null;
|
|
15
|
+
return canvas.toDataURL("image/jpeg", jpegQuality);
|
|
16
|
+
}
|
|
17
|
+
async function refreshThumbnails() {
|
|
18
|
+
if (!desktopWorkspaceStore.overview) return;
|
|
19
|
+
isCapturing.value = true;
|
|
20
|
+
const next = /* @__PURE__ */ new Map();
|
|
21
|
+
try {
|
|
22
|
+
await nextTick();
|
|
23
|
+
const ids = [...desktopWorkspaceStore.list];
|
|
24
|
+
await Promise.all(
|
|
25
|
+
ids.map(async (id) => {
|
|
26
|
+
const dataUrl = await captureWorkspace(id);
|
|
27
|
+
if (dataUrl) next.set(id, dataUrl);
|
|
28
|
+
})
|
|
29
|
+
);
|
|
30
|
+
thumbnails.value = next;
|
|
31
|
+
} finally {
|
|
32
|
+
isCapturing.value = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const scheduleRefresh = useDebounceFn(() => {
|
|
36
|
+
void refreshThumbnails();
|
|
37
|
+
}, debounceMs);
|
|
38
|
+
watch(
|
|
39
|
+
() => desktopWorkspaceStore.overview,
|
|
40
|
+
(open) => {
|
|
41
|
+
if (open) scheduleRefresh();
|
|
42
|
+
else thumbnails.value = /* @__PURE__ */ new Map();
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
watch(
|
|
46
|
+
() => desktopWorkspaceStore.list.join("\0"),
|
|
47
|
+
() => {
|
|
48
|
+
if (desktopWorkspaceStore.overview) scheduleRefresh();
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
function thumbnailFor(workspaceId) {
|
|
52
|
+
return thumbnails.value.get(workspaceId);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
thumbnails,
|
|
56
|
+
isCapturing,
|
|
57
|
+
refreshThumbnails,
|
|
58
|
+
thumbnailFor
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CSSProperties, Ref } from 'vue';
|
|
2
|
+
export type WorkspaceStageSize = {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
};
|
|
6
|
+
export type WorkspaceOverviewLiveScaleOptions = {
|
|
7
|
+
/** Upper bound for scale (default 1). */
|
|
8
|
+
maxScale?: number;
|
|
9
|
+
};
|
|
10
|
+
export type WorkspaceOverviewInnerStyleOptions = WorkspaceOverviewLiveScaleOptions & {
|
|
11
|
+
transformOrigin?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Fit factor to show a 1:1 shell stage inside a panel viewport without clipping.
|
|
15
|
+
*/
|
|
16
|
+
export declare function computeScaleToFit(panelWidth: number, panelHeight: number, stageWidth: number, stageHeight: number, options?: WorkspaceOverviewLiveScaleOptions): number;
|
|
17
|
+
/**
|
|
18
|
+
* Live DOM workspace overview: measure shell stage, scale desktop roots to fit cards.
|
|
19
|
+
*/
|
|
20
|
+
export declare function useDesktopWorkspaceOverviewLiveScale(shellStageRef: Ref<HTMLElement | null | undefined>): {
|
|
21
|
+
stageSize: Readonly<Ref<{
|
|
22
|
+
readonly width: number;
|
|
23
|
+
readonly height: number;
|
|
24
|
+
}, {
|
|
25
|
+
readonly width: number;
|
|
26
|
+
readonly height: number;
|
|
27
|
+
}>>;
|
|
28
|
+
scaleToFit: (panelEl: HTMLElement | null | undefined, options?: WorkspaceOverviewLiveScaleOptions) => number;
|
|
29
|
+
innerOverviewStyle: (panelEl: HTMLElement | null | undefined, options?: WorkspaceOverviewInnerStyleOptions) => CSSProperties | undefined;
|
|
30
|
+
refreshStageSize: () => void;
|
|
31
|
+
};
|