@surdeddd/wmkit 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -2
- package/README.ru.md +37 -2
- package/dist/angular.cjs +4 -3
- package/dist/angular.cjs.map +1 -1
- package/dist/angular.d.cts +2 -1
- package/dist/angular.d.ts +2 -1
- package/dist/angular.js +2 -1
- package/dist/angular.js.map +1 -1
- package/dist/binder-B625OrjD.d.cts +13 -0
- package/dist/binder-CpGY8Wye.d.ts +13 -0
- package/dist/chunk-5XVIC5LH.js +140 -0
- package/dist/chunk-5XVIC5LH.js.map +1 -0
- package/dist/chunk-BDHFXEJN.cjs +149 -0
- package/dist/chunk-BDHFXEJN.cjs.map +1 -0
- package/dist/{chunk-NJAI5R4J.cjs → chunk-DINVOL6Z.cjs} +48 -170
- package/dist/chunk-DINVOL6Z.cjs.map +1 -0
- package/dist/{chunk-FOWW4LXS.js → chunk-MGWCKHTZ.js} +29 -143
- package/dist/chunk-MGWCKHTZ.js.map +1 -0
- package/dist/devtools.cjs +330 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +43 -0
- package/dist/devtools.d.ts +43 -0
- package/dist/devtools.js +326 -0
- package/dist/devtools.js.map +1 -0
- package/dist/gestures.cjs +219 -0
- package/dist/gestures.cjs.map +1 -0
- package/dist/gestures.d.cts +19 -0
- package/dist/gestures.d.ts +19 -0
- package/dist/gestures.js +215 -0
- package/dist/gestures.js.map +1 -0
- package/dist/index.cjs +35 -34
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/react.cjs +4 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -1
- package/dist/react.d.ts +2 -1
- package/dist/react.js +2 -1
- package/dist/react.js.map +1 -1
- package/dist/{binder-DvQFmO3K.d.ts → shared-BBXgEeIa.d.ts} +22 -8
- package/dist/{binder-_L3Iww0u.d.cts → shared-DU_87nY9.d.cts} +22 -8
- package/dist/solid.cjs +4 -3
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.cts +2 -1
- package/dist/solid.d.ts +2 -1
- package/dist/solid.js +2 -1
- package/dist/solid.js.map +1 -1
- package/dist/svelte.cjs +4 -3
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.d.cts +2 -1
- package/dist/svelte.d.ts +2 -1
- package/dist/svelte.js +2 -1
- package/dist/svelte.js.map +1 -1
- package/dist/themes/amber.css +316 -0
- package/dist/themes/aqua.css +285 -0
- package/dist/themes/blueprint.css +303 -0
- package/dist/themes/brutalist.css +307 -0
- package/dist/themes/candy.css +277 -0
- package/dist/themes/carbon.css +297 -0
- package/dist/themes/forest.css +278 -0
- package/dist/themes/frost.css +279 -0
- package/dist/themes/glass.css +2 -1
- package/dist/themes/light.css +2 -1
- package/dist/themes/neon.css +289 -0
- package/dist/themes/noir.css +282 -0
- package/dist/themes/paper.css +258 -0
- package/dist/themes/synth.css +283 -0
- package/dist/themes/terminal.css +273 -0
- package/dist/vue.cjs +4 -3
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.d.cts +2 -1
- package/dist/vue.d.ts +2 -1
- package/dist/vue.js +2 -1
- package/dist/vue.js.map +1 -1
- package/package.json +37 -1
- package/dist/chunk-FOWW4LXS.js.map +0 -1
- package/dist/chunk-NJAI5R4J.cjs.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { d as DesktopGesture } from './shared-BBXgEeIa.js';
|
|
2
|
+
import './types-jG2lHGcA.js';
|
|
3
|
+
|
|
4
|
+
interface PinchOptions {
|
|
5
|
+
threshold?: number;
|
|
6
|
+
lockTouchAction?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface SwipeOptions {
|
|
9
|
+
threshold?: number;
|
|
10
|
+
workspaces?: number;
|
|
11
|
+
}
|
|
12
|
+
declare function pinch(options?: PinchOptions): DesktopGesture;
|
|
13
|
+
declare function swipe(options?: SwipeOptions): DesktopGesture;
|
|
14
|
+
declare function touchGestures(options?: {
|
|
15
|
+
pinch?: PinchOptions;
|
|
16
|
+
swipe?: SwipeOptions;
|
|
17
|
+
}): DesktopGesture;
|
|
18
|
+
|
|
19
|
+
export { type PinchOptions, type SwipeOptions, pinch, swipe, touchGestures };
|
package/dist/gestures.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { clampSize, applyAspect } from './chunk-5XVIC5LH.js';
|
|
2
|
+
|
|
3
|
+
// src/plugins/gestures.ts
|
|
4
|
+
function spreadOf(a, b) {
|
|
5
|
+
return Math.hypot(a.x - b.x, a.y - b.y);
|
|
6
|
+
}
|
|
7
|
+
function watch(ctx, options) {
|
|
8
|
+
const { wm, doc, view } = ctx;
|
|
9
|
+
const element = ctx.desktop;
|
|
10
|
+
const fingers = /* @__PURE__ */ new Map();
|
|
11
|
+
let armed = false;
|
|
12
|
+
let target = null;
|
|
13
|
+
let startSpread = 0;
|
|
14
|
+
let startMid = { x: 0, y: 0 };
|
|
15
|
+
let session = null;
|
|
16
|
+
let releaseRect = null;
|
|
17
|
+
let raf = 0;
|
|
18
|
+
let pending = null;
|
|
19
|
+
function windowIdAt(event) {
|
|
20
|
+
const host = event.target?.closest("[data-wm-window]");
|
|
21
|
+
return host?.dataset.wmWindow ?? null;
|
|
22
|
+
}
|
|
23
|
+
function pair() {
|
|
24
|
+
if (fingers.size !== 2) return null;
|
|
25
|
+
const [first, second] = [...fingers.values()];
|
|
26
|
+
return [first, second];
|
|
27
|
+
}
|
|
28
|
+
function disarm() {
|
|
29
|
+
armed = false;
|
|
30
|
+
target = null;
|
|
31
|
+
pending = null;
|
|
32
|
+
if (raf !== 0) {
|
|
33
|
+
view.cancelAnimationFrame(raf);
|
|
34
|
+
raf = 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function endPinch(cancelled) {
|
|
38
|
+
const active = session;
|
|
39
|
+
if (!active) return;
|
|
40
|
+
session = null;
|
|
41
|
+
if (cancelled) wm.resize(active.id, active.startBounds);
|
|
42
|
+
ctx.release(active);
|
|
43
|
+
releaseRect?.();
|
|
44
|
+
releaseRect = null;
|
|
45
|
+
const host = ctx.windowElement(active.id);
|
|
46
|
+
if (host) delete host.dataset.wmPinching;
|
|
47
|
+
if (cancelled) wm.abortInteraction();
|
|
48
|
+
else wm.endInteraction();
|
|
49
|
+
}
|
|
50
|
+
function beginPinch(id, mid) {
|
|
51
|
+
const win = wm.get(id);
|
|
52
|
+
if (!win) return;
|
|
53
|
+
const claimed = {
|
|
54
|
+
id,
|
|
55
|
+
finish: (cancelled) => endPinch(cancelled),
|
|
56
|
+
startBounds: win.bounds,
|
|
57
|
+
midX: mid.x,
|
|
58
|
+
midY: mid.y
|
|
59
|
+
};
|
|
60
|
+
session = claimed;
|
|
61
|
+
ctx.claim(claimed);
|
|
62
|
+
wm.beginInteraction();
|
|
63
|
+
releaseRect = ctx.trackRect();
|
|
64
|
+
const host = ctx.windowElement(id);
|
|
65
|
+
if (host) host.dataset.wmPinching = "";
|
|
66
|
+
}
|
|
67
|
+
function applyPinch(active, win, spread) {
|
|
68
|
+
const start = active.startBounds;
|
|
69
|
+
const ratio = spread / startSpread;
|
|
70
|
+
const raw = { width: start.width * ratio, height: start.height * ratio };
|
|
71
|
+
const size = win.aspectRatio === null ? clampSize(raw, win.minSize, win.maxSize) : applyAspect(raw, win.aspectRatio, win.minSize, win.maxSize, "width");
|
|
72
|
+
const sx = size.width / start.width;
|
|
73
|
+
const sy = size.height / start.height;
|
|
74
|
+
wm.resize(active.id, {
|
|
75
|
+
x: active.midX - (active.midX - start.x) * sx,
|
|
76
|
+
y: active.midY - (active.midY - start.y) * sy,
|
|
77
|
+
...size
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function flush() {
|
|
81
|
+
raf = 0;
|
|
82
|
+
const points = pending;
|
|
83
|
+
pending = null;
|
|
84
|
+
if (!points) return;
|
|
85
|
+
const [a, b] = points;
|
|
86
|
+
const spread = spreadOf(a, b);
|
|
87
|
+
const mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };
|
|
88
|
+
const pinch2 = options.pinch;
|
|
89
|
+
if (session) {
|
|
90
|
+
const win = wm.get(session.id);
|
|
91
|
+
if (win) applyPinch(session, win, spread);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (pinch2 !== null && target !== null && Math.abs(spread - startSpread) > pinch2.threshold) {
|
|
95
|
+
const win = wm.get(target);
|
|
96
|
+
if (!win) return;
|
|
97
|
+
beginPinch(target, startMid);
|
|
98
|
+
if (session) applyPinch(session, win, spread);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const swipe2 = options.swipe;
|
|
102
|
+
if (swipe2 === null) return;
|
|
103
|
+
const dx = mid.x - startMid.x;
|
|
104
|
+
const dy = mid.y - startMid.y;
|
|
105
|
+
if (Math.abs(dx) < swipe2.threshold || Math.abs(dx) <= 2 * Math.abs(dy)) return;
|
|
106
|
+
disarm();
|
|
107
|
+
const next = wm.workspace() + (dx < 0 ? 1 : -1);
|
|
108
|
+
if (swipe2.workspaces > 0 && next > swipe2.workspaces - 1) return;
|
|
109
|
+
wm.setWorkspace(next);
|
|
110
|
+
}
|
|
111
|
+
function onDown(event) {
|
|
112
|
+
if (event.pointerType !== "touch") return;
|
|
113
|
+
if (fingers.size >= 2) {
|
|
114
|
+
disarm();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
fingers.set(event.pointerId, { point: ctx.toLocal(event), windowId: windowIdAt(event) });
|
|
118
|
+
const both = pair();
|
|
119
|
+
if (!both) return;
|
|
120
|
+
if (ctx.busy()) return;
|
|
121
|
+
const [first, second] = both;
|
|
122
|
+
startSpread = spreadOf(first.point, second.point);
|
|
123
|
+
if (startSpread === 0) return;
|
|
124
|
+
startMid = {
|
|
125
|
+
x: (first.point.x + second.point.x) / 2,
|
|
126
|
+
y: (first.point.y + second.point.y) / 2
|
|
127
|
+
};
|
|
128
|
+
const shared = first.windowId === second.windowId ? first.windowId : null;
|
|
129
|
+
const state = shared === null ? void 0 : wm.get(shared);
|
|
130
|
+
target = state?.resizable && state.stage === "normal" ? state.id : null;
|
|
131
|
+
armed = true;
|
|
132
|
+
}
|
|
133
|
+
function onMove(event) {
|
|
134
|
+
const finger = fingers.get(event.pointerId);
|
|
135
|
+
if (!finger) return;
|
|
136
|
+
finger.point = ctx.toLocal(event);
|
|
137
|
+
if (!armed) return;
|
|
138
|
+
const both = pair();
|
|
139
|
+
if (!both) return;
|
|
140
|
+
pending = [both[0].point, both[1].point];
|
|
141
|
+
if (raf === 0) raf = view.requestAnimationFrame(flush);
|
|
142
|
+
}
|
|
143
|
+
function onRelease(event) {
|
|
144
|
+
if (!fingers.delete(event.pointerId)) return;
|
|
145
|
+
if (pending) {
|
|
146
|
+
if (raf !== 0) {
|
|
147
|
+
view.cancelAnimationFrame(raf);
|
|
148
|
+
raf = 0;
|
|
149
|
+
}
|
|
150
|
+
flush();
|
|
151
|
+
}
|
|
152
|
+
if (session) endPinch(false);
|
|
153
|
+
disarm();
|
|
154
|
+
}
|
|
155
|
+
function onCancel(event) {
|
|
156
|
+
if (!fingers.delete(event.pointerId)) return;
|
|
157
|
+
if (session) endPinch(true);
|
|
158
|
+
disarm();
|
|
159
|
+
}
|
|
160
|
+
function onKeydown(event) {
|
|
161
|
+
if (event.key !== "Escape" || !session) return;
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
endPinch(true);
|
|
164
|
+
disarm();
|
|
165
|
+
}
|
|
166
|
+
const previousTouchAction = element.style.touchAction;
|
|
167
|
+
if (options.pinch) {
|
|
168
|
+
element.style.touchAction = options.pinch.lockTouchAction ? "none" : "pan-x pan-y";
|
|
169
|
+
}
|
|
170
|
+
element.addEventListener("pointerdown", onDown);
|
|
171
|
+
element.addEventListener("pointermove", onMove);
|
|
172
|
+
element.addEventListener("pointerup", onRelease);
|
|
173
|
+
element.addEventListener("pointercancel", onCancel);
|
|
174
|
+
doc.addEventListener("keydown", onKeydown, true);
|
|
175
|
+
return () => {
|
|
176
|
+
if (session) endPinch(true);
|
|
177
|
+
disarm();
|
|
178
|
+
fingers.clear();
|
|
179
|
+
element.style.touchAction = previousTouchAction;
|
|
180
|
+
element.removeEventListener("pointerdown", onDown);
|
|
181
|
+
element.removeEventListener("pointermove", onMove);
|
|
182
|
+
element.removeEventListener("pointerup", onRelease);
|
|
183
|
+
element.removeEventListener("pointercancel", onCancel);
|
|
184
|
+
doc.removeEventListener("keydown", onKeydown, true);
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function pinch(options = {}) {
|
|
188
|
+
const settings = {
|
|
189
|
+
threshold: options.threshold ?? 12,
|
|
190
|
+
lockTouchAction: options.lockTouchAction === true
|
|
191
|
+
};
|
|
192
|
+
return (ctx) => watch(ctx, { pinch: settings, swipe: null });
|
|
193
|
+
}
|
|
194
|
+
function swipe(options = {}) {
|
|
195
|
+
const settings = {
|
|
196
|
+
threshold: options.threshold ?? 72,
|
|
197
|
+
workspaces: options.workspaces ?? 0
|
|
198
|
+
};
|
|
199
|
+
return (ctx) => watch(ctx, { pinch: null, swipe: settings });
|
|
200
|
+
}
|
|
201
|
+
function touchGestures(options = {}) {
|
|
202
|
+
const pinchSettings = {
|
|
203
|
+
threshold: options.pinch?.threshold ?? 12,
|
|
204
|
+
lockTouchAction: options.pinch?.lockTouchAction === true
|
|
205
|
+
};
|
|
206
|
+
const swipeSettings = {
|
|
207
|
+
threshold: options.swipe?.threshold ?? 72,
|
|
208
|
+
workspaces: options.swipe?.workspaces ?? 0
|
|
209
|
+
};
|
|
210
|
+
return (ctx) => watch(ctx, { pinch: pinchSettings, swipe: swipeSettings });
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export { pinch, swipe, touchGestures };
|
|
214
|
+
//# sourceMappingURL=gestures.js.map
|
|
215
|
+
//# sourceMappingURL=gestures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugins/gestures.ts"],"names":["pinch","swipe"],"mappings":"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","file":"gestures.js","sourcesContent":["import { applyAspect, clampSize } from '../core/geometry'\nimport type { Bounds, Size, WindowState } from '../core/types'\nimport type { ActiveGesture, DesktopGesture, GestureContext, Point } from '../dom/shared'\n\nexport interface PinchOptions {\n threshold?: number\n lockTouchAction?: boolean\n}\n\nexport interface SwipeOptions {\n threshold?: number\n workspaces?: number\n}\n\ninterface Finger {\n point: Point\n windowId: string | null\n}\n\ninterface PinchSession extends ActiveGesture {\n startBounds: Bounds\n midX: number\n midY: number\n}\n\nfunction spreadOf(a: Point, b: Point): number {\n return Math.hypot(a.x - b.x, a.y - b.y)\n}\n\nfunction watch(\n ctx: GestureContext,\n options: { pinch: Required<PinchOptions> | null; swipe: Required<SwipeOptions> | null },\n): () => void {\n const { wm, doc, view } = ctx\n const element = ctx.desktop\n const fingers = new Map<number, Finger>()\n let armed = false\n let target: string | null = null\n let startSpread = 0\n let startMid: Point = { x: 0, y: 0 }\n let session: PinchSession | null = null\n let releaseRect: (() => void) | null = null\n let raf = 0\n let pending: [Point, Point] | null = null\n\n function windowIdAt(event: PointerEvent): string | null {\n const host = (event.target as Element | null)?.closest<HTMLElement>('[data-wm-window]')\n return host?.dataset.wmWindow ?? null\n }\n\n function pair(): [Finger, Finger] | null {\n if (fingers.size !== 2) return null\n const [first, second] = [...fingers.values()] as [Finger, Finger]\n return [first, second]\n }\n\n function disarm(): void {\n armed = false\n target = null\n pending = null\n if (raf !== 0) {\n view.cancelAnimationFrame(raf)\n raf = 0\n }\n }\n\n function endPinch(cancelled: boolean): void {\n const active = session\n if (!active) return\n session = null\n if (cancelled) wm.resize(active.id, active.startBounds)\n ctx.release(active)\n releaseRect?.()\n releaseRect = null\n const host = ctx.windowElement(active.id)\n if (host) delete host.dataset.wmPinching\n if (cancelled) wm.abortInteraction()\n else wm.endInteraction()\n }\n\n function beginPinch(id: string, mid: Point): void {\n const win = wm.get(id)\n if (!win) return\n const claimed: PinchSession = {\n id,\n finish: (cancelled: boolean) => endPinch(cancelled),\n startBounds: win.bounds,\n midX: mid.x,\n midY: mid.y,\n }\n session = claimed\n ctx.claim(claimed)\n wm.beginInteraction()\n releaseRect = ctx.trackRect()\n const host = ctx.windowElement(id)\n if (host) host.dataset.wmPinching = ''\n }\n\n function applyPinch(active: PinchSession, win: WindowState, spread: number): void {\n const start = active.startBounds\n const ratio = spread / startSpread\n const raw: Size = { width: start.width * ratio, height: start.height * ratio }\n const size =\n win.aspectRatio === null\n ? clampSize(raw, win.minSize, win.maxSize)\n : applyAspect(raw, win.aspectRatio, win.minSize, win.maxSize, 'width')\n const sx = size.width / start.width\n const sy = size.height / start.height\n wm.resize(active.id, {\n x: active.midX - (active.midX - start.x) * sx,\n y: active.midY - (active.midY - start.y) * sy,\n ...size,\n })\n }\n\n function flush(): void {\n raf = 0\n const points = pending\n pending = null\n if (!points) return\n const [a, b] = points\n const spread = spreadOf(a, b)\n const mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 }\n const pinch = options.pinch\n\n if (session) {\n const win = wm.get(session.id)\n if (win) applyPinch(session, win, spread)\n return\n }\n if (pinch !== null && target !== null && Math.abs(spread - startSpread) > pinch.threshold) {\n const win = wm.get(target)\n if (!win) return\n beginPinch(target, startMid)\n if (session) applyPinch(session, win, spread)\n return\n }\n const swipe = options.swipe\n if (swipe === null) return\n const dx = mid.x - startMid.x\n const dy = mid.y - startMid.y\n if (Math.abs(dx) < swipe.threshold || Math.abs(dx) <= 2 * Math.abs(dy)) return\n disarm()\n const next = wm.workspace() + (dx < 0 ? 1 : -1)\n if (swipe.workspaces > 0 && next > swipe.workspaces - 1) return\n wm.setWorkspace(next)\n }\n\n function onDown(event: PointerEvent): void {\n if (event.pointerType !== 'touch') return\n if (fingers.size >= 2) {\n disarm()\n return\n }\n fingers.set(event.pointerId, { point: ctx.toLocal(event), windowId: windowIdAt(event) })\n const both = pair()\n if (!both) return\n if (ctx.busy()) return\n const [first, second] = both\n startSpread = spreadOf(first.point, second.point)\n if (startSpread === 0) return\n startMid = {\n x: (first.point.x + second.point.x) / 2,\n y: (first.point.y + second.point.y) / 2,\n }\n const shared = first.windowId === second.windowId ? first.windowId : null\n const state = shared === null ? undefined : wm.get(shared)\n target = state?.resizable && state.stage === 'normal' ? state.id : null\n armed = true\n }\n\n function onMove(event: PointerEvent): void {\n const finger = fingers.get(event.pointerId)\n if (!finger) return\n finger.point = ctx.toLocal(event)\n if (!armed) return\n const both = pair()\n if (!both) return\n pending = [both[0].point, both[1].point]\n if (raf === 0) raf = view.requestAnimationFrame(flush)\n }\n\n function onRelease(event: PointerEvent): void {\n if (!fingers.delete(event.pointerId)) return\n if (pending) {\n if (raf !== 0) {\n view.cancelAnimationFrame(raf)\n raf = 0\n }\n flush()\n }\n if (session) endPinch(false)\n disarm()\n }\n\n function onCancel(event: PointerEvent): void {\n if (!fingers.delete(event.pointerId)) return\n if (session) endPinch(true)\n disarm()\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || !session) return\n event.preventDefault()\n endPinch(true)\n disarm()\n }\n\n const previousTouchAction = element.style.touchAction\n if (options.pinch) {\n element.style.touchAction = options.pinch.lockTouchAction ? 'none' : 'pan-x pan-y'\n }\n element.addEventListener('pointerdown', onDown)\n element.addEventListener('pointermove', onMove)\n element.addEventListener('pointerup', onRelease)\n element.addEventListener('pointercancel', onCancel)\n doc.addEventListener('keydown', onKeydown, true)\n\n return () => {\n if (session) endPinch(true)\n disarm()\n fingers.clear()\n element.style.touchAction = previousTouchAction\n element.removeEventListener('pointerdown', onDown)\n element.removeEventListener('pointermove', onMove)\n element.removeEventListener('pointerup', onRelease)\n element.removeEventListener('pointercancel', onCancel)\n doc.removeEventListener('keydown', onKeydown, true)\n }\n}\n\nexport function pinch(options: PinchOptions = {}): DesktopGesture {\n const settings: Required<PinchOptions> = {\n threshold: options.threshold ?? 12,\n lockTouchAction: options.lockTouchAction === true,\n }\n return (ctx) => watch(ctx, { pinch: settings, swipe: null })\n}\n\nexport function swipe(options: SwipeOptions = {}): DesktopGesture {\n const settings: Required<SwipeOptions> = {\n threshold: options.threshold ?? 72,\n workspaces: options.workspaces ?? 0,\n }\n return (ctx) => watch(ctx, { pinch: null, swipe: settings })\n}\n\nexport function touchGestures(\n options: { pinch?: PinchOptions; swipe?: SwipeOptions } = {},\n): DesktopGesture {\n const pinchSettings: Required<PinchOptions> = {\n threshold: options.pinch?.threshold ?? 12,\n lockTouchAction: options.pinch?.lockTouchAction === true,\n }\n const swipeSettings: Required<SwipeOptions> = {\n threshold: options.swipe?.threshold ?? 72,\n workspaces: options.swipe?.workspaces ?? 0,\n }\n return (ctx) => watch(ctx, { pinch: pinchSettings, swipe: swipeSettings })\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,76 +1,77 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkDINVOL6Z_cjs = require('./chunk-DINVOL6Z.cjs');
|
|
4
|
+
var chunkBDHFXEJN_cjs = require('./chunk-BDHFXEJN.cjs');
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
|
|
7
|
-
Object.defineProperty(exports, "
|
|
8
|
+
Object.defineProperty(exports, "attachDesktop", {
|
|
8
9
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkDINVOL6Z_cjs.attachDesktop; }
|
|
10
11
|
});
|
|
11
|
-
Object.defineProperty(exports, "
|
|
12
|
+
Object.defineProperty(exports, "createAnnouncer", {
|
|
12
13
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkDINVOL6Z_cjs.createAnnouncer; }
|
|
14
15
|
});
|
|
15
|
-
Object.defineProperty(exports, "
|
|
16
|
+
Object.defineProperty(exports, "createDesktopBinder", {
|
|
16
17
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkDINVOL6Z_cjs.createDesktopBinder; }
|
|
18
19
|
});
|
|
19
|
-
Object.defineProperty(exports, "
|
|
20
|
+
Object.defineProperty(exports, "createEmitter", {
|
|
20
21
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkDINVOL6Z_cjs.createEmitter; }
|
|
22
23
|
});
|
|
23
|
-
Object.defineProperty(exports, "
|
|
24
|
+
Object.defineProperty(exports, "createWindowManager", {
|
|
24
25
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkDINVOL6Z_cjs.createWindowManager; }
|
|
26
27
|
});
|
|
27
|
-
Object.defineProperty(exports, "
|
|
28
|
+
Object.defineProperty(exports, "defaultMessages", {
|
|
28
29
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkDINVOL6Z_cjs.defaultMessages; }
|
|
30
31
|
});
|
|
31
|
-
Object.defineProperty(exports, "
|
|
32
|
+
Object.defineProperty(exports, "flipFromTarget", {
|
|
32
33
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkDINVOL6Z_cjs.flipFromTarget; }
|
|
34
35
|
});
|
|
35
|
-
Object.defineProperty(exports, "
|
|
36
|
+
Object.defineProperty(exports, "flipToTarget", {
|
|
36
37
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkDINVOL6Z_cjs.flipToTarget; }
|
|
38
39
|
});
|
|
39
|
-
Object.defineProperty(exports, "
|
|
40
|
+
Object.defineProperty(exports, "prefersReducedMotion", {
|
|
40
41
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkDINVOL6Z_cjs.prefersReducedMotion; }
|
|
42
43
|
});
|
|
43
|
-
Object.defineProperty(exports, "
|
|
44
|
+
Object.defineProperty(exports, "applyAspect", {
|
|
44
45
|
enumerable: true,
|
|
45
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkBDHFXEJN_cjs.applyAspect; }
|
|
46
47
|
});
|
|
47
|
-
Object.defineProperty(exports, "
|
|
48
|
+
Object.defineProperty(exports, "boundsEqual", {
|
|
48
49
|
enumerable: true,
|
|
49
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkBDHFXEJN_cjs.boundsEqual; }
|
|
50
51
|
});
|
|
51
|
-
Object.defineProperty(exports, "
|
|
52
|
+
Object.defineProperty(exports, "clamp", {
|
|
52
53
|
enumerable: true,
|
|
53
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkBDHFXEJN_cjs.clamp; }
|
|
54
55
|
});
|
|
55
|
-
Object.defineProperty(exports, "
|
|
56
|
+
Object.defineProperty(exports, "clampSize", {
|
|
56
57
|
enumerable: true,
|
|
57
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunkBDHFXEJN_cjs.clampSize; }
|
|
58
59
|
});
|
|
59
|
-
Object.defineProperty(exports, "
|
|
60
|
+
Object.defineProperty(exports, "clampToViewport", {
|
|
60
61
|
enumerable: true,
|
|
61
|
-
get: function () { return
|
|
62
|
+
get: function () { return chunkBDHFXEJN_cjs.clampToViewport; }
|
|
62
63
|
});
|
|
63
|
-
Object.defineProperty(exports, "
|
|
64
|
+
Object.defineProperty(exports, "detectSnapZone", {
|
|
64
65
|
enumerable: true,
|
|
65
|
-
get: function () { return
|
|
66
|
+
get: function () { return chunkBDHFXEJN_cjs.detectSnapZone; }
|
|
66
67
|
});
|
|
67
|
-
Object.defineProperty(exports, "
|
|
68
|
+
Object.defineProperty(exports, "magnetize", {
|
|
68
69
|
enumerable: true,
|
|
69
|
-
get: function () { return
|
|
70
|
+
get: function () { return chunkBDHFXEJN_cjs.magnetize; }
|
|
70
71
|
});
|
|
71
72
|
Object.defineProperty(exports, "zoneBounds", {
|
|
72
73
|
enumerable: true,
|
|
73
|
-
get: function () { return
|
|
74
|
+
get: function () { return chunkBDHFXEJN_cjs.zoneBounds; }
|
|
74
75
|
});
|
|
75
76
|
//# sourceMappingURL=index.cjs.map
|
|
76
77
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as Announcer, c as AnnouncerMessages,
|
|
1
|
+
import { D as DesktopOptions, a as DesktopController } from './shared-DU_87nY9.cjs';
|
|
2
|
+
export { A as ActiveGesture, b as Announcer, c as AnnouncerMessages, d as DesktopGesture, e as DesktopKeyboardOptions, f as DesktopSnapOptions, G as GestureContext, H as HitAreaOptions, M as MagnetResult, g as MagnetismOptions, S as SnapDetectOptions, W as WindowAttachOptions, h as applyAspect, i as boundsEqual, j as clamp, k as clampSize, l as clampToViewport, m as createAnnouncer, n as defaultMessages, o as detectSnapZone, p as magnetize, z as zoneBounds } from './shared-DU_87nY9.cjs';
|
|
3
3
|
import { M as ManagerOptions, W as WindowManager } from './types-jG2lHGcA.cjs';
|
|
4
4
|
export { A as ArrangeMode, B as Bounds, c as ManagerEvents, a as ManagerState, S as SerializedMaxSize, d as SerializedState, e as SerializedWindowState, f as Size, g as SnapZone, h as WindowFlags, i as WindowInit, j as WindowLayer, k as WindowStage, b as WindowState, l as WindowUpdate } from './types-jG2lHGcA.cjs';
|
|
5
|
+
export { D as DesktopBinder, c as createDesktopBinder } from './binder-B625OrjD.cjs';
|
|
5
6
|
|
|
6
7
|
type Listener<T> = (payload: T) => void;
|
|
7
8
|
interface Emitter<Events extends Record<keyof Events, unknown>> {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as Announcer, c as AnnouncerMessages,
|
|
1
|
+
import { D as DesktopOptions, a as DesktopController } from './shared-BBXgEeIa.js';
|
|
2
|
+
export { A as ActiveGesture, b as Announcer, c as AnnouncerMessages, d as DesktopGesture, e as DesktopKeyboardOptions, f as DesktopSnapOptions, G as GestureContext, H as HitAreaOptions, M as MagnetResult, g as MagnetismOptions, S as SnapDetectOptions, W as WindowAttachOptions, h as applyAspect, i as boundsEqual, j as clamp, k as clampSize, l as clampToViewport, m as createAnnouncer, n as defaultMessages, o as detectSnapZone, p as magnetize, z as zoneBounds } from './shared-BBXgEeIa.js';
|
|
3
3
|
import { M as ManagerOptions, W as WindowManager } from './types-jG2lHGcA.js';
|
|
4
4
|
export { A as ArrangeMode, B as Bounds, c as ManagerEvents, a as ManagerState, S as SerializedMaxSize, d as SerializedState, e as SerializedWindowState, f as Size, g as SnapZone, h as WindowFlags, i as WindowInit, j as WindowLayer, k as WindowStage, b as WindowState, l as WindowUpdate } from './types-jG2lHGcA.js';
|
|
5
|
+
export { D as DesktopBinder, c as createDesktopBinder } from './binder-CpGY8Wye.js';
|
|
5
6
|
|
|
6
7
|
type Listener<T> = (payload: T) => void;
|
|
7
8
|
interface Emitter<Events extends Record<keyof Events, unknown>> {
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { attachDesktop, createAnnouncer, createDesktopBinder, createEmitter, createWindowManager, defaultMessages, flipFromTarget, flipToTarget, prefersReducedMotion } from './chunk-MGWCKHTZ.js';
|
|
2
|
+
export { applyAspect, boundsEqual, clamp, clampSize, clampToViewport, detectSnapZone, magnetize, zoneBounds } from './chunk-5XVIC5LH.js';
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/react.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkDINVOL6Z_cjs = require('./chunk-DINVOL6Z.cjs');
|
|
4
|
+
require('./chunk-BDHFXEJN.cjs');
|
|
4
5
|
var react = require('react');
|
|
5
6
|
|
|
6
7
|
function useWindowManager(options) {
|
|
7
|
-
const [wm] = react.useState(() =>
|
|
8
|
+
const [wm] = react.useState(() => chunkDINVOL6Z_cjs.createWindowManager(options));
|
|
8
9
|
react.useEffect(() => () => wm.destroy(), [wm]);
|
|
9
10
|
return wm;
|
|
10
11
|
}
|
|
@@ -17,7 +18,7 @@ function useWmWindow(wm, id) {
|
|
|
17
18
|
}
|
|
18
19
|
function useDesktop(wm, options) {
|
|
19
20
|
const optionsRef = react.useRef(options);
|
|
20
|
-
const binder = react.useMemo(() =>
|
|
21
|
+
const binder = react.useMemo(() => chunkDINVOL6Z_cjs.createDesktopBinder(wm, optionsRef.current), [wm]);
|
|
21
22
|
react.useEffect(() => () => binder.destroy(), [binder]);
|
|
22
23
|
const cleanupRef = react.useRef(null);
|
|
23
24
|
const ref = react.useCallback(
|
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/react.ts"],"names":["useState","createWindowManager","useEffect","useSyncExternalStore","useCallback","useRef","useMemo","createDesktopBinder"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/adapters/react.ts"],"names":["useState","createWindowManager","useEffect","useSyncExternalStore","useCallback","useRef","useMemo","createDesktopBinder"],"mappings":";;;;;;AAQO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAIA,eAAS,MAAMC,qCAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAAC,eAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAOC,2BAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAcC,iBAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAOD,0BAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAaE,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAASC,aAAA,CAAQ,MAAMC,qCAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAAL,eAAA,CAAU,MAAM,MAAM,MAAA,CAAO,SAAQ,EAAG,CAAC,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaG,aAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAMD,iBAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAaC,aAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAaA,aAA4B,IAAI,CAAA;AACnD,EAAA,OAAOD,iBAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.cjs","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopController, DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n useEffect(() => () => binder.destroy(), [binder])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
|
package/dist/react.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-jG2lHGcA.cjs';
|
|
2
|
-
import { D as DesktopBinder
|
|
2
|
+
import { D as DesktopBinder } from './binder-B625OrjD.cjs';
|
|
3
|
+
import { a as DesktopController, D as DesktopOptions, W as WindowAttachOptions } from './shared-DU_87nY9.cjs';
|
|
3
4
|
|
|
4
5
|
type ElementRef = (node: HTMLElement | null) => void;
|
|
5
6
|
declare function useWindowManager(options?: ManagerOptions): WindowManager;
|
package/dist/react.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-jG2lHGcA.js';
|
|
2
|
-
import { D as DesktopBinder
|
|
2
|
+
import { D as DesktopBinder } from './binder-CpGY8Wye.js';
|
|
3
|
+
import { a as DesktopController, D as DesktopOptions, W as WindowAttachOptions } from './shared-BBXgEeIa.js';
|
|
3
4
|
|
|
4
5
|
type ElementRef = (node: HTMLElement | null) => void;
|
|
5
6
|
declare function useWindowManager(options?: ManagerOptions): WindowManager;
|
package/dist/react.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { createWindowManager, createDesktopBinder } from './chunk-
|
|
1
|
+
import { createWindowManager, createDesktopBinder } from './chunk-MGWCKHTZ.js';
|
|
2
|
+
import './chunk-5XVIC5LH.js';
|
|
2
3
|
import { useState, useEffect, useSyncExternalStore, useCallback, useRef, useMemo } from 'react';
|
|
3
4
|
|
|
4
5
|
function useWindowManager(options) {
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/react.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/adapters/react.ts"],"names":[],"mappings":";;;;AAQO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,CAAC,EAAE,CAAA,GAAI,SAAS,MAAM,mBAAA,CAAoB,OAAO,CAAC,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM,MAAM,EAAA,CAAG,SAAQ,EAAG,CAAC,EAAE,CAAC,CAAA;AACxC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAAiC;AAC1D,EAAA,OAAO,qBAAqB,EAAA,CAAG,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,GAAG,QAAQ,CAAA;AACpE;AAEO,SAAS,WAAA,CAAY,IAAmB,EAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,MAAM,EAAA,CAAG,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAC1D,EAAA,OAAO,oBAAA,CAAqB,EAAA,CAAG,SAAA,EAAW,WAAA,EAAa,WAAW,CAAA;AACpE;AAQO,SAAS,UAAA,CAAW,IAAmB,OAAA,EAA4C;AACxF,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAM,mBAAA,CAAoB,EAAA,EAAI,WAAW,OAAO,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAC9E,EAAA,SAAA,CAAU,MAAM,MAAM,MAAA,CAAO,SAAQ,EAAG,CAAC,MAAM,CAAC,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,OAAO,UAAA,EAAW;AACtD;AAEO,SAAS,cAAA,CACd,MAAA,EACA,EAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,OAAO,WAAA;AAAA,IACL,CAAC,IAAA,KAAS;AACR,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,UAAU,MAAA,CAAO,UAAA,CAAW,EAAA,EAAI,IAAA,EAAM,WAAW,OAAO,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,OAAA,IAAU;AACrB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,GACb;AACF","file":"react.js","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopController, DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nexport type ElementRef = (node: HTMLElement | null) => void\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const [wm] = useState(() => createWindowManager(options))\n useEffect(() => () => wm.destroy(), [wm])\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ManagerState {\n return useSyncExternalStore(wm.subscribe, wm.getState, wm.getState)\n}\n\nexport function useWmWindow(wm: WindowManager, id: string): WindowState | undefined {\n const getSnapshot = useCallback(() => wm.get(id), [wm, id])\n return useSyncExternalStore(wm.subscribe, getSnapshot, getSnapshot)\n}\n\nexport interface UseDesktopResult {\n ref: ElementRef\n binder: DesktopBinder\n controller(): DesktopController | null\n}\n\nexport function useDesktop(wm: WindowManager, options?: DesktopOptions): UseDesktopResult {\n const optionsRef = useRef(options)\n const binder = useMemo(() => createDesktopBinder(wm, optionsRef.current), [wm])\n useEffect(() => () => binder.destroy(), [binder])\n const cleanupRef = useRef<(() => void) | null>(null)\n const ref = useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindDesktop(node)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder],\n )\n return { ref, binder, controller: binder.controller }\n}\n\nexport function useWmWindowRef(\n binder: DesktopBinder,\n id: string,\n options?: WindowAttachOptions,\n): ElementRef {\n const optionsRef = useRef(options)\n const cleanupRef = useRef<(() => void) | null>(null)\n return useCallback<ElementRef>(\n (node) => {\n if (node) {\n cleanupRef.current = binder.bindWindow(id, node, optionsRef.current)\n } else {\n cleanupRef.current?.()\n cleanupRef.current = null\n }\n },\n [binder, id],\n )\n}\n"]}
|
|
@@ -37,6 +37,10 @@ interface Announcer {
|
|
|
37
37
|
}
|
|
38
38
|
declare function createAnnouncer(wm: WindowManager, container: HTMLElement, messages?: Partial<AnnouncerMessages>): Announcer;
|
|
39
39
|
|
|
40
|
+
interface Point {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
}
|
|
40
44
|
interface DesktopSnapOptions extends SnapDetectOptions {
|
|
41
45
|
preview?: boolean;
|
|
42
46
|
topEdge?: 'maximize' | 'top' | 'none';
|
|
@@ -72,9 +76,11 @@ interface DesktopOptions {
|
|
|
72
76
|
magnetism?: boolean | MagnetismOptions;
|
|
73
77
|
stacking?: StackingOptions;
|
|
74
78
|
animation?: boolean | AnimationOptions;
|
|
79
|
+
gestures?: readonly DesktopGesture[];
|
|
75
80
|
interactiveSelector?: string;
|
|
76
81
|
beforeClose?: (window: WindowState) => boolean | void;
|
|
77
82
|
minimizeTarget?: (window: WindowState) => Element | null;
|
|
83
|
+
windowVariant?: (window: WindowState) => string | null;
|
|
78
84
|
onTitlebarContextMenu?: (window: WindowState, event: MouseEvent) => void;
|
|
79
85
|
}
|
|
80
86
|
interface AnimationOptions {
|
|
@@ -92,14 +98,22 @@ interface DesktopController {
|
|
|
92
98
|
attachWindow(id: string, element: HTMLElement, options?: WindowAttachOptions): () => void;
|
|
93
99
|
destroy(): void;
|
|
94
100
|
}
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
interface ActiveGesture {
|
|
102
|
+
id: string;
|
|
103
|
+
finish(cancelled: boolean): void;
|
|
104
|
+
}
|
|
105
|
+
interface GestureContext {
|
|
97
106
|
wm: WindowManager;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
doc: Document;
|
|
108
|
+
view: Window & typeof globalThis;
|
|
109
|
+
desktop: HTMLElement;
|
|
110
|
+
toLocal(event: PointerEvent): Point;
|
|
111
|
+
trackRect(): () => void;
|
|
112
|
+
windowElement(id: string): HTMLElement | undefined;
|
|
113
|
+
busy(): boolean;
|
|
114
|
+
claim(gesture: ActiveGesture): void;
|
|
115
|
+
release(gesture: ActiveGesture): void;
|
|
102
116
|
}
|
|
103
|
-
|
|
117
|
+
type DesktopGesture = (ctx: GestureContext) => () => void;
|
|
104
118
|
|
|
105
|
-
export { type
|
|
119
|
+
export { type ActiveGesture as A, type DesktopOptions as D, type GestureContext as G, type HitAreaOptions as H, type MagnetResult as M, type SnapDetectOptions as S, type WindowAttachOptions as W, type DesktopController as a, type Announcer as b, type AnnouncerMessages as c, type DesktopGesture as d, type DesktopKeyboardOptions as e, type DesktopSnapOptions as f, type MagnetismOptions as g, applyAspect as h, boundsEqual as i, clamp as j, clampSize as k, clampToViewport as l, createAnnouncer as m, defaultMessages as n, detectSnapZone as o, magnetize as p, zoneBounds as z };
|
|
@@ -37,6 +37,10 @@ interface Announcer {
|
|
|
37
37
|
}
|
|
38
38
|
declare function createAnnouncer(wm: WindowManager, container: HTMLElement, messages?: Partial<AnnouncerMessages>): Announcer;
|
|
39
39
|
|
|
40
|
+
interface Point {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
}
|
|
40
44
|
interface DesktopSnapOptions extends SnapDetectOptions {
|
|
41
45
|
preview?: boolean;
|
|
42
46
|
topEdge?: 'maximize' | 'top' | 'none';
|
|
@@ -72,9 +76,11 @@ interface DesktopOptions {
|
|
|
72
76
|
magnetism?: boolean | MagnetismOptions;
|
|
73
77
|
stacking?: StackingOptions;
|
|
74
78
|
animation?: boolean | AnimationOptions;
|
|
79
|
+
gestures?: readonly DesktopGesture[];
|
|
75
80
|
interactiveSelector?: string;
|
|
76
81
|
beforeClose?: (window: WindowState) => boolean | void;
|
|
77
82
|
minimizeTarget?: (window: WindowState) => Element | null;
|
|
83
|
+
windowVariant?: (window: WindowState) => string | null;
|
|
78
84
|
onTitlebarContextMenu?: (window: WindowState, event: MouseEvent) => void;
|
|
79
85
|
}
|
|
80
86
|
interface AnimationOptions {
|
|
@@ -92,14 +98,22 @@ interface DesktopController {
|
|
|
92
98
|
attachWindow(id: string, element: HTMLElement, options?: WindowAttachOptions): () => void;
|
|
93
99
|
destroy(): void;
|
|
94
100
|
}
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
interface ActiveGesture {
|
|
102
|
+
id: string;
|
|
103
|
+
finish(cancelled: boolean): void;
|
|
104
|
+
}
|
|
105
|
+
interface GestureContext {
|
|
97
106
|
wm: WindowManager;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
doc: Document;
|
|
108
|
+
view: Window & typeof globalThis;
|
|
109
|
+
desktop: HTMLElement;
|
|
110
|
+
toLocal(event: PointerEvent): Point;
|
|
111
|
+
trackRect(): () => void;
|
|
112
|
+
windowElement(id: string): HTMLElement | undefined;
|
|
113
|
+
busy(): boolean;
|
|
114
|
+
claim(gesture: ActiveGesture): void;
|
|
115
|
+
release(gesture: ActiveGesture): void;
|
|
102
116
|
}
|
|
103
|
-
|
|
117
|
+
type DesktopGesture = (ctx: GestureContext) => () => void;
|
|
104
118
|
|
|
105
|
-
export { type
|
|
119
|
+
export { type ActiveGesture as A, type DesktopOptions as D, type GestureContext as G, type HitAreaOptions as H, type MagnetResult as M, type SnapDetectOptions as S, type WindowAttachOptions as W, type DesktopController as a, type Announcer as b, type AnnouncerMessages as c, type DesktopGesture as d, type DesktopKeyboardOptions as e, type DesktopSnapOptions as f, type MagnetismOptions as g, applyAspect as h, boundsEqual as i, clamp as j, clampSize as k, clampToViewport as l, createAnnouncer as m, defaultMessages as n, detectSnapZone as o, magnetize as p, zoneBounds as z };
|