@cueframe/kernel 0.2.15 → 0.2.17

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 (68) hide show
  1. package/dist/_members/animate/index.d.ts +1 -1
  2. package/dist/_members/animate/three/FrameDepthOfField.d.ts +8 -0
  3. package/dist/_members/animate/three/depthOfFieldPipeline.d.ts +29 -0
  4. package/dist/_members/animate/three/index.d.ts +1 -0
  5. package/dist/_members/component-runtime/allowedImports.d.ts +1 -1
  6. package/dist/_members/component-runtime/allowedImports.d.ts.map +1 -1
  7. package/dist/_members/component-runtime/bake.d.ts.map +1 -1
  8. package/dist/_members/component-runtime/index.d.ts +1 -0
  9. package/dist/_members/component-runtime/index.d.ts.map +1 -1
  10. package/dist/_members/component-runtime/localRoot.d.ts +10 -0
  11. package/dist/_members/component-runtime/localRoot.d.ts.map +1 -1
  12. package/dist/_members/component-runtime/sourceAdmission.d.ts +12 -0
  13. package/dist/_members/component-runtime/sourceAdmission.d.ts.map +1 -0
  14. package/dist/_members/composition/fonts/bundledFaces.d.ts +15 -0
  15. package/dist/animate.js +4 -2
  16. package/dist/authoring/build-tools.js +6 -6
  17. package/dist/authoring/context.js +5 -5
  18. package/dist/authoring/tools.js +5 -5
  19. package/dist/authoring.js +9 -9
  20. package/dist/{chunk-RKDXNYLE.js → chunk-26MBA3WH.js} +1 -1
  21. package/dist/{chunk-IUIG5N6M.js → chunk-2R35PKNK.js} +5 -1
  22. package/dist/{chunk-MDFKDTPF.js → chunk-3BCGHUJS.js} +1 -1
  23. package/dist/{chunk-S3PZFAF5.js → chunk-3IUVVVFE.js} +1 -1
  24. package/dist/{chunk-X6U6XVU4.js → chunk-4GSIXJ3I.js} +4 -4
  25. package/dist/{chunk-A74FZCPY.js → chunk-5NGYBI5Z.js} +2 -1
  26. package/dist/{chunk-TARKDVP6.js → chunk-BAC7DKQZ.js} +5 -0
  27. package/dist/{chunk-QLHATEZI.js → chunk-CG2E43AN.js} +1 -1
  28. package/dist/{chunk-KBMKQGFR.js → chunk-D3GMN4WL.js} +35 -9
  29. package/dist/{chunk-5DSHDRPQ.js → chunk-DEOP3TWR.js} +9 -9
  30. package/dist/{chunk-C4P4NC66.js → chunk-ENMY25I3.js} +1 -1
  31. package/dist/{chunk-IGP2CA7C.js → chunk-KSGREMGC.js} +1 -1
  32. package/dist/{chunk-O7G2NXUJ.js → chunk-MAD6MSXA.js} +1 -1
  33. package/dist/{chunk-TAXZ4KBF.js → chunk-MQO5T32S.js} +2 -2
  34. package/dist/{chunk-5CNS7IXO.js → chunk-OXHF3O5T.js} +1 -1
  35. package/dist/{chunk-QZR4JCFY.js → chunk-URUOXC3Z.js} +1 -1
  36. package/dist/chunk-WXHD6OUT.js +82 -0
  37. package/dist/{chunk-6BZZWF5B.js → chunk-ZYGUHMX6.js} +213 -81
  38. package/dist/component-runtime/importPolicy.js +1 -1
  39. package/dist/component-runtime/render.js +3 -3
  40. package/dist/component-runtime/sourceAdmission.d.ts +1 -0
  41. package/dist/component-runtime/sourceAdmission.js +12 -0
  42. package/dist/component-runtime.js +12 -4
  43. package/dist/compose.js +12 -12
  44. package/dist/composition/fonts.js +3 -1
  45. package/dist/composition/graphics-plan.js +3 -3
  46. package/dist/composition/ops.js +4 -4
  47. package/dist/composition/projection.js +3 -3
  48. package/dist/composition/validators.js +3 -3
  49. package/dist/composition-ops.js +6 -6
  50. package/dist/composition.js +5 -5
  51. package/dist/{context-VHBMKP65.js → context-UE255PMJ.js} +5 -5
  52. package/dist/core/render.js +3 -3
  53. package/dist/core.js +3 -3
  54. package/dist/mcp/adapter.js +3 -3
  55. package/dist/mcp/server.js +2 -2
  56. package/dist/mcp.js +2 -2
  57. package/dist/primitives/captions.js +1 -1
  58. package/dist/primitives/effects.js +3 -3
  59. package/dist/primitives/layouts.js +3 -3
  60. package/dist/primitives/lib/index.js +11 -11
  61. package/dist/primitives/lib.js +11 -11
  62. package/dist/primitives/scenes.js +3 -3
  63. package/dist/primitives/ui-blocks.js +4 -4
  64. package/dist/primitives.js +10 -10
  65. package/dist/render-harness.js +10 -9
  66. package/package.json +25 -17
  67. package/dist/{chunk-XMAA2HYI.js → chunk-2P4NHHKR.js} +3 -3
  68. package/dist/{chunk-B3GSTQLR.js → chunk-A76GTLSA.js} +3 -3
@@ -17,7 +17,7 @@ export { Arrow, makeArrowPath } from './mobjects/Arrow.js';
17
17
  export { BrandBox } from './mobjects/BrandBox.js';
18
18
  export { Graph } from './mobjects/Graph.js';
19
19
  export { DiGraph } from './mobjects/DiGraph.js';
20
- export { ThreeCanvas, StageCameraRig, useImageTexture, StudioRig, DeviceMesh, deviceDimensions, laptopLayout, lidRotationX, DEVICE_GLASS_OPACITY_ENCODED, DEVICE_GLASS_OPACITY_LINEAR, DEVICE_LIT_MATERIALS, DEVICE_PLANE_OFFSETS, SELF_TONE_MAPPED, UNLIT_COLOUR_MANAGED, makeDefaultScreenTexture, defaultScreenLayout, STUDIO_EDGE_LIGHTS, STUDIO_EDGE_INTENSITY, studioEdgeLightCount, DEFAULT_LIGHTING_PROFILE, LIGHTING_PROFILES, studioShadowFrustum, type StudioRigProps, type DeviceKind, type DeviceMeshProps, type DeviceDimensions, type LaptopLayout, type ScreenLayout, type SceneLightingProfile, } from './three/index.js';
20
+ export { ThreeCanvas, FrameDepthOfField, type FrameDepthOfFieldProps, StageCameraRig, useImageTexture, StudioRig, DeviceMesh, deviceDimensions, laptopLayout, lidRotationX, DEVICE_GLASS_OPACITY_ENCODED, DEVICE_GLASS_OPACITY_LINEAR, DEVICE_LIT_MATERIALS, DEVICE_PLANE_OFFSETS, SELF_TONE_MAPPED, UNLIT_COLOUR_MANAGED, makeDefaultScreenTexture, defaultScreenLayout, STUDIO_EDGE_LIGHTS, STUDIO_EDGE_INTENSITY, studioEdgeLightCount, DEFAULT_LIGHTING_PROFILE, LIGHTING_PROFILES, studioShadowFrustum, type StudioRigProps, type DeviceKind, type DeviceMeshProps, type DeviceDimensions, type LaptopLayout, type ScreenLayout, type SceneLightingProfile, } from './three/index.js';
21
21
  export { solveFlex, flexReady, isFlexReady, leafIds, flexBoxToThree, fitBox, FlexLayout, useFlexReady, buildTree, unionTracks, weightsAt, type FlexCell, type FlexBox, type FlexSize, type FlexDir, type Fit, type FitMode, type FitResult, type FlexTrack, type FlexTrackSpec, type FlexLayoutProps, } from './layout/index.js';
22
22
  export * from './stage/index.js';
23
23
  export { MediaTileScene, mediaTileFramesReady, ImageTileScene, MEDIA_TILE_SCENE_LIMITS, assertMediaTileScene, mediaTileCropUvs, mediaTileFogDistances, type MediaTile, type MediaTileAsset, type MediaTileCamera, type MediaTileFog, type MediaTileSceneProps, type MediaTileStream, } from './media/MediaTileScene.js';
@@ -0,0 +1,8 @@
1
+ import { type FrameDepthOfFieldProps } from './depthOfFieldPipeline.js';
2
+ export type { FrameDepthOfFieldProps } from './depthOfFieldPipeline.js';
3
+ /**
4
+ * Mount once inside ThreeCanvas, not inside SceneShotV2 (which owns another output pass).
5
+ * Evaluate all props from useCurrentFrame in the parent. This trusted render bridge only
6
+ * replaces R3F's draw on a Remotion advance; it never uses the R3F clock to animate anything.
7
+ */
8
+ export declare function FrameDepthOfField(props: FrameDepthOfFieldProps): null;
@@ -0,0 +1,29 @@
1
+ import { DepthOfFieldEffect, EffectComposer } from 'postprocessing';
2
+ import { type PerspectiveCamera, type Scene, type WebGLRenderer } from 'three';
3
+ export interface FrameDepthOfFieldProps {
4
+ /** Radial distance from the camera in scene units (not normalized depth or axial Z). */
5
+ focusDistance: number;
6
+ /** Distance falloff from perfect focus to maximum blur, in scene units. */
7
+ focusRange: number;
8
+ /** Nonnegative blur strength. Zero keeps the same color pipeline with no blur. */
9
+ bokehScale?: number;
10
+ /** Resolution of internal blur buffers; (0, 1]. Default 0.5. */
11
+ resolutionScale?: number;
12
+ }
13
+ export declare function validateFrameFocus(props: FrameDepthOfFieldProps): void;
14
+ /** A single canvas-owned, non-temporal pipeline. Never shares GPU resources between roots. */
15
+ export declare class FrameFocusPipeline {
16
+ private readonly gl;
17
+ private readonly camera;
18
+ readonly composer: EffectComposer;
19
+ readonly focus: DepthOfFieldEffect;
20
+ private readonly effectPass;
21
+ private readonly viewport;
22
+ private readonly scissor;
23
+ private disposed;
24
+ private readonly toneMapping;
25
+ constructor(gl: WebGLRenderer, scene: Scene, camera: PerspectiveCamera, resolutionScale: number);
26
+ resize(width: number, height: number): void;
27
+ draw(props: FrameDepthOfFieldProps): void;
28
+ dispose(): void;
29
+ }
@@ -1,4 +1,5 @@
1
1
  export { ThreeCanvas } from './ThreeCanvas.js';
2
+ export { FrameDepthOfField, type FrameDepthOfFieldProps } from './FrameDepthOfField.js';
2
3
  export { StageCameraRig } from './StageCameraRig.js';
3
4
  export { SceneCameraRig } from './SceneCameraRig.js';
4
5
  export { useImageTexture } from './useImageTexture.js';
@@ -1,3 +1,3 @@
1
1
  /** Public component imports shared by admission and desktop dependency staging. */
2
- export declare const COMPONENT_IMPORT_ALLOWLIST: readonly ["react", "react/jsx-runtime", "remotion", "@remotion/media", "@remotion/layout-utils", "@remotion/transitions", "@remotion/motion-blur", "@remotion/noise", "@remotion/paths", "@remotion/shapes", "@remotion/three", "three", "three/webgpu", "three/tsl", "@react-three/fiber", "@cueframe/animate", "gsap"];
2
+ export declare const COMPONENT_IMPORT_ALLOWLIST: readonly ["react", "react/jsx-runtime", "remotion", "@remotion/media", "@remotion/layout-utils", "@remotion/transitions", "@remotion/motion-blur", "@remotion/noise", "@remotion/paths", "@remotion/shapes", "@remotion/three", "three", "three/webgpu", "three/tsl", "@react-three/fiber", "@cueframe/animate", "gsap", "postprocessing"];
3
3
  //# sourceMappingURL=allowedImports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowedImports.d.ts","sourceRoot":"","sources":["../src/allowedImports.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,0TAkB5B,CAAC"}
1
+ {"version":3,"file":"allowedImports.d.ts","sourceRoot":"","sources":["../src/allowedImports.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,4UAmB5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bake.d.ts","sourceRoot":"","sources":["../src/bake.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,sBAAsB,IAAI,WAAW,EAC1C,KAAK,kBAAkB,IAAI,OAAO,EAClC,KAAK,wBAAwB,IAAI,aAAa,EAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAS7D,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGlE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAC9C,IAAI,CAkCN;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QACrB,OAAO,EAAE,WAAW,CAAC;QACrB,YAAY,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAC5D,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACtF,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;KAClC,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACpD,GAAG,OAAO,CAAC,aAAa,CAAC,CAmHzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAElE"}
1
+ {"version":3,"file":"bake.d.ts","sourceRoot":"","sources":["../src/bake.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,sBAAsB,IAAI,WAAW,EAC1C,KAAK,kBAAkB,IAAI,OAAO,EAClC,KAAK,wBAAwB,IAAI,aAAa,EAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAS7D,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAIlE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAC9C,IAAI,CAkCN;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,OAAO,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QACrB,OAAO,EAAE,WAAW,CAAC;QACrB,YAAY,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;QAC5D,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACtF,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;KAClC,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACpD,GAAG,OAAO,CAAC,aAAa,CAAC,CAoHzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAElE"}
@@ -3,6 +3,7 @@ export * from './identity.js';
3
3
  export * from './importPolicy.js';
4
4
  export * from './sceneAdmission.js';
5
5
  export * from './sourceWorkspace.js';
6
+ export * from './sourceAdmission.js';
6
7
  export * from './render.js';
7
8
  export * from './browserOptions.js';
8
9
  export * from './webglProbe.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -2,6 +2,16 @@ import { type Workspace } from '../primitives/workspace.js';
2
2
  export declare const LOCAL_ROOT_FILENAME = "Root.local.tsx";
3
3
  export declare const LOCAL_ENTRY_FILENAME = "entry.local.tsx";
4
4
  export declare const LOCAL_COMPOSITION_ID = "CueFrameLocalStill";
5
+ /** Monitor the lifetime of each displayed GL surface, not the whole React root.
6
+ * R3F deliberately loses a removed canvas's context during delayed disposal. */
7
+ export declare function createWebGlSurfaceMonitor(onLost: () => void): {
8
+ watch(canvas: {
9
+ isConnected: boolean;
10
+ addEventListener(type: string, listener: () => void): void;
11
+ removeEventListener(type: string, listener: () => void): void;
12
+ }): void;
13
+ dispose(): void;
14
+ };
5
15
  type LiveTransport = {
6
16
  frame: number;
7
17
  playing: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"localRoot.d.ts","sourceRoot":"","sources":["../src/localRoot.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,gCAAgC,CAAC;AAOxC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnF;sFACsF;AACtF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE;IACtD,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;uBAiCsB,aAAa;qBACf,MAAM;yBACF,MAAM,SAAS,MAAM;;EAO7C;AAOD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,SAAS,EACb,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F,GACA,MAAM,CA8aR"}
1
+ {"version":3,"file":"localRoot.d.ts","sourceRoot":"","sources":["../src/localRoot.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,gCAAgC,CAAC;AAOxC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD;gFACgF;AAChF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,IAAI;;qBAE3C,OAAO;+BACG,MAAM,YAAY,MAAM,IAAI,GAAG,IAAI;kCAChC,MAAM,YAAY,MAAM,IAAI,GAAG,IAAI;;;EAiBhE;AAED,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnF;sFACsF;AACtF,wBAAgB,4BAA4B,CAAC,SAAS,EAAE;IACtD,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE;uBAsCsB,aAAa;qBACf,MAAM;yBACF,MAAM,SAAS,MAAM;;EAO7C;AAOD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,SAAS,EACb,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F,GACA,MAAM,CAkbR"}
@@ -0,0 +1,12 @@
1
+ import { type ComponentManifestV2, type ComponentSourceV2 } from './contracts.js';
2
+ /**
3
+ * Return literal slots read through `assets.<slot>.handle` (dot or bracket
4
+ * spelling). The AST is the contract boundary: comments, strings, regexes and
5
+ * type annotations are not runtime reads. Dynamic and aliased access is
6
+ * intentionally not proof that every declared slot is consumed.
7
+ */
8
+ export declare function sourceAssetHandleReads(tsxSource: string): ReadonlySet<string>;
9
+ export declare function missingDeclaredAssetHandleReads(tsxSource: string, manifest: Pick<ComponentManifestV2, 'assets'>): string[];
10
+ /** Refuse a component before bundling when its declared media cannot reach the mount. */
11
+ export declare function assertSourceReadsDeclaredAssets(source: Pick<ComponentSourceV2, 'componentId' | 'tsxSource' | 'manifest'>): void;
12
+ //# sourceMappingURL=sourceAdmission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceAdmission.d.ts","sourceRoot":"","sources":["../src/sourceAdmission.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAgBxB;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAuC7E;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAC5C,MAAM,EAAE,CAKV;AAED,yFAAyF;AACzF,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,GACxE,IAAI,CAoBN"}
@@ -148,3 +148,18 @@ export type StackFontFamily = {
148
148
  kind: "unknown";
149
149
  };
150
150
  export declare function bundledFamilyForStack(stack: string | undefined | null): StackFontFamily;
151
+ /**
152
+ * The family name a font admission should be decided against, for any value an author can put in
153
+ * a `fontFamily` field.
154
+ *
155
+ * A stack that names a bundled family collapses to THAT family, because it is the file the render
156
+ * will draw with. Anything else — an unknown family, a generic-only stack, a `$brand:` ref — stays
157
+ * exactly as authored, so the refusal names what the author wrote and the sealed brand font
158
+ * manifest still gets its chance to admit it.
159
+ *
160
+ * Both admission paths need this and they must not answer differently: `assertCaptionFontsAdmitted`
161
+ * resolves the caption stack, and `Root.tsx`'s sweep of every other `fontFamily` in the render
162
+ * input did not — so `{ fontFamily: "Inter, sans-serif" }` was drawn as a caption and refused as an
163
+ * overlay param, with a message calling the whole stack "not a bundled family".
164
+ */
165
+ export declare function admissibleFamilyForStack(stack: string): string;
package/dist/animate.js CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  DiGraph,
10
10
  FadeIn,
11
11
  FlexLayout,
12
+ FrameDepthOfField,
12
13
  Graph,
13
14
  GrowArrow,
14
15
  GrowFromCenter,
@@ -101,7 +102,7 @@ import {
101
102
  useStage,
102
103
  weightsAt,
103
104
  worldTransform
104
- } from "./chunk-6BZZWF5B.js";
105
+ } from "./chunk-ZYGUHMX6.js";
105
106
  import {
106
107
  DEFAULT_LIGHTING_PROFILE,
107
108
  DEVICE_GLASS_OPACITY_ENCODED,
@@ -184,7 +185,7 @@ import {
184
185
  selectSceneBakeScale
185
186
  } from "./chunk-KKV5U5EA.js";
186
187
  import "./chunk-2L7PYYJK.js";
187
- import "./chunk-TARKDVP6.js";
188
+ import "./chunk-BAC7DKQZ.js";
188
189
  import "./chunk-2ESYSVXG.js";
189
190
  export {
190
191
  ALLOWED_BAKE_SCALES,
@@ -205,6 +206,7 @@ export {
205
206
  DiGraph,
206
207
  FadeIn,
207
208
  FlexLayout,
209
+ FrameDepthOfField,
208
210
  Graph,
209
211
  GrowArrow,
210
212
  GrowFromCenter,
@@ -4,19 +4,19 @@ import {
4
4
  buildPlannerTools,
5
5
  buildToolsFromSchemas,
6
6
  extractProviderError
7
- } from "../chunk-5CNS7IXO.js";
8
- import "../chunk-X6U6XVU4.js";
7
+ } from "../chunk-OXHF3O5T.js";
8
+ import "../chunk-4GSIXJ3I.js";
9
9
  import "../chunk-JOURGVOR.js";
10
10
  import "../chunk-7AZLFN26.js";
11
- import "../chunk-IGP2CA7C.js";
12
- import "../chunk-TAXZ4KBF.js";
13
- import "../chunk-QZR4JCFY.js";
11
+ import "../chunk-KSGREMGC.js";
12
+ import "../chunk-MQO5T32S.js";
13
+ import "../chunk-URUOXC3Z.js";
14
14
  import "../chunk-WPZKOVYF.js";
15
15
  import "../chunk-B7J5UUUV.js";
16
16
  import "../chunk-KYRDKK2D.js";
17
17
  import "../chunk-WREYUH2E.js";
18
18
  import "../chunk-7PA7FGLD.js";
19
- import "../chunk-TARKDVP6.js";
19
+ import "../chunk-BAC7DKQZ.js";
20
20
  import "../chunk-2ESYSVXG.js";
21
21
  export {
22
22
  ZERO_USAGE,
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  buildDirectorContext
3
- } from "../chunk-S3PZFAF5.js";
4
- import "../chunk-IGP2CA7C.js";
5
- import "../chunk-TAXZ4KBF.js";
6
- import "../chunk-QZR4JCFY.js";
3
+ } from "../chunk-3IUVVVFE.js";
4
+ import "../chunk-KSGREMGC.js";
5
+ import "../chunk-MQO5T32S.js";
6
+ import "../chunk-URUOXC3Z.js";
7
7
  import "../chunk-WPZKOVYF.js";
8
8
  import "../chunk-B7J5UUUV.js";
9
9
  import "../chunk-KYRDKK2D.js";
10
10
  import "../chunk-WREYUH2E.js";
11
- import "../chunk-TARKDVP6.js";
11
+ import "../chunk-BAC7DKQZ.js";
12
12
  import "../chunk-2ESYSVXG.js";
13
13
  export {
14
14
  buildDirectorContext
@@ -6,18 +6,18 @@ import {
6
6
  COMPOSE_ROLE_TOOLS,
7
7
  COMPOSE_ROLE_TOOL_NAMES,
8
8
  dispatchComposeRoleTool
9
- } from "../chunk-X6U6XVU4.js";
9
+ } from "../chunk-4GSIXJ3I.js";
10
10
  import "../chunk-JOURGVOR.js";
11
11
  import "../chunk-7AZLFN26.js";
12
- import "../chunk-IGP2CA7C.js";
13
- import "../chunk-TAXZ4KBF.js";
14
- import "../chunk-QZR4JCFY.js";
12
+ import "../chunk-KSGREMGC.js";
13
+ import "../chunk-MQO5T32S.js";
14
+ import "../chunk-URUOXC3Z.js";
15
15
  import "../chunk-WPZKOVYF.js";
16
16
  import "../chunk-B7J5UUUV.js";
17
17
  import "../chunk-KYRDKK2D.js";
18
18
  import "../chunk-WREYUH2E.js";
19
19
  import "../chunk-7PA7FGLD.js";
20
- import "../chunk-TARKDVP6.js";
20
+ import "../chunk-BAC7DKQZ.js";
21
21
  import "../chunk-2ESYSVXG.js";
22
22
  export {
23
23
  COMPOSE_MOTION_TOOLS,
package/dist/authoring.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  buildPlannerTools,
12
12
  buildToolsFromSchemas,
13
13
  extractProviderError
14
- } from "./chunk-5CNS7IXO.js";
14
+ } from "./chunk-OXHF3O5T.js";
15
15
  import {
16
16
  COMPOSE_MOTION_TOOLS,
17
17
  COMPOSE_MOTION_VERIFY_TOOLS,
@@ -20,14 +20,14 @@ import {
20
20
  COMPOSE_ROLE_TOOLS,
21
21
  COMPOSE_ROLE_TOOL_NAMES,
22
22
  dispatchComposeRoleTool
23
- } from "./chunk-X6U6XVU4.js";
23
+ } from "./chunk-4GSIXJ3I.js";
24
24
  import {
25
25
  AgentFixableCaptureError,
26
26
  getExcludedTools
27
27
  } from "./chunk-JOURGVOR.js";
28
28
  import {
29
29
  buildDirectorContext
30
- } from "./chunk-S3PZFAF5.js";
30
+ } from "./chunk-3IUVVVFE.js";
31
31
  import {
32
32
  buildFastModel,
33
33
  buildModel,
@@ -48,16 +48,16 @@ import {
48
48
  formatPlanSteps,
49
49
  initCodeGenPrompts
50
50
  } from "./chunk-Y4HPN4BC.js";
51
- import "./chunk-C4P4NC66.js";
51
+ import "./chunk-ENMY25I3.js";
52
52
  import {
53
53
  cssLayoutVars
54
- } from "./chunk-O7G2NXUJ.js";
54
+ } from "./chunk-MAD6MSXA.js";
55
55
  import "./chunk-ILO4NEZ3.js";
56
56
  import "./chunk-7AZLFN26.js";
57
57
  import "./chunk-VG2ND6PX.js";
58
- import "./chunk-IGP2CA7C.js";
59
- import "./chunk-TAXZ4KBF.js";
60
- import "./chunk-QZR4JCFY.js";
58
+ import "./chunk-KSGREMGC.js";
59
+ import "./chunk-MQO5T32S.js";
60
+ import "./chunk-URUOXC3Z.js";
61
61
  import "./chunk-WPZKOVYF.js";
62
62
  import "./chunk-B7J5UUUV.js";
63
63
  import "./chunk-KYRDKK2D.js";
@@ -69,7 +69,7 @@ import {
69
69
  isSceneShotClip
70
70
  } from "./chunk-KKV5U5EA.js";
71
71
  import "./chunk-2L7PYYJK.js";
72
- import "./chunk-TARKDVP6.js";
72
+ import "./chunk-BAC7DKQZ.js";
73
73
  import "./chunk-2ESYSVXG.js";
74
74
 
75
75
  // ../authoring/src/agent.ts
@@ -43,7 +43,7 @@ import {
43
43
  makeDefaultScreenTexture,
44
44
  resolveCamera,
45
45
  useImageTexture
46
- } from "./chunk-6BZZWF5B.js";
46
+ } from "./chunk-ZYGUHMX6.js";
47
47
  import {
48
48
  DEVICE_GLASS_OPACITY_ENCODED,
49
49
  DeviceMesh,
@@ -3,7 +3,7 @@ import {
3
3
  assertSceneShotParamsAdmitted,
4
4
  materializeComponentSource,
5
5
  renderComponentAlpha
6
- } from "./chunk-KBMKQGFR.js";
6
+ } from "./chunk-D3GMN4WL.js";
7
7
  import {
8
8
  componentArtifactId,
9
9
  componentBundleId,
@@ -11,6 +11,9 @@ import {
11
11
  sha256Hex,
12
12
  sourceVersionId
13
13
  } from "./chunk-EXY4JJPH.js";
14
+ import {
15
+ assertSourceReadsDeclaredAssets
16
+ } from "./chunk-WXHD6OUT.js";
14
17
  import {
15
18
  resolvedComponentRenderer
16
19
  } from "./chunk-C5MPFJCD.js";
@@ -285,6 +288,7 @@ async function bakeComponentAlphaV2(options) {
285
288
  assets: assetServer.bindings
286
289
  });
287
290
  assertAssetBindingsMatch(request);
291
+ assertSourceReadsDeclaredAssets(request.source);
288
292
  const materialized = materializeComponentSource(options.workspaceRoot, request.source);
289
293
  const allowedAssetOrigins = /* @__PURE__ */ new Set([assetServer.origin]);
290
294
  if (scene) {
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-W2245F6G.js";
25
25
  import {
26
26
  FlexLayout
27
- } from "./chunk-6BZZWF5B.js";
27
+ } from "./chunk-ZYGUHMX6.js";
28
28
 
29
29
  // ../execution/primitives/src/layouts/chat-to-preview-layout/index.tsx
30
30
  import { Easing, interpolate, useCurrentFrame, useVideoConfig } from "remotion";
@@ -2,7 +2,7 @@ import {
2
2
  selectAllClips,
3
3
  selectAllOverlays,
4
4
  selectSceneMarkers
5
- } from "./chunk-IGP2CA7C.js";
5
+ } from "./chunk-KSGREMGC.js";
6
6
 
7
7
  // ../authoring/src/context/transcript.ts
8
8
  var MAX_TRANSCRIPT_CHARS = 6e4;
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-7AZLFN26.js";
8
8
  import {
9
9
  selectAllOverlays
10
- } from "./chunk-IGP2CA7C.js";
10
+ } from "./chunk-KSGREMGC.js";
11
11
  import {
12
12
  ComposePlan
13
- } from "./chunk-TAXZ4KBF.js";
13
+ } from "./chunk-MQO5T32S.js";
14
14
  import {
15
15
  OverlayClipSource
16
- } from "./chunk-QZR4JCFY.js";
16
+ } from "./chunk-URUOXC3Z.js";
17
17
 
18
18
  // ../authoring/src/tools/toolSets.ts
19
19
  var COMPOSE_PLANNER_TOOLS = [
@@ -63,7 +63,7 @@ var COMPOSE_ROLE_TOOLS = Object.freeze({
63
63
  schema: z.object({}),
64
64
  metadata: { label: "Get Context" },
65
65
  handler: async (_args, capabilities) => {
66
- const { buildDirectorContext } = await import("./context-VHBMKP65.js");
66
+ const { buildDirectorContext } = await import("./context-UE255PMJ.js");
67
67
  return buildDirectorContext(capabilities);
68
68
  }
69
69
  },
@@ -20,7 +20,8 @@ var COMPONENT_IMPORT_ALLOWLIST = Object.freeze([
20
20
  "three/tsl",
21
21
  "@react-three/fiber",
22
22
  "@cueframe/animate",
23
- "gsap"
23
+ "gsap",
24
+ "postprocessing"
24
25
  ]);
25
26
 
26
27
  // ../execution/component-runtime/src/importPolicy.ts
@@ -160,6 +160,10 @@ function bundledFamilyForStack(stack) {
160
160
  }
161
161
  return bundled ? { kind: "bundled", family: bundled } : { kind: "default" };
162
162
  }
163
+ function admissibleFamilyForStack(stack) {
164
+ const resolved = bundledFamilyForStack(stack);
165
+ return resolved.kind === "bundled" ? resolved.family : stack;
166
+ }
163
167
 
164
168
  // ../composition/src/fonts/captionFaces.ts
165
169
  var CAPTION_FACE_DEFAULTS = Object.freeze({
@@ -406,6 +410,7 @@ export {
406
410
  parseFontStack,
407
411
  isGenericOnlyStack,
408
412
  bundledFamilyForStack,
413
+ admissibleFamilyForStack,
409
414
  CAPTION_FACE_DEFAULTS,
410
415
  CAPTION_DEFAULT_FAMILY,
411
416
  captionStackFamily,
@@ -26,7 +26,7 @@ import {
26
26
  perspectiveFor,
27
27
  resolveCamera,
28
28
  useStage
29
- } from "./chunk-6BZZWF5B.js";
29
+ } from "./chunk-ZYGUHMX6.js";
30
30
 
31
31
  // ../execution/primitives/src/effects/blur/index.tsx
32
32
  import React2 from "react";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-EXY4JJPH.js";
10
10
  import {
11
11
  assertComponentImportsAllowed
12
- } from "./chunk-A74FZCPY.js";
12
+ } from "./chunk-5NGYBI5Z.js";
13
13
  import {
14
14
  assertComponentBrowserHardware,
15
15
  componentBrowserBackend,
@@ -31,7 +31,7 @@ import {
31
31
  } from "./chunk-KKV5U5EA.js";
32
32
  import {
33
33
  BUNDLED_FONT_FACES
34
- } from "./chunk-TARKDVP6.js";
34
+ } from "./chunk-BAC7DKQZ.js";
35
35
 
36
36
  // ../execution/component-runtime/src/sceneAdmission.ts
37
37
  import { ZodError } from "zod";
@@ -335,13 +335,35 @@ import { join as join2, relative } from "path";
335
335
  var LOCAL_ROOT_FILENAME = "Root.local.tsx";
336
336
  var LOCAL_ENTRY_FILENAME = "entry.local.tsx";
337
337
  var LOCAL_COMPOSITION_ID = "CueFrameLocalStill";
338
+ function createWebGlSurfaceMonitor(onLost) {
339
+ const listeners = /* @__PURE__ */ new Map();
340
+ return {
341
+ watch(canvas) {
342
+ if (listeners.has(canvas)) return;
343
+ const lost = () => {
344
+ if (canvas.isConnected) onLost();
345
+ };
346
+ listeners.set(canvas, lost);
347
+ canvas.addEventListener("webglcontextlost", lost);
348
+ },
349
+ dispose() {
350
+ for (const [canvas, lost] of listeners) canvas.removeEventListener("webglcontextlost", lost);
351
+ listeners.clear();
352
+ }
353
+ };
354
+ }
338
355
  function createLivePresentationRouter(callbacks) {
339
356
  let pending = null;
340
357
  let committedFrame = null;
341
358
  let presentedFrame = null;
342
359
  let presentedScene = null;
343
- const matches = (transport, actual) => transport.playing ? actual >= transport.frame : actual === transport.frame;
360
+ let acknowledgedFrame = null;
361
+ const matches = (transport, actual) => transport.playing ? actual !== acknowledgedFrame : actual === transport.frame;
344
362
  const sameRequest = (left, right) => left.sequence === right.sequence && left.frame === right.frame && left.playing === right.playing;
363
+ const acknowledge = (transport, actual) => {
364
+ acknowledgedFrame = actual;
365
+ callbacks.acknowledge(transport, actual);
366
+ };
345
367
  const route = () => {
346
368
  const transport = pending;
347
369
  if (transport === null || committedFrame === null || !matches(transport, committedFrame)) return;
@@ -350,7 +372,7 @@ function createLivePresentationRouter(callbacks) {
350
372
  if (scene !== null) {
351
373
  if (presentedScene === scene && presentedFrame !== null && matches(transport, presentedFrame)) {
352
374
  pending = null;
353
- callbacks.acknowledge(transport, presentedFrame);
375
+ acknowledge(transport, presentedFrame);
354
376
  }
355
377
  return;
356
378
  }
@@ -358,7 +380,7 @@ function createLivePresentationRouter(callbacks) {
358
380
  if (pending === null || !sameRequest(pending, transport) || callbacks.mediaTileScene() !== null || committedFrame === null || !matches(transport, committedFrame)) return;
359
381
  const acknowledged = pending;
360
382
  pending = null;
361
- callbacks.acknowledge(acknowledged, committed);
383
+ acknowledge(acknowledged, committed);
362
384
  });
363
385
  };
364
386
  return {
@@ -408,6 +430,7 @@ const importAuthoredComponent = async () => {
408
430
  };
409
431
 
410
432
  const hostFontFaces = ${JSON.stringify(fontFaces)};
433
+ const createWebGlSurfaceMonitor = ${createWebGlSurfaceMonitor.toString()};
411
434
  const hostFontCss = hostFontFaces.map((face) => {
412
435
  const url = face.url.startsWith('/') ? staticFile(face.url) : face.url;
413
436
  return '@font-face{font-family:' + JSON.stringify(face.family) + ';font-weight:' + face.weight +
@@ -475,6 +498,9 @@ export const CueFrameLocalComponent: React.FC<CueFrameComponentInput> = (input)
475
498
  getContext: (kind: string, ...args: unknown[]) => unknown;
476
499
  };
477
500
  const originalGetContext = canvasPrototype.getContext;
501
+ const glSurfaces = createWebGlSurfaceMonitor(() => {
502
+ if (!disposed) cancelRender(new Error(${JSON.stringify(BROWSER_RUNTIME_ERROR_PREFIX)} + 'component_device_lost:' + input.graphics.api + ' context was lost during component rendering.'));
503
+ });
478
504
 
479
505
  void (async () => {
480
506
  try {
@@ -500,7 +526,9 @@ export const CueFrameLocalComponent: React.FC<CueFrameComponentInput> = (input)
500
526
  throw new Error('A ' + requiredApi + '-required component may only create a ' + acceptedKinds.join('/') + ' canvas context.');
501
527
  }
502
528
  const context = originalGetContext.call(this, kind, ...args) as WebGLRenderingContext | WebGL2RenderingContext | null;
503
- if (!context || admitted) return context;
529
+ if (!context) return context;
530
+ glSurfaces.watch(this as HTMLCanvasElement);
531
+ if (admitted) return context;
504
532
  admitted = true;
505
533
  const rendererInfo = context.getExtension('WEBGL_debug_renderer_info');
506
534
  const adapterName = rendererInfo
@@ -512,9 +540,6 @@ export const CueFrameLocalComponent: React.FC<CueFrameComponentInput> = (input)
512
540
  console.info(${JSON.stringify(GRAPHICS_ATTESTATION_PREFIX)} + JSON.stringify({
513
541
  api: requiredApi, acceleration, adapterName: adapterName || undefined, deviceLost: false,
514
542
  }));
515
- this.addEventListener('webglcontextlost', () => {
516
- if (!disposed) cancelRender(new Error(${JSON.stringify(BROWSER_RUNTIME_ERROR_PREFIX)} + 'component_device_lost:' + requiredApi + ' context was lost during component rendering.'));
517
- }, {once: true});
518
543
  if (admissionTimer) clearTimeout(admissionTimer);
519
544
  continueRender(waitHandle as number);
520
545
  return context;
@@ -590,6 +615,7 @@ export const CueFrameLocalComponent: React.FC<CueFrameComponentInput> = (input)
590
615
  })();
591
616
  return () => {
592
617
  disposed = true;
618
+ glSurfaces.dispose();
593
619
  if (admissionTimer) clearTimeout(admissionTimer);
594
620
  canvasPrototype.getContext = originalGetContext;
595
621
  if (gpuPrototype && originalRequestAdapter) gpuPrototype.requestAdapter = originalRequestAdapter;
@@ -3,6 +3,14 @@ import {
3
3
  buildEasedZooms,
4
4
  buildPannedCenters
5
5
  } from "./chunk-QH3YI3ND.js";
6
+ import {
7
+ flattenCompoundClips,
8
+ hasCompoundClips
9
+ } from "./chunk-QISFYLBB.js";
10
+ import {
11
+ compositionHasVo,
12
+ roleDefaultGainDb
13
+ } from "./chunk-VZ7TYX6Z.js";
6
14
  import {
7
15
  DOMINANCE_WEIGHTS,
8
16
  ENTER_SEC,
@@ -21,14 +29,6 @@ import {
21
29
  segmentShots,
22
30
  stabilizeSelectionHysteresis
23
31
  } from "./chunk-L2AHS3AW.js";
24
- import {
25
- flattenCompoundClips,
26
- hasCompoundClips
27
- } from "./chunk-QISFYLBB.js";
28
- import {
29
- compositionHasVo,
30
- roleDefaultGainDb
31
- } from "./chunk-VZ7TYX6Z.js";
32
32
  import {
33
33
  SHOT_SCALE_TARGET,
34
34
  shotScaleZoom
@@ -61,7 +61,7 @@ import {
61
61
  bundledFontFaceExists,
62
62
  mergedCaptionFaceIssues,
63
63
  unrenderableFaceField
64
- } from "./chunk-TARKDVP6.js";
64
+ } from "./chunk-BAC7DKQZ.js";
65
65
 
66
66
  // ../execution/core/src/render/sceneCaptureIdentity.ts
67
67
  var INTENT_FIELDS = [
@@ -2,7 +2,7 @@ import {
2
2
  activeFaceKeepOutSeries,
3
3
  boundingBox,
4
4
  resolveBrandRefsDeep
5
- } from "./chunk-O7G2NXUJ.js";
5
+ } from "./chunk-MAD6MSXA.js";
6
6
  import {
7
7
  CueframeError,
8
8
  encodeError
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Composition
3
- } from "./chunk-QZR4JCFY.js";
3
+ } from "./chunk-URUOXC3Z.js";
4
4
  import {
5
5
  expandToLinkGroup
6
6
  } from "./chunk-KYRDKK2D.js";
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  captionFontSource,
12
12
  effectiveCaptionFamily
13
- } from "./chunk-TARKDVP6.js";
13
+ } from "./chunk-BAC7DKQZ.js";
14
14
 
15
15
  // ../composition/src/projection/brandKit.ts
16
16
  var LOGO_DEFAULT_PLACEMENT = "br";