@floegence/floe-webapp-core 0.36.15 → 0.36.17
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/dist/components/ui/InfiniteCanvas.d.ts +1 -0
- package/dist/components/ui/InfiniteCanvas.js +94 -84
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/pointerSession.d.ts +35 -0
- package/dist/components/ui/pointerSession.js +85 -0
- package/dist/components/workbench/WorkbenchCanvas.d.ts +3 -0
- package/dist/components/workbench/WorkbenchCanvas.js +51 -28
- package/dist/components/workbench/WorkbenchCanvasField.d.ts +2 -0
- package/dist/components/workbench/WorkbenchCanvasField.js +18 -6
- package/dist/components/workbench/WorkbenchFilterBar.js +119 -117
- package/dist/components/workbench/WorkbenchHud.d.ts +9 -0
- package/dist/components/workbench/WorkbenchHud.js +24 -10
- package/dist/components/workbench/WorkbenchSurface.js +68 -49
- package/dist/components/workbench/WorkbenchThemeSelector.d.ts +6 -0
- package/dist/components/workbench/WorkbenchThemeSelector.js +77 -0
- package/dist/components/workbench/WorkbenchWidget.d.ts +2 -0
- package/dist/components/workbench/WorkbenchWidget.js +211 -167
- package/dist/components/workbench/index.d.ts +2 -0
- package/dist/components/workbench/types.d.ts +2 -0
- package/dist/components/workbench/useWorkbenchModel.d.ts +5 -0
- package/dist/components/workbench/useWorkbenchModel.js +83 -77
- package/dist/components/workbench/workbenchHelpers.js +53 -50
- package/dist/components/workbench/workbenchThemes.d.ts +32 -0
- package/dist/components/workbench/workbenchThemes.js +82 -0
- package/dist/full.js +71 -69
- package/dist/styles.css +1 -1
- package/dist/ui.js +26 -24
- package/dist/workbench-themes.css +1106 -0
- package/dist/workbench.css +492 -96
- package/dist/workbench.js +35 -27
- package/package.json +1 -1
|
@@ -19,6 +19,7 @@ export interface InfiniteCanvasProps {
|
|
|
19
19
|
onViewportChange?: (viewport: InfiniteCanvasPoint) => void;
|
|
20
20
|
onViewportInteractionStart?: (kind: 'wheel' | 'pan') => void;
|
|
21
21
|
onCanvasContextMenu?: (event: InfiniteCanvasContextMenuEvent) => void;
|
|
22
|
+
onCanvasPointerDown?: (event: PointerEvent) => void;
|
|
22
23
|
ariaLabel?: string;
|
|
23
24
|
class?: string;
|
|
24
25
|
contentClass?: string;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { spread as
|
|
2
|
-
import { createSignal as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { startHotInteraction as
|
|
5
|
-
import { resolveSurfaceInteractionTargetRole as
|
|
1
|
+
import { spread as z, mergeProps as B, insert as _, effect as j, className as q, setStyleProperty as G, template as J, use as K } from "solid-js/web";
|
|
2
|
+
import { createSignal as T, untrack as L, createEffect as A, onCleanup as I } from "solid-js";
|
|
3
|
+
import { cn as D } from "../../utils/cn.js";
|
|
4
|
+
import { startHotInteraction as x } from "../../utils/hotInteraction.js";
|
|
5
|
+
import { resolveSurfaceInteractionTargetRole as Q, resolveSurfaceWheelRouting as ee, DEFAULT_CANVAS_WHEEL_INTERACTIVE_SELECTOR as te } from "./localInteractionSurface.js";
|
|
6
|
+
import { startPointerSession as ne } from "./pointerSession.js";
|
|
6
7
|
import { clientToCanvasLocal as Y, localToCanvasWorld as re, createViewportFromZoomAnchor as oe } from "./canvasGeometry.js";
|
|
7
|
-
import { SURFACE_PORTAL_LAYER_ATTR as
|
|
8
|
-
var
|
|
9
|
-
const ce = 1, le = 0.45, se = 2.2, ue = 14e-4,
|
|
10
|
-
function
|
|
11
|
-
return Math.max(
|
|
8
|
+
import { SURFACE_PORTAL_LAYER_ATTR as ae } from "./dialogSurfaceScope.js";
|
|
9
|
+
var ie = /* @__PURE__ */ J('<div><div style="transform-origin:0 0">');
|
|
10
|
+
const ce = 1, le = 0.45, se = 2.2, ue = 14e-4, fe = '[data-floe-canvas-pan-surface="true"]', R = 3;
|
|
11
|
+
function de(t, a, f) {
|
|
12
|
+
return Math.max(a, Math.min(f, t));
|
|
12
13
|
}
|
|
13
14
|
function b(t) {
|
|
14
15
|
return {
|
|
@@ -17,130 +18,142 @@ function b(t) {
|
|
|
17
18
|
scale: Number.isFinite(t.scale) && t.scale > 0 ? t.scale : ce
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
function me(t,
|
|
21
|
-
return t.deltaMode === 1 ? t.deltaY * 16 : t.deltaMode === 2 ? t.deltaY * (
|
|
21
|
+
function me(t, a) {
|
|
22
|
+
return t.deltaMode === 1 ? t.deltaY * 16 : t.deltaMode === 2 ? t.deltaY * (a?.clientHeight ?? window.innerHeight) : t.deltaY;
|
|
22
23
|
}
|
|
23
24
|
function Pe(t) {
|
|
24
|
-
const [
|
|
25
|
-
let
|
|
26
|
-
const M = () => t.interactiveSelector ?? '[data-floe-canvas-interactive="true"]', X = () => t.panSurfaceSelector ??
|
|
27
|
-
const e =
|
|
25
|
+
const [a, f] = T(L(() => b(t.viewport))), [S, w] = T(null);
|
|
26
|
+
let i, s, d, m = !1, l;
|
|
27
|
+
const M = () => t.interactiveSelector ?? '[data-floe-canvas-interactive="true"]', X = () => t.panSurfaceSelector ?? fe, F = () => t.wheelInteractiveSelector ?? te, V = () => t.minScale ?? le, y = () => t.maxScale ?? se, k = () => t.wheelZoomSpeed ?? ue, N = () => {
|
|
28
|
+
const e = S();
|
|
28
29
|
return e ? e.startedFromPanSurface ? e.moved : !0 : !1;
|
|
29
|
-
},
|
|
30
|
+
}, v = () => {
|
|
30
31
|
d !== void 0 && (window.clearTimeout(d), d = void 0);
|
|
31
32
|
}, C = () => {
|
|
32
|
-
|
|
33
|
-
},
|
|
33
|
+
m = !1, l !== void 0 && (window.clearTimeout(l), l = void 0);
|
|
34
|
+
}, U = () => {
|
|
34
35
|
if (typeof window > "u") {
|
|
35
|
-
|
|
36
|
+
m = !1;
|
|
36
37
|
return;
|
|
37
38
|
}
|
|
38
39
|
l !== void 0 && window.clearTimeout(l), l = window.setTimeout(() => {
|
|
39
|
-
l = void 0,
|
|
40
|
+
l = void 0, m = !1;
|
|
40
41
|
}, 0);
|
|
41
|
-
},
|
|
42
|
-
|
|
42
|
+
}, g = (e) => {
|
|
43
|
+
L(() => t.onViewportChange?.(e));
|
|
43
44
|
}, Z = (e) => {
|
|
44
45
|
if (typeof window > "u") {
|
|
45
|
-
|
|
46
|
+
g(e);
|
|
46
47
|
return;
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
d = void 0,
|
|
49
|
+
v(), d = window.setTimeout(() => {
|
|
50
|
+
d = void 0, g(e);
|
|
50
51
|
}, 90);
|
|
51
|
-
}, p = (e) =>
|
|
52
|
+
}, p = (e) => Q({
|
|
52
53
|
target: e,
|
|
53
54
|
interactiveSelector: M(),
|
|
54
55
|
panSurfaceSelector: X()
|
|
55
|
-
}),
|
|
56
|
-
const
|
|
57
|
-
if (!
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
56
|
+
}), H = () => {
|
|
57
|
+
const e = S();
|
|
58
|
+
if (!e) return;
|
|
59
|
+
e.stopInteraction?.();
|
|
60
|
+
const n = a();
|
|
61
|
+
w(null), s = void 0, e.startedFromPanSurface && e.moved && (m = !0, U()), g(n);
|
|
61
62
|
};
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}),
|
|
65
|
-
const e =
|
|
63
|
+
A(() => {
|
|
64
|
+
S() || f(b(t.viewport));
|
|
65
|
+
}), A(() => {
|
|
66
|
+
const e = i;
|
|
66
67
|
if (!e) return;
|
|
67
68
|
const n = (r) => {
|
|
68
|
-
!
|
|
69
|
+
!m || p(r.target) !== "pan_surface" || (C(), r.preventDefault(), r.stopPropagation());
|
|
69
70
|
};
|
|
70
|
-
e.addEventListener("click", n, !0), e.addEventListener("wheel",
|
|
71
|
+
e.addEventListener("click", n, !0), e.addEventListener("wheel", h, {
|
|
71
72
|
passive: !1
|
|
72
|
-
}),
|
|
73
|
-
e.removeEventListener("click", n, !0), e.removeEventListener("wheel",
|
|
73
|
+
}), I(() => {
|
|
74
|
+
e.removeEventListener("click", n, !0), e.removeEventListener("wheel", h);
|
|
74
75
|
});
|
|
75
|
-
}),
|
|
76
|
-
|
|
76
|
+
}), I(() => {
|
|
77
|
+
v(), s?.stop({
|
|
78
|
+
reason: "manual_stop",
|
|
79
|
+
commit: !0
|
|
80
|
+
}), s = void 0, C();
|
|
77
81
|
});
|
|
78
|
-
const
|
|
79
|
-
if (e.button !== 0
|
|
80
|
-
const n = p(e.target)
|
|
81
|
-
n
|
|
82
|
+
const W = (e) => {
|
|
83
|
+
if (e.button !== 0) return;
|
|
84
|
+
const n = p(e.target);
|
|
85
|
+
if (n === "canvas" && t.onCanvasPointerDown?.(e), t.disablePanZoom) return;
|
|
86
|
+
const r = n === "pan_surface";
|
|
87
|
+
n !== "local_surface" && (v(), C(), r || (t.onViewportInteractionStart?.("pan"), e.preventDefault()), s?.stop({
|
|
88
|
+
reason: "manual_stop",
|
|
89
|
+
commit: !0
|
|
90
|
+
}), w({
|
|
82
91
|
pointerId: e.pointerId,
|
|
83
92
|
startClientX: e.clientX,
|
|
84
93
|
startClientY: e.clientY,
|
|
85
|
-
startViewport:
|
|
94
|
+
startViewport: a(),
|
|
86
95
|
moved: !1,
|
|
87
96
|
startedFromPanSurface: r,
|
|
88
|
-
stopInteraction: r ? void 0 :
|
|
97
|
+
stopInteraction: r ? void 0 : x({
|
|
89
98
|
kind: "drag",
|
|
90
99
|
cursor: "grabbing"
|
|
91
100
|
})
|
|
101
|
+
}), s = ne({
|
|
102
|
+
pointerEvent: e,
|
|
103
|
+
captureEl: i ?? null,
|
|
104
|
+
capturePointer: !r,
|
|
105
|
+
onMove: O,
|
|
106
|
+
onEnd: () => {
|
|
107
|
+
H();
|
|
108
|
+
}
|
|
92
109
|
}));
|
|
93
|
-
},
|
|
94
|
-
const n =
|
|
110
|
+
}, O = (e) => {
|
|
111
|
+
const n = S();
|
|
95
112
|
if (!n || n.pointerId !== e.pointerId) return;
|
|
96
113
|
const r = e.clientX - n.startClientX, o = e.clientY - n.startClientY;
|
|
97
114
|
if (!(n.moved || Math.abs(r) > R || Math.abs(o) > R)) return;
|
|
98
|
-
n.moved || (e.preventDefault(),
|
|
99
|
-
const
|
|
115
|
+
n.moved || (e.preventDefault(), (!i || typeof i.hasPointerCapture != "function" || !i.hasPointerCapture(e.pointerId)) && s?.capturePointer());
|
|
116
|
+
const u = {
|
|
100
117
|
...n.startViewport,
|
|
101
118
|
x: n.startViewport.x + r,
|
|
102
119
|
y: n.startViewport.y + o
|
|
103
120
|
};
|
|
104
|
-
n.moved ||
|
|
121
|
+
n.moved || w({
|
|
105
122
|
...n,
|
|
106
123
|
moved: !0,
|
|
107
|
-
stopInteraction: n.stopInteraction ??
|
|
124
|
+
stopInteraction: n.stopInteraction ?? x({
|
|
108
125
|
kind: "drag",
|
|
109
126
|
cursor: "grabbing"
|
|
110
127
|
})
|
|
111
|
-
}), u
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
h(e.pointerId);
|
|
116
|
-
}, g = (e) => {
|
|
117
|
-
const n = a?.getBoundingClientRect();
|
|
118
|
-
if (!n || te({
|
|
128
|
+
}), f(u);
|
|
129
|
+
}, h = (e) => {
|
|
130
|
+
const n = i?.getBoundingClientRect();
|
|
131
|
+
if (!n || ee({
|
|
119
132
|
target: e.target,
|
|
120
133
|
disablePanZoom: !!t.disablePanZoom,
|
|
121
134
|
wheelInteractiveSelector: F()
|
|
122
135
|
}).kind !== "canvas_zoom") return;
|
|
123
136
|
e.preventDefault(), t.onViewportInteractionStart?.("wheel");
|
|
124
|
-
const o =
|
|
137
|
+
const o = a(), c = Y(n, {
|
|
125
138
|
clientX: e.clientX,
|
|
126
139
|
clientY: e.clientY
|
|
127
|
-
}),
|
|
128
|
-
if (Math.abs(
|
|
129
|
-
const
|
|
140
|
+
}), u = me(e, i), E = de(o.scale * Math.exp(-u * k()), V(), y());
|
|
141
|
+
if (Math.abs(E - o.scale) < 1e-4) return;
|
|
142
|
+
const P = oe({
|
|
130
143
|
viewport: o,
|
|
131
144
|
localPoint: c,
|
|
132
|
-
nextScale:
|
|
145
|
+
nextScale: E
|
|
133
146
|
});
|
|
134
|
-
|
|
135
|
-
},
|
|
147
|
+
f(P), Z(P);
|
|
148
|
+
}, $ = (e) => {
|
|
136
149
|
if (p(e.target) !== "canvas") return;
|
|
137
|
-
const n =
|
|
150
|
+
const n = i?.getBoundingClientRect();
|
|
138
151
|
if (!n) return;
|
|
139
152
|
e.preventDefault();
|
|
140
153
|
const r = Y(n, {
|
|
141
154
|
clientX: e.clientX,
|
|
142
155
|
clientY: e.clientY
|
|
143
|
-
}), o =
|
|
156
|
+
}), o = a(), c = re(o, r);
|
|
144
157
|
t.onCanvasContextMenu?.({
|
|
145
158
|
clientX: e.clientX,
|
|
146
159
|
clientY: e.clientY,
|
|
@@ -151,25 +164,22 @@ function Pe(t) {
|
|
|
151
164
|
});
|
|
152
165
|
};
|
|
153
166
|
return (() => {
|
|
154
|
-
var e =
|
|
155
|
-
return typeof r == "function" ?
|
|
167
|
+
var e = ie(), n = e.firstChild, r = i;
|
|
168
|
+
return typeof r == "function" ? K(r, e) : i = e, z(e, B({
|
|
156
169
|
get class() {
|
|
157
|
-
return
|
|
170
|
+
return D("floe-infinite-canvas", N() && "is-panning", t.disablePanZoom && "is-locked", t.class);
|
|
158
171
|
}
|
|
159
172
|
}, {
|
|
160
|
-
[
|
|
173
|
+
[ae]: "true"
|
|
161
174
|
}, {
|
|
162
|
-
onPointerDown:
|
|
163
|
-
|
|
164
|
-
onPointerUp: O,
|
|
165
|
-
onPointerCancel: $,
|
|
166
|
-
onContextMenu: z,
|
|
175
|
+
onPointerDown: W,
|
|
176
|
+
onContextMenu: $,
|
|
167
177
|
get "aria-label"() {
|
|
168
178
|
return t.ariaLabel ?? "Infinite canvas";
|
|
169
179
|
}
|
|
170
|
-
}), !1, !0),
|
|
171
|
-
var c =
|
|
172
|
-
return c !== o.e &&
|
|
180
|
+
}), !1, !0), _(n, () => t.children), _(e, () => t.overlay?.(a()), null), j((o) => {
|
|
181
|
+
var c = D("floe-infinite-canvas__viewport", t.contentClass), u = `translate(${a().x}px, ${a().y}px) scale(${a().scale})`;
|
|
182
|
+
return c !== o.e && q(n, o.e = c), u !== o.t && G(n, "transform", o.t = u), o;
|
|
173
183
|
}, {
|
|
174
184
|
e: void 0,
|
|
175
185
|
t: void 0
|
|
@@ -7,6 +7,7 @@ export { Dropdown, Select, type DropdownProps, type DropdownItem, type SelectPro
|
|
|
7
7
|
export { Tooltip, type TooltipProps } from './Tooltip';
|
|
8
8
|
export { CommandPalette } from './CommandPalette';
|
|
9
9
|
export { InfiniteCanvas, type InfiniteCanvasProps, type InfiniteCanvasPoint, type InfiniteCanvasContextMenuEvent, } from './InfiniteCanvas';
|
|
10
|
+
export { startPointerSession, type PointerSessionController, type PointerSessionEndEvent, type PointerSessionEndReason, type PointerSessionSnapshot, type StartPointerSessionOptions, } from './pointerSession';
|
|
10
11
|
export { clientToCanvasLocal, clientToCanvasWorld, createViewportFromZoomAnchor, isPointInsideCanvasRect, localToCanvasWorld, type CanvasClientPoint, type CanvasLocalPoint, type CanvasViewportLike, type CanvasViewportRectLike, type CanvasWorldPoint, } from './canvasGeometry';
|
|
11
12
|
export { CANVAS_WHEEL_INTERACTIVE_ATTR, DEFAULT_CANVAS_WHEEL_INTERACTIVE_SELECTOR, LOCAL_INTERACTION_SURFACE_ATTR, DEFAULT_LOCAL_INTERACTION_SURFACE_SELECTOR, WORKBENCH_WIDGET_SHELL_ATTR, DEFAULT_WORKBENCH_WIDGET_SHELL_SELECTOR, isLocalInteractionSurfaceTarget, resolveSurfaceInteractionTargetRole, resolveSurfaceWheelRouting, resolveWorkbenchWidgetEventOwnership, type SurfaceInteractionRoutingOptions, type SurfaceInteractionTargetRole, type SurfaceWheelLocalReason, type SurfaceWheelRoutingDecision, type SurfaceWheelRoutingOptions, type WorkbenchWidgetEventOwnership, type WorkbenchWidgetEventOwnershipOptions, } from './localInteractionSurface';
|
|
12
13
|
export { DIALOG_SURFACE_HOST_ATTR, SURFACE_PORTAL_HOST_ATTR, SURFACE_PORTAL_LAYER_ATTR, DIALOG_SURFACE_BOUNDARY_ATTR, ensureSurfacePortalInteractionTracking, isSurfacePortalMode, projectSurfacePortalPosition, projectSurfacePortalRect, resolveSurfacePortalBoundaryRect, resolveSurfacePortalHost, resolveSurfacePortalMount, resolveSurfacePortalMountRect, __resetSurfacePortalScopeForTests, type ResolvedSurfacePortalHost, type SurfacePortalBoundaryRect, type SurfacePortalInteractionSnapshot, type SurfacePortalMode, type SurfacePortalRect, } from './surfacePortalScope';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type PointerSessionEndReason = 'pointer_up' | 'pointer_cancel' | 'buttons_released' | 'lost_pointer_capture' | 'window_blur' | 'document_hidden' | 'manual_stop';
|
|
2
|
+
export interface PointerSessionSnapshot {
|
|
3
|
+
pointerId: number;
|
|
4
|
+
latestClientX: number;
|
|
5
|
+
latestClientY: number;
|
|
6
|
+
latestButtons: number;
|
|
7
|
+
active: boolean;
|
|
8
|
+
captureActive: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface PointerSessionEndEvent {
|
|
11
|
+
reason: PointerSessionEndReason;
|
|
12
|
+
commit: boolean;
|
|
13
|
+
snapshot: PointerSessionSnapshot;
|
|
14
|
+
event?: Pick<PointerEvent, 'pointerId' | 'clientX' | 'clientY' | 'buttons'>;
|
|
15
|
+
}
|
|
16
|
+
export interface StartPointerSessionOptions {
|
|
17
|
+
pointerEvent: PointerEvent;
|
|
18
|
+
captureEl?: HTMLElement | null;
|
|
19
|
+
ownerDocument?: Document;
|
|
20
|
+
buttonMask?: number;
|
|
21
|
+
capturePointer?: boolean;
|
|
22
|
+
onMove?: (event: PointerEvent, snapshot: PointerSessionSnapshot) => void;
|
|
23
|
+
onEnd: (event: PointerSessionEndEvent) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface PointerSessionController {
|
|
26
|
+
snapshot: () => PointerSessionSnapshot;
|
|
27
|
+
updatePointer: (event: Pick<PointerEvent, 'pointerId' | 'clientX' | 'clientY' | 'buttons'>) => void;
|
|
28
|
+
capturePointer: () => void;
|
|
29
|
+
stop: (options?: {
|
|
30
|
+
reason?: PointerSessionEndReason;
|
|
31
|
+
commit?: boolean;
|
|
32
|
+
event?: Pick<PointerEvent, 'pointerId' | 'clientX' | 'clientY' | 'buttons'>;
|
|
33
|
+
}) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare function startPointerSession(options: StartPointerSessionOptions): PointerSessionController;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
function C(e) {
|
|
2
|
+
if (e.ownerDocument) return e.ownerDocument;
|
|
3
|
+
if (e.captureEl?.ownerDocument) return e.captureEl.ownerDocument;
|
|
4
|
+
const n = e.pointerEvent.target;
|
|
5
|
+
return n && typeof n == "object" && "ownerDocument" in n && n.ownerDocument instanceof Document ? n.ownerDocument : document;
|
|
6
|
+
}
|
|
7
|
+
function c(e, n) {
|
|
8
|
+
return typeof e.buttons == "number" ? e.buttons : n;
|
|
9
|
+
}
|
|
10
|
+
function L(e, n) {
|
|
11
|
+
return !e || e.pointerId === n;
|
|
12
|
+
}
|
|
13
|
+
function b(e) {
|
|
14
|
+
const n = C(e), l = n.defaultView ?? window, a = e.buttonMask ?? 1, h = c(e.pointerEvent, a), t = {
|
|
15
|
+
pointerId: e.pointerEvent.pointerId,
|
|
16
|
+
latestClientX: e.pointerEvent.clientX,
|
|
17
|
+
latestClientY: e.pointerEvent.clientY,
|
|
18
|
+
latestButtons: h,
|
|
19
|
+
active: !0,
|
|
20
|
+
captureActive: !1
|
|
21
|
+
}, o = (r) => {
|
|
22
|
+
!t.active || r.pointerId !== t.pointerId || (t.latestClientX = r.clientX, t.latestClientY = r.clientY, t.latestButtons = c(r, t.latestButtons));
|
|
23
|
+
}, s = () => {
|
|
24
|
+
if (t.active && !(!e.captureEl || typeof e.captureEl.setPointerCapture != "function"))
|
|
25
|
+
try {
|
|
26
|
+
e.captureEl.setPointerCapture(t.pointerId), t.captureActive = !0;
|
|
27
|
+
} catch {
|
|
28
|
+
}
|
|
29
|
+
}, w = () => {
|
|
30
|
+
if (!e.captureEl || typeof e.captureEl.releasePointerCapture != "function") {
|
|
31
|
+
t.captureActive = !1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
(typeof e.captureEl.hasPointerCapture != "function" || e.captureEl.hasPointerCapture(t.pointerId)) && e.captureEl.releasePointerCapture(t.pointerId);
|
|
36
|
+
} catch {
|
|
37
|
+
} finally {
|
|
38
|
+
t.captureActive = !1;
|
|
39
|
+
}
|
|
40
|
+
}, P = () => {
|
|
41
|
+
n.removeEventListener("pointermove", p, !0), n.removeEventListener("pointerup", d, !0), n.removeEventListener("pointercancel", f, !0), n.removeEventListener("visibilitychange", E), l.removeEventListener("blur", v), e.captureEl?.removeEventListener("lostpointercapture", m);
|
|
42
|
+
}, i = (r = {}) => {
|
|
43
|
+
if (!t.active) return;
|
|
44
|
+
const u = r.event;
|
|
45
|
+
L(u, t.pointerId) && (u && o(u), t.active = !1, P(), w(), e.onEnd({
|
|
46
|
+
reason: r.reason ?? "manual_stop",
|
|
47
|
+
commit: r.commit ?? !1,
|
|
48
|
+
snapshot: t,
|
|
49
|
+
...u ? { event: u } : {}
|
|
50
|
+
}));
|
|
51
|
+
};
|
|
52
|
+
function p(r) {
|
|
53
|
+
if (!(!t.active || r.pointerId !== t.pointerId)) {
|
|
54
|
+
if (o(r), a > 0 && (c(r, t.latestButtons) & a) !== a) {
|
|
55
|
+
i({ reason: "buttons_released", commit: !0, event: r });
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
e.onMove?.(r, t);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function d(r) {
|
|
62
|
+
i({ reason: "pointer_up", commit: !0, event: r });
|
|
63
|
+
}
|
|
64
|
+
function f(r) {
|
|
65
|
+
i({ reason: "pointer_cancel", commit: !1, event: r });
|
|
66
|
+
}
|
|
67
|
+
function m() {
|
|
68
|
+
i({ reason: "lost_pointer_capture", commit: !0 });
|
|
69
|
+
}
|
|
70
|
+
function v() {
|
|
71
|
+
i({ reason: "window_blur", commit: !0 });
|
|
72
|
+
}
|
|
73
|
+
function E() {
|
|
74
|
+
n.hidden && i({ reason: "document_hidden", commit: !0 });
|
|
75
|
+
}
|
|
76
|
+
return n.addEventListener("pointermove", p, !0), n.addEventListener("pointerup", d, !0), n.addEventListener("pointercancel", f, !0), n.addEventListener("visibilitychange", E), l.addEventListener("blur", v), e.captureEl?.addEventListener("lostpointercapture", m), e.capturePointer !== !1 && s(), {
|
|
77
|
+
snapshot: () => t,
|
|
78
|
+
updatePointer: o,
|
|
79
|
+
capturePointer: s,
|
|
80
|
+
stop: i
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
b as startPointerSession
|
|
85
|
+
};
|
|
@@ -16,6 +16,7 @@ export interface WorkbenchCanvasProps {
|
|
|
16
16
|
onViewportCommit: (viewport: WorkbenchViewport) => void;
|
|
17
17
|
onViewportInteractionStart?: (kind: 'wheel' | 'pan') => void;
|
|
18
18
|
onCanvasContextMenu: (event: InfiniteCanvasContextMenuEvent) => void;
|
|
19
|
+
onCanvasPointerDown?: (event: PointerEvent) => void;
|
|
19
20
|
onSelectWidget: (widgetId: string) => void;
|
|
20
21
|
onWidgetContextMenu: (event: MouseEvent, item: WorkbenchWidgetItem) => void;
|
|
21
22
|
onStartOptimisticFront: (widgetId: string) => void;
|
|
@@ -28,6 +29,8 @@ export interface WorkbenchCanvasProps {
|
|
|
28
29
|
width: number;
|
|
29
30
|
height: number;
|
|
30
31
|
}) => void;
|
|
32
|
+
onRequestOverview: (item: WorkbenchWidgetItem) => void;
|
|
33
|
+
onRequestFit: (item: WorkbenchWidgetItem) => void;
|
|
31
34
|
onRequestDelete: (widgetId: string) => void;
|
|
32
35
|
}
|
|
33
36
|
export declare function WorkbenchCanvas(props: WorkbenchCanvasProps): import("solid-js").JSX.Element;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { use as
|
|
2
|
-
import { createMemo as o, Show as h, For as
|
|
3
|
-
import { WorkbenchCanvasField as
|
|
4
|
-
import { WorkbenchWidget as
|
|
5
|
-
import { createWorkbenchRenderLayerMap as
|
|
6
|
-
import { getWidgetEntry as
|
|
1
|
+
import { use as C, insert as m, createComponent as i, effect as R, template as w } from "solid-js/web";
|
|
2
|
+
import { createMemo as o, Show as h, For as W } from "solid-js";
|
|
3
|
+
import { WorkbenchCanvasField as F } from "./WorkbenchCanvasField.js";
|
|
4
|
+
import { WorkbenchWidget as y } from "./WorkbenchWidget.js";
|
|
5
|
+
import { createWorkbenchRenderLayerMap as I, resolveWorkbenchWidgetRenderMode as l } from "./workbenchHelpers.js";
|
|
6
|
+
import { getWidgetEntry as u } from "./widgets/widgetRegistry.js";
|
|
7
7
|
import { InfiniteCanvas as S } from "../ui/InfiniteCanvas.js";
|
|
8
|
-
var
|
|
9
|
-
function
|
|
8
|
+
var k = /* @__PURE__ */ w("<div class=workbench-canvas><div class=workbench-canvas__atmosphere aria-hidden=true>"), M = /* @__PURE__ */ w("<div class=workbench-canvas__projected-layer>");
|
|
9
|
+
function q(e) {
|
|
10
10
|
const n = o((g) => {
|
|
11
11
|
const d = e.widgetById().get(e.widgetId);
|
|
12
12
|
if (d) return d;
|
|
13
13
|
if (g) return g;
|
|
14
14
|
throw new Error(`Workbench widget ${e.widgetId} is missing from the projected render map.`);
|
|
15
|
-
}), a = o(() =>
|
|
16
|
-
return i(
|
|
15
|
+
}), a = o(() => u(n().type, e.widgetDefinitions));
|
|
16
|
+
return i(y, {
|
|
17
17
|
get definition() {
|
|
18
18
|
return a();
|
|
19
19
|
},
|
|
@@ -85,22 +85,30 @@ function b(e) {
|
|
|
85
85
|
get onCommitResize() {
|
|
86
86
|
return e.onCommitResize;
|
|
87
87
|
},
|
|
88
|
+
get onRequestOverview() {
|
|
89
|
+
return e.onRequestOverview;
|
|
90
|
+
},
|
|
91
|
+
get onRequestFit() {
|
|
92
|
+
return e.onRequestFit;
|
|
93
|
+
},
|
|
88
94
|
get onRequestDelete() {
|
|
89
95
|
return e.onRequestDelete;
|
|
90
96
|
}
|
|
91
97
|
});
|
|
92
98
|
}
|
|
93
|
-
function
|
|
94
|
-
const n = o(() => new Map(e.widgets.map((t) => [t.id, t]))), a = o(() =>
|
|
95
|
-
const r =
|
|
99
|
+
function V(e) {
|
|
100
|
+
const n = o(() => new Map(e.widgets.map((t) => [t.id, t]))), a = o(() => I(e.widgets)), g = o(() => e.widgets.filter((t) => {
|
|
101
|
+
const r = u(t.type, e.widgetDefinitions);
|
|
96
102
|
return l(r) === "canvas_scaled";
|
|
97
103
|
})), d = o(() => e.widgets.filter((t) => {
|
|
98
|
-
const r =
|
|
104
|
+
const r = u(t.type, e.widgetDefinitions);
|
|
99
105
|
return l(r) === "projected_surface";
|
|
100
|
-
}).map((t) => t.id)),
|
|
106
|
+
}).map((t) => t.id)), s = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0;
|
|
101
107
|
return (() => {
|
|
102
|
-
var t =
|
|
103
|
-
|
|
108
|
+
var t = k();
|
|
109
|
+
t.firstChild;
|
|
110
|
+
var r = e.setCanvasFrameRef;
|
|
111
|
+
return typeof r == "function" ? C(r, t) : e.setCanvasFrameRef = t, m(t, i(S, {
|
|
104
112
|
ariaLabel: "Workbench canvas",
|
|
105
113
|
class: "workbench-canvas__infinite",
|
|
106
114
|
get viewport() {
|
|
@@ -115,21 +123,24 @@ function q(e) {
|
|
|
115
123
|
get onCanvasContextMenu() {
|
|
116
124
|
return e.onCanvasContextMenu;
|
|
117
125
|
},
|
|
126
|
+
get onCanvasPointerDown() {
|
|
127
|
+
return e.onCanvasPointerDown;
|
|
128
|
+
},
|
|
118
129
|
get disablePanZoom() {
|
|
119
130
|
return e.locked;
|
|
120
131
|
},
|
|
121
|
-
overlay: (
|
|
132
|
+
overlay: (v) => i(h, {
|
|
122
133
|
get when() {
|
|
123
134
|
return d().length > 0;
|
|
124
135
|
},
|
|
125
136
|
get children() {
|
|
126
|
-
var
|
|
127
|
-
return m(
|
|
137
|
+
var c = M();
|
|
138
|
+
return m(c, i(W, {
|
|
128
139
|
get each() {
|
|
129
140
|
return d();
|
|
130
141
|
},
|
|
131
|
-
children: (
|
|
132
|
-
widgetId:
|
|
142
|
+
children: (f) => i(q, {
|
|
143
|
+
widgetId: f,
|
|
133
144
|
get widgetDefinitions() {
|
|
134
145
|
return e.widgetDefinitions;
|
|
135
146
|
},
|
|
@@ -177,19 +188,25 @@ function q(e) {
|
|
|
177
188
|
get onCommitResize() {
|
|
178
189
|
return e.onCommitResize;
|
|
179
190
|
},
|
|
191
|
+
get onRequestOverview() {
|
|
192
|
+
return e.onRequestOverview;
|
|
193
|
+
},
|
|
194
|
+
get onRequestFit() {
|
|
195
|
+
return e.onRequestFit;
|
|
196
|
+
},
|
|
180
197
|
get onRequestDelete() {
|
|
181
198
|
return e.onRequestDelete;
|
|
182
199
|
},
|
|
183
|
-
projectedViewport:
|
|
200
|
+
projectedViewport: v,
|
|
184
201
|
get surfaceReady() {
|
|
185
|
-
return
|
|
202
|
+
return s();
|
|
186
203
|
}
|
|
187
204
|
})
|
|
188
|
-
})),
|
|
205
|
+
})), c;
|
|
189
206
|
}
|
|
190
207
|
}),
|
|
191
208
|
get children() {
|
|
192
|
-
return i(
|
|
209
|
+
return i(F, {
|
|
193
210
|
get widgetDefinitions() {
|
|
194
211
|
return e.widgetDefinitions;
|
|
195
212
|
},
|
|
@@ -229,14 +246,20 @@ function q(e) {
|
|
|
229
246
|
get onCommitResize() {
|
|
230
247
|
return e.onCommitResize;
|
|
231
248
|
},
|
|
249
|
+
get onRequestOverview() {
|
|
250
|
+
return e.onRequestOverview;
|
|
251
|
+
},
|
|
252
|
+
get onRequestFit() {
|
|
253
|
+
return e.onRequestFit;
|
|
254
|
+
},
|
|
232
255
|
get onRequestDelete() {
|
|
233
256
|
return e.onRequestDelete;
|
|
234
257
|
}
|
|
235
258
|
});
|
|
236
259
|
}
|
|
237
|
-
})),
|
|
260
|
+
}), null), R(() => t.classList.toggle("is-locked", !!e.locked)), t;
|
|
238
261
|
})();
|
|
239
262
|
}
|
|
240
263
|
export {
|
|
241
|
-
|
|
264
|
+
V as WorkbenchCanvas
|
|
242
265
|
};
|
|
@@ -19,6 +19,8 @@ export interface WorkbenchCanvasFieldProps {
|
|
|
19
19
|
width: number;
|
|
20
20
|
height: number;
|
|
21
21
|
}) => void;
|
|
22
|
+
onRequestOverview: (item: WorkbenchWidgetItem) => void;
|
|
23
|
+
onRequestFit: (item: WorkbenchWidgetItem) => void;
|
|
22
24
|
onRequestDelete: (widgetId: string) => void;
|
|
23
25
|
}
|
|
24
26
|
export declare function WorkbenchCanvasField(props: WorkbenchCanvasFieldProps): import("solid-js").JSX.Element;
|
|
@@ -3,8 +3,8 @@ import { createMemo as i, For as c } from "solid-js";
|
|
|
3
3
|
import { createWorkbenchRenderLayerMap as a } from "./workbenchHelpers.js";
|
|
4
4
|
import { getWidgetEntry as l } from "./widgets/widgetRegistry.js";
|
|
5
5
|
import { WorkbenchWidget as w } from "./WorkbenchWidget.js";
|
|
6
|
-
var
|
|
7
|
-
function
|
|
6
|
+
var v = /* @__PURE__ */ m("<div class=workbench-canvas__field><div class=workbench-canvas__grid aria-hidden=true>");
|
|
7
|
+
function f(e) {
|
|
8
8
|
const t = i((r) => {
|
|
9
9
|
const n = e.widgetById().get(e.widgetId);
|
|
10
10
|
if (n) return n;
|
|
@@ -76,20 +76,26 @@ function W(e) {
|
|
|
76
76
|
get onCommitResize() {
|
|
77
77
|
return e.onCommitResize;
|
|
78
78
|
},
|
|
79
|
+
get onRequestOverview() {
|
|
80
|
+
return e.onRequestOverview;
|
|
81
|
+
},
|
|
82
|
+
get onRequestFit() {
|
|
83
|
+
return e.onRequestFit;
|
|
84
|
+
},
|
|
79
85
|
get onRequestDelete() {
|
|
80
86
|
return e.onRequestDelete;
|
|
81
87
|
}
|
|
82
88
|
});
|
|
83
89
|
}
|
|
84
|
-
function
|
|
90
|
+
function F(e) {
|
|
85
91
|
const t = i(() => e.widgets.map((n) => n.id)), d = i(() => new Map(e.widgets.map((n) => [n.id, n]))), r = i(() => a(e.widgets));
|
|
86
92
|
return (() => {
|
|
87
|
-
var n =
|
|
93
|
+
var n = v();
|
|
88
94
|
return n.firstChild, u(n, g(c, {
|
|
89
95
|
get each() {
|
|
90
96
|
return t();
|
|
91
97
|
},
|
|
92
|
-
children: (o) => g(
|
|
98
|
+
children: (o) => g(f, {
|
|
93
99
|
widgetId: o,
|
|
94
100
|
get widgetDefinitions() {
|
|
95
101
|
return e.widgetDefinitions;
|
|
@@ -132,6 +138,12 @@ function v(e) {
|
|
|
132
138
|
get onCommitResize() {
|
|
133
139
|
return e.onCommitResize;
|
|
134
140
|
},
|
|
141
|
+
get onRequestOverview() {
|
|
142
|
+
return e.onRequestOverview;
|
|
143
|
+
},
|
|
144
|
+
get onRequestFit() {
|
|
145
|
+
return e.onRequestFit;
|
|
146
|
+
},
|
|
135
147
|
get onRequestDelete() {
|
|
136
148
|
return e.onRequestDelete;
|
|
137
149
|
}
|
|
@@ -140,5 +152,5 @@ function v(e) {
|
|
|
140
152
|
})();
|
|
141
153
|
}
|
|
142
154
|
export {
|
|
143
|
-
|
|
155
|
+
F as WorkbenchCanvasField
|
|
144
156
|
};
|