@neta-art/cohub 11.5.1 → 12.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 (73) hide show
  1. package/dist/board/editor/animation.js +2 -1
  2. package/dist/board/editor/creation.js +1 -1
  3. package/dist/board/editor/document-edits.d.ts +1 -1
  4. package/dist/board/editor/document-edits.js +1 -19
  5. package/dist/board/editor/document.js +2 -1
  6. package/dist/board/editor/index.d.ts +2 -1
  7. package/dist/board/editor/index.js +2 -1
  8. package/dist/board/editor/snapshots.js +11 -13
  9. package/dist/board/export/index.js +1 -1
  10. package/dist/board/export/scene.js +1 -1
  11. package/dist/board/model/client-geometry.d.ts +22 -0
  12. package/dist/board/model/client-geometry.js +94 -0
  13. package/dist/board/model/document-share.d.ts +5 -0
  14. package/dist/board/model/document-share.js +27 -0
  15. package/dist/board/model/index.d.ts +5 -4
  16. package/dist/board/model/index.js +4 -3
  17. package/dist/board/model/items/create.d.ts +5 -1
  18. package/dist/board/model/items/create.js +29 -58
  19. package/dist/board/model/items/index.d.ts +2 -2
  20. package/dist/board/model/items/index.js +2 -2
  21. package/dist/board/model/items/registry.js +2 -5
  22. package/dist/board/model/json.d.ts +4 -0
  23. package/dist/board/model/json.js +22 -0
  24. package/dist/board/model/media-playback.d.ts +6 -3
  25. package/dist/board/player/index.d.ts +6 -2
  26. package/dist/board/player/index.js +33 -15
  27. package/dist/board/render/index.d.ts +2 -2
  28. package/dist/board/render/index.js +6 -6
  29. package/dist/board/render/renderers/arrow-card-renderer.js +5 -1
  30. package/dist/board/render/renderers/audio-card-renderer.js +4 -1
  31. package/dist/board/render/renderers/board-renderer-registry.d.ts +4 -2
  32. package/dist/board/render/renderers/custom-card-renderer.js +5 -2
  33. package/dist/board/render/renderers/file-card-renderer.js +4 -1
  34. package/dist/board/render/renderers/frame-card-renderer.js +5 -1
  35. package/dist/board/render/renderers/image-card-renderer.js +13 -49
  36. package/dist/board/render/renderers/model-card-renderer.js +4 -1
  37. package/dist/board/render/renderers/shape-card-renderer.js +5 -1
  38. package/dist/board/render/renderers/task-card-renderer.js +6 -3
  39. package/dist/board/render/renderers/text-card-renderer.js +6 -2
  40. package/dist/board/render/renderers/unknown-card-renderer.js +4 -0
  41. package/dist/board/render/renderers/video-card-renderer.js +19 -18
  42. package/dist/board/render/script-host.d.ts +2 -0
  43. package/dist/board/render/script-host.js +44 -9
  44. package/dist/board/render/script-resolution.d.ts +4 -0
  45. package/dist/board/render/script-resolution.js +18 -0
  46. package/dist/board/render/surface.d.ts +9 -2
  47. package/dist/board/render/surface.js +15 -1
  48. package/dist/board/replica/index.js +4 -1
  49. package/dist/board/stage/assets.d.ts +12 -8
  50. package/dist/board/stage/assets.js +173 -88
  51. package/dist/board/stage/index.d.ts +3 -3
  52. package/dist/board/stage/index.js +3 -3
  53. package/dist/board/stage/lru.d.ts +3 -2
  54. package/dist/board/stage/lru.js +8 -4
  55. package/dist/board/stage/pointer.d.ts +1 -1
  56. package/dist/board/stage/pointer.js +4 -5
  57. package/dist/board/stage/scene.d.ts +3 -0
  58. package/dist/board/stage/scene.js +44 -8
  59. package/dist/board/stage/stage.d.ts +1 -0
  60. package/dist/board/stage/stage.js +123 -56
  61. package/dist/board/stage/views.d.ts +7 -2
  62. package/dist/board/stage/views.js +50 -21
  63. package/dist/chunks/environment.d.ts +16 -2
  64. package/dist/index.js +65 -22
  65. package/dist/protocol/dist/board-constants.js +56 -1
  66. package/dist/protocol/dist/board-layout.d.ts +8 -1
  67. package/dist/protocol/dist/board-layout.js +16 -4
  68. package/dist/protocol/dist/board-model.js +13 -19
  69. package/dist/protocol/dist/board-schema.d.ts +52 -0
  70. package/dist/protocol/dist/board-schema.js +8 -0
  71. package/dist/protocol/dist/core/media.js +1 -0
  72. package/dist/protocol/dist/index.d.ts +2 -2
  73. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -118,6 +118,51 @@ function batchUploadEntries(entries, sizeOf, options = {}) {
118
118
  if (batch.length > 0) batches.push(batch);
119
119
  return batches;
120
120
  }
121
+ const BOARD_DEFAULT_ITEM_SIZE = {
122
+ width: 240,
123
+ height: 160
124
+ };
125
+ const BOARD_DEFAULT_SIZES = {
126
+ frame: {
127
+ width: 480,
128
+ height: 320
129
+ },
130
+ shape: {
131
+ width: 200,
132
+ height: 140
133
+ },
134
+ image: {
135
+ width: 480,
136
+ height: 270
137
+ },
138
+ video: {
139
+ width: 480,
140
+ height: 270
141
+ },
142
+ audio: {
143
+ width: 320,
144
+ height: 112
145
+ },
146
+ file: {
147
+ width: 260,
148
+ height: 132
149
+ },
150
+ task: {
151
+ width: 480,
152
+ height: 270
153
+ },
154
+ effect: {
155
+ width: 240,
156
+ height: 240
157
+ },
158
+ custom: {
159
+ width: 480,
160
+ height: 320
161
+ }
162
+ };
163
+ function boardDefaultSize(type) {
164
+ return { ...Object.hasOwn(BOARD_DEFAULT_SIZES, type) ? BOARD_DEFAULT_SIZES[type] : BOARD_DEFAULT_ITEM_SIZE };
165
+ }
121
166
  //#endregion
122
167
  //#region ../protocol/dist/board-url.js
123
168
  const BOARD_REMOTE_URL_MAX_LENGTH = 4096;
@@ -293,12 +338,9 @@ const itemEnvelope = {
293
338
  locked: z.boolean().optional(),
294
339
  metadata: z.record(z.string(), z.unknown()).optional()
295
340
  };
296
- const boxed = (width, height) => ({
341
+ const boxed = (size) => ({
297
342
  ...itemEnvelope,
298
- size: BoardSizeSchema.default({
299
- width,
300
- height
301
- })
343
+ size: BoardSizeSchema.default({ ...size })
302
344
  });
303
345
  const unsized = { ...itemEnvelope };
304
346
  const fontSize = finite$1.min(2).max(512);
@@ -316,7 +358,7 @@ const BOARD_SHAPE_GEOMETRIES = [
316
358
  "path"
317
359
  ];
318
360
  const BoardFrameItemSchema = z.object({
319
- ...boxed(480, 320),
361
+ ...boxed(BOARD_DEFAULT_SIZES.frame),
320
362
  type: z.literal("frame"),
321
363
  props: z.object({
322
364
  label: z.string().max(280).default(""),
@@ -340,7 +382,7 @@ const BoardTextItemSchema = z.object({
340
382
  }).strict().prefault({})
341
383
  }).strict();
342
384
  const BoardShapeItemSchema = z.object({
343
- ...boxed(240, 160),
385
+ ...boxed(BOARD_DEFAULT_SIZES.shape),
344
386
  type: z.literal("shape"),
345
387
  props: z.object({
346
388
  geometry: z.enum(BOARD_SHAPE_GEOMETRIES).default("rectangle"),
@@ -440,7 +482,7 @@ const BoardCropSchema = z.object({
440
482
  h: ratio
441
483
  }).strict().describe("Region shown, as fractions of the image. Without it the whole image fits inside size.");
442
484
  const BoardImageItemSchema = z.object({
443
- ...boxed(640, 360),
485
+ ...boxed(BOARD_DEFAULT_SIZES.image),
444
486
  type: z.literal("image"),
445
487
  props: z.object({
446
488
  ...mediaProps,
@@ -448,17 +490,17 @@ const BoardImageItemSchema = z.object({
448
490
  }).strict()
449
491
  }).strict();
450
492
  const BoardVideoItemSchema = z.object({
451
- ...boxed(640, 360),
493
+ ...boxed(BOARD_DEFAULT_SIZES.video),
452
494
  type: z.literal("video"),
453
495
  props: z.object(timedFileProps).strict()
454
496
  }).strict();
455
497
  const BoardAudioItemSchema = z.object({
456
- ...boxed(480, 96),
498
+ ...boxed(BOARD_DEFAULT_SIZES.audio),
457
499
  type: z.literal("audio"),
458
500
  props: z.object(timedFileProps).strict()
459
501
  }).strict();
460
502
  const BoardFileItemSchema = z.object({
461
- ...boxed(360, 220),
503
+ ...boxed(BOARD_DEFAULT_SIZES.file),
462
504
  type: z.literal("file"),
463
505
  props: z.object(fileProps).strict()
464
506
  }).strict();
@@ -515,7 +557,7 @@ const BoardTaskSnapshotSchema = z.object({
515
557
  updatedAt: z.string().optional()
516
558
  }).strict();
517
559
  const BoardTaskItemSchema = z.object({
518
- ...boxed(420, 240),
560
+ ...boxed(BOARD_DEFAULT_SIZES.task),
519
561
  type: z.literal("task"),
520
562
  props: z.object({
521
563
  taskRunId: z.string().min(1).max(160).describe("The generation run shown; the server keeps the card's status and results up to date."),
@@ -530,7 +572,7 @@ const BOARD_EFFECT_KINDS = [
530
572
  "glow"
531
573
  ];
532
574
  const BoardEffectItemSchema = z.object({
533
- ...boxed(240, 240),
575
+ ...boxed(BOARD_DEFAULT_SIZES.effect),
534
576
  type: z.literal("effect"),
535
577
  props: z.object({
536
578
  kind: z.enum(BOARD_EFFECT_KINDS),
@@ -547,18 +589,14 @@ const BoardEffectItemSchema = z.object({
547
589
  }).strict()
548
590
  }).strict();
549
591
  const BoardCustomItemSchema = z.object({
550
- ...boxed(480, 320),
592
+ ...boxed(BOARD_DEFAULT_SIZES.custom),
551
593
  type: z.literal("custom"),
552
594
  script: BoardScriptSchema,
553
595
  props: z.object({}).strict().default({})
554
596
  }).strict();
555
597
  const BOARD_EXTENSION_TYPE_PATTERN = /^[a-z][a-z0-9]*(?:\.[a-z0-9-]+)+$/;
556
598
  const BoardExtensionItemSchema = z.object({
557
- ...itemEnvelope,
558
- size: BoardSizeSchema.default({
559
- width: 240,
560
- height: 160
561
- }),
599
+ ...boxed(BOARD_DEFAULT_ITEM_SIZE),
562
600
  type: z.string().regex(BOARD_EXTENSION_TYPE_PATTERN),
563
601
  props: z.record(z.string(), z.unknown()).default({})
564
602
  }).strict();
@@ -1098,8 +1136,7 @@ function createBoardLayout(initialLookup, dependents) {
1098
1136
  } else box = {
1099
1137
  x: 0,
1100
1138
  y: 0,
1101
- width: 240,
1102
- height: 160
1139
+ ...boardDefaultSize(item.type)
1103
1140
  };
1104
1141
  boxes.set(id, box);
1105
1142
  return box;
@@ -2718,7 +2755,8 @@ const LOCAL_HARNESSES = [
2718
2755
  "pi",
2719
2756
  "codex",
2720
2757
  "claude",
2721
- "workbuddy"
2758
+ "workbuddy",
2759
+ "cursor"
2722
2760
  ];
2723
2761
  const LOCAL_HARNESS_SPECS = {
2724
2762
  pi: {
@@ -2740,6 +2778,11 @@ const LOCAL_HARNESS_SPECS = {
2740
2778
  label: "WorkBuddy",
2741
2779
  nativeFormat: "codebuddy.jsonl",
2742
2780
  readOnly: true
2781
+ },
2782
+ cursor: {
2783
+ label: "Cursor",
2784
+ nativeFormat: "cursor.jsonl",
2785
+ readOnly: false
2743
2786
  }
2744
2787
  };
2745
2788
  const localHarnessSchema = z.enum(LOCAL_HARNESSES);
@@ -1,6 +1,61 @@
1
1
  //#region ../protocol/dist/board-constants.js
2
2
  const BOARD_TEXT_FONT_FAMILY = "Geist";
3
3
  const BOARD_ARROW_STROKE_SIZE = 2.5;
4
+ const BOARD_PAGE_SIZE = {
5
+ width: 960,
6
+ height: 540
7
+ };
8
+ const BOARD_TEXT_SCALE = {
9
+ title: 56,
10
+ heading: 40,
11
+ body: 24,
12
+ caption: 16
13
+ };
14
+ const BOARD_DEFAULT_ITEM_SIZE = {
15
+ width: 240,
16
+ height: 160
17
+ };
18
+ const BOARD_DEFAULT_SIZES = {
19
+ frame: {
20
+ width: 480,
21
+ height: 320
22
+ },
23
+ shape: {
24
+ width: 200,
25
+ height: 140
26
+ },
27
+ image: {
28
+ width: 480,
29
+ height: 270
30
+ },
31
+ video: {
32
+ width: 480,
33
+ height: 270
34
+ },
35
+ audio: {
36
+ width: 320,
37
+ height: 112
38
+ },
39
+ file: {
40
+ width: 260,
41
+ height: 132
42
+ },
43
+ task: {
44
+ width: 480,
45
+ height: 270
46
+ },
47
+ effect: {
48
+ width: 240,
49
+ height: 240
50
+ },
51
+ custom: {
52
+ width: 480,
53
+ height: 320
54
+ }
55
+ };
56
+ function boardDefaultSize(type) {
57
+ return { ...Object.hasOwn(BOARD_DEFAULT_SIZES, type) ? BOARD_DEFAULT_SIZES[type] : BOARD_DEFAULT_ITEM_SIZE };
58
+ }
4
59
  const BOARD_STROKE_MIN_SIZE = 1;
5
60
  const BOARD_STROKE_MAX_SIZE = 64;
6
61
  function clampBoardStrokeSize(size) {
@@ -10,4 +65,4 @@ function clampBoardStrokeSize(size) {
10
65
  const BOARD_FONT_STACK = "\"Geist\", system-ui, -apple-system, \"Noto Sans CJK SC\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"Noto Sans Math\", \"Noto Sans Symbols 2\", \"DejaVu Sans\", \"FreeSans\", \"FreeSerif\", sans-serif";
11
66
  const BOARD_MONO_FONT_STACK = "\"Geist Mono\", \"Fira Code\", ui-monospace, \"Noto Sans Mono CJK SC\", \"Noto Sans Math\", \"DejaVu Sans\", \"FreeSans\", \"FreeSerif\", monospace";
12
67
  //#endregion
13
- export { BOARD_ARROW_STROKE_SIZE, BOARD_FONT_STACK, BOARD_MONO_FONT_STACK, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TEXT_FONT_FAMILY, clampBoardStrokeSize };
68
+ export { BOARD_ARROW_STROKE_SIZE, BOARD_DEFAULT_ITEM_SIZE, BOARD_DEFAULT_SIZES, BOARD_FONT_STACK, BOARD_MONO_FONT_STACK, BOARD_PAGE_SIZE, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TEXT_FONT_FAMILY, BOARD_TEXT_SCALE, boardDefaultSize, clampBoardStrokeSize };
@@ -26,6 +26,13 @@ type BoardTextLayout = {
26
26
  };
27
27
  declare function clampBoardFontSize(fontSize: number): number;
28
28
  declare function layoutBoardText(props: Pick<BoardTextItem["props"], "text" | "fontSize" | "fontWeight" | "font" | "lineHeight" | "width">): BoardTextLayout;
29
+ declare function fitBoardMediaSize(natural: {
30
+ width: number;
31
+ height: number;
32
+ }, edge: number): {
33
+ width: number;
34
+ height: number;
35
+ } | null;
29
36
  declare function drawSampleRadius(strokeWidth: number, pressure: number): number;
30
37
  declare function drawPointsBounds(points: readonly BoardDrawPoint[], strokeWidth: number): BoardRect;
31
38
  declare function pointsRect(points: readonly BoardVec2[]): BoardRect;
@@ -56,4 +63,4 @@ declare function sideAnchor(side: "top" | "right" | "bottom" | "left", offset: n
56
63
  declare function anchorPoint(frame: BoardFrame, anchor: BoardArrowAnchor, toward: BoardVec2): BoardVec2;
57
64
  declare function createDocumentLayout(items: Readonly<Record<string, BoardItem>>): BoardLayout;
58
65
  //#endregion
59
- export { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout, BoardTextMeasurer, IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor };
66
+ export { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout, BoardTextMeasurer, IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor };
@@ -1,4 +1,4 @@
1
- import "./board-constants.js";
1
+ import { boardDefaultSize } from "./board-constants.js";
2
2
  //#region ../protocol/dist/board-layout.js
3
3
  const IDENTITY_MATRIX = [
4
4
  1,
@@ -111,6 +111,19 @@ function layoutBoardText(props) {
111
111
  textSizeCache.set(key, layout);
112
112
  return layout;
113
113
  }
114
+ function fitBoardMediaSize(natural, edge) {
115
+ const { width, height } = natural;
116
+ if (![
117
+ width,
118
+ height,
119
+ edge
120
+ ].every((value) => Number.isFinite(value) && value > 0)) return null;
121
+ const scale = edge / Math.max(width, height);
122
+ return {
123
+ width: Math.max(1, Math.round(width * scale)),
124
+ height: Math.max(1, Math.round(height * scale))
125
+ };
126
+ }
114
127
  function drawSampleRadius(strokeWidth, pressure) {
115
128
  const clamped = Math.min(1, Math.max(0, pressure));
116
129
  return Math.max(.5, strokeWidth / 2 * (.5 + clamped));
@@ -275,8 +288,7 @@ function createBoardLayout(initialLookup, dependents) {
275
288
  } else box = {
276
289
  x: 0,
277
290
  y: 0,
278
- width: 240,
279
- height: 160
291
+ ...boardDefaultSize(item.type)
280
292
  };
281
293
  boxes.set(id, box);
282
294
  return box;
@@ -479,4 +491,4 @@ function createDocumentLayout(items) {
479
491
  return createBoardLayout((id) => items[id], dependents);
480
492
  }
481
493
  //#endregion
482
- export { IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor };
494
+ export { IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor };
@@ -1,3 +1,4 @@
1
+ import { BOARD_DEFAULT_ITEM_SIZE, BOARD_DEFAULT_SIZES } from "./board-constants.js";
1
2
  import { normalizeBoardRemoteUrl } from "./board-url.js";
2
3
  import { z } from "zod";
3
4
  //#region ../protocol/dist/board-model.js
@@ -92,12 +93,9 @@ const itemEnvelope = {
92
93
  locked: z.boolean().optional(),
93
94
  metadata: z.record(z.string(), z.unknown()).optional()
94
95
  };
95
- const boxed = (width, height) => ({
96
+ const boxed = (size) => ({
96
97
  ...itemEnvelope,
97
- size: BoardSizeSchema.default({
98
- width,
99
- height
100
- })
98
+ size: BoardSizeSchema.default({ ...size })
101
99
  });
102
100
  const unsized = { ...itemEnvelope };
103
101
  const fontSize = finite.min(2).max(512);
@@ -115,7 +113,7 @@ const BOARD_SHAPE_GEOMETRIES = [
115
113
  "path"
116
114
  ];
117
115
  const BoardFrameItemSchema = z.object({
118
- ...boxed(480, 320),
116
+ ...boxed(BOARD_DEFAULT_SIZES.frame),
119
117
  type: z.literal("frame"),
120
118
  props: z.object({
121
119
  label: z.string().max(280).default(""),
@@ -139,7 +137,7 @@ const BoardTextItemSchema = z.object({
139
137
  }).strict().prefault({})
140
138
  }).strict();
141
139
  const BoardShapeItemSchema = z.object({
142
- ...boxed(240, 160),
140
+ ...boxed(BOARD_DEFAULT_SIZES.shape),
143
141
  type: z.literal("shape"),
144
142
  props: z.object({
145
143
  geometry: z.enum(BOARD_SHAPE_GEOMETRIES).default("rectangle"),
@@ -241,7 +239,7 @@ const BoardCropSchema = z.object({
241
239
  h: ratio
242
240
  }).strict().describe("Region shown, as fractions of the image. Without it the whole image fits inside size.");
243
241
  const BoardImageItemSchema = z.object({
244
- ...boxed(640, 360),
242
+ ...boxed(BOARD_DEFAULT_SIZES.image),
245
243
  type: z.literal("image"),
246
244
  props: z.object({
247
245
  ...mediaProps,
@@ -249,17 +247,17 @@ const BoardImageItemSchema = z.object({
249
247
  }).strict()
250
248
  }).strict();
251
249
  const BoardVideoItemSchema = z.object({
252
- ...boxed(640, 360),
250
+ ...boxed(BOARD_DEFAULT_SIZES.video),
253
251
  type: z.literal("video"),
254
252
  props: z.object(timedFileProps).strict()
255
253
  }).strict();
256
254
  const BoardAudioItemSchema = z.object({
257
- ...boxed(480, 96),
255
+ ...boxed(BOARD_DEFAULT_SIZES.audio),
258
256
  type: z.literal("audio"),
259
257
  props: z.object(timedFileProps).strict()
260
258
  }).strict();
261
259
  const BoardFileItemSchema = z.object({
262
- ...boxed(360, 220),
260
+ ...boxed(BOARD_DEFAULT_SIZES.file),
263
261
  type: z.literal("file"),
264
262
  props: z.object(fileProps).strict()
265
263
  }).strict();
@@ -317,7 +315,7 @@ const BoardTaskSnapshotSchema = z.object({
317
315
  updatedAt: z.string().optional()
318
316
  }).strict();
319
317
  const BoardTaskItemSchema = z.object({
320
- ...boxed(420, 240),
318
+ ...boxed(BOARD_DEFAULT_SIZES.task),
321
319
  type: z.literal("task"),
322
320
  props: z.object({
323
321
  taskRunId: z.string().min(1).max(160).describe("The generation run shown; the server keeps the card's status and results up to date."),
@@ -385,7 +383,7 @@ const BOARD_EFFECT_KIND_INFO = {
385
383
  }
386
384
  };
387
385
  const BoardEffectItemSchema = z.object({
388
- ...boxed(240, 240),
386
+ ...boxed(BOARD_DEFAULT_SIZES.effect),
389
387
  type: z.literal("effect"),
390
388
  props: z.object({
391
389
  kind: z.enum(BOARD_EFFECT_KINDS),
@@ -402,18 +400,14 @@ const BoardEffectItemSchema = z.object({
402
400
  }).strict()
403
401
  }).strict();
404
402
  const BoardCustomItemSchema = z.object({
405
- ...boxed(480, 320),
403
+ ...boxed(BOARD_DEFAULT_SIZES.custom),
406
404
  type: z.literal("custom"),
407
405
  script: BoardScriptSchema,
408
406
  props: z.object({}).strict().default({})
409
407
  }).strict();
410
408
  const BOARD_EXTENSION_TYPE_PATTERN = /^[a-z][a-z0-9]*(?:\.[a-z0-9-]+)+$/;
411
409
  const BoardExtensionItemSchema = z.object({
412
- ...itemEnvelope,
413
- size: BoardSizeSchema.default({
414
- width: 240,
415
- height: 160
416
- }),
410
+ ...boxed(BOARD_DEFAULT_ITEM_SIZE),
417
411
  type: z.string().regex(BOARD_EXTENSION_TYPE_PATTERN),
418
412
  props: z.record(z.string(), z.unknown()).default({})
419
413
  }).strict();
@@ -20,6 +20,58 @@ declare function boardSchemaOverview(): {
20
20
  length: string;
21
21
  };
22
22
  coordinates: string;
23
+ scale: {
24
+ guide: string;
25
+ page: {
26
+ readonly width: 960;
27
+ readonly height: 540;
28
+ };
29
+ mediaEdge: number;
30
+ fontSizes: {
31
+ readonly title: 56;
32
+ readonly heading: 40;
33
+ readonly body: 24;
34
+ readonly caption: 16;
35
+ };
36
+ itemSizes: {
37
+ readonly frame: {
38
+ readonly width: 480;
39
+ readonly height: 320;
40
+ };
41
+ readonly shape: {
42
+ readonly width: 200;
43
+ readonly height: 140;
44
+ };
45
+ readonly image: {
46
+ readonly width: 480;
47
+ readonly height: 270;
48
+ };
49
+ readonly video: {
50
+ readonly width: 480;
51
+ readonly height: 270;
52
+ };
53
+ readonly audio: {
54
+ readonly width: 320;
55
+ readonly height: 112;
56
+ };
57
+ readonly file: {
58
+ readonly width: 260;
59
+ readonly height: 132;
60
+ };
61
+ readonly task: {
62
+ readonly width: 480;
63
+ readonly height: 270;
64
+ };
65
+ readonly effect: {
66
+ readonly width: 240;
67
+ readonly height: 240;
68
+ };
69
+ readonly custom: {
70
+ readonly width: 480;
71
+ readonly height: 320;
72
+ };
73
+ };
74
+ };
23
75
  types: ("arrow" | "audio" | "custom" | "draw" | "effect" | "file" | "frame" | "image" | "shape" | "task" | "text" | "video")[];
24
76
  colors: {
25
77
  tokens: readonly ["brand", "neutral", "black", "white", "blue", "green", "amber", "violet", "rose"];
@@ -1,3 +1,4 @@
1
+ import { BOARD_DEFAULT_SIZES, BOARD_PAGE_SIZE, BOARD_TEXT_SCALE } from "./board-constants.js";
1
2
  import { BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BoardAnimationHeaderSchema, BoardKeySchema, BoardScriptSchema, BoardSettingsSchema, BoardTrackSchema, isBuiltinItemType } from "./board-model.js";
2
3
  import { listBoardProperties, resolveBoardProperty } from "./board-patch.js";
3
4
  import { z } from "zod";
@@ -52,6 +53,13 @@ function boardSchemaOverview() {
52
53
  length: "board units (1 = 1 CSS px at zoom 1)"
53
54
  },
54
55
  coordinates: "Positions, draw points and unbound arrow endpoints are relative to their parent frame; without a parent they are world coordinates. Shape paths are fitted to the item size.",
56
+ scale: {
57
+ guide: "Sizes that read together at 100% zoom. Match the content already nearby; use page for slide frames, a long edge of mediaEdge for media, and fontSizes for text.",
58
+ page: BOARD_PAGE_SIZE,
59
+ mediaEdge: 480,
60
+ fontSizes: BOARD_TEXT_SCALE,
61
+ itemSizes: BOARD_DEFAULT_SIZES
62
+ },
55
63
  types: BOARD_ITEM_TYPES,
56
64
  colors: {
57
65
  tokens: BOARD_COLOR_TOKENS,
@@ -5,6 +5,7 @@ const MEDIA_HOSTS = /* @__PURE__ */ new Map([
5
5
  metaHeaders: true
6
6
  }],
7
7
  ["public.cohub.live", { transform: "oss" }],
8
+ ["sessions.cohub.live", { transform: "oss" }],
8
9
  ["cca.neta.art", { transform: "cloudflare" }]
9
10
  ]);
10
11
  const parseHttpsUrl = (url) => {
@@ -1,5 +1,5 @@
1
1
  import { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SHAPE_GEOMETRIES, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrameItem, BoardFrameItemSchema, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemType, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardMarker, BoardMarkerSchema, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchSchema, BoardPlayMode, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTrack, BoardTrackSchema, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, boardItemSchema, emptyBoardDocument, hasAuthoredSize, isBoardColorString, isBoardEase, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isFileBackedItem, isMediaItem, isSafeBoardSourcePath, parseBoardItem, parseBoardMediaSource } from "./board-model.js";
2
- import { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout, BoardTextMeasurer, IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor } from "./board-layout.js";
2
+ import { BoardFrame, BoardItemLookup, BoardLayout, BoardMatrix, BoardRect, BoardTextLayout, BoardTextMeasurer, IDENTITY_MATRIX, anchorPoint, applyMatrix, arrowBindings, autoAnchorSide, bendControl, clampBoardFontSize, createBoardLayout, createDocumentLayout, drawPointsBounds, drawSampleRadius, estimateTextWidth, fitBoardMediaSize, framePoint, invertMatrix, isArrowBinding, layoutBoardText, multiplyMatrix, pointsRect, rotateAround, scaleVector, setBoardTextMeasurer, sideAnchor } from "./board-layout.js";
3
3
  import { BoardApplyOptions, BoardPatchResult, BoardPropertySpec, BoardState, BoardValueKind, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, boardPatchTouches, createDocumentState, diffBoardDocuments, diffMergePatch, isEmptyBoardPatch, listBoardProperties, mergePatch, parseBoardDocument, pruneBoardTrack, resolveBoardProperty, trackReferences } from "./board-patch.js";
4
4
  import "./app-authorization.js";
5
5
  import { RequestSource, RequestSourceVia } from "./provenance.js";
@@ -24,4 +24,4 @@ import "./app.js";
24
24
  import "./realtime/types.js";
25
25
  import "./app-catalog.js";
26
26
  import "./host-bridge.js";
27
- export { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardApplyOptions, BoardApplyResult, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardChangeSummary, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardHistoryPage, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemLookup, BoardItemType, BoardJsonSchemaResult, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardManifest, BoardManifestSchema, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlayMode, BoardPlaybackCommand, BoardPlaybackCommandSchema, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardPropertySpec, BoardReadResult, BoardRect, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardTrack, BoardTrackSchema, BoardTransactionRecord, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, GenerationRunPayload, IDENTITY_MATRIX, ModelFormat, RequestSource, RequestSourceVia, TaskRunStatus, anchorPoint, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, autoAnchorSide, bendControl, boardItemSchema, boardJsonSchema, boardPatchTouches, boardSchemaOverview, boardTaskSource, clampBoardFontSize, clampBoardStrokeSize, createBoardLayout, createDocumentLayout, createDocumentState, diffBoardDocuments, diffMergePatch, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, featuredTaskArtifact, framePoint, hasAuthoredSize, invertMatrix, isArrowBinding, isBoardColorString, isBoardEase, isBoardPath, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, layoutBoardText, listBoardProperties, mergePatch, multiplyMatrix, normalizeBoardRemoteUrl, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, pointsRect, pruneBoardTrack, rankedTaskArtifacts, resolveBoardProperty, rotateAround, scaleVector, serializeBoardManifest, setBoardTextMeasurer, sideAnchor, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, trackReferences, withObservedArtifactFacts };
27
+ export { BOARD_ANCHOR_SIDES, BOARD_ARROW_ROUTES, BOARD_CAMERA_TARGET, BOARD_CLIPBOARD_KIND, BOARD_CLIPBOARD_MIME, BOARD_COLOR_TOKENS, BOARD_DASHES, BOARD_DERIVED_SIZE_TYPES, BOARD_EFFECT_KINDS, BOARD_EFFECT_KIND_INFO, BOARD_ENTER_PRESETS, BOARD_EXTENSION_TYPE_PATTERN, BOARD_GRID_DEFAULT_SIZE, BOARD_GRID_MAX_SIZE, BOARD_GRID_MIN_SIZE, BOARD_ID_MAX_LENGTH, BOARD_ITEM_SCHEMAS, BOARD_ITEM_TYPES, BOARD_PLAY_MODES, BOARD_SCHEMA_TARGETS, BOARD_SHAPE_GEOMETRIES, BOARD_STROKE_MAX_SIZE, BOARD_STROKE_MIN_SIZE, BOARD_TASK_ARTIFACT_LIMIT, BOARD_TASK_SOURCE_PREFIX, BOARD_TEXT_ALIGNS, BoardAnchorSide, BoardAnimation, BoardAnimationHeader, BoardAnimationHeaderSchema, BoardAnimationSchema, BoardApplyOptions, BoardApplyResult, BoardArrowAnchor, BoardArrowAnchorSchema, BoardArrowBinding, BoardArrowBindingSchema, BoardArrowEnd, BoardArrowEndSchema, BoardArrowItem, BoardArrowItemSchema, BoardArrowRoute, BoardAudioItem, BoardAudioItemSchema, BoardBackgroundSchema, BoardBuiltinItem, BoardBuiltinItemType, BoardChangeSummary, BoardColor, BoardColorSchema, BoardColorToken, BoardCropSchema, BoardCustomItem, BoardCustomItemSchema, BoardDash, BoardDelta, BoardDiagnostic, BoardDocument, BoardDrawItem, BoardDrawItemSchema, BoardDrawPoint, BoardDrawPointSchema, BoardEaseSchema, BoardEffectItem, BoardEffectItemSchema, BoardEffectKind, BoardEnterPreset, BoardExtensionItem, BoardExtensionItemSchema, BoardFileBackedItem, BoardFileItem, BoardFileItemSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardHistoryPage, BoardIdSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemLookup, BoardItemType, BoardJsonSchemaResult, BoardKeySchema, BoardKeyframe, BoardKeyframeSchema, BoardLayout, BoardManifest, BoardManifestSchema, BoardMarker, BoardMarkerSchema, BoardMatrix, BoardMediaOrigin, BoardMediaOriginSchema, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardMediaSource, BoardMediaSourceSchema, BoardPatch, BoardPatchResult, BoardPatchSchema, BoardPlayMode, BoardPlaybackCommand, BoardPlaybackCommandSchema, BoardPlaybackSnapshot, BoardPlaybackStatus, BoardPropertySpec, BoardReadResult, BoardRect, BoardScript, BoardScriptSchema, BoardSettings, BoardSettingsSchema, BoardShapeGeometry, BoardShapeItem, BoardShapeItemSchema, BoardSize, BoardSizeSchema, BoardState, BoardStyle, BoardStyleSchema, BoardTaskArtifact, BoardTaskArtifactSchema, BoardTaskItem, BoardTaskItemSchema, BoardTaskRunSource, BoardTaskSnapshot, BoardTaskSnapshotSchema, BoardTextItem, BoardTextItemSchema, BoardTextLayout, BoardTextMeasurer, BoardTrack, BoardTrackSchema, BoardTransactionRecord, BoardValueKind, BoardVec2, BoardVec2Schema, BoardVideoItem, BoardVideoItemSchema, GenerationRunPayload, IDENTITY_MATRIX, ModelFormat, RequestSource, RequestSourceVia, TaskRunStatus, anchorPoint, applyBoardDelta, applyBoardPatch, applyBoardPatchToDocument, applyMatrix, arrowBindings, autoAnchorSide, bendControl, boardItemSchema, boardJsonSchema, boardPatchTouches, boardSchemaOverview, boardTaskSource, clampBoardFontSize, clampBoardStrokeSize, createBoardLayout, createDocumentLayout, createDocumentState, diffBoardDocuments, diffMergePatch, drawPointsBounds, drawSampleRadius, emptyBoardDocument, estimateTextWidth, featuredTaskArtifact, fitBoardMediaSize, framePoint, hasAuthoredSize, invertMatrix, isArrowBinding, isBoardColorString, isBoardEase, isBoardPath, isBuiltinItem, isBuiltinItemType, isEmptyBoardDelta, isEmptyBoardPatch, isFileBackedItem, isMediaItem, isPublicBoardRemoteAddress, isSafeBoardSourcePath, layoutBoardText, listBoardProperties, mergePatch, multiplyMatrix, normalizeBoardRemoteUrl, parseBoardDocument, parseBoardItem, parseBoardManifest, parseBoardMediaSource, pointsRect, pruneBoardTrack, rankedTaskArtifacts, resolveBoardProperty, rotateAround, scaleVector, serializeBoardManifest, setBoardTextMeasurer, sideAnchor, taskArtifactPreviewUrl, taskArtifacts, taskRunArtifacts, taskRunToBoardTaskSnapshot, trackReferences, withObservedArtifactFacts };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neta-art/cohub",
3
- "version": "11.5.1",
3
+ "version": "12.0.0",
4
4
  "description": "Cohub SDK for spaces, sessions, boards, and realtime agent collaboration.",
5
5
  "license": "Apache-2.0",
6
6
  "private": false,