@neta-art/cohub 3.0.0 → 3.2.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 (96) hide show
  1. package/README.md +33 -2
  2. package/dist/{board.d.ts → board/animation.d.ts} +4 -2
  3. package/dist/{chunks/board.js → board/animation.js} +5 -44
  4. package/dist/board/codec.d.ts +25 -0
  5. package/dist/board/codec.js +252 -0
  6. package/dist/board/core/bindings.d.ts +45 -0
  7. package/dist/board/core/bindings.js +162 -0
  8. package/dist/board/core/draw-geometry.d.ts +31 -0
  9. package/dist/board/core/draw-geometry.js +183 -0
  10. package/dist/board/core/export-assets.d.ts +14 -0
  11. package/dist/board/core/export-assets.js +22 -0
  12. package/dist/board/core/export-plan.d.ts +84 -0
  13. package/dist/board/core/export-plan.js +128 -0
  14. package/dist/board/core/file-preview.d.ts +176 -0
  15. package/dist/board/core/file-preview.js +271 -0
  16. package/dist/board/core/palette.d.ts +42 -0
  17. package/dist/board/core/palette.js +138 -0
  18. package/dist/board/core/shape-definition.d.ts +35 -0
  19. package/dist/board/core/shape-definition.js +64 -0
  20. package/dist/board/core/shape-types.d.ts +144 -0
  21. package/dist/board/core/shape-types.js +27 -0
  22. package/dist/board/core/text-metrics.d.ts +18 -0
  23. package/dist/board/core/text-metrics.js +43 -0
  24. package/dist/board/export/index.d.ts +56 -0
  25. package/dist/board/export/index.js +86 -0
  26. package/dist/board/export/scene.d.ts +35 -0
  27. package/dist/board/export/scene.js +69 -0
  28. package/dist/board/geometry.d.ts +131 -0
  29. package/dist/board/geometry.js +468 -0
  30. package/dist/board/headless/index.d.ts +69 -0
  31. package/dist/board/headless/index.js +150 -0
  32. package/dist/board/image-key.d.ts +19 -0
  33. package/dist/board/image-key.js +34 -0
  34. package/dist/board/index.d.ts +16 -0
  35. package/dist/board/index.js +16 -0
  36. package/dist/board/render/index.d.ts +6 -0
  37. package/dist/board/render/index.js +6 -0
  38. package/dist/board/render/palette.d.ts +5 -0
  39. package/dist/board/render/palette.js +30 -0
  40. package/dist/board/render/renderers/arrow-card-renderer.d.ts +5 -0
  41. package/dist/board/render/renderers/arrow-card-renderer.js +157 -0
  42. package/dist/board/render/renderers/base-card-renderer.d.ts +46 -0
  43. package/dist/board/render/renderers/base-card-renderer.js +153 -0
  44. package/dist/board/render/renderers/board-renderer-registry.d.ts +85 -0
  45. package/dist/board/render/renderers/board-renderer-registry.js +43 -0
  46. package/dist/board/render/renderers/draw-card-renderer.d.ts +5 -0
  47. package/dist/board/render/renderers/draw-card-renderer.js +82 -0
  48. package/dist/board/render/renderers/far-plate.d.ts +39 -0
  49. package/dist/board/render/renderers/far-plate.js +92 -0
  50. package/dist/board/render/renderers/file-card-renderer.d.ts +33 -0
  51. package/dist/board/render/renderers/file-card-renderer.js +371 -0
  52. package/dist/board/render/renderers/frame-card-renderer.d.ts +5 -0
  53. package/dist/board/render/renderers/frame-card-renderer.js +99 -0
  54. package/dist/board/render/renderers/geo-card-renderer.d.ts +5 -0
  55. package/dist/board/render/renderers/geo-card-renderer.js +128 -0
  56. package/dist/board/render/renderers/image-card-renderer.d.ts +8 -0
  57. package/dist/board/render/renderers/image-card-renderer.js +138 -0
  58. package/dist/board/render/renderers/note-card-renderer.d.ts +5 -0
  59. package/dist/board/render/renderers/note-card-renderer.js +112 -0
  60. package/dist/board/render/renderers/text-card-renderer.d.ts +7 -0
  61. package/dist/board/render/renderers/text-card-renderer.js +94 -0
  62. package/dist/board/render/renderers/unknown-card-renderer.d.ts +5 -0
  63. package/dist/board/render/renderers/unknown-card-renderer.js +102 -0
  64. package/dist/board/render/renderers/video-card-renderer.d.ts +7 -0
  65. package/dist/board/render/renderers/video-card-renderer.js +146 -0
  66. package/dist/board/render/text-measurement.d.ts +30 -0
  67. package/dist/board/render/text-measurement.js +57 -0
  68. package/dist/board/render/text-resolution.d.ts +16 -0
  69. package/dist/board/render/text-resolution.js +43 -0
  70. package/dist/board/render/themes/board-theme-registry.d.ts +20 -0
  71. package/dist/board/render/themes/board-theme-registry.js +13 -0
  72. package/dist/board/render/themes/clean-theme.d.ts +5 -0
  73. package/dist/board/render/themes/clean-theme.js +102 -0
  74. package/dist/chunks/http.d.ts +10 -40
  75. package/dist/chunks/http.js +26 -4
  76. package/dist/chunks/transport.js +4 -2
  77. package/dist/chunks/websocket.d.ts +832 -21
  78. package/dist/chunks/websocket.js +19 -2
  79. package/dist/http.d.ts +2 -3
  80. package/dist/index.d.ts +100 -5
  81. package/dist/index.js +391 -1
  82. package/dist/protocol/dist/board-constants.d.ts +23 -0
  83. package/dist/protocol/dist/board-constants.js +60 -0
  84. package/dist/protocol/dist/board-document.d.ts +1124 -0
  85. package/dist/protocol/dist/board-document.js +331 -0
  86. package/dist/protocol/dist/board.d.ts +186 -0
  87. package/dist/protocol/dist/board.js +207 -0
  88. package/dist/protocol/dist/index.d.ts +5 -0
  89. package/dist/protocol/dist/index.js +5 -0
  90. package/dist/protocol/dist/provenance.js +12 -0
  91. package/dist/protocol/dist/realtime/board-awareness.d.ts +1 -0
  92. package/dist/protocol/dist/realtime/board-awareness.js +117 -0
  93. package/dist/protocol/dist/realtime/types.d.ts +2 -0
  94. package/package.json +39 -4
  95. package/dist/board.js +0 -2
  96. package/dist/chunks/board.d.ts +0 -2589
@@ -0,0 +1,1124 @@
1
+ import { BOARD_DOCUMENT_KIND, BOARD_EXTENSION } from "./board.js";
2
+ import { z } from "zod";
3
+ //#region ../protocol/dist/board-document.d.ts
4
+ declare const BoardFrameSchema: z.ZodObject<{
5
+ x: z.ZodNumber;
6
+ y: z.ZodNumber;
7
+ width: z.ZodNumber;
8
+ height: z.ZodNumber;
9
+ rotation: z.ZodDefault<z.ZodNumber>;
10
+ }, z.core.$strip>;
11
+ /**
12
+ * The board camera. This is local UI state, not synced content: semantic ops
13
+ * (see diffBoardDocuments) never describe the viewport, and the editor holds
14
+ * the live camera separately from the persisted document. Here it only serves
15
+ * as an initial camera hint when a document is first loaded.
16
+ */
17
+ declare const BoardViewportSchema: z.ZodObject<{
18
+ x: z.ZodNumber;
19
+ y: z.ZodNumber;
20
+ zoom: z.ZodNumber;
21
+ }, z.core.$strip>;
22
+ declare const BoardAppearanceSchema: z.ZodObject<{
23
+ theme: z.ZodDefault<z.ZodString>;
24
+ background: z.ZodDefault<z.ZodObject<{
25
+ kind: z.ZodDefault<z.ZodEnum<{
26
+ custom: "custom";
27
+ dots: "dots";
28
+ grid: "grid";
29
+ image: "image";
30
+ shader: "shader";
31
+ solid: "solid";
32
+ }>>;
33
+ color: z.ZodOptional<z.ZodString>;
34
+ imageUrl: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>>;
36
+ grid: z.ZodDefault<z.ZodObject<{
37
+ visible: z.ZodDefault<z.ZodBoolean>;
38
+ size: z.ZodDefault<z.ZodNumber>;
39
+ opacity: z.ZodDefault<z.ZodNumber>;
40
+ }, z.core.$strip>>;
41
+ mood: z.ZodDefault<z.ZodEnum<{
42
+ arcane: "arcane";
43
+ clean: "clean";
44
+ cyber: "cyber";
45
+ natural: "natural";
46
+ playful: "playful";
47
+ }>>;
48
+ }, z.core.$strip>;
49
+ /** Optional visual chrome still carried by a few older shapes. */
50
+ declare const BoardItemStyleSchema: z.ZodObject<{
51
+ variant: z.ZodDefault<z.ZodString>;
52
+ theme: z.ZodOptional<z.ZodString>;
53
+ accentColor: z.ZodOptional<z.ZodString>;
54
+ size: z.ZodDefault<z.ZodEnum<{
55
+ lg: "lg";
56
+ md: "md";
57
+ sm: "sm";
58
+ }>>;
59
+ emphasis: z.ZodDefault<z.ZodEnum<{
60
+ epic: "epic";
61
+ legendary: "legendary";
62
+ normal: "normal";
63
+ rare: "rare";
64
+ }>>;
65
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
66
+ }, z.core.$strip>;
67
+ declare const SpaceFileRefSchema: z.ZodObject<{
68
+ kind: z.ZodLiteral<"space-file">;
69
+ path: z.ZodString;
70
+ }, z.core.$strip>;
71
+ declare const BoardMediaSnapshotSchema: z.ZodObject<{
72
+ title: z.ZodOptional<z.ZodString>;
73
+ mimeType: z.ZodOptional<z.ZodString>;
74
+ size: z.ZodOptional<z.ZodNumber>;
75
+ mtimeMs: z.ZodOptional<z.ZodNumber>;
76
+ naturalWidth: z.ZodOptional<z.ZodNumber>;
77
+ naturalHeight: z.ZodOptional<z.ZodNumber>;
78
+ }, z.core.$strip>;
79
+ /** Freestanding text — no card chrome; its frame always follows the glyphs. */
80
+ declare const BoardTextItemSchema: z.ZodObject<{
81
+ id: z.ZodString;
82
+ frame: z.ZodObject<{
83
+ x: z.ZodNumber;
84
+ y: z.ZodNumber;
85
+ width: z.ZodNumber;
86
+ height: z.ZodNumber;
87
+ rotation: z.ZodDefault<z.ZodNumber>;
88
+ }, z.core.$strip>;
89
+ locked: z.ZodOptional<z.ZodBoolean>;
90
+ style: z.ZodOptional<z.ZodObject<{
91
+ variant: z.ZodDefault<z.ZodString>;
92
+ theme: z.ZodOptional<z.ZodString>;
93
+ accentColor: z.ZodOptional<z.ZodString>;
94
+ size: z.ZodDefault<z.ZodEnum<{
95
+ lg: "lg";
96
+ md: "md";
97
+ sm: "sm";
98
+ }>>;
99
+ emphasis: z.ZodDefault<z.ZodEnum<{
100
+ epic: "epic";
101
+ legendary: "legendary";
102
+ normal: "normal";
103
+ rare: "rare";
104
+ }>>;
105
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
106
+ }, z.core.$strip>>;
107
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
108
+ type: z.ZodLiteral<"text">;
109
+ text: z.ZodDefault<z.ZodString>;
110
+ color: z.ZodDefault<z.ZodString>;
111
+ fontSize: z.ZodDefault<z.ZodNumber>;
112
+ }, z.core.$strip>;
113
+ declare const BoardNoteItemSchema: z.ZodObject<{
114
+ id: z.ZodString;
115
+ frame: z.ZodObject<{
116
+ x: z.ZodNumber;
117
+ y: z.ZodNumber;
118
+ width: z.ZodNumber;
119
+ height: z.ZodNumber;
120
+ rotation: z.ZodDefault<z.ZodNumber>;
121
+ }, z.core.$strip>;
122
+ locked: z.ZodOptional<z.ZodBoolean>;
123
+ style: z.ZodOptional<z.ZodObject<{
124
+ variant: z.ZodDefault<z.ZodString>;
125
+ theme: z.ZodOptional<z.ZodString>;
126
+ accentColor: z.ZodOptional<z.ZodString>;
127
+ size: z.ZodDefault<z.ZodEnum<{
128
+ lg: "lg";
129
+ md: "md";
130
+ sm: "sm";
131
+ }>>;
132
+ emphasis: z.ZodDefault<z.ZodEnum<{
133
+ epic: "epic";
134
+ legendary: "legendary";
135
+ normal: "normal";
136
+ rare: "rare";
137
+ }>>;
138
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
139
+ }, z.core.$strip>>;
140
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
141
+ type: z.ZodLiteral<"note">;
142
+ text: z.ZodDefault<z.ZodString>;
143
+ color: z.ZodDefault<z.ZodString>;
144
+ }, z.core.$strip>;
145
+ declare const BoardGeoItemSchema: z.ZodObject<{
146
+ id: z.ZodString;
147
+ frame: z.ZodObject<{
148
+ x: z.ZodNumber;
149
+ y: z.ZodNumber;
150
+ width: z.ZodNumber;
151
+ height: z.ZodNumber;
152
+ rotation: z.ZodDefault<z.ZodNumber>;
153
+ }, z.core.$strip>;
154
+ locked: z.ZodOptional<z.ZodBoolean>;
155
+ style: z.ZodOptional<z.ZodObject<{
156
+ variant: z.ZodDefault<z.ZodString>;
157
+ theme: z.ZodOptional<z.ZodString>;
158
+ accentColor: z.ZodOptional<z.ZodString>;
159
+ size: z.ZodDefault<z.ZodEnum<{
160
+ lg: "lg";
161
+ md: "md";
162
+ sm: "sm";
163
+ }>>;
164
+ emphasis: z.ZodDefault<z.ZodEnum<{
165
+ epic: "epic";
166
+ legendary: "legendary";
167
+ normal: "normal";
168
+ rare: "rare";
169
+ }>>;
170
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
171
+ }, z.core.$strip>>;
172
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
173
+ type: z.ZodLiteral<"geo">;
174
+ geo: z.ZodDefault<z.ZodString>;
175
+ text: z.ZodDefault<z.ZodString>;
176
+ color: z.ZodDefault<z.ZodString>;
177
+ fillOpacity: z.ZodDefault<z.ZodNumber>;
178
+ }, z.core.$strip>;
179
+ /** A raw freehand sample. Pressure defaults to 0.5 (mouse) when absent. */
180
+ declare const DrawPointSchema: z.ZodObject<{
181
+ x: z.ZodNumber;
182
+ y: z.ZodNumber;
183
+ p: z.ZodDefault<z.ZodNumber>;
184
+ }, z.core.$strip>;
185
+ declare const BoardDrawItemSchema: z.ZodObject<{
186
+ id: z.ZodString;
187
+ frame: z.ZodObject<{
188
+ x: z.ZodNumber;
189
+ y: z.ZodNumber;
190
+ width: z.ZodNumber;
191
+ height: z.ZodNumber;
192
+ rotation: z.ZodDefault<z.ZodNumber>;
193
+ }, z.core.$strip>;
194
+ locked: z.ZodOptional<z.ZodBoolean>;
195
+ style: z.ZodOptional<z.ZodObject<{
196
+ variant: z.ZodDefault<z.ZodString>;
197
+ theme: z.ZodOptional<z.ZodString>;
198
+ accentColor: z.ZodOptional<z.ZodString>;
199
+ size: z.ZodDefault<z.ZodEnum<{
200
+ lg: "lg";
201
+ md: "md";
202
+ sm: "sm";
203
+ }>>;
204
+ emphasis: z.ZodDefault<z.ZodEnum<{
205
+ epic: "epic";
206
+ legendary: "legendary";
207
+ normal: "normal";
208
+ rare: "rare";
209
+ }>>;
210
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
211
+ }, z.core.$strip>>;
212
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
213
+ type: z.ZodLiteral<"draw">;
214
+ points: z.ZodDefault<z.ZodArray<z.ZodObject<{
215
+ x: z.ZodNumber;
216
+ y: z.ZodNumber;
217
+ p: z.ZodDefault<z.ZodNumber>;
218
+ }, z.core.$strip>>>;
219
+ color: z.ZodDefault<z.ZodString>;
220
+ size: z.ZodDefault<z.ZodNumber>;
221
+ }, z.core.$strip>;
222
+ /** An arrow endpoint: a free point or a binding to another shape. */
223
+ declare const ArrowEndpointSchema: z.ZodUnion<readonly [z.ZodObject<{
224
+ kind: z.ZodLiteral<"point">;
225
+ x: z.ZodNumber;
226
+ y: z.ZodNumber;
227
+ }, z.core.$strip>, z.ZodObject<{
228
+ kind: z.ZodLiteral<"binding">;
229
+ target: z.ZodString;
230
+ nx: z.ZodDefault<z.ZodNumber>;
231
+ ny: z.ZodDefault<z.ZodNumber>;
232
+ precise: z.ZodDefault<z.ZodBoolean>;
233
+ }, z.core.$strip>]>;
234
+ declare const BoardArrowItemSchema: z.ZodObject<{
235
+ id: z.ZodString;
236
+ frame: z.ZodObject<{
237
+ x: z.ZodNumber;
238
+ y: z.ZodNumber;
239
+ width: z.ZodNumber;
240
+ height: z.ZodNumber;
241
+ rotation: z.ZodDefault<z.ZodNumber>;
242
+ }, z.core.$strip>;
243
+ locked: z.ZodOptional<z.ZodBoolean>;
244
+ style: z.ZodOptional<z.ZodObject<{
245
+ variant: z.ZodDefault<z.ZodString>;
246
+ theme: z.ZodOptional<z.ZodString>;
247
+ accentColor: z.ZodOptional<z.ZodString>;
248
+ size: z.ZodDefault<z.ZodEnum<{
249
+ lg: "lg";
250
+ md: "md";
251
+ sm: "sm";
252
+ }>>;
253
+ emphasis: z.ZodDefault<z.ZodEnum<{
254
+ epic: "epic";
255
+ legendary: "legendary";
256
+ normal: "normal";
257
+ rare: "rare";
258
+ }>>;
259
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
260
+ }, z.core.$strip>>;
261
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
262
+ type: z.ZodLiteral<"arrow">;
263
+ start: z.ZodUnion<readonly [z.ZodObject<{
264
+ kind: z.ZodLiteral<"point">;
265
+ x: z.ZodNumber;
266
+ y: z.ZodNumber;
267
+ }, z.core.$strip>, z.ZodObject<{
268
+ kind: z.ZodLiteral<"binding">;
269
+ target: z.ZodString;
270
+ nx: z.ZodDefault<z.ZodNumber>;
271
+ ny: z.ZodDefault<z.ZodNumber>;
272
+ precise: z.ZodDefault<z.ZodBoolean>;
273
+ }, z.core.$strip>]>;
274
+ end: z.ZodUnion<readonly [z.ZodObject<{
275
+ kind: z.ZodLiteral<"point">;
276
+ x: z.ZodNumber;
277
+ y: z.ZodNumber;
278
+ }, z.core.$strip>, z.ZodObject<{
279
+ kind: z.ZodLiteral<"binding">;
280
+ target: z.ZodString;
281
+ nx: z.ZodDefault<z.ZodNumber>;
282
+ ny: z.ZodDefault<z.ZodNumber>;
283
+ precise: z.ZodDefault<z.ZodBoolean>;
284
+ }, z.core.$strip>]>;
285
+ bend: z.ZodDefault<z.ZodNumber>;
286
+ color: z.ZodDefault<z.ZodString>;
287
+ size: z.ZodDefault<z.ZodNumber>;
288
+ arrowStart: z.ZodDefault<z.ZodBoolean>;
289
+ arrowEnd: z.ZodDefault<z.ZodBoolean>;
290
+ label: z.ZodDefault<z.ZodString>;
291
+ }, z.core.$strip>;
292
+ /** A frame container for organising shapes. */
293
+ declare const BoardFrameItemSchema: z.ZodObject<{
294
+ id: z.ZodString;
295
+ frame: z.ZodObject<{
296
+ x: z.ZodNumber;
297
+ y: z.ZodNumber;
298
+ width: z.ZodNumber;
299
+ height: z.ZodNumber;
300
+ rotation: z.ZodDefault<z.ZodNumber>;
301
+ }, z.core.$strip>;
302
+ locked: z.ZodOptional<z.ZodBoolean>;
303
+ style: z.ZodOptional<z.ZodObject<{
304
+ variant: z.ZodDefault<z.ZodString>;
305
+ theme: z.ZodOptional<z.ZodString>;
306
+ accentColor: z.ZodOptional<z.ZodString>;
307
+ size: z.ZodDefault<z.ZodEnum<{
308
+ lg: "lg";
309
+ md: "md";
310
+ sm: "sm";
311
+ }>>;
312
+ emphasis: z.ZodDefault<z.ZodEnum<{
313
+ epic: "epic";
314
+ legendary: "legendary";
315
+ normal: "normal";
316
+ rare: "rare";
317
+ }>>;
318
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
319
+ }, z.core.$strip>>;
320
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
321
+ type: z.ZodLiteral<"frame">;
322
+ label: z.ZodDefault<z.ZodString>;
323
+ color: z.ZodDefault<z.ZodString>;
324
+ }, z.core.$strip>;
325
+ /** Image node — space file only, natural aspect, no chrome. */
326
+ declare const BoardImageItemSchema: z.ZodObject<{
327
+ id: z.ZodString;
328
+ frame: z.ZodObject<{
329
+ x: z.ZodNumber;
330
+ y: z.ZodNumber;
331
+ width: z.ZodNumber;
332
+ height: z.ZodNumber;
333
+ rotation: z.ZodDefault<z.ZodNumber>;
334
+ }, z.core.$strip>;
335
+ locked: z.ZodOptional<z.ZodBoolean>;
336
+ style: z.ZodOptional<z.ZodObject<{
337
+ variant: z.ZodDefault<z.ZodString>;
338
+ theme: z.ZodOptional<z.ZodString>;
339
+ accentColor: z.ZodOptional<z.ZodString>;
340
+ size: z.ZodDefault<z.ZodEnum<{
341
+ lg: "lg";
342
+ md: "md";
343
+ sm: "sm";
344
+ }>>;
345
+ emphasis: z.ZodDefault<z.ZodEnum<{
346
+ epic: "epic";
347
+ legendary: "legendary";
348
+ normal: "normal";
349
+ rare: "rare";
350
+ }>>;
351
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
352
+ }, z.core.$strip>>;
353
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
354
+ type: z.ZodLiteral<"image">;
355
+ ref: z.ZodObject<{
356
+ kind: z.ZodLiteral<"space-file">;
357
+ path: z.ZodString;
358
+ }, z.core.$strip>;
359
+ snapshot: z.ZodOptional<z.ZodObject<{
360
+ title: z.ZodOptional<z.ZodString>;
361
+ mimeType: z.ZodOptional<z.ZodString>;
362
+ size: z.ZodOptional<z.ZodNumber>;
363
+ mtimeMs: z.ZodOptional<z.ZodNumber>;
364
+ naturalWidth: z.ZodOptional<z.ZodNumber>;
365
+ naturalHeight: z.ZodOptional<z.ZodNumber>;
366
+ }, z.core.$strip>>;
367
+ crop: z.ZodOptional<z.ZodObject<{
368
+ x: z.ZodDefault<z.ZodNumber>;
369
+ y: z.ZodDefault<z.ZodNumber>;
370
+ w: z.ZodDefault<z.ZodNumber>;
371
+ h: z.ZodDefault<z.ZodNumber>;
372
+ }, z.core.$strip>>;
373
+ }, z.core.$strip>;
374
+ /** Video node — space file only. Playback state is local UI, never synced. */
375
+ declare const BoardVideoItemSchema: z.ZodObject<{
376
+ id: z.ZodString;
377
+ frame: z.ZodObject<{
378
+ x: z.ZodNumber;
379
+ y: z.ZodNumber;
380
+ width: z.ZodNumber;
381
+ height: z.ZodNumber;
382
+ rotation: z.ZodDefault<z.ZodNumber>;
383
+ }, z.core.$strip>;
384
+ locked: z.ZodOptional<z.ZodBoolean>;
385
+ style: z.ZodOptional<z.ZodObject<{
386
+ variant: z.ZodDefault<z.ZodString>;
387
+ theme: z.ZodOptional<z.ZodString>;
388
+ accentColor: z.ZodOptional<z.ZodString>;
389
+ size: z.ZodDefault<z.ZodEnum<{
390
+ lg: "lg";
391
+ md: "md";
392
+ sm: "sm";
393
+ }>>;
394
+ emphasis: z.ZodDefault<z.ZodEnum<{
395
+ epic: "epic";
396
+ legendary: "legendary";
397
+ normal: "normal";
398
+ rare: "rare";
399
+ }>>;
400
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
401
+ }, z.core.$strip>>;
402
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
403
+ type: z.ZodLiteral<"video">;
404
+ ref: z.ZodObject<{
405
+ kind: z.ZodLiteral<"space-file">;
406
+ path: z.ZodString;
407
+ }, z.core.$strip>;
408
+ snapshot: z.ZodOptional<z.ZodObject<{
409
+ title: z.ZodOptional<z.ZodString>;
410
+ mimeType: z.ZodOptional<z.ZodString>;
411
+ size: z.ZodOptional<z.ZodNumber>;
412
+ mtimeMs: z.ZodOptional<z.ZodNumber>;
413
+ naturalWidth: z.ZodOptional<z.ZodNumber>;
414
+ naturalHeight: z.ZodOptional<z.ZodNumber>;
415
+ }, z.core.$strip>>;
416
+ }, z.core.$strip>;
417
+ /**
418
+ * Cached display facts for a file card.
419
+ *
420
+ * Purely derived from the referenced file and versioned by `mtimeMs`, so it is a
421
+ * cache and never a second source of truth: the workspace file remains
422
+ * authoritative, and a stale snapshot is detectable rather than silently wrong.
423
+ * It is stored so that opening a board renders complete cards immediately, with
424
+ * no per-node file read on the first paint.
425
+ */
426
+ declare const BoardFileSnapshotSchema: z.ZodObject<{
427
+ title: z.ZodOptional<z.ZodString>;
428
+ mimeType: z.ZodOptional<z.ZodString>;
429
+ size: z.ZodOptional<z.ZodNumber>;
430
+ mtimeMs: z.ZodOptional<z.ZodNumber>;
431
+ excerpt: z.ZodOptional<z.ZodString>;
432
+ coverPath: z.ZodOptional<z.ZodString>;
433
+ coverUrl: z.ZodOptional<z.ZodString>;
434
+ }, z.core.$strip>;
435
+ /**
436
+ * File node — a thumbnail entry point to any workspace file.
437
+ *
438
+ * This is the fallback for every dropped file that is not natively an image or
439
+ * video, including binaries and unknown extensions: a board should never refuse
440
+ * a file, only present it with less detail. Presentation tiers are derived from
441
+ * the snapshot (see filePreviewKind), not stored, so there is no display state
442
+ * to drift from the facts.
443
+ */
444
+ declare const BoardFileItemSchema: z.ZodObject<{
445
+ id: z.ZodString;
446
+ frame: z.ZodObject<{
447
+ x: z.ZodNumber;
448
+ y: z.ZodNumber;
449
+ width: z.ZodNumber;
450
+ height: z.ZodNumber;
451
+ rotation: z.ZodDefault<z.ZodNumber>;
452
+ }, z.core.$strip>;
453
+ locked: z.ZodOptional<z.ZodBoolean>;
454
+ style: z.ZodOptional<z.ZodObject<{
455
+ variant: z.ZodDefault<z.ZodString>;
456
+ theme: z.ZodOptional<z.ZodString>;
457
+ accentColor: z.ZodOptional<z.ZodString>;
458
+ size: z.ZodDefault<z.ZodEnum<{
459
+ lg: "lg";
460
+ md: "md";
461
+ sm: "sm";
462
+ }>>;
463
+ emphasis: z.ZodDefault<z.ZodEnum<{
464
+ epic: "epic";
465
+ legendary: "legendary";
466
+ normal: "normal";
467
+ rare: "rare";
468
+ }>>;
469
+ effects: z.ZodDefault<z.ZodArray<z.ZodString>>;
470
+ }, z.core.$strip>>;
471
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
472
+ type: z.ZodLiteral<"file">;
473
+ ref: z.ZodObject<{
474
+ kind: z.ZodLiteral<"space-file">;
475
+ path: z.ZodString;
476
+ }, z.core.$strip>;
477
+ snapshot: z.ZodOptional<z.ZodObject<{
478
+ title: z.ZodOptional<z.ZodString>;
479
+ mimeType: z.ZodOptional<z.ZodString>;
480
+ size: z.ZodOptional<z.ZodNumber>;
481
+ mtimeMs: z.ZodOptional<z.ZodNumber>;
482
+ excerpt: z.ZodOptional<z.ZodString>;
483
+ coverPath: z.ZodOptional<z.ZodString>;
484
+ coverUrl: z.ZodOptional<z.ZodString>;
485
+ }, z.core.$strip>>;
486
+ }, z.core.$strip>;
487
+ /**
488
+ * The set of shape types this client understands natively. Anything else is
489
+ * preserved verbatim as an unknown item (see BoardUnknownItem) so documents
490
+ * authored by newer clients round-trip losslessly — data is never dropped or
491
+ * silently downgraded just because this client predates a shape type.
492
+ */
493
+ declare const KNOWN_BOARD_ITEM_TYPES: readonly ["image", "video", "file", "text", "note", "geo", "draw", "arrow", "frame"];
494
+ type KnownBoardItemType = (typeof KNOWN_BOARD_ITEM_TYPES)[number];
495
+ /**
496
+ * A forward-compatible carrier for shape types this client does not recognise.
497
+ * Its discriminant is the literal `"unknown"` so the item union still narrows
498
+ * cleanly on `type`. The real type string and every original field are preserved
499
+ * verbatim in `raw`.
500
+ */
501
+ declare const UNKNOWN_BOARD_ITEM_TYPE: "unknown";
502
+ type BoardUnknownItem = {
503
+ id: string;
504
+ type: typeof UNKNOWN_BOARD_ITEM_TYPE;
505
+ frame: z.infer<typeof BoardFrameSchema>;
506
+ locked?: boolean;
507
+ style?: z.infer<typeof BoardItemStyleSchema>;
508
+ metadata?: Record<string, unknown>;
509
+ /** Verbatim original item record (carries the real `type`). */
510
+ raw: Record<string, unknown>;
511
+ };
512
+ /** The real (preserved) type string of an unknown item. */
513
+ declare function unknownRealType(item: BoardUnknownItem): string;
514
+ declare const BoardItemSchema: z.ZodPipe<z.ZodAny, z.ZodTransform<BoardUnknownItem | {
515
+ id: string;
516
+ frame: {
517
+ x: number;
518
+ y: number;
519
+ width: number;
520
+ height: number;
521
+ rotation: number;
522
+ };
523
+ locked?: boolean | undefined;
524
+ style?: {
525
+ variant: string;
526
+ theme?: string | undefined;
527
+ accentColor?: string | undefined;
528
+ size: "lg" | "md" | "sm";
529
+ emphasis: "epic" | "legendary" | "normal" | "rare";
530
+ effects: string[];
531
+ } | undefined;
532
+ metadata?: Record<string, unknown> | undefined;
533
+ type: "image";
534
+ ref: {
535
+ kind: "space-file";
536
+ path: string;
537
+ };
538
+ snapshot?: {
539
+ title?: string | undefined;
540
+ mimeType?: string | undefined;
541
+ size?: number | undefined;
542
+ mtimeMs?: number | undefined;
543
+ naturalWidth?: number | undefined;
544
+ naturalHeight?: number | undefined;
545
+ } | undefined;
546
+ crop?: {
547
+ x: number;
548
+ y: number;
549
+ w: number;
550
+ h: number;
551
+ } | undefined;
552
+ } | {
553
+ id: string;
554
+ frame: {
555
+ x: number;
556
+ y: number;
557
+ width: number;
558
+ height: number;
559
+ rotation: number;
560
+ };
561
+ locked?: boolean | undefined;
562
+ style?: {
563
+ variant: string;
564
+ theme?: string | undefined;
565
+ accentColor?: string | undefined;
566
+ size: "lg" | "md" | "sm";
567
+ emphasis: "epic" | "legendary" | "normal" | "rare";
568
+ effects: string[];
569
+ } | undefined;
570
+ metadata?: Record<string, unknown> | undefined;
571
+ type: "video";
572
+ ref: {
573
+ kind: "space-file";
574
+ path: string;
575
+ };
576
+ snapshot?: {
577
+ title?: string | undefined;
578
+ mimeType?: string | undefined;
579
+ size?: number | undefined;
580
+ mtimeMs?: number | undefined;
581
+ naturalWidth?: number | undefined;
582
+ naturalHeight?: number | undefined;
583
+ } | undefined;
584
+ } | {
585
+ id: string;
586
+ frame: {
587
+ x: number;
588
+ y: number;
589
+ width: number;
590
+ height: number;
591
+ rotation: number;
592
+ };
593
+ locked?: boolean | undefined;
594
+ style?: {
595
+ variant: string;
596
+ theme?: string | undefined;
597
+ accentColor?: string | undefined;
598
+ size: "lg" | "md" | "sm";
599
+ emphasis: "epic" | "legendary" | "normal" | "rare";
600
+ effects: string[];
601
+ } | undefined;
602
+ metadata?: Record<string, unknown> | undefined;
603
+ type: "file";
604
+ ref: {
605
+ kind: "space-file";
606
+ path: string;
607
+ };
608
+ snapshot?: {
609
+ title?: string | undefined;
610
+ mimeType?: string | undefined;
611
+ size?: number | undefined;
612
+ mtimeMs?: number | undefined;
613
+ excerpt?: string | undefined;
614
+ coverPath?: string | undefined;
615
+ coverUrl?: string | undefined;
616
+ } | undefined;
617
+ } | {
618
+ id: string;
619
+ frame: {
620
+ x: number;
621
+ y: number;
622
+ width: number;
623
+ height: number;
624
+ rotation: number;
625
+ };
626
+ locked?: boolean | undefined;
627
+ style?: {
628
+ variant: string;
629
+ theme?: string | undefined;
630
+ accentColor?: string | undefined;
631
+ size: "lg" | "md" | "sm";
632
+ emphasis: "epic" | "legendary" | "normal" | "rare";
633
+ effects: string[];
634
+ } | undefined;
635
+ metadata?: Record<string, unknown> | undefined;
636
+ type: "text";
637
+ text: string;
638
+ color: string;
639
+ fontSize: number;
640
+ } | {
641
+ id: string;
642
+ frame: {
643
+ x: number;
644
+ y: number;
645
+ width: number;
646
+ height: number;
647
+ rotation: number;
648
+ };
649
+ locked?: boolean | undefined;
650
+ style?: {
651
+ variant: string;
652
+ theme?: string | undefined;
653
+ accentColor?: string | undefined;
654
+ size: "lg" | "md" | "sm";
655
+ emphasis: "epic" | "legendary" | "normal" | "rare";
656
+ effects: string[];
657
+ } | undefined;
658
+ metadata?: Record<string, unknown> | undefined;
659
+ type: "note";
660
+ text: string;
661
+ color: string;
662
+ } | {
663
+ id: string;
664
+ frame: {
665
+ x: number;
666
+ y: number;
667
+ width: number;
668
+ height: number;
669
+ rotation: number;
670
+ };
671
+ locked?: boolean | undefined;
672
+ style?: {
673
+ variant: string;
674
+ theme?: string | undefined;
675
+ accentColor?: string | undefined;
676
+ size: "lg" | "md" | "sm";
677
+ emphasis: "epic" | "legendary" | "normal" | "rare";
678
+ effects: string[];
679
+ } | undefined;
680
+ metadata?: Record<string, unknown> | undefined;
681
+ type: "geo";
682
+ geo: string;
683
+ text: string;
684
+ color: string;
685
+ fillOpacity: number;
686
+ } | {
687
+ id: string;
688
+ frame: {
689
+ x: number;
690
+ y: number;
691
+ width: number;
692
+ height: number;
693
+ rotation: number;
694
+ };
695
+ locked?: boolean | undefined;
696
+ style?: {
697
+ variant: string;
698
+ theme?: string | undefined;
699
+ accentColor?: string | undefined;
700
+ size: "lg" | "md" | "sm";
701
+ emphasis: "epic" | "legendary" | "normal" | "rare";
702
+ effects: string[];
703
+ } | undefined;
704
+ metadata?: Record<string, unknown> | undefined;
705
+ type: "draw";
706
+ points: {
707
+ x: number;
708
+ y: number;
709
+ p: number;
710
+ }[];
711
+ color: string;
712
+ size: number;
713
+ } | {
714
+ id: string;
715
+ frame: {
716
+ x: number;
717
+ y: number;
718
+ width: number;
719
+ height: number;
720
+ rotation: number;
721
+ };
722
+ locked?: boolean | undefined;
723
+ style?: {
724
+ variant: string;
725
+ theme?: string | undefined;
726
+ accentColor?: string | undefined;
727
+ size: "lg" | "md" | "sm";
728
+ emphasis: "epic" | "legendary" | "normal" | "rare";
729
+ effects: string[];
730
+ } | undefined;
731
+ metadata?: Record<string, unknown> | undefined;
732
+ type: "arrow";
733
+ start: {
734
+ kind: "point";
735
+ x: number;
736
+ y: number;
737
+ } | {
738
+ kind: "binding";
739
+ target: string;
740
+ nx: number;
741
+ ny: number;
742
+ precise: boolean;
743
+ };
744
+ end: {
745
+ kind: "point";
746
+ x: number;
747
+ y: number;
748
+ } | {
749
+ kind: "binding";
750
+ target: string;
751
+ nx: number;
752
+ ny: number;
753
+ precise: boolean;
754
+ };
755
+ bend: number;
756
+ color: string;
757
+ size: number;
758
+ arrowStart: boolean;
759
+ arrowEnd: boolean;
760
+ label: string;
761
+ } | {
762
+ id: string;
763
+ frame: {
764
+ x: number;
765
+ y: number;
766
+ width: number;
767
+ height: number;
768
+ rotation: number;
769
+ };
770
+ locked?: boolean | undefined;
771
+ style?: {
772
+ variant: string;
773
+ theme?: string | undefined;
774
+ accentColor?: string | undefined;
775
+ size: "lg" | "md" | "sm";
776
+ emphasis: "epic" | "legendary" | "normal" | "rare";
777
+ effects: string[];
778
+ } | undefined;
779
+ metadata?: Record<string, unknown> | undefined;
780
+ type: "frame";
781
+ label: string;
782
+ color: string;
783
+ }, any>>;
784
+ /**
785
+ * Parse a single item leniently: known types are validated and normalised;
786
+ * anything else becomes a lossless unknown item. Never throws on shape data —
787
+ * a malformed known item degrades to unknown rather than failing the document.
788
+ */
789
+ declare function parseBoardItemLoose(raw: unknown): BoardItem;
790
+ declare const BoardDocumentSchema: z.ZodObject<{
791
+ kind: z.ZodLiteral<"cohub.board">;
792
+ version: z.ZodLiteral<1>;
793
+ appearance: z.ZodDefault<z.ZodObject<{
794
+ theme: z.ZodDefault<z.ZodString>;
795
+ background: z.ZodDefault<z.ZodObject<{
796
+ kind: z.ZodDefault<z.ZodEnum<{
797
+ custom: "custom";
798
+ dots: "dots";
799
+ grid: "grid";
800
+ image: "image";
801
+ shader: "shader";
802
+ solid: "solid";
803
+ }>>;
804
+ color: z.ZodOptional<z.ZodString>;
805
+ imageUrl: z.ZodOptional<z.ZodString>;
806
+ }, z.core.$strip>>;
807
+ grid: z.ZodDefault<z.ZodObject<{
808
+ visible: z.ZodDefault<z.ZodBoolean>;
809
+ size: z.ZodDefault<z.ZodNumber>;
810
+ opacity: z.ZodDefault<z.ZodNumber>;
811
+ }, z.core.$strip>>;
812
+ mood: z.ZodDefault<z.ZodEnum<{
813
+ arcane: "arcane";
814
+ clean: "clean";
815
+ cyber: "cyber";
816
+ natural: "natural";
817
+ playful: "playful";
818
+ }>>;
819
+ }, z.core.$strip>>;
820
+ viewport: z.ZodObject<{
821
+ x: z.ZodNumber;
822
+ y: z.ZodNumber;
823
+ zoom: z.ZodNumber;
824
+ }, z.core.$strip>;
825
+ items: z.ZodArray<z.ZodPipe<z.ZodAny, z.ZodTransform<BoardUnknownItem | {
826
+ id: string;
827
+ frame: {
828
+ x: number;
829
+ y: number;
830
+ width: number;
831
+ height: number;
832
+ rotation: number;
833
+ };
834
+ locked?: boolean | undefined;
835
+ style?: {
836
+ variant: string;
837
+ theme?: string | undefined;
838
+ accentColor?: string | undefined;
839
+ size: "lg" | "md" | "sm";
840
+ emphasis: "epic" | "legendary" | "normal" | "rare";
841
+ effects: string[];
842
+ } | undefined;
843
+ metadata?: Record<string, unknown> | undefined;
844
+ type: "image";
845
+ ref: {
846
+ kind: "space-file";
847
+ path: string;
848
+ };
849
+ snapshot?: {
850
+ title?: string | undefined;
851
+ mimeType?: string | undefined;
852
+ size?: number | undefined;
853
+ mtimeMs?: number | undefined;
854
+ naturalWidth?: number | undefined;
855
+ naturalHeight?: number | undefined;
856
+ } | undefined;
857
+ crop?: {
858
+ x: number;
859
+ y: number;
860
+ w: number;
861
+ h: number;
862
+ } | undefined;
863
+ } | {
864
+ id: string;
865
+ frame: {
866
+ x: number;
867
+ y: number;
868
+ width: number;
869
+ height: number;
870
+ rotation: number;
871
+ };
872
+ locked?: boolean | undefined;
873
+ style?: {
874
+ variant: string;
875
+ theme?: string | undefined;
876
+ accentColor?: string | undefined;
877
+ size: "lg" | "md" | "sm";
878
+ emphasis: "epic" | "legendary" | "normal" | "rare";
879
+ effects: string[];
880
+ } | undefined;
881
+ metadata?: Record<string, unknown> | undefined;
882
+ type: "video";
883
+ ref: {
884
+ kind: "space-file";
885
+ path: string;
886
+ };
887
+ snapshot?: {
888
+ title?: string | undefined;
889
+ mimeType?: string | undefined;
890
+ size?: number | undefined;
891
+ mtimeMs?: number | undefined;
892
+ naturalWidth?: number | undefined;
893
+ naturalHeight?: number | undefined;
894
+ } | undefined;
895
+ } | {
896
+ id: string;
897
+ frame: {
898
+ x: number;
899
+ y: number;
900
+ width: number;
901
+ height: number;
902
+ rotation: number;
903
+ };
904
+ locked?: boolean | undefined;
905
+ style?: {
906
+ variant: string;
907
+ theme?: string | undefined;
908
+ accentColor?: string | undefined;
909
+ size: "lg" | "md" | "sm";
910
+ emphasis: "epic" | "legendary" | "normal" | "rare";
911
+ effects: string[];
912
+ } | undefined;
913
+ metadata?: Record<string, unknown> | undefined;
914
+ type: "file";
915
+ ref: {
916
+ kind: "space-file";
917
+ path: string;
918
+ };
919
+ snapshot?: {
920
+ title?: string | undefined;
921
+ mimeType?: string | undefined;
922
+ size?: number | undefined;
923
+ mtimeMs?: number | undefined;
924
+ excerpt?: string | undefined;
925
+ coverPath?: string | undefined;
926
+ coverUrl?: string | undefined;
927
+ } | undefined;
928
+ } | {
929
+ id: string;
930
+ frame: {
931
+ x: number;
932
+ y: number;
933
+ width: number;
934
+ height: number;
935
+ rotation: number;
936
+ };
937
+ locked?: boolean | undefined;
938
+ style?: {
939
+ variant: string;
940
+ theme?: string | undefined;
941
+ accentColor?: string | undefined;
942
+ size: "lg" | "md" | "sm";
943
+ emphasis: "epic" | "legendary" | "normal" | "rare";
944
+ effects: string[];
945
+ } | undefined;
946
+ metadata?: Record<string, unknown> | undefined;
947
+ type: "text";
948
+ text: string;
949
+ color: string;
950
+ fontSize: number;
951
+ } | {
952
+ id: string;
953
+ frame: {
954
+ x: number;
955
+ y: number;
956
+ width: number;
957
+ height: number;
958
+ rotation: number;
959
+ };
960
+ locked?: boolean | undefined;
961
+ style?: {
962
+ variant: string;
963
+ theme?: string | undefined;
964
+ accentColor?: string | undefined;
965
+ size: "lg" | "md" | "sm";
966
+ emphasis: "epic" | "legendary" | "normal" | "rare";
967
+ effects: string[];
968
+ } | undefined;
969
+ metadata?: Record<string, unknown> | undefined;
970
+ type: "note";
971
+ text: string;
972
+ color: string;
973
+ } | {
974
+ id: string;
975
+ frame: {
976
+ x: number;
977
+ y: number;
978
+ width: number;
979
+ height: number;
980
+ rotation: number;
981
+ };
982
+ locked?: boolean | undefined;
983
+ style?: {
984
+ variant: string;
985
+ theme?: string | undefined;
986
+ accentColor?: string | undefined;
987
+ size: "lg" | "md" | "sm";
988
+ emphasis: "epic" | "legendary" | "normal" | "rare";
989
+ effects: string[];
990
+ } | undefined;
991
+ metadata?: Record<string, unknown> | undefined;
992
+ type: "geo";
993
+ geo: string;
994
+ text: string;
995
+ color: string;
996
+ fillOpacity: number;
997
+ } | {
998
+ id: string;
999
+ frame: {
1000
+ x: number;
1001
+ y: number;
1002
+ width: number;
1003
+ height: number;
1004
+ rotation: number;
1005
+ };
1006
+ locked?: boolean | undefined;
1007
+ style?: {
1008
+ variant: string;
1009
+ theme?: string | undefined;
1010
+ accentColor?: string | undefined;
1011
+ size: "lg" | "md" | "sm";
1012
+ emphasis: "epic" | "legendary" | "normal" | "rare";
1013
+ effects: string[];
1014
+ } | undefined;
1015
+ metadata?: Record<string, unknown> | undefined;
1016
+ type: "draw";
1017
+ points: {
1018
+ x: number;
1019
+ y: number;
1020
+ p: number;
1021
+ }[];
1022
+ color: string;
1023
+ size: number;
1024
+ } | {
1025
+ id: string;
1026
+ frame: {
1027
+ x: number;
1028
+ y: number;
1029
+ width: number;
1030
+ height: number;
1031
+ rotation: number;
1032
+ };
1033
+ locked?: boolean | undefined;
1034
+ style?: {
1035
+ variant: string;
1036
+ theme?: string | undefined;
1037
+ accentColor?: string | undefined;
1038
+ size: "lg" | "md" | "sm";
1039
+ emphasis: "epic" | "legendary" | "normal" | "rare";
1040
+ effects: string[];
1041
+ } | undefined;
1042
+ metadata?: Record<string, unknown> | undefined;
1043
+ type: "arrow";
1044
+ start: {
1045
+ kind: "point";
1046
+ x: number;
1047
+ y: number;
1048
+ } | {
1049
+ kind: "binding";
1050
+ target: string;
1051
+ nx: number;
1052
+ ny: number;
1053
+ precise: boolean;
1054
+ };
1055
+ end: {
1056
+ kind: "point";
1057
+ x: number;
1058
+ y: number;
1059
+ } | {
1060
+ kind: "binding";
1061
+ target: string;
1062
+ nx: number;
1063
+ ny: number;
1064
+ precise: boolean;
1065
+ };
1066
+ bend: number;
1067
+ color: string;
1068
+ size: number;
1069
+ arrowStart: boolean;
1070
+ arrowEnd: boolean;
1071
+ label: string;
1072
+ } | {
1073
+ id: string;
1074
+ frame: {
1075
+ x: number;
1076
+ y: number;
1077
+ width: number;
1078
+ height: number;
1079
+ rotation: number;
1080
+ };
1081
+ locked?: boolean | undefined;
1082
+ style?: {
1083
+ variant: string;
1084
+ theme?: string | undefined;
1085
+ accentColor?: string | undefined;
1086
+ size: "lg" | "md" | "sm";
1087
+ emphasis: "epic" | "legendary" | "normal" | "rare";
1088
+ effects: string[];
1089
+ } | undefined;
1090
+ metadata?: Record<string, unknown> | undefined;
1091
+ type: "frame";
1092
+ label: string;
1093
+ color: string;
1094
+ }, any>>>;
1095
+ }, z.core.$strip>;
1096
+ type BoardFrame = z.infer<typeof BoardFrameSchema>;
1097
+ type BoardViewport = z.infer<typeof BoardViewportSchema>;
1098
+ type BoardAppearance = z.infer<typeof BoardAppearanceSchema>;
1099
+ type BoardItemStyle = z.infer<typeof BoardItemStyleSchema>;
1100
+ type SpaceFileRef = z.infer<typeof SpaceFileRefSchema>;
1101
+ type BoardMediaSnapshot = z.infer<typeof BoardMediaSnapshotSchema>;
1102
+ type BoardTextItem = z.infer<typeof BoardTextItemSchema>;
1103
+ type BoardNoteItem = z.infer<typeof BoardNoteItemSchema>;
1104
+ type BoardGeoItem = z.infer<typeof BoardGeoItemSchema>;
1105
+ type DrawPoint = z.infer<typeof DrawPointSchema>;
1106
+ type BoardDrawItem = z.infer<typeof BoardDrawItemSchema>;
1107
+ type ArrowEndpoint = z.infer<typeof ArrowEndpointSchema>;
1108
+ type BoardArrowItem = z.infer<typeof BoardArrowItemSchema>;
1109
+ type BoardFrameItem = z.infer<typeof BoardFrameItemSchema>;
1110
+ type BoardImageItem = z.infer<typeof BoardImageItemSchema>;
1111
+ type BoardVideoItem = z.infer<typeof BoardVideoItemSchema>;
1112
+ type BoardFileSnapshot = z.infer<typeof BoardFileSnapshotSchema>;
1113
+ type BoardFileItem = z.infer<typeof BoardFileItemSchema>;
1114
+ /** Known (natively handled) item variants. */
1115
+ type BoardKnownItem = BoardImageItem | BoardVideoItem | BoardFileItem | BoardTextItem | BoardNoteItem | BoardGeoItem | BoardDrawItem | BoardArrowItem | BoardFrameItem;
1116
+ /** Any item, including forward-compatible unknown types. */
1117
+ type BoardItem = BoardKnownItem | BoardUnknownItem;
1118
+ type BoardDocument = z.infer<typeof BoardDocumentSchema>;
1119
+ declare function isUnknownItem(item: BoardItem): item is BoardUnknownItem;
1120
+ declare function isMediaItem(item: BoardItem): item is BoardImageItem | BoardVideoItem;
1121
+ /** Whether an item references a workspace file (image, video or file card). */
1122
+ declare function isFileBackedItem(item: BoardItem): item is BoardImageItem | BoardVideoItem | BoardFileItem;
1123
+ //#endregion
1124
+ export { ArrowEndpoint, ArrowEndpointSchema, BOARD_DOCUMENT_KIND, BOARD_EXTENSION, BoardAppearance, BoardAppearanceSchema, BoardArrowItem, BoardArrowItemSchema, BoardDocument, BoardDocumentSchema, BoardDrawItem, BoardDrawItemSchema, BoardFileItem, BoardFileItemSchema, BoardFileSnapshot, BoardFileSnapshotSchema, BoardFrame, BoardFrameItem, BoardFrameItemSchema, BoardFrameSchema, BoardGeoItem, BoardGeoItemSchema, BoardImageItem, BoardImageItemSchema, BoardItem, BoardItemSchema, BoardItemStyle, BoardItemStyleSchema, BoardKnownItem, BoardMediaSnapshot, BoardMediaSnapshotSchema, BoardNoteItem, BoardNoteItemSchema, BoardTextItem, BoardTextItemSchema, BoardUnknownItem, BoardVideoItem, BoardVideoItemSchema, BoardViewport, BoardViewportSchema, DrawPoint, DrawPointSchema, KNOWN_BOARD_ITEM_TYPES, KnownBoardItemType, SpaceFileRef, SpaceFileRefSchema, UNKNOWN_BOARD_ITEM_TYPE, isFileBackedItem, isMediaItem, isUnknownItem, parseBoardItemLoose, unknownRealType };