@pixerate/editor 0.153.0 → 0.155.0

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 (63) hide show
  1. package/dist/animation-editor/index.cjs +2 -3
  2. package/dist/animation-editor/index.js +1 -2
  3. package/dist/canvas/editorDocument.d.cts +59 -0
  4. package/dist/canvas/editorDocument.d.ts +59 -0
  5. package/dist/canvas/index.cjs +125 -16
  6. package/dist/canvas/index.d.cts +1 -0
  7. package/dist/canvas/index.d.ts +1 -0
  8. package/dist/canvas/index.js +112 -3
  9. package/dist/chart/index.cjs +2 -3
  10. package/dist/chart/index.js +1 -2
  11. package/dist/chunk-M4MIZPQI.cjs +393 -0
  12. package/dist/chunk-NHLYK3AX.js +393 -0
  13. package/dist/{chunk-XFDQEAOS.cjs → chunk-RQCMSEM5.cjs} +2 -2
  14. package/dist/{chunk-BCY22GBH.js → chunk-SDHZG5TF.js} +1 -1
  15. package/dist/{chunk-HVX35M2I.cjs → chunk-WI7QJA7A.cjs} +2 -2
  16. package/dist/{chunk-4J4MC3F5.js → chunk-YXOW456B.js} +1 -1
  17. package/dist/diagram/index.cjs +2 -3
  18. package/dist/diagram/index.js +1 -2
  19. package/dist/image-editor/controller.d.cts +8 -0
  20. package/dist/image-editor/controller.d.ts +8 -0
  21. package/dist/image-editor/editorDocument.d.cts +16 -0
  22. package/dist/image-editor/editorDocument.d.ts +16 -0
  23. package/dist/image-editor/index.cjs +102 -52
  24. package/dist/image-editor/index.d.cts +1 -0
  25. package/dist/image-editor/index.d.ts +1 -0
  26. package/dist/image-editor/index.js +51 -1
  27. package/dist/index.cjs +4 -5
  28. package/dist/index.js +2 -3
  29. package/dist/paint-editor/controller.d.cts +8 -0
  30. package/dist/paint-editor/controller.d.ts +8 -0
  31. package/dist/paint-editor/editorDocument.d.cts +17 -0
  32. package/dist/paint-editor/editorDocument.d.ts +17 -0
  33. package/dist/paint-editor/index.cjs +74 -18
  34. package/dist/paint-editor/index.d.cts +1 -0
  35. package/dist/paint-editor/index.d.ts +1 -0
  36. package/dist/paint-editor/index.js +58 -2
  37. package/dist/parameters/index.cjs +2 -3
  38. package/dist/parameters/index.js +1 -2
  39. package/dist/persistence/assets.d.cts +51 -0
  40. package/dist/persistence/assets.d.ts +51 -0
  41. package/dist/persistence/editorDocument.d.cts +12 -0
  42. package/dist/persistence/editorDocument.d.ts +12 -0
  43. package/dist/persistence/index.cjs +32 -8
  44. package/dist/persistence/index.d.cts +1 -0
  45. package/dist/persistence/index.d.ts +1 -0
  46. package/dist/persistence/index.js +34 -10
  47. package/dist/spreadsheet/index.cjs +3 -4
  48. package/dist/spreadsheet/index.js +2 -3
  49. package/dist/tokens/index.cjs +3 -4
  50. package/dist/tokens/index.js +2 -3
  51. package/dist/vector/index.cjs +2 -3
  52. package/dist/vector/index.js +1 -2
  53. package/dist/video-editor/index.cjs +2 -3
  54. package/dist/video-editor/index.js +1 -2
  55. package/package.json +1 -1
  56. package/skills/pixerate-canvas/SKILL.md +14 -0
  57. package/skills/pixerate-image-editor/SKILL.md +16 -24
  58. package/skills/pixerate-image-editor/references/smart-objects.md +28 -0
  59. package/skills/pixerate-paint-editor/SKILL.md +17 -5
  60. package/dist/chunk-5H2C3QSF.cjs +0 -134
  61. package/dist/chunk-GNV54DLO.js +0 -134
  62. package/dist/chunk-L5OWG2NA.cjs +0 -135
  63. package/dist/chunk-WHKNYFM2.js +0 -135
@@ -61,8 +61,7 @@ var _chunkALNIFK5Gcjs = require('../chunk-ALNIFK5G.cjs');
61
61
  require('../chunk-UWEQ55MY.cjs');
62
62
 
63
63
 
64
- var _chunk5H2C3QSFcjs = require('../chunk-5H2C3QSF.cjs');
65
- require('../chunk-L5OWG2NA.cjs');
64
+ var _chunkM4MIZPQIcjs = require('../chunk-M4MIZPQI.cjs');
66
65
  require('../chunk-2BSBFBOA.cjs');
67
66
 
68
67
 
@@ -5938,7 +5937,7 @@ function createAnimationEffectsToolProvider(controller, options = {}) {
5938
5937
 
5939
5938
  // src/animation-editor/editorDocument.ts
5940
5939
  function createAnimationEditorDocument(controller) {
5941
- return _chunk5H2C3QSFcjs.defineEditorDocument.call(void 0, {
5940
+ return _chunkM4MIZPQIcjs.defineEditorDocument.call(void 0, {
5942
5941
  kind: "animation",
5943
5942
  get: () => controller.getScene(),
5944
5943
  load: (document, { history }) => {
@@ -61,8 +61,7 @@ import {
61
61
  import "../chunk-VDGBHYC7.js";
62
62
  import {
63
63
  defineEditorDocument
64
- } from "../chunk-GNV54DLO.js";
65
- import "../chunk-WHKNYFM2.js";
64
+ } from "../chunk-NHLYK3AX.js";
66
65
  import "../chunk-HF5QZS7Z.js";
67
66
  import {
68
67
  HistoryManager
@@ -0,0 +1,59 @@
1
+ import type { HistoryManager } from '../history/HistoryManager.cjs';
2
+ import { type EditorDocument } from '../persistence/editorDocument.cjs';
3
+ import type { CanvasScene, CanvasScenesStore } from './scenes.cjs';
4
+ import type { CanvasEdge, CanvasNode } from './types.cjs';
5
+ /** What the document needs of an edge (React Flow's and Svelte Flow's edges fit). */
6
+ export type CanvasEdgeLike = Pick<CanvasEdge, 'id' | 'source' | 'target'> & {
7
+ selected?: boolean;
8
+ };
9
+ /** A canvas as it is saved: its nodes, edges and (with a scenes store) scenes. */
10
+ export interface CanvasEditorDocument<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
11
+ nodes: TNode[];
12
+ edges: TEdge[];
13
+ scenes?: CanvasScene[];
14
+ }
15
+ export interface CanvasEditorDocumentOptions<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
16
+ getNodes: () => TNode[];
17
+ setNodes: (nodes: TNode[]) => void;
18
+ getEdges: () => TEdge[];
19
+ setEdges: (edges: TEdge[]) => void;
20
+ /** The canvas's undo history, shared with its arrange, draw and effects controllers. */
21
+ history: Pick<HistoryManager, 'execute' | 'undo' | 'redo' | 'getState' | 'subscribe' | 'clear'>;
22
+ /** Saved viewports, saved and loaded with the nodes. */
23
+ scenes?: CanvasScenesStore;
24
+ /**
25
+ * Changes the history does not see (e.g. the host's node state changing during a drag).
26
+ * React's `useCanvasEditorDocument` and Svelte's `createCanvasEditorDocument` supply it.
27
+ */
28
+ subscribe?: (listener: () => void) => () => void;
29
+ /** Why the canvas cannot be changed (a sentence), or `false`. */
30
+ readOnly?: () => string | false;
31
+ }
32
+ /**
33
+ * The save / load / undo contract for a canvas whose nodes and edges live in the host (React
34
+ * Flow or Svelte Flow state), kind `canvas`. The document is the nodes and edges without
35
+ * selection or measurement, plus the scenes when a store is given. Recorded loads are one
36
+ * undo step in the shared `history`; opening (`history: "reset"`) clears it.
37
+ */
38
+ export declare function createCanvasEditorDocument<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge>(options: CanvasEditorDocumentOptions<TNode, TEdge>): EditorDocument<CanvasEditorDocument<TNode, TEdge>>;
39
+ export interface CanvasGestureRecorderOptions<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
40
+ getNodes: () => TNode[];
41
+ setNodes: (nodes: TNode[]) => void;
42
+ getEdges?: () => TEdge[];
43
+ setEdges?: (edges: TEdge[]) => void;
44
+ history: Pick<HistoryManager, 'execute'>;
45
+ }
46
+ /**
47
+ * Makes a gesture the flow library applies directly (a node drag, a resize) one undo step:
48
+ * call `begin()` when it starts (e.g. `onNodeDragStart`) and `end("Move")` when it stops. If
49
+ * the nodes or edges changed in between, the change is recorded; otherwise nothing is.
50
+ */
51
+ export declare function createCanvasGestureRecorder<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge>(options: CanvasGestureRecorderOptions<TNode, TEdge>): {
52
+ /** Remembers the canvas as it is before the gesture. */
53
+ begin(): void;
54
+ /** Records the gesture as one undo step named `name`, if it changed anything. Returns whether it did. */
55
+ end(name?: string): boolean;
56
+ /** Forgets a gesture without recording it. */
57
+ cancel(): void;
58
+ };
59
+ export type CanvasGestureRecorder = ReturnType<typeof createCanvasGestureRecorder>;
@@ -0,0 +1,59 @@
1
+ import type { HistoryManager } from '../history/HistoryManager.js';
2
+ import { type EditorDocument } from '../persistence/editorDocument.js';
3
+ import type { CanvasScene, CanvasScenesStore } from './scenes.js';
4
+ import type { CanvasEdge, CanvasNode } from './types.js';
5
+ /** What the document needs of an edge (React Flow's and Svelte Flow's edges fit). */
6
+ export type CanvasEdgeLike = Pick<CanvasEdge, 'id' | 'source' | 'target'> & {
7
+ selected?: boolean;
8
+ };
9
+ /** A canvas as it is saved: its nodes, edges and (with a scenes store) scenes. */
10
+ export interface CanvasEditorDocument<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
11
+ nodes: TNode[];
12
+ edges: TEdge[];
13
+ scenes?: CanvasScene[];
14
+ }
15
+ export interface CanvasEditorDocumentOptions<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
16
+ getNodes: () => TNode[];
17
+ setNodes: (nodes: TNode[]) => void;
18
+ getEdges: () => TEdge[];
19
+ setEdges: (edges: TEdge[]) => void;
20
+ /** The canvas's undo history, shared with its arrange, draw and effects controllers. */
21
+ history: Pick<HistoryManager, 'execute' | 'undo' | 'redo' | 'getState' | 'subscribe' | 'clear'>;
22
+ /** Saved viewports, saved and loaded with the nodes. */
23
+ scenes?: CanvasScenesStore;
24
+ /**
25
+ * Changes the history does not see (e.g. the host's node state changing during a drag).
26
+ * React's `useCanvasEditorDocument` and Svelte's `createCanvasEditorDocument` supply it.
27
+ */
28
+ subscribe?: (listener: () => void) => () => void;
29
+ /** Why the canvas cannot be changed (a sentence), or `false`. */
30
+ readOnly?: () => string | false;
31
+ }
32
+ /**
33
+ * The save / load / undo contract for a canvas whose nodes and edges live in the host (React
34
+ * Flow or Svelte Flow state), kind `canvas`. The document is the nodes and edges without
35
+ * selection or measurement, plus the scenes when a store is given. Recorded loads are one
36
+ * undo step in the shared `history`; opening (`history: "reset"`) clears it.
37
+ */
38
+ export declare function createCanvasEditorDocument<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge>(options: CanvasEditorDocumentOptions<TNode, TEdge>): EditorDocument<CanvasEditorDocument<TNode, TEdge>>;
39
+ export interface CanvasGestureRecorderOptions<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge> {
40
+ getNodes: () => TNode[];
41
+ setNodes: (nodes: TNode[]) => void;
42
+ getEdges?: () => TEdge[];
43
+ setEdges?: (edges: TEdge[]) => void;
44
+ history: Pick<HistoryManager, 'execute'>;
45
+ }
46
+ /**
47
+ * Makes a gesture the flow library applies directly (a node drag, a resize) one undo step:
48
+ * call `begin()` when it starts (e.g. `onNodeDragStart`) and `end("Move")` when it stops. If
49
+ * the nodes or edges changed in between, the change is recorded; otherwise nothing is.
50
+ */
51
+ export declare function createCanvasGestureRecorder<TNode extends CanvasNode = CanvasNode, TEdge extends CanvasEdgeLike = CanvasEdge>(options: CanvasGestureRecorderOptions<TNode, TEdge>): {
52
+ /** Remembers the canvas as it is before the gesture. */
53
+ begin(): void;
54
+ /** Records the gesture as one undo step named `name`, if it changed anything. Returns whether it did. */
55
+ end(name?: string): boolean;
56
+ /** Forgets a gesture without recording it. */
57
+ cancel(): void;
58
+ };
59
+ export type CanvasGestureRecorder = ReturnType<typeof createCanvasGestureRecorder>;
@@ -60,7 +60,7 @@ var _chunkZVNAMTFOcjs = require('../chunk-ZVNAMTFO.cjs');
60
60
 
61
61
 
62
62
 
63
- var _chunkHVX35M2Icjs = require('../chunk-HVX35M2I.cjs');
63
+ var _chunkWI7QJA7Acjs = require('../chunk-WI7QJA7A.cjs');
64
64
 
65
65
 
66
66
 
@@ -213,8 +213,9 @@ require('../chunk-WOFXZ3XU.cjs');
213
213
 
214
214
 
215
215
  var _chunkYQGCPL5Xcjs = require('../chunk-YQGCPL5X.cjs');
216
- require('../chunk-5H2C3QSF.cjs');
217
- require('../chunk-L5OWG2NA.cjs');
216
+
217
+
218
+ var _chunkM4MIZPQIcjs = require('../chunk-M4MIZPQI.cjs');
218
219
  require('../chunk-2BSBFBOA.cjs');
219
220
 
220
221
 
@@ -4048,7 +4049,7 @@ function getTokenPropertyScope(property, node) {
4048
4049
  }
4049
4050
  function getTokensForProperty(state, property, node) {
4050
4051
  const scope = getTokenPropertyScope(property, node);
4051
- return state.variables.filter((v) => v.type === property.type && _chunkHVX35M2Icjs.isTokenInScope.call(void 0, v, scope));
4052
+ return state.variables.filter((v) => v.type === property.type && _chunkWI7QJA7Acjs.isTokenInScope.call(void 0, v, scope));
4052
4053
  }
4053
4054
  function lookupOf(nodes) {
4054
4055
  return new Map(nodes.map((n3) => [n3.id, n3]));
@@ -4056,7 +4057,7 @@ function lookupOf(nodes) {
4056
4057
  function validModes(state, modes, into) {
4057
4058
  for (const [collectionId, modeId] of Object.entries(modes)) {
4058
4059
  if (state) {
4059
- const collection = _chunkHVX35M2Icjs.getTokenCollection.call(void 0, state, collectionId);
4060
+ const collection = _chunkWI7QJA7Acjs.getTokenCollection.call(void 0, state, collectionId);
4060
4061
  if (!collection || !collection.modes.some((m) => m.id === modeId)) continue;
4061
4062
  }
4062
4063
  into[collectionId] = modeId;
@@ -4111,7 +4112,7 @@ function applyBindings(node, state, modes, options, only) {
4111
4112
  if (only && !only.has(variableId)) continue;
4112
4113
  const property = getCanvasTokenProperty(key, options);
4113
4114
  if (!property || !property.appliesTo(next)) continue;
4114
- const resolved = _chunkHVX35M2Icjs.resolveToken.call(void 0, state, variableId, modes);
4115
+ const resolved = _chunkWI7QJA7Acjs.resolveToken.call(void 0, state, variableId, modes);
4115
4116
  if (!resolved.ok || resolved.type !== property.type) continue;
4116
4117
  next = property.write(next, resolved.value);
4117
4118
  }
@@ -4134,7 +4135,7 @@ function inspectNodeTokens(node, nodes, state, options = {}) {
4134
4135
  for (const [key, variableId] of Object.entries(getNodeTokenBindings(node))) {
4135
4136
  const property = getCanvasTokenProperty(key, options);
4136
4137
  if (!property) continue;
4137
- out.push({ property, variableId, variable: _chunkHVX35M2Icjs.getTokenVariable.call(void 0, state, variableId), resolution: _chunkHVX35M2Icjs.resolveToken.call(void 0, state, variableId, modes) });
4138
+ out.push({ property, variableId, variable: _chunkWI7QJA7Acjs.getTokenVariable.call(void 0, state, variableId), resolution: _chunkWI7QJA7Acjs.resolveToken.call(void 0, state, variableId, modes) });
4138
4139
  }
4139
4140
  return out;
4140
4141
  }
@@ -4146,12 +4147,12 @@ function setDataRecord(node, key, record) {
4146
4147
  }
4147
4148
  function bindCanvasToken(nodes, ids, propertyKey, variableId, state, options = {}) {
4148
4149
  const property = getCanvasTokenProperty(propertyKey, options);
4149
- if (!property) throw new (0, _chunkHVX35M2Icjs.TokenError)("not-found", `No bindable property \`${propertyKey}\``);
4150
+ if (!property) throw new (0, _chunkWI7QJA7Acjs.TokenError)("not-found", `No bindable property \`${propertyKey}\``);
4150
4151
  if (variableId !== null) {
4151
- const variable = _chunkHVX35M2Icjs.getTokenVariable.call(void 0, state, variableId);
4152
- if (!variable) throw new (0, _chunkHVX35M2Icjs.TokenError)("not-found", `No variable \`${variableId}\``);
4152
+ const variable = _chunkWI7QJA7Acjs.getTokenVariable.call(void 0, state, variableId);
4153
+ if (!variable) throw new (0, _chunkWI7QJA7Acjs.TokenError)("not-found", `No variable \`${variableId}\``);
4153
4154
  if (variable.type !== property.type) {
4154
- throw new (0, _chunkHVX35M2Icjs.TokenError)("type-mismatch", `${property.label} takes a ${property.type} variable; \`${variable.name}\` is a ${variable.type}`);
4155
+ throw new (0, _chunkWI7QJA7Acjs.TokenError)("type-mismatch", `${property.label} takes a ${property.type} variable; \`${variable.name}\` is a ${variable.type}`);
4155
4156
  }
4156
4157
  }
4157
4158
  const targets = new Set(ids);
@@ -4173,9 +4174,9 @@ function bindCanvasToken(nodes, ids, propertyKey, variableId, state, options = {
4173
4174
  }
4174
4175
  function setCanvasTokenMode(nodes, ids, collectionId, modeId, state, options = {}) {
4175
4176
  if (modeId !== null) {
4176
- const collection = _chunkHVX35M2Icjs.getTokenCollection.call(void 0, state, collectionId);
4177
- if (!collection) throw new (0, _chunkHVX35M2Icjs.TokenError)("not-found", `No collection \`${collectionId}\``);
4178
- if (!collection.modes.some((m) => m.id === modeId)) throw new (0, _chunkHVX35M2Icjs.TokenError)("not-found", `No mode \`${modeId}\` in \`${collection.name}\``);
4177
+ const collection = _chunkWI7QJA7Acjs.getTokenCollection.call(void 0, state, collectionId);
4178
+ if (!collection) throw new (0, _chunkWI7QJA7Acjs.TokenError)("not-found", `No collection \`${collectionId}\``);
4179
+ if (!collection.modes.some((m) => m.id === modeId)) throw new (0, _chunkWI7QJA7Acjs.TokenError)("not-found", `No mode \`${modeId}\` in \`${collection.name}\``);
4179
4180
  }
4180
4181
  const targets = new Set(ids);
4181
4182
  let changed = false;
@@ -4196,7 +4197,7 @@ function setCanvasTokenMode(nodes, ids, collectionId, modeId, state, options = {
4196
4197
  }
4197
4198
  function detachTokenBindings(nodes, state, variableIds, options = {}) {
4198
4199
  const only = variableIds ? new Set(variableIds) : null;
4199
- const isDetached = (id) => only ? only.has(id) : !_chunkHVX35M2Icjs.getTokenVariable.call(void 0, state, id);
4200
+ const isDetached = (id) => only ? only.has(id) : !_chunkWI7QJA7Acjs.getTokenVariable.call(void 0, state, id);
4200
4201
  const { modesOf } = modesResolver(nodes, state, options);
4201
4202
  let changed = false;
4202
4203
  const out = nodes.map((node) => {
@@ -11694,6 +11695,114 @@ function createCanvasEffectsToolProvider(controller, options = {}) {
11694
11695
  });
11695
11696
  }
11696
11697
 
11698
+ // src/canvas/editorDocument.ts
11699
+ var RUNTIME_NODE_KEYS = ["selected", "dragging", "measured", "resizing"];
11700
+ var stripNode = (node) => {
11701
+ const copy = { ...node };
11702
+ for (const key of RUNTIME_NODE_KEYS) delete copy[key];
11703
+ return copy;
11704
+ };
11705
+ var stripEdge = (edge) => {
11706
+ const { selected: _selected, ...rest } = edge;
11707
+ return rest;
11708
+ };
11709
+ function checkCanvasDocument(document2) {
11710
+ const hint = "A canvas document is { nodes: [{ id, position: { x, y }, data }], edges: [{ id, source, target }], scenes? } as get_canvas_document returns it.";
11711
+ const value = document2;
11712
+ if (!value || typeof value !== "object" || !Array.isArray(value.nodes)) throw new Error(`nodes must be an array. ${hint}`);
11713
+ if (!Array.isArray(value.edges)) throw new Error(`edges must be an array. ${hint}`);
11714
+ const ids = /* @__PURE__ */ new Set();
11715
+ value.nodes.forEach((node, i) => {
11716
+ if (!isValidCanvasNode(node)) throw new Error(`nodes[${i}] needs a string id and a numeric position { x, y }. ${hint}`);
11717
+ if (ids.has(node.id)) throw new Error(`Node id "${node.id}" is used twice.`);
11718
+ ids.add(node.id);
11719
+ });
11720
+ value.nodes.forEach((node) => {
11721
+ if (node.parentId !== void 0 && !ids.has(node.parentId)) throw new Error(`Node "${node.id}" has parentId "${node.parentId}", which is not a node in the document.`);
11722
+ });
11723
+ const edgeIds = /* @__PURE__ */ new Set();
11724
+ value.edges.forEach((edge, i) => {
11725
+ if (!isValidCanvasEdge(edge)) throw new Error(`edges[${i}] needs string id, source and target. ${hint}`);
11726
+ if (edgeIds.has(edge.id)) throw new Error(`Edge id "${edge.id}" is used twice.`);
11727
+ edgeIds.add(edge.id);
11728
+ for (const end of [edge.source, edge.target]) {
11729
+ if (!ids.has(end)) throw new Error(`Edge "${edge.id}" connects to "${end}", which is not a node in the document.`);
11730
+ }
11731
+ });
11732
+ if (value.scenes !== void 0 && !Array.isArray(value.scenes)) throw new Error(`scenes must be an array. ${hint}`);
11733
+ }
11734
+ function createCanvasEditorDocument(options) {
11735
+ const { history, scenes: scenes2 } = options;
11736
+ const snapshot = () => ({
11737
+ nodes: options.getNodes().map(stripNode),
11738
+ edges: options.getEdges().map(stripEdge),
11739
+ ...scenes2 ? { scenes: scenes2.toJSON().scenes } : {}
11740
+ });
11741
+ const apply = (doc) => {
11742
+ options.setNodes(doc.nodes.map((n3) => ({ ...n3 })));
11743
+ options.setEdges(doc.edges.map((e) => ({ ...e })));
11744
+ if (scenes2) scenes2.load(_nullishCoalesce(doc.scenes, () => ( [])));
11745
+ };
11746
+ return _chunkM4MIZPQIcjs.defineEditorDocument.call(void 0, {
11747
+ kind: "canvas",
11748
+ get: snapshot,
11749
+ load: (document2, { history: mode }) => {
11750
+ checkCanvasDocument(document2);
11751
+ const next = document2;
11752
+ if (mode === "record") {
11753
+ const before = snapshot();
11754
+ history.execute({ name: "Load canvas", execute: () => apply(next), undo: () => apply(before) });
11755
+ return;
11756
+ }
11757
+ apply(next);
11758
+ history.clear();
11759
+ },
11760
+ subscribe: (listener) => {
11761
+ const offs = [history.subscribe(() => listener())];
11762
+ if (scenes2) offs.push(scenes2.subscribe(() => listener()));
11763
+ if (options.subscribe) offs.push(options.subscribe(listener));
11764
+ return () => offs.forEach((off) => off());
11765
+ },
11766
+ history: {
11767
+ undo: () => history.undo(),
11768
+ redo: () => history.redo(),
11769
+ getState: () => history.getState()
11770
+ },
11771
+ readOnly: options.readOnly
11772
+ });
11773
+ }
11774
+ function createCanvasGestureRecorder(options) {
11775
+ let before = null;
11776
+ const take = () => ({ nodes: options.getNodes(), edges: _optionalChain([options, 'access', _508 => _508.getEdges, 'optionalCall', _509 => _509()]) });
11777
+ const key = (s) => JSON.stringify([s.nodes.map(stripNode), _optionalChain([s, 'access', _510 => _510.edges, 'optionalAccess', _511 => _511.map, 'call', _512 => _512(stripEdge)])]);
11778
+ const restore = (s) => {
11779
+ options.setNodes(s.nodes);
11780
+ if (s.edges && options.setEdges) options.setEdges(s.edges);
11781
+ };
11782
+ return {
11783
+ /** Remembers the canvas as it is before the gesture. */
11784
+ begin() {
11785
+ before = take();
11786
+ },
11787
+ /** Records the gesture as one undo step named `name`, if it changed anything. Returns whether it did. */
11788
+ end(name = "Move") {
11789
+ const start = before;
11790
+ before = null;
11791
+ if (!start) return false;
11792
+ const after = take();
11793
+ if (key(start) === key(after)) return false;
11794
+ options.history.execute({ name, execute: () => restore(after), undo: () => restore(start) });
11795
+ return true;
11796
+ },
11797
+ /** Forgets a gesture without recording it. */
11798
+ cancel() {
11799
+ before = null;
11800
+ }
11801
+ };
11802
+ }
11803
+
11804
+
11805
+
11697
11806
 
11698
11807
 
11699
11808
 
@@ -12191,4 +12300,4 @@ function createCanvasEffectsToolProvider(controller, options = {}) {
12191
12300
 
12192
12301
 
12193
12302
 
12194
- exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = _chunkDWJJI6RTcjs.ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = _chunkDWJJI6RTcjs.ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = _chunkSUF6WRXRcjs.ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = _chunkSUF6WRXRcjs.AnimationPlayer; exports.BUILTIN_FAMILY_SCENES = BUILTIN_FAMILY_SCENES; exports.CANVAS_CAPTURE_CHROME_SELECTORS = CANVAS_CAPTURE_CHROME_SELECTORS; exports.CANVAS_CAPTURE_OVERLAY_SELECTORS = CANVAS_CAPTURE_OVERLAY_SELECTORS; exports.CANVAS_CAPTURE_VIEWPORT_SELECTOR = CANVAS_CAPTURE_VIEWPORT_SELECTOR; exports.CANVAS_COMPONENT_DRAG_TYPE = CANVAS_COMPONENT_DRAG_TYPE; exports.CANVAS_EFFECT_PLACES = CANVAS_EFFECT_PLACES; exports.CANVAS_GRADIENT_PRESETS = _chunkNM3G4VQTcjs.CANVAS_GRADIENT_PRESETS; exports.CANVAS_TOKEN_PROPERTIES = CANVAS_TOKEN_PROPERTIES; exports.CARD_INSPECTION_ZONES = CARD_INSPECTION_ZONES; exports.CHILD_LAYOUT_DATA_KEY = CHILD_LAYOUT_DATA_KEY; exports.COMPONENT_DATA_KEY = COMPONENT_DATA_KEY; exports.COMPONENT_OVERRIDES_DATA_KEY = COMPONENT_OVERRIDES_DATA_KEY; exports.COMPONENT_PROPERTY_REFS_DATA_KEY = COMPONENT_PROPERTY_REFS_DATA_KEY; exports.COMPONENT_SET_DATA_KEY = COMPONENT_SET_DATA_KEY; exports.COMPONENT_SOURCE_DATA_KEY = COMPONENT_SOURCE_DATA_KEY; exports.CONNECTION_LINE_TYPES = CONNECTION_LINE_TYPES; exports.CSS_ANIMATION_PROPERTIES = CSS_ANIMATION_PROPERTIES; exports.CSS_VARIABLE_DIAGRAM_SCENE_THEME = CSS_VARIABLE_DIAGRAM_SCENE_THEME; exports.CUBIC_BEZIER_PRESETS = _chunkDWJJI6RTcjs.CUBIC_BEZIER_PRESETS; exports.CanvasScenesStore = CanvasScenesStore; exports.DEFAULT_ARRANGE_SHORTCUTS = _chunk4EFNS2HVcjs.DEFAULT_ARRANGE_SHORTCUTS; exports.DEFAULT_CURSOR_INACTIVITY_MS = DEFAULT_CURSOR_INACTIVITY_MS; exports.DEFAULT_DIAGRAM_NODE_HEIGHT = DEFAULT_DIAGRAM_NODE_HEIGHT; exports.DEFAULT_DIAGRAM_NODE_WIDTH = DEFAULT_DIAGRAM_NODE_WIDTH; exports.DEFAULT_NODE_HEIGHT = _chunkEL4PSKFTcjs.DEFAULT_NODE_HEIGHT; exports.DEFAULT_NODE_WIDTH = _chunkEL4PSKFTcjs.DEFAULT_NODE_WIDTH; exports.DEFAULT_PLACEMENT_GAP = _chunkEL4PSKFTcjs.DEFAULT_PLACEMENT_GAP; exports.DIAGRAM_MARKER_IDS = DIAGRAM_MARKER_IDS; exports.DIAGRAM_RASTER_MAX_SIZE = DIAGRAM_RASTER_MAX_SIZE; exports.DIAGRAM_SCENE_DARK_THEME = DIAGRAM_SCENE_DARK_THEME; exports.DIAGRAM_SCENE_LIGHT_THEME = DIAGRAM_SCENE_LIGHT_THEME; exports.DIAGRAM_SVG_DARK_THEME = DIAGRAM_SVG_DARK_THEME; exports.DIAGRAM_SVG_LIGHT_THEME = DIAGRAM_SVG_LIGHT_THEME; exports.DIAGRAM_TITLE_TARGET = DIAGRAM_TITLE_TARGET; exports.DiagramStream = DiagramStream; exports.INSTANCE_DATA_KEY = INSTANCE_DATA_KEY; exports.LOCKED_DATA_KEY = _chunkEL4PSKFTcjs.LOCKED_DATA_KEY; exports.LOCKED_PREVIOUS_FLAGS_KEY = _chunkEL4PSKFTcjs.LOCKED_PREVIOUS_FLAGS_KEY; exports.MAX_KEYFRAME_REFS = MAX_KEYFRAME_REFS; exports.MERMAID_SHAPE_PAINT = MERMAID_SHAPE_PAINT; exports.ManualClock = _chunkSUF6WRXRcjs.ManualClock; exports.PATHFINDER_OPERATIONS = _chunkYAWLMF3Ocjs.PATHFINDER_OPERATIONS; exports.PIXERATE_BRAND_GRADIENT = _chunkNM3G4VQTcjs.PIXERATE_BRAND_GRADIENT; exports.PathOpsError = _chunkGF2RBSDMcjs.PathOpsError; exports.PlanarMap = _chunkYAWLMF3Ocjs.PlanarMap; exports.RESIZE_HANDLES = RESIZE_HANDLES; exports.SHAPE_DATA_KEY = SHAPE_DATA_KEY; exports.SHAPE_KINDS = _chunkNM3G4VQTcjs.SHAPE_KINDS; exports.SHAPE_NODE_TYPE = SHAPE_NODE_TYPE; exports.SHAPE_OPERATIONS = SHAPE_OPERATIONS; exports.SPRING_PRESETS = _chunkDWJJI6RTcjs.SPRING_PRESETS; exports.StreamingLayoutManager = StreamingLayoutManager; exports.TOKEN_BINDINGS_DATA_KEY = TOKEN_BINDINGS_DATA_KEY; exports.TOKEN_MODES_DATA_KEY = TOKEN_MODES_DATA_KEY; exports.addCanvasVariant = addCanvasVariant; exports.addKeyframesAtTime = addKeyframesAtTime; exports.alignNodes = _chunkEL4PSKFTcjs.alignNodes; exports.angleToSvgLinearCoords = _chunkNM3G4VQTcjs.angleToSvgLinearCoords; exports.animateNode = animateNode; exports.applyAnimation = applyAnimation; exports.applyAnimationOverrides = applyAnimationOverrides; exports.applyConstraints = applyConstraints; exports.applyNodeUpdates = _chunkEL4PSKFTcjs.applyNodeUpdates; exports.applyShapeCombination = applyShapeCombination; exports.applyShapeReplacement = applyShapeReplacement; exports.arcToCubics = _chunkGF2RBSDMcjs.arcToCubics; exports.architectureScene = architectureScene; exports.autoLayoutDiagram = autoLayoutDiagram; exports.bezierPathArea = _chunkGF2RBSDMcjs.bezierPathArea; exports.bezierPathBounds = _chunkGF2RBSDMcjs.bezierPathBounds; exports.bezierPathLength = _chunkGF2RBSDMcjs.bezierPathLength; exports.bezierPathPointAtLength = _chunkGF2RBSDMcjs.bezierPathPointAtLength; exports.bezierPathSignedArea = _chunkGF2RBSDMcjs.bezierPathSignedArea; exports.bezierPathToSvg = _chunkGF2RBSDMcjs.bezierPathToSvg; exports.bindCanvasComponentProperty = bindCanvasComponentProperty; exports.bindCanvasToken = bindCanvasToken; exports.blendDiagramLayout = blendDiagramLayout; exports.blendLayout = blendLayout; exports.boundsOf = _chunkEL4PSKFTcjs.boundsOf; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeSeed = _chunkPUC43JPTcjs.brushstrokeSeed; exports.c4Scene = c4Scene; exports.calculateCursorArrowRotation = calculateCursorArrowRotation; exports.calculateCurvedPath = calculateCurvedPath; exports.calculateDagreReflowDisplacement = calculateDagreReflowDisplacement; exports.calculateDirectionalDisplacement = calculateDirectionalDisplacement; exports.canCombineShapeNodes = canCombineShapeNodes; exports.canOffsetShapeNodes = canOffsetShapeNodes; exports.canOutlineShapeNodeStrokes = canOutlineShapeNodeStrokes; exports.canvasEffectsPool = canvasEffectsPool; exports.canvasHeight = canvasHeight; exports.canvasNodeCaptureRect = canvasNodeCaptureRect; exports.canvasNodeEffect = canvasNodeEffect; exports.captureCanvasView = captureCanvasView; exports.centerNodes = _chunkEL4PSKFTcjs.centerNodes; exports.centre = _chunkEL4PSKFTcjs.centre; exports.clampAnimationValue = clampAnimationValue; exports.clampLayoutSize = clampLayoutSize; exports.closeContour = _chunkGF2RBSDMcjs.closeContour; exports.collectDescendantIds = collectDescendantIds; exports.combineCanvasComponentsAsVariants = combineCanvasComponentsAsVariants; exports.combineShapeNodes = combineShapeNodes; exports.computeDragBounds = computeDragBounds; exports.computeDragBoundsFromPoints = computeDragBoundsFromPoints; exports.computeNodesBoundingBox = computeNodesBoundingBox; exports.computeSnapGuides = computeSnapGuides; exports.connectedDiagramOnly = connectedDiagramOnly; exports.connectedOnly = connectedOnly; exports.contourEnclosesArea = _chunkYAWLMF3Ocjs.contourEnclosesArea; exports.contourSignedArea = _chunkGF2RBSDMcjs.contourSignedArea; exports.contoursToPath = _chunkGF2RBSDMcjs.contoursToPath; exports.copyKeyframes = copyKeyframes; exports.countPathSegments = _chunkGF2RBSDMcjs.countPathSegments; exports.createAnimationPlayer = _chunkSUF6WRXRcjs.createAnimationPlayer; exports.createBezierTrajectory = createBezierTrajectory; exports.createCanvasAnimationController = createCanvasAnimationController; exports.createCanvasArrangeController = createCanvasArrangeController; exports.createCanvasAutoLayoutController = createCanvasAutoLayoutController; exports.createCanvasCaptureSurface = createCanvasCaptureSurface; exports.createCanvasCaptureToolProvider = createCanvasCaptureToolProvider; exports.createCanvasComponent = createCanvasComponent; exports.createCanvasComponentsController = createCanvasComponentsController; exports.createCanvasDrawController = createCanvasDrawController; exports.createCanvasEffectsController = createCanvasEffectsController; exports.createCanvasEffectsToolProvider = createCanvasEffectsToolProvider; exports.createCanvasInstance = createCanvasInstance; exports.createCanvasPlaybackLocator = createCanvasPlaybackLocator; exports.createCanvasScenesStore = createCanvasScenesStore; exports.createDefaultStrokeStyle = createDefaultStrokeStyle; exports.createFanOutTrajectory = createFanOutTrajectory; exports.createGuideIndex = createGuideIndex; exports.createNodeGuideIndex = createNodeGuideIndex; exports.createNodeLookup = _chunkEL4PSKFTcjs.createNodeLookup; exports.cubicBezierAt = _chunkDWJJI6RTcjs.cubicBezierAt; exports.cubicPointAt = _chunkNM3G4VQTcjs.cubicPointAt; exports.cubicsToPathData = _chunkNM3G4VQTcjs.cubicsToPathData; exports.cutOutPiece = _chunkYAWLMF3Ocjs.cutOutPiece; exports.dashContours = _chunkGF2RBSDMcjs.dashContours; exports.defaultEasing = defaultEasing; exports.deleteKeyframes = deleteKeyframes; exports.detachCanvasInstance = detachCanvasInstance; exports.detachTokenBindings = detachTokenBindings; exports.diagramCanvasHeight = diagramCanvasHeight; exports.diagramFileName = diagramFileName; exports.diagramGroupSize = diagramGroupSize; exports.diagramImageSize = diagramImageSize; exports.diagramLayoutBounds = diagramLayoutBounds; exports.diagramMarksBounds = diagramMarksBounds; exports.diagramMarksToSvg = diagramMarksToSvg; exports.diagramRenameOp = diagramRenameOp; exports.diagramTargetLabel = diagramTargetLabel; exports.diagramTextBaseline = diagramTextBaseline; exports.diffOverrideGroups = diffOverrideGroups; exports.distanceToBezierPath = _chunkGF2RBSDMcjs.distanceToBezierPath; exports.distributeNodes = _chunkEL4PSKFTcjs.distributeNodes; exports.dividePaths = _chunkGF2RBSDMcjs.dividePaths; exports.dividePolygons = _chunkGF2RBSDMcjs.dividePolygons; exports.downloadDiagramPng = downloadDiagramPng; exports.easeDiagramTween = easeDiagramTween; exports.easingFromInfluence = _chunkDWJJI6RTcjs.easingFromInfluence; exports.easingLabel = _chunkDWJJI6RTcjs.easingLabel; exports.easingToCss = _chunkDWJJI6RTcjs.easingToCss; exports.elasticAt = _chunkDWJJI6RTcjs.elasticAt; exports.ensureDiagramLayout = ensureDiagramLayout; exports.ensureLayout = _chunkEL4PSKFTcjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateDiagramCanvasHeight = estimateDiagramCanvasHeight; exports.estimateDiagramNodeSize = estimateDiagramNodeSize; exports.estimateNodeSize = _chunkEL4PSKFTcjs.estimateNodeSize; exports.estimateTextWidth = estimateTextWidth2; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = _chunkDWJJI6RTcjs.evaluateEasing; exports.evaluateTrack = _chunkSUF6WRXRcjs.evaluateTrack; exports.excludePaths = _chunkGF2RBSDMcjs.excludePaths; exports.exportCssAnimation = exportCssAnimation; exports.familySceneFromLayout = familySceneFromLayout; exports.findConnectorSnap = findConnectorSnap; exports.findStrokesAtPoint = findStrokesAtPoint; exports.findVariant = findVariant; exports.fitCubicRun = _chunkNM3G4VQTcjs.fitCubicRun; exports.fitCubicWithTangents = _chunkNM3G4VQTcjs.fitCubicWithTangents; exports.fitCubics = _chunkNM3G4VQTcjs.fitCubics; exports.fitFreehandPath = _chunkNM3G4VQTcjs.fitFreehandPath; exports.fitPathData = _chunkNM3G4VQTcjs.fitPathData; exports.fitViewportToNodes = fitViewportToNodes; exports.fitViewportToRect = fitViewportToRect; exports.flattenSvgPath = _chunkNM3G4VQTcjs.flattenSvgPath; exports.flowSide = _chunkEL4PSKFTcjs.flowSide; exports.formatAgentCursorName = formatAgentCursorName; exports.formatAnimationTime = formatAnimationTime; exports.formatNumber = _chunkNM3G4VQTcjs.formatNumber; exports.formatOklab = _chunkLEUZ4FRCcjs.formatOklab; exports.formatVariantName = formatVariantName; exports.freehandBrushstroke = freehandBrushstroke; exports.ganttScene = ganttScene; exports.getAbsolutePosition = _chunkEL4PSKFTcjs.getAbsolutePosition; exports.getAgentCardAnchor = getAgentCardAnchor; exports.getAnimatableProperty = getAnimatableProperty; exports.getAnimatedProperties = getAnimatedProperties; exports.getAnimatedValue = getAnimatedValue; exports.getAnimationDuration = getAnimationDuration; exports.getAnimationTrack = getAnimationTrack; exports.getAutoLayout = getAutoLayout; exports.getAutoLayoutGrid = getAutoLayoutGrid; exports.getAutoLayoutInsertTarget = getAutoLayoutInsertTarget; exports.getBindableTokenProperties = getBindableTokenProperties; exports.getBrushedShapeSvg = _chunkPUC43JPTcjs.getBrushedShapeSvg; exports.getCanvasComponentDragId = getCanvasComponentDragId; exports.getCanvasTokenProperty = getCanvasTokenProperty; exports.getCenteredNodePosition = _chunkEL4PSKFTcjs.getCenteredNodePosition; exports.getChildLayout = getChildLayout; exports.getComponentData = getComponentData; exports.getComponentInstances = getComponentInstances; exports.getComponentPropertyDefs = getComponentPropertyDefs; exports.getComponentPropertyRefs = getComponentPropertyRefs; exports.getComponentSourceId = getComponentSourceId; exports.getCssPropertyAnimations = getCssPropertyAnimations; exports.getCursorTransitionDuration = getCursorTransitionDuration; exports.getDefaultVariant = getDefaultVariant; exports.getEffectiveTokenModes = getEffectiveTokenModes; exports.getFamilyScene = getFamilyScene; exports.getFlowChildren = getFlowChildren; exports.getInstanceData = getInstanceData; exports.getInstanceProperties = getInstanceProperties; exports.getInstanceStatus = getInstanceStatus; exports.getKeyframeTimes = getKeyframeTimes; exports.getLayerName = getLayerName; exports.getLayoutParent = getLayoutParent; exports.getLayoutSizing = getLayoutSizing; exports.getLayoutedNodes = _chunkEL4PSKFTcjs.getLayoutedNodes; exports.getNaturalMovementTiming = getNaturalMovementTiming; exports.getNextVariantValues = getNextVariantValues; exports.getNodeAnimation = getNodeAnimation; exports.getNodeOverrides = getNodeOverrides; exports.getNodeRect = _chunkEL4PSKFTcjs.getNodeRect; exports.getNodeShape = getNodeShape; exports.getNodeSize = _chunkEL4PSKFTcjs.getNodeSize; exports.getNodeTokenBindings = getNodeTokenBindings; exports.getNodeTokenModes = getNodeTokenModes; exports.getOwningComponent = getOwningComponent; exports.getOwningInstance = getOwningInstance; exports.getResizingNodeRect = getResizingNodeRect; exports.getRootInstance = getRootInstance; exports.getShapeRenderData = _chunkNM3G4VQTcjs.getShapeRenderData; exports.getShapeSvg = _chunkNM3G4VQTcjs.getShapeSvg; exports.getTimelineRows = getTimelineRows; exports.getTimelineTicks = getTimelineTicks; exports.getTokenPropertyScope = getTokenPropertyScope; exports.getTokensForProperty = getTokensForProperty; exports.getVariantConflicts = getVariantConflicts; exports.getVariantOptions = getVariantOptions; exports.getVariantSet = getVariantSet; exports.getVariantValues = getVariantValues; exports.gitGraphScene = gitGraphScene; exports.gradientToSvgDef = _chunkNM3G4VQTcjs.gradientToSvgDef; exports.handlePoint = handlePoint; exports.hasFamilyScene = hasFamilyScene; exports.hasVisibleStroke = hasVisibleStroke; exports.hashString = hashString; exports.hatchPath = _chunkYAWLMF3Ocjs.hatchPath; exports.inferResizeHandle = inferResizeHandle; exports.inspectCanvasInstance = inspectCanvasInstance; exports.inspectNodeTokens = inspectNodeTokens; exports.interiorPoint = _chunkYAWLMF3Ocjs.interiorPoint; exports.interpolateAnimationValue = _chunkSUF6WRXRcjs.interpolateAnimationValue; exports.intersectPaths = _chunkGF2RBSDMcjs.intersectPaths; exports.intersectPolygons = _chunkGF2RBSDMcjs.intersectPolygons; exports.invertNodeUpdates = _chunkEL4PSKFTcjs.invertNodeUpdates; exports.isAgentCursor = isAgentCursor; exports.isAnimationEasing = _chunkDWJJI6RTcjs.isAnimationEasing; exports.isAnimationKeyframe = _chunkSUF6WRXRcjs.isAnimationKeyframe; exports.isAutoLayoutFrame = isAutoLayoutFrame; exports.isBrushedShape = _chunkPUC43JPTcjs.isBrushedShape; exports.isCanvasComponent = isCanvasComponent; exports.isCanvasComponentSet = isCanvasComponentSet; exports.isCanvasGradient = _chunkNM3G4VQTcjs.isCanvasGradient; exports.isCanvasInstance = isCanvasInstance; exports.isCssExportExact = isCssExportExact; exports.isEventFromTextInput = isEventFromTextInput; exports.isInsideInstance = isInsideInstance; exports.isKeyframeSelected = isKeyframeSelected; exports.isLocked = _chunkEL4PSKFTcjs.isLocked; exports.isMeasureModifierHeld = isMeasureModifierHeld; exports.isNodeAnimated = isNodeAnimated; exports.isShapeDescription = _chunkNM3G4VQTcjs.isShapeDescription; exports.isShapeNode = isShapeNode; exports.isStraightCubic = _chunkNM3G4VQTcjs.isStraightCubic; exports.isValidCanvasEdge = isValidCanvasEdge; exports.isValidCanvasNode = isValidCanvasNode; exports.isValidCanvasScene = isValidCanvasScene; exports.isValidUrl = isValidUrl; exports.journeyScene = journeyScene; exports.layoutAll = layoutAll; exports.layoutBounds = layoutBounds; exports.layoutFrame = layoutFrame; exports.layoutUp = layoutUp; exports.layoutUpMany = layoutUpMany; exports.linearPositionTrajectory = linearPositionTrajectory; exports.linearTrajectory = linearTrajectory; exports.listCanvasBrushes = _chunkPUC43JPTcjs.listCanvasBrushes; exports.listCanvasComponents = listCanvasComponents; exports.loadCanvasBrushstrokeRenderer = _chunkPUC43JPTcjs.loadCanvasBrushstrokeRenderer; exports.lockNodes = _chunkEL4PSKFTcjs.lockNodes; exports.makeSizingCoherent = makeSizingCoherent; exports.matchArrangeShortcut = _chunk4EFNS2HVcjs.matchArrangeShortcut; exports.matchSize = _chunkEL4PSKFTcjs.matchSize; exports.measureBetween = measureBetween; exports.measureLabel = measureLabel; exports.measureSelection = measureSelection; exports.measureToLine = measureToLine; exports.mergeNodeUpdates = mergeNodeUpdates; exports.mermaidEdgeDash = mermaidEdgeDash; exports.mermaidEdgeMarker = mermaidEdgeMarker; exports.mermaidEdgeWidth = mermaidEdgeWidth; exports.mermaidFlowEdges = mermaidFlowEdges; exports.mermaidFlowNodes = mermaidFlowNodes; exports.mermaidLabelLines = mermaidLabelLines; exports.mermaidMarkerId = mermaidMarkerId; exports.mermaidMovesFromCanvas = mermaidMovesFromCanvas; exports.mermaidNodeMembers = mermaidNodeMembers; exports.mermaidNodePaint = mermaidNodePaint; exports.mermaidShapePaths = mermaidShapePaths; exports.mermaidThumbnailSvg = mermaidThumbnailSvg; exports.mermaidToCanvas = mermaidToCanvas; exports.mermaidToScene = mermaidToScene; exports.mermaidToSvg = mermaidToSvg; exports.mindmapScene = mindmapScene; exports.mixColorsOklab = _chunkLEUZ4FRCcjs.mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = _chunkGF2RBSDMcjs.multiPolygonArea; exports.multiPolygonBounds = _chunkGF2RBSDMcjs.multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = _chunkGF2RBSDMcjs.normalizeBezierPath; exports.normalizeKeyframes = _chunkSUF6WRXRcjs.normalizeKeyframes; exports.offsetPath = _chunkGF2RBSDMcjs.offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = _chunkLEUZ4FRCcjs.oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = _chunkGF2RBSDMcjs.outlineStroke; exports.overlaps = _chunkEL4PSKFTcjs.overlaps; exports.pageHidden = _chunkSUF6WRXRcjs.pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = _chunkDWJJI6RTcjs.parseCssEasing; exports.parseCssGradient = _chunkNM3G4VQTcjs.parseCssGradient; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseMermaidStyles = parseMermaidStyles; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = _chunkLEUZ4FRCcjs.parseOklab; exports.parseSvgPath = _chunkNM3G4VQTcjs.parseSvgPath; exports.parseVariantName = parseVariantName; exports.pasteKeyframes = pasteKeyframes; exports.pathBoolean = _chunkGF2RBSDMcjs.pathBoolean; exports.pathBooleanSelect = _chunkGF2RBSDMcjs.pathBooleanSelect; exports.pathDataToPolyline = _chunkPUC43JPTcjs.pathDataToPolyline; exports.pathToContours = _chunkGF2RBSDMcjs.pathToContours; exports.pathfinder = _chunkYAWLMF3Ocjs.pathfinder; exports.pieScene = pieScene; exports.placeBeside = _chunkEL4PSKFTcjs.placeBeside; exports.placeInView = _chunkEL4PSKFTcjs.placeInView; exports.planarSplit = _chunkGF2RBSDMcjs.planarSplit; exports.playCanvasSceneTransition = playCanvasSceneTransition; exports.playWebAnimations = playWebAnimations; exports.pointInBezierPath = _chunkGF2RBSDMcjs.pointInBezierPath; exports.pointInMultiPolygon = _chunkGF2RBSDMcjs.pointInMultiPolygon; exports.pointInRings = _chunkGF2RBSDMcjs.pointInRings; exports.pointerPenSample = pointerPenSample; exports.polygonArea = _chunkGF2RBSDMcjs.polygonArea; exports.polygonBoolean = _chunkGF2RBSDMcjs.polygonBoolean; exports.polygonToSvgPath = _chunkNM3G4VQTcjs.polygonToSvgPath; exports.positionToSide = positionToSide; exports.profileAlongPolyline = _chunkPUC43JPTcjs.profileAlongPolyline; exports.pruneCanvasTokenModes = pruneCanvasTokenModes; exports.pushCanvasInstanceOverrides = pushCanvasInstanceOverrides; exports.quadrantScene = quadrantScene; exports.radarChartSpec = radarChartSpec; exports.radarScene = radarScene; exports.rasterSize = rasterSize; exports.rasterizeSvg = rasterizeSvg; exports.readAnimatableValue = readAnimatableValue; exports.readNodeStyleProperty = readNodeStyleProperty; exports.readOverrideGroup = readOverrideGroup; exports.readStyleSize = _chunkEL4PSKFTcjs.readStyleSize; exports.realClock = _chunkSUF6WRXRcjs.realClock; exports.recordAnimationChanges = recordAnimationChanges; exports.registerFamilyScene = registerFamilyScene; exports.relayoutUpdates = relayoutUpdates; exports.remapPastedNodes = remapPastedNodes; exports.removeCanvasVariant = removeCanvasVariant; exports.removeTrack = removeTrack; exports.renameCanvasVariantProperty = renameCanvasVariantProperty; exports.renameCanvasVariantValue = renameCanvasVariantValue; exports.renderCanvasBrushSwatch = _chunkPUC43JPTcjs.renderCanvasBrushSwatch; exports.renderShapeBrushstroke = _chunkPUC43JPTcjs.renderShapeBrushstroke; exports.reorderNodes = _chunkEL4PSKFTcjs.reorderNodes; exports.repositionNodesTo = repositionNodesTo; exports.resetCanvasInstanceOverrides = resetCanvasInstanceOverrides; exports.resizeHandleAxes = resizeHandleAxes; exports.resolveCanvasGradient = _chunkNM3G4VQTcjs.resolveCanvasGradient; exports.resolveCanvasTokens = resolveCanvasTokens; exports.resolveEasing = _chunkDWJJI6RTcjs.resolveEasing; exports.resolveMermaidStyles = resolveMermaidStyles; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.reverseCubicBezier = _chunkDWJJI6RTcjs.reverseCubicBezier; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = _chunkLEUZ4FRCcjs.rgbToOklab; exports.ringSignedArea = _chunkGF2RBSDMcjs.ringSignedArea; exports.runCanvasNodeEffect = runCanvasNodeEffect; exports.runMultiNodeTransition = runMultiNodeTransition; exports.sampleAnimationFrames = sampleAnimationFrames; exports.scaleKeyframes = scaleKeyframes; exports.sceneColor = sceneColor; exports.segmentBounds = _chunkGF2RBSDMcjs.segmentBounds; exports.segmentCurvature = _chunkGF2RBSDMcjs.segmentCurvature; exports.segmentDerivative = _chunkGF2RBSDMcjs.segmentDerivative; exports.segmentExtrema = _chunkGF2RBSDMcjs.segmentExtrema; exports.segmentIntersections = _chunkGF2RBSDMcjs.segmentIntersections; exports.segmentLength = _chunkGF2RBSDMcjs.segmentLength; exports.segmentNearest = _chunkGF2RBSDMcjs.segmentNearest; exports.segmentParamAtLength = _chunkGF2RBSDMcjs.segmentParamAtLength; exports.segmentPoint = _chunkGF2RBSDMcjs.segmentPoint; exports.segmentTangent = _chunkGF2RBSDMcjs.segmentTangent; exports.sequenceScene = sequenceScene; exports.serializeCanvasNodes = serializeCanvasNodes; exports.setCanvasComponentProperty = setCanvasComponentProperty; exports.setCanvasInstanceProperties = setCanvasInstanceProperties; exports.setCanvasTokenMode = setCanvasTokenMode; exports.setCanvasVariantProperties = setCanvasVariantProperties; exports.setKeyframe = setKeyframe; exports.setKeyframeEasing = setKeyframeEasing; exports.setMotionPath = setMotionPath; exports.setTrackEnabled = setTrackEnabled; exports.shapeNodeToBezierPath = shapeNodeToBezierPath; exports.shapeNodeToPolygon = shapeNodeToPolygon; exports.shapeToBezierPath = shapeToBezierPath; exports.shapeToPolygon = _chunkNM3G4VQTcjs.shapeToPolygon; exports.sideToPosition = sideToPosition; exports.simplifyRing = _chunkNM3G4VQTcjs.simplifyRing; exports.snapKeyframeDelta = snapKeyframeDelta; exports.snapNodeDrag = snapNodeDrag; exports.snapNodeResize = snapNodeResize; exports.snapResize = snapResize; exports.snapTimeToFrame = snapTimeToFrame; exports.snapToGrid = snapToGrid; exports.splitSegment = _chunkGF2RBSDMcjs.splitSegment; exports.springAt = _chunkDWJJI6RTcjs.springAt; exports.springSettleMs = _chunkDWJJI6RTcjs.springSettleMs; exports.streamedDiagramText = streamedDiagramText; exports.streamlinePoints = streamlinePoints; exports.strokeBoundingBox = strokeBoundingBox; exports.strokeOutlineRings = _chunkGF2RBSDMcjs.strokeOutlineRings; exports.strokePointsToPathData = strokePointsToPathData; exports.strokeToShapeNode = strokeToShapeNode; exports.subSegment = _chunkGF2RBSDMcjs.subSegment; exports.subtractPaths = _chunkGF2RBSDMcjs.subtractPaths; exports.subtractPolygons = _chunkGF2RBSDMcjs.subtractPolygons; exports.swapCanvasInstance = swapCanvasInstance; exports.syncAllCanvasInstances = syncAllCanvasInstances; exports.syncCanvasComponents = syncCanvasComponents; exports.syncCanvasInstance = syncCanvasInstance; exports.timeToX = timeToX; exports.timelineScene = timelineScene; exports.toBezierPath = _chunkGF2RBSDMcjs.toBezierPath; exports.toWebAnimations = toWebAnimations; exports.toggleLockNodes = _chunkEL4PSKFTcjs.toggleLockNodes; exports.transformBezierPath = _chunkGF2RBSDMcjs.transformBezierPath; exports.transitionCanvasView = transitionCanvasView; exports.trimSegments = _chunkGF2RBSDMcjs.trimSegments; exports.unionPolygons = _chunkGF2RBSDMcjs.unionPolygons; exports.unitePaths = _chunkGF2RBSDMcjs.unitePaths; exports.unlockNodes = _chunkEL4PSKFTcjs.unlockNodes; exports.updateKeyframe = updateKeyframe; exports.validateCanvasBrush = _chunkPUC43JPTcjs.validateCanvasBrush; exports.validateCanvasBrushPaint = _chunkPUC43JPTcjs.validateCanvasBrushPaint; exports.windingNumber = _chunkGF2RBSDMcjs.windingNumber; exports.withNodeAnimation = withNodeAnimation; exports.withStyleOpacity = withStyleOpacity; exports.withStyleSize = _chunkEL4PSKFTcjs.withStyleSize; exports.wouldCreateComponentCycle = wouldCreateComponentCycle; exports.wrapAnimationTime = _chunkSUF6WRXRcjs.wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = _chunkGF2RBSDMcjs.xorPolygons; exports.xyChartScene = xyChartScene; exports.xyChartSpec = xyChartSpec;
12303
+ exports.ANIMATABLE_PROPERTIES = ANIMATABLE_PROPERTIES; exports.ANIMATION_DATA_KEY = ANIMATION_DATA_KEY; exports.ANIMATION_EASING_LABELS = _chunkDWJJI6RTcjs.ANIMATION_EASING_LABELS; exports.ANIMATION_EASING_PRESETS = _chunkDWJJI6RTcjs.ANIMATION_EASING_PRESETS; exports.ANIMATION_TIME_EPSILON = _chunkSUF6WRXRcjs.ANIMATION_TIME_EPSILON; exports.AUTO_LAYOUT_DATA_KEY = AUTO_LAYOUT_DATA_KEY; exports.AnimationEditError = AnimationEditError; exports.AnimationPlayer = _chunkSUF6WRXRcjs.AnimationPlayer; exports.BUILTIN_FAMILY_SCENES = BUILTIN_FAMILY_SCENES; exports.CANVAS_CAPTURE_CHROME_SELECTORS = CANVAS_CAPTURE_CHROME_SELECTORS; exports.CANVAS_CAPTURE_OVERLAY_SELECTORS = CANVAS_CAPTURE_OVERLAY_SELECTORS; exports.CANVAS_CAPTURE_VIEWPORT_SELECTOR = CANVAS_CAPTURE_VIEWPORT_SELECTOR; exports.CANVAS_COMPONENT_DRAG_TYPE = CANVAS_COMPONENT_DRAG_TYPE; exports.CANVAS_EFFECT_PLACES = CANVAS_EFFECT_PLACES; exports.CANVAS_GRADIENT_PRESETS = _chunkNM3G4VQTcjs.CANVAS_GRADIENT_PRESETS; exports.CANVAS_TOKEN_PROPERTIES = CANVAS_TOKEN_PROPERTIES; exports.CARD_INSPECTION_ZONES = CARD_INSPECTION_ZONES; exports.CHILD_LAYOUT_DATA_KEY = CHILD_LAYOUT_DATA_KEY; exports.COMPONENT_DATA_KEY = COMPONENT_DATA_KEY; exports.COMPONENT_OVERRIDES_DATA_KEY = COMPONENT_OVERRIDES_DATA_KEY; exports.COMPONENT_PROPERTY_REFS_DATA_KEY = COMPONENT_PROPERTY_REFS_DATA_KEY; exports.COMPONENT_SET_DATA_KEY = COMPONENT_SET_DATA_KEY; exports.COMPONENT_SOURCE_DATA_KEY = COMPONENT_SOURCE_DATA_KEY; exports.CONNECTION_LINE_TYPES = CONNECTION_LINE_TYPES; exports.CSS_ANIMATION_PROPERTIES = CSS_ANIMATION_PROPERTIES; exports.CSS_VARIABLE_DIAGRAM_SCENE_THEME = CSS_VARIABLE_DIAGRAM_SCENE_THEME; exports.CUBIC_BEZIER_PRESETS = _chunkDWJJI6RTcjs.CUBIC_BEZIER_PRESETS; exports.CanvasScenesStore = CanvasScenesStore; exports.DEFAULT_ARRANGE_SHORTCUTS = _chunk4EFNS2HVcjs.DEFAULT_ARRANGE_SHORTCUTS; exports.DEFAULT_CURSOR_INACTIVITY_MS = DEFAULT_CURSOR_INACTIVITY_MS; exports.DEFAULT_DIAGRAM_NODE_HEIGHT = DEFAULT_DIAGRAM_NODE_HEIGHT; exports.DEFAULT_DIAGRAM_NODE_WIDTH = DEFAULT_DIAGRAM_NODE_WIDTH; exports.DEFAULT_NODE_HEIGHT = _chunkEL4PSKFTcjs.DEFAULT_NODE_HEIGHT; exports.DEFAULT_NODE_WIDTH = _chunkEL4PSKFTcjs.DEFAULT_NODE_WIDTH; exports.DEFAULT_PLACEMENT_GAP = _chunkEL4PSKFTcjs.DEFAULT_PLACEMENT_GAP; exports.DIAGRAM_MARKER_IDS = DIAGRAM_MARKER_IDS; exports.DIAGRAM_RASTER_MAX_SIZE = DIAGRAM_RASTER_MAX_SIZE; exports.DIAGRAM_SCENE_DARK_THEME = DIAGRAM_SCENE_DARK_THEME; exports.DIAGRAM_SCENE_LIGHT_THEME = DIAGRAM_SCENE_LIGHT_THEME; exports.DIAGRAM_SVG_DARK_THEME = DIAGRAM_SVG_DARK_THEME; exports.DIAGRAM_SVG_LIGHT_THEME = DIAGRAM_SVG_LIGHT_THEME; exports.DIAGRAM_TITLE_TARGET = DIAGRAM_TITLE_TARGET; exports.DiagramStream = DiagramStream; exports.INSTANCE_DATA_KEY = INSTANCE_DATA_KEY; exports.LOCKED_DATA_KEY = _chunkEL4PSKFTcjs.LOCKED_DATA_KEY; exports.LOCKED_PREVIOUS_FLAGS_KEY = _chunkEL4PSKFTcjs.LOCKED_PREVIOUS_FLAGS_KEY; exports.MAX_KEYFRAME_REFS = MAX_KEYFRAME_REFS; exports.MERMAID_SHAPE_PAINT = MERMAID_SHAPE_PAINT; exports.ManualClock = _chunkSUF6WRXRcjs.ManualClock; exports.PATHFINDER_OPERATIONS = _chunkYAWLMF3Ocjs.PATHFINDER_OPERATIONS; exports.PIXERATE_BRAND_GRADIENT = _chunkNM3G4VQTcjs.PIXERATE_BRAND_GRADIENT; exports.PathOpsError = _chunkGF2RBSDMcjs.PathOpsError; exports.PlanarMap = _chunkYAWLMF3Ocjs.PlanarMap; exports.RESIZE_HANDLES = RESIZE_HANDLES; exports.SHAPE_DATA_KEY = SHAPE_DATA_KEY; exports.SHAPE_KINDS = _chunkNM3G4VQTcjs.SHAPE_KINDS; exports.SHAPE_NODE_TYPE = SHAPE_NODE_TYPE; exports.SHAPE_OPERATIONS = SHAPE_OPERATIONS; exports.SPRING_PRESETS = _chunkDWJJI6RTcjs.SPRING_PRESETS; exports.StreamingLayoutManager = StreamingLayoutManager; exports.TOKEN_BINDINGS_DATA_KEY = TOKEN_BINDINGS_DATA_KEY; exports.TOKEN_MODES_DATA_KEY = TOKEN_MODES_DATA_KEY; exports.addCanvasVariant = addCanvasVariant; exports.addKeyframesAtTime = addKeyframesAtTime; exports.alignNodes = _chunkEL4PSKFTcjs.alignNodes; exports.angleToSvgLinearCoords = _chunkNM3G4VQTcjs.angleToSvgLinearCoords; exports.animateNode = animateNode; exports.applyAnimation = applyAnimation; exports.applyAnimationOverrides = applyAnimationOverrides; exports.applyConstraints = applyConstraints; exports.applyNodeUpdates = _chunkEL4PSKFTcjs.applyNodeUpdates; exports.applyShapeCombination = applyShapeCombination; exports.applyShapeReplacement = applyShapeReplacement; exports.arcToCubics = _chunkGF2RBSDMcjs.arcToCubics; exports.architectureScene = architectureScene; exports.autoLayoutDiagram = autoLayoutDiagram; exports.bezierPathArea = _chunkGF2RBSDMcjs.bezierPathArea; exports.bezierPathBounds = _chunkGF2RBSDMcjs.bezierPathBounds; exports.bezierPathLength = _chunkGF2RBSDMcjs.bezierPathLength; exports.bezierPathPointAtLength = _chunkGF2RBSDMcjs.bezierPathPointAtLength; exports.bezierPathSignedArea = _chunkGF2RBSDMcjs.bezierPathSignedArea; exports.bezierPathToSvg = _chunkGF2RBSDMcjs.bezierPathToSvg; exports.bindCanvasComponentProperty = bindCanvasComponentProperty; exports.bindCanvasToken = bindCanvasToken; exports.blendDiagramLayout = blendDiagramLayout; exports.blendLayout = blendLayout; exports.boundsOf = _chunkEL4PSKFTcjs.boundsOf; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeSeed = _chunkPUC43JPTcjs.brushstrokeSeed; exports.c4Scene = c4Scene; exports.calculateCursorArrowRotation = calculateCursorArrowRotation; exports.calculateCurvedPath = calculateCurvedPath; exports.calculateDagreReflowDisplacement = calculateDagreReflowDisplacement; exports.calculateDirectionalDisplacement = calculateDirectionalDisplacement; exports.canCombineShapeNodes = canCombineShapeNodes; exports.canOffsetShapeNodes = canOffsetShapeNodes; exports.canOutlineShapeNodeStrokes = canOutlineShapeNodeStrokes; exports.canvasEffectsPool = canvasEffectsPool; exports.canvasHeight = canvasHeight; exports.canvasNodeCaptureRect = canvasNodeCaptureRect; exports.canvasNodeEffect = canvasNodeEffect; exports.captureCanvasView = captureCanvasView; exports.centerNodes = _chunkEL4PSKFTcjs.centerNodes; exports.centre = _chunkEL4PSKFTcjs.centre; exports.clampAnimationValue = clampAnimationValue; exports.clampLayoutSize = clampLayoutSize; exports.closeContour = _chunkGF2RBSDMcjs.closeContour; exports.collectDescendantIds = collectDescendantIds; exports.combineCanvasComponentsAsVariants = combineCanvasComponentsAsVariants; exports.combineShapeNodes = combineShapeNodes; exports.computeDragBounds = computeDragBounds; exports.computeDragBoundsFromPoints = computeDragBoundsFromPoints; exports.computeNodesBoundingBox = computeNodesBoundingBox; exports.computeSnapGuides = computeSnapGuides; exports.connectedDiagramOnly = connectedDiagramOnly; exports.connectedOnly = connectedOnly; exports.contourEnclosesArea = _chunkYAWLMF3Ocjs.contourEnclosesArea; exports.contourSignedArea = _chunkGF2RBSDMcjs.contourSignedArea; exports.contoursToPath = _chunkGF2RBSDMcjs.contoursToPath; exports.copyKeyframes = copyKeyframes; exports.countPathSegments = _chunkGF2RBSDMcjs.countPathSegments; exports.createAnimationPlayer = _chunkSUF6WRXRcjs.createAnimationPlayer; exports.createBezierTrajectory = createBezierTrajectory; exports.createCanvasAnimationController = createCanvasAnimationController; exports.createCanvasArrangeController = createCanvasArrangeController; exports.createCanvasAutoLayoutController = createCanvasAutoLayoutController; exports.createCanvasCaptureSurface = createCanvasCaptureSurface; exports.createCanvasCaptureToolProvider = createCanvasCaptureToolProvider; exports.createCanvasComponent = createCanvasComponent; exports.createCanvasComponentsController = createCanvasComponentsController; exports.createCanvasDrawController = createCanvasDrawController; exports.createCanvasEditorDocument = createCanvasEditorDocument; exports.createCanvasEffectsController = createCanvasEffectsController; exports.createCanvasEffectsToolProvider = createCanvasEffectsToolProvider; exports.createCanvasGestureRecorder = createCanvasGestureRecorder; exports.createCanvasInstance = createCanvasInstance; exports.createCanvasPlaybackLocator = createCanvasPlaybackLocator; exports.createCanvasScenesStore = createCanvasScenesStore; exports.createDefaultStrokeStyle = createDefaultStrokeStyle; exports.createFanOutTrajectory = createFanOutTrajectory; exports.createGuideIndex = createGuideIndex; exports.createNodeGuideIndex = createNodeGuideIndex; exports.createNodeLookup = _chunkEL4PSKFTcjs.createNodeLookup; exports.cubicBezierAt = _chunkDWJJI6RTcjs.cubicBezierAt; exports.cubicPointAt = _chunkNM3G4VQTcjs.cubicPointAt; exports.cubicsToPathData = _chunkNM3G4VQTcjs.cubicsToPathData; exports.cutOutPiece = _chunkYAWLMF3Ocjs.cutOutPiece; exports.dashContours = _chunkGF2RBSDMcjs.dashContours; exports.defaultEasing = defaultEasing; exports.deleteKeyframes = deleteKeyframes; exports.detachCanvasInstance = detachCanvasInstance; exports.detachTokenBindings = detachTokenBindings; exports.diagramCanvasHeight = diagramCanvasHeight; exports.diagramFileName = diagramFileName; exports.diagramGroupSize = diagramGroupSize; exports.diagramImageSize = diagramImageSize; exports.diagramLayoutBounds = diagramLayoutBounds; exports.diagramMarksBounds = diagramMarksBounds; exports.diagramMarksToSvg = diagramMarksToSvg; exports.diagramRenameOp = diagramRenameOp; exports.diagramTargetLabel = diagramTargetLabel; exports.diagramTextBaseline = diagramTextBaseline; exports.diffOverrideGroups = diffOverrideGroups; exports.distanceToBezierPath = _chunkGF2RBSDMcjs.distanceToBezierPath; exports.distributeNodes = _chunkEL4PSKFTcjs.distributeNodes; exports.dividePaths = _chunkGF2RBSDMcjs.dividePaths; exports.dividePolygons = _chunkGF2RBSDMcjs.dividePolygons; exports.downloadDiagramPng = downloadDiagramPng; exports.easeDiagramTween = easeDiagramTween; exports.easingFromInfluence = _chunkDWJJI6RTcjs.easingFromInfluence; exports.easingLabel = _chunkDWJJI6RTcjs.easingLabel; exports.easingToCss = _chunkDWJJI6RTcjs.easingToCss; exports.elasticAt = _chunkDWJJI6RTcjs.elasticAt; exports.ensureDiagramLayout = ensureDiagramLayout; exports.ensureLayout = _chunkEL4PSKFTcjs.ensureLayout; exports.estimateCanvasHeight = estimateCanvasHeight; exports.estimateDiagramCanvasHeight = estimateDiagramCanvasHeight; exports.estimateDiagramNodeSize = estimateDiagramNodeSize; exports.estimateNodeSize = _chunkEL4PSKFTcjs.estimateNodeSize; exports.estimateTextWidth = estimateTextWidth2; exports.evaluateAnimation = evaluateAnimation; exports.evaluateEasing = _chunkDWJJI6RTcjs.evaluateEasing; exports.evaluateTrack = _chunkSUF6WRXRcjs.evaluateTrack; exports.excludePaths = _chunkGF2RBSDMcjs.excludePaths; exports.exportCssAnimation = exportCssAnimation; exports.familySceneFromLayout = familySceneFromLayout; exports.findConnectorSnap = findConnectorSnap; exports.findStrokesAtPoint = findStrokesAtPoint; exports.findVariant = findVariant; exports.fitCubicRun = _chunkNM3G4VQTcjs.fitCubicRun; exports.fitCubicWithTangents = _chunkNM3G4VQTcjs.fitCubicWithTangents; exports.fitCubics = _chunkNM3G4VQTcjs.fitCubics; exports.fitFreehandPath = _chunkNM3G4VQTcjs.fitFreehandPath; exports.fitPathData = _chunkNM3G4VQTcjs.fitPathData; exports.fitViewportToNodes = fitViewportToNodes; exports.fitViewportToRect = fitViewportToRect; exports.flattenSvgPath = _chunkNM3G4VQTcjs.flattenSvgPath; exports.flowSide = _chunkEL4PSKFTcjs.flowSide; exports.formatAgentCursorName = formatAgentCursorName; exports.formatAnimationTime = formatAnimationTime; exports.formatNumber = _chunkNM3G4VQTcjs.formatNumber; exports.formatOklab = _chunkLEUZ4FRCcjs.formatOklab; exports.formatVariantName = formatVariantName; exports.freehandBrushstroke = freehandBrushstroke; exports.ganttScene = ganttScene; exports.getAbsolutePosition = _chunkEL4PSKFTcjs.getAbsolutePosition; exports.getAgentCardAnchor = getAgentCardAnchor; exports.getAnimatableProperty = getAnimatableProperty; exports.getAnimatedProperties = getAnimatedProperties; exports.getAnimatedValue = getAnimatedValue; exports.getAnimationDuration = getAnimationDuration; exports.getAnimationTrack = getAnimationTrack; exports.getAutoLayout = getAutoLayout; exports.getAutoLayoutGrid = getAutoLayoutGrid; exports.getAutoLayoutInsertTarget = getAutoLayoutInsertTarget; exports.getBindableTokenProperties = getBindableTokenProperties; exports.getBrushedShapeSvg = _chunkPUC43JPTcjs.getBrushedShapeSvg; exports.getCanvasComponentDragId = getCanvasComponentDragId; exports.getCanvasTokenProperty = getCanvasTokenProperty; exports.getCenteredNodePosition = _chunkEL4PSKFTcjs.getCenteredNodePosition; exports.getChildLayout = getChildLayout; exports.getComponentData = getComponentData; exports.getComponentInstances = getComponentInstances; exports.getComponentPropertyDefs = getComponentPropertyDefs; exports.getComponentPropertyRefs = getComponentPropertyRefs; exports.getComponentSourceId = getComponentSourceId; exports.getCssPropertyAnimations = getCssPropertyAnimations; exports.getCursorTransitionDuration = getCursorTransitionDuration; exports.getDefaultVariant = getDefaultVariant; exports.getEffectiveTokenModes = getEffectiveTokenModes; exports.getFamilyScene = getFamilyScene; exports.getFlowChildren = getFlowChildren; exports.getInstanceData = getInstanceData; exports.getInstanceProperties = getInstanceProperties; exports.getInstanceStatus = getInstanceStatus; exports.getKeyframeTimes = getKeyframeTimes; exports.getLayerName = getLayerName; exports.getLayoutParent = getLayoutParent; exports.getLayoutSizing = getLayoutSizing; exports.getLayoutedNodes = _chunkEL4PSKFTcjs.getLayoutedNodes; exports.getNaturalMovementTiming = getNaturalMovementTiming; exports.getNextVariantValues = getNextVariantValues; exports.getNodeAnimation = getNodeAnimation; exports.getNodeOverrides = getNodeOverrides; exports.getNodeRect = _chunkEL4PSKFTcjs.getNodeRect; exports.getNodeShape = getNodeShape; exports.getNodeSize = _chunkEL4PSKFTcjs.getNodeSize; exports.getNodeTokenBindings = getNodeTokenBindings; exports.getNodeTokenModes = getNodeTokenModes; exports.getOwningComponent = getOwningComponent; exports.getOwningInstance = getOwningInstance; exports.getResizingNodeRect = getResizingNodeRect; exports.getRootInstance = getRootInstance; exports.getShapeRenderData = _chunkNM3G4VQTcjs.getShapeRenderData; exports.getShapeSvg = _chunkNM3G4VQTcjs.getShapeSvg; exports.getTimelineRows = getTimelineRows; exports.getTimelineTicks = getTimelineTicks; exports.getTokenPropertyScope = getTokenPropertyScope; exports.getTokensForProperty = getTokensForProperty; exports.getVariantConflicts = getVariantConflicts; exports.getVariantOptions = getVariantOptions; exports.getVariantSet = getVariantSet; exports.getVariantValues = getVariantValues; exports.gitGraphScene = gitGraphScene; exports.gradientToSvgDef = _chunkNM3G4VQTcjs.gradientToSvgDef; exports.handlePoint = handlePoint; exports.hasFamilyScene = hasFamilyScene; exports.hasVisibleStroke = hasVisibleStroke; exports.hashString = hashString; exports.hatchPath = _chunkYAWLMF3Ocjs.hatchPath; exports.inferResizeHandle = inferResizeHandle; exports.inspectCanvasInstance = inspectCanvasInstance; exports.inspectNodeTokens = inspectNodeTokens; exports.interiorPoint = _chunkYAWLMF3Ocjs.interiorPoint; exports.interpolateAnimationValue = _chunkSUF6WRXRcjs.interpolateAnimationValue; exports.intersectPaths = _chunkGF2RBSDMcjs.intersectPaths; exports.intersectPolygons = _chunkGF2RBSDMcjs.intersectPolygons; exports.invertNodeUpdates = _chunkEL4PSKFTcjs.invertNodeUpdates; exports.isAgentCursor = isAgentCursor; exports.isAnimationEasing = _chunkDWJJI6RTcjs.isAnimationEasing; exports.isAnimationKeyframe = _chunkSUF6WRXRcjs.isAnimationKeyframe; exports.isAutoLayoutFrame = isAutoLayoutFrame; exports.isBrushedShape = _chunkPUC43JPTcjs.isBrushedShape; exports.isCanvasComponent = isCanvasComponent; exports.isCanvasComponentSet = isCanvasComponentSet; exports.isCanvasGradient = _chunkNM3G4VQTcjs.isCanvasGradient; exports.isCanvasInstance = isCanvasInstance; exports.isCssExportExact = isCssExportExact; exports.isEventFromTextInput = isEventFromTextInput; exports.isInsideInstance = isInsideInstance; exports.isKeyframeSelected = isKeyframeSelected; exports.isLocked = _chunkEL4PSKFTcjs.isLocked; exports.isMeasureModifierHeld = isMeasureModifierHeld; exports.isNodeAnimated = isNodeAnimated; exports.isShapeDescription = _chunkNM3G4VQTcjs.isShapeDescription; exports.isShapeNode = isShapeNode; exports.isStraightCubic = _chunkNM3G4VQTcjs.isStraightCubic; exports.isValidCanvasEdge = isValidCanvasEdge; exports.isValidCanvasNode = isValidCanvasNode; exports.isValidCanvasScene = isValidCanvasScene; exports.isValidUrl = isValidUrl; exports.journeyScene = journeyScene; exports.layoutAll = layoutAll; exports.layoutBounds = layoutBounds; exports.layoutFrame = layoutFrame; exports.layoutUp = layoutUp; exports.layoutUpMany = layoutUpMany; exports.linearPositionTrajectory = linearPositionTrajectory; exports.linearTrajectory = linearTrajectory; exports.listCanvasBrushes = _chunkPUC43JPTcjs.listCanvasBrushes; exports.listCanvasComponents = listCanvasComponents; exports.loadCanvasBrushstrokeRenderer = _chunkPUC43JPTcjs.loadCanvasBrushstrokeRenderer; exports.lockNodes = _chunkEL4PSKFTcjs.lockNodes; exports.makeSizingCoherent = makeSizingCoherent; exports.matchArrangeShortcut = _chunk4EFNS2HVcjs.matchArrangeShortcut; exports.matchSize = _chunkEL4PSKFTcjs.matchSize; exports.measureBetween = measureBetween; exports.measureLabel = measureLabel; exports.measureSelection = measureSelection; exports.measureToLine = measureToLine; exports.mergeNodeUpdates = mergeNodeUpdates; exports.mermaidEdgeDash = mermaidEdgeDash; exports.mermaidEdgeMarker = mermaidEdgeMarker; exports.mermaidEdgeWidth = mermaidEdgeWidth; exports.mermaidFlowEdges = mermaidFlowEdges; exports.mermaidFlowNodes = mermaidFlowNodes; exports.mermaidLabelLines = mermaidLabelLines; exports.mermaidMarkerId = mermaidMarkerId; exports.mermaidMovesFromCanvas = mermaidMovesFromCanvas; exports.mermaidNodeMembers = mermaidNodeMembers; exports.mermaidNodePaint = mermaidNodePaint; exports.mermaidShapePaths = mermaidShapePaths; exports.mermaidThumbnailSvg = mermaidThumbnailSvg; exports.mermaidToCanvas = mermaidToCanvas; exports.mermaidToScene = mermaidToScene; exports.mermaidToSvg = mermaidToSvg; exports.mindmapScene = mindmapScene; exports.mixColorsOklab = _chunkLEUZ4FRCcjs.mixColorsOklab; exports.moveKeyframes = moveKeyframes; exports.moveLayoutChild = moveLayoutChild; exports.multiPolygonArea = _chunkGF2RBSDMcjs.multiPolygonArea; exports.multiPolygonBounds = _chunkGF2RBSDMcjs.multiPolygonBounds; exports.nearestHandlePositions = nearestHandlePositions; exports.normalizeBezierPath = _chunkGF2RBSDMcjs.normalizeBezierPath; exports.normalizeKeyframes = _chunkSUF6WRXRcjs.normalizeKeyframes; exports.offsetPath = _chunkGF2RBSDMcjs.offsetPath; exports.offsetShapeNodes = offsetShapeNodes; exports.oklabToRgb = _chunkLEUZ4FRCcjs.oklabToRgb; exports.oppositePosition = oppositePosition; exports.outlineShapeNodeStrokes = outlineShapeNodeStrokes; exports.outlineStroke = _chunkGF2RBSDMcjs.outlineStroke; exports.overlaps = _chunkEL4PSKFTcjs.overlaps; exports.pageHidden = _chunkSUF6WRXRcjs.pageHidden; exports.parseCanvasClipboardData = parseCanvasClipboardData; exports.parseCanvasScenes = parseCanvasScenes; exports.parseCssEasing = _chunkDWJJI6RTcjs.parseCssEasing; exports.parseCssGradient = _chunkNM3G4VQTcjs.parseCssGradient; exports.parseKeyframeClipboard = parseKeyframeClipboard; exports.parseMermaidStyles = parseMermaidStyles; exports.parseNodeStyleDeclarations = parseNodeStyleDeclarations; exports.parseOklab = _chunkLEUZ4FRCcjs.parseOklab; exports.parseSvgPath = _chunkNM3G4VQTcjs.parseSvgPath; exports.parseVariantName = parseVariantName; exports.pasteKeyframes = pasteKeyframes; exports.pathBoolean = _chunkGF2RBSDMcjs.pathBoolean; exports.pathBooleanSelect = _chunkGF2RBSDMcjs.pathBooleanSelect; exports.pathDataToPolyline = _chunkPUC43JPTcjs.pathDataToPolyline; exports.pathToContours = _chunkGF2RBSDMcjs.pathToContours; exports.pathfinder = _chunkYAWLMF3Ocjs.pathfinder; exports.pieScene = pieScene; exports.placeBeside = _chunkEL4PSKFTcjs.placeBeside; exports.placeInView = _chunkEL4PSKFTcjs.placeInView; exports.planarSplit = _chunkGF2RBSDMcjs.planarSplit; exports.playCanvasSceneTransition = playCanvasSceneTransition; exports.playWebAnimations = playWebAnimations; exports.pointInBezierPath = _chunkGF2RBSDMcjs.pointInBezierPath; exports.pointInMultiPolygon = _chunkGF2RBSDMcjs.pointInMultiPolygon; exports.pointInRings = _chunkGF2RBSDMcjs.pointInRings; exports.pointerPenSample = pointerPenSample; exports.polygonArea = _chunkGF2RBSDMcjs.polygonArea; exports.polygonBoolean = _chunkGF2RBSDMcjs.polygonBoolean; exports.polygonToSvgPath = _chunkNM3G4VQTcjs.polygonToSvgPath; exports.positionToSide = positionToSide; exports.profileAlongPolyline = _chunkPUC43JPTcjs.profileAlongPolyline; exports.pruneCanvasTokenModes = pruneCanvasTokenModes; exports.pushCanvasInstanceOverrides = pushCanvasInstanceOverrides; exports.quadrantScene = quadrantScene; exports.radarChartSpec = radarChartSpec; exports.radarScene = radarScene; exports.rasterSize = rasterSize; exports.rasterizeSvg = rasterizeSvg; exports.readAnimatableValue = readAnimatableValue; exports.readNodeStyleProperty = readNodeStyleProperty; exports.readOverrideGroup = readOverrideGroup; exports.readStyleSize = _chunkEL4PSKFTcjs.readStyleSize; exports.realClock = _chunkSUF6WRXRcjs.realClock; exports.recordAnimationChanges = recordAnimationChanges; exports.registerFamilyScene = registerFamilyScene; exports.relayoutUpdates = relayoutUpdates; exports.remapPastedNodes = remapPastedNodes; exports.removeCanvasVariant = removeCanvasVariant; exports.removeTrack = removeTrack; exports.renameCanvasVariantProperty = renameCanvasVariantProperty; exports.renameCanvasVariantValue = renameCanvasVariantValue; exports.renderCanvasBrushSwatch = _chunkPUC43JPTcjs.renderCanvasBrushSwatch; exports.renderShapeBrushstroke = _chunkPUC43JPTcjs.renderShapeBrushstroke; exports.reorderNodes = _chunkEL4PSKFTcjs.reorderNodes; exports.repositionNodesTo = repositionNodesTo; exports.resetCanvasInstanceOverrides = resetCanvasInstanceOverrides; exports.resizeHandleAxes = resizeHandleAxes; exports.resolveCanvasGradient = _chunkNM3G4VQTcjs.resolveCanvasGradient; exports.resolveCanvasTokens = resolveCanvasTokens; exports.resolveEasing = _chunkDWJJI6RTcjs.resolveEasing; exports.resolveMermaidStyles = resolveMermaidStyles; exports.resolvePadding = resolvePadding; exports.restoreCanvasMainComponent = restoreCanvasMainComponent; exports.reverseCubicBezier = _chunkDWJJI6RTcjs.reverseCubicBezier; exports.revertShapeCombination = revertShapeCombination; exports.rgbToOklab = _chunkLEUZ4FRCcjs.rgbToOklab; exports.ringSignedArea = _chunkGF2RBSDMcjs.ringSignedArea; exports.runCanvasNodeEffect = runCanvasNodeEffect; exports.runMultiNodeTransition = runMultiNodeTransition; exports.sampleAnimationFrames = sampleAnimationFrames; exports.scaleKeyframes = scaleKeyframes; exports.sceneColor = sceneColor; exports.segmentBounds = _chunkGF2RBSDMcjs.segmentBounds; exports.segmentCurvature = _chunkGF2RBSDMcjs.segmentCurvature; exports.segmentDerivative = _chunkGF2RBSDMcjs.segmentDerivative; exports.segmentExtrema = _chunkGF2RBSDMcjs.segmentExtrema; exports.segmentIntersections = _chunkGF2RBSDMcjs.segmentIntersections; exports.segmentLength = _chunkGF2RBSDMcjs.segmentLength; exports.segmentNearest = _chunkGF2RBSDMcjs.segmentNearest; exports.segmentParamAtLength = _chunkGF2RBSDMcjs.segmentParamAtLength; exports.segmentPoint = _chunkGF2RBSDMcjs.segmentPoint; exports.segmentTangent = _chunkGF2RBSDMcjs.segmentTangent; exports.sequenceScene = sequenceScene; exports.serializeCanvasNodes = serializeCanvasNodes; exports.setCanvasComponentProperty = setCanvasComponentProperty; exports.setCanvasInstanceProperties = setCanvasInstanceProperties; exports.setCanvasTokenMode = setCanvasTokenMode; exports.setCanvasVariantProperties = setCanvasVariantProperties; exports.setKeyframe = setKeyframe; exports.setKeyframeEasing = setKeyframeEasing; exports.setMotionPath = setMotionPath; exports.setTrackEnabled = setTrackEnabled; exports.shapeNodeToBezierPath = shapeNodeToBezierPath; exports.shapeNodeToPolygon = shapeNodeToPolygon; exports.shapeToBezierPath = shapeToBezierPath; exports.shapeToPolygon = _chunkNM3G4VQTcjs.shapeToPolygon; exports.sideToPosition = sideToPosition; exports.simplifyRing = _chunkNM3G4VQTcjs.simplifyRing; exports.snapKeyframeDelta = snapKeyframeDelta; exports.snapNodeDrag = snapNodeDrag; exports.snapNodeResize = snapNodeResize; exports.snapResize = snapResize; exports.snapTimeToFrame = snapTimeToFrame; exports.snapToGrid = snapToGrid; exports.splitSegment = _chunkGF2RBSDMcjs.splitSegment; exports.springAt = _chunkDWJJI6RTcjs.springAt; exports.springSettleMs = _chunkDWJJI6RTcjs.springSettleMs; exports.streamedDiagramText = streamedDiagramText; exports.streamlinePoints = streamlinePoints; exports.strokeBoundingBox = strokeBoundingBox; exports.strokeOutlineRings = _chunkGF2RBSDMcjs.strokeOutlineRings; exports.strokePointsToPathData = strokePointsToPathData; exports.strokeToShapeNode = strokeToShapeNode; exports.subSegment = _chunkGF2RBSDMcjs.subSegment; exports.subtractPaths = _chunkGF2RBSDMcjs.subtractPaths; exports.subtractPolygons = _chunkGF2RBSDMcjs.subtractPolygons; exports.swapCanvasInstance = swapCanvasInstance; exports.syncAllCanvasInstances = syncAllCanvasInstances; exports.syncCanvasComponents = syncCanvasComponents; exports.syncCanvasInstance = syncCanvasInstance; exports.timeToX = timeToX; exports.timelineScene = timelineScene; exports.toBezierPath = _chunkGF2RBSDMcjs.toBezierPath; exports.toWebAnimations = toWebAnimations; exports.toggleLockNodes = _chunkEL4PSKFTcjs.toggleLockNodes; exports.transformBezierPath = _chunkGF2RBSDMcjs.transformBezierPath; exports.transitionCanvasView = transitionCanvasView; exports.trimSegments = _chunkGF2RBSDMcjs.trimSegments; exports.unionPolygons = _chunkGF2RBSDMcjs.unionPolygons; exports.unitePaths = _chunkGF2RBSDMcjs.unitePaths; exports.unlockNodes = _chunkEL4PSKFTcjs.unlockNodes; exports.updateKeyframe = updateKeyframe; exports.validateCanvasBrush = _chunkPUC43JPTcjs.validateCanvasBrush; exports.validateCanvasBrushPaint = _chunkPUC43JPTcjs.validateCanvasBrushPaint; exports.windingNumber = _chunkGF2RBSDMcjs.windingNumber; exports.withNodeAnimation = withNodeAnimation; exports.withStyleOpacity = withStyleOpacity; exports.withStyleSize = _chunkEL4PSKFTcjs.withStyleSize; exports.wouldCreateComponentCycle = wouldCreateComponentCycle; exports.wrapAnimationTime = _chunkSUF6WRXRcjs.wrapAnimationTime; exports.writeNodeStyleProperty = writeNodeStyleProperty; exports.writeOverrideGroup = writeOverrideGroup; exports.xToTime = xToTime; exports.xorPolygons = _chunkGF2RBSDMcjs.xorPolygons; exports.xyChartScene = xyChartScene; exports.xyChartSpec = xyChartSpec;
@@ -36,3 +36,4 @@ export * from './capture.cjs';
36
36
  export * from './effects.cjs';
37
37
  export * from './effect-player.cjs';
38
38
  export * from './effect-tools.cjs';
39
+ export * from './editorDocument.cjs';
@@ -36,3 +36,4 @@ export * from './capture.js';
36
36
  export * from './effects.js';
37
37
  export * from './effect-player.js';
38
38
  export * from './effect-tools.js';
39
+ export * from './editorDocument.js';
@@ -60,7 +60,7 @@ import {
60
60
  getTokenVariable,
61
61
  isTokenInScope,
62
62
  resolveToken
63
- } from "../chunk-BCY22GBH.js";
63
+ } from "../chunk-SDHZG5TF.js";
64
64
  import {
65
65
  DEFAULT_NODE_HEIGHT,
66
66
  DEFAULT_NODE_WIDTH,
@@ -213,8 +213,9 @@ import "../chunk-V2ZCJRDM.js";
213
213
  import {
214
214
  brushstrokeScaleBucket
215
215
  } from "../chunk-ODBT55Q7.js";
216
- import "../chunk-GNV54DLO.js";
217
- import "../chunk-WHKNYFM2.js";
216
+ import {
217
+ defineEditorDocument
218
+ } from "../chunk-NHLYK3AX.js";
218
219
  import "../chunk-HF5QZS7Z.js";
219
220
  import {
220
221
  ANIMATION_TIME_EPSILON,
@@ -11693,6 +11694,112 @@ function createCanvasEffectsToolProvider(controller, options = {}) {
11693
11694
  ]
11694
11695
  });
11695
11696
  }
11697
+
11698
+ // src/canvas/editorDocument.ts
11699
+ var RUNTIME_NODE_KEYS = ["selected", "dragging", "measured", "resizing"];
11700
+ var stripNode = (node) => {
11701
+ const copy = { ...node };
11702
+ for (const key of RUNTIME_NODE_KEYS) delete copy[key];
11703
+ return copy;
11704
+ };
11705
+ var stripEdge = (edge) => {
11706
+ const { selected: _selected, ...rest } = edge;
11707
+ return rest;
11708
+ };
11709
+ function checkCanvasDocument(document2) {
11710
+ const hint = "A canvas document is { nodes: [{ id, position: { x, y }, data }], edges: [{ id, source, target }], scenes? } as get_canvas_document returns it.";
11711
+ const value = document2;
11712
+ if (!value || typeof value !== "object" || !Array.isArray(value.nodes)) throw new Error(`nodes must be an array. ${hint}`);
11713
+ if (!Array.isArray(value.edges)) throw new Error(`edges must be an array. ${hint}`);
11714
+ const ids = /* @__PURE__ */ new Set();
11715
+ value.nodes.forEach((node, i) => {
11716
+ if (!isValidCanvasNode(node)) throw new Error(`nodes[${i}] needs a string id and a numeric position { x, y }. ${hint}`);
11717
+ if (ids.has(node.id)) throw new Error(`Node id "${node.id}" is used twice.`);
11718
+ ids.add(node.id);
11719
+ });
11720
+ value.nodes.forEach((node) => {
11721
+ if (node.parentId !== void 0 && !ids.has(node.parentId)) throw new Error(`Node "${node.id}" has parentId "${node.parentId}", which is not a node in the document.`);
11722
+ });
11723
+ const edgeIds = /* @__PURE__ */ new Set();
11724
+ value.edges.forEach((edge, i) => {
11725
+ if (!isValidCanvasEdge(edge)) throw new Error(`edges[${i}] needs string id, source and target. ${hint}`);
11726
+ if (edgeIds.has(edge.id)) throw new Error(`Edge id "${edge.id}" is used twice.`);
11727
+ edgeIds.add(edge.id);
11728
+ for (const end of [edge.source, edge.target]) {
11729
+ if (!ids.has(end)) throw new Error(`Edge "${edge.id}" connects to "${end}", which is not a node in the document.`);
11730
+ }
11731
+ });
11732
+ if (value.scenes !== void 0 && !Array.isArray(value.scenes)) throw new Error(`scenes must be an array. ${hint}`);
11733
+ }
11734
+ function createCanvasEditorDocument(options) {
11735
+ const { history, scenes: scenes2 } = options;
11736
+ const snapshot = () => ({
11737
+ nodes: options.getNodes().map(stripNode),
11738
+ edges: options.getEdges().map(stripEdge),
11739
+ ...scenes2 ? { scenes: scenes2.toJSON().scenes } : {}
11740
+ });
11741
+ const apply = (doc) => {
11742
+ options.setNodes(doc.nodes.map((n3) => ({ ...n3 })));
11743
+ options.setEdges(doc.edges.map((e) => ({ ...e })));
11744
+ if (scenes2) scenes2.load(doc.scenes ?? []);
11745
+ };
11746
+ return defineEditorDocument({
11747
+ kind: "canvas",
11748
+ get: snapshot,
11749
+ load: (document2, { history: mode }) => {
11750
+ checkCanvasDocument(document2);
11751
+ const next = document2;
11752
+ if (mode === "record") {
11753
+ const before = snapshot();
11754
+ history.execute({ name: "Load canvas", execute: () => apply(next), undo: () => apply(before) });
11755
+ return;
11756
+ }
11757
+ apply(next);
11758
+ history.clear();
11759
+ },
11760
+ subscribe: (listener) => {
11761
+ const offs = [history.subscribe(() => listener())];
11762
+ if (scenes2) offs.push(scenes2.subscribe(() => listener()));
11763
+ if (options.subscribe) offs.push(options.subscribe(listener));
11764
+ return () => offs.forEach((off) => off());
11765
+ },
11766
+ history: {
11767
+ undo: () => history.undo(),
11768
+ redo: () => history.redo(),
11769
+ getState: () => history.getState()
11770
+ },
11771
+ readOnly: options.readOnly
11772
+ });
11773
+ }
11774
+ function createCanvasGestureRecorder(options) {
11775
+ let before = null;
11776
+ const take = () => ({ nodes: options.getNodes(), edges: options.getEdges?.() });
11777
+ const key = (s) => JSON.stringify([s.nodes.map(stripNode), s.edges?.map(stripEdge)]);
11778
+ const restore = (s) => {
11779
+ options.setNodes(s.nodes);
11780
+ if (s.edges && options.setEdges) options.setEdges(s.edges);
11781
+ };
11782
+ return {
11783
+ /** Remembers the canvas as it is before the gesture. */
11784
+ begin() {
11785
+ before = take();
11786
+ },
11787
+ /** Records the gesture as one undo step named `name`, if it changed anything. Returns whether it did. */
11788
+ end(name = "Move") {
11789
+ const start = before;
11790
+ before = null;
11791
+ if (!start) return false;
11792
+ const after = take();
11793
+ if (key(start) === key(after)) return false;
11794
+ options.history.execute({ name, execute: () => restore(after), undo: () => restore(start) });
11795
+ return true;
11796
+ },
11797
+ /** Forgets a gesture without recording it. */
11798
+ cancel() {
11799
+ before = null;
11800
+ }
11801
+ };
11802
+ }
11696
11803
  export {
11697
11804
  ANIMATABLE_PROPERTIES,
11698
11805
  ANIMATION_DATA_KEY,
@@ -11825,8 +11932,10 @@ export {
11825
11932
  createCanvasComponent,
11826
11933
  createCanvasComponentsController,
11827
11934
  createCanvasDrawController,
11935
+ createCanvasEditorDocument,
11828
11936
  createCanvasEffectsController,
11829
11937
  createCanvasEffectsToolProvider,
11938
+ createCanvasGestureRecorder,
11830
11939
  createCanvasInstance,
11831
11940
  createCanvasPlaybackLocator,
11832
11941
  createCanvasScenesStore,