@dxos/react-ui-canvas-compute 0.13.0 → 0.14.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 (244) hide show
  1. package/dist/lib/chunk-types.mjs +142 -0
  2. package/dist/lib/chunk-types.mjs.map +1 -0
  3. package/dist/lib/index.mjs +526 -430
  4. package/dist/lib/index.mjs.map +1 -1
  5. package/dist/lib/types.mjs +2 -0
  6. package/dist/types/src/graph/controller.d.ts +1 -1
  7. package/dist/types/src/graph/controller.d.ts.map +1 -1
  8. package/dist/types/src/hooks/compute-context.d.ts +5 -4
  9. package/dist/types/src/hooks/compute-context.d.ts.map +1 -1
  10. package/dist/types/src/hooks/index.d.ts +0 -1
  11. package/dist/types/src/hooks/index.d.ts.map +1 -1
  12. package/dist/types/src/hooks/useGraphMonitor.d.ts +18 -1
  13. package/dist/types/src/hooks/useGraphMonitor.d.ts.map +1 -1
  14. package/dist/types/src/index.d.ts +1 -1
  15. package/dist/types/src/index.d.ts.map +1 -1
  16. package/dist/types/src/registry.d.ts +5 -8
  17. package/dist/types/src/registry.d.ts.map +1 -1
  18. package/dist/types/src/scene/compute.stories.d.ts.map +1 -1
  19. package/dist/types/src/scene/echo-store.d.ts +1 -1
  20. package/dist/types/src/scene/echo-store.d.ts.map +1 -1
  21. package/dist/types/src/scene/index.d.ts +0 -3
  22. package/dist/types/src/scene/index.d.ts.map +1 -1
  23. package/dist/types/src/scene/projection.d.ts.map +1 -1
  24. package/dist/types/src/scene/scene.d.ts +2 -2
  25. package/dist/types/src/scene/scene.d.ts.map +1 -1
  26. package/dist/types/src/shapes/Append.d.ts +2 -2
  27. package/dist/types/src/shapes/Append.d.ts.map +1 -1
  28. package/dist/types/src/shapes/Array.d.ts +3 -3
  29. package/dist/types/src/shapes/Array.d.ts.map +1 -1
  30. package/dist/types/src/shapes/Audio.d.ts +2 -2
  31. package/dist/types/src/shapes/Audio.d.ts.map +1 -1
  32. package/dist/types/src/shapes/Beacon.d.ts +2 -2
  33. package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
  34. package/dist/types/src/shapes/Boolean.d.ts +4 -52
  35. package/dist/types/src/shapes/Boolean.d.ts.map +1 -1
  36. package/dist/types/src/shapes/Chat.d.ts +3 -3
  37. package/dist/types/src/shapes/Chat.d.ts.map +1 -1
  38. package/dist/types/src/shapes/Constant.d.ts +3 -4
  39. package/dist/types/src/shapes/Constant.d.ts.map +1 -1
  40. package/dist/types/src/shapes/Database.d.ts +2 -2
  41. package/dist/types/src/shapes/Database.d.ts.map +1 -1
  42. package/dist/types/src/shapes/Feed.d.ts +2 -2
  43. package/dist/types/src/shapes/Feed.d.ts.map +1 -1
  44. package/dist/types/src/shapes/Function.d.ts +3 -5
  45. package/dist/types/src/shapes/Function.d.ts.map +1 -1
  46. package/dist/types/src/shapes/Gpt.d.ts +2 -2
  47. package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
  48. package/dist/types/src/shapes/GptRealtime.d.ts +2 -2
  49. package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
  50. package/dist/types/src/shapes/Json.d.ts +5 -5
  51. package/dist/types/src/shapes/Json.d.ts.map +1 -1
  52. package/dist/types/src/shapes/Logic.d.ts +5 -5
  53. package/dist/types/src/shapes/Logic.d.ts.map +1 -1
  54. package/dist/types/src/shapes/RNG.d.ts +2 -2
  55. package/dist/types/src/shapes/RNG.d.ts.map +1 -1
  56. package/dist/types/src/shapes/Scope.d.ts +2 -2
  57. package/dist/types/src/shapes/Scope.d.ts.map +1 -1
  58. package/dist/types/src/shapes/Surface.d.ts +2 -2
  59. package/dist/types/src/shapes/Surface.d.ts.map +1 -1
  60. package/dist/types/src/shapes/Switch.d.ts +2 -2
  61. package/dist/types/src/shapes/Switch.d.ts.map +1 -1
  62. package/dist/types/src/shapes/Table.d.ts +2 -2
  63. package/dist/types/src/shapes/Table.d.ts.map +1 -1
  64. package/dist/types/src/shapes/Template.d.ts +2 -2
  65. package/dist/types/src/shapes/Template.d.ts.map +1 -1
  66. package/dist/types/src/shapes/Text.d.ts +2 -2
  67. package/dist/types/src/shapes/Text.d.ts.map +1 -1
  68. package/dist/types/src/shapes/TextToImage.d.ts +2 -2
  69. package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
  70. package/dist/types/src/shapes/Thread.d.ts +2 -2
  71. package/dist/types/src/shapes/Thread.d.ts.map +1 -1
  72. package/dist/types/src/shapes/Trigger.d.ts +3 -3
  73. package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
  74. package/dist/types/src/shapes/append-def.d.ts +1 -2
  75. package/dist/types/src/shapes/append-def.d.ts.map +1 -1
  76. package/dist/types/src/shapes/array-def.d.ts +2 -3
  77. package/dist/types/src/shapes/array-def.d.ts.map +1 -1
  78. package/dist/types/src/shapes/audio-def.d.ts +1 -2
  79. package/dist/types/src/shapes/audio-def.d.ts.map +1 -1
  80. package/dist/types/src/shapes/beacon-def.d.ts +1 -2
  81. package/dist/types/src/shapes/beacon-def.d.ts.map +1 -1
  82. package/dist/types/src/shapes/chat-def.d.ts +1 -2
  83. package/dist/types/src/shapes/chat-def.d.ts.map +1 -1
  84. package/dist/types/src/shapes/common/Box.d.ts.map +1 -1
  85. package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
  86. package/dist/types/src/shapes/common/TextBox.d.ts +26 -0
  87. package/dist/types/src/shapes/common/TextBox.d.ts.map +1 -0
  88. package/dist/types/src/shapes/common/index.d.ts +3 -1
  89. package/dist/types/src/shapes/common/index.d.ts.map +1 -1
  90. package/dist/types/src/shapes/common/node-def.d.ts +24 -0
  91. package/dist/types/src/shapes/common/node-def.d.ts.map +1 -0
  92. package/dist/types/src/shapes/common/ports.d.ts +33 -0
  93. package/dist/types/src/shapes/common/ports.d.ts.map +1 -0
  94. package/dist/types/src/shapes/constant-def.d.ts +1 -2
  95. package/dist/types/src/shapes/constant-def.d.ts.map +1 -1
  96. package/dist/types/src/shapes/database-def.d.ts +1 -2
  97. package/dist/types/src/shapes/database-def.d.ts.map +1 -1
  98. package/dist/types/src/shapes/defs.d.ts +7 -2
  99. package/dist/types/src/shapes/defs.d.ts.map +1 -1
  100. package/dist/types/src/shapes/feed-def.d.ts +1 -2
  101. package/dist/types/src/shapes/feed-def.d.ts.map +1 -1
  102. package/dist/types/src/shapes/function-def.d.ts +1 -2
  103. package/dist/types/src/shapes/function-def.d.ts.map +1 -1
  104. package/dist/types/src/shapes/gpt-def.d.ts +1 -2
  105. package/dist/types/src/shapes/gpt-def.d.ts.map +1 -1
  106. package/dist/types/src/shapes/gpt-realtime-def.d.ts +1 -2
  107. package/dist/types/src/shapes/gpt-realtime-def.d.ts.map +1 -1
  108. package/dist/types/src/shapes/json-def.d.ts +2 -3
  109. package/dist/types/src/shapes/json-def.d.ts.map +1 -1
  110. package/dist/types/src/shapes/logic-def.d.ts +2 -3
  111. package/dist/types/src/shapes/logic-def.d.ts.map +1 -1
  112. package/dist/types/src/shapes/ports.test.d.ts +2 -0
  113. package/dist/types/src/shapes/ports.test.d.ts.map +1 -0
  114. package/dist/types/src/shapes/rng-def.d.ts +1 -2
  115. package/dist/types/src/shapes/rng-def.d.ts.map +1 -1
  116. package/dist/types/src/shapes/scope-def.d.ts +1 -2
  117. package/dist/types/src/shapes/scope-def.d.ts.map +1 -1
  118. package/dist/types/src/shapes/surface-def.d.ts +1 -2
  119. package/dist/types/src/shapes/surface-def.d.ts.map +1 -1
  120. package/dist/types/src/shapes/switch-def.d.ts +1 -2
  121. package/dist/types/src/shapes/switch-def.d.ts.map +1 -1
  122. package/dist/types/src/shapes/table-def.d.ts +1 -2
  123. package/dist/types/src/shapes/table-def.d.ts.map +1 -1
  124. package/dist/types/src/shapes/template-def.d.ts +1 -2
  125. package/dist/types/src/shapes/template-def.d.ts.map +1 -1
  126. package/dist/types/src/shapes/text-def.d.ts +1 -2
  127. package/dist/types/src/shapes/text-def.d.ts.map +1 -1
  128. package/dist/types/src/shapes/text-to-image-def.d.ts +1 -2
  129. package/dist/types/src/shapes/text-to-image-def.d.ts.map +1 -1
  130. package/dist/types/src/shapes/thread-def.d.ts +1 -2
  131. package/dist/types/src/shapes/thread-def.d.ts.map +1 -1
  132. package/dist/types/src/shapes/trigger-def.d.ts +1 -2
  133. package/dist/types/src/shapes/trigger-def.d.ts.map +1 -1
  134. package/dist/types/src/testing/circuits.d.ts +1 -1
  135. package/dist/types/src/testing/circuits.d.ts.map +1 -1
  136. package/dist/types/src/types/canvas-board.test.d.ts +2 -0
  137. package/dist/types/src/types/canvas-board.test.d.ts.map +1 -0
  138. package/dist/types/src/types/index.d.ts +4 -0
  139. package/dist/types/src/types/index.d.ts.map +1 -0
  140. package/dist/types/src/types/model.d.ts +10 -0
  141. package/dist/types/src/types/model.d.ts.map +1 -0
  142. package/dist/types/src/types/schema.d.ts +66 -0
  143. package/dist/types/src/types/schema.d.ts.map +1 -0
  144. package/dist/types/src/types/shapes.d.ts +114 -0
  145. package/dist/types/src/types/shapes.d.ts.map +1 -0
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +43 -35
  148. package/src/graph/controller.ts +1 -1
  149. package/src/hooks/compute-context.ts +7 -4
  150. package/src/hooks/index.ts +0 -1
  151. package/src/hooks/useGraphMonitor.ts +10 -1
  152. package/src/index.ts +1 -1
  153. package/src/playwright/scene.spec.ts +3 -3
  154. package/src/registry.ts +63 -91
  155. package/src/scene/compute.stories.tsx +3 -6
  156. package/src/scene/echo-store.test.ts +18 -7
  157. package/src/scene/echo-store.ts +7 -10
  158. package/src/scene/index.ts +0 -3
  159. package/src/scene/projection.ts +2 -3
  160. package/src/scene/scene.test.ts +4 -4
  161. package/src/scene/scene.ts +6 -4
  162. package/src/schema.test.ts +7 -36
  163. package/src/shapes/Append.tsx +2 -3
  164. package/src/shapes/Array.tsx +3 -4
  165. package/src/shapes/Audio.tsx +2 -2
  166. package/src/shapes/Beacon.tsx +2 -2
  167. package/src/shapes/Boolean.tsx +32 -29
  168. package/src/shapes/Chat.tsx +5 -10
  169. package/src/shapes/Constant.tsx +19 -12
  170. package/src/shapes/Database.tsx +2 -4
  171. package/src/shapes/Feed.tsx +2 -3
  172. package/src/shapes/Function.tsx +4 -10
  173. package/src/shapes/Gpt.tsx +2 -3
  174. package/src/shapes/GptRealtime.tsx +2 -2
  175. package/src/shapes/Json.tsx +5 -6
  176. package/src/shapes/Logic.tsx +5 -6
  177. package/src/shapes/RNG.tsx +2 -2
  178. package/src/shapes/Scope.tsx +2 -2
  179. package/src/shapes/Surface.tsx +9 -6
  180. package/src/shapes/Switch.tsx +10 -12
  181. package/src/shapes/Table.tsx +2 -4
  182. package/src/shapes/Template.tsx +10 -9
  183. package/src/shapes/Text.tsx +2 -3
  184. package/src/shapes/TextToImage.tsx +2 -4
  185. package/src/shapes/Thread.tsx +2 -3
  186. package/src/shapes/Trigger.tsx +3 -4
  187. package/src/shapes/append-def.ts +8 -7
  188. package/src/shapes/array-def.ts +8 -8
  189. package/src/shapes/audio-def.ts +8 -7
  190. package/src/shapes/beacon-def.ts +9 -8
  191. package/src/shapes/chat-def.tsx +8 -8
  192. package/src/shapes/common/Box.tsx +7 -4
  193. package/src/shapes/common/FunctionBody.tsx +13 -26
  194. package/src/shapes/common/TextBox.tsx +137 -0
  195. package/src/shapes/common/index.ts +3 -1
  196. package/src/shapes/common/node-def.tsx +117 -0
  197. package/src/shapes/common/ports.ts +107 -0
  198. package/src/shapes/constant-def.tsx +8 -8
  199. package/src/shapes/database-def.ts +8 -8
  200. package/src/shapes/defs.ts +21 -6
  201. package/src/shapes/feed-def.ts +8 -7
  202. package/src/shapes/function-def.ts +8 -7
  203. package/src/shapes/gpt-def.ts +8 -7
  204. package/src/shapes/gpt-realtime-def.ts +10 -10
  205. package/src/shapes/json-def.ts +15 -13
  206. package/src/shapes/logic-def.ts +14 -11
  207. package/src/shapes/ports.test.ts +23 -0
  208. package/src/shapes/rng-def.ts +8 -7
  209. package/src/shapes/scope-def.ts +8 -7
  210. package/src/shapes/surface-def.ts +8 -8
  211. package/src/shapes/switch-def.ts +8 -7
  212. package/src/shapes/table-def.ts +7 -7
  213. package/src/shapes/template-def.ts +8 -7
  214. package/src/shapes/text-def.ts +8 -8
  215. package/src/shapes/text-to-image-def.ts +8 -8
  216. package/src/shapes/thread-def.ts +8 -7
  217. package/src/shapes/trigger-def.ts +11 -8
  218. package/src/testing/circuits.ts +21 -7
  219. package/src/types/canvas-board.test.ts +84 -0
  220. package/src/types/index.ts +7 -0
  221. package/src/types/model.ts +63 -0
  222. package/src/types/schema.ts +73 -0
  223. package/src/types/shapes.ts +73 -0
  224. package/dist/types/src/compute-layout.d.ts +0 -9
  225. package/dist/types/src/compute-layout.d.ts.map +0 -1
  226. package/dist/types/src/compute.stories.d.ts +0 -58
  227. package/dist/types/src/compute.stories.d.ts.map +0 -1
  228. package/dist/types/src/hooks/useComputeGraphController.d.ts +0 -10
  229. package/dist/types/src/hooks/useComputeGraphController.d.ts.map +0 -1
  230. package/dist/types/src/scene/NodeView.d.ts +0 -11
  231. package/dist/types/src/scene/NodeView.d.ts.map +0 -1
  232. package/dist/types/src/scene/defs.d.ts +0 -5
  233. package/dist/types/src/scene/defs.d.ts.map +0 -1
  234. package/dist/types/src/scene/ports.d.ts +0 -5
  235. package/dist/types/src/scene/ports.d.ts.map +0 -1
  236. package/dist/types/src/shapes/common/function-anchors.d.ts +0 -12
  237. package/dist/types/src/shapes/common/function-anchors.d.ts.map +0 -1
  238. package/src/compute-layout.ts +0 -37
  239. package/src/compute.stories.tsx +0 -302
  240. package/src/hooks/useComputeGraphController.ts +0 -65
  241. package/src/scene/NodeView.tsx +0 -42
  242. package/src/scene/defs.ts +0 -158
  243. package/src/scene/ports.ts +0 -30
  244. package/src/shapes/common/function-anchors.ts +0 -44
@@ -0,0 +1,142 @@
1
+ import { ComputeGraph, ComputeGraphModel, DEFAULT_INPUT, DEFAULT_OUTPUT } from "@dxos/conductor";
2
+ import * as Schema from "effect/Schema";
3
+ import { Annotation, DXN, Obj, Ref, Type } from "@dxos/echo";
4
+ import * as Struct from "effect/Struct";
5
+ import { isProxy } from "@dxos/echo/internal";
6
+ import * as GraphModel from "@dxos/graph/GraphModel";
7
+ import * as GraphEdge from "@dxos/graph/GraphEdge";
8
+ import * as GraphNode from "@dxos/graph/GraphNode";
9
+ //#region \0rolldown/runtime.js
10
+ var __defProp = Object.defineProperty;
11
+ var __exportAll = (all, no_symbols) => {
12
+ let target = {};
13
+ for (var name in all) __defProp(target, name, {
14
+ get: all[name],
15
+ enumerable: true
16
+ });
17
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
18
+ return target;
19
+ };
20
+ //#endregion
21
+ //#region src/types/model.ts
22
+ var CanvasGraphModel = class CanvasGraphModel extends GraphModel.AbstractGraphModel {
23
+ static create(graph, change) {
24
+ if (isProxy(graph)) return new CanvasGraphModel({
25
+ graph,
26
+ change
27
+ });
28
+ return new CanvasGraphModel({ graph: {
29
+ nodes: graph?.nodes ?? [],
30
+ edges: graph?.edges ?? []
31
+ } });
32
+ }
33
+ copy(graph) {
34
+ return CanvasGraphModel.create(graph);
35
+ }
36
+ createNode({ id, ...rest }) {
37
+ const node = {
38
+ id: id ?? Obj.ID.random(),
39
+ ...rest
40
+ };
41
+ this.addNode(node);
42
+ return node;
43
+ }
44
+ createEdge({ id, source, target, output = DEFAULT_OUTPUT, input = DEFAULT_INPUT, ...rest }) {
45
+ const edge = {
46
+ id: id ?? Obj.ID.random(),
47
+ source,
48
+ target,
49
+ output,
50
+ input,
51
+ ...rest
52
+ };
53
+ this.addEdge(edge);
54
+ return edge;
55
+ }
56
+ };
57
+ //#endregion
58
+ //#region src/types/schema.ts
59
+ var schema_exports = /* @__PURE__ */ __exportAll({
60
+ CanvasBoard: () => CanvasBoard,
61
+ Connection: () => Connection,
62
+ Layout: () => Layout,
63
+ Shape: () => Shape,
64
+ make: () => make
65
+ });
66
+ /**
67
+ * Base type for all shapes.
68
+ */
69
+ var Shape = GraphNode.GraphNode.mapFields((fields) => Struct.omit(fields, ["type"])).pipe(Schema.fieldsAssign({
70
+ type: Schema.String,
71
+ text: Schema.optional(Schema.String),
72
+ guide: Schema.optional(Schema.Boolean),
73
+ classNames: Schema.optional(Schema.String)
74
+ }));
75
+ /**
76
+ * Connections between shapes.
77
+ */
78
+ var Connection = GraphEdge.GraphEdge.mapFields(Struct.assign({
79
+ input: Schema.optional(Schema.String),
80
+ output: Schema.optional(Schema.String)
81
+ }));
82
+ var Layout = Schema.Struct({ shapes: Schema.Array(Shape) });
83
+ var CanvasBoard = class extends Type.makeObject(DXN.make("org.dxos.type.canvasBoard", "0.1.0"))(Schema.Struct({
84
+ name: Schema.optional(Schema.String),
85
+ computeGraph: Schema.optional(Ref.Ref(ComputeGraph)),
86
+ /**
87
+ * Graph of shapes positioned on the canvas.
88
+ */
89
+ layout: GraphModel.Data
90
+ }).pipe(Annotation.IconAnnotation.set({
91
+ icon: "ph--infinity--regular",
92
+ hue: "sky"
93
+ }), Annotation.UserType.set())) {};
94
+ /**
95
+ * Creates a CanvasBoard with default empty layout and compute graph when not provided.
96
+ */
97
+ var make = (props = {}) => {
98
+ return Obj.make(CanvasBoard, {
99
+ ...props,
100
+ layout: props.layout ?? {
101
+ nodes: [],
102
+ edges: []
103
+ },
104
+ computeGraph: props.computeGraph ?? Ref.make(ComputeGraphModel.create().root)
105
+ });
106
+ };
107
+ //#endregion
108
+ //#region src/types/shapes.ts
109
+ var Point = Schema.Struct({
110
+ x: Schema.Number,
111
+ y: Schema.Number
112
+ });
113
+ var Size = Schema.Struct({
114
+ width: Schema.Number,
115
+ height: Schema.Number
116
+ });
117
+ var PathShape = Shape.mapFields(Struct.assign({
118
+ type: Schema.Literal("path"),
119
+ path: Schema.String,
120
+ start: Schema.optional(Schema.String),
121
+ end: Schema.optional(Schema.String)
122
+ }));
123
+ var isPath = Schema.is(PathShape);
124
+ /**
125
+ * Closed shape.
126
+ * Common handling via Frame.
127
+ */
128
+ var Polygon = Shape.mapFields(Struct.assign({
129
+ center: Point,
130
+ size: Size.mapFields(Struct.map(Schema.mutableKey))
131
+ })).mapFields(Struct.map(Schema.mutableKey));
132
+ var isPolygon = Schema.is(Polygon);
133
+ var EllipseShape = Polygon.mapFields(Struct.assign({ type: Schema.Literal("ellipse") }));
134
+ var NoteShape = Polygon.mapFields(Struct.assign({ type: Schema.Literal("note") }));
135
+ var RectangleShape = Polygon.mapFields(Struct.assign({
136
+ type: Schema.Literal("rectangle"),
137
+ rounded: Schema.optional(Schema.Number)
138
+ }));
139
+ //#endregion
140
+ export { RectangleShape as a, Shape as c, Polygon as i, schema_exports as l, NoteShape as n, isPath as o, PathShape as r, isPolygon as s, EllipseShape as t, CanvasGraphModel as u };
141
+
142
+ //# sourceMappingURL=chunk-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-types.mjs","names":[],"sources":["../../src/types/model.ts","../../src/types/schema.ts","../../src/types/shapes.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { DEFAULT_INPUT, DEFAULT_OUTPUT } from '@dxos/conductor';\nimport { Obj } from '@dxos/echo';\nimport { isProxy } from '@dxos/echo/internal';\nimport * as GraphModel from '@dxos/graph/GraphModel';\nimport { type MakeOptional } from '@dxos/util';\n\nimport { type Connection, type Shape } from './schema.ts';\n\nexport class CanvasGraphModel<S extends Shape = Shape> extends GraphModel.AbstractGraphModel<\n S,\n Connection,\n CanvasGraphModel<S>\n> {\n static create<S extends Shape>(\n graph?: Partial<GraphModel.AnyData>,\n change?: GraphModel.GraphChangeFunction,\n ): CanvasGraphModel<S> {\n if (isProxy(graph)) {\n return new CanvasGraphModel<S>({ graph: graph as GraphModel.Data<S, Connection>, change });\n }\n\n return new CanvasGraphModel<S>({\n graph: {\n nodes: (graph?.nodes ?? []) as S[],\n edges: (graph?.edges ?? []) as Connection[],\n },\n });\n }\n\n override copy(graph?: Partial<GraphModel.Data<S, Connection>>): CanvasGraphModel<S> {\n return CanvasGraphModel.create<S>(graph);\n }\n\n createNode({ id, ...rest }: MakeOptional<S, 'id'>): S {\n const node: S = { id: id ?? Obj.ID.random(), ...rest } as S;\n this.addNode(node);\n return node;\n }\n\n createEdge({\n id,\n source,\n target,\n output = DEFAULT_OUTPUT,\n input = DEFAULT_INPUT,\n ...rest\n }: MakeOptional<Connection, 'id'>): Connection {\n const edge: Connection = {\n id: id ?? Obj.ID.random(),\n source,\n target,\n output,\n input,\n ...rest,\n } as Connection;\n this.addEdge(edge);\n return edge;\n }\n}\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as Struct from 'effect/Struct';\n\nimport { ComputeGraph, ComputeGraphModel } from '@dxos/conductor';\nimport { Annotation, DXN, Obj, Ref, Type } from '@dxos/echo';\nimport * as GraphEdge from '@dxos/graph/GraphEdge';\nimport * as GraphModel from '@dxos/graph/GraphModel';\nimport * as GraphNode from '@dxos/graph/GraphNode';\n\n// TODO(burdon): Consider interop with TLDraw and GeoJSON standards?\n\n/**\n * Base type for all shapes.\n */\nexport const Shape = GraphNode.GraphNode.mapFields((fields) => Struct.omit(fields, ['type'])).pipe(\n // TODO(burdon): Breaks graph contract?\n Schema.fieldsAssign({\n type: Schema.String,\n text: Schema.optional(Schema.String),\n guide: Schema.optional(Schema.Boolean),\n classNames: Schema.optional(Schema.String),\n }),\n);\n\nexport type Shape = Schema.Schema.Type<typeof Shape>;\n\n/**\n * Connections between shapes.\n */\nexport const Connection = GraphEdge.GraphEdge.mapFields(\n Struct.assign({\n input: Schema.optional(Schema.String),\n output: Schema.optional(Schema.String),\n }),\n);\n\nexport type Connection = Schema.Schema.Type<typeof Connection>;\n\n// TODO(burdon): Rename scene?\nexport const Layout = Schema.Struct({\n shapes: Schema.Array(Shape),\n});\n\nexport type Layout = Schema.Schema.Type<typeof Layout>;\n\n// TODO(wittjosiah): Rename WorkflowType?\nexport class CanvasBoard extends Type.makeObject<CanvasBoard>(DXN.make('org.dxos.type.canvasBoard', '0.1.0'))(\n Schema.Struct({\n name: Schema.optional(Schema.String),\n\n computeGraph: Schema.optional(Ref.Ref(ComputeGraph)),\n\n /**\n * Graph of shapes positioned on the canvas.\n */\n layout: GraphModel.Data,\n }).pipe(Annotation.IconAnnotation.set({ icon: 'ph--infinity--regular', hue: 'sky' }), Annotation.UserType.set()),\n) {}\n\n/**\n * Creates a CanvasBoard with default empty layout and compute graph when not provided.\n */\nexport const make = (props: Partial<Obj.MakeProps<typeof CanvasBoard>> = {}) => {\n return Obj.make(CanvasBoard, {\n ...props,\n layout: props.layout ?? { nodes: [], edges: [] },\n computeGraph: props.computeGraph ?? Ref.make(ComputeGraphModel.create().root),\n });\n};\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as Struct from 'effect/Struct';\n\nimport { Shape } from './schema.ts';\n\n// The engine's `Point` / `Size` structs, declared here because its `/scene` entry also exports React, which this\n// React-free entry must not import (plugins load it in workers).\nconst Point = Schema.Struct({ x: Schema.Number, y: Schema.Number });\nconst Size = Schema.Struct({ width: Schema.Number, height: Schema.Number });\n\n//\n// Path\n//\n\nexport const PathShape = Shape.mapFields(\n Struct.assign({\n type: Schema.Literal('path'),\n path: Schema.String,\n start: Schema.optional(Schema.String),\n end: Schema.optional(Schema.String),\n }),\n);\n\nexport type PathShape = Schema.Schema.Type<typeof PathShape>;\nexport const isPath = Schema.is(PathShape);\n\n//\n// Polygon\n//\n\n/**\n * Closed shape.\n * Common handling via Frame.\n */\n// `Schema.mutable` is arrays-only in v4, so a struct's fields are made mutable key by key.\nexport const Polygon = Shape.mapFields(\n Struct.assign({\n center: Point,\n size: Size.mapFields(Struct.map(Schema.mutableKey)),\n }),\n).mapFields(Struct.map(Schema.mutableKey));\n\nexport type Polygon = Schema.Schema.Type<typeof Polygon>;\nexport const isPolygon = Schema.is(Polygon);\n\nexport const EllipseShape = Polygon.mapFields(\n Struct.assign({\n type: Schema.Literal('ellipse'),\n }),\n);\n\nexport type EllipseShape = Schema.Schema.Type<typeof EllipseShape>;\n\nexport const NoteShape = Polygon.mapFields(\n Struct.assign({\n type: Schema.Literal('note'),\n }),\n);\n\nexport type NoteShape = Schema.Schema.Type<typeof NoteShape>;\n\nexport const RectangleShape = Polygon.mapFields(\n Struct.assign({\n type: Schema.Literal('rectangle'),\n rounded: Schema.optional(Schema.Number),\n }),\n);\n\nexport type RectangleShape = Schema.Schema.Type<typeof RectangleShape>;\n"],"mappings":"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"}