@floegence/floe-webapp-core 0.36.42 → 0.36.43

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/icons/index.d.ts +2 -0
  2. package/dist/components/icons/index.js +419 -397
  3. package/dist/components/workbench/WorkbenchCanvas.d.ts +45 -2
  4. package/dist/components/workbench/WorkbenchCanvas.js +265 -66
  5. package/dist/components/workbench/WorkbenchCanvasField.d.ts +47 -2
  6. package/dist/components/workbench/WorkbenchCanvasField.js +258 -78
  7. package/dist/components/workbench/WorkbenchFilterBar.d.ts +9 -7
  8. package/dist/components/workbench/WorkbenchFilterBar.js +233 -145
  9. package/dist/components/workbench/WorkbenchLayerObjects.d.ts +136 -0
  10. package/dist/components/workbench/WorkbenchLayerObjects.js +986 -0
  11. package/dist/components/workbench/WorkbenchOverlay.d.ts +4 -1
  12. package/dist/components/workbench/WorkbenchOverlay.js +59 -29
  13. package/dist/components/workbench/WorkbenchSurface.d.ts +23 -11
  14. package/dist/components/workbench/WorkbenchSurface.js +315 -195
  15. package/dist/components/workbench/WorkbenchWidget.js +37 -37
  16. package/dist/components/workbench/index.d.ts +2 -1
  17. package/dist/components/workbench/types.d.ts +96 -1
  18. package/dist/components/workbench/types.js +12 -4
  19. package/dist/components/workbench/useWorkbenchModel.d.ts +62 -4
  20. package/dist/components/workbench/useWorkbenchModel.js +790 -253
  21. package/dist/components/workbench/widgets/widgetRegistry.d.ts +1 -1
  22. package/dist/components/workbench/workbenchHelpers.d.ts +5 -5
  23. package/dist/components/workbench/workbenchHelpers.js +345 -154
  24. package/dist/components/workbench/workbenchOptions.d.ts +43 -0
  25. package/dist/components/workbench/workbenchOptions.js +112 -0
  26. package/dist/full.js +620 -618
  27. package/dist/icons.js +71 -69
  28. package/dist/styles.css +1 -1
  29. package/dist/workbench.css +1117 -26
  30. package/dist/workbench.js +52 -36
  31. package/package.json +1 -1
@@ -1,18 +1,23 @@
1
1
  import { type InfiniteCanvasContextMenuEvent } from '../../ui';
2
2
  import { type ResolvedWorkbenchInteractionAdapter } from './workbenchInteractionAdapter';
3
- import type { WorkbenchInteractionAdapter, WorkbenchViewport, WorkbenchWidgetDefinition, WorkbenchWidgetItem, WorkbenchWidgetType } from './types';
3
+ import { type WorkbenchAnnotationItem, type WorkbenchBackgroundLayer, type WorkbenchInteractionMode, type WorkbenchInteractionAdapter, type WorkbenchSelection, type WorkbenchStickyNoteItem, type WorkbenchTextAnnotationPatch, type WorkbenchViewport, type WorkbenchWidgetDefinition, type WorkbenchWidgetItem } from './types';
4
4
  export interface WorkbenchCanvasProps {
5
5
  widgetDefinitions: readonly WorkbenchWidgetDefinition[];
6
6
  widgets: readonly WorkbenchWidgetItem[];
7
+ stickyNotes?: readonly WorkbenchStickyNoteItem[];
8
+ annotations?: readonly WorkbenchAnnotationItem[];
9
+ backgroundLayers?: readonly WorkbenchBackgroundLayer[];
7
10
  viewport: WorkbenchViewport;
8
11
  canvasFrameSize: {
9
12
  width: number;
10
13
  height: number;
11
14
  };
12
15
  selectedWidgetId: string | null;
16
+ selectedObject?: WorkbenchSelection | null;
17
+ mode?: WorkbenchInteractionMode;
13
18
  optimisticFrontWidgetId: string | null;
14
19
  locked: boolean;
15
- filters: Record<WorkbenchWidgetType, boolean>;
20
+ filters: Record<string, boolean>;
16
21
  interactionAdapter?: WorkbenchInteractionAdapter | ResolvedWorkbenchInteractionAdapter;
17
22
  setCanvasFrameRef: (el: HTMLDivElement | undefined) => void;
18
23
  onViewportCommit: (viewport: WorkbenchViewport) => void;
@@ -31,6 +36,44 @@ export interface WorkbenchCanvasProps {
31
36
  width: number;
32
37
  height: number;
33
38
  }) => void;
39
+ onSelectStickyNote?: (noteId: string) => void;
40
+ onStickyNoteContextMenu?: (event: MouseEvent, item: WorkbenchStickyNoteItem) => void;
41
+ onStartStickyOptimisticFront?: (noteId: string) => void;
42
+ onCommitStickyFront?: (noteId: string) => void;
43
+ onCommitStickyMove?: (noteId: string, position: {
44
+ x: number;
45
+ y: number;
46
+ }) => void;
47
+ onCommitStickyResize?: (noteId: string, size: {
48
+ width: number;
49
+ height: number;
50
+ }) => void;
51
+ onUpdateStickyNote?: (noteId: string, patch: Partial<Pick<WorkbenchStickyNoteItem, 'body' | 'color'>>) => void;
52
+ onDeleteStickyNote?: (noteId: string) => void;
53
+ onSelectAnnotation?: (annotationId: string) => void;
54
+ onAnnotationContextMenu?: (event: MouseEvent, item: WorkbenchAnnotationItem) => void;
55
+ onCommitAnnotationMove?: (annotationId: string, position: {
56
+ x: number;
57
+ y: number;
58
+ }) => void;
59
+ onCommitAnnotationResize?: (annotationId: string, size: {
60
+ width: number;
61
+ height: number;
62
+ }) => void;
63
+ onUpdateTextAnnotation?: (annotationId: string, patch: WorkbenchTextAnnotationPatch) => void;
64
+ onDeleteAnnotation?: (annotationId: string) => void;
65
+ onSelectBackgroundLayer?: (layerId: string) => void;
66
+ onBackgroundLayerContextMenu?: (event: MouseEvent, item: WorkbenchBackgroundLayer) => void;
67
+ onCommitBackgroundMove?: (layerId: string, position: {
68
+ x: number;
69
+ y: number;
70
+ }) => void;
71
+ onCommitBackgroundResize?: (layerId: string, size: {
72
+ width: number;
73
+ height: number;
74
+ }) => void;
75
+ onUpdateBackgroundLayer?: (layerId: string, patch: Partial<Pick<WorkbenchBackgroundLayer, 'fill' | 'opacity' | 'material' | 'name'>>) => void;
76
+ onDeleteBackgroundLayer?: (layerId: string) => void;
34
77
  onRequestOverview: (item: WorkbenchWidgetItem) => void;
35
78
  onRequestFit: (item: WorkbenchWidgetItem) => void;
36
79
  onRequestDelete: (widgetId: string) => void;
@@ -1,48 +1,50 @@
1
- import { use as I, insert as w, createComponent as a, effect as S, template as f } from "solid-js/web";
2
- import { createMemo as i, Show as h, For as R } from "solid-js";
3
- import { resolveWorkbenchInteractionAdapter as W } from "./workbenchInteractionAdapter.js";
4
- import { WorkbenchCanvasField as y } from "./WorkbenchCanvasField.js";
5
- import { WorkbenchWidget as F } from "./WorkbenchWidget.js";
6
- import { createWorkbenchRenderLayerMap as k, resolveWorkbenchWidgetRenderMode as v } from "./workbenchHelpers.js";
7
- import { getWidgetEntry as c } from "./widgets/widgetRegistry.js";
8
- import { InfiniteCanvas as L } from "../ui/InfiniteCanvas.js";
9
- var M = /* @__PURE__ */ f("<div class=workbench-canvas><div class=workbench-canvas__atmosphere aria-hidden=true>"), V = /* @__PURE__ */ f("<div class=workbench-canvas__projected-layer>");
10
- function b(e) {
11
- const n = i((d) => {
12
- const g = e.widgetById().get(e.widgetId);
13
- if (g) return g;
14
- if (d) return d;
1
+ import { use as b, insert as k, createComponent as a, memo as y, effect as R, template as F } from "solid-js/web";
2
+ import { createMemo as c, Show as M, For as s } from "solid-js";
3
+ import { resolveWorkbenchInteractionAdapter as N } from "./workbenchInteractionAdapter.js";
4
+ import { WORKBENCH_STICKY_FILTER_ID as O } from "./types.js";
5
+ import { WorkbenchCanvasField as j } from "./WorkbenchCanvasField.js";
6
+ import { WorkbenchStickyNote as D } from "./WorkbenchLayerObjects.js";
7
+ import { WorkbenchWidget as x } from "./WorkbenchWidget.js";
8
+ import { createWorkbenchRenderLayerMap as V, resolveWorkbenchWidgetRenderMode as L, WORKBENCH_MIN_SCALE as z } from "./workbenchHelpers.js";
9
+ import { getWidgetEntry as S } from "./widgets/widgetRegistry.js";
10
+ import { InfiniteCanvas as A } from "../ui/InfiniteCanvas.js";
11
+ var E = /* @__PURE__ */ F("<div class=workbench-canvas><div class=workbench-canvas__atmosphere aria-hidden=true>"), _ = /* @__PURE__ */ F("<div class=workbench-canvas__projected-layer>");
12
+ function q(e) {
13
+ const r = c((o) => {
14
+ const l = e.widgetById().get(e.widgetId);
15
+ if (l) return l;
16
+ if (o) return o;
15
17
  throw new Error(`Workbench widget ${e.widgetId} is missing from the projected render map.`);
16
- }), u = i(() => c(n().type, e.widgetDefinitions));
17
- return a(F, {
18
+ }), t = c(() => S(r().type, e.widgetDefinitions));
19
+ return a(x, {
18
20
  get definition() {
19
- return u();
21
+ return t();
20
22
  },
21
23
  get widgetId() {
22
24
  return e.widgetId;
23
25
  },
24
26
  get widgetTitle() {
25
- return n().title;
27
+ return r().title;
26
28
  },
27
29
  get widgetType() {
28
- return n().type;
30
+ return r().type;
29
31
  },
30
32
  get x() {
31
- return n().x;
33
+ return r().x;
32
34
  },
33
35
  get y() {
34
- return n().y;
36
+ return r().y;
35
37
  },
36
38
  get width() {
37
- return n().width;
39
+ return r().width;
38
40
  },
39
41
  get height() {
40
- return n().height;
42
+ return r().height;
41
43
  },
42
44
  get renderLayer() {
43
45
  return e.renderLayers().byWidgetId.get(e.widgetId) ?? 1;
44
46
  },
45
- itemSnapshot: n,
47
+ itemSnapshot: r,
46
48
  get selected() {
47
49
  return e.selectedWidgetId === e.widgetId;
48
50
  },
@@ -59,7 +61,7 @@ function b(e) {
59
61
  return e.locked;
60
62
  },
61
63
  get filtered() {
62
- return !e.filters[n().type];
64
+ return y(() => e.mode !== "background")() && e.filters[r().type] === !1;
63
65
  },
64
66
  get interactionAdapter() {
65
67
  return e.interactionAdapter;
@@ -115,24 +117,79 @@ function b(e) {
115
117
  }
116
118
  });
117
119
  }
118
- function A(e) {
119
- const n = i(() => W(e.interactionAdapter)), u = i(() => new Map(e.widgets.map((t) => [t.id, t]))), d = i(() => k(e.widgets)), g = i(() => e.widgets.filter((t) => {
120
- const o = c(t.type, e.widgetDefinitions);
121
- return v(o) === "canvas_scaled";
122
- })), m = i(() => e.widgets.filter((t) => {
123
- const o = c(t.type, e.widgetDefinitions);
124
- return v(o) === "projected_surface";
125
- }).map((t) => t.id)), C = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0;
120
+ function B(e) {
121
+ const r = c((t) => {
122
+ const o = e.stickyNoteById().get(e.noteId);
123
+ if (o) return o;
124
+ if (t) return t;
125
+ throw new Error(`Workbench sticky note ${e.noteId} is missing from the projected render map.`);
126
+ });
127
+ return a(D, {
128
+ get item() {
129
+ return r();
130
+ },
131
+ get selected() {
132
+ return y(() => e.selectedObject?.kind === "sticky_note")() && e.selectedObject.id === e.noteId;
133
+ },
134
+ get viewportScale() {
135
+ return e.projectedViewport().scale;
136
+ },
137
+ get projectedViewport() {
138
+ return e.projectedViewport;
139
+ },
140
+ get surfaceReady() {
141
+ return e.surfaceReady;
142
+ },
143
+ get renderLayer() {
144
+ return e.renderLayers().byWidgetId.get(e.noteId) ?? e.renderLayers().topRenderLayer;
145
+ },
146
+ get topRenderLayer() {
147
+ return e.renderLayers().topRenderLayer;
148
+ },
149
+ get locked() {
150
+ return e.locked;
151
+ },
152
+ get filtered() {
153
+ return e.filtered;
154
+ },
155
+ get optimisticFront() {
156
+ return e.optimisticFrontWidgetId === e.noteId;
157
+ },
158
+ onSelect: (t) => e.onSelectStickyNote?.(t),
159
+ onContextMenu: (t, o) => e.onStickyNoteContextMenu?.(t, o),
160
+ onStartOptimisticFront: (t) => e.onStartStickyOptimisticFront?.(t),
161
+ onCommitFront: (t) => e.onCommitStickyFront?.(t),
162
+ onCommitMove: (t, o) => e.onCommitStickyMove?.(t, o),
163
+ onCommitResize: (t, o) => e.onCommitStickyResize?.(t, o),
164
+ onUpdate: (t, o) => e.onUpdateStickyNote?.(t, o),
165
+ onDelete: (t) => e.onDeleteStickyNote?.(t),
166
+ get onLayoutInteractionStart() {
167
+ return e.onLayoutInteractionStart;
168
+ },
169
+ get onLayoutInteractionEnd() {
170
+ return e.onLayoutInteractionEnd;
171
+ }
172
+ });
173
+ }
174
+ function Q(e) {
175
+ const r = c(() => N(e.interactionAdapter)), t = c(() => new Map(e.widgets.map((n) => [n.id, n]))), o = c(() => (e.stickyNotes ?? []).map((n) => n.id)), l = c(() => new Map((e.stickyNotes ?? []).map((n) => [n.id, n]))), C = c(() => V([...e.widgets, ...e.stickyNotes ?? []])), u = c(() => e.mode === "background"), w = c(() => e.mode === "background"), W = c(() => e.widgets.filter((n) => {
176
+ const g = S(n.type, e.widgetDefinitions);
177
+ return L(g) === "canvas_scaled";
178
+ })), v = c(() => e.widgets.filter((n) => {
179
+ const g = S(n.type, e.widgetDefinitions);
180
+ return L(g) === "projected_surface";
181
+ }).map((n) => n.id)), I = c(() => v().length > 0), h = c(() => I() ? [] : e.stickyNotes ?? []), f = () => e.canvasFrameSize.width > 0 && e.canvasFrameSize.height > 0;
126
182
  return (() => {
127
- var t = M();
128
- t.firstChild;
129
- var o = e.setCanvasFrameRef;
130
- return typeof o == "function" ? I(o, t) : e.setCanvasFrameRef = t, w(t, a(L, {
183
+ var n = E();
184
+ n.firstChild;
185
+ var g = e.setCanvasFrameRef;
186
+ return typeof g == "function" ? b(g, n) : e.setCanvasFrameRef = n, k(n, a(A, {
131
187
  ariaLabel: "Workbench canvas",
132
188
  class: "workbench-canvas__infinite",
133
189
  get viewport() {
134
190
  return e.viewport;
135
191
  },
192
+ minScale: z,
136
193
  get onViewportChange() {
137
194
  return e.onViewportCommit;
138
195
  },
@@ -145,54 +202,54 @@ function A(e) {
145
202
  get onCanvasPointerDown() {
146
203
  return e.onCanvasPointerDown;
147
204
  },
148
- resolveTargetRole: (r) => n().resolveSurfaceTargetRole({
149
- target: r.target,
150
- interactiveSelector: r.interactiveSelector,
151
- panSurfaceSelector: r.panSurfaceSelector
205
+ resolveTargetRole: (i) => r().resolveSurfaceTargetRole({
206
+ target: i.target,
207
+ interactiveSelector: i.interactiveSelector,
208
+ panSurfaceSelector: i.panSurfaceSelector
152
209
  }),
153
- resolveWheelRouting: (r) => n().resolveWheelRouting({
154
- target: r.target,
155
- disablePanZoom: r.disablePanZoom,
156
- selectedWidgetId: e.selectedWidgetId,
157
- wheelInteractiveSelector: r.wheelInteractiveSelector
210
+ resolveWheelRouting: (i) => r().resolveWheelRouting({
211
+ target: i.target,
212
+ disablePanZoom: i.disablePanZoom,
213
+ selectedWidgetId: e.selectedObject?.kind === "widget" || e.selectedObject?.kind === "sticky_note" ? e.selectedObject.id : e.selectedWidgetId,
214
+ wheelInteractiveSelector: i.wheelInteractiveSelector
158
215
  }),
159
216
  get disablePanZoom() {
160
217
  return e.locked;
161
218
  },
162
- overlay: (r) => a(h, {
219
+ overlay: (i) => a(M, {
163
220
  get when() {
164
- return m().length > 0;
221
+ return I();
165
222
  },
166
223
  get children() {
167
- var l = V();
168
- return w(l, a(R, {
224
+ var d = _();
225
+ return k(d, a(s, {
169
226
  get each() {
170
- return m();
227
+ return v();
171
228
  },
172
- children: (s) => a(b, {
173
- widgetId: s,
229
+ children: (m) => a(q, {
230
+ widgetId: m,
174
231
  get widgetDefinitions() {
175
232
  return e.widgetDefinitions;
176
233
  },
177
234
  get canvasFrameSize() {
178
235
  return e.canvasFrameSize;
179
236
  },
180
- widgetById: u,
181
- renderLayers: d,
237
+ widgetById: t,
238
+ renderLayers: C,
182
239
  get selectedWidgetId() {
183
- return e.selectedWidgetId;
240
+ return y(() => e.selectedObject?.kind === "widget")() ? e.selectedObject.id : e.selectedWidgetId;
184
241
  },
185
242
  get optimisticFrontWidgetId() {
186
243
  return e.optimisticFrontWidgetId;
187
244
  },
188
245
  get locked() {
189
- return e.locked;
246
+ return e.locked || u();
190
247
  },
191
248
  get filters() {
192
249
  return e.filters;
193
250
  },
194
251
  get interactionAdapter() {
195
- return n();
252
+ return r();
196
253
  },
197
254
  get setCanvasFrameRef() {
198
255
  return e.setCanvasFrameRef;
@@ -236,21 +293,85 @@ function A(e) {
236
293
  get onLayoutInteractionEnd() {
237
294
  return e.onLayoutInteractionEnd;
238
295
  },
239
- projectedViewport: r,
296
+ projectedViewport: i,
297
+ get surfaceReady() {
298
+ return f();
299
+ }
300
+ })
301
+ }), null), k(d, a(s, {
302
+ get each() {
303
+ return o();
304
+ },
305
+ children: (m) => a(B, {
306
+ noteId: m,
307
+ stickyNoteById: l,
308
+ get selectedObject() {
309
+ return e.selectedObject;
310
+ },
311
+ renderLayers: C,
312
+ projectedViewport: i,
313
+ get optimisticFrontWidgetId() {
314
+ return e.optimisticFrontWidgetId;
315
+ },
316
+ get locked() {
317
+ return e.locked || u();
318
+ },
319
+ get filtered() {
320
+ return y(() => !u())() && e.filters[O] === !1;
321
+ },
322
+ get onSelectStickyNote() {
323
+ return e.onSelectStickyNote;
324
+ },
325
+ get onStickyNoteContextMenu() {
326
+ return e.onStickyNoteContextMenu;
327
+ },
328
+ get onStartStickyOptimisticFront() {
329
+ return e.onStartStickyOptimisticFront;
330
+ },
331
+ get onCommitStickyFront() {
332
+ return e.onCommitStickyFront;
333
+ },
334
+ get onCommitStickyMove() {
335
+ return e.onCommitStickyMove;
336
+ },
337
+ get onCommitStickyResize() {
338
+ return e.onCommitStickyResize;
339
+ },
340
+ get onUpdateStickyNote() {
341
+ return e.onUpdateStickyNote;
342
+ },
343
+ get onDeleteStickyNote() {
344
+ return e.onDeleteStickyNote;
345
+ },
346
+ get onLayoutInteractionStart() {
347
+ return e.onLayoutInteractionStart;
348
+ },
349
+ get onLayoutInteractionEnd() {
350
+ return e.onLayoutInteractionEnd;
351
+ },
240
352
  get surfaceReady() {
241
- return C();
353
+ return f();
242
354
  }
243
355
  })
244
- })), l;
356
+ }), null), R(() => d.classList.toggle("is-work-layer-locked", !!u())), d;
245
357
  }
246
358
  }),
247
359
  get children() {
248
- return a(y, {
360
+ return a(j, {
249
361
  get widgetDefinitions() {
250
362
  return e.widgetDefinitions;
251
363
  },
252
364
  get widgets() {
253
- return g();
365
+ return W();
366
+ },
367
+ get stickyNotes() {
368
+ return h();
369
+ },
370
+ get annotations() {
371
+ return e.annotations ?? [];
372
+ },
373
+ get backgroundLayers() {
374
+ return e.backgroundLayers ?? [];
254
375
  },
255
376
  get viewport() {
256
377
  return e.viewport;
@@ -258,9 +379,21 @@ function A(e) {
258
379
  get selectedWidgetId() {
259
380
  return e.selectedWidgetId;
260
381
  },
382
+ get selectedObject() {
383
+ return e.selectedObject;
384
+ },
261
385
  get optimisticFrontWidgetId() {
262
386
  return e.optimisticFrontWidgetId;
263
387
  },
388
+ get workLayerLocked() {
389
+ return u();
390
+ },
391
+ get annotationLayerEditable() {
392
+ return w();
393
+ },
394
+ get backgroundLayerEditable() {
395
+ return w();
396
+ },
264
397
  get viewportScale() {
265
398
  return e.viewport.scale;
266
399
  },
@@ -271,7 +404,7 @@ function A(e) {
271
404
  return e.filters;
272
405
  },
273
406
  get interactionAdapter() {
274
- return n();
407
+ return r();
275
408
  },
276
409
  get onSelectWidget() {
277
410
  return e.onSelectWidget;
@@ -291,6 +424,66 @@ function A(e) {
291
424
  get onCommitResize() {
292
425
  return e.onCommitResize;
293
426
  },
427
+ get onSelectStickyNote() {
428
+ return e.onSelectStickyNote;
429
+ },
430
+ get onStickyNoteContextMenu() {
431
+ return e.onStickyNoteContextMenu;
432
+ },
433
+ get onStartStickyOptimisticFront() {
434
+ return e.onStartStickyOptimisticFront;
435
+ },
436
+ get onCommitStickyFront() {
437
+ return e.onCommitStickyFront;
438
+ },
439
+ get onCommitStickyMove() {
440
+ return e.onCommitStickyMove;
441
+ },
442
+ get onCommitStickyResize() {
443
+ return e.onCommitStickyResize;
444
+ },
445
+ get onUpdateStickyNote() {
446
+ return e.onUpdateStickyNote;
447
+ },
448
+ get onDeleteStickyNote() {
449
+ return e.onDeleteStickyNote;
450
+ },
451
+ get onSelectAnnotation() {
452
+ return e.onSelectAnnotation;
453
+ },
454
+ get onAnnotationContextMenu() {
455
+ return e.onAnnotationContextMenu;
456
+ },
457
+ get onCommitAnnotationMove() {
458
+ return e.onCommitAnnotationMove;
459
+ },
460
+ get onCommitAnnotationResize() {
461
+ return e.onCommitAnnotationResize;
462
+ },
463
+ get onUpdateTextAnnotation() {
464
+ return e.onUpdateTextAnnotation;
465
+ },
466
+ get onDeleteAnnotation() {
467
+ return e.onDeleteAnnotation;
468
+ },
469
+ get onSelectBackgroundLayer() {
470
+ return e.onSelectBackgroundLayer;
471
+ },
472
+ get onBackgroundLayerContextMenu() {
473
+ return e.onBackgroundLayerContextMenu;
474
+ },
475
+ get onCommitBackgroundMove() {
476
+ return e.onCommitBackgroundMove;
477
+ },
478
+ get onCommitBackgroundResize() {
479
+ return e.onCommitBackgroundResize;
480
+ },
481
+ get onUpdateBackgroundLayer() {
482
+ return e.onUpdateBackgroundLayer;
483
+ },
484
+ get onDeleteBackgroundLayer() {
485
+ return e.onDeleteBackgroundLayer;
486
+ },
294
487
  get onViewportCommit() {
295
488
  return e.onViewportCommit;
296
489
  },
@@ -314,9 +507,15 @@ function A(e) {
314
507
  }
315
508
  });
316
509
  }
317
- }), null), S(() => t.classList.toggle("is-locked", !!e.locked)), t;
510
+ }), null), R((i) => {
511
+ var d = !!e.locked, m = !!u();
512
+ return d !== i.e && n.classList.toggle("is-locked", i.e = d), m !== i.t && n.classList.toggle("is-background-mode", i.t = m), i;
513
+ }, {
514
+ e: void 0,
515
+ t: void 0
516
+ }), n;
318
517
  })();
319
518
  }
320
519
  export {
321
- A as WorkbenchCanvas
520
+ Q as WorkbenchCanvas
322
521
  };
@@ -1,14 +1,21 @@
1
1
  import { type ResolvedWorkbenchInteractionAdapter } from './workbenchInteractionAdapter';
2
- import type { WorkbenchInteractionAdapter, WorkbenchViewport, WorkbenchWidgetDefinition, WorkbenchWidgetItem, WorkbenchWidgetType } from './types';
2
+ import { type WorkbenchWidgetItem, type WorkbenchAnnotationItem, type WorkbenchBackgroundLayer, type WorkbenchInteractionAdapter, type WorkbenchSelection, type WorkbenchStickyNoteItem, type WorkbenchTextAnnotationPatch, type WorkbenchViewport, type WorkbenchWidgetDefinition } from './types';
3
3
  export interface WorkbenchCanvasFieldProps {
4
4
  widgetDefinitions: readonly WorkbenchWidgetDefinition[];
5
5
  widgets: readonly WorkbenchWidgetItem[];
6
+ stickyNotes?: readonly WorkbenchStickyNoteItem[];
7
+ annotations?: readonly WorkbenchAnnotationItem[];
8
+ backgroundLayers?: readonly WorkbenchBackgroundLayer[];
6
9
  viewport: WorkbenchViewport;
10
+ selectedObject?: WorkbenchSelection | null;
7
11
  selectedWidgetId: string | null;
8
12
  optimisticFrontWidgetId: string | null;
13
+ workLayerLocked?: boolean;
14
+ annotationLayerEditable?: boolean;
15
+ backgroundLayerEditable?: boolean;
9
16
  viewportScale: number;
10
17
  locked: boolean;
11
- filters: Record<WorkbenchWidgetType, boolean>;
18
+ filters: Record<string, boolean>;
12
19
  interactionAdapter?: WorkbenchInteractionAdapter | ResolvedWorkbenchInteractionAdapter;
13
20
  onSelectWidget: (widgetId: string) => void;
14
21
  onWidgetContextMenu: (event: MouseEvent, item: WorkbenchWidgetItem) => void;
@@ -22,6 +29,44 @@ export interface WorkbenchCanvasFieldProps {
22
29
  width: number;
23
30
  height: number;
24
31
  }) => void;
32
+ onSelectStickyNote?: (noteId: string) => void;
33
+ onStickyNoteContextMenu?: (event: MouseEvent, item: WorkbenchStickyNoteItem) => void;
34
+ onStartStickyOptimisticFront?: (noteId: string) => void;
35
+ onCommitStickyFront?: (noteId: string) => void;
36
+ onCommitStickyMove?: (noteId: string, position: {
37
+ x: number;
38
+ y: number;
39
+ }) => void;
40
+ onCommitStickyResize?: (noteId: string, size: {
41
+ width: number;
42
+ height: number;
43
+ }) => void;
44
+ onUpdateStickyNote?: (noteId: string, patch: Partial<Pick<WorkbenchStickyNoteItem, 'body' | 'color'>>) => void;
45
+ onDeleteStickyNote?: (noteId: string) => void;
46
+ onSelectAnnotation?: (annotationId: string) => void;
47
+ onAnnotationContextMenu?: (event: MouseEvent, item: WorkbenchAnnotationItem) => void;
48
+ onCommitAnnotationMove?: (annotationId: string, position: {
49
+ x: number;
50
+ y: number;
51
+ }) => void;
52
+ onCommitAnnotationResize?: (annotationId: string, size: {
53
+ width: number;
54
+ height: number;
55
+ }) => void;
56
+ onUpdateTextAnnotation?: (annotationId: string, patch: WorkbenchTextAnnotationPatch) => void;
57
+ onDeleteAnnotation?: (annotationId: string) => void;
58
+ onSelectBackgroundLayer?: (layerId: string) => void;
59
+ onBackgroundLayerContextMenu?: (event: MouseEvent, item: WorkbenchBackgroundLayer) => void;
60
+ onCommitBackgroundMove?: (layerId: string, position: {
61
+ x: number;
62
+ y: number;
63
+ }) => void;
64
+ onCommitBackgroundResize?: (layerId: string, size: {
65
+ width: number;
66
+ height: number;
67
+ }) => void;
68
+ onUpdateBackgroundLayer?: (layerId: string, patch: Partial<Pick<WorkbenchBackgroundLayer, 'fill' | 'opacity' | 'material' | 'name'>>) => void;
69
+ onDeleteBackgroundLayer?: (layerId: string) => void;
25
70
  onViewportCommit: (viewport: WorkbenchViewport) => void;
26
71
  onViewportInteractionStart?: (kind: 'pan') => void;
27
72
  onRequestOverview: (item: WorkbenchWidgetItem) => void;