@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,403 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { ref, provide, onMounted, computed, watch } from "vue";
|
|
3
|
+
import { useAppConfig } from "#imports";
|
|
4
|
+
import { useDraggable, useEventListener } from "@vueuse/core";
|
|
5
|
+
import { handleWindowControllerProps } from "../../utils/utilWindowControllerAdapter";
|
|
6
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace";
|
|
7
|
+
import { useDesktopWorkspaceEdgeDrop } from "../../composables/workspace/useDesktopWorkspaceEdgeDrop";
|
|
8
|
+
import { useDesktopWindowSnapDrop } from "../../composables/window/useDesktopWindowSnapDrop";
|
|
9
|
+
import { useDesktopWindow } from "../../composables/window/useDesktopWindow";
|
|
10
|
+
const props = defineProps({
|
|
11
|
+
window: { type: null, required: false },
|
|
12
|
+
content: { type: null, required: false }
|
|
13
|
+
});
|
|
14
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
15
|
+
const { topMaximizedWindow } = useDesktopWindow();
|
|
16
|
+
const { beginWindowDrag, endWindowDrag } = useDesktopWorkspaceEdgeDrop();
|
|
17
|
+
const { beginWindowSnapDrag, endWindowSnapDrag } = useDesktopWindowSnapDrop();
|
|
18
|
+
const emit = defineEmits([
|
|
19
|
+
"resize:start",
|
|
20
|
+
"resize:move",
|
|
21
|
+
"resize:end",
|
|
22
|
+
"drag:start",
|
|
23
|
+
"drag:move",
|
|
24
|
+
"drag:end",
|
|
25
|
+
"close",
|
|
26
|
+
"open",
|
|
27
|
+
"blur",
|
|
28
|
+
"focus",
|
|
29
|
+
"minimize",
|
|
30
|
+
"restore",
|
|
31
|
+
"maximize",
|
|
32
|
+
"unmaximize",
|
|
33
|
+
"toggle-maximize"
|
|
34
|
+
]);
|
|
35
|
+
const appConfig = useAppConfig();
|
|
36
|
+
const windowController = handleWindowControllerProps(
|
|
37
|
+
props.window
|
|
38
|
+
);
|
|
39
|
+
const isHovered = ref(false);
|
|
40
|
+
const isDragging = computed(() => !!windowController?.state?.dragging);
|
|
41
|
+
const isResizing = computed(() => !!windowController?.state?.resizing);
|
|
42
|
+
const isHibernated = computed(() => {
|
|
43
|
+
if (!windowController?.state) return false;
|
|
44
|
+
if (windowController.state.active === false) return true;
|
|
45
|
+
if (!desktopWorkspaceStore.overview) {
|
|
46
|
+
const winWorkspace = windowController.state.workspace;
|
|
47
|
+
if (winWorkspace && winWorkspace !== desktopWorkspaceStore.active) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const topMax = topMaximizedWindow.value;
|
|
51
|
+
if (topMax && topMax.state.id !== windowController.state.id && (topMax.position?.z ?? 0) > (windowController.position?.z ?? 0)) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
});
|
|
57
|
+
const showResizeHandles = computed(
|
|
58
|
+
() => Boolean(
|
|
59
|
+
windowController?.isResizable && !desktopWorkspaceStore.overview && !windowController?.state?.maximized && !isHibernated.value && (windowController?.state?.focused || isHovered.value || isResizing.value)
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
provide("windowController", windowController);
|
|
63
|
+
provide("windowContent", props.content ?? {});
|
|
64
|
+
provide("windowHibernated", isHibernated);
|
|
65
|
+
const windowRef = ref(null);
|
|
66
|
+
const dragHandleRef = ref(null);
|
|
67
|
+
onMounted(() => {
|
|
68
|
+
if (windowController?.state?.focused) {
|
|
69
|
+
windowController.actions.bringToFront();
|
|
70
|
+
}
|
|
71
|
+
if (windowRef.value) {
|
|
72
|
+
dragHandleRef.value = windowRef.value.querySelector(".desktop-window-nav__draggable");
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
const { x, y } = useDraggable(windowRef, {
|
|
76
|
+
handle: dragHandleRef,
|
|
77
|
+
initialValue: {
|
|
78
|
+
x: windowController?.position?.x ?? 0,
|
|
79
|
+
y: windowController?.position?.y ?? 0
|
|
80
|
+
},
|
|
81
|
+
onStart(event) {
|
|
82
|
+
if (!windowController?.isDraggable || desktopWorkspaceStore.overview || windowController?.state?.maximized) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
onWindowPointerDown();
|
|
86
|
+
windowController?.startDrag();
|
|
87
|
+
beginWindowDrag(windowController.state.id);
|
|
88
|
+
beginWindowSnapDrag(
|
|
89
|
+
windowController.state.id,
|
|
90
|
+
desktopWorkspaceStore.workarea,
|
|
91
|
+
windowController.isMaximizable
|
|
92
|
+
);
|
|
93
|
+
emit("drag:start", event);
|
|
94
|
+
},
|
|
95
|
+
onMove(position, event) {
|
|
96
|
+
emit("drag:move", { left: position.x, top: position.y });
|
|
97
|
+
},
|
|
98
|
+
onEnd(position, event) {
|
|
99
|
+
windowController?.stopDrag();
|
|
100
|
+
if (!desktopWorkspaceStore.overview) {
|
|
101
|
+
const snapped = endWindowSnapDrag(windowController);
|
|
102
|
+
if (!snapped) {
|
|
103
|
+
const moved = endWindowDrag(windowController);
|
|
104
|
+
if (!moved) {
|
|
105
|
+
windowController?.actions?.setPosition({
|
|
106
|
+
x: position.x,
|
|
107
|
+
y: position.y
|
|
108
|
+
});
|
|
109
|
+
if (windowController.state.layout && windowController.state.layout !== "normal") {
|
|
110
|
+
windowController.actions.clearLayout();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
windowController?.actions?.setPosition({
|
|
116
|
+
x: position.x,
|
|
117
|
+
y: position.y
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
emit("drag:end", { left: position.x, top: position.y });
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
watch(
|
|
124
|
+
() => [
|
|
125
|
+
windowController?.state?.position?.x ?? windowController?.position?.x,
|
|
126
|
+
windowController?.state?.position?.y ?? windowController?.position?.y
|
|
127
|
+
],
|
|
128
|
+
([posX, posY]) => {
|
|
129
|
+
x.value = posX ?? 0;
|
|
130
|
+
y.value = posY ?? 0;
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
const width = ref(windowController?.size?.width ?? 300);
|
|
134
|
+
const height = ref(windowController?.size?.height ?? 200);
|
|
135
|
+
watch(
|
|
136
|
+
() => [
|
|
137
|
+
windowController?.state?.size?.width ?? windowController?.size?.width,
|
|
138
|
+
windowController?.state?.size?.height ?? windowController?.size?.height
|
|
139
|
+
],
|
|
140
|
+
([w, h]) => {
|
|
141
|
+
width.value = w ?? 300;
|
|
142
|
+
height.value = h ?? 200;
|
|
143
|
+
},
|
|
144
|
+
{ immediate: true }
|
|
145
|
+
);
|
|
146
|
+
function onWindowPointerDown() {
|
|
147
|
+
windowController?.actions?.setActive(true);
|
|
148
|
+
windowController?.actions?.bringToFront();
|
|
149
|
+
}
|
|
150
|
+
function startResize(e, direction) {
|
|
151
|
+
if (!windowController) return;
|
|
152
|
+
e.stopPropagation();
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
onWindowPointerDown();
|
|
155
|
+
windowController.startResize();
|
|
156
|
+
emit("resize:start", e);
|
|
157
|
+
const startX = e.clientX;
|
|
158
|
+
const startY = e.clientY;
|
|
159
|
+
const startWidth = windowRef.value ? windowRef.value.offsetWidth : windowController.size.width ?? 300;
|
|
160
|
+
const startHeight = windowRef.value ? windowRef.value.offsetHeight : windowController.size.height ?? 200;
|
|
161
|
+
const startLeft = windowController.position?.x ?? 0;
|
|
162
|
+
const startTop = windowController.position?.y ?? 0;
|
|
163
|
+
const minWidth = windowController.size.minWidth ?? 150;
|
|
164
|
+
const minHeight = windowController.size.minHeight ?? 150;
|
|
165
|
+
const maxWidth = windowController.size.maxWidth ?? Infinity;
|
|
166
|
+
const maxHeight = windowController.size.maxHeight ?? Infinity;
|
|
167
|
+
let currentLeft = startLeft;
|
|
168
|
+
let currentTop = startTop;
|
|
169
|
+
let currentWidth = startWidth;
|
|
170
|
+
let currentHeight = startHeight;
|
|
171
|
+
const cleanupMove = useEventListener(window, "pointermove", (event) => {
|
|
172
|
+
const deltaX = event.clientX - startX;
|
|
173
|
+
const deltaY = event.clientY - startY;
|
|
174
|
+
let nextWidth = startWidth;
|
|
175
|
+
let nextHeight = startHeight;
|
|
176
|
+
let nextLeft = startLeft;
|
|
177
|
+
let nextTop = startTop;
|
|
178
|
+
if (direction.includes("e")) {
|
|
179
|
+
nextWidth = Math.max(minWidth, Math.min(maxWidth, startWidth + deltaX));
|
|
180
|
+
}
|
|
181
|
+
if (direction.includes("w")) {
|
|
182
|
+
const proposedWidth = startWidth - deltaX;
|
|
183
|
+
nextWidth = Math.max(minWidth, Math.min(maxWidth, proposedWidth));
|
|
184
|
+
if (proposedWidth >= minWidth && proposedWidth <= maxWidth) {
|
|
185
|
+
nextLeft = startLeft + deltaX;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (direction.includes("s")) {
|
|
189
|
+
nextHeight = Math.max(minHeight, Math.min(maxHeight, startHeight + deltaY));
|
|
190
|
+
}
|
|
191
|
+
if (direction.includes("n")) {
|
|
192
|
+
const proposedHeight = startHeight - deltaY;
|
|
193
|
+
nextHeight = Math.max(minHeight, Math.min(maxHeight, proposedHeight));
|
|
194
|
+
if (proposedHeight >= minHeight && proposedHeight <= maxHeight) {
|
|
195
|
+
nextTop = startTop + deltaY;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
currentLeft = nextLeft;
|
|
199
|
+
currentTop = nextTop;
|
|
200
|
+
currentWidth = nextWidth;
|
|
201
|
+
currentHeight = nextHeight;
|
|
202
|
+
x.value = nextLeft;
|
|
203
|
+
y.value = nextTop;
|
|
204
|
+
width.value = nextWidth;
|
|
205
|
+
height.value = nextHeight;
|
|
206
|
+
emit("resize:move", { left: nextLeft, top: nextTop, width: nextWidth, height: nextHeight });
|
|
207
|
+
});
|
|
208
|
+
const cleanupUp = useEventListener(window, "pointerup", (event) => {
|
|
209
|
+
cleanupMove();
|
|
210
|
+
cleanupUp();
|
|
211
|
+
windowController.actions.setPosition({
|
|
212
|
+
x: currentLeft,
|
|
213
|
+
y: currentTop
|
|
214
|
+
});
|
|
215
|
+
windowController.actions.setSize({
|
|
216
|
+
width: currentWidth,
|
|
217
|
+
height: currentHeight
|
|
218
|
+
});
|
|
219
|
+
windowController.stopResize();
|
|
220
|
+
emit("resize:end", { left: currentLeft, top: currentTop, width: currentWidth, height: currentHeight });
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
const classes = computed(() => {
|
|
224
|
+
const list = ["desktop-window", "resizable-component"];
|
|
225
|
+
if (windowController?.state.focused) {
|
|
226
|
+
list.push("desktop-window--focused");
|
|
227
|
+
}
|
|
228
|
+
if (isDragging.value) {
|
|
229
|
+
list.push("desktop-window--dragging");
|
|
230
|
+
}
|
|
231
|
+
if (isResizing.value) {
|
|
232
|
+
list.push("desktop-window--resizing");
|
|
233
|
+
}
|
|
234
|
+
if (isHibernated.value) {
|
|
235
|
+
list.push("desktop-window--hibernated");
|
|
236
|
+
}
|
|
237
|
+
return list;
|
|
238
|
+
});
|
|
239
|
+
function onOverviewNativeDragStart(e) {
|
|
240
|
+
if (!desktopWorkspaceStore.overview || !windowController) return;
|
|
241
|
+
e.stopPropagation();
|
|
242
|
+
e.dataTransfer?.setData("text/plain", windowController.state.id);
|
|
243
|
+
e.dataTransfer.effectAllowed = "move";
|
|
244
|
+
try {
|
|
245
|
+
const img = new Image();
|
|
246
|
+
img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
|
|
247
|
+
e.dataTransfer?.setDragImage(img, 0, 0);
|
|
248
|
+
} catch {
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const windowPositionMode = computed(
|
|
252
|
+
() => appConfig.desktop?.windows?.position ?? "fixed"
|
|
253
|
+
);
|
|
254
|
+
</script>
|
|
255
|
+
|
|
256
|
+
<template>
|
|
257
|
+
<div
|
|
258
|
+
ref="windowRef"
|
|
259
|
+
:class="classes"
|
|
260
|
+
:style="{
|
|
261
|
+
left: `${x}px`,
|
|
262
|
+
top: `${y}px`,
|
|
263
|
+
width: typeof width === 'number' ? `${width}px` : width,
|
|
264
|
+
height: typeof height === 'number' ? `${height}px` : height,
|
|
265
|
+
zIndex: windowController?.position?.z,
|
|
266
|
+
position: windowPositionMode
|
|
267
|
+
}"
|
|
268
|
+
:draggable="desktopWorkspaceStore.overview"
|
|
269
|
+
:aria-hidden="isHibernated ? 'true' : void 0"
|
|
270
|
+
@pointerenter="isHovered = true"
|
|
271
|
+
@pointerleave="isHovered = false"
|
|
272
|
+
@pointerdown="onWindowPointerDown"
|
|
273
|
+
@dragstart="onOverviewNativeDragStart"
|
|
274
|
+
>
|
|
275
|
+
<!-- 8-way Lazy Resize Handles (mounted only when focused, hovered, or resizing) -->
|
|
276
|
+
<div v-if="showResizeHandles" class="window-resize-handles">
|
|
277
|
+
<div class="resize-handle handle-t" @pointerdown.stop.prevent="startResize($event, 't')"></div>
|
|
278
|
+
<div class="resize-handle handle-b" @pointerdown.stop.prevent="startResize($event, 'b')"></div>
|
|
279
|
+
<div class="resize-handle handle-r" @pointerdown.stop.prevent="startResize($event, 'r')"></div>
|
|
280
|
+
<div class="resize-handle handle-l" @pointerdown.stop.prevent="startResize($event, 'l')"></div>
|
|
281
|
+
<div class="resize-handle handle-tl" @pointerdown.stop.prevent="startResize($event, 'tl')"></div>
|
|
282
|
+
<div class="resize-handle handle-tr" @pointerdown.stop.prevent="startResize($event, 'tr')"></div>
|
|
283
|
+
<div class="resize-handle handle-bl" @pointerdown.stop.prevent="startResize($event, 'bl')"></div>
|
|
284
|
+
<div class="resize-handle handle-br" @pointerdown.stop.prevent="startResize($event, 'br')"></div>
|
|
285
|
+
</div>
|
|
286
|
+
|
|
287
|
+
<slot />
|
|
288
|
+
</div>
|
|
289
|
+
</template>
|
|
290
|
+
|
|
291
|
+
<style scoped>
|
|
292
|
+
.desktop-window {
|
|
293
|
+
position: v-bind("windowPositionMode");
|
|
294
|
+
box-sizing: border-box;
|
|
295
|
+
/* Native CSS Containment: isolates layout, style, and paint calculations per window */
|
|
296
|
+
contain: layout paint style;
|
|
297
|
+
/* Relax paint containment on focused/hovered/resizing windows so -4px outer resize handles remain interactive */
|
|
298
|
+
}
|
|
299
|
+
.desktop-window--focused, .desktop-window--resizing, .desktop-window:hover {
|
|
300
|
+
contain: layout style;
|
|
301
|
+
}
|
|
302
|
+
.desktop-window--dragging, .desktop-window--resizing {
|
|
303
|
+
will-change: left, top, width, height;
|
|
304
|
+
}
|
|
305
|
+
.desktop-window--dragging :deep(.desktop-window__content), .desktop-window--resizing :deep(.desktop-window__content) {
|
|
306
|
+
pointer-events: none;
|
|
307
|
+
}
|
|
308
|
+
.desktop-window {
|
|
309
|
+
/* Window Hibernation / Occlusion Culling: skips layout & paint for minimized, off-workspace, or fully occluded windows */
|
|
310
|
+
}
|
|
311
|
+
.desktop-window--hibernated {
|
|
312
|
+
content-visibility: hidden;
|
|
313
|
+
pointer-events: none;
|
|
314
|
+
}
|
|
315
|
+
.desktop-window :deep(.desktop-window__content) {
|
|
316
|
+
overflow-y: auto;
|
|
317
|
+
height: 100%;
|
|
318
|
+
min-height: 0;
|
|
319
|
+
contain: layout paint style;
|
|
320
|
+
content-visibility: auto;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.window-resize-handles {
|
|
324
|
+
position: absolute;
|
|
325
|
+
top: 0;
|
|
326
|
+
left: 0;
|
|
327
|
+
right: 0;
|
|
328
|
+
bottom: 0;
|
|
329
|
+
pointer-events: none;
|
|
330
|
+
z-index: 9999;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.resize-handle {
|
|
334
|
+
position: absolute;
|
|
335
|
+
pointer-events: auto;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* Borders */
|
|
339
|
+
.handle-t {
|
|
340
|
+
top: -4px;
|
|
341
|
+
left: 4px;
|
|
342
|
+
right: 4px;
|
|
343
|
+
height: 8px;
|
|
344
|
+
cursor: ns-resize;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.handle-b {
|
|
348
|
+
bottom: -4px;
|
|
349
|
+
left: 4px;
|
|
350
|
+
right: 4px;
|
|
351
|
+
height: 8px;
|
|
352
|
+
cursor: ns-resize;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.handle-r {
|
|
356
|
+
right: -4px;
|
|
357
|
+
top: 4px;
|
|
358
|
+
bottom: 4px;
|
|
359
|
+
width: 8px;
|
|
360
|
+
cursor: ew-resize;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.handle-l {
|
|
364
|
+
left: -4px;
|
|
365
|
+
top: 4px;
|
|
366
|
+
bottom: 4px;
|
|
367
|
+
width: 8px;
|
|
368
|
+
cursor: ew-resize;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* Angles */
|
|
372
|
+
.handle-tl {
|
|
373
|
+
top: -4px;
|
|
374
|
+
left: -4px;
|
|
375
|
+
width: 8px;
|
|
376
|
+
height: 8px;
|
|
377
|
+
cursor: nwse-resize;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.handle-tr {
|
|
381
|
+
top: -4px;
|
|
382
|
+
right: -4px;
|
|
383
|
+
width: 8px;
|
|
384
|
+
height: 8px;
|
|
385
|
+
cursor: nesw-resize;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.handle-bl {
|
|
389
|
+
bottom: -4px;
|
|
390
|
+
left: -4px;
|
|
391
|
+
width: 8px;
|
|
392
|
+
height: 8px;
|
|
393
|
+
cursor: nesw-resize;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.handle-br {
|
|
397
|
+
bottom: -4px;
|
|
398
|
+
right: -4px;
|
|
399
|
+
width: 8px;
|
|
400
|
+
height: 8px;
|
|
401
|
+
cursor: nwse-resize;
|
|
402
|
+
}
|
|
403
|
+
</style>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
window?: IWindowController;
|
|
3
|
+
content?: WindowContent;
|
|
4
|
+
};
|
|
5
|
+
declare var __VLS_1: {};
|
|
6
|
+
type __VLS_Slots = {} & {
|
|
7
|
+
default?: (props: typeof __VLS_1) => any;
|
|
8
|
+
};
|
|
9
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
maximize: (...args: any[]) => void;
|
|
11
|
+
focus: (...args: any[]) => void;
|
|
12
|
+
minimize: (...args: any[]) => void;
|
|
13
|
+
unmaximize: (...args: any[]) => void;
|
|
14
|
+
open: (...args: any[]) => void;
|
|
15
|
+
blur: (...args: any[]) => void;
|
|
16
|
+
close: (...args: any[]) => void;
|
|
17
|
+
"resize:start": (...args: any[]) => void;
|
|
18
|
+
"resize:move": (...args: any[]) => void;
|
|
19
|
+
"resize:end": (...args: any[]) => void;
|
|
20
|
+
"drag:start": (...args: any[]) => void;
|
|
21
|
+
"drag:move": (...args: any[]) => void;
|
|
22
|
+
"drag:end": (...args: any[]) => void;
|
|
23
|
+
restore: (...args: any[]) => void;
|
|
24
|
+
"toggle-maximize": (...args: any[]) => void;
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
26
|
+
onMaximize?: ((...args: any[]) => any) | undefined;
|
|
27
|
+
onFocus?: ((...args: any[]) => any) | undefined;
|
|
28
|
+
onMinimize?: ((...args: any[]) => any) | undefined;
|
|
29
|
+
onUnmaximize?: ((...args: any[]) => any) | undefined;
|
|
30
|
+
onOpen?: ((...args: any[]) => any) | undefined;
|
|
31
|
+
onBlur?: ((...args: any[]) => any) | undefined;
|
|
32
|
+
onClose?: ((...args: any[]) => any) | undefined;
|
|
33
|
+
"onResize:start"?: ((...args: any[]) => any) | undefined;
|
|
34
|
+
"onResize:move"?: ((...args: any[]) => any) | undefined;
|
|
35
|
+
"onResize:end"?: ((...args: any[]) => any) | undefined;
|
|
36
|
+
"onDrag:start"?: ((...args: any[]) => any) | undefined;
|
|
37
|
+
"onDrag:move"?: ((...args: any[]) => any) | undefined;
|
|
38
|
+
"onDrag:end"?: ((...args: any[]) => any) | undefined;
|
|
39
|
+
onRestore?: ((...args: any[]) => any) | undefined;
|
|
40
|
+
"onToggle-maximize"?: ((...args: any[]) => any) | undefined;
|
|
41
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
42
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
43
|
+
declare const _default: typeof __VLS_export;
|
|
44
|
+
export default _default;
|
|
45
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
46
|
+
new (): {
|
|
47
|
+
$slots: S;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
@@ -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,34 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { inject, computed } from "vue";
|
|
3
|
+
const windowContent = inject("windowContent");
|
|
4
|
+
const windowHibernated = inject("windowHibernated", void 0);
|
|
5
|
+
const classes = computed(() => {
|
|
6
|
+
const list = ["desktop-window__content"];
|
|
7
|
+
if (windowContent?.centered) {
|
|
8
|
+
list.push("desktop-window__content--centered");
|
|
9
|
+
}
|
|
10
|
+
if (windowContent?.padded) {
|
|
11
|
+
list.push("desktop-window__content--padded");
|
|
12
|
+
}
|
|
13
|
+
if (windowHibernated?.value) {
|
|
14
|
+
list.push("desktop-window__content--hibernated");
|
|
15
|
+
}
|
|
16
|
+
return list;
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<template>
|
|
21
|
+
<div :class="classes">
|
|
22
|
+
<slot />
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<style scoped>
|
|
27
|
+
.desktop-window__content {
|
|
28
|
+
contain: layout paint style;
|
|
29
|
+
content-visibility: auto;
|
|
30
|
+
}
|
|
31
|
+
.desktop-window__content--hibernated {
|
|
32
|
+
content-visibility: hidden;
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
@@ -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,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,54 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { inject } from "vue";
|
|
3
|
+
import { computed } from "@vue/reactivity";
|
|
4
|
+
const windowController = inject("windowController");
|
|
5
|
+
const classes = computed(() => {
|
|
6
|
+
const list = ["desktop-window-nav"];
|
|
7
|
+
if (typeof windowController?.state.active === "undefined" || !!windowController?.state.active) {
|
|
8
|
+
list.push("desktop-window-nav--active");
|
|
9
|
+
}
|
|
10
|
+
if (windowController?.state.focused) {
|
|
11
|
+
list.push("desktop-window-nav--focused");
|
|
12
|
+
}
|
|
13
|
+
return list;
|
|
14
|
+
});
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<div :class="classes">
|
|
19
|
+
<div class="desktop-window-nav__draggable" />
|
|
20
|
+
|
|
21
|
+
<slot />
|
|
22
|
+
</div>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<style>
|
|
26
|
+
/**
|
|
27
|
+
* Title/icon sit above the drag layer in DOM order; use pointer-events so
|
|
28
|
+
* mousedown reaches `.desktop-window-nav__draggable` for vue-resizable. Window
|
|
29
|
+
* controls stay clickable.
|
|
30
|
+
*/
|
|
31
|
+
.desktop-window-nav {
|
|
32
|
+
position: relative;
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: stretch;
|
|
35
|
+
width: 100%;
|
|
36
|
+
min-height: 0;
|
|
37
|
+
}
|
|
38
|
+
.desktop-window-nav__draggable {
|
|
39
|
+
position: absolute;
|
|
40
|
+
inset: 0;
|
|
41
|
+
z-index: 1;
|
|
42
|
+
}
|
|
43
|
+
.desktop-window-nav > :not(.desktop-window-nav__draggable) {
|
|
44
|
+
position: relative;
|
|
45
|
+
z-index: 2;
|
|
46
|
+
pointer-events: none;
|
|
47
|
+
}
|
|
48
|
+
.desktop-window-nav > .desktop-window-nav__btn-group {
|
|
49
|
+
pointer-events: auto;
|
|
50
|
+
}
|
|
51
|
+
.desktop-window-nav > .desktop-window-nav__interactive {
|
|
52
|
+
pointer-events: auto;
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
@@ -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,19 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_1: {
|
|
5
|
+
zone: any;
|
|
6
|
+
rect: import("@owdproject/core").WindowBounds | null;
|
|
7
|
+
};
|
|
8
|
+
type __VLS_Slots = {} & {
|
|
9
|
+
default?: (props: typeof __VLS_1) => any;
|
|
10
|
+
};
|
|
11
|
+
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>;
|
|
12
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
13
|
+
declare const _default: typeof __VLS_export;
|
|
14
|
+
export default _default;
|
|
15
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
16
|
+
new (): {
|
|
17
|
+
$slots: S;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
import { useDesktopWorkspaceStore } from "../../stores/storeDesktopWorkspace";
|
|
4
|
+
import { useDesktopWindowSnapDrop } from "../../composables/window/useDesktopWindowSnapDrop";
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
enabled: { type: Boolean, required: false }
|
|
7
|
+
});
|
|
8
|
+
const desktopWorkspaceStore = useDesktopWorkspaceStore();
|
|
9
|
+
const { snapHint, snapHintRect, isSnapDragActive } = useDesktopWindowSnapDrop();
|
|
10
|
+
const visible = computed(
|
|
11
|
+
() => props.enabled !== false && !desktopWorkspaceStore.overview && isSnapDragActive.value && snapHint.value !== null && snapHintRect.value !== null
|
|
12
|
+
);
|
|
13
|
+
const hintStyle = computed(() => {
|
|
14
|
+
const rect = snapHintRect.value;
|
|
15
|
+
if (!rect) return void 0;
|
|
16
|
+
return {
|
|
17
|
+
left: `${rect.x}px`,
|
|
18
|
+
top: `${rect.y}px`,
|
|
19
|
+
width: `${rect.width}px`,
|
|
20
|
+
height: `${rect.height}px`
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<div
|
|
27
|
+
v-if="visible"
|
|
28
|
+
class="desktop-window-snap-hints"
|
|
29
|
+
aria-hidden="true"
|
|
30
|
+
>
|
|
31
|
+
<div
|
|
32
|
+
class="desktop-window-snap-hints__zone"
|
|
33
|
+
:class="`desktop-window-snap-hints__zone--${snapHint}`"
|
|
34
|
+
:style="hintStyle"
|
|
35
|
+
>
|
|
36
|
+
<slot
|
|
37
|
+
:zone="snapHint"
|
|
38
|
+
:rect="snapHintRect"
|
|
39
|
+
/>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<style scoped>
|
|
45
|
+
.desktop-window-snap-hints{inset:0;pointer-events:none;position:fixed;z-index:999998}.desktop-window-snap-hints__zone{background:rgba(96,165,250,.18);border:2px solid rgba(96,165,250,.85);border-radius:4px;box-sizing:border-box;position:fixed;transition:left 80ms ease,top 80ms ease,width 80ms ease,height 80ms ease}
|
|
46
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_1: {
|
|
5
|
+
zone: any;
|
|
6
|
+
rect: import("@owdproject/core").WindowBounds | null;
|
|
7
|
+
};
|
|
8
|
+
type __VLS_Slots = {} & {
|
|
9
|
+
default?: (props: typeof __VLS_1) => any;
|
|
10
|
+
};
|
|
11
|
+
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>;
|
|
12
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
13
|
+
declare const _default: typeof __VLS_export;
|
|
14
|
+
export default _default;
|
|
15
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
16
|
+
new (): {
|
|
17
|
+
$slots: S;
|
|
18
|
+
};
|
|
19
|
+
};
|