@floegence/floe-webapp-core 0.55.2 → 0.56.2

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,23 +1,23 @@
1
- import { insert as l, memo as u, createComponent as c, effect as W, template as M } from "solid-js/web";
2
- import { createMemo as a, createSignal as E, For as S } from "solid-js";
1
+ import { insert as l, memo as g, createComponent as u, effect as W, template as h } from "solid-js/web";
2
+ import { createMemo as a, createSignal as M, For as S } 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 A } from "./types.js";
5
- import { createWorkbenchRenderLayerMap as _ } from "./workbenchHelpers.js";
4
+ import { WORKBENCH_BACKGROUND_REGION_FILTER_ID as E, WORKBENCH_TEXT_FILTER_ID as x, WORKBENCH_STICKY_FILTER_ID as N } from "./types.js";
5
+ import { createWorkbenchRenderLayerMap as A } 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 P } from "./WorkbenchPlacementPreview.js";
9
- import { WorkbenchBackgroundLayerView as j, WorkbenchAnnotationLayerView as G, WorkbenchLayerControlOverlayView as T, createWorkbenchTextEditorRegistry as U, WorkbenchStickyNote as q } from "./WorkbenchLayerObjects.js";
10
- var s = /* @__PURE__ */ M("<div class=workbench-canvas__field><div class=workbench-canvas__grid aria-hidden=true></div><div class=workbench-work-layer>");
8
+ import { WorkbenchPlacementPreview as _ } from "./WorkbenchPlacementPreview.js";
9
+ import { createWorkbenchTextEditorRegistry as P, WorkbenchBackgroundLayerView as j, WorkbenchAnnotationLayerView as G, WorkbenchLayerControlOverlayView as T, WorkbenchStickyNote as U } from "./WorkbenchLayerObjects.js";
10
+ var q = /* @__PURE__ */ h("<div class=workbench-canvas__field><div class=workbench-work-layer>");
11
11
  function z(e) {
12
12
  const d = a((i) => {
13
13
  const m = e.widgetById().get(e.widgetId);
14
14
  if (m) return m;
15
15
  if (i) return i;
16
16
  throw new Error(`Workbench widget ${e.widgetId} is missing from the render map.`);
17
- }), n = a(() => D(d().type, e.widgetDefinitions));
18
- return c(V, {
17
+ }), r = a(() => D(d().type, e.widgetDefinitions));
18
+ return u(V, {
19
19
  get definition() {
20
- return n();
20
+ return r();
21
21
  },
22
22
  get widgetId() {
23
23
  return e.widgetId;
@@ -63,7 +63,7 @@ function z(e) {
63
63
  return e.locked;
64
64
  },
65
65
  get filtered() {
66
- return u(() => !e.workLayerLocked)() && e.filters[d().type] === !1;
66
+ return g(() => !e.workLayerLocked)() && e.filters[d().type] === !1;
67
67
  },
68
68
  get interactionAdapter() {
69
69
  return e.interactionAdapter;
@@ -115,19 +115,19 @@ function z(e) {
115
115
  }
116
116
  });
117
117
  }
118
- function $(e) {
119
- const d = a((n) => {
118
+ function s(e) {
119
+ const d = a((r) => {
120
120
  const i = e.stickyNoteById().get(e.noteId);
121
121
  if (i) return i;
122
- if (n) return n;
122
+ if (r) return r;
123
123
  throw new Error(`Workbench sticky note ${e.noteId} is missing from the render map.`);
124
124
  });
125
- return c(q, {
125
+ return u(U, {
126
126
  get item() {
127
127
  return d();
128
128
  },
129
129
  get selected() {
130
- return u(() => e.selectedObject?.kind === "sticky_note")() && e.selectedObject.id === e.noteId;
130
+ return g(() => e.selectedObject?.kind === "sticky_note")() && e.selectedObject.id === e.noteId;
131
131
  },
132
132
  get viewportScale() {
133
133
  return e.viewportScale;
@@ -147,14 +147,14 @@ function $(e) {
147
147
  get visualFront() {
148
148
  return e.visualFrontOwnerId === e.noteId;
149
149
  },
150
- onSelect: (n) => e.onSelectStickyNote?.(n),
151
- onContextMenu: (n, i) => e.onStickyNoteContextMenu?.(n, i),
152
- onClaimVisualFrontOwner: (n) => e.onClaimStickyVisualFrontOwner?.(n),
153
- onCommitFront: (n) => e.onCommitStickyFront?.(n),
154
- onCommitMove: (n, i) => e.onCommitStickyMove?.(n, i),
155
- onCommitResize: (n, i) => e.onCommitStickyResize?.(n, i),
156
- onUpdate: (n, i) => e.onUpdateStickyNote?.(n, i),
157
- onDelete: (n) => e.onDeleteStickyNote?.(n),
150
+ onSelect: (r) => e.onSelectStickyNote?.(r),
151
+ onContextMenu: (r, i) => e.onStickyNoteContextMenu?.(r, i),
152
+ onClaimVisualFrontOwner: (r) => e.onClaimStickyVisualFrontOwner?.(r),
153
+ onCommitFront: (r) => e.onCommitStickyFront?.(r),
154
+ onCommitMove: (r, i) => e.onCommitStickyMove?.(r, i),
155
+ onCommitResize: (r, i) => e.onCommitStickyResize?.(r, i),
156
+ onUpdate: (r, i) => e.onUpdateStickyNote?.(r, i),
157
+ onDelete: (r) => e.onDeleteStickyNote?.(r),
158
158
  get onLayoutInteractionStart() {
159
159
  return e.onLayoutInteractionStart;
160
160
  },
@@ -163,23 +163,23 @@ function $(e) {
163
163
  }
164
164
  });
165
165
  }
166
- function te(e) {
167
- const d = a(() => B(e.interactionAdapter)), n = a(() => e.widgets.map((o) => o.id)), i = a(() => new Map(e.widgets.map((o) => [o.id, o]))), m = a(() => (e.stickyNotes ?? []).map((o) => o.id)), I = a(() => new Map((e.stickyNotes ?? []).map((o) => [o.id, o]))), f = U(), y = a(() => e.textEditorRegistry ?? f), C = a(() => _([...e.widgets, ...e.stickyNotes ?? []])), R = a(() => e.selectedObject?.kind === "widget" ? e.selectedObject.id : e.selectedWidgetId), b = a(() => e.locked || !!e.workLayerLocked), [O, h] = E(null), w = a(() => e.layerGeometryPreview === void 0 ? O() : e.layerGeometryPreview), k = (o) => {
166
+ function ee(e) {
167
+ const d = a(() => B(e.interactionAdapter)), r = a(() => e.widgets.map((o) => o.id)), i = a(() => new Map(e.widgets.map((o) => [o.id, o]))), m = a(() => (e.stickyNotes ?? []).map((o) => o.id)), f = a(() => new Map((e.stickyNotes ?? []).map((o) => [o.id, o]))), R = P(), w = a(() => e.textEditorRegistry ?? R), L = a(() => A([...e.widgets, ...e.stickyNotes ?? []])), b = a(() => e.selectedObject?.kind === "widget" ? e.selectedObject.id : e.selectedWidgetId), C = a(() => e.locked || !!e.workLayerLocked), [O, F] = M(null), k = a(() => e.layerGeometryPreview === void 0 ? O() : e.layerGeometryPreview), v = (o) => {
168
168
  if (e.onLayerGeometryPreview) {
169
169
  e.onLayerGeometryPreview(o);
170
170
  return;
171
171
  }
172
- h(o);
173
- }, L = a(() => e.renderFreeformLayers !== !1);
172
+ F(o);
173
+ }, I = a(() => e.renderFreeformLayers !== !1);
174
174
  return (() => {
175
- var o = s(), F = o.firstChild, v = F.nextSibling;
175
+ var o = q(), y = o.firstChild;
176
176
  return l(o, (() => {
177
- var g = u(() => !!L());
178
- return () => g() ? [c(j, {
177
+ var c = g(() => !!I());
178
+ return () => c() ? [u(j, {
179
179
  get textEditorRegistry() {
180
- return y();
180
+ return w();
181
181
  },
182
- onUpdate: (t, r) => e.onUpdateBackgroundLayer?.(t, r),
182
+ onUpdate: (t, n) => e.onUpdateBackgroundLayer?.(t, n),
183
183
  get items() {
184
184
  return e.backgroundLayers ?? [];
185
185
  },
@@ -187,22 +187,22 @@ function te(e) {
187
187
  return e.selectedObject ?? null;
188
188
  },
189
189
  get editable() {
190
- return u(() => !!e.backgroundLayerEditable)() && !e.locked;
190
+ return g(() => !!e.backgroundLayerEditable)() && !e.locked;
191
191
  },
192
192
  get filtered() {
193
- return e.filters[x] === !1;
193
+ return e.filters[E] === !1;
194
194
  },
195
195
  get preview() {
196
- return w();
196
+ return k();
197
197
  },
198
- onPreviewGeometry: k,
198
+ onPreviewGeometry: v,
199
199
  get viewport() {
200
200
  return e.viewport;
201
201
  },
202
202
  onSelect: (t) => e.onSelectBackgroundLayer?.(t),
203
- onContextMenu: (t, r) => e.onBackgroundLayerContextMenu?.(t, r),
204
- onCommitMove: (t, r) => e.onCommitBackgroundMove?.(t, r)
205
- }), c(G, {
203
+ onContextMenu: (t, n) => e.onBackgroundLayerContextMenu?.(t, n),
204
+ onCommitMove: (t, n) => e.onCommitBackgroundMove?.(t, n)
205
+ }), u(G, {
206
206
  get items() {
207
207
  return e.annotations ?? [];
208
208
  },
@@ -210,32 +210,32 @@ function te(e) {
210
210
  return e.selectedObject ?? null;
211
211
  },
212
212
  get editable() {
213
- return u(() => !!e.annotationLayerEditable)() && !e.locked;
213
+ return g(() => !!e.annotationLayerEditable)() && !e.locked;
214
214
  },
215
215
  get filtered() {
216
- return e.filters[N] === !1;
216
+ return e.filters[x] === !1;
217
217
  },
218
218
  get preview() {
219
- return w();
219
+ return k();
220
220
  },
221
- onPreviewGeometry: k,
221
+ onPreviewGeometry: v,
222
222
  get textEditorRegistry() {
223
- return y();
223
+ return w();
224
224
  },
225
225
  get viewport() {
226
226
  return e.viewport;
227
227
  },
228
228
  onSelect: (t) => e.onSelectAnnotation?.(t),
229
- onContextMenu: (t, r) => e.onAnnotationContextMenu?.(t, r),
230
- onCommitMove: (t, r) => e.onCommitAnnotationMove?.(t, r),
231
- onUpdate: (t, r) => e.onUpdateTextAnnotation?.(t, r)
229
+ onContextMenu: (t, n) => e.onAnnotationContextMenu?.(t, n),
230
+ onCommitMove: (t, n) => e.onCommitAnnotationMove?.(t, n),
231
+ onUpdate: (t, n) => e.onUpdateTextAnnotation?.(t, n)
232
232
  })] : null;
233
- })(), v), l(v, c(S, {
233
+ })(), y), l(y, u(S, {
234
234
  get each() {
235
- return n();
235
+ return r();
236
236
  },
237
- children: (g) => c(z, {
238
- widgetId: g,
237
+ children: (c) => u(z, {
238
+ widgetId: c,
239
239
  get widgetDefinitions() {
240
240
  return e.widgetDefinitions;
241
241
  },
@@ -243,12 +243,12 @@ function te(e) {
243
243
  return e.widgets;
244
244
  },
245
245
  widgetById: i,
246
- renderLayers: C,
246
+ renderLayers: L,
247
247
  get viewport() {
248
248
  return e.viewport;
249
249
  },
250
250
  get selectedWidgetId() {
251
- return R();
251
+ return b();
252
252
  },
253
253
  get visualFrontOwnerId() {
254
254
  return e.visualFrontOwnerId;
@@ -257,7 +257,7 @@ function te(e) {
257
257
  return e.viewportScale;
258
258
  },
259
259
  get locked() {
260
- return b();
260
+ return C();
261
261
  },
262
262
  get filters() {
263
263
  return e.filters;
@@ -311,13 +311,13 @@ function te(e) {
311
311
  return e.onLayoutInteractionEnd;
312
312
  }
313
313
  })
314
- }), null), l(v, c(S, {
314
+ }), null), l(y, u(S, {
315
315
  get each() {
316
316
  return m();
317
317
  },
318
- children: (g) => c($, {
319
- noteId: g,
320
- stickyNoteById: I,
318
+ children: (c) => u(s, {
319
+ noteId: c,
320
+ stickyNoteById: f,
321
321
  get selectedObject() {
322
322
  return e.selectedObject;
323
323
  },
@@ -328,10 +328,10 @@ function te(e) {
328
328
  return e.viewportScale;
329
329
  },
330
330
  get locked() {
331
- return e.locked;
331
+ return C();
332
332
  },
333
333
  get filtered() {
334
- return u(() => !e.workLayerLocked)() && e.filters[A] === !1;
334
+ return g(() => !e.workLayerLocked)() && e.filters[N] === !1;
335
335
  },
336
336
  get onSelectStickyNote() {
337
337
  return e.onSelectStickyNote;
@@ -363,11 +363,11 @@ function te(e) {
363
363
  get onLayoutInteractionEnd() {
364
364
  return e.onLayoutInteractionEnd;
365
365
  },
366
- renderLayers: C
366
+ renderLayers: L
367
367
  })
368
368
  }), null), l(o, (() => {
369
- var g = u(() => !!L());
370
- return () => g() ? c(T, {
369
+ var c = g(() => !!I());
370
+ return () => c() ? u(T, {
371
371
  get annotations() {
372
372
  return e.annotations ?? [];
373
373
  },
@@ -378,7 +378,7 @@ function te(e) {
378
378
  return e.selectedObject ?? null;
379
379
  },
380
380
  get editable() {
381
- return u(() => !!(e.annotationLayerEditable || e.backgroundLayerEditable))() && !e.locked;
381
+ return g(() => !!(e.annotationLayerEditable || e.backgroundLayerEditable))() && !e.locked;
382
382
  },
383
383
  get showRegionOutlines() {
384
384
  return !!e.showRegionOutlines;
@@ -387,21 +387,21 @@ function te(e) {
387
387
  return e.viewport;
388
388
  },
389
389
  get preview() {
390
- return w();
390
+ return k();
391
391
  },
392
- onPreviewGeometry: k,
392
+ onPreviewGeometry: v,
393
393
  get textEditorRegistry() {
394
- return y();
394
+ return w();
395
395
  },
396
- onCommitAnnotationMove: (t, r) => e.onCommitAnnotationMove?.(t, r),
397
- onCommitAnnotationResize: (t, r) => e.onCommitAnnotationResize?.(t, r),
398
- onUpdateTextAnnotation: (t, r) => e.onUpdateTextAnnotation?.(t, r),
396
+ onCommitAnnotationMove: (t, n) => e.onCommitAnnotationMove?.(t, n),
397
+ onCommitAnnotationResize: (t, n) => e.onCommitAnnotationResize?.(t, n),
398
+ onUpdateTextAnnotation: (t, n) => e.onUpdateTextAnnotation?.(t, n),
399
399
  onDeleteAnnotation: (t) => e.onDeleteAnnotation?.(t),
400
- onCommitBackgroundResize: (t, r) => e.onCommitBackgroundResize?.(t, r),
401
- onUpdateBackgroundLayer: (t, r) => e.onUpdateBackgroundLayer?.(t, r),
400
+ onCommitBackgroundResize: (t, n) => e.onCommitBackgroundResize?.(t, n),
401
+ onUpdateBackgroundLayer: (t, n) => e.onUpdateBackgroundLayer?.(t, n),
402
402
  onDeleteBackgroundLayer: (t) => e.onDeleteBackgroundLayer?.(t)
403
403
  }) : null;
404
- })(), null), l(o, c(P, {
404
+ })(), null), l(o, u(_, {
405
405
  get preview() {
406
406
  return e.placementPreview;
407
407
  },
@@ -409,9 +409,15 @@ function te(e) {
409
409
  get viewport() {
410
410
  return e.viewport;
411
411
  }
412
- }), null), W(() => o.classList.toggle("is-work-layer-muted", !!e.workLayerLocked)), o;
412
+ }), null), W((c) => {
413
+ var t = !!e.workLayerLocked, n = !!e.workLayerLocked;
414
+ return t !== c.e && o.classList.toggle("is-work-layer-muted", c.e = t), n !== c.t && (y.inert = c.t = n), c;
415
+ }, {
416
+ e: void 0,
417
+ t: void 0
418
+ }), o;
413
419
  })();
414
420
  }
415
421
  export {
416
- te as WorkbenchCanvasField
422
+ ee as WorkbenchCanvasField
417
423
  };
@@ -0,0 +1,22 @@
1
+ import { type JSX } from 'solid-js';
2
+ import { type WorkbenchCompositionMessageKey } from './workbenchCompositionMessages';
3
+ export declare function CompositionIcon(props: {
4
+ name: 'emoji' | 'text' | 'left' | 'center' | 'copy' | 'trash';
5
+ }): JSX.Element;
6
+ export declare function CompositionDivider(): JSX.Element;
7
+ /** Object tools keep their anchor when a material or emoji menu opens. */
8
+ export declare function CompositionToolbar(props: {
9
+ kind: 'sticky' | 'region' | 'text';
10
+ children?: JSX.Element;
11
+ actions?: JSX.Element;
12
+ palette?: JSX.Element;
13
+ onInsertEmoji?: (emoji: string) => void;
14
+ materials?: readonly WorkbenchCompositionMessageKey[];
15
+ material?: WorkbenchCompositionMessageKey;
16
+ preview?: (material: WorkbenchCompositionMessageKey) => JSX.Element;
17
+ onMaterial?: (material: WorkbenchCompositionMessageKey) => void;
18
+ materialLabel?: (material: WorkbenchCompositionMessageKey) => string;
19
+ more?: (closeMenu: () => void) => JSX.Element;
20
+ onMoreClose?: () => void;
21
+ moreOpen?: boolean;
22
+ }): JSX.Element;
@@ -0,0 +1,261 @@
1
+ import { spread as H, mergeProps as N, insert as s, createComponent as d, use as L, setAttribute as m, effect as p, setStyleProperty as C, memo as F, template as h, delegateEvents as U } from "solid-js/web";
2
+ import { createSignal as A, createUniqueId as z, createEffect as T, onCleanup as I, Show as b, For as R } from "solid-js";
3
+ import { Check as K, ChevronDown as W } from "../icons/index.js";
4
+ import { WORKBENCH_TEXT_EMOJI_OPTIONS as V } from "./workbenchOptions.js";
5
+ import { resolveFloatingBoundary as J } from "../ui/surfaceFloatingBoundary.js";
6
+ import { LOCAL_INTERACTION_SURFACE_ATTR as X } from "../ui/localInteractionSurface.js";
7
+ import { useWorkbenchCompositionText as G } from "./workbenchCompositionMessages.js";
8
+ import { resolveSurfacePortalHost as Q } from "../ui/dialogSurfaceScope.js";
9
+ var Y = /* @__PURE__ */ h("<svg><circle cx=12 cy=12 r=9></svg>", !1, !0, !1), Z = /* @__PURE__ */ h("<svg><rect x=8 y=8 width=12 height=12 rx=2></svg>", !1, !0, !1), ee = /* @__PURE__ */ h('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=1.65 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path>'), te = /* @__PURE__ */ h("<span class=workbench-composition-divider aria-hidden=true>"), re = /* @__PURE__ */ h('<div class="workbench-menu-options workbench-treatment-options"role=group>'), ne = /* @__PURE__ */ h("<div class=workbench-material-settings>"), oe = /* @__PURE__ */ h("<div class=workbench-emoji-heading>"), ie = /* @__PURE__ */ h('<div class="workbench-menu-options workbench-emoji-options"role=menu>'), ae = /* @__PURE__ */ h("<div class=workbench-composition-menu>"), le = /* @__PURE__ */ h("<div class=workbench-composition-more>"), ce = /* @__PURE__ */ h("<button type=button class=workbench-treatment-trigger><span>"), se = /* @__PURE__ */ h("<button type=button class=workbench-emoji-trigger aria-haspopup=menu>"), ue = /* @__PURE__ */ h("<div><div class=workbench-toolbar-main>"), me = /* @__PURE__ */ h("<button type=button><span class=workbench-treatment-label>"), de = /* @__PURE__ */ h("<button type=button role=menuitem class=workbench-emoji-option>");
10
+ function he(n) {
11
+ const g = {
12
+ emoji: "M8 14s1.5 2 4 2 4-2 4-2M8 9h.01M16 9h.01",
13
+ copy: "M16 8V4H4v12h4",
14
+ trash: "M3 6h18M9 6V3h6v3M5 6l1 15h12l1-15M10 10v7m4-7v7",
15
+ text: "M4 5h16M12 5v15M8 20h8M4 5v3m16-3v3",
16
+ left: "M4 5h16M4 10h11M4 15h16M4 20h11",
17
+ center: "M4 5h16M7 10h10M4 15h16M7 20h10"
18
+ };
19
+ return (() => {
20
+ var o = ee(), v = o.firstChild;
21
+ return s(o, d(b, {
22
+ get when() {
23
+ return n.name === "emoji";
24
+ },
25
+ get children() {
26
+ return Y();
27
+ }
28
+ }), v), s(o, d(b, {
29
+ get when() {
30
+ return n.name === "copy";
31
+ },
32
+ get children() {
33
+ return Z();
34
+ }
35
+ }), v), p(() => m(v, "d", g[n.name])), o;
36
+ })();
37
+ }
38
+ function q() {
39
+ return te();
40
+ }
41
+ function ye(n) {
42
+ const g = G(), [o, v] = A(null), [_, B] = A(), [j, O] = A(), E = z();
43
+ let f, M = !1;
44
+ const $ = () => {
45
+ v(null), n.onMoreClose?.();
46
+ }, x = (i) => f?.querySelector(i === "emoji" ? ".workbench-emoji-trigger" : ".workbench-treatment-trigger"), S = (i) => (i.querySelector('button[aria-pressed="true"]') ?? i.querySelector(".workbench-menu-options > button"))?.focus({
47
+ preventScroll: !0
48
+ }), P = (i, a) => {
49
+ i.key === "ArrowDown" && (i.preventDefault(), i.stopPropagation(), o() === a && _() ? S(_()) : (M = !0, v(a)));
50
+ };
51
+ return T(() => {
52
+ const i = _();
53
+ if (!o() || !i || !f) {
54
+ O(void 0);
55
+ return;
56
+ }
57
+ const a = J(Q({
58
+ owner: f
59
+ })), k = x(o());
60
+ if (!a || !k) return;
61
+ const t = k.getBoundingClientRect(), e = f.getBoundingClientRect();
62
+ i.style.maxHeight = `${Math.max(0, a.bottom - a.top - 24)}px`;
63
+ const r = i.getBoundingClientRect(), u = t.top - r.height - 10, l = Math.max(a.top + 12, u >= a.top + 12 ? u : Math.min(t.bottom + 10, a.bottom - r.height - 12)), c = Math.max(a.left + 12, Math.min(t.left, a.right - r.width - 12));
64
+ O({
65
+ x: c - e.left,
66
+ y: l - e.top
67
+ }), M && (M = !1, queueMicrotask(() => {
68
+ i.isConnected && S(i);
69
+ }));
70
+ }), T(() => {
71
+ if (!o() && !n.moreOpen) return;
72
+ const i = (a) => {
73
+ a.target instanceof Node && !f?.contains(a.target) && $();
74
+ };
75
+ if (document.addEventListener("pointerdown", i, !0), I(() => document.removeEventListener("pointerdown", i, !0)), o()) {
76
+ const a = (k) => {
77
+ k.target instanceof Node && !f?.contains(k.target) && $();
78
+ };
79
+ window.addEventListener("resize", $), document.addEventListener("wheel", a, {
80
+ capture: !0,
81
+ passive: !0
82
+ }), I(() => {
83
+ window.removeEventListener("resize", $), document.removeEventListener("wheel", a, !0);
84
+ });
85
+ }
86
+ }), (() => {
87
+ var i = ue(), a = i.firstChild, k = f;
88
+ return typeof k == "function" ? L(k, i) : f = i, H(i, N({
89
+ get class() {
90
+ return `workbench-composition-toolbar workbench-${n.kind === "sticky" ? "sticky__actions" : n.kind === "region" ? "background-region__toolbar" : "text-annotation__toolbar"}`;
91
+ },
92
+ get "data-kind"() {
93
+ return n.kind;
94
+ }
95
+ }, {
96
+ [X]: "true"
97
+ }, {
98
+ role: "toolbar",
99
+ get "aria-label"() {
100
+ return g("treatment");
101
+ },
102
+ onPointerDown: (t) => t.stopPropagation(),
103
+ onClick: (t) => t.stopPropagation(),
104
+ onKeyDown: (t) => {
105
+ if (t.key === "Escape" && (o() || n.moreOpen)) {
106
+ t.stopPropagation();
107
+ const e = x(o());
108
+ $(), e?.focus({
109
+ preventScroll: !0
110
+ });
111
+ }
112
+ }
113
+ }), !1, !0), s(i, d(b, {
114
+ get when() {
115
+ return o();
116
+ },
117
+ get children() {
118
+ var t = ae();
119
+ return t.$$keydown = (e) => {
120
+ if (e.key === "Tab" && o() === "emoji") {
121
+ const w = x(o());
122
+ v(null), w?.focus({
123
+ preventScroll: !0
124
+ });
125
+ return;
126
+ }
127
+ if (!["ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight", "Home", "End"].includes(e.key) || !(e.target instanceof Element) || !e.target.closest(".workbench-menu-options")) return;
128
+ e.preventDefault(), e.stopPropagation();
129
+ const r = Array.from(e.currentTarget.querySelectorAll(".workbench-menu-options > button")), u = r.indexOf(document.activeElement), l = o() === "emoji" && (e.key === "ArrowUp" || e.key === "ArrowDown") ? 6 : 1, c = e.key === "Home" ? 0 : e.key === "End" ? r.length - 1 : (u + (e.key === "ArrowUp" || e.key === "ArrowLeft" ? -l : l) + r.length) % r.length;
130
+ r[c]?.focus({
131
+ preventScroll: !0
132
+ });
133
+ }, L(B, t), m(t, "id", E), s(t, d(b, {
134
+ get when() {
135
+ return o() === "material";
136
+ },
137
+ get children() {
138
+ return [(() => {
139
+ var e = re();
140
+ return s(e, d(R, {
141
+ get each() {
142
+ return n.materials;
143
+ },
144
+ children: (r) => (() => {
145
+ var u = me(), l = u.firstChild;
146
+ return u.$$click = () => {
147
+ n.onMaterial?.(r), v(null), f?.querySelector(".workbench-treatment-trigger")?.focus({
148
+ preventScroll: !0
149
+ });
150
+ }, u.$$pointerdown = (c) => c.preventDefault(), s(u, () => n.preview?.(r), l), s(l, () => g(r), null), s(l, d(K, {}), null), p((c) => {
151
+ var w = n.materialLabel?.(r), y = n.material === r;
152
+ return w !== c.e && m(u, "aria-label", c.e = w), y !== c.t && m(u, "aria-pressed", c.t = y), c;
153
+ }, {
154
+ e: void 0,
155
+ t: void 0
156
+ }), u;
157
+ })()
158
+ })), p(() => m(e, "aria-label", g(n.kind === "region" ? "regionMaterial" : "stickyMaterial"))), e;
159
+ })(), d(b, {
160
+ get when() {
161
+ return n.more;
162
+ },
163
+ get children() {
164
+ var e = ne();
165
+ return s(e, () => n.more?.($)), e;
166
+ }
167
+ })];
168
+ }
169
+ }), null), s(t, d(b, {
170
+ get when() {
171
+ return o() === "emoji";
172
+ },
173
+ get children() {
174
+ return [(() => {
175
+ var e = oe();
176
+ return s(e, () => g("emoji")), e;
177
+ })(), (() => {
178
+ var e = ie();
179
+ return s(e, d(R, {
180
+ each: V,
181
+ children: (r, u) => (() => {
182
+ var l = de();
183
+ return l.$$click = () => {
184
+ v(null), n.onInsertEmoji?.(r);
185
+ }, l.$$pointerdown = (c) => c.preventDefault(), s(l, r), p((c) => {
186
+ var w = u() === 0 ? 0 : -1, y = g("useEmoji", r), D = g("useEmoji", r);
187
+ return w !== c.e && m(l, "tabindex", c.e = w), y !== c.t && m(l, "aria-label", c.t = y), D !== c.a && m(l, "title", c.a = D), c;
188
+ }, {
189
+ e: void 0,
190
+ t: void 0,
191
+ a: void 0
192
+ }), l;
193
+ })()
194
+ })), p(() => m(e, "aria-label", g("emoji"))), e;
195
+ })()];
196
+ }
197
+ }), null), p((e) => {
198
+ var r = o() === "material", u = o() === "emoji", l = `${j()?.x ?? 0}px`, c = `${j()?.y ?? 0}px`, w = j() ? "visible" : "hidden";
199
+ return r !== e.e && t.classList.toggle("workbench-treatment-panel", e.e = r), u !== e.t && t.classList.toggle("workbench-emoji-panel", e.t = u), l !== e.a && C(t, "left", e.a = l), c !== e.o && C(t, "top", e.o = c), w !== e.i && C(t, "visibility", e.i = w), e;
200
+ }, {
201
+ e: void 0,
202
+ t: void 0,
203
+ a: void 0,
204
+ o: void 0,
205
+ i: void 0
206
+ }), t;
207
+ }
208
+ }), a), s(i, d(b, {
209
+ get when() {
210
+ return F(() => !n.materials)() && n.moreOpen;
211
+ },
212
+ get children() {
213
+ var t = le();
214
+ return s(t, () => n.more?.($)), t;
215
+ }
216
+ }), a), s(a, () => n.palette, null), s(a, d(b, {
217
+ get when() {
218
+ return n.material;
219
+ },
220
+ get children() {
221
+ return [d(q, {}), (() => {
222
+ var t = ce(), e = t.firstChild;
223
+ return t.$$click = () => {
224
+ v(o() === "material" ? null : "material");
225
+ }, t.$$pointerdown = (r) => r.preventDefault(), t.$$keydown = (r) => P(r, "material"), m(t, "aria-controls", E), s(t, () => n.preview?.(n.material), e), s(e, () => g(n.material)), s(t, d(W, {}), null), p((r) => {
226
+ var u = g("treatment"), l = o() === "material";
227
+ return u !== r.e && m(t, "aria-label", r.e = u), l !== r.t && m(t, "aria-expanded", r.t = l), r;
228
+ }, {
229
+ e: void 0,
230
+ t: void 0
231
+ }), t;
232
+ })(), d(q, {})];
233
+ }
234
+ }), null), s(a, () => n.children, null), s(a, d(b, {
235
+ get when() {
236
+ return n.onInsertEmoji;
237
+ },
238
+ get children() {
239
+ var t = se();
240
+ return t.$$click = () => {
241
+ M = o() !== "emoji", v(o() === "emoji" ? null : "emoji");
242
+ }, t.$$keydown = (e) => P(e, "emoji"), t.$$pointerdown = (e) => e.preventDefault(), m(t, "aria-controls", E), s(t, d(he, {
243
+ name: "emoji"
244
+ })), p((e) => {
245
+ var r = g("insertEmoji"), u = g("insertEmoji"), l = o() === "emoji";
246
+ return r !== e.e && m(t, "aria-label", e.e = r), u !== e.t && m(t, "title", e.t = u), l !== e.a && m(t, "aria-expanded", e.a = l), e;
247
+ }, {
248
+ e: void 0,
249
+ t: void 0,
250
+ a: void 0
251
+ }), t;
252
+ }
253
+ }), null), s(a, () => n.actions, null), i;
254
+ })();
255
+ }
256
+ U(["keydown", "pointerdown", "click"]);
257
+ export {
258
+ q as CompositionDivider,
259
+ he as CompositionIcon,
260
+ ye as CompositionToolbar
261
+ };
@@ -11,6 +11,8 @@ export type WorkbenchLayerGeometryPreview = {
11
11
  export type WorkbenchLayerProjectionMode = 'world' | 'screen';
12
12
  export interface WorkbenchTextEditorHandle {
13
13
  focus: () => void;
14
+ blur: () => void;
15
+ isFocused: Accessor<boolean>;
14
16
  insertTextAtSelection: (text: string) => void;
15
17
  readText: () => string;
16
18
  }
@@ -42,7 +44,7 @@ export declare function WorkbenchStickyNote(props: {
42
44
  width: number;
43
45
  height: number;
44
46
  }) => void;
45
- onUpdate: (noteId: string, patch: Partial<Pick<WorkbenchStickyNoteItem, 'body' | 'color' | 'material'>>) => void;
47
+ onUpdate: (noteId: string, patch: Partial<Pick<WorkbenchStickyNoteItem, 'title' | 'body' | 'color' | 'material'>>) => void;
46
48
  onDelete: (noteId: string) => void;
47
49
  onLayoutInteractionStart?: () => void;
48
50
  onLayoutInteractionEnd?: () => void;