@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.
Files changed (31) hide show
  1. package/dist/components/ui/InfiniteCanvas.d.ts +1 -0
  2. package/dist/components/ui/InfiniteCanvas.js +94 -84
  3. package/dist/components/ui/index.d.ts +1 -0
  4. package/dist/components/ui/pointerSession.d.ts +35 -0
  5. package/dist/components/ui/pointerSession.js +85 -0
  6. package/dist/components/workbench/WorkbenchCanvas.d.ts +3 -0
  7. package/dist/components/workbench/WorkbenchCanvas.js +51 -28
  8. package/dist/components/workbench/WorkbenchCanvasField.d.ts +2 -0
  9. package/dist/components/workbench/WorkbenchCanvasField.js +18 -6
  10. package/dist/components/workbench/WorkbenchFilterBar.js +119 -117
  11. package/dist/components/workbench/WorkbenchHud.d.ts +9 -0
  12. package/dist/components/workbench/WorkbenchHud.js +24 -10
  13. package/dist/components/workbench/WorkbenchSurface.js +68 -49
  14. package/dist/components/workbench/WorkbenchThemeSelector.d.ts +6 -0
  15. package/dist/components/workbench/WorkbenchThemeSelector.js +77 -0
  16. package/dist/components/workbench/WorkbenchWidget.d.ts +2 -0
  17. package/dist/components/workbench/WorkbenchWidget.js +211 -167
  18. package/dist/components/workbench/index.d.ts +2 -0
  19. package/dist/components/workbench/types.d.ts +2 -0
  20. package/dist/components/workbench/useWorkbenchModel.d.ts +5 -0
  21. package/dist/components/workbench/useWorkbenchModel.js +83 -77
  22. package/dist/components/workbench/workbenchHelpers.js +53 -50
  23. package/dist/components/workbench/workbenchThemes.d.ts +32 -0
  24. package/dist/components/workbench/workbenchThemes.js +82 -0
  25. package/dist/full.js +71 -69
  26. package/dist/styles.css +1 -1
  27. package/dist/ui.js +26 -24
  28. package/dist/workbench-themes.css +1106 -0
  29. package/dist/workbench.css +492 -96
  30. package/dist/workbench.js +35 -27
  31. 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 B, mergeProps as j, insert as T, effect as q, className as G, setStyleProperty as J, template as K, use as Q } from "solid-js/web";
2
- import { createSignal as _, untrack as I, createEffect as L, onCleanup as A } from "solid-js";
3
- import { cn as x } from "../../utils/cn.js";
4
- import { startHotInteraction as D } from "../../utils/hotInteraction.js";
5
- import { resolveSurfaceInteractionTargetRole as ee, resolveSurfaceWheelRouting as te, DEFAULT_CANVAS_WHEEL_INTERACTIVE_SELECTOR as ne } from "./localInteractionSurface.js";
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 ie } from "./dialogSurfaceScope.js";
8
- var ae = /* @__PURE__ */ K('<div><div style="transform-origin:0 0">');
9
- const ce = 1, le = 0.45, se = 2.2, ue = 14e-4, de = '[data-floe-canvas-pan-surface="true"]', R = 3;
10
- function fe(t, i, u) {
11
- return Math.max(i, Math.min(u, t));
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, i) {
21
- return t.deltaMode === 1 ? t.deltaY * 16 : t.deltaMode === 2 ? t.deltaY * (i?.clientHeight ?? window.innerHeight) : 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 [i, u] = _(I(() => b(t.viewport))), [m, S] = _(null);
25
- let a, d, f = !1, l;
26
- const M = () => t.interactiveSelector ?? '[data-floe-canvas-interactive="true"]', X = () => t.panSurfaceSelector ?? de, F = () => t.wheelInteractiveSelector ?? ne, V = () => t.minScale ?? le, y = () => t.maxScale ?? se, k = () => t.wheelZoomSpeed ?? ue, U = () => {
27
- const e = m();
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
- }, w = () => {
30
+ }, v = () => {
30
31
  d !== void 0 && (window.clearTimeout(d), d = void 0);
31
32
  }, C = () => {
32
- f = !1, l !== void 0 && (window.clearTimeout(l), l = void 0);
33
- }, N = () => {
33
+ m = !1, l !== void 0 && (window.clearTimeout(l), l = void 0);
34
+ }, U = () => {
34
35
  if (typeof window > "u") {
35
- f = !1;
36
+ m = !1;
36
37
  return;
37
38
  }
38
39
  l !== void 0 && window.clearTimeout(l), l = window.setTimeout(() => {
39
- l = void 0, f = !1;
40
+ l = void 0, m = !1;
40
41
  }, 0);
41
- }, v = (e) => {
42
- I(() => t.onViewportChange?.(e));
42
+ }, g = (e) => {
43
+ L(() => t.onViewportChange?.(e));
43
44
  }, Z = (e) => {
44
45
  if (typeof window > "u") {
45
- v(e);
46
+ g(e);
46
47
  return;
47
48
  }
48
- w(), d = window.setTimeout(() => {
49
- d = void 0, v(e);
49
+ v(), d = window.setTimeout(() => {
50
+ d = void 0, g(e);
50
51
  }, 90);
51
- }, p = (e) => ee({
52
+ }, p = (e) => Q({
52
53
  target: e,
53
54
  interactiveSelector: M(),
54
55
  panSurfaceSelector: X()
55
- }), h = (e) => {
56
- const n = m();
57
- if (!n || e !== void 0 && n.pointerId !== e) return;
58
- n.stopInteraction?.();
59
- const r = i();
60
- S(null), a && a.hasPointerCapture(n.pointerId) && a.releasePointerCapture(n.pointerId), n.startedFromPanSurface && n.moved && (f = !0, N()), v(r);
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
- L(() => {
63
- m() || u(b(t.viewport));
64
- }), L(() => {
65
- const e = a;
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
- !f || p(r.target) !== "pan_surface" || (C(), r.preventDefault(), r.stopPropagation());
69
+ !m || p(r.target) !== "pan_surface" || (C(), r.preventDefault(), r.stopPropagation());
69
70
  };
70
- e.addEventListener("click", n, !0), e.addEventListener("wheel", g, {
71
+ e.addEventListener("click", n, !0), e.addEventListener("wheel", h, {
71
72
  passive: !1
72
- }), A(() => {
73
- e.removeEventListener("click", n, !0), e.removeEventListener("wheel", g);
73
+ }), I(() => {
74
+ e.removeEventListener("click", n, !0), e.removeEventListener("wheel", h);
74
75
  });
75
- }), A(() => {
76
- w(), h(), C();
76
+ }), I(() => {
77
+ v(), s?.stop({
78
+ reason: "manual_stop",
79
+ commit: !0
80
+ }), s = void 0, C();
77
81
  });
78
- const H = (e) => {
79
- if (e.button !== 0 || t.disablePanZoom) return;
80
- const n = p(e.target), r = n === "pan_surface";
81
- n !== "local_surface" && (w(), C(), r || (t.onViewportInteractionStart?.("pan"), e.preventDefault(), a?.setPointerCapture(e.pointerId)), S({
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: i(),
94
+ startViewport: a(),
86
95
  moved: !1,
87
96
  startedFromPanSurface: r,
88
- stopInteraction: r ? void 0 : D({
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
- }, W = (e) => {
94
- const n = m();
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(), a?.hasPointerCapture(e.pointerId) || a?.setPointerCapture(e.pointerId));
99
- const s = {
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 || S({
121
+ n.moved || w({
105
122
  ...n,
106
123
  moved: !0,
107
- stopInteraction: n.stopInteraction ?? D({
124
+ stopInteraction: n.stopInteraction ?? x({
108
125
  kind: "drag",
109
126
  cursor: "grabbing"
110
127
  })
111
- }), u(s);
112
- }, O = (e) => {
113
- h(e.pointerId);
114
- }, $ = (e) => {
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 = i(), c = Y(n, {
137
+ const o = a(), c = Y(n, {
125
138
  clientX: e.clientX,
126
139
  clientY: e.clientY
127
- }), s = me(e, a), P = fe(o.scale * Math.exp(-s * k()), V(), y());
128
- if (Math.abs(P - o.scale) < 1e-4) return;
129
- const E = oe({
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: P
145
+ nextScale: E
133
146
  });
134
- u(E), Z(E);
135
- }, z = (e) => {
147
+ f(P), Z(P);
148
+ }, $ = (e) => {
136
149
  if (p(e.target) !== "canvas") return;
137
- const n = a?.getBoundingClientRect();
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 = i(), c = re(o, r);
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 = ae(), n = e.firstChild, r = a;
155
- return typeof r == "function" ? Q(r, e) : a = e, B(e, j({
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 x("floe-infinite-canvas", U() && "is-panning", t.disablePanZoom && "is-locked", t.class);
170
+ return D("floe-infinite-canvas", N() && "is-panning", t.disablePanZoom && "is-locked", t.class);
158
171
  }
159
172
  }, {
160
- [ie]: "true"
173
+ [ae]: "true"
161
174
  }, {
162
- onPointerDown: H,
163
- onPointerMove: W,
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), T(n, () => t.children), T(e, () => t.overlay?.(i()), null), q((o) => {
171
- var c = x("floe-infinite-canvas__viewport", t.contentClass), s = `translate(${i().x}px, ${i().y}px) scale(${i().scale})`;
172
- return c !== o.e && G(n, o.e = c), s !== o.t && J(n, "transform", o.t = s), o;
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 v, insert as m, createComponent as i, effect as W, template as w } from "solid-js/web";
2
- import { createMemo as o, Show as h, For as F } from "solid-js";
3
- import { WorkbenchCanvasField as y } from "./WorkbenchCanvasField.js";
4
- import { WorkbenchWidget as I } from "./WorkbenchWidget.js";
5
- import { createWorkbenchRenderLayerMap as R, resolveWorkbenchWidgetRenderMode as l } from "./workbenchHelpers.js";
6
- import { getWidgetEntry as c } from "./widgets/widgetRegistry.js";
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 M = /* @__PURE__ */ w("<div class=workbench-canvas>"), k = /* @__PURE__ */ w("<div class=workbench-canvas__projected-layer>");
9
- function b(e) {
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(() => c(n().type, e.widgetDefinitions));
16
- return i(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 q(e) {
94
- const n = o(() => new Map(e.widgets.map((t) => [t.id, t]))), a = o(() => R(e.widgets)), g = o(() => e.widgets.filter((t) => {
95
- const r = c(t.type, e.widgetDefinitions);
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 = c(t.type, e.widgetDefinitions);
104
+ const r = u(t.type, e.widgetDefinitions);
99
105
  return l(r) === "projected_surface";
100
- }).map((t) => t.id)), f = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0;
106
+ }).map((t) => t.id)), s = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0;
101
107
  return (() => {
102
- var t = M(), r = e.setCanvasFrameRef;
103
- return typeof r == "function" ? v(r, t) : e.setCanvasFrameRef = t, m(t, i(S, {
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: (s) => i(h, {
132
+ overlay: (v) => i(h, {
122
133
  get when() {
123
134
  return d().length > 0;
124
135
  },
125
136
  get children() {
126
- var u = k();
127
- return m(u, i(F, {
137
+ var c = M();
138
+ return m(c, i(W, {
128
139
  get each() {
129
140
  return d();
130
141
  },
131
- children: (C) => i(b, {
132
- widgetId: C,
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: s,
200
+ projectedViewport: v,
184
201
  get surfaceReady() {
185
- return f();
202
+ return s();
186
203
  }
187
204
  })
188
- })), u;
205
+ })), c;
189
206
  }
190
207
  }),
191
208
  get children() {
192
- return i(y, {
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
- })), W(() => t.classList.toggle("is-locked", !!e.locked)), t;
260
+ }), null), R(() => t.classList.toggle("is-locked", !!e.locked)), t;
238
261
  })();
239
262
  }
240
263
  export {
241
- q as WorkbenchCanvas
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 f = /* @__PURE__ */ m("<div class=workbench-canvas__field><div class=workbench-canvas__grid aria-hidden=true>");
7
- function W(e) {
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 v(e) {
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 = f();
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(W, {
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
- v as WorkbenchCanvasField
155
+ F as WorkbenchCanvasField
144
156
  };