@floegence/floe-webapp-core 0.36.75 → 0.36.77

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,14 @@
1
1
  import { type JSX } from 'solid-js';
2
2
  import { type ActivityBarItem } from './ActivityBar';
3
3
  import type { SidebarVisibilityMotion } from '../../context/LayoutContext';
4
+ import { type UIFirstSelectionEvent } from '../../utils/uiFirstSelection';
5
+ export type ActivitySelectionMetadata = {
6
+ source: 'activity-bar' | 'mobile-tab-bar';
7
+ opts?: {
8
+ openSidebar?: boolean;
9
+ };
10
+ mobileSidebarOpen?: boolean;
11
+ };
4
12
  export interface ShellSlotClassNames {
5
13
  root?: string;
6
14
  topBar?: string;
@@ -36,6 +44,7 @@ export interface ShellProps {
36
44
  sidebarContent?: (activeTab: string) => JSX.Element;
37
45
  /** Defer user-requested Activity content commits until the selected control has painted. */
38
46
  activitySelectionMode?: 'sync' | 'ui-first';
47
+ onActivitySelectionEvent?: (event: UIFirstSelectionEvent<string, ActivitySelectionMetadata>) => void;
39
48
  resolveSidebarVisibilityMotion?: (args: {
40
49
  currentActiveId: string;
41
50
  nextActiveId: string;
@@ -20,7 +20,7 @@ import { resolveShellSidebarActiveTabChange as ke } from "./sidebarVisibilityMot
20
20
  import { createUIFirstSelection as xe } from "../../utils/uiFirstSelection.js";
21
21
  var U = /* @__PURE__ */ k('<div class="flex items-center gap-2">'), Te = /* @__PURE__ */ k("<div data-floe-shell-slot=mobile-sidebar-backdrop>"), pe = /* @__PURE__ */ k('<div data-floe-shell-slot=mobile-sidebar-drawer tabindex=-1 role=dialog aria-modal=true><div class="h-full overflow-auto overscroll-contain">'), Ne = /* @__PURE__ */ k("<div data-floe-shell-slot=terminal-panel style=border-top-color:var(--terminal-panel-border)>"), Le = /* @__PURE__ */ k('<div data-floe-shell><a></a><div data-floe-shell-slot=main-layout class="flex-1 min-h-0 flex overflow-hidden relative"><div data-floe-shell-slot=content-area><main data-floe-shell-slot=main tabindex=-1>');
22
22
  function Ye(r) {
23
- const i = ce(), H = be(), d = ue(H.config.layout.mobileQuery), [x, h] = Q(!1), [V, R] = Q(null);
23
+ const i = ce(), H = be(), d = ue(H.config.layout.mobileQuery), [x, h] = Q(!1), [E, R] = Q(null);
24
24
  let F;
25
25
  const b = () => r.sidebarMode === "hidden", s = (() => {
26
26
  try {
@@ -51,10 +51,12 @@ function Ye(r) {
51
51
  de(() => {
52
52
  T(e, o?.opts), typeof o?.mobileSidebarOpen == "boolean" && h(o.mobileSidebarOpen);
53
53
  });
54
- }
54
+ },
55
+ onEvent: (e) => r.onActivitySelectionEvent?.(e)
55
56
  }), N = () => r.activitySelectionMode === "ui-first" ? p.visual() : i.sidebarActiveTab(), j = (e, o) => {
56
57
  if (r.activitySelectionMode === "ui-first") {
57
58
  p.request(e, {
59
+ source: "activity-bar",
58
60
  opts: o
59
61
  });
60
62
  return;
@@ -85,7 +87,7 @@ function Ye(r) {
85
87
  return e.component;
86
88
  }
87
89
  })
88
- })) : []), E = (e) => {
90
+ })) : []), V = (e) => {
89
91
  if (!b()) {
90
92
  if (r.sidebarContent) return r.sidebarContent(e);
91
93
  if (s)
@@ -153,6 +155,7 @@ function Ye(r) {
153
155
  if (i.sidebarActiveTab() !== l) {
154
156
  if (r.activitySelectionMode === "ui-first") {
155
157
  p.request(l, {
158
+ source: "mobile-tab-bar",
156
159
  mobileSidebarOpen: n
157
160
  });
158
161
  return;
@@ -187,12 +190,12 @@ function Ye(r) {
187
190
  }
188
191
  })
189
192
  }), e] : e;
190
- }), ee = () => b() ? !0 : i.sidebarCollapsed(), te = () => V() ?? i.sidebarWidth(), v = () => H.config.accessibility, re = () => {
193
+ }), ee = () => b() ? !0 : i.sidebarCollapsed(), te = () => E() ?? i.sidebarWidth(), v = () => H.config.accessibility, re = () => {
191
194
  R(i.sidebarWidth());
192
195
  }, ie = (e) => {
193
196
  R((o) => i.clampSidebarWidth((o ?? i.sidebarWidth()) + e));
194
197
  }, ne = () => {
195
- const e = V();
198
+ const e = E();
196
199
  e !== null && (i.setSidebarWidth(e), R(null));
197
200
  };
198
201
  me({
@@ -297,7 +300,7 @@ function Ye(r) {
297
300
  return r.slotClassNames?.sidebar;
298
301
  },
299
302
  get children() {
300
- return E(i.sidebarActiveTab());
303
+ return V(i.sidebarActiveTab());
301
304
  }
302
305
  });
303
306
  }
@@ -313,7 +316,7 @@ function Ye(r) {
313
316
  return t.$$click = () => h(!1), z(() => S(t, C("absolute inset-0 z-40 bg-black/30 cursor-pointer", r.slotClassNames?.mobileSidebarBackdrop))), t;
314
317
  })(), (() => {
315
318
  var t = pe(), m = t.firstChild, g = F;
316
- return typeof g == "function" ? le(g, t) : F = t, c(m, () => E(i.sidebarActiveTab())), z((f) => {
319
+ return typeof g == "function" ? le(g, t) : F = t, c(m, () => V(i.sidebarActiveTab())), z((f) => {
317
320
  var B = C("absolute left-0 top-0 bottom-0 z-50", "w-72 max-w-[80vw]", "bg-sidebar border-r border-sidebar-border", "shadow-xl", "animate-in slide-in-from-left duration-200", r.slotClassNames?.mobileSidebarDrawer), A = v().sidebarLabel;
318
321
  return B !== f.e && S(t, f.e = B), A !== f.t && $(t, "aria-label", f.t = A), f;
319
322
  }, {
@@ -28,6 +28,7 @@ export interface WorkbenchCanvasProps {
28
28
  onCanvasContextMenu: (event: InfiniteCanvasContextMenuEvent) => void;
29
29
  onCanvasPointerDown?: (event: PointerEvent) => void;
30
30
  onSelectWidget: (widgetId: string) => void;
31
+ onActivateWidget?: (widgetId: string) => void;
31
32
  onWidgetContextMenu: (event: MouseEvent, item: WorkbenchWidgetItem) => void;
32
33
  onClaimVisualFrontOwner: (widgetId: string) => void;
33
34
  onCommitFront: (widgetId: string) => void;
@@ -1,20 +1,20 @@
1
- import { use as E, insert as w, createComponent as g, memo as y, effect as O, template as B } from "solid-js/web";
2
- import { createMemo as u, createSignal as _, Show as W, For as j } from "solid-js";
1
+ import { use as E, insert as w, createComponent as g, memo as y, effect as F, template as x } from "solid-js/web";
2
+ import { createMemo as u, createSignal as _, Show as O, For as j } from "solid-js";
3
3
  import { resolveWorkbenchInteractionAdapter as z } from "./workbenchInteractionAdapter.js";
4
4
  import { WORKBENCH_BACKGROUND_REGION_FILTER_ID as P, WORKBENCH_TEXT_FILTER_ID as q, WORKBENCH_STICKY_FILTER_ID as T } from "./types.js";
5
5
  import { WorkbenchCanvasField as U } from "./WorkbenchCanvasField.js";
6
6
  import { WorkbenchPlacementPreview as G } from "./WorkbenchPlacementPreview.js";
7
7
  import { WorkbenchBackgroundLayerView as $, WorkbenchAnnotationLayerView as K, WorkbenchLayerControlOverlayView as H, createWorkbenchTextEditorRegistry as Z, WorkbenchStickyNote as X } from "./WorkbenchLayerObjects.js";
8
8
  import { WorkbenchWidget as Y } from "./WorkbenchWidget.js";
9
- import { createWorkbenchRenderLayerMap as J, resolveWorkbenchModeStrategy as Q, resolveWorkbenchWidgetRenderMode as x } from "./workbenchHelpers.js";
9
+ import { createWorkbenchRenderLayerMap as J, resolveWorkbenchModeStrategy as Q, resolveWorkbenchWidgetRenderMode as A } from "./workbenchHelpers.js";
10
10
  import { createWorkbenchWidgetEnterMotionTracker as p } from "./workbenchMotion.js";
11
11
  import { getWidgetEntry as R } from "./widgets/widgetRegistry.js";
12
12
  import { InfiniteCanvas as ee } from "../ui/InfiniteCanvas.js";
13
- var te = /* @__PURE__ */ B("<div class=workbench-canvas><div class=workbench-canvas__atmosphere aria-hidden=true>"), ne = /* @__PURE__ */ B("<div class=workbench-canvas__projected-layer><div class=workbench-canvas__projected-work-layer>");
13
+ var te = /* @__PURE__ */ x("<div class=workbench-canvas><div class=workbench-canvas__atmosphere aria-hidden=true>"), ne = /* @__PURE__ */ x("<div class=workbench-canvas__projected-layer><div class=workbench-canvas__projected-work-layer>");
14
14
  function re(e) {
15
15
  const a = u((c) => {
16
- const v = e.widgetById().get(e.widgetId);
17
- if (v) return v;
16
+ const C = e.widgetById().get(e.widgetId);
17
+ if (C) return C;
18
18
  if (c) return c;
19
19
  throw new Error(`Workbench widget ${e.widgetId} is missing from the projected render map.`);
20
20
  }), r = u(() => R(a().type, e.widgetDefinitions));
@@ -84,6 +84,9 @@ function re(e) {
84
84
  get onSelect() {
85
85
  return e.onSelectWidget;
86
86
  },
87
+ get onActivate() {
88
+ return e.onActivateWidget;
89
+ },
87
90
  get onContextMenu() {
88
91
  return e.onWidgetContextMenu;
89
92
  },
@@ -176,7 +179,7 @@ function oe(e) {
176
179
  }
177
180
  });
178
181
  }
179
- function ve(e) {
182
+ function Ce(e) {
180
183
  const a = u(() => z(e.interactionAdapter)), r = p(() => e.widgets.map((n) => n.id)), c = u(() => {
181
184
  const n = e.widgetMotionById;
182
185
  if (!n)
@@ -187,13 +190,13 @@ function ve(e) {
187
190
  for (const [o, d] of Object.entries(n))
188
191
  d !== void 0 && (l[o] = d);
189
192
  return l;
190
- }), v = u(() => new Map(e.widgets.map((n) => [n.id, n]))), N = u(() => (e.stickyNotes ?? []).map((n) => n.id)), A = u(() => new Map((e.stickyNotes ?? []).map((n) => [n.id, n]))), b = u(() => J([...e.widgets, ...e.stickyNotes ?? []])), I = Z(), [S, f] = _(null), s = u(() => Q(e.mode)), C = u(() => s().workLayerLocked), m = u(() => s().layerEditingEnabled), D = u(() => e.widgets.filter((n) => {
193
+ }), C = u(() => new Map(e.widgets.map((n) => [n.id, n]))), B = u(() => (e.stickyNotes ?? []).map((n) => n.id)), N = u(() => new Map((e.stickyNotes ?? []).map((n) => [n.id, n]))), b = u(() => J([...e.widgets, ...e.stickyNotes ?? []])), I = Z(), [S, f] = _(null), s = u(() => Q(e.mode)), v = u(() => s().workLayerLocked), m = u(() => s().layerEditingEnabled), D = u(() => e.widgets.filter((n) => {
191
194
  const l = R(n.type, e.widgetDefinitions);
192
- return x(l) === "canvas_scaled";
195
+ return A(l) === "canvas_scaled";
193
196
  })), h = u(() => e.widgets.filter((n) => {
194
197
  const l = R(n.type, e.widgetDefinitions);
195
- return x(l) === "projected_surface";
196
- }).map((n) => n.id)), M = u(() => h().length > 0), V = u(() => M() ? [] : e.stickyNotes ?? []), F = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0, L = M;
198
+ return A(l) === "projected_surface";
199
+ }).map((n) => n.id)), M = u(() => h().length > 0), V = u(() => M() ? [] : e.stickyNotes ?? []), W = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0, L = M;
197
200
  return (() => {
198
201
  var n = te();
199
202
  n.firstChild;
@@ -233,7 +236,7 @@ function ve(e) {
233
236
  get disablePanZoom() {
234
237
  return e.locked;
235
238
  },
236
- overlay: (o) => [g(W, {
239
+ overlay: (o) => [g(O, {
237
240
  get when() {
238
241
  return L();
239
242
  },
@@ -301,7 +304,7 @@ function ve(e) {
301
304
  get canvasFrameSize() {
302
305
  return e.canvasFrameSize;
303
306
  },
304
- widgetById: v,
307
+ widgetById: C,
305
308
  renderLayers: b,
306
309
  get widgetMotionById() {
307
310
  return c();
@@ -313,7 +316,7 @@ function ve(e) {
313
316
  return e.visualFrontOwnerId;
314
317
  },
315
318
  get locked() {
316
- return e.locked || C();
319
+ return e.locked || v();
317
320
  },
318
321
  get filters() {
319
322
  return e.filters;
@@ -333,6 +336,9 @@ function ve(e) {
333
336
  get onSelectWidget() {
334
337
  return e.onSelectWidget;
335
338
  },
339
+ get onActivateWidget() {
340
+ return e.onActivateWidget;
341
+ },
336
342
  get onWidgetContextMenu() {
337
343
  return e.onWidgetContextMenu;
338
344
  },
@@ -365,16 +371,16 @@ function ve(e) {
365
371
  },
366
372
  projectedViewport: o,
367
373
  get surfaceReady() {
368
- return F();
374
+ return W();
369
375
  }
370
376
  })
371
377
  }), null), w(k, g(j, {
372
378
  get each() {
373
- return N();
379
+ return B();
374
380
  },
375
381
  children: (t) => g(oe, {
376
382
  noteId: t,
377
- stickyNoteById: A,
383
+ stickyNoteById: N,
378
384
  get selectedObject() {
379
385
  return e.selectedObject;
380
386
  },
@@ -384,10 +390,10 @@ function ve(e) {
384
390
  return e.visualFrontOwnerId;
385
391
  },
386
392
  get locked() {
387
- return e.locked || C();
393
+ return e.locked || v();
388
394
  },
389
395
  get filtered() {
390
- return y(() => !C())() && e.filters[T] === !1;
396
+ return y(() => !v())() && e.filters[T] === !1;
391
397
  },
392
398
  get onSelectStickyNote() {
393
399
  return e.onSelectStickyNote;
@@ -420,7 +426,7 @@ function ve(e) {
420
426
  return e.onLayoutInteractionEnd;
421
427
  },
422
428
  get surfaceReady() {
423
- return F();
429
+ return W();
424
430
  }
425
431
  })
426
432
  }), null), w(d, g(H, {
@@ -455,9 +461,9 @@ function ve(e) {
455
461
  onCommitBackgroundResize: (t, i) => e.onCommitBackgroundResize?.(t, i),
456
462
  onUpdateBackgroundLayer: (t, i) => e.onUpdateBackgroundLayer?.(t, i),
457
463
  onDeleteBackgroundLayer: (t) => e.onDeleteBackgroundLayer?.(t)
458
- }), null), O(() => d.classList.toggle("is-work-layer-locked", !!C())), d;
464
+ }), null), F(() => d.classList.toggle("is-work-layer-locked", !!v())), d;
459
465
  }
460
- }), g(W, {
466
+ }), g(O, {
461
467
  get when() {
462
468
  return y(() => !!L())() ? e.placementPreview : null;
463
469
  },
@@ -504,7 +510,7 @@ function ve(e) {
504
510
  return e.visualFrontOwnerId;
505
511
  },
506
512
  get workLayerLocked() {
507
- return C();
513
+ return v();
508
514
  },
509
515
  get annotationLayerEditable() {
510
516
  return m();
@@ -536,6 +542,9 @@ function ve(e) {
536
542
  get onSelectWidget() {
537
543
  return e.onSelectWidget;
538
544
  },
545
+ get onActivateWidget() {
546
+ return e.onActivateWidget;
547
+ },
539
548
  get onWidgetContextMenu() {
540
549
  return e.onWidgetContextMenu;
541
550
  },
@@ -639,7 +648,7 @@ function ve(e) {
639
648
  textEditorRegistry: I
640
649
  });
641
650
  }
642
- }), null), O((o) => {
651
+ }), null), F((o) => {
643
652
  var d = !!e.locked, k = !!m();
644
653
  return d !== o.e && n.classList.toggle("is-locked", o.e = d), k !== o.t && n.classList.toggle("is-composition-mode", o.t = k), o;
645
654
  }, {
@@ -649,5 +658,5 @@ function ve(e) {
649
658
  })();
650
659
  }
651
660
  export {
652
- ve as WorkbenchCanvas
661
+ Ce as WorkbenchCanvas
653
662
  };
@@ -24,6 +24,7 @@ export interface WorkbenchCanvasFieldProps {
24
24
  widgetMotionById?: Record<string, WorkbenchWidgetMotionIntent | null | undefined>;
25
25
  interactionAdapter?: WorkbenchInteractionAdapter | ResolvedWorkbenchInteractionAdapter;
26
26
  onSelectWidget: (widgetId: string) => void;
27
+ onActivateWidget?: (widgetId: string) => void;
27
28
  onWidgetContextMenu: (event: MouseEvent, item: WorkbenchWidgetItem) => void;
28
29
  onClaimVisualFrontOwner: (widgetId: string) => void;
29
30
  onCommitFront: (widgetId: string) => void;
@@ -1,13 +1,13 @@
1
- import { insert as l, memo as u, createComponent as c, effect as M, template as W } from "solid-js/web";
1
+ import { insert as l, memo as u, createComponent as c, effect as W, template as M } from "solid-js/web";
2
2
  import { createMemo as a, createSignal as E, For as I } from "solid-js";
3
3
  import { resolveWorkbenchInteractionAdapter as B } from "./workbenchInteractionAdapter.js";
4
- import { WORKBENCH_BACKGROUND_REGION_FILTER_ID as x, WORKBENCH_TEXT_FILTER_ID as N, WORKBENCH_STICKY_FILTER_ID as _ } from "./types.js";
5
- import { createWorkbenchRenderLayerMap as A } from "./workbenchHelpers.js";
4
+ import { WORKBENCH_BACKGROUND_REGION_FILTER_ID as x, WORKBENCH_TEXT_FILTER_ID as N, WORKBENCH_STICKY_FILTER_ID as A } from "./types.js";
5
+ import { createWorkbenchRenderLayerMap as _ } from "./workbenchHelpers.js";
6
6
  import { getWidgetEntry as D } from "./widgets/widgetRegistry.js";
7
7
  import { WorkbenchWidget as V } from "./WorkbenchWidget.js";
8
- import { WorkbenchPlacementPreview as s } from "./WorkbenchPlacementPreview.js";
9
- import { WorkbenchBackgroundLayerView as P, WorkbenchAnnotationLayerView as j, WorkbenchLayerControlOverlayView as G, createWorkbenchTextEditorRegistry as T, WorkbenchStickyNote as q } from "./WorkbenchLayerObjects.js";
10
- var z = /* @__PURE__ */ W("<div class=workbench-canvas__field><div class=workbench-canvas__grid aria-hidden=true></div><div class=workbench-work-layer>");
8
+ import { WorkbenchPlacementPreview as P } from "./WorkbenchPlacementPreview.js";
9
+ import { WorkbenchBackgroundLayerView as j, WorkbenchAnnotationLayerView as s, WorkbenchLayerControlOverlayView as G, createWorkbenchTextEditorRegistry as T, WorkbenchStickyNote as q } from "./WorkbenchLayerObjects.js";
10
+ var z = /* @__PURE__ */ M("<div class=workbench-canvas__field><div class=workbench-canvas__grid aria-hidden=true></div><div class=workbench-work-layer>");
11
11
  function U(e) {
12
12
  const d = a((i) => {
13
13
  const m = e.widgetById().get(e.widgetId);
@@ -74,6 +74,9 @@ function U(e) {
74
74
  get onSelect() {
75
75
  return e.onSelectWidget;
76
76
  },
77
+ get onActivate() {
78
+ return e.onActivateWidget;
79
+ },
77
80
  get onContextMenu() {
78
81
  return e.onWidgetContextMenu;
79
82
  },
@@ -161,7 +164,7 @@ function $(e) {
161
164
  });
162
165
  }
163
166
  function te(e) {
164
- const d = a(() => B(e.interactionAdapter)), n = a(() => e.widgets.map((r) => r.id)), i = a(() => new Map(e.widgets.map((r) => [r.id, r]))), m = a(() => (e.stickyNotes ?? []).map((r) => r.id)), f = a(() => new Map((e.stickyNotes ?? []).map((r) => [r.id, r]))), R = T(), v = a(() => e.textEditorRegistry ?? R), C = a(() => A([...e.widgets, ...e.stickyNotes ?? []])), b = a(() => e.selectedObject?.kind === "widget" ? e.selectedObject.id : e.selectedWidgetId), L = a(() => e.locked || !!e.workLayerLocked), [O, h] = E(null), y = a(() => e.layerGeometryPreview === void 0 ? O() : e.layerGeometryPreview), w = (r) => {
167
+ const d = a(() => B(e.interactionAdapter)), n = a(() => e.widgets.map((r) => r.id)), i = a(() => new Map(e.widgets.map((r) => [r.id, r]))), m = a(() => (e.stickyNotes ?? []).map((r) => r.id)), f = a(() => new Map((e.stickyNotes ?? []).map((r) => [r.id, r]))), R = T(), v = a(() => e.textEditorRegistry ?? R), C = a(() => _([...e.widgets, ...e.stickyNotes ?? []])), b = a(() => e.selectedObject?.kind === "widget" ? e.selectedObject.id : e.selectedWidgetId), L = a(() => e.locked || !!e.workLayerLocked), [O, h] = E(null), y = a(() => e.layerGeometryPreview === void 0 ? O() : e.layerGeometryPreview), w = (r) => {
165
168
  if (e.onLayerGeometryPreview) {
166
169
  e.onLayerGeometryPreview(r);
167
170
  return;
@@ -172,7 +175,7 @@ function te(e) {
172
175
  var r = z(), F = r.firstChild, k = F.nextSibling;
173
176
  return l(r, (() => {
174
177
  var g = u(() => !!S());
175
- return () => g() ? [c(P, {
178
+ return () => g() ? [c(j, {
176
179
  get items() {
177
180
  return e.backgroundLayers ?? [];
178
181
  },
@@ -195,7 +198,7 @@ function te(e) {
195
198
  onSelect: (t) => e.onSelectBackgroundLayer?.(t),
196
199
  onContextMenu: (t, o) => e.onBackgroundLayerContextMenu?.(t, o),
197
200
  onCommitMove: (t, o) => e.onCommitBackgroundMove?.(t, o)
198
- }), c(j, {
201
+ }), c(s, {
199
202
  get items() {
200
203
  return e.annotations ?? [];
201
204
  },
@@ -264,6 +267,9 @@ function te(e) {
264
267
  get onSelectWidget() {
265
268
  return e.onSelectWidget;
266
269
  },
270
+ get onActivateWidget() {
271
+ return e.onActivateWidget;
272
+ },
267
273
  get onWidgetContextMenu() {
268
274
  return e.onWidgetContextMenu;
269
275
  },
@@ -321,7 +327,7 @@ function te(e) {
321
327
  return L();
322
328
  },
323
329
  get filtered() {
324
- return u(() => !e.workLayerLocked)() && e.filters[_] === !1;
330
+ return u(() => !e.workLayerLocked)() && e.filters[A] === !1;
325
331
  },
326
332
  get onSelectStickyNote() {
327
333
  return e.onSelectStickyNote;
@@ -391,7 +397,7 @@ function te(e) {
391
397
  onUpdateBackgroundLayer: (t, o) => e.onUpdateBackgroundLayer?.(t, o),
392
398
  onDeleteBackgroundLayer: (t) => e.onDeleteBackgroundLayer?.(t)
393
399
  }) : null;
394
- })(), null), l(r, c(s, {
400
+ })(), null), l(r, c(P, {
395
401
  get preview() {
396
402
  return e.placementPreview;
397
403
  },
@@ -399,7 +405,7 @@ function te(e) {
399
405
  get viewport() {
400
406
  return e.viewport;
401
407
  }
402
- }), null), M(() => r.classList.toggle("is-work-layer-muted", !!e.workLayerLocked)), r;
408
+ }), null), W(() => r.classList.toggle("is-work-layer-muted", !!e.workLayerLocked)), r;
403
409
  })();
404
410
  }
405
411
  export {
@@ -1,3 +1,4 @@
1
+ import { type UIFirstSelectionEvent } from '../../utils/uiFirstSelection';
1
2
  import { type WorkbenchContextMenuItem } from './WorkbenchContextMenu';
2
3
  import type { WorkbenchState, WorkbenchAnnotationItem, WorkbenchBackgroundLayer, WorkbenchBackgroundLayerDefaults, WorkbenchBackgroundLayerPatch, WorkbenchContextMenuState, WorkbenchInteractionAdapter, WorkbenchStickyNoteItem, WorkbenchStickyNotePatch, WorkbenchTextAnnotationDefaults, WorkbenchTextAnnotationPatch, WorkbenchWidgetDefinition, WorkbenchWidgetItem, WorkbenchWidgetType } from './types';
3
4
  export interface WorkbenchCreateAtOptions {
@@ -67,5 +68,10 @@ export interface WorkbenchSurfaceProps {
67
68
  onRequestDelete?: (widgetId: string) => void;
68
69
  onLayoutInteractionStart?: () => void;
69
70
  onLayoutInteractionEnd?: () => void;
71
+ /** Defer pointer/focus widget activation until the visual selection has painted. */
72
+ widgetActivationMode?: 'sync' | 'after-paint';
73
+ onWidgetActivationEvent?: (event: UIFirstSelectionEvent<string | null, {
74
+ bringToFront: boolean;
75
+ }>) => void;
70
76
  }
71
77
  export declare function WorkbenchSurface(props: WorkbenchSurfaceProps): import("solid-js").JSX.Element;