@yuzhouu/canvas-standard 0.1.5 → 0.1.6

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 (212) hide show
  1. package/README.md +44 -2
  2. package/_vendor/plugin-arrow/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  3. package/_vendor/plugin-arrow/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  4. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  5. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  6. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  7. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/editor.d.ts +4 -4
  8. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  9. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  10. package/_vendor/plugin-arrow/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  11. package/_vendor/plugin-arrow/_vendor/canvas-core/index.d.ts +1 -1
  12. package/_vendor/plugin-arrow/_vendor/canvas-core/schema/records.d.ts +10 -5
  13. package/_vendor/plugin-arrow/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  14. package/_vendor/plugin-arrow/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  15. package/_vendor/plugin-arrow/arrowBindingUtil.d.ts +15 -12
  16. package/_vendor/plugin-arrow/types.d.ts +6 -4
  17. package/_vendor/plugin-draw/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  18. package/_vendor/plugin-draw/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  19. package/_vendor/plugin-draw/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  20. package/_vendor/plugin-draw/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  21. package/_vendor/plugin-draw/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  22. package/_vendor/plugin-draw/_vendor/canvas-core/editor/editor.d.ts +4 -4
  23. package/_vendor/plugin-draw/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  24. package/_vendor/plugin-draw/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  25. package/_vendor/plugin-draw/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  26. package/_vendor/plugin-draw/_vendor/canvas-core/index.d.ts +1 -1
  27. package/_vendor/plugin-draw/_vendor/canvas-core/schema/records.d.ts +10 -5
  28. package/_vendor/plugin-draw/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  29. package/_vendor/plugin-draw/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  30. package/_vendor/plugin-eraser/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  31. package/_vendor/plugin-eraser/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  32. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  33. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  34. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  35. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/editor.d.ts +4 -4
  36. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  37. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  38. package/_vendor/plugin-eraser/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  39. package/_vendor/plugin-eraser/_vendor/canvas-core/index.d.ts +1 -1
  40. package/_vendor/plugin-eraser/_vendor/canvas-core/schema/records.d.ts +10 -5
  41. package/_vendor/plugin-eraser/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  42. package/_vendor/plugin-eraser/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  43. package/_vendor/plugin-flow/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  44. package/_vendor/plugin-flow/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  45. package/_vendor/plugin-flow/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  46. package/_vendor/plugin-flow/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  47. package/_vendor/plugin-flow/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  48. package/_vendor/plugin-flow/_vendor/canvas-core/editor/editor.d.ts +4 -4
  49. package/_vendor/plugin-flow/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  50. package/_vendor/plugin-flow/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  51. package/_vendor/plugin-flow/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  52. package/_vendor/plugin-flow/_vendor/canvas-core/index.d.ts +1 -1
  53. package/_vendor/plugin-flow/_vendor/canvas-core/schema/records.d.ts +10 -5
  54. package/_vendor/plugin-flow/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  55. package/_vendor/plugin-flow/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  56. package/_vendor/plugin-flow/_vendor/plugin-text/geoLabelBindingUtil.d.ts +18 -12
  57. package/_vendor/plugin-flow/_vendor/plugin-text/pathLabelBindingUtil.d.ts +19 -14
  58. package/_vendor/plugin-flow/api.d.ts +46 -4
  59. package/_vendor/plugin-flow/editorRuntime.d.ts +2 -2
  60. package/_vendor/plugin-flow/flowEdgeBindingUtil.d.ts +13 -9
  61. package/_vendor/plugin-flow/flowEdgeModel.d.ts +7 -5
  62. package/_vendor/plugin-flow/flowEdgePrimitives.d.ts +4 -2
  63. package/_vendor/plugin-flow/flowEdgeRuntime.d.ts +6 -1
  64. package/_vendor/plugin-flow/index.d.ts +2 -2
  65. package/_vendor/plugin-flow/types.d.ts +7 -5
  66. package/_vendor/plugin-frame/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  67. package/_vendor/plugin-frame/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  68. package/_vendor/plugin-frame/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  69. package/_vendor/plugin-frame/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  70. package/_vendor/plugin-frame/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  71. package/_vendor/plugin-frame/_vendor/canvas-core/editor/editor.d.ts +4 -4
  72. package/_vendor/plugin-frame/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  73. package/_vendor/plugin-frame/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  74. package/_vendor/plugin-frame/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  75. package/_vendor/plugin-frame/_vendor/canvas-core/index.d.ts +1 -1
  76. package/_vendor/plugin-frame/_vendor/canvas-core/schema/records.d.ts +10 -5
  77. package/_vendor/plugin-frame/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  78. package/_vendor/plugin-frame/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  79. package/_vendor/plugin-geo/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  80. package/_vendor/plugin-geo/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  81. package/_vendor/plugin-geo/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  82. package/_vendor/plugin-geo/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  83. package/_vendor/plugin-geo/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  84. package/_vendor/plugin-geo/_vendor/canvas-core/editor/editor.d.ts +4 -4
  85. package/_vendor/plugin-geo/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  86. package/_vendor/plugin-geo/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  87. package/_vendor/plugin-geo/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  88. package/_vendor/plugin-geo/_vendor/canvas-core/index.d.ts +1 -1
  89. package/_vendor/plugin-geo/_vendor/canvas-core/schema/records.d.ts +10 -5
  90. package/_vendor/plugin-geo/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  91. package/_vendor/plugin-geo/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  92. package/_vendor/plugin-group/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  93. package/_vendor/plugin-group/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  94. package/_vendor/plugin-group/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  95. package/_vendor/plugin-group/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  96. package/_vendor/plugin-group/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  97. package/_vendor/plugin-group/_vendor/canvas-core/editor/editor.d.ts +4 -4
  98. package/_vendor/plugin-group/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  99. package/_vendor/plugin-group/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  100. package/_vendor/plugin-group/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  101. package/_vendor/plugin-group/_vendor/canvas-core/index.d.ts +1 -1
  102. package/_vendor/plugin-group/_vendor/canvas-core/schema/records.d.ts +10 -5
  103. package/_vendor/plugin-group/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  104. package/_vendor/plugin-group/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  105. package/_vendor/plugin-html/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  106. package/_vendor/plugin-html/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  107. package/_vendor/plugin-html/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  108. package/_vendor/plugin-html/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  109. package/_vendor/plugin-html/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  110. package/_vendor/plugin-html/_vendor/canvas-core/editor/editor.d.ts +4 -4
  111. package/_vendor/plugin-html/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  112. package/_vendor/plugin-html/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  113. package/_vendor/plugin-html/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  114. package/_vendor/plugin-html/_vendor/canvas-core/index.d.ts +1 -1
  115. package/_vendor/plugin-html/_vendor/canvas-core/schema/records.d.ts +10 -5
  116. package/_vendor/plugin-html/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  117. package/_vendor/plugin-html/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  118. package/_vendor/plugin-image/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  119. package/_vendor/plugin-image/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  120. package/_vendor/plugin-image/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  121. package/_vendor/plugin-image/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  122. package/_vendor/plugin-image/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  123. package/_vendor/plugin-image/_vendor/canvas-core/editor/editor.d.ts +4 -4
  124. package/_vendor/plugin-image/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  125. package/_vendor/plugin-image/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  126. package/_vendor/plugin-image/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  127. package/_vendor/plugin-image/_vendor/canvas-core/index.d.ts +1 -1
  128. package/_vendor/plugin-image/_vendor/canvas-core/schema/records.d.ts +10 -5
  129. package/_vendor/plugin-image/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  130. package/_vendor/plugin-image/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  131. package/_vendor/plugin-laser/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  132. package/_vendor/plugin-laser/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  133. package/_vendor/plugin-laser/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  134. package/_vendor/plugin-laser/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  135. package/_vendor/plugin-laser/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  136. package/_vendor/plugin-laser/_vendor/canvas-core/editor/editor.d.ts +4 -4
  137. package/_vendor/plugin-laser/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  138. package/_vendor/plugin-laser/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  139. package/_vendor/plugin-laser/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  140. package/_vendor/plugin-laser/_vendor/canvas-core/index.d.ts +1 -1
  141. package/_vendor/plugin-laser/_vendor/canvas-core/schema/records.d.ts +10 -5
  142. package/_vendor/plugin-laser/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  143. package/_vendor/plugin-laser/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  144. package/_vendor/plugin-path/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  145. package/_vendor/plugin-path/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  146. package/_vendor/plugin-path/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  147. package/_vendor/plugin-path/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  148. package/_vendor/plugin-path/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  149. package/_vendor/plugin-path/_vendor/canvas-core/editor/editor.d.ts +4 -4
  150. package/_vendor/plugin-path/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  151. package/_vendor/plugin-path/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  152. package/_vendor/plugin-path/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  153. package/_vendor/plugin-path/_vendor/canvas-core/index.d.ts +1 -1
  154. package/_vendor/plugin-path/_vendor/canvas-core/schema/records.d.ts +10 -5
  155. package/_vendor/plugin-path/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  156. package/_vendor/plugin-path/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  157. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  158. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  159. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  160. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  161. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  162. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/editor.d.ts +4 -4
  163. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  164. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  165. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  166. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/index.d.ts +1 -1
  167. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/schema/records.d.ts +10 -5
  168. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  169. package/_vendor/plugin-runtime-clipboard/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  170. package/_vendor/plugin-runtime-export/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  171. package/_vendor/plugin-runtime-export/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  172. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  173. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  174. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  175. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/editor.d.ts +4 -4
  176. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  177. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  178. package/_vendor/plugin-runtime-export/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  179. package/_vendor/plugin-runtime-export/_vendor/canvas-core/index.d.ts +1 -1
  180. package/_vendor/plugin-runtime-export/_vendor/canvas-core/schema/records.d.ts +10 -5
  181. package/_vendor/plugin-runtime-export/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  182. package/_vendor/plugin-runtime-export/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  183. package/_vendor/plugin-text/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  184. package/_vendor/plugin-text/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  185. package/_vendor/plugin-text/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  186. package/_vendor/plugin-text/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  187. package/_vendor/plugin-text/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  188. package/_vendor/plugin-text/_vendor/canvas-core/editor/editor.d.ts +4 -4
  189. package/_vendor/plugin-text/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  190. package/_vendor/plugin-text/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  191. package/_vendor/plugin-text/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  192. package/_vendor/plugin-text/_vendor/canvas-core/index.d.ts +1 -1
  193. package/_vendor/plugin-text/_vendor/canvas-core/schema/records.d.ts +10 -5
  194. package/_vendor/plugin-text/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  195. package/_vendor/plugin-text/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  196. package/_vendor/plugin-text/geoLabelBindingUtil.d.ts +18 -12
  197. package/_vendor/plugin-text/pathLabelBindingUtil.d.ts +19 -14
  198. package/_vendor/plugin-video/_vendor/canvas-core/bindings/bindingManager.d.ts +1 -0
  199. package/_vendor/plugin-video/_vendor/canvas-core/bindings/bindingUtil.d.ts +17 -10
  200. package/_vendor/plugin-video/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  201. package/_vendor/plugin-video/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +3 -1
  202. package/_vendor/plugin-video/_vendor/canvas-core/editor/commands/commandTypes.d.ts +21 -7
  203. package/_vendor/plugin-video/_vendor/canvas-core/editor/editor.d.ts +4 -4
  204. package/_vendor/plugin-video/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +8 -8
  205. package/_vendor/plugin-video/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +2 -2
  206. package/_vendor/plugin-video/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +1 -1
  207. package/_vendor/plugin-video/_vendor/canvas-core/index.d.ts +1 -1
  208. package/_vendor/plugin-video/_vendor/canvas-core/schema/records.d.ts +10 -5
  209. package/_vendor/plugin-video/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  210. package/_vendor/plugin-video/_vendor/canvas-extension-contracts/plugin.d.ts +3 -1
  211. package/index.mjs +60 -60
  212. package/package.json +2 -2
package/README.md CHANGED
@@ -33,13 +33,55 @@ const profile = createStandardCanvasKitProfile();
33
33
  const plugins = [profile.plugins, Connector];
34
34
  ```
35
35
 
36
- Flow port affordances remain configurable through the standard profile:
36
+ Flow port affordances and graph-cycle creation remain configurable through the
37
+ standard profile:
37
38
 
38
39
  ```ts
39
40
  createStandardCanvasKitProfile({
40
- flow: { visiblePortIds: ["left", "right"] },
41
+ flow: {
42
+ allowCycles: false,
43
+ visiblePortIds: ["left", "right"],
44
+ },
41
45
  });
42
46
  ```
43
47
 
48
+ Multi-node cycles and Flow-node self-loops are allowed by default. Setting
49
+ `allowCycles: false` blocks new edge creation and rebinding that would close a
50
+ cycle, including a self-loop, without removing cycles already stored in a
51
+ document.
52
+
53
+ Flow exposes a node-scoped, reactive connection API through its public token:
54
+
55
+ ```ts
56
+ import {
57
+ FlowConnectionError,
58
+ flowApiToken,
59
+ } from "@yuzhouu/canvas-standard";
60
+
61
+ const flow = canvas.api(flowApiToken);
62
+ if (flow) {
63
+ const connections = flow.connections.forNode(nodeId);
64
+ const unsubscribe = connections.subscribe(() => {
65
+ const { inputs, outputs } = connections.getSnapshot();
66
+ // Render graph-backed input and output affordances.
67
+ });
68
+
69
+ try {
70
+ flow.connections.disconnect({ nodeId, edgeId });
71
+ } catch (error) {
72
+ if (error instanceof FlowConnectionError) {
73
+ console.error(error.code);
74
+ }
75
+ }
76
+
77
+ unsubscribe();
78
+ }
79
+ ```
80
+
81
+ `forNode()` accepts only subtype-marked Flow Text/Image nodes. Connection
82
+ snapshots expose stable edge IDs and source/target shape and port references;
83
+ `disconnect()` validates ownership, supported Flow topology, locks, and
84
+ readonly policy before recording an undoable edge deletion.
85
+
44
86
  The HTML plugin is enabled by default. Pass `html: false` to omit sandboxed
45
87
  HTML embeds from a profile.
@@ -28,6 +28,7 @@ export declare class BindingManager {
28
28
  private syncShapeCompanionState;
29
29
  private getShapeCompanionContext;
30
30
  private getAllBindings;
31
+ private getEndpointContext;
31
32
  private getExclusiveBindingKey;
32
33
  }
33
34
  export {};
@@ -1,7 +1,7 @@
1
1
  import type { Editor } from "../editor/editor";
2
2
  import type { SelectionOverlayFrameGeometryState } from "../editor/selection/selection";
3
3
  import type { Vec } from "../geometry/vec";
4
- import type { BindingId, BindingRecord, BindingRecordBase, ShapeRecord } from "../schema/records";
4
+ import type { BindingId, BindingEndpointBase, BindingRecord, BindingRecordBase, ShapeRecord } from "../schema/records";
5
5
  export interface BindingUtilEffect {
6
6
  shapes?: ShapeRecord[];
7
7
  bindings?: BindingRecord[];
@@ -13,32 +13,39 @@ export interface BindingUtilEffect {
13
13
  export interface BindingShapeChangeContext {
14
14
  before: ShapeRecord;
15
15
  after: ShapeRecord;
16
- role: "from" | "to";
16
+ owner: boolean;
17
+ endpointSlots: readonly string[];
17
18
  reason: "self" | "ancestry";
18
19
  }
19
20
  export interface BindingShapeDeleteContext {
20
21
  shape: ShapeRecord;
21
- role: "from" | "to";
22
+ owner: boolean;
23
+ endpointSlots: readonly string[];
22
24
  }
23
25
  export interface BindingEndpointContext {
24
- fromShape: ShapeRecord;
25
- toShape: ShapeRecord;
26
+ ownerShape: ShapeRecord;
27
+ endpoints: readonly {
28
+ endpoint: BindingEndpointBase;
29
+ targetShape: ShapeRecord;
30
+ }[];
26
31
  }
27
32
  export interface BindingSelectionCompanionFrameContext {
28
33
  selectedShape: ShapeRecord;
29
34
  }
30
35
  export interface BindingShapeGeometryDependencyContext {
31
36
  shape: ShapeRecord;
32
- role: "from" | "to";
37
+ owner: boolean;
38
+ endpointSlots: readonly string[];
33
39
  }
34
40
  export interface BindingTargetShapeContentCutoutContext {
35
- fromShape: ShapeRecord;
36
- toShape: ShapeRecord;
41
+ ownerShape: ShapeRecord;
42
+ endpoint: BindingEndpointBase;
43
+ targetShape: ShapeRecord;
37
44
  }
38
45
  export declare abstract class BindingUtil<B extends BindingRecordBase = BindingRecordBase> {
39
46
  abstract readonly type: B["type"];
40
- abstract getDefaultProps(): B["props"];
41
- abstract validateProps(props: unknown): B["props"];
47
+ abstract getDefaultEndpointProps(slot: B["endpoints"][number]["slot"]): B["endpoints"][number]["props"];
48
+ abstract validateEndpointProps(slot: B["endpoints"][number]["slot"], props: unknown): B["endpoints"][number]["props"];
42
49
  canBind?(editor: Editor, binding: B, context: BindingEndpointContext): boolean;
43
50
  getExclusiveBindingKey?(binding: B): string | null;
44
51
  onBindingCreate?(editor: Editor, binding: B): BindingUtilEffect | void;
@@ -4,7 +4,7 @@ import type { AssetId, AssetRecord, BindingRecord, ShapeId, ShapeRecord } from "
4
4
  import type { Editor } from "./editor";
5
5
  export interface EditorClipboardPayload {
6
6
  type: "land/clipboard";
7
- version: 2;
7
+ version: 3;
8
8
  source: {
9
9
  app: "land";
10
10
  documentId?: string;
@@ -1,11 +1,13 @@
1
1
  import type { ChangeSource } from "../../../store/index";
2
2
  import type { BindingId, BindingRecord, ShapeId } from "../../schema/records";
3
- import type { CreateBindingInput, EditorCommandOptions, UpdateBindingInput } from "./commandTypes";
3
+ import type { ClearBindingEndpointInput, CreateBindingInput, EditorCommandOptions, SetBindingEndpointInput, UpdateBindingInput } from "./commandTypes";
4
4
  import type { Editor } from "../editor";
5
5
  type RepairMinimumChildContainers = (containerIds: Iterable<ShapeId>, deletedIds: Set<ShapeId>, source: ChangeSource) => void;
6
6
  interface BindingCommandSet {
7
7
  createBinding(input: CreateBindingInput, options?: EditorCommandOptions): BindingRecord;
8
8
  updateBinding(input: UpdateBindingInput, options?: EditorCommandOptions): BindingRecord | null;
9
+ setBindingEndpoint(input: SetBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
10
+ clearBindingEndpoint(input: ClearBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
9
11
  deleteBinding(id: BindingId, options?: EditorCommandOptions): boolean;
10
12
  }
11
13
  export declare function createBindingCommandSet(editor: Editor, repairMinimumChildContainers: RepairMinimumChildContainers): BindingCommandSet;
@@ -1,5 +1,5 @@
1
1
  import type { ChangeSource } from "../../../store/index";
2
- import type { AssetId, AssetRecord, AssetRecordBase, BindingId, BindingRecord, BindingRecordBase, Camera, DocumentMetadataRecord, PageId, PageRecord, ShapeEditingEntryMode, ShapeId, ShapeParentId, ShapeRecord, ShapeRecordBase } from "../../schema/records";
2
+ import type { AssetId, AssetRecord, AssetRecordBase, BindingId, BindingEndpointBase, BindingRecord, BindingRecordBase, Camera, DocumentMetadataRecord, PageId, PageRecord, ShapeEditingEntryMode, ShapeId, ShapeParentId, ShapeRecord, ShapeRecordBase } from "../../schema/records";
3
3
  export interface EditorCommandOptions {
4
4
  source?: ChangeSource;
5
5
  }
@@ -72,21 +72,33 @@ export interface StartEditingShapeInput {
72
72
  reuseActiveOperation?: boolean;
73
73
  preserveInteraction?: boolean;
74
74
  }
75
+ export interface CreateBindingEndpointInput {
76
+ slot: BindingEndpointBase["slot"];
77
+ targetId: ShapeId;
78
+ props?: Record<string, unknown>;
79
+ meta?: Record<string, unknown>;
80
+ }
75
81
  export interface CreateBindingInput {
76
82
  id?: BindingId;
77
83
  type: BindingRecordBase["type"];
78
- fromId: ShapeId;
79
- toId: ShapeId;
80
- props?: Record<string, unknown>;
84
+ ownerId: ShapeId;
85
+ endpoints: readonly CreateBindingEndpointInput[];
81
86
  meta?: Record<string, unknown>;
82
87
  }
83
88
  export interface UpdateBindingInput {
84
89
  id: BindingId;
85
- fromId?: ShapeId;
86
- toId?: ShapeId;
87
- props?: Record<string, unknown>;
90
+ ownerId?: ShapeId;
91
+ endpoints?: readonly CreateBindingEndpointInput[];
88
92
  meta?: Record<string, unknown>;
89
93
  }
94
+ export interface SetBindingEndpointInput {
95
+ bindingId: BindingId;
96
+ endpoint: CreateBindingEndpointInput;
97
+ }
98
+ export interface ClearBindingEndpointInput {
99
+ bindingId: BindingId;
100
+ slot: string;
101
+ }
90
102
  export interface CreatePageInput {
91
103
  name?: string;
92
104
  index?: string;
@@ -142,6 +154,8 @@ export interface EditorCommands {
142
154
  deleteAsset(id: AssetId, options?: EditorCommandOptions): boolean;
143
155
  createBinding(input: CreateBindingInput, options?: EditorCommandOptions): BindingRecord;
144
156
  updateBinding(input: UpdateBindingInput, options?: EditorCommandOptions): BindingRecord | null;
157
+ setBindingEndpoint(input: SetBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
158
+ clearBindingEndpoint(input: ClearBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
145
159
  deleteBinding(id: BindingId, options?: EditorCommandOptions): boolean;
146
160
  setCurrentPageId(id: PageId, options?: EditorCommandOptions): void;
147
161
  setCamera(input: SetCameraInput, options?: EditorCommandOptions): void;
@@ -262,10 +262,10 @@ export declare class Editor {
262
262
  };
263
263
  readonly bindings: {
264
264
  readonly get: (id: BindingId) => BindingRecord | undefined;
265
- readonly getFromShape: (shapeId: ShapeId) => BindingRecord[];
266
- readonly getFromShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
267
- readonly getToShape: (shapeId: ShapeId) => BindingRecord[];
268
- readonly getToShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
265
+ readonly getOwnedByShape: (shapeId: ShapeId) => BindingRecord[];
266
+ readonly getOwnedByShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
267
+ readonly getTargetingShape: (shapeId: ShapeId) => BindingRecord[];
268
+ readonly getTargetingShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
269
269
  readonly getForShape: (shapeId: ShapeId) => BindingRecord[];
270
270
  readonly getForShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
271
271
  readonly getUtil: <B extends BindingRecord>(binding: B) => BindingUtil<B>;
@@ -4,23 +4,23 @@ import type { Editor } from "../editor";
4
4
  export declare class BindingQueryCache {
5
5
  private readonly editor;
6
6
  private state;
7
- private readonly bindingsFromShapeSignals;
8
- private readonly bindingsToShapeSignals;
7
+ private readonly bindingsOwnedByShapeSignals;
8
+ private readonly bindingsTargetingShapeSignals;
9
9
  private readonly bindingsForShapeSignals;
10
10
  private draftBindingIndex;
11
11
  private readonly unsubscribeFromStore;
12
12
  constructor(editor: Editor);
13
13
  dispose(): void;
14
- getBindingsFromShape(shapeId: ShapeId): BindingRecord[];
15
- getBindingsFromShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
16
- getBindingsToShape(shapeId: ShapeId): BindingRecord[];
17
- getBindingsToShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
14
+ getBindingsOwnedByShape(shapeId: ShapeId): BindingRecord[];
15
+ getBindingsOwnedByShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
16
+ getBindingsTargetingShape(shapeId: ShapeId): BindingRecord[];
17
+ getBindingsTargetingShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
18
18
  getBindingsForShape(shapeId: ShapeId): BindingRecord[];
19
19
  getBindingsForShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
20
20
  private handleStoreChange;
21
21
  private updateCachedSignals;
22
- private getBindingsFromState;
23
- private getBindingsToState;
22
+ private getBindingsOwnedByState;
23
+ private getBindingsTargetingState;
24
24
  private getBindingsForState;
25
25
  private getBindingsForIds;
26
26
  private getDraftBindingIndex;
@@ -2,8 +2,8 @@ import type { StoreChange } from "../../../store/index";
2
2
  import { type BindingId, type BindingRecord, type EditorRecord, type ShapeId } from "../../schema/records";
3
3
  export interface BindingQueryState {
4
4
  bindingById: Map<BindingId, BindingRecord>;
5
- bindingIdsByFromShape: Map<ShapeId, BindingId[]>;
6
- bindingIdsByToShape: Map<ShapeId, BindingId[]>;
5
+ bindingIdsByOwnerShape: Map<ShapeId, BindingId[]>;
6
+ bindingIdsByTargetShape: Map<ShapeId, BindingId[]>;
7
7
  relatedBindingIdsByShape: Map<ShapeId, BindingId[]>;
8
8
  }
9
9
  export declare function compareBindings(left: BindingRecord, right: BindingRecord): number;
@@ -1,6 +1,6 @@
1
1
  import type { RecordsDiff } from "../../../store/index";
2
2
  import { type BindingId, type BindingRecord, type EditorRecord, type ShapeId } from "../../schema/records";
3
- export type BindingRelation = "from" | "to" | "related";
3
+ export type BindingRelation = "owner" | "target" | "related";
4
4
  interface DraftRelationIndex {
5
5
  changesByShape: Map<ShapeId, Map<BindingId, BindingRecord | undefined>>;
6
6
  cacheByShape: Map<ShapeId, readonly BindingRecord[]>;
@@ -60,7 +60,7 @@ export { SelectTool } from "./tools/select/selectTool";
60
60
  export { LAND_DEFAULT_THEME_COLOR_FALLBACKS, LAND_THEME_COLOR_SLOTS, LAND_THEME_COLOR_TOKEN_BY_SLOT, areShapeColorsEqual, createCustomShapeColor, createThemeShapeColor, getThemeColorTokenName, isCustomShapeColorRef, isShapeColor, isThemeShapeColorRef, isTransparentShapeColor, normalizeShapeColor, resolveShapeColor, shapeColorToCssColor, } from "./shapes/colors";
61
61
  export type { CustomShapeColorRef, ShapeColor, ThemeColorSlot, ThemeColorResolver, ThemeColorTokenName, ThemeShapeColorRef, } from "./shapes/colors";
62
62
  export { type EditorPlugin, createEditorRuntimeToken, EditorRuntimeRegistry, type EditorRuntimeToken, } from "./plugins";
63
- export { DEFAULT_CAMERA, DEFAULT_DOCUMENT_ID, DEFAULT_PAGE_ID, DEFAULT_SESSION_ID, createDefaultDocument, createDefaultPage, createDefaultSession, isAssetRecord, isBindingRecord, isDocumentRecord, isDocumentMetadataRecord, isPageRecord, isSessionRecord, isShapeRecord, type AssetId, type AssetRecord, type AssetRecordBase, type BaseRecord, type BindingId, type BindingRecordBase, type BindingRecord, type Camera, type DocumentId, type DocumentMetadataRecord, type DocumentRecord, type EditorRecord, type PageCameraById, type PageId, type PageSelectionById, type PageRecord, type RecordScope, type SessionRecord, type ShapeId, type ShapeParentId, type ShapeRecordBase, type ShapeRecord, type ShapeEditingEntryRequest, type ShapeEditingEntryMode, type ShapeEditingPoint, type ShapeEditingSession, } from "./schema/records";
63
+ export { DEFAULT_CAMERA, DEFAULT_DOCUMENT_ID, DEFAULT_PAGE_ID, DEFAULT_SESSION_ID, createDefaultDocument, createDefaultPage, createDefaultSession, isAssetRecord, isBindingRecord, isDocumentRecord, isDocumentMetadataRecord, isPageRecord, isSessionRecord, isShapeRecord, type AssetId, type AssetRecord, type AssetRecordBase, type BaseRecord, type BindingId, type BindingEndpointBase, type BindingRecordBase, type BindingRecord, type Camera, type DocumentId, type DocumentMetadataRecord, type DocumentRecord, type EditorRecord, type PageCameraById, type PageId, type PageSelectionById, type PageRecord, type RecordScope, type SessionRecord, type ShapeId, type ShapeParentId, type ShapeRecordBase, type ShapeRecord, type ShapeEditingEntryRequest, type ShapeEditingEntryMode, type ShapeEditingPoint, type ShapeEditingSession, } from "./schema/records";
64
64
  export { Vec } from "./geometry/vec";
65
65
  export { Box } from "./geometry/box";
66
66
  export { Mat } from "./geometry/mat";
@@ -67,14 +67,19 @@ export interface ShapeRecordBase<Type extends string = string, Props extends obj
67
67
  isLocked: boolean;
68
68
  props: Props;
69
69
  }
70
- export interface BindingRecordBase<Type extends string = string, Props extends object = object> extends BaseRecord {
70
+ export interface BindingEndpointBase<Slot extends string = string, Props extends object = object> {
71
+ slot: Slot;
72
+ targetId: ShapeId;
73
+ props: Props;
74
+ meta: Record<string, unknown>;
75
+ }
76
+ export interface BindingRecordBase<Type extends string = string, Endpoint extends BindingEndpointBase = BindingEndpointBase> extends BaseRecord {
71
77
  id: BindingId;
72
78
  typeName: "binding";
73
79
  scope: "document";
74
80
  type: Type;
75
- fromId: ShapeId;
76
- toId: ShapeId;
77
- props: Props;
81
+ ownerId: ShapeId;
82
+ endpoints: readonly Endpoint[];
78
83
  }
79
84
  export interface AssetRecordBase<Type extends string = string, Props extends object = object> extends BaseRecord {
80
85
  id: AssetId;
@@ -84,7 +89,7 @@ export interface AssetRecordBase<Type extends string = string, Props extends obj
84
89
  props: Props;
85
90
  }
86
91
  export type ShapeRecord = ShapeRecordBase<string, object>;
87
- export type BindingRecord = BindingRecordBase<string, object>;
92
+ export type BindingRecord = BindingRecordBase<string, BindingEndpointBase<string, object>>;
88
93
  export type AssetRecord = AssetRecordBase<string, object>;
89
94
  export interface SessionRecord extends BaseRecord {
90
95
  id: SessionId;
@@ -2,12 +2,12 @@ import type { ShapeUtilRegistry } from "../shapes/shapeUtilRegistry";
2
2
  import type { BindingUtilRegistry } from "../bindings/bindingUtilRegistry";
3
3
  import type { StoreSnapshot } from "../../store/index";
4
4
  import { type DocumentRecord, type SessionRecord } from "./records";
5
- export type DocumentSnapshot = StoreSnapshot<DocumentRecord, 3>;
5
+ export type DocumentSnapshot = StoreSnapshot<DocumentRecord, 4>;
6
6
  export type SessionSnapshot = StoreSnapshot<SessionRecord, 1>;
7
7
  export declare class SnapshotParseError extends Error {
8
8
  constructor(message: string);
9
9
  }
10
- declare const CURRENT_DOCUMENT_SNAPSHOT_VERSION: 3;
10
+ declare const CURRENT_DOCUMENT_SNAPSHOT_VERSION: 4;
11
11
  declare const CURRENT_SESSION_SNAPSHOT_VERSION: 1;
12
12
  export declare function getSnapshotEnvelope(snapshot: unknown, kind: "document"): {
13
13
  schemaVersion: typeof CURRENT_DOCUMENT_SNAPSHOT_VERSION;
@@ -2,9 +2,10 @@ import type { Editor, EditorPlugin } from "../canvas-core/index";
2
2
  import type { CanvasRenderPlugin } from "../canvas-react/host/index";
3
3
  import type { CanvasAssetResolverContribution, CanvasExportContribution, CanvasImportContribution } from "./contributions";
4
4
  import type { CanvasApiToken, ScopedProductApiRegistryView } from "./tokens";
5
+ declare const canvasPluginReferenceBrand: unique symbol;
5
6
  export interface CanvasPluginReference {
6
7
  readonly id: string;
7
- readonly __canvasPluginReferenceBrand: "CanvasPluginReference";
8
+ readonly [canvasPluginReferenceBrand]: true;
8
9
  }
9
10
  export type CanvasPluginRequirement = CanvasPluginReference;
10
11
  export interface CanvasTaskRunner {
@@ -35,3 +36,4 @@ export interface CanvasPlugin<TApi = never> extends CanvasPluginDefinition<TApi>
35
36
  }
36
37
  export type CanvasPluginInput = CanvasPlugin<unknown> | readonly CanvasPluginInput[];
37
38
  export declare function defineCanvasPlugin<TApi = never>(plugin: CanvasPluginDefinition<TApi>): CanvasPlugin<TApi>;
39
+ export {};
@@ -1,27 +1,30 @@
1
1
  import { BindingUtil, type BindingUtilEffect, type Editor, type ShapeRecord } from "./_vendor/canvas-core/index";
2
- import { type ArrowBindingRecord } from "./types";
2
+ import { type ArrowBindingEndpoint, type ArrowBindingProps, type ArrowBindingRecord } from "./types";
3
3
  export declare class ArrowBindingUtil extends BindingUtil<ArrowBindingRecord> {
4
4
  readonly type: "arrow";
5
- getDefaultProps(): ArrowBindingRecord["props"];
6
- validateProps(props: unknown): ArrowBindingRecord["props"];
7
- canBind(editor: Editor, _binding: ArrowBindingRecord, context: {
8
- fromShape: ShapeRecord;
9
- toShape: ShapeRecord;
5
+ getDefaultEndpointProps(): ArrowBindingProps;
6
+ validateEndpointProps(_slot: ArrowBindingEndpoint["slot"], props: unknown): ArrowBindingProps;
7
+ canBind(editor: Editor, binding: ArrowBindingRecord, context: {
8
+ ownerShape: ShapeRecord;
9
+ endpoints: readonly {
10
+ endpoint: ArrowBindingEndpoint;
11
+ targetShape: ShapeRecord;
12
+ }[];
10
13
  }): boolean;
11
14
  getExclusiveBindingKey(binding: ArrowBindingRecord): string;
12
15
  onBindingCreate(editor: Editor, binding: ArrowBindingRecord): BindingUtilEffect | void;
13
16
  onBindingUpdate(editor: Editor, _before: ArrowBindingRecord, after: ArrowBindingRecord): BindingUtilEffect | void;
14
17
  onBindingLoad(editor: Editor, binding: ArrowBindingRecord): BindingUtilEffect | void;
15
18
  getGeometryDependentShapeIds(_editor: Editor, binding: ArrowBindingRecord, context: {
16
- role: "from" | "to";
19
+ endpointSlots: readonly string[];
17
20
  }): ShapeRecord["id"][];
18
- onAfterShapeChange(editor: Editor, binding: ArrowBindingRecord, _context: {
19
- role: "from" | "to";
20
- }): BindingUtilEffect | void;
21
+ onAfterShapeChange(editor: Editor, binding: ArrowBindingRecord): BindingUtilEffect | void;
21
22
  onBeforeDeleteShape(editor: Editor, binding: ArrowBindingRecord, context: {
22
- role: "from" | "to";
23
+ owner: boolean;
24
+ endpointSlots: readonly string[];
23
25
  }): BindingUtilEffect | void;
24
26
  onBeforeDeleteBinding(editor: Editor, binding: ArrowBindingRecord): BindingUtilEffect | void;
25
- private syncArrowTerminal;
27
+ private syncArrowTerminals;
28
+ private freezeArrowTerminals;
26
29
  private resolveTerminalPagePoint;
27
30
  }
@@ -1,4 +1,4 @@
1
- import type { BaseRecord, BindingRecordBase, ShapeColor, ShapeRecordBase } from "./_vendor/canvas-core/index";
1
+ import type { BaseRecord, BindingEndpointBase, BindingRecordBase, ShapeColor, ShapeRecordBase } from "./_vendor/canvas-core/index";
2
2
  export interface ArrowPoint {
3
3
  x: number;
4
4
  y: number;
@@ -24,12 +24,14 @@ export interface ArrowShapeRecord extends ShapeRecordBase<"arrow", ArrowShapePro
24
24
  props: ArrowShapeProps;
25
25
  }
26
26
  export interface ArrowBindingProps {
27
- terminal: ArrowTerminal;
28
27
  normalizedAnchor: ArrowPoint;
29
28
  }
30
- export interface ArrowBindingRecord extends BindingRecordBase<"arrow", ArrowBindingProps> {
29
+ export interface ArrowBindingEndpoint extends BindingEndpointBase<ArrowTerminal, ArrowBindingProps> {
30
+ }
31
+ export interface ArrowBindingRecord extends BindingRecordBase<"arrow", ArrowBindingEndpoint> {
31
32
  type: "arrow";
32
- props: ArrowBindingProps;
33
+ endpoints: readonly ArrowBindingEndpoint[];
33
34
  }
35
+ export declare function getArrowBindingEndpoint(binding: ArrowBindingRecord, terminal: ArrowTerminal): ArrowBindingEndpoint | null;
34
36
  export declare function isArrowShapeRecord(record: BaseRecord | null | undefined): record is ArrowShapeRecord;
35
37
  export declare function isArrowBindingRecord(record: BaseRecord | null | undefined): record is ArrowBindingRecord;
@@ -28,6 +28,7 @@ export declare class BindingManager {
28
28
  private syncShapeCompanionState;
29
29
  private getShapeCompanionContext;
30
30
  private getAllBindings;
31
+ private getEndpointContext;
31
32
  private getExclusiveBindingKey;
32
33
  }
33
34
  export {};
@@ -1,7 +1,7 @@
1
1
  import type { Editor } from "../editor/editor";
2
2
  import type { SelectionOverlayFrameGeometryState } from "../editor/selection/selection";
3
3
  import type { Vec } from "../geometry/vec";
4
- import type { BindingId, BindingRecord, BindingRecordBase, ShapeRecord } from "../schema/records";
4
+ import type { BindingId, BindingEndpointBase, BindingRecord, BindingRecordBase, ShapeRecord } from "../schema/records";
5
5
  export interface BindingUtilEffect {
6
6
  shapes?: ShapeRecord[];
7
7
  bindings?: BindingRecord[];
@@ -13,32 +13,39 @@ export interface BindingUtilEffect {
13
13
  export interface BindingShapeChangeContext {
14
14
  before: ShapeRecord;
15
15
  after: ShapeRecord;
16
- role: "from" | "to";
16
+ owner: boolean;
17
+ endpointSlots: readonly string[];
17
18
  reason: "self" | "ancestry";
18
19
  }
19
20
  export interface BindingShapeDeleteContext {
20
21
  shape: ShapeRecord;
21
- role: "from" | "to";
22
+ owner: boolean;
23
+ endpointSlots: readonly string[];
22
24
  }
23
25
  export interface BindingEndpointContext {
24
- fromShape: ShapeRecord;
25
- toShape: ShapeRecord;
26
+ ownerShape: ShapeRecord;
27
+ endpoints: readonly {
28
+ endpoint: BindingEndpointBase;
29
+ targetShape: ShapeRecord;
30
+ }[];
26
31
  }
27
32
  export interface BindingSelectionCompanionFrameContext {
28
33
  selectedShape: ShapeRecord;
29
34
  }
30
35
  export interface BindingShapeGeometryDependencyContext {
31
36
  shape: ShapeRecord;
32
- role: "from" | "to";
37
+ owner: boolean;
38
+ endpointSlots: readonly string[];
33
39
  }
34
40
  export interface BindingTargetShapeContentCutoutContext {
35
- fromShape: ShapeRecord;
36
- toShape: ShapeRecord;
41
+ ownerShape: ShapeRecord;
42
+ endpoint: BindingEndpointBase;
43
+ targetShape: ShapeRecord;
37
44
  }
38
45
  export declare abstract class BindingUtil<B extends BindingRecordBase = BindingRecordBase> {
39
46
  abstract readonly type: B["type"];
40
- abstract getDefaultProps(): B["props"];
41
- abstract validateProps(props: unknown): B["props"];
47
+ abstract getDefaultEndpointProps(slot: B["endpoints"][number]["slot"]): B["endpoints"][number]["props"];
48
+ abstract validateEndpointProps(slot: B["endpoints"][number]["slot"], props: unknown): B["endpoints"][number]["props"];
42
49
  canBind?(editor: Editor, binding: B, context: BindingEndpointContext): boolean;
43
50
  getExclusiveBindingKey?(binding: B): string | null;
44
51
  onBindingCreate?(editor: Editor, binding: B): BindingUtilEffect | void;
@@ -4,7 +4,7 @@ import type { AssetId, AssetRecord, BindingRecord, ShapeId, ShapeRecord } from "
4
4
  import type { Editor } from "./editor";
5
5
  export interface EditorClipboardPayload {
6
6
  type: "land/clipboard";
7
- version: 2;
7
+ version: 3;
8
8
  source: {
9
9
  app: "land";
10
10
  documentId?: string;
@@ -1,11 +1,13 @@
1
1
  import type { ChangeSource } from "../../../store/index";
2
2
  import type { BindingId, BindingRecord, ShapeId } from "../../schema/records";
3
- import type { CreateBindingInput, EditorCommandOptions, UpdateBindingInput } from "./commandTypes";
3
+ import type { ClearBindingEndpointInput, CreateBindingInput, EditorCommandOptions, SetBindingEndpointInput, UpdateBindingInput } from "./commandTypes";
4
4
  import type { Editor } from "../editor";
5
5
  type RepairMinimumChildContainers = (containerIds: Iterable<ShapeId>, deletedIds: Set<ShapeId>, source: ChangeSource) => void;
6
6
  interface BindingCommandSet {
7
7
  createBinding(input: CreateBindingInput, options?: EditorCommandOptions): BindingRecord;
8
8
  updateBinding(input: UpdateBindingInput, options?: EditorCommandOptions): BindingRecord | null;
9
+ setBindingEndpoint(input: SetBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
10
+ clearBindingEndpoint(input: ClearBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
9
11
  deleteBinding(id: BindingId, options?: EditorCommandOptions): boolean;
10
12
  }
11
13
  export declare function createBindingCommandSet(editor: Editor, repairMinimumChildContainers: RepairMinimumChildContainers): BindingCommandSet;
@@ -1,5 +1,5 @@
1
1
  import type { ChangeSource } from "../../../store/index";
2
- import type { AssetId, AssetRecord, AssetRecordBase, BindingId, BindingRecord, BindingRecordBase, Camera, DocumentMetadataRecord, PageId, PageRecord, ShapeEditingEntryMode, ShapeId, ShapeParentId, ShapeRecord, ShapeRecordBase } from "../../schema/records";
2
+ import type { AssetId, AssetRecord, AssetRecordBase, BindingId, BindingEndpointBase, BindingRecord, BindingRecordBase, Camera, DocumentMetadataRecord, PageId, PageRecord, ShapeEditingEntryMode, ShapeId, ShapeParentId, ShapeRecord, ShapeRecordBase } from "../../schema/records";
3
3
  export interface EditorCommandOptions {
4
4
  source?: ChangeSource;
5
5
  }
@@ -72,21 +72,33 @@ export interface StartEditingShapeInput {
72
72
  reuseActiveOperation?: boolean;
73
73
  preserveInteraction?: boolean;
74
74
  }
75
+ export interface CreateBindingEndpointInput {
76
+ slot: BindingEndpointBase["slot"];
77
+ targetId: ShapeId;
78
+ props?: Record<string, unknown>;
79
+ meta?: Record<string, unknown>;
80
+ }
75
81
  export interface CreateBindingInput {
76
82
  id?: BindingId;
77
83
  type: BindingRecordBase["type"];
78
- fromId: ShapeId;
79
- toId: ShapeId;
80
- props?: Record<string, unknown>;
84
+ ownerId: ShapeId;
85
+ endpoints: readonly CreateBindingEndpointInput[];
81
86
  meta?: Record<string, unknown>;
82
87
  }
83
88
  export interface UpdateBindingInput {
84
89
  id: BindingId;
85
- fromId?: ShapeId;
86
- toId?: ShapeId;
87
- props?: Record<string, unknown>;
90
+ ownerId?: ShapeId;
91
+ endpoints?: readonly CreateBindingEndpointInput[];
88
92
  meta?: Record<string, unknown>;
89
93
  }
94
+ export interface SetBindingEndpointInput {
95
+ bindingId: BindingId;
96
+ endpoint: CreateBindingEndpointInput;
97
+ }
98
+ export interface ClearBindingEndpointInput {
99
+ bindingId: BindingId;
100
+ slot: string;
101
+ }
90
102
  export interface CreatePageInput {
91
103
  name?: string;
92
104
  index?: string;
@@ -142,6 +154,8 @@ export interface EditorCommands {
142
154
  deleteAsset(id: AssetId, options?: EditorCommandOptions): boolean;
143
155
  createBinding(input: CreateBindingInput, options?: EditorCommandOptions): BindingRecord;
144
156
  updateBinding(input: UpdateBindingInput, options?: EditorCommandOptions): BindingRecord | null;
157
+ setBindingEndpoint(input: SetBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
158
+ clearBindingEndpoint(input: ClearBindingEndpointInput, options?: EditorCommandOptions): BindingRecord | null;
145
159
  deleteBinding(id: BindingId, options?: EditorCommandOptions): boolean;
146
160
  setCurrentPageId(id: PageId, options?: EditorCommandOptions): void;
147
161
  setCamera(input: SetCameraInput, options?: EditorCommandOptions): void;
@@ -262,10 +262,10 @@ export declare class Editor {
262
262
  };
263
263
  readonly bindings: {
264
264
  readonly get: (id: BindingId) => BindingRecord | undefined;
265
- readonly getFromShape: (shapeId: ShapeId) => BindingRecord[];
266
- readonly getFromShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
267
- readonly getToShape: (shapeId: ShapeId) => BindingRecord[];
268
- readonly getToShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
265
+ readonly getOwnedByShape: (shapeId: ShapeId) => BindingRecord[];
266
+ readonly getOwnedByShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
267
+ readonly getTargetingShape: (shapeId: ShapeId) => BindingRecord[];
268
+ readonly getTargetingShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
269
269
  readonly getForShape: (shapeId: ShapeId) => BindingRecord[];
270
270
  readonly getForShapeSignal: (shapeId: ShapeId) => Signal<readonly BindingRecord[]>;
271
271
  readonly getUtil: <B extends BindingRecord>(binding: B) => BindingUtil<B>;
@@ -4,23 +4,23 @@ import type { Editor } from "../editor";
4
4
  export declare class BindingQueryCache {
5
5
  private readonly editor;
6
6
  private state;
7
- private readonly bindingsFromShapeSignals;
8
- private readonly bindingsToShapeSignals;
7
+ private readonly bindingsOwnedByShapeSignals;
8
+ private readonly bindingsTargetingShapeSignals;
9
9
  private readonly bindingsForShapeSignals;
10
10
  private draftBindingIndex;
11
11
  private readonly unsubscribeFromStore;
12
12
  constructor(editor: Editor);
13
13
  dispose(): void;
14
- getBindingsFromShape(shapeId: ShapeId): BindingRecord[];
15
- getBindingsFromShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
16
- getBindingsToShape(shapeId: ShapeId): BindingRecord[];
17
- getBindingsToShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
14
+ getBindingsOwnedByShape(shapeId: ShapeId): BindingRecord[];
15
+ getBindingsOwnedByShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
16
+ getBindingsTargetingShape(shapeId: ShapeId): BindingRecord[];
17
+ getBindingsTargetingShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
18
18
  getBindingsForShape(shapeId: ShapeId): BindingRecord[];
19
19
  getBindingsForShapeSignal(shapeId: ShapeId): Signal<readonly BindingRecord[]>;
20
20
  private handleStoreChange;
21
21
  private updateCachedSignals;
22
- private getBindingsFromState;
23
- private getBindingsToState;
22
+ private getBindingsOwnedByState;
23
+ private getBindingsTargetingState;
24
24
  private getBindingsForState;
25
25
  private getBindingsForIds;
26
26
  private getDraftBindingIndex;
@@ -2,8 +2,8 @@ import type { StoreChange } from "../../../store/index";
2
2
  import { type BindingId, type BindingRecord, type EditorRecord, type ShapeId } from "../../schema/records";
3
3
  export interface BindingQueryState {
4
4
  bindingById: Map<BindingId, BindingRecord>;
5
- bindingIdsByFromShape: Map<ShapeId, BindingId[]>;
6
- bindingIdsByToShape: Map<ShapeId, BindingId[]>;
5
+ bindingIdsByOwnerShape: Map<ShapeId, BindingId[]>;
6
+ bindingIdsByTargetShape: Map<ShapeId, BindingId[]>;
7
7
  relatedBindingIdsByShape: Map<ShapeId, BindingId[]>;
8
8
  }
9
9
  export declare function compareBindings(left: BindingRecord, right: BindingRecord): number;