@cueframe/kernel 0.2.52 → 0.2.54

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 (71) hide show
  1. package/dist/_members/composition/fonts/bundledFaces.d.ts +9 -15
  2. package/dist/_members/composition/fonts/captionFaces.d.ts +2 -3
  3. package/dist/_members/composition/ops/captionOps.d.ts +11 -0
  4. package/dist/_members/composition/ops/compositionOps.d.ts +20 -19
  5. package/dist/_members/composition/ops/compositionOps.shared.d.ts +1 -0
  6. package/dist/_members/composition/validators/composition.d.ts +724 -0
  7. package/dist/_members/composition/validators/registry.d.ts +1 -1
  8. package/dist/_members/composition/validators/render.d.ts +332 -0
  9. package/dist/_members/composition-ops/index.d.ts +89 -0
  10. package/dist/_members/core/render/compositionAudioAndDepth.d.ts +3 -2
  11. package/dist/_members/core/render/index.d.ts +1 -1
  12. package/dist/_members/core/render/types.d.ts +3 -1
  13. package/dist/_members/plane/contract.d.ts +1 -1
  14. package/dist/_members/primitives/captions/Captions.d.ts +18 -1
  15. package/dist/_members/primitives/captions/index.d.ts +1 -1
  16. package/dist/_members/primitives/lib/text/spec.d.ts +1 -0
  17. package/dist/animate.js +2 -2
  18. package/dist/authoring/build-tools.js +6 -6
  19. package/dist/authoring/context.js +5 -5
  20. package/dist/authoring/tools.js +5 -5
  21. package/dist/authoring.js +9 -9
  22. package/dist/{chunk-MYBK6DKF.js → chunk-2BVKNYRB.js} +1 -1
  23. package/dist/{chunk-AVTEPAWI.js → chunk-7RGDRDAR.js} +17 -13
  24. package/dist/{chunk-7XZW26U2.js → chunk-AONWKKXK.js} +1 -1
  25. package/dist/{chunk-WZ22ZYXD.js → chunk-C3ARYFN6.js} +4 -4
  26. package/dist/{chunk-4B4V3HYW.js → chunk-C6ONUJIO.js} +1 -1
  27. package/dist/{chunk-CZOVEX2D.js → chunk-CR3G2JQP.js} +1 -1
  28. package/dist/{chunk-2PU2TSUG.js → chunk-D5E5XFHK.js} +1 -1
  29. package/dist/{chunk-D2EG7J7X.js → chunk-DFB7UFZD.js} +1 -1
  30. package/dist/{chunk-FSEB4LSU.js → chunk-FYMXVYWS.js} +1 -1
  31. package/dist/{chunk-6WQHVYJD.js → chunk-G7ZSFSQG.js} +1 -1
  32. package/dist/{chunk-5ZQLMPDY.js → chunk-GAACUQAB.js} +1 -1
  33. package/dist/{chunk-3I43W7DP.js → chunk-GZMKTLO3.js} +52 -21
  34. package/dist/{chunk-QVBUYWW6.js → chunk-Q2FWFTDZ.js} +1 -1
  35. package/dist/{chunk-MBSQKRDF.js → chunk-QCGT3M7M.js} +2 -2
  36. package/dist/{chunk-KMDZDH5E.js → chunk-QCJUGKRC.js} +4 -4
  37. package/dist/{chunk-Z6NY6MCL.js → chunk-RMLGMYEJ.js} +1 -1
  38. package/dist/{chunk-IHXMBXXL.js → chunk-SIGKJOSF.js} +30 -4
  39. package/dist/{chunk-5JCLZPMV.js → chunk-T7WKIMTB.js} +63 -44
  40. package/dist/{chunk-ACURZCPN.js → chunk-UKKY7HWN.js} +1 -1
  41. package/dist/{chunk-2M65KQNG.js → chunk-V6GL37RZ.js} +394 -54
  42. package/dist/{chunk-CV3QQUMK.js → chunk-VKZTGD5Z.js} +128 -5
  43. package/dist/{chunk-JWW54N24.js → chunk-VYSBZUXZ.js} +1 -1
  44. package/dist/{chunk-3OG2674K.js → chunk-ZDE5S3DE.js} +1 -1
  45. package/dist/component-runtime/render.js +2 -2
  46. package/dist/component-runtime.js +3 -3
  47. package/dist/compose.js +5 -5
  48. package/dist/composition/fonts.js +1 -1
  49. package/dist/composition/graphics-plan.js +3 -3
  50. package/dist/composition/ops.js +4 -4
  51. package/dist/composition/projection.js +3 -3
  52. package/dist/composition/validators.js +13 -3
  53. package/dist/composition-ops.js +8 -8
  54. package/dist/composition.js +15 -5
  55. package/dist/{context-2MBCDTCZ.js → context-I7SPXR2Z.js} +5 -5
  56. package/dist/core/render.js +4 -4
  57. package/dist/core.js +4 -4
  58. package/dist/mcp/adapter.js +2 -2
  59. package/dist/mcp/core.js +1 -1
  60. package/dist/mcp/scene-shot.js +2 -2
  61. package/dist/mcp/server.js +12 -12
  62. package/dist/mcp.js +12 -12
  63. package/dist/primitives/captions.js +276 -44
  64. package/dist/primitives/effects.js +3 -3
  65. package/dist/primitives/layouts.js +3 -3
  66. package/dist/primitives/lib/text/marker.js +1 -1
  67. package/dist/primitives/scenes.js +3 -3
  68. package/dist/primitives.js +5 -5
  69. package/dist/render-harness/cardFonts.js +2 -2
  70. package/dist/render-harness.js +7 -7
  71. package/package.json +10 -10
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  Composition
3
- } from "./chunk-CV3QQUMK.js";
3
+ } from "./chunk-VKZTGD5Z.js";
4
4
  import {
5
5
  expandToLinkGroup
6
6
  } from "./chunk-KYRDKK2D.js";
7
7
 
8
8
  // ../composition/src/ops/compositionOps.shared.ts
9
+ var TIMELINE_BOUNDARY_EPSILON_SECONDS = 1e-9;
9
10
  function findOrCreateTrackByKind(composition, kind) {
10
11
  const existing = composition.tracks.find((t) => t.kind === kind);
11
12
  if (existing) return existing;
@@ -67,8 +68,8 @@ function trimSourceFor(source, clipRelStart, clipRelEnd, clipDuration) {
67
68
  for (let i = 0; i < playable.length; i++) {
68
69
  const span = playable[i];
69
70
  const length = span.end - span.start;
70
- if (remaining < length - 1e-9) return span.start + remaining;
71
- if (Math.abs(remaining - length) <= 1e-9) {
71
+ if (remaining < length - TIMELINE_BOUNDARY_EPSILON_SECONDS) return span.start + remaining;
72
+ if (Math.abs(remaining - length) <= TIMELINE_BOUNDARY_EPSILON_SECONDS) {
72
73
  return edge === "start" && playable[i + 1] ? playable[i + 1].start : span.end;
73
74
  }
74
75
  remaining -= length;
@@ -132,6 +133,56 @@ function pruneSelectionInDraft(draft, removedClipIds) {
132
133
  draft.selectedOverlayId = patch.selectedOverlayId;
133
134
  }
134
135
 
136
+ // ../composition/src/ops/captionOps.ts
137
+ function createCaptionOps(set) {
138
+ return {
139
+ setCaptionStyle: (style) => {
140
+ set((draft) => {
141
+ const clean = Object.fromEntries(
142
+ Object.entries(style).filter(([, v]) => v !== void 0)
143
+ );
144
+ if (Object.keys(clean).length === 0) return;
145
+ const existing = draft.composition.captions;
146
+ if (existing) {
147
+ existing.style = { ...existing.style ?? {}, ...clean };
148
+ } else {
149
+ draft.composition.captions = { source: "authored", segments: [], style: clean };
150
+ }
151
+ });
152
+ },
153
+ setCaptionLayouts: (layouts) => {
154
+ set((draft) => {
155
+ if (!draft.composition.captions) throw new Error("setCaptionLayouts requires saved transcript captions");
156
+ if (layouts.length === 0) delete draft.composition.captions.layouts;
157
+ else draft.composition.captions.layouts = layouts;
158
+ });
159
+ },
160
+ setCaptionDepth: (zPlane) => {
161
+ set((draft) => {
162
+ const existing = draft.composition.captions;
163
+ if (!existing) return;
164
+ if (zPlane === "front") {
165
+ delete existing.zPlane;
166
+ } else {
167
+ existing.zPlane = zPlane;
168
+ }
169
+ });
170
+ },
171
+ setCaptions: (segments, style, derivedFrom) => {
172
+ set((draft) => {
173
+ const existing = draft.composition.captions;
174
+ const mergedStyle = style ? {
175
+ ...existing?.style ?? {},
176
+ ...Object.fromEntries(Object.entries(style).filter(([, v]) => v !== void 0))
177
+ } : existing?.style;
178
+ const styleField = mergedStyle && Object.keys(mergedStyle).length > 0 ? { style: mergedStyle } : {};
179
+ const depthField = existing?.zPlane ? { zPlane: existing.zPlane } : {};
180
+ draft.composition.captions = derivedFrom ? { source: "derived", from: derivedFrom, segments, ...styleField, ...depthField } : { source: "authored", segments, ...styleField, ...depthField };
181
+ });
182
+ }
183
+ };
184
+ }
185
+
135
186
  // ../composition/src/ops/compositionOps.ts
136
187
  function createCompositionOps(get, set) {
137
188
  return {
@@ -447,6 +498,7 @@ function createCompositionOps(get, set) {
447
498
  if (!Number.isFinite(start) || !Number.isFinite(end) || start >= end) return;
448
499
  const span = end - start;
449
500
  set((draft) => {
501
+ if (draft.composition.captions) delete draft.composition.captions.layouts;
450
502
  for (const track of draft.composition.tracks) {
451
503
  const next = [];
452
504
  for (const item of track.contents) {
@@ -457,20 +509,20 @@ function createCompositionOps(get, set) {
457
509
  const c = item;
458
510
  const cs = c.startTime;
459
511
  const ce = c.startTime + c.duration;
460
- if (ce <= start) {
512
+ if (ce <= start + TIMELINE_BOUNDARY_EPSILON_SECONDS) {
461
513
  next.push(c);
462
514
  continue;
463
515
  }
464
- if (cs >= end) {
516
+ if (cs >= end - TIMELINE_BOUNDARY_EPSILON_SECONDS) {
465
517
  next.push({ ...c, startTime: Math.max(0, cs - span) });
466
518
  continue;
467
519
  }
468
- if (cs < start) {
520
+ if (cs < start - TIMELINE_BOUNDARY_EPSILON_SECONDS) {
469
521
  const leftDuration = start - cs;
470
522
  const leftSource = trimSourceFor(c.source, 0, leftDuration, c.duration);
471
523
  next.push({ ...c, id: c.id, duration: leftDuration, source: leftSource });
472
524
  }
473
- if (ce > end) {
525
+ if (ce > end + TIMELINE_BOUNDARY_EPSILON_SECONDS) {
474
526
  const rightDuration = ce - end;
475
527
  const sourceOffsetIntoOriginal = end - cs;
476
528
  const rightSource = trimSourceFor(
@@ -581,6 +633,7 @@ function createCompositionOps(get, set) {
581
633
  });
582
634
  }
583
635
  if (draft.composition.captions) {
636
+ delete draft.composition.captions.layouts;
584
637
  for (const seg of draft.composition.captions.segments) {
585
638
  seg.words = seg.words.flatMap((w) => {
586
639
  const r = cutTimedRange(w.startMs, w.endMs, tStart * 1e3, tEnd * 1e3);
@@ -631,6 +684,7 @@ function createCompositionOps(get, set) {
631
684
  }
632
685
  }
633
686
  if (draft.composition.captions) {
687
+ delete draft.composition.captions.layouts;
634
688
  for (const segment of draft.composition.captions.segments) {
635
689
  for (const word of segment.words) {
636
690
  const shifted = shiftTimedRange(word.startMs, word.endMs, insertAt * 1e3, restored * 1e3);
@@ -667,45 +721,10 @@ function createCompositionOps(get, set) {
667
721
  }
668
722
  });
669
723
  },
670
- setCaptionStyle: (style) => {
671
- set((draft) => {
672
- const clean = Object.fromEntries(
673
- Object.entries(style).filter(([, v]) => v !== void 0)
674
- );
675
- if (Object.keys(clean).length === 0) return;
676
- const existing = draft.composition.captions;
677
- if (existing) {
678
- existing.style = { ...existing.style ?? {}, ...clean };
679
- } else {
680
- draft.composition.captions = { source: "authored", segments: [], style: clean };
681
- }
682
- });
683
- },
684
- setCaptionDepth: (zPlane) => {
685
- set((draft) => {
686
- const existing = draft.composition.captions;
687
- if (!existing) return;
688
- if (zPlane === "front") {
689
- delete existing.zPlane;
690
- } else {
691
- existing.zPlane = zPlane;
692
- }
693
- });
694
- },
695
- setCaptions: (segments, style, derivedFrom) => {
696
- set((draft) => {
697
- const existing = draft.composition.captions;
698
- const mergedStyle = style ? {
699
- ...existing?.style ?? {},
700
- ...Object.fromEntries(Object.entries(style).filter(([, v]) => v !== void 0))
701
- } : existing?.style;
702
- const styleField = mergedStyle && Object.keys(mergedStyle).length > 0 ? { style: mergedStyle } : {};
703
- const depthField = existing?.zPlane ? { zPlane: existing.zPlane } : {};
704
- draft.composition.captions = derivedFrom ? { source: "derived", from: derivedFrom, segments, ...styleField, ...depthField } : { source: "authored", segments, ...styleField, ...depthField };
705
- });
706
- },
724
+ ...createCaptionOps(set),
707
725
  ripple: (time, amount) => {
708
726
  set((draft) => {
727
+ if (draft.composition.captions) delete draft.composition.captions.layouts;
709
728
  for (const track of draft.composition.tracks) {
710
729
  for (const item of track.contents) {
711
730
  if (!("source" in item)) continue;
@@ -5,7 +5,7 @@ import {
5
5
  bundledFontFamilyFaces,
6
6
  isGenericOnlyStack,
7
7
  parseFontStack
8
- } from "./chunk-AVTEPAWI.js";
8
+ } from "./chunk-7RGDRDAR.js";
9
9
 
10
10
  // ../execution/render-harness/src/cardFonts.ts
11
11
  import parseCss from "css-tree/parser";