@floegence/floe-webapp-core 0.41.4 → 0.42.1

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.
@@ -1,6 +1,6 @@
1
1
  import { type UIFirstSelectionEvent } from '../../utils/uiFirstSelection';
2
2
  import { type WorkbenchContextMenuItem } from './WorkbenchContextMenu';
3
- import { type WorkbenchDockItemActivation, type WorkbenchDockAction, type WorkbenchExternalDockDragController, type WorkbenchExternalDockDragItem, type WorkbenchHostDockItem } from './WorkbenchFilterBar';
3
+ import { type WorkbenchDockItemActivation, type WorkbenchDockAction, type WorkbenchExternalDockDragController, type WorkbenchHostDockItem } from './WorkbenchFilterBar';
4
4
  import type { WorkbenchState, WorkbenchAnnotationItem, WorkbenchBackgroundLayer, WorkbenchBackgroundLayerDefaults, WorkbenchBackgroundLayerPatch, WorkbenchContextMenuState, WorkbenchInteractionAdapter, WorkbenchStickyNoteItem, WorkbenchStickyNotePatch, WorkbenchTextAnnotationDefaults, WorkbenchTextAnnotationPatch, WorkbenchWidgetDefinition, WorkbenchWidgetItem, WorkbenchWidgetType } from './types';
5
5
  export interface WorkbenchCreateAtOptions {
6
6
  worldX?: number;
@@ -71,7 +71,6 @@ export interface WorkbenchSurfaceProps {
71
71
  dockActions?: readonly WorkbenchDockAction[];
72
72
  dockItems?: readonly WorkbenchHostDockItem[];
73
73
  registerExternalDockDragController?: (controller: WorkbenchExternalDockDragController | null) => void;
74
- onExternalDockDrop?: (item: WorkbenchExternalDockDragItem) => void;
75
74
  onLayoutInteractionStart?: () => void;
76
75
  onLayoutInteractionEnd?: () => void;
77
76
  /** Defer pointer/focus widget activation until the visual selection has painted. */
@@ -1,6 +1,6 @@
1
- import { use as j, spread as K, mergeProps as Z, insert as v, createComponent as l, Portal as G, addEventListener as J, template as E, delegateEvents as Q } from "solid-js/web";
2
- import { createSignal as W, createMemo as w, untrack as h, createEffect as k, onCleanup as A, Show as ee } from "solid-js";
3
- import { clientToCanvasWorld as B } from "../ui/canvasGeometry.js";
1
+ import { use as j, spread as K, mergeProps as G, insert as v, createComponent as l, Portal as Z, addEventListener as J, template as R, delegateEvents as Q } from "solid-js/web";
2
+ import { createSignal as W, createMemo as w, untrack as h, createEffect as k, onCleanup as y, Show as ee } from "solid-js";
3
+ import { clientToCanvasWorld as T } from "../ui/canvasGeometry.js";
4
4
  import { createUIFirstSelection as te } from "../../utils/uiFirstSelection.js";
5
5
  import { WorkbenchCanvas as ne } from "./WorkbenchCanvas.js";
6
6
  import { WorkbenchContextMenu as oe } from "./WorkbenchContextMenu.js";
@@ -12,9 +12,10 @@ import { createContextMenuPosition as de, WORKBENCH_CONTEXT_MENU_WIDTH_PX as ue,
12
12
  import { resolveWorkbenchWidgetPlacementPreview as le, resolveWorkbenchToolPlacementPreview as ge } from "./workbenchPlacement.js";
13
13
  import { useWorkbenchModel as we } from "./useWorkbenchModel.js";
14
14
  import { resolveWorkbenchInteractionAdapter as me } from "./workbenchInteractionAdapter.js";
15
- var fe = /* @__PURE__ */ E("<div class=workbench-menu-backdrop data-floe-workbench-boundary=true>"), ve = /* @__PURE__ */ E("<div><div class=workbench-surface__body data-floe-workbench-canvas-frame=true>");
16
- const ke = "F1";
17
- function T(i) {
15
+ import { SURFACE_PORTAL_LAYER_ATTR as fe, DIALOG_SURFACE_HOST_ATTR as ve } from "../ui/dialogSurfaceScope.js";
16
+ var ke = /* @__PURE__ */ R("<div class=workbench-menu-backdrop data-floe-workbench-boundary=true>"), Ae = /* @__PURE__ */ R("<div><div class=workbench-surface__body data-floe-workbench-canvas-frame=true>");
17
+ const ye = "F1";
18
+ function B(i) {
18
19
  if (i)
19
20
  try {
20
21
  i.focus({
@@ -24,7 +25,7 @@ function T(i) {
24
25
  i.focus();
25
26
  }
26
27
  }
27
- function Ee(i) {
28
+ function Fe(i) {
28
29
  const t = we({
29
30
  state: () => i.state(),
30
31
  setState: (e) => i.setState(e),
@@ -44,7 +45,7 @@ function Ee(i) {
44
45
  t.canvas.selectWidget(e), n?.bringToFront && t.canvas.commitFront(e);
45
46
  },
46
47
  onEvent: (e) => i.onWidgetActivationEvent?.(e)
47
- }), R = () => i.widgetActivationMode === "after-paint" ? u.visual() : t.selectedWidgetId(), F = () => {
48
+ }), E = () => i.widgetActivationMode === "after-paint" ? u.visual() : t.selectedWidgetId(), O = () => {
48
49
  if (i.widgetActivationMode !== "after-paint" || !u.pending())
49
50
  return t.selectedObject();
50
51
  const e = u.visual();
@@ -52,7 +53,7 @@ function Ee(i) {
52
53
  kind: "widget",
53
54
  id: e
54
55
  } : null;
55
- }, N = (e) => {
56
+ }, F = (e) => {
56
57
  if (i.widgetActivationMode === "after-paint") {
57
58
  if (u.pending() && u.visual() === e) return;
58
59
  u.request(e, {
@@ -61,7 +62,7 @@ function Ee(i) {
61
62
  return;
62
63
  }
63
64
  t.canvas.selectWidget(e);
64
- }, O = (e) => {
65
+ }, N = (e) => {
65
66
  if (i.widgetActivationMode === "after-paint") {
66
67
  if (u.pending() && u.visual() === e) return;
67
68
  u.request(e, {
@@ -70,14 +71,14 @@ function Ee(i) {
70
71
  return;
71
72
  }
72
73
  t.canvas.selectWidget(e), t.canvas.commitFront(e);
73
- }, [s, X] = W(null), [_, q] = W(null), c = w(() => me(i.interactionAdapter)), [p, g] = W(h(() => c().createInitialInputOwner())), S = w(() => {
74
+ }, [s, _] = W(null), [P, X] = W(null), c = w(() => me(i.interactionAdapter)), [S, g] = W(h(() => c().createInitialInputOwner())), p = w(() => {
74
75
  const e = i.launcherWidgetTypes;
75
76
  return !e || e.length <= 0 ? null : new Set(e);
76
77
  }), Y = w(() => {
77
- const e = t.widgetDefinitions(), n = S();
78
+ const e = t.widgetDefinitions(), n = p();
78
79
  return n ? e.filter((o) => n.has(o.type)) : e;
79
80
  }), b = w(() => {
80
- const e = t.contextMenu.state(), n = t.contextMenu.items(), o = S(), r = o ? n.filter((f) => {
81
+ const e = t.contextMenu.state(), n = t.contextMenu.items(), o = p(), r = o ? n.filter((f) => {
81
82
  if (f.kind !== "action")
82
83
  return !0;
83
84
  const L = /^add-(.+)$/.exec(String(f.id ?? ""));
@@ -103,7 +104,7 @@ function Ee(i) {
103
104
  menuWidth: ue,
104
105
  menuHeight: se(o, r)
105
106
  });
106
- }), x = (e, n, o) => {
107
+ }), I = (e, n, o) => {
107
108
  const r = c(), a = r.findWidgetRoot(e), d = r.readWidgetId(a);
108
109
  if (d) {
109
110
  if (t.queries.findStickyNoteById(d)) {
@@ -115,19 +116,19 @@ function Ee(i) {
115
116
  }
116
117
  const f = s();
117
118
  f && e instanceof Node && f.contains(e) && g(r.createCanvasInputOwner(o));
118
- }, I = (e = "selection_cleared") => {
119
+ }, M = (e = "selection_cleared") => {
119
120
  const n = c(), o = s();
120
121
  t.selection.clear(), g(n.createCanvasInputOwner(e)), queueMicrotask(() => {
121
122
  if (!o || typeof document > "u") return;
122
123
  const r = document.activeElement;
123
124
  if (!(r instanceof HTMLElement) || !o.contains(r)) {
124
- T(o);
125
+ B(o);
125
126
  return;
126
127
  }
127
128
  const a = n.findWidgetRoot(r);
128
- T(o), a && document.activeElement === r && r.isConnected && r.blur();
129
+ B(o), a && document.activeElement === r && r.isConnected && r.blur();
129
130
  });
130
- }, y = () => {
131
+ }, A = () => {
131
132
  const e = s()?.querySelector('[data-floe-workbench-canvas-frame="true"]'), n = t.viewport(), o = e?.getBoundingClientRect(), r = o?.width ?? 0, a = o?.height ?? 0;
132
133
  return {
133
134
  worldX: r > 0 ? (r / 2 - n.x) / n.scale : 240,
@@ -138,7 +139,7 @@ function Ee(i) {
138
139
  queueMicrotask(() => {
139
140
  n.focusWidgetElement(o, e), g(n.createWidgetInputOwner(e, "activation"));
140
141
  });
141
- }, P = (e) => {
142
+ }, q = (e) => {
142
143
  const n = t.navigation.fitWidget(e);
143
144
  m(n.id);
144
145
  }, V = (e) => {
@@ -149,22 +150,22 @@ function Ee(i) {
149
150
  i.onApiReady?.({
150
151
  ensureWidget: (e, n) => t.widgetActions.ensureWidget(e, n) ?? null,
151
152
  createWidget: (e, n) => {
152
- const o = y(), r = t.widgetActions.addWidgetAtWorldCenter(e, n?.worldX ?? o.worldX, n?.worldY ?? o.worldY) ?? null;
153
+ const o = A(), r = t.widgetActions.addWidgetAtWorldCenter(e, n?.worldX ?? o.worldX, n?.worldY ?? o.worldY) ?? null;
153
154
  return r && n?.centerViewport !== !1 && t.navigation.centerOnWidget(r), r;
154
155
  },
155
156
  createTextAnnotation: (e) => {
156
- const n = y();
157
+ const n = A();
157
158
  return t.widgetActions.addTextAnnotationAtCursor(e?.worldX ?? n.worldX, e?.worldY ?? n.worldY) ?? null;
158
159
  },
159
160
  createStickyNote: (e) => {
160
- const n = y();
161
+ const n = A();
161
162
  return t.widgetActions.addStickyNoteAtCursor(e?.worldX ?? n.worldX, e?.worldY ?? n.worldY) ?? null;
162
163
  },
163
164
  createBackgroundLayer: (e) => {
164
- const n = y();
165
+ const n = A();
165
166
  return t.widgetActions.addBackgroundLayerAtCursor(e?.worldX ?? n.worldX, e?.worldY ?? n.worldY) ?? null;
166
167
  },
167
- clearSelection: () => I("selection_cleared"),
168
+ clearSelection: () => M("selection_cleared"),
168
169
  focusWidget: (e, n) => {
169
170
  const o = t.navigation.focusWidget(e, n);
170
171
  return m(o.id), o;
@@ -198,36 +199,36 @@ function Ee(i) {
198
199
  deleteStickyNote: (e) => t.widgetActions.deleteStickyNote(e),
199
200
  deleteAnnotation: (e) => t.widgetActions.deleteAnnotation(e),
200
201
  deleteBackgroundLayer: (e) => t.widgetActions.deleteBackgroundLayer(e)
201
- }), A(() => {
202
+ }), y(() => {
202
203
  i.onApiReady?.(null);
203
204
  });
204
205
  });
205
- const M = () => i.lockShortcut === void 0 ? ke : i.lockShortcut;
206
+ const x = () => i.lockShortcut === void 0 ? ye : i.lockShortcut;
206
207
  k(() => {
207
208
  if (typeof window > "u" || !t.contextMenu.state()) return;
208
209
  const e = ce({
209
210
  ownerWindow: window,
210
211
  onDismiss: t.contextMenu.close
211
212
  });
212
- A(() => e());
213
+ y(() => e());
213
214
  }), k(() => {
214
- const e = p();
215
+ const e = S();
215
216
  if (e.kind !== "widget") return;
216
217
  t.widgets().some((o) => o.id === e.widgetId) || g(c().createCanvasInputOwner("widget_removed"));
217
218
  }), k(() => {
218
219
  const e = s();
219
220
  if (!e) return;
220
221
  const n = (r) => {
221
- x(r.target, "pointer", "background_pointer");
222
+ I(r.target, "pointer", "background_pointer");
222
223
  }, o = (r) => {
223
- x(r.target, "focus", "background_focus");
224
+ I(r.target, "focus", "background_focus");
224
225
  };
225
- e.addEventListener("pointerdown", n, !0), e.addEventListener("focusin", o), A(() => {
226
+ e.addEventListener("pointerdown", n, !0), e.addEventListener("focusin", o), y(() => {
226
227
  e.removeEventListener("pointerdown", n, !0), e.removeEventListener("focusin", o);
227
228
  });
228
229
  }), k(() => {
229
230
  if (i.enableKeyboard === !1 || typeof document > "u") return;
230
- const e = M(), n = (o) => {
231
+ const e = x(), n = (o) => {
231
232
  if (!(o.defaultPrevented || o.isComposing)) {
232
233
  if (e !== null && o.key === e) {
233
234
  o.preventDefault(), t.lock.toggle();
@@ -236,7 +237,7 @@ function Ee(i) {
236
237
  if (!c().shouldBypassGlobalHotkeys({
237
238
  root: s(),
238
239
  target: o.target,
239
- owner: p(),
240
+ owner: S(),
240
241
  interactiveSelector: c().interactiveSelector
241
242
  }))
242
243
  switch (o.key) {
@@ -259,18 +260,20 @@ function Ee(i) {
259
260
  }
260
261
  }
261
262
  };
262
- document.addEventListener("keydown", n, !0), A(() => document.removeEventListener("keydown", n, !0));
263
+ document.addEventListener("keydown", n, !0), y(() => document.removeEventListener("keydown", n, !0));
263
264
  });
264
265
  const C = (e, n, o) => {
266
+ if (o?.worldPoint)
267
+ return o.worldPoint;
265
268
  if (o?.canvasFrame)
266
- return B(o.canvasFrame, t.viewport(), {
269
+ return T(o.canvasFrame, t.viewport(), {
267
270
  clientX: e,
268
271
  clientY: n
269
272
  });
270
273
  const r = s()?.querySelector('[data-floe-workbench-canvas-frame="true"]');
271
274
  if (!r) return null;
272
275
  const a = r.getBoundingClientRect();
273
- return B(a, t.viewport(), {
276
+ return T(a, t.viewport(), {
274
277
  clientX: e,
275
278
  clientY: n
276
279
  });
@@ -291,9 +294,9 @@ function Ee(i) {
291
294
  e === "background-region" && t.widgetActions.addBackgroundLayerAtCursor(a.worldX, a.worldY);
292
295
  }
293
296
  }, U = (e) => {
294
- e.button === 0 && (c().findWidgetRoot(e.target) || I("background_pointer"));
297
+ e.button === 0 && (c().findWidgetRoot(e.target) || M("background_pointer"));
295
298
  }, $ = w(() => {
296
- const e = _();
299
+ const e = P();
297
300
  if (!e) return null;
298
301
  const n = C(e.clientX, e.clientY, e);
299
302
  return n ? e.kind === "widget" ? le({
@@ -313,13 +316,16 @@ function Ee(i) {
313
316
  }) : null;
314
317
  });
315
318
  return (() => {
316
- var e = ve(), n = e.firstChild;
317
- return j(X, e), K(e, Z({
319
+ var e = Ae(), n = e.firstChild;
320
+ return j(_, e), K(e, G({
318
321
  get class() {
319
322
  return `workbench-surface${i.class ? ` ${i.class}` : ""}`;
320
323
  }
321
324
  }, () => ({
322
- [c().surfaceRootAttr]: "true"
325
+ [c().surfaceRootAttr]: "true",
326
+ [c().dialogSurfaceHostAttr]: "true",
327
+ [ve]: "true",
328
+ [fe]: "true"
323
329
  }), {
324
330
  get "data-workbench-theme"() {
325
331
  return t.theme();
@@ -354,10 +360,10 @@ function Ee(i) {
354
360
  return t.canvasFrameSize();
355
361
  },
356
362
  get selectedWidgetId() {
357
- return R();
363
+ return E();
358
364
  },
359
365
  get selectedObject() {
360
- return F();
366
+ return O();
361
367
  },
362
368
  get mode() {
363
369
  return t.mode();
@@ -387,8 +393,8 @@ function Ee(i) {
387
393
  return t.canvas.openCanvasContextMenu;
388
394
  },
389
395
  onCanvasPointerDown: U,
390
- onSelectWidget: N,
391
- onActivateWidget: O,
396
+ onSelectWidget: F,
397
+ onActivateWidget: N,
392
398
  get onWidgetContextMenu() {
393
399
  return t.canvas.openWidgetContextMenu;
394
400
  },
@@ -465,7 +471,7 @@ function Ee(i) {
465
471
  return t.widgetActions.deleteBackgroundLayer;
466
472
  },
467
473
  onRequestOverview: V,
468
- onRequestFit: P,
474
+ onRequestFit: q,
469
475
  get onRequestDelete() {
470
476
  return i.onRequestDelete ?? t.widgetActions.deleteWidget;
471
477
  },
@@ -483,7 +489,7 @@ function Ee(i) {
483
489
  return t.lock.toggle;
484
490
  },
485
491
  get shortcutLabel() {
486
- return M() ?? void 0;
492
+ return x() ?? void 0;
487
493
  }
488
494
  }), null), v(e, l(re, {
489
495
  get widgetDefinitions() {
@@ -525,10 +531,7 @@ function Ee(i) {
525
531
  get registerExternalDockDragController() {
526
532
  return i.registerExternalDockDragController;
527
533
  },
528
- get onExternalDockDrop() {
529
- return i.onExternalDockDrop;
530
- },
531
- onDragPreviewChange: q
534
+ onDragPreviewChange: X
532
535
  }), null), v(e, l(ie, {
533
536
  get scaleLabel() {
534
537
  return t.scaleLabel();
@@ -548,10 +551,10 @@ function Ee(i) {
548
551
  return t.contextMenu.state();
549
552
  },
550
553
  get children() {
551
- return l(G, {
554
+ return l(Z, {
552
555
  get children() {
553
556
  return [(() => {
554
- var o = fe();
557
+ var o = ke();
555
558
  return J(o, "contextmenu", t.contextMenu.retarget, !0), o;
556
559
  })(), l(oe, {
557
560
  get x() {
@@ -572,5 +575,5 @@ function Ee(i) {
572
575
  }
573
576
  Q(["contextmenu"]);
574
577
  export {
575
- Ee as WorkbenchSurface
578
+ Fe as WorkbenchSurface
576
579
  };
@@ -1,6 +1,7 @@
1
- export { WorkbenchOverlay, type WorkbenchOverlayProps, } from './WorkbenchOverlay';
1
+ export { WorkbenchOverlay, type WorkbenchOverlayProps } from './WorkbenchOverlay';
2
+ export { WorkbenchDockPopoverSurface, type WorkbenchDockPopoverSurfaceProps, } from './WorkbenchDockPopoverSurface';
2
3
  export { WorkbenchSurface, type WorkbenchSurfaceApi, type WorkbenchCreateAtOptions, type WorkbenchCreateWidgetOptions, type WorkbenchContextMenuItemsResolver, type WorkbenchSurfaceProps, } from './WorkbenchSurface';
3
- export type { WorkbenchDockAction, WorkbenchDockItemActivation, WorkbenchExternalDockDragController, WorkbenchExternalDockDragItem, WorkbenchHostDockItem, } from './WorkbenchFilterBar';
4
+ export type { WorkbenchDockAction, WorkbenchCanvasWidgetPlacement, WorkbenchDockCanvasPlacement, WorkbenchDockDropContext, WorkbenchDockItemActivation, WorkbenchExternalDockDragController, WorkbenchExternalDockDragItem, WorkbenchHostDockItem, } from './WorkbenchFilterBar';
4
5
  export { WorkbenchContextMenu, type WorkbenchContextMenuItem, type WorkbenchContextMenuProps, } from './WorkbenchContextMenu';
5
6
  export { useWorkbenchModel, type UseWorkbenchModelOptions } from './useWorkbenchModel';
6
7
  export { WIDGET_REGISTRY, createWorkbenchFilterState, getWidgetEntry, isValidWorkbenchWidgetType, resolveWorkbenchWidgetDefinitions, type WidgetRegistryEntry, } from './widgets/widgetRegistry';
@@ -8,4 +9,4 @@ export * from './types';
8
9
  export { sanitizeWorkbenchState, createDefaultWorkbenchState, createWorkbenchId, createWorkbenchProjectedRect, createWorkbenchRenderLayerMap, createWorkbenchViewportCenteredOnWidget, createWorkbenchViewportFitForWidget, createWorkbenchWidgetFrame, createWorkbenchWidgetSurfaceMetrics, resolveWorkbenchProjectedSurfaceScaleBehavior, resolveWorkbenchWidgetRenderMode, type WorkbenchRenderLayerMap, type WorkbenchWidgetFrame, type WorkbenchWidgetPlacement, } from './workbenchHelpers';
9
10
  export { WORKBENCH_BACKGROUND_MATERIALS, WORKBENCH_DEFAULT_BACKGROUND_MATERIAL, WORKBENCH_DEFAULT_REGION_FILL, WORKBENCH_DEFAULT_STICKY_NOTE_COLOR, WORKBENCH_DEFAULT_TEXT_COLOR, WORKBENCH_DEFAULT_TEXT_FONT, WORKBENCH_REGION_FILL_OPTIONS, WORKBENCH_STICKY_NOTE_COLORS, WORKBENCH_TEXT_COLOR_OPTIONS, WORKBENCH_TEXT_EMOJI_OPTIONS, WORKBENCH_TEXT_FONT_OPTIONS, } from './workbenchOptions';
10
11
  export { DEFAULT_WORKBENCH_THEME, WORKBENCH_THEME_IDS, WORKBENCH_THEMES, isWorkbenchThemeId, workbenchThemeMeta, type WorkbenchThemeId, type WorkbenchThemeMeta, type WorkbenchThemePreview, } from './workbenchThemes';
11
- export { WorkbenchThemeSelector, type WorkbenchThemeSelectorProps, } from './WorkbenchThemeSelector';
12
+ export { WorkbenchThemeSelector, type WorkbenchThemeSelectorProps } from './WorkbenchThemeSelector';