@neta-art/cohub 12.1.1 → 12.3.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 (134) hide show
  1. package/README.md +85 -8
  2. package/dist/board/editor/clipboard.js +1 -1
  3. package/dist/board/editor/creation.js +1 -1
  4. package/dist/board/editor/document.d.ts +3 -1
  5. package/dist/board/editor/document.js +8 -6
  6. package/dist/board/editor/editor.d.ts +8 -3
  7. package/dist/board/editor/editor.js +8 -2
  8. package/dist/board/editor/index.d.ts +3 -3
  9. package/dist/board/editor/index.js +2 -2
  10. package/dist/board/editor/interaction.d.ts +23 -2
  11. package/dist/board/editor/interaction.js +93 -4
  12. package/dist/board/editor/query.d.ts +1 -1
  13. package/dist/board/editor/query.js +3 -7
  14. package/dist/board/editor/selection.js +1 -1
  15. package/dist/board/editor/snapshots.js +5 -57
  16. package/dist/board/editor/tool.d.ts +4 -1
  17. package/dist/board/editor/tool.js +6 -1
  18. package/dist/board/export/index.d.ts +2 -2
  19. package/dist/board/export/index.js +1 -1
  20. package/dist/board/export/node/fonts.js +4 -0
  21. package/dist/board/export/node/index.d.ts +2 -0
  22. package/dist/board/export/node/index.js +8 -1
  23. package/dist/board/export/node/scripts.js +1 -1
  24. package/dist/board/export/scene.d.ts +2 -2
  25. package/dist/board/export/scene.js +2 -2
  26. package/dist/board/model/asset-key.d.ts +24 -0
  27. package/dist/board/model/asset-key.js +104 -0
  28. package/dist/board/model/export-assets.d.ts +7 -3
  29. package/dist/board/model/export-assets.js +34 -13
  30. package/dist/board/model/index.d.ts +9 -7
  31. package/dist/board/model/index.js +22 -20
  32. package/dist/board/model/items/create.js +3 -3
  33. package/dist/board/model/items/definition.d.ts +9 -1
  34. package/dist/board/model/items/index.d.ts +2 -2
  35. package/dist/board/model/items/registry.d.ts +2 -1
  36. package/dist/board/model/items/registry.js +1 -0
  37. package/dist/board/model/media-sizes.d.ts +28 -0
  38. package/dist/board/model/media-sizes.js +64 -0
  39. package/dist/board/model/palette.d.ts +1 -0
  40. package/dist/board/model/palette.js +20 -130
  41. package/dist/board/model/sampling.js +1 -1
  42. package/dist/board/model/text-metrics.d.ts +28 -3
  43. package/dist/board/model/text-metrics.js +36 -2
  44. package/dist/board/model/themes.d.ts +495 -0
  45. package/dist/board/model/themes.js +500 -0
  46. package/dist/board/render/card-tag.js +2 -2
  47. package/dist/board/render/index.d.ts +11 -7
  48. package/dist/board/render/index.js +9 -5
  49. package/dist/board/render/labels.d.ts +15 -0
  50. package/dist/board/render/labels.js +14 -0
  51. package/dist/board/render/lod.d.ts +30 -0
  52. package/dist/board/render/lod.js +33 -0
  53. package/dist/board/render/media-interaction.d.ts +5 -2
  54. package/dist/board/render/media-interaction.js +15 -3
  55. package/dist/board/render/palette.js +2 -25
  56. package/dist/board/render/renderers/arrow-card-renderer.js +7 -5
  57. package/dist/board/render/renderers/audio-card-renderer.js +3 -2
  58. package/dist/board/render/renderers/board-renderer-registry.d.ts +22 -1
  59. package/dist/board/render/renderers/board-renderer-registry.js +9 -4
  60. package/dist/board/render/renderers/custom-card-renderer.js +5 -5
  61. package/dist/board/render/renderers/draw-card-renderer.js +1 -1
  62. package/dist/board/render/renderers/far-plate.d.ts +14 -1
  63. package/dist/board/render/renderers/far-plate.js +31 -8
  64. package/dist/board/render/renderers/file-card-renderer.js +49 -31
  65. package/dist/board/render/renderers/frame-card-renderer.js +9 -3
  66. package/dist/board/render/renderers/image-card-renderer.js +34 -8
  67. package/dist/board/render/renderers/model-card-renderer.js +6 -6
  68. package/dist/board/render/renderers/shape-card-renderer.js +25 -24
  69. package/dist/board/render/renderers/task-card-renderer.js +9 -10
  70. package/dist/board/render/renderers/text-card-renderer.js +86 -41
  71. package/dist/board/render/renderers/video-card-renderer.js +5 -4
  72. package/dist/board/render/script-export.js +1 -1
  73. package/dist/board/render/script-host.js +3 -3
  74. package/dist/board/render/style.d.ts +8 -2
  75. package/dist/board/render/style.js +8 -2
  76. package/dist/board/render/surface.d.ts +5 -0
  77. package/dist/board/render/surface.js +13 -3
  78. package/dist/board/render/text-edit.d.ts +32 -0
  79. package/dist/board/render/text-edit.js +134 -0
  80. package/dist/board/render/text-fit.d.ts +1 -3
  81. package/dist/board/render/text-fit.js +6 -49
  82. package/dist/board/render/text-measurement.d.ts +25 -1
  83. package/dist/board/render/text-measurement.js +157 -19
  84. package/dist/board/render/text-resolution.d.ts +1 -6
  85. package/dist/board/render/text-resolution.js +1 -10
  86. package/dist/board/render/theme.d.ts +15 -0
  87. package/dist/board/render/theme.js +15 -0
  88. package/dist/board/replica/index.d.ts +4 -2
  89. package/dist/board/replica/index.js +28 -17
  90. package/dist/board/replica/indexeddb.d.ts +16 -0
  91. package/dist/board/replica/indexeddb.js +155 -0
  92. package/dist/board/stage/assets.d.ts +28 -5
  93. package/dist/board/stage/assets.js +293 -102
  94. package/dist/board/stage/bench.d.ts +35 -0
  95. package/dist/board/stage/bench.js +153 -0
  96. package/dist/board/stage/device.d.ts +41 -0
  97. package/dist/board/stage/device.js +62 -0
  98. package/dist/board/stage/frame-budget.d.ts +19 -0
  99. package/dist/board/stage/frame-budget.js +69 -0
  100. package/dist/board/stage/idle.d.ts +4 -0
  101. package/dist/board/stage/idle.js +26 -0
  102. package/dist/board/stage/index.d.ts +11 -7
  103. package/dist/board/stage/index.js +7 -4
  104. package/dist/board/stage/lru.d.ts +13 -9
  105. package/dist/board/stage/lru.js +38 -20
  106. package/dist/board/stage/presses.d.ts +21 -0
  107. package/dist/board/stage/presses.js +66 -0
  108. package/dist/board/stage/scene.d.ts +15 -1
  109. package/dist/board/stage/scene.js +248 -141
  110. package/dist/board/stage/stage.d.ts +28 -2
  111. package/dist/board/stage/stage.js +404 -112
  112. package/dist/board/stage/texture-pool.d.ts +10 -1
  113. package/dist/board/stage/texture-pool.js +72 -2
  114. package/dist/chunks/environment.d.ts +6 -0
  115. package/dist/chunks/http.d.ts +9 -1
  116. package/dist/chunks/http.js +791 -4
  117. package/dist/index.d.ts +52 -1
  118. package/dist/index.js +202 -862
  119. package/dist/media.d.ts +3 -27
  120. package/dist/media.js +3 -82
  121. package/dist/protocol/dist/board-constants.js +3 -3
  122. package/dist/protocol/dist/board-layout.d.ts +17 -3
  123. package/dist/protocol/dist/board-layout.js +68 -11
  124. package/dist/protocol/dist/board-model.d.ts +15 -1
  125. package/dist/protocol/dist/board-model.js +12 -2
  126. package/dist/protocol/dist/board-patch.js +1 -1
  127. package/dist/protocol/dist/board-schema.d.ts +2 -1
  128. package/dist/protocol/dist/board-schema.js +4 -1
  129. package/dist/protocol/dist/core/media.d.ts +35 -1
  130. package/dist/protocol/dist/core/media.js +127 -1
  131. package/dist/protocol/dist/index.d.ts +3 -3
  132. package/package.json +4 -2
  133. package/dist/board/model/image-key.d.ts +0 -9
  134. package/dist/board/model/image-key.js +0 -33
@@ -0,0 +1,500 @@
1
+ //#region src/board/model/themes.ts
2
+ const BOARD_THEME_IDS = [
3
+ "dark",
4
+ "light",
5
+ "solarized-dark",
6
+ "solarized-light",
7
+ "neta-studio",
8
+ "neta-pixel",
9
+ "neta-pixel-dark"
10
+ ];
11
+ const BOARD_THEME_DATA = {
12
+ dark: {
13
+ colorScheme: "dark",
14
+ palette: {
15
+ bg: 1053203,
16
+ surface: 2369321,
17
+ hover: 2500907,
18
+ border: 3158838,
19
+ brand: 14564909,
20
+ text: 15330286,
21
+ muted: 10198947,
22
+ rare: 6009047,
23
+ epic: 2070983,
24
+ legendary: 15580004
25
+ },
26
+ colors: {
27
+ brand: {
28
+ stroke: 14564909,
29
+ fill: 14564909,
30
+ label: 15330286
31
+ },
32
+ neutral: {
33
+ stroke: 10198947,
34
+ fill: 10198947,
35
+ label: 15330286
36
+ },
37
+ black: {
38
+ stroke: 0,
39
+ fill: 0,
40
+ label: 15330286
41
+ },
42
+ white: {
43
+ stroke: 16777215,
44
+ fill: 16777215,
45
+ label: 15330286
46
+ },
47
+ blue: {
48
+ stroke: 6009047,
49
+ fill: 6009047,
50
+ label: 15330286
51
+ },
52
+ green: {
53
+ stroke: 7065501,
54
+ fill: 7065501,
55
+ label: 15330286
56
+ },
57
+ amber: {
58
+ stroke: 15580004,
59
+ fill: 15580004,
60
+ label: 15330286
61
+ },
62
+ violet: {
63
+ stroke: 11971577,
64
+ fill: 11971577,
65
+ label: 15330286
66
+ },
67
+ rose: {
68
+ stroke: 15950429,
69
+ fill: 15950429,
70
+ label: 15330286
71
+ }
72
+ },
73
+ style: {}
74
+ },
75
+ light: {
76
+ colorScheme: "light",
77
+ palette: {
78
+ bg: 16251130,
79
+ surface: 16777215,
80
+ hover: 15330029,
81
+ border: 14409442,
82
+ brand: 13582898,
83
+ text: 66050,
84
+ muted: 6251625,
85
+ rare: 24458,
86
+ epic: 19325,
87
+ legendary: 8804608
88
+ },
89
+ colors: {
90
+ brand: {
91
+ stroke: 13582898,
92
+ fill: 13582898,
93
+ label: 66050
94
+ },
95
+ neutral: {
96
+ stroke: 6251625,
97
+ fill: 6251625,
98
+ label: 66050
99
+ },
100
+ black: {
101
+ stroke: 0,
102
+ fill: 0,
103
+ label: 66050
104
+ },
105
+ white: {
106
+ stroke: 16777215,
107
+ fill: 16777215,
108
+ label: 66050
109
+ },
110
+ blue: {
111
+ stroke: 24458,
112
+ fill: 24458,
113
+ label: 66050
114
+ },
115
+ green: {
116
+ stroke: 26685,
117
+ fill: 26685,
118
+ label: 66050
119
+ },
120
+ amber: {
121
+ stroke: 8804608,
122
+ fill: 8804608,
123
+ label: 66050
124
+ },
125
+ violet: {
126
+ stroke: 6904238,
127
+ fill: 6904238,
128
+ label: 66050
129
+ },
130
+ rose: {
131
+ stroke: 10165794,
132
+ fill: 10165794,
133
+ label: 66050
134
+ }
135
+ },
136
+ style: {}
137
+ },
138
+ "solarized-dark": {
139
+ colorScheme: "dark",
140
+ palette: {
141
+ bg: 70677,
142
+ surface: 859936,
143
+ hover: 1057828,
144
+ border: 1582887,
145
+ brand: 34240,
146
+ text: 12572374,
147
+ muted: 6848639,
148
+ rare: 2206648,
149
+ epic: 38821,
150
+ legendary: 14790474
151
+ },
152
+ colors: {
153
+ brand: {
154
+ stroke: 34240,
155
+ fill: 34240,
156
+ label: 12572374
157
+ },
158
+ neutral: {
159
+ stroke: 6848639,
160
+ fill: 6848639,
161
+ label: 12572374
162
+ },
163
+ black: {
164
+ stroke: 0,
165
+ fill: 0,
166
+ label: 12572374
167
+ },
168
+ white: {
169
+ stroke: 16777215,
170
+ fill: 16777215,
171
+ label: 12572374
172
+ },
173
+ blue: {
174
+ stroke: 2206648,
175
+ fill: 2206648,
176
+ label: 12572374
177
+ },
178
+ green: {
179
+ stroke: 9481815,
180
+ fill: 9481815,
181
+ label: 12572374
182
+ },
183
+ amber: {
184
+ stroke: 14790474,
185
+ fill: 14790474,
186
+ label: 12572374
187
+ },
188
+ violet: {
189
+ stroke: 11182560,
190
+ fill: 11182560,
191
+ label: 12572374
192
+ },
193
+ rose: {
194
+ stroke: 15950429,
195
+ fill: 15950429,
196
+ label: 12572374
197
+ }
198
+ },
199
+ style: {}
200
+ },
201
+ "solarized-light": {
202
+ colorScheme: "light",
203
+ palette: {
204
+ bg: 16775902,
205
+ surface: 16446169,
206
+ hover: 15920337,
207
+ border: 14341313,
208
+ brand: 31924,
209
+ text: 2110772,
210
+ muted: 5860973,
211
+ rare: 28541,
212
+ epic: 23659,
213
+ legendary: 8936704
214
+ },
215
+ colors: {
216
+ brand: {
217
+ stroke: 31924,
218
+ fill: 31924,
219
+ label: 2110772
220
+ },
221
+ neutral: {
222
+ stroke: 5860973,
223
+ fill: 5860973,
224
+ label: 2110772
225
+ },
226
+ black: {
227
+ stroke: 0,
228
+ fill: 0,
229
+ label: 2110772
230
+ },
231
+ white: {
232
+ stroke: 16777215,
233
+ fill: 16777215,
234
+ label: 2110772
235
+ },
236
+ blue: {
237
+ stroke: 28541,
238
+ fill: 28541,
239
+ label: 2110772
240
+ },
241
+ green: {
242
+ stroke: 4809217,
243
+ fill: 4809217,
244
+ label: 2110772
245
+ },
246
+ amber: {
247
+ stroke: 8936704,
248
+ fill: 8936704,
249
+ label: 2110772
250
+ },
251
+ violet: {
252
+ stroke: 6904995,
253
+ fill: 6904995,
254
+ label: 2110772
255
+ },
256
+ rose: {
257
+ stroke: 10363429,
258
+ fill: 10363429,
259
+ label: 2110772
260
+ }
261
+ },
262
+ style: {}
263
+ },
264
+ "neta-studio": {
265
+ colorScheme: "dark",
266
+ palette: {
267
+ bg: 329221,
268
+ surface: 2039072,
269
+ hover: 1842202,
270
+ border: 1842202,
271
+ brand: 3900150,
272
+ text: 15920612,
273
+ muted: 9999759,
274
+ rare: 9235170,
275
+ epic: 7266776,
276
+ legendary: 15449187
277
+ },
278
+ colors: {
279
+ brand: {
280
+ stroke: 15524306,
281
+ fill: 15524306,
282
+ label: 15920612
283
+ },
284
+ neutral: {
285
+ stroke: 15920612,
286
+ fill: 15920612,
287
+ label: 15920612
288
+ },
289
+ black: {
290
+ stroke: 0,
291
+ fill: 0,
292
+ label: 15920612
293
+ },
294
+ white: {
295
+ stroke: 16777215,
296
+ fill: 16777215,
297
+ label: 15920612
298
+ },
299
+ blue: {
300
+ stroke: 9235170,
301
+ fill: 9235170,
302
+ label: 15920612
303
+ },
304
+ green: {
305
+ stroke: 8177036,
306
+ fill: 8177036,
307
+ label: 15920612
308
+ },
309
+ amber: {
310
+ stroke: 15449187,
311
+ fill: 15449187,
312
+ label: 15920612
313
+ },
314
+ violet: {
315
+ stroke: 11971327,
316
+ fill: 11971327,
317
+ label: 15920612
318
+ },
319
+ rose: {
320
+ stroke: 15562341,
321
+ fill: 15562341,
322
+ label: 15920612
323
+ }
324
+ },
325
+ style: {
326
+ selection: { outset: 0 },
327
+ frameLabelSize: 16
328
+ }
329
+ },
330
+ "neta-pixel": {
331
+ colorScheme: "light",
332
+ palette: {
333
+ bg: 16185078,
334
+ surface: 16777215,
335
+ hover: 15461355,
336
+ border: 14935011,
337
+ brand: 1824230,
338
+ text: 1447704,
339
+ muted: 7566452,
340
+ rare: 31378,
341
+ epic: 31378,
342
+ legendary: 9725440
343
+ },
344
+ colors: {
345
+ brand: {
346
+ stroke: 1447704,
347
+ fill: 1447704,
348
+ label: 1447704
349
+ },
350
+ neutral: {
351
+ stroke: 7566452,
352
+ fill: 7566452,
353
+ label: 1447704
354
+ },
355
+ black: {
356
+ stroke: 0,
357
+ fill: 0,
358
+ label: 1447704
359
+ },
360
+ white: {
361
+ stroke: 16777215,
362
+ fill: 16777215,
363
+ label: 1447704
364
+ },
365
+ blue: {
366
+ stroke: 6010853,
367
+ fill: 6010853,
368
+ label: 1447704
369
+ },
370
+ green: {
371
+ stroke: 9683613,
372
+ fill: 9683613,
373
+ label: 1447704
374
+ },
375
+ amber: {
376
+ stroke: 14264410,
377
+ fill: 14264410,
378
+ label: 1447704
379
+ },
380
+ violet: {
381
+ stroke: 11441117,
382
+ fill: 11441117,
383
+ label: 1447704
384
+ },
385
+ rose: {
386
+ stroke: 15043210,
387
+ fill: 15043210,
388
+ label: 1447704
389
+ }
390
+ },
391
+ style: {
392
+ corner: "pixel",
393
+ shadow: {
394
+ color: 1447704,
395
+ alpha: .1,
396
+ blur: 20,
397
+ y: 0
398
+ },
399
+ selection: {
400
+ width: 1.5,
401
+ outset: 0,
402
+ dash: 0,
403
+ handle: "square",
404
+ handleSize: 8
405
+ },
406
+ media: "framed",
407
+ progress: "mosaic",
408
+ icons: "pixel",
409
+ motion: "stepped",
410
+ font: "\"Figtree Variable\", \"PingFang SC\", \"Noto Sans CJK SC\", \"Microsoft YaHei\", system-ui, sans-serif",
411
+ frameLabelSize: 16
412
+ }
413
+ },
414
+ "neta-pixel-dark": {
415
+ colorScheme: "dark",
416
+ palette: {
417
+ bg: 1447704,
418
+ surface: 2631979,
419
+ hover: 3224115,
420
+ border: 3618875,
421
+ brand: 1824230,
422
+ text: 15921907,
423
+ muted: 9408656,
424
+ rare: 1824230,
425
+ epic: 1824230,
426
+ legendary: 16766287
427
+ },
428
+ colors: {
429
+ brand: {
430
+ stroke: 16185078,
431
+ fill: 16185078,
432
+ label: 15921907
433
+ },
434
+ neutral: {
435
+ stroke: 9408656,
436
+ fill: 9408656,
437
+ label: 15921907
438
+ },
439
+ black: {
440
+ stroke: 0,
441
+ fill: 0,
442
+ label: 15921907
443
+ },
444
+ white: {
445
+ stroke: 16777215,
446
+ fill: 16777215,
447
+ label: 15921907
448
+ },
449
+ blue: {
450
+ stroke: 6010853,
451
+ fill: 6010853,
452
+ label: 15921907
453
+ },
454
+ green: {
455
+ stroke: 9683613,
456
+ fill: 9683613,
457
+ label: 15921907
458
+ },
459
+ amber: {
460
+ stroke: 14264410,
461
+ fill: 14264410,
462
+ label: 15921907
463
+ },
464
+ violet: {
465
+ stroke: 11441117,
466
+ fill: 11441117,
467
+ label: 15921907
468
+ },
469
+ rose: {
470
+ stroke: 15043210,
471
+ fill: 15043210,
472
+ label: 15921907
473
+ }
474
+ },
475
+ style: {
476
+ corner: "pixel",
477
+ shadow: {
478
+ color: 0,
479
+ alpha: .4,
480
+ blur: 20,
481
+ y: 0
482
+ },
483
+ selection: {
484
+ width: 1.5,
485
+ outset: 0,
486
+ dash: 0,
487
+ handle: "square",
488
+ handleSize: 8
489
+ },
490
+ media: "framed",
491
+ progress: "mosaic",
492
+ icons: "pixel",
493
+ motion: "stepped",
494
+ font: "\"Figtree Variable\", \"PingFang SC\", \"Noto Sans CJK SC\", \"Microsoft YaHei\", system-ui, sans-serif",
495
+ frameLabelSize: 16
496
+ }
497
+ }
498
+ };
499
+ //#endregion
500
+ export { BOARD_THEME_DATA, BOARD_THEME_IDS };
@@ -113,7 +113,7 @@ function drawLineGlyph(graphics, glyph, color) {
113
113
  11,
114
114
  2.5,
115
115
  11
116
- ]).stroke(line);
116
+ ], true).stroke(line);
117
117
  graphics.moveTo(7.5, 1).lineTo(7.5, 3).lineTo(9.5, 3).stroke(line);
118
118
  return;
119
119
  case "task":
@@ -154,7 +154,7 @@ function traceCube(graphics, cx, cy, radius) {
154
154
  cy + dy,
155
155
  cx - dx,
156
156
  cy - dy
157
- ]).moveTo(cx - dx, cy - dy).lineTo(cx, cy).lineTo(cx + dx, cy - dy).moveTo(cx, cy).lineTo(cx, cy + radius);
157
+ ], true).moveTo(cx - dx, cy - dy).lineTo(cx, cy).lineTo(cx + dx, cy - dy).moveTo(cx, cy).lineTo(cx, cy + radius);
158
158
  return graphics;
159
159
  }
160
160
  function drawCardGlyph(graphics, glyph, color, pixel) {
@@ -1,20 +1,24 @@
1
- import { BoardRenderStyle, BoardSelectionStyle, BoardShadowStyle, defaultBoardRenderStyle, resolveBoardRenderStyle } from "./style.js";
2
- import { BoardCardRenderer, BoardCardRendererResolver, BoardRenderContext, BoardRenderLabels, BoardRenderPalette, BoardScriptHost, DEFAULT_BOARD_RENDER_LABELS, createBoardCardRendererResolver, getBoardCardRenderer } from "./renderers/board-renderer-registry.js";
1
+ import { BoardRenderStyle, BoardRenderStyleInput, BoardSelectionStyle, BoardShadowStyle, defaultBoardRenderStyle, resolveBoardRenderStyle } from "./style.js";
2
+ import { BOARD_LOD_HYSTERESIS, BoardLod, BoardLodKind, COMPACT_BOARD_LOD, DEFAULT_BOARD_LOD, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardTextSize } from "./lod.js";
3
+ import { BoardCardHit, BoardCardRenderer, BoardCardRendererResolver, BoardRenderContext, BoardRenderLabels, BoardRenderPalette, BoardScriptHost, DEFAULT_BOARD_RENDER_LABELS, createBoardCardRendererResolver, getBoardCardRenderer } from "./renderers/board-renderer-registry.js";
3
4
  import { createBoardRenderSampler } from "./sampling.js";
4
5
  import { BoardRenderDiagnostic, inspectBoardItems, inspectBoardScene, measureBoardText } from "./diagnostics.js";
5
6
  import { BoardBackgroundContext, createBoardBackground, updateBoardBackground } from "./board-background.js";
6
7
  import { CARD_TAG_SIZE, CardGlyph, CardTag, createCardTag, drawCardGlyph, formatBoardDuration, syncCardTag, traceCube, zoomCardTag } from "./card-tag.js";
7
8
  import { ClipGroup, clippingAncestor, isClippingFrame, syncClipGroup, traceFrameOutline } from "./clip.js";
8
9
  import { BoardCssPaint, parseBoardCssColor, parseBoardCssPaint } from "./css-color.js";
9
- import { BoardMediaAction, boardMediaActionAt, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayKeyCenter } from "./media-interaction.js";
10
+ import { BOARD_PLAY_MEDIA, BoardMediaAction, boardMediaActionAt, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayHit, mediaPlayKeyCenter } from "./media-interaction.js";
10
11
  import { defaultBoardPalette, itemAlpha, itemColor } from "./palette.js";
11
12
  import { BoardScriptHostOptions, BrowserBoardScriptHost, createBoardScriptHost } from "./script-host.js";
12
13
  import { prepareBrowserBoardScripts } from "./script-export.js";
13
14
  import { dashPattern, endAngle, roundRectPoints, traceArrowhead, tracePolyline, trimPolyline } from "./stroke.js";
14
15
  import { CardCrop, CardElevation, CardRect, CardSurface, PIXEL_STEP, cardElevation, cardOutlinePoints, cardShadow, containRect, drawCardShadow, drawCardSurface, fillCardPicture, isBoardCard, traceCardOutline, tracePixelRect } from "./surface.js";
16
+ import { BoardRenderTheme, boardRenderTheme } from "./theme.js";
15
17
  import { BOARD_EFFECT_MAX_PARTICLES } from "./renderers/effect-card-renderer.js";
16
- import { ellipsizeWrappedLines, fitLineWithEllipsis, fitTextToLines, fitTextToWidth } from "./text-fit.js";
17
- import { BOARD_FONT_STACKS, ensureBoardTextMeasurement, installBoardTextMeasurement } from "./text-measurement.js";
18
- import { boardCardDetailed, boardTextResolution, getBoardResolution, syncTextResolution, syncTextWrapWidth, textZoomBucket } from "./text-resolution.js";
18
+ import { FarPlateStyle, drawFarBars, drawFarPlate, farPictureTone } from "./renderers/far-plate.js";
19
+ import { BOARD_FONT_STACKS, BoardTextLineLayout, BoardTextLineOptions, BoardTextStyle, BoardTextWhiteSpace, boardTextStyle, canvasFont, canvasFontFamily, cssBaselineShift, ensureBoardTextMeasurement, fitLineWithEllipsis, installBoardTextMeasurement, layoutTextLines, measureTextWidth, onBoardTextFontsChange } from "./text-measurement.js";
20
+ import { BoardTextEditInput, BoardTextEditLayout, boardTextEditLayout } from "./text-edit.js";
21
+ import { fitTextToLines, fitTextToWidth } from "./text-fit.js";
22
+ import { boardTextResolution, getBoardResolution, syncTextResolution, textZoomBucket } from "./text-resolution.js";
19
23
  import { VIDEO_THUMBNAIL_MAX_EDGE, VideoNaturalSize, loadVideoThumbnailTexture, videoTextureNaturalSize, videoThumbnailSize } from "./video-thumbnail.js";
20
- export { BOARD_EFFECT_MAX_PARTICLES, BOARD_FONT_STACKS, BoardBackgroundContext, BoardCardRenderer, BoardCardRendererResolver, BoardCssPaint, BoardMediaAction, BoardRenderContext, BoardRenderDiagnostic, BoardRenderLabels, BoardRenderPalette, BoardRenderStyle, BoardScriptHost, BoardScriptHostOptions, BoardSelectionStyle, BoardShadowStyle, BrowserBoardScriptHost, CARD_TAG_SIZE, CardCrop, CardElevation, CardGlyph, CardRect, CardSurface, CardTag, ClipGroup, DEFAULT_BOARD_RENDER_LABELS, PIXEL_STEP, VIDEO_THUMBNAIL_MAX_EDGE, VideoNaturalSize, boardCardDetailed, boardMediaActionAt, boardTextResolution, cardElevation, cardOutlinePoints, cardShadow, clippingAncestor, containRect, createBoardBackground, createBoardCardRendererResolver, createBoardRenderSampler, createBoardScriptHost, createCardTag, dashPattern, defaultBoardPalette, defaultBoardRenderStyle, drawCardGlyph, drawCardShadow, drawCardSurface, ellipsizeWrappedLines, endAngle, ensureBoardTextMeasurement, fillCardPicture, fitLineWithEllipsis, fitTextToLines, fitTextToWidth, formatBoardDuration, getBoardCardRenderer, getBoardResolution, inspectBoardItems, inspectBoardScene, installBoardTextMeasurement, isBoardCard, isClippingFrame, itemAlpha, itemColor, loadVideoThumbnailTexture, measureBoardText, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayKeyCenter, parseBoardCssColor, parseBoardCssPaint, prepareBrowserBoardScripts, resolveBoardRenderStyle, roundRectPoints, syncCardTag, syncClipGroup, syncTextResolution, syncTextWrapWidth, textZoomBucket, traceArrowhead, traceCardOutline, traceCube, traceFrameOutline, tracePixelRect, tracePolyline, trimPolyline, updateBoardBackground, videoTextureNaturalSize, videoThumbnailSize, zoomCardTag };
24
+ export { BOARD_EFFECT_MAX_PARTICLES, BOARD_FONT_STACKS, BOARD_LOD_HYSTERESIS, BOARD_PLAY_MEDIA, BoardBackgroundContext, BoardCardHit, BoardCardRenderer, BoardCardRendererResolver, BoardCssPaint, BoardLod, BoardLodKind, BoardMediaAction, BoardRenderContext, BoardRenderDiagnostic, BoardRenderLabels, BoardRenderPalette, BoardRenderStyle, BoardRenderStyleInput, BoardRenderTheme, BoardScriptHost, BoardScriptHostOptions, BoardSelectionStyle, BoardShadowStyle, BoardTextEditInput, BoardTextEditLayout, BoardTextLineLayout, BoardTextLineOptions, BoardTextStyle, BoardTextWhiteSpace, BrowserBoardScriptHost, CARD_TAG_SIZE, COMPACT_BOARD_LOD, CardCrop, CardElevation, CardGlyph, CardRect, CardSurface, CardTag, ClipGroup, DEFAULT_BOARD_LOD, DEFAULT_BOARD_RENDER_LABELS, type FarPlateStyle, PIXEL_STEP, VIDEO_THUMBNAIL_MAX_EDGE, VideoNaturalSize, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardMediaActionAt, boardRenderTheme, boardTextEditLayout, boardTextResolution, boardTextSize, boardTextStyle, canvasFont, canvasFontFamily, cardElevation, cardOutlinePoints, cardShadow, clippingAncestor, containRect, createBoardBackground, createBoardCardRendererResolver, createBoardRenderSampler, createBoardScriptHost, createCardTag, cssBaselineShift, dashPattern, defaultBoardPalette, defaultBoardRenderStyle, drawCardGlyph, drawCardShadow, drawCardSurface, drawFarBars, drawFarPlate, endAngle, ensureBoardTextMeasurement, farPictureTone, fillCardPicture, fitLineWithEllipsis, fitTextToLines, fitTextToWidth, formatBoardDuration, getBoardCardRenderer, getBoardResolution, inspectBoardItems, inspectBoardScene, installBoardTextMeasurement, isBoardCard, isClippingFrame, itemAlpha, itemColor, layoutTextLines, loadVideoThumbnailTexture, measureBoardText, measureTextWidth, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayHit, mediaPlayKeyCenter, onBoardTextFontsChange, parseBoardCssColor, parseBoardCssPaint, prepareBrowserBoardScripts, resolveBoardRenderStyle, roundRectPoints, syncCardTag, syncClipGroup, syncTextResolution, textZoomBucket, traceArrowhead, traceCardOutline, traceCube, traceFrameOutline, tracePixelRect, tracePolyline, trimPolyline, updateBoardBackground, videoTextureNaturalSize, videoThumbnailSize, zoomCardTag };
@@ -1,20 +1,24 @@
1
1
  import { parseBoardCssColor, parseBoardCssPaint } from "./css-color.js";
2
2
  import { defaultBoardPalette, itemAlpha, itemColor } from "./palette.js";
3
3
  import { createBoardRenderSampler } from "./sampling.js";
4
- import { BOARD_FONT_STACKS, ensureBoardTextMeasurement, installBoardTextMeasurement } from "./text-measurement.js";
4
+ import { BOARD_FONT_STACKS, boardTextStyle, canvasFont, canvasFontFamily, cssBaselineShift, ensureBoardTextMeasurement, fitLineWithEllipsis, installBoardTextMeasurement, layoutTextLines, measureTextWidth, onBoardTextFontsChange } from "./text-measurement.js";
5
5
  import { inspectBoardItems, inspectBoardScene, measureBoardText } from "./diagnostics.js";
6
+ import { BOARD_LOD_HYSTERESIS, COMPACT_BOARD_LOD, DEFAULT_BOARD_LOD, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardTextSize } from "./lod.js";
6
7
  import { createBoardBackground, updateBoardBackground } from "./board-background.js";
7
- import { ellipsizeWrappedLines, fitLineWithEllipsis, fitTextToLines, fitTextToWidth } from "./text-fit.js";
8
- import { boardCardDetailed, boardTextResolution, getBoardResolution, syncTextResolution, syncTextWrapWidth, textZoomBucket } from "./text-resolution.js";
8
+ import { fitTextToLines, fitTextToWidth } from "./text-fit.js";
9
+ import { boardTextResolution, getBoardResolution, syncTextResolution, textZoomBucket } from "./text-resolution.js";
9
10
  import { CARD_TAG_SIZE, createCardTag, drawCardGlyph, formatBoardDuration, syncCardTag, traceCube, zoomCardTag } from "./card-tag.js";
10
11
  import { clippingAncestor, isClippingFrame, syncClipGroup, traceFrameOutline } from "./clip.js";
11
12
  import { dashPattern, endAngle, roundRectPoints, traceArrowhead, tracePolyline, trimPolyline } from "./stroke.js";
12
13
  import { PIXEL_STEP, cardElevation, cardOutlinePoints, cardShadow, containRect, drawCardShadow, drawCardSurface, fillCardPicture, isBoardCard, traceCardOutline, tracePixelRect } from "./surface.js";
13
- import { boardMediaActionAt, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayKeyCenter } from "./media-interaction.js";
14
+ import { drawFarBars, drawFarPlate, farPictureTone } from "./renderers/far-plate.js";
15
+ import { BOARD_PLAY_MEDIA, boardMediaActionAt, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayHit, mediaPlayKeyCenter } from "./media-interaction.js";
14
16
  import { BOARD_EFFECT_MAX_PARTICLES } from "./renderers/effect-card-renderer.js";
15
17
  import { DEFAULT_BOARD_RENDER_LABELS, createBoardCardRendererResolver, getBoardCardRenderer } from "./renderers/board-renderer-registry.js";
16
18
  import { createBoardScriptHost } from "./script-host.js";
17
19
  import { prepareBrowserBoardScripts } from "./script-export.js";
18
20
  import { defaultBoardRenderStyle, resolveBoardRenderStyle } from "./style.js";
21
+ import { boardRenderTheme } from "./theme.js";
22
+ import { boardTextEditLayout } from "./text-edit.js";
19
23
  import { VIDEO_THUMBNAIL_MAX_EDGE, loadVideoThumbnailTexture, videoTextureNaturalSize, videoThumbnailSize } from "./video-thumbnail.js";
20
- export { BOARD_EFFECT_MAX_PARTICLES, BOARD_FONT_STACKS, CARD_TAG_SIZE, DEFAULT_BOARD_RENDER_LABELS, PIXEL_STEP, VIDEO_THUMBNAIL_MAX_EDGE, boardCardDetailed, boardMediaActionAt, boardTextResolution, cardElevation, cardOutlinePoints, cardShadow, clippingAncestor, containRect, createBoardBackground, createBoardCardRendererResolver, createBoardRenderSampler, createBoardScriptHost, createCardTag, dashPattern, defaultBoardPalette, defaultBoardRenderStyle, drawCardGlyph, drawCardShadow, drawCardSurface, ellipsizeWrappedLines, endAngle, ensureBoardTextMeasurement, fillCardPicture, fitLineWithEllipsis, fitTextToLines, fitTextToWidth, formatBoardDuration, getBoardCardRenderer, getBoardResolution, inspectBoardItems, inspectBoardScene, installBoardTextMeasurement, isBoardCard, isClippingFrame, itemAlpha, itemColor, loadVideoThumbnailTexture, measureBoardText, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayKeyCenter, parseBoardCssColor, parseBoardCssPaint, prepareBrowserBoardScripts, resolveBoardRenderStyle, roundRectPoints, syncCardTag, syncClipGroup, syncTextResolution, syncTextWrapWidth, textZoomBucket, traceArrowhead, traceCardOutline, traceCube, traceFrameOutline, tracePixelRect, tracePolyline, trimPolyline, updateBoardBackground, videoTextureNaturalSize, videoThumbnailSize, zoomCardTag };
24
+ export { BOARD_EFFECT_MAX_PARTICLES, BOARD_FONT_STACKS, BOARD_LOD_HYSTERESIS, BOARD_PLAY_MEDIA, CARD_TAG_SIZE, COMPACT_BOARD_LOD, DEFAULT_BOARD_LOD, DEFAULT_BOARD_RENDER_LABELS, PIXEL_STEP, VIDEO_THUMBNAIL_MAX_EDGE, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardMediaActionAt, boardRenderTheme, boardTextEditLayout, boardTextResolution, boardTextSize, boardTextStyle, canvasFont, canvasFontFamily, cardElevation, cardOutlinePoints, cardShadow, clippingAncestor, containRect, createBoardBackground, createBoardCardRendererResolver, createBoardRenderSampler, createBoardScriptHost, createCardTag, cssBaselineShift, dashPattern, defaultBoardPalette, defaultBoardRenderStyle, drawCardGlyph, drawCardShadow, drawCardSurface, drawFarBars, drawFarPlate, endAngle, ensureBoardTextMeasurement, farPictureTone, fillCardPicture, fitLineWithEllipsis, fitTextToLines, fitTextToWidth, formatBoardDuration, getBoardCardRenderer, getBoardResolution, inspectBoardItems, inspectBoardScene, installBoardTextMeasurement, isBoardCard, isClippingFrame, itemAlpha, itemColor, layoutTextLines, loadVideoThumbnailTexture, measureBoardText, measureTextWidth, mediaPlayBadgeHit, mediaPlayBadgeVisible, mediaPlayHit, mediaPlayKeyCenter, onBoardTextFontsChange, parseBoardCssColor, parseBoardCssPaint, prepareBrowserBoardScripts, resolveBoardRenderStyle, roundRectPoints, syncCardTag, syncClipGroup, syncTextResolution, textZoomBucket, traceArrowhead, traceCardOutline, traceCube, traceFrameOutline, tracePixelRect, tracePolyline, trimPolyline, updateBoardBackground, videoTextureNaturalSize, videoThumbnailSize, zoomCardTag };
@@ -0,0 +1,15 @@
1
+ import { BoardArrowItem } from "../../protocol/dist/board-model.js";
2
+ import "../../protocol/dist/index.js";
3
+ import { WorldPoint } from "../model/geometry.js";
4
+ import { ResolvedArrow } from "../model/arrow-geometry.js";
5
+ //#region src/board/render/labels.d.ts
6
+ declare const FRAME_LABEL_WEIGHT = "600";
7
+ declare const ARROW_LABEL: {
8
+ readonly fontWeight: "500";
9
+ readonly lineHeight: 1.25;
10
+ readonly padX: 0.5;
11
+ readonly padY: 0.25;
12
+ };
13
+ declare function arrowLabelAnchor(arrow: ResolvedArrow, style: BoardArrowItem["style"]): WorldPoint;
14
+ //#endregion
15
+ export { ARROW_LABEL, FRAME_LABEL_WEIGHT, arrowLabelAnchor };
@@ -0,0 +1,14 @@
1
+ import { pathPointAt } from "../model/arrow-geometry.js";
2
+ //#region src/board/render/labels.ts
3
+ const FRAME_LABEL_WEIGHT = "600";
4
+ const ARROW_LABEL = {
5
+ fontWeight: "500",
6
+ lineHeight: 1.25,
7
+ padX: .5,
8
+ padY: .25
9
+ };
10
+ function arrowLabelAnchor(arrow, style) {
11
+ return style.trim === void 0 ? arrow.mid : pathPointAt(arrow.path, .5);
12
+ }
13
+ //#endregion
14
+ export { ARROW_LABEL, FRAME_LABEL_WEIGHT, arrowLabelAnchor };
@@ -0,0 +1,30 @@
1
+ import { BoardSceneItem } from "../model/scene.js";
2
+ //#region src/board/render/lod.d.ts
3
+ /** On-screen thresholds, in CSS pixels, below which a card draws on the far layer. */
4
+ type BoardLod = {
5
+ /** Long edge of images and video stills. */
6
+ media: number;
7
+ /** Font size of text. */
8
+ text: number;
9
+ /** Long edge of every other card. */
10
+ card: number;
11
+ /** Most live cards; beyond it the smallest draw on the far layer. */
12
+ live: number;
13
+ };
14
+ type BoardLodKind = Exclude<keyof BoardLod, "live">;
15
+ declare const DEFAULT_BOARD_LOD: BoardLod;
16
+ declare const COMPACT_BOARD_LOD: BoardLod;
17
+ declare const BOARD_LOD_HYSTERESIS = 0.8;
18
+ declare function boardCardDetailed(zoom: number): boolean;
19
+ declare function boardLongEdge(item: BoardSceneItem): number;
20
+ type BoardLodRenderer = {
21
+ lod?: {
22
+ kind: BoardLodKind;
23
+ size?: (item: BoardSceneItem) => number;
24
+ };
25
+ };
26
+ declare function boardLodSize(renderer: BoardLodRenderer, item: BoardSceneItem): number;
27
+ declare function boardLodRatio(renderer: BoardLodRenderer, size: number, zoom: number, lod: BoardLod): number;
28
+ declare function boardTextSize(item: BoardSceneItem): number;
29
+ //#endregion
30
+ export { BOARD_LOD_HYSTERESIS, BoardLod, BoardLodKind, COMPACT_BOARD_LOD, DEFAULT_BOARD_LOD, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardTextSize };
@@ -0,0 +1,33 @@
1
+ import { clampBoardFontSize, layoutBoardText } from "../../protocol/dist/board-layout.js";
2
+ //#region src/board/render/lod.ts
3
+ const DEFAULT_BOARD_LOD = {
4
+ media: 12,
5
+ text: 4,
6
+ card: 24,
7
+ live: 1200
8
+ };
9
+ const COMPACT_BOARD_LOD = {
10
+ ...DEFAULT_BOARD_LOD,
11
+ live: 400
12
+ };
13
+ const BOARD_LOD_HYSTERESIS = .8;
14
+ const CARD_TEXT_SIZE = 12;
15
+ function boardCardDetailed(zoom) {
16
+ return zoom * CARD_TEXT_SIZE >= DEFAULT_BOARD_LOD.text;
17
+ }
18
+ function boardLongEdge(item) {
19
+ return Math.max(item.frame.width, item.frame.height);
20
+ }
21
+ function boardLodSize(renderer, item) {
22
+ return renderer.lod?.size?.(item) ?? boardLongEdge(item);
23
+ }
24
+ function boardLodRatio(renderer, size, zoom, lod) {
25
+ return size * zoom / lod[renderer.lod?.kind ?? "card"];
26
+ }
27
+ function boardTextSize(item) {
28
+ if (item.type !== "text") return boardLongEdge(item);
29
+ const scale = item.frame.width / Math.max(1e-4, layoutBoardText(item.props).width);
30
+ return clampBoardFontSize(item.props.fontSize ?? 24) * scale;
31
+ }
32
+ //#endregion
33
+ export { BOARD_LOD_HYSTERESIS, COMPACT_BOARD_LOD, DEFAULT_BOARD_LOD, boardCardDetailed, boardLodRatio, boardLodSize, boardLongEdge, boardTextSize };