@neta-art/cohub 8.23.0 → 9.0.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 (159) hide show
  1. package/dist/board/animation.d.ts +57 -181
  2. package/dist/board/animation.js +374 -220
  3. package/dist/board/core/arrow-geometry.d.ts +33 -18
  4. package/dist/board/core/arrow-geometry.js +283 -52
  5. package/dist/board/core/draw-geometry.d.ts +22 -36
  6. package/dist/board/core/draw-geometry.js +148 -85
  7. package/dist/board/core/export-assets.d.ts +3 -6
  8. package/dist/board/core/export-assets.js +0 -2
  9. package/dist/board/core/export-plan.d.ts +12 -63
  10. package/dist/board/core/export-plan.js +55 -94
  11. package/dist/board/core/palette.d.ts +4 -21
  12. package/dist/board/core/palette.js +8 -13
  13. package/dist/board/core/scene.d.ts +33 -0
  14. package/dist/board/core/scene.js +302 -0
  15. package/dist/board/core/shape-definition.d.ts +12 -24
  16. package/dist/board/core/shape-definition.js +0 -19
  17. package/dist/board/core/shape-types.d.ts +6 -120
  18. package/dist/board/core/shape-types.js +5 -5
  19. package/dist/board/core/text-metrics.d.ts +8 -11
  20. package/dist/board/core/text-metrics.js +5 -34
  21. package/dist/board/core/tool-styles.d.ts +6 -16
  22. package/dist/board/core/tool-styles.js +17 -25
  23. package/dist/board/export/index.d.ts +10 -17
  24. package/dist/board/export/index.js +22 -21
  25. package/dist/board/export/scene.d.ts +10 -16
  26. package/dist/board/export/scene.js +17 -30
  27. package/dist/board/geometry.d.ts +27 -56
  28. package/dist/board/geometry.js +7 -67
  29. package/dist/board/headless/index.d.ts +7 -27
  30. package/dist/board/headless/index.js +20 -19
  31. package/dist/board/headless/sketch.d.ts +19 -0
  32. package/dist/board/headless/sketch.js +146 -0
  33. package/dist/board/image-key.d.ts +2 -12
  34. package/dist/board/image-key.js +3 -13
  35. package/dist/board/index.d.ts +18 -20
  36. package/dist/board/index.js +17 -17
  37. package/dist/board/media-playback.d.ts +3 -6
  38. package/dist/board/media-playback.js +6 -6
  39. package/dist/board/presets.d.ts +150 -0
  40. package/dist/board/presets.js +226 -0
  41. package/dist/board/render/board-background.d.ts +5 -3
  42. package/dist/board/render/board-background.js +8 -7
  43. package/dist/board/render/clip.d.ts +14 -0
  44. package/dist/board/render/clip.js +47 -0
  45. package/dist/board/render/index.d.ts +8 -5
  46. package/dist/board/render/index.js +7 -4
  47. package/dist/board/render/media-interaction.d.ts +4 -5
  48. package/dist/board/render/media-interaction.js +1 -2
  49. package/dist/board/render/palette.d.ts +6 -2
  50. package/dist/board/render/palette.js +7 -1
  51. package/dist/board/render/renderers/arrow-card-renderer.js +69 -71
  52. package/dist/board/render/renderers/audio-card-renderer.js +3 -3
  53. package/dist/board/render/renderers/base-card-renderer.d.ts +6 -17
  54. package/dist/board/render/renderers/base-card-renderer.js +1 -24
  55. package/dist/board/render/renderers/board-renderer-registry.d.ts +20 -50
  56. package/dist/board/render/renderers/board-renderer-registry.js +6 -7
  57. package/dist/board/render/renderers/draw-card-renderer.js +89 -56
  58. package/dist/board/render/renderers/effect-card-renderer.d.ts +6 -0
  59. package/dist/board/render/renderers/effect-card-renderer.js +197 -0
  60. package/dist/board/render/renderers/far-plate.d.ts +4 -21
  61. package/dist/board/render/renderers/far-plate.js +15 -34
  62. package/dist/board/render/renderers/file-card-renderer.d.ts +4 -25
  63. package/dist/board/render/renderers/file-card-renderer.js +8 -58
  64. package/dist/board/render/renderers/frame-card-renderer.js +28 -28
  65. package/dist/board/render/renderers/image-card-renderer.d.ts +4 -3
  66. package/dist/board/render/renderers/image-card-renderer.js +0 -9
  67. package/dist/board/render/renderers/shape-card-renderer.d.ts +9 -0
  68. package/dist/board/render/renderers/shape-card-renderer.js +240 -0
  69. package/dist/board/render/renderers/sketch-card-renderer.d.ts +5 -0
  70. package/dist/board/render/renderers/sketch-card-renderer.js +98 -0
  71. package/dist/board/render/renderers/task-card-renderer.d.ts +0 -1
  72. package/dist/board/render/renderers/task-card-renderer.js +14 -16
  73. package/dist/board/render/renderers/text-card-renderer.d.ts +1 -3
  74. package/dist/board/render/renderers/text-card-renderer.js +56 -46
  75. package/dist/board/render/renderers/unknown-card-renderer.js +4 -10
  76. package/dist/board/render/renderers/video-card-renderer.d.ts +4 -2
  77. package/dist/board/render/renderers/video-card-renderer.js +2 -1
  78. package/dist/board/render/sketch-host.d.ts +14 -0
  79. package/dist/board/render/sketch-host.js +216 -0
  80. package/dist/board/render/stroke.d.ts +12 -0
  81. package/dist/board/render/stroke.js +90 -0
  82. package/dist/board/render/text-measurement.d.ts +6 -26
  83. package/dist/board/render/text-measurement.js +11 -30
  84. package/dist/board/replay.d.ts +6 -31
  85. package/dist/board/replay.js +45 -203
  86. package/dist/board/runtime/board-player.d.ts +24 -0
  87. package/dist/board/runtime/board-player.js +161 -0
  88. package/dist/board/task.d.ts +2 -10
  89. package/dist/board/task.js +1 -10
  90. package/dist/chunks/environment.d.ts +2296 -3864
  91. package/dist/chunks/host-bridge.d.ts +253 -0
  92. package/dist/chunks/http.d.ts +238 -58
  93. package/dist/chunks/http.js +1061 -1034
  94. package/dist/chunks/transport.js +113 -59
  95. package/dist/chunks/websocket.d.ts +1 -1
  96. package/dist/chunks/websocket.js +1 -1
  97. package/dist/host-bridge.d.ts +54 -0
  98. package/dist/host-bridge.js +322 -0
  99. package/dist/http.d.ts +3 -3
  100. package/dist/index.d.ts +76 -193
  101. package/dist/index.js +2037 -1191
  102. package/dist/protocol/dist/board-constants.d.ts +1 -29
  103. package/dist/protocol/dist/board-constants.js +2 -115
  104. package/dist/protocol/dist/board-layout.d.ts +59 -0
  105. package/dist/protocol/dist/board-layout.js +482 -0
  106. package/dist/protocol/dist/board-model.d.ts +2052 -0
  107. package/dist/protocol/dist/board-model.js +592 -0
  108. package/dist/protocol/dist/board-patch.d.ts +86 -0
  109. package/dist/protocol/dist/board-patch.js +734 -0
  110. package/dist/protocol/dist/board-schema.d.ts +33 -0
  111. package/dist/protocol/dist/board-schema.js +59 -0
  112. package/dist/protocol/dist/board-upgrade.d.ts +1 -0
  113. package/dist/protocol/dist/board-url.d.ts +1 -3
  114. package/dist/protocol/dist/board-url.js +2 -2
  115. package/dist/protocol/dist/board.d.ts +37 -232
  116. package/dist/protocol/dist/board.js +62 -160
  117. package/dist/protocol/dist/display/actions.d.ts +1 -0
  118. package/dist/protocol/dist/display/index.d.ts +2 -0
  119. package/dist/protocol/dist/index.d.ts +11 -12
  120. package/dist/protocol/dist/model/metrics.d.ts +2 -0
  121. package/dist/protocol/dist/model/session.d.ts +2 -1
  122. package/dist/protocol/dist/realtime/types.d.ts +2 -2
  123. package/dist/protocol/dist/runtime/index.d.ts +1 -0
  124. package/dist/space-picker.d.ts +1 -0
  125. package/dist/space-picker.js +1 -0
  126. package/dist/types.d.ts +2 -5
  127. package/package.json +9 -1
  128. package/dist/board/core/connections.d.ts +0 -108
  129. package/dist/board/core/connections.js +0 -455
  130. package/dist/board/mutation.d.ts +0 -6
  131. package/dist/board/mutation.js +0 -14
  132. package/dist/board/render/connection-layer.d.ts +0 -53
  133. package/dist/board/render/connection-layer.js +0 -375
  134. package/dist/board/render/renderers/geo-card-renderer.d.ts +0 -5
  135. package/dist/board/render/renderers/geo-card-renderer.js +0 -127
  136. package/dist/board/semantic-document.d.ts +0 -37
  137. package/dist/board/semantic-document.js +0 -288
  138. package/dist/board/semantic-mutation.d.ts +0 -10
  139. package/dist/board/semantic-mutation.js +0 -209
  140. package/dist/protocol/dist/board-animation.js +0 -34
  141. package/dist/protocol/dist/board-authoring.d.ts +0 -1326
  142. package/dist/protocol/dist/board-authoring.js +0 -302
  143. package/dist/protocol/dist/board-capability-registry.d.ts +0 -2
  144. package/dist/protocol/dist/board-capability-registry.js +0 -123
  145. package/dist/protocol/dist/board-codec.d.ts +0 -3
  146. package/dist/protocol/dist/board-codec.js +0 -383
  147. package/dist/protocol/dist/board-composition.d.ts +0 -383
  148. package/dist/protocol/dist/board-composition.js +0 -310
  149. package/dist/protocol/dist/board-connection.d.ts +0 -317
  150. package/dist/protocol/dist/board-connection.js +0 -219
  151. package/dist/protocol/dist/board-document.d.ts +0 -1566
  152. package/dist/protocol/dist/board-document.js +0 -456
  153. package/dist/protocol/dist/board-effect.d.ts +0 -96
  154. package/dist/protocol/dist/board-effect.js +0 -54
  155. package/dist/protocol/dist/board-geometry.d.ts +0 -15
  156. package/dist/protocol/dist/board-geometry.js +0 -137
  157. package/dist/protocol/dist/board-node.d.ts +0 -8
  158. package/dist/protocol/dist/board-node.js +0 -252
  159. /package/dist/protocol/dist/{board-animation.d.ts → host-bridge.d.ts} +0 -0
@@ -1,383 +0,0 @@
1
- import { BoardAuthoringItemSchema, BoardItemPatchSchema } from "./board-authoring.js";
2
- import { BoardNodeInputSchema } from "./board.js";
3
- import { boardArrowFrame, boardDrawBounds, boardDrawPointsToLocal, boardDrawPointsToWorld } from "./board-geometry.js";
4
- import { BOARD_NATIVE_NODE_TYPES, validateBoardNodeInput } from "./board-node.js";
5
- //#region ../protocol/dist/board-codec.js
6
- var BoardItemValidationError = class extends Error {
7
- diagnostics;
8
- constructor(diagnostics) {
9
- super(diagnostics[0]?.message ?? "invalid Board item");
10
- this.diagnostics = diagnostics;
11
- this.name = "BoardItemValidationError";
12
- }
13
- };
14
- function authoringSchemaDiagnostics(error, path) {
15
- return error.issues.slice(0, 32).map((issue) => ({
16
- severity: "error",
17
- code: "INVALID_BOARD_NODE",
18
- message: issue.message,
19
- path: `${path}.${issue.path.map(String).join(".") || "item"}`
20
- }));
21
- }
22
- function authoringDiagnostic(diagnostic, path) {
23
- const internalPath = diagnostic.path;
24
- const authoringSuffix = internalPath.replace(/^node(?:\.|$)/, "").replace(/^data\.points/, "props.points").replace(/^data\./, "props.").replace(/^style\./, "style.").replace(/^view\./, "source.snapshot.").replace(/^nodeId$/, "id").replace(/^(x|y)$/, "position.$1").replace(/^(width|height)$/, "size.$1");
25
- const mappedPath = `${path}${authoringSuffix ? `.${authoringSuffix}` : ""}`;
26
- return {
27
- ...diagnostic,
28
- path: mappedPath,
29
- message: diagnostic.message.replace(internalPath, mappedPath)
30
- };
31
- }
32
- const isRecord = (value) => Boolean(value && typeof value === "object" && !Array.isArray(value));
33
- function baseItem(node) {
34
- return {
35
- id: node.nodeId,
36
- position: {
37
- x: node.x,
38
- y: node.y
39
- },
40
- size: {
41
- width: node.width,
42
- height: node.height
43
- },
44
- rotation: node.rotation,
45
- ...node.parentId ? { parentId: node.parentId } : {},
46
- ...node.data.locked === true ? { locked: true } : {},
47
- ...isRecord(node.data.metadata) ? { metadata: node.data.metadata } : {}
48
- };
49
- }
50
- function filePath(node) {
51
- if (!node.refPath) throw new Error(`Board item ${node.nodeId} is missing its source path`);
52
- return node.refPath;
53
- }
54
- function style(node) {
55
- const value = {};
56
- if (typeof node.data.color === "string") value.color = node.data.color;
57
- if (typeof node.data.size === "number") value.strokeWidth = node.data.size;
58
- if (typeof node.data.fillOpacity === "number") value.fillOpacity = node.data.fillOpacity;
59
- return Object.keys(value).length ? value : void 0;
60
- }
61
- function boardNodeToAuthoringItem(node) {
62
- const base = baseItem(node);
63
- if (node.type === "draw" || node.type === "arrow") {
64
- delete base.size;
65
- delete base.position;
66
- }
67
- const visual = style(node);
68
- let candidate;
69
- switch (node.type) {
70
- case "text":
71
- candidate = {
72
- ...base,
73
- type: "text",
74
- props: {
75
- text: node.data.text ?? "",
76
- fontSize: node.data.fontSize ?? 24
77
- },
78
- ...visual ? { style: visual } : {}
79
- };
80
- break;
81
- case "geo":
82
- candidate = {
83
- ...base,
84
- type: "geo",
85
- props: {
86
- shape: node.data.geo ?? "rectangle",
87
- text: node.data.text ?? ""
88
- },
89
- ...visual ? { style: visual } : {}
90
- };
91
- break;
92
- case "draw":
93
- candidate = {
94
- ...base,
95
- type: "draw",
96
- props: { points: Array.isArray(node.data.points) ? boardDrawPointsToWorld(node.data.points, node.x, node.y) : [] },
97
- ...visual ? { style: visual } : {}
98
- };
99
- break;
100
- case "arrow":
101
- candidate = {
102
- ...base,
103
- type: "arrow",
104
- props: {
105
- start: node.data.start,
106
- end: node.data.end,
107
- bend: node.data.bend ?? 0,
108
- arrowStart: node.data.arrowStart ?? false,
109
- arrowEnd: node.data.arrowEnd ?? true,
110
- label: node.data.label ?? ""
111
- },
112
- ...visual ? { style: visual } : {}
113
- };
114
- break;
115
- case "frame":
116
- candidate = {
117
- ...base,
118
- type: "frame",
119
- props: { label: node.data.label ?? "Frame" },
120
- ...visual ? { style: visual } : {}
121
- };
122
- break;
123
- case "image":
124
- candidate = {
125
- ...base,
126
- type: "image",
127
- props: isRecord(node.data.crop) ? { crop: node.data.crop } : {},
128
- source: {
129
- kind: "space-file",
130
- path: filePath(node),
131
- ...Object.keys(node.view).length ? { snapshot: node.view } : {}
132
- }
133
- };
134
- break;
135
- case "video":
136
- case "audio":
137
- case "file":
138
- candidate = {
139
- ...base,
140
- type: node.type,
141
- props: {},
142
- source: {
143
- kind: "space-file",
144
- path: filePath(node),
145
- ...Object.keys(node.view).length ? { snapshot: node.view } : {}
146
- }
147
- };
148
- break;
149
- case "task":
150
- candidate = {
151
- ...base,
152
- type: "task",
153
- props: {
154
- taskRunId: node.data.taskRunId,
155
- snapshot: node.view
156
- }
157
- };
158
- break;
159
- default: {
160
- const props = { ...node.data };
161
- delete props.locked;
162
- delete props.metadata;
163
- delete props.kindVersion;
164
- candidate = {
165
- ...base,
166
- type: node.type,
167
- kindVersion: typeof node.data.kindVersion === "number" ? node.data.kindVersion : 1,
168
- props,
169
- ...Object.keys(node.style).length ? { style: node.style } : {},
170
- ...node.refPath ? { source: {
171
- kind: node.refKind ?? "space-file",
172
- ref: node.refPath,
173
- ...Object.keys(node.view).length ? { snapshot: node.view } : {}
174
- } } : {}
175
- };
176
- }
177
- }
178
- return BoardAuthoringItemSchema.parse(candidate);
179
- }
180
- function commonData(item) {
181
- return {
182
- ...item.locked ? { locked: true } : {},
183
- ...item.metadata ? { metadata: item.metadata } : {}
184
- };
185
- }
186
- function defaultSize(type) {
187
- if (type === "frame") return {
188
- width: 480,
189
- height: 320
190
- };
191
- if (type === "text") return {
192
- width: 320,
193
- height: 48
194
- };
195
- if (type === "task") return {
196
- width: 420,
197
- height: 240
198
- };
199
- if (type === "image" || type === "video") return {
200
- width: 640,
201
- height: 360
202
- };
203
- if (type === "audio") return {
204
- width: 480,
205
- height: 96
206
- };
207
- if (type === "file") return {
208
- width: 360,
209
- height: 220
210
- };
211
- return {
212
- width: 240,
213
- height: 160
214
- };
215
- }
216
- function authoringFrame(item) {
217
- if (item.type === "draw") {
218
- const points = item.props;
219
- const size = Number(item.style?.strokeWidth ?? 4);
220
- const bounds = boardDrawBounds(points.points, size);
221
- return {
222
- x: bounds.x,
223
- y: bounds.y,
224
- width: bounds.width,
225
- height: bounds.height,
226
- rotation: item.rotation
227
- };
228
- }
229
- if (item.type === "arrow") {
230
- const props = item.props;
231
- return {
232
- ...boardArrowFrame({
233
- ...props,
234
- size: Number(item.style?.strokeWidth ?? 2.5)
235
- }),
236
- rotation: item.rotation
237
- };
238
- }
239
- const position = item.position;
240
- const size = item.size ?? defaultSize(item.type);
241
- return {
242
- x: position.x,
243
- y: position.y,
244
- width: size.width,
245
- height: size.height,
246
- rotation: item.rotation
247
- };
248
- }
249
- function boardAuthoringItemToNode(value, options = {}) {
250
- const item = BoardAuthoringItemSchema.parse(value);
251
- const node = {
252
- nodeId: item.id,
253
- type: item.type,
254
- parentId: item.parentId ?? null,
255
- orderKey: options.orderKey ?? null,
256
- ...authoringFrame(item),
257
- refKind: null,
258
- refPath: null,
259
- refUrl: null,
260
- view: {},
261
- style: {},
262
- data: commonData(item)
263
- };
264
- const itemStyle = "style" in item ? item.style : void 0;
265
- const color = itemStyle && "color" in itemStyle ? itemStyle.color : void 0;
266
- const strokeWidth = itemStyle && "strokeWidth" in itemStyle ? itemStyle.strokeWidth : void 0;
267
- const fillOpacity = itemStyle && "fillOpacity" in itemStyle ? itemStyle.fillOpacity : void 0;
268
- switch (item.type) {
269
- case "text":
270
- node.data = {
271
- ...node.data,
272
- ...item.props,
273
- color: color ?? "neutral"
274
- };
275
- break;
276
- case "geo":
277
- node.data = {
278
- ...node.data,
279
- geo: item.props.shape,
280
- text: item.props.text,
281
- color: color ?? "brand",
282
- fillOpacity: fillOpacity ?? 0
283
- };
284
- break;
285
- case "draw": {
286
- const points = item.props;
287
- node.data = {
288
- ...node.data,
289
- points: boardDrawPointsToLocal(points.points, node.x, node.y),
290
- color: color ?? "brand",
291
- size: strokeWidth ?? 4
292
- };
293
- break;
294
- }
295
- case "arrow":
296
- node.data = {
297
- ...node.data,
298
- ...item.props,
299
- color: color ?? "brand",
300
- size: strokeWidth ?? 2.5
301
- };
302
- break;
303
- case "frame":
304
- node.data = {
305
- ...node.data,
306
- ...item.props,
307
- color: color ?? "neutral"
308
- };
309
- break;
310
- case "image": {
311
- const source = item.source;
312
- node.data = {
313
- ...node.data,
314
- ...item.props.crop ? { crop: item.props.crop } : {}
315
- };
316
- node.refKind = "space_file";
317
- node.refPath = source.path;
318
- node.view = source.snapshot ?? {};
319
- break;
320
- }
321
- case "video":
322
- case "audio":
323
- case "file": {
324
- const source = item.source;
325
- node.refKind = "space_file";
326
- node.refPath = source.path;
327
- node.view = source.snapshot ?? {};
328
- break;
329
- }
330
- case "task":
331
- node.data = {
332
- ...node.data,
333
- taskRunId: item.props.taskRunId
334
- };
335
- node.view = item.props.snapshot;
336
- break;
337
- default: {
338
- const extension = item;
339
- node.data = {
340
- ...node.data,
341
- ...extension.props,
342
- kindVersion: extension.kindVersion
343
- };
344
- node.style = extension.style ?? {};
345
- if (extension.source) {
346
- node.refKind = extension.source.kind;
347
- node.refPath = extension.source.ref;
348
- node.view = extension.source.snapshot ?? {};
349
- }
350
- }
351
- }
352
- if (BOARD_NATIVE_NODE_TYPES.includes(node.type)) {
353
- const diagnostics = validateBoardNodeInput(node);
354
- if (diagnostics.length) throw new BoardItemValidationError(diagnostics.map((diagnostic) => authoringDiagnostic(diagnostic, options.path ?? "item")));
355
- } else {
356
- const parsed = BoardNodeInputSchema.safeParse(node);
357
- if (!parsed.success) throw new BoardItemValidationError(parsed.error.issues.map((issue) => ({
358
- severity: "error",
359
- code: "INVALID_BOARD_NODE",
360
- message: issue.message,
361
- path: `${options.path ?? "item"}.${issue.path.join(".") || "item"}`
362
- })));
363
- }
364
- return node;
365
- }
366
- function applyBoardItemPatch(current, value, path = "item") {
367
- const merged = mergePatch(current, BoardItemPatchSchema.parse(value));
368
- merged.id = current.id;
369
- merged.type = current.type;
370
- if ("kindVersion" in current) merged.kindVersion = current.kindVersion;
371
- const parsed = BoardAuthoringItemSchema.safeParse(merged);
372
- if (!parsed.success) throw new BoardItemValidationError(authoringSchemaDiagnostics(parsed.error, path));
373
- return parsed.data;
374
- }
375
- function mergePatch(current, patch) {
376
- if (!isRecord(patch)) return patch;
377
- const result = isRecord(current) ? { ...current } : {};
378
- for (const [key, value] of Object.entries(patch)) if (value === null) delete result[key];
379
- else result[key] = isRecord(value) ? mergePatch(result[key], value) : value;
380
- return result;
381
- }
382
- //#endregion
383
- export { BoardItemValidationError, applyBoardItemPatch, authoringSchemaDiagnostics, boardAuthoringItemToNode, boardNodeToAuthoringItem };