@cueframe/kernel 0.2.1 → 0.2.3

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 (332) hide show
  1. package/dist/_members/animate/index.d.ts +8 -2
  2. package/dist/_members/animate/layout/FlexLayout.d.ts +69 -0
  3. package/dist/_members/animate/layout/fit.d.ts +44 -0
  4. package/dist/_members/animate/layout/index.d.ts +3 -0
  5. package/dist/_members/animate/layout/solveFlex.d.ts +70 -0
  6. package/dist/_members/animate/media/MediaTileScene.d.ts +65 -0
  7. package/dist/_members/animate/media/recipes.d.ts +61 -0
  8. package/dist/_members/animate/scene/FocusPass.d.ts +76 -0
  9. package/dist/_members/animate/scene/UnlitPlane.d.ts +45 -0
  10. package/dist/_members/animate/scene/__oracle__/cssProjection.d.ts +24 -0
  11. package/dist/_members/animate/scene/assets.d.ts +21 -0
  12. package/dist/_members/animate/scene/backdrop.d.ts +7 -0
  13. package/dist/_members/animate/scene/coordinates.d.ts +58 -0
  14. package/dist/_members/animate/scene/deviceOpacity.d.ts +18 -0
  15. package/dist/_members/animate/scene/errors.d.ts +14 -0
  16. package/dist/_members/animate/scene/finishing.d.ts +69 -0
  17. package/dist/_members/animate/scene/finishingMath.d.ts +60 -0
  18. package/dist/_members/animate/scene/finishingPass.d.ts +35 -0
  19. package/dist/_members/animate/scene/focusBlur.d.ts +56 -0
  20. package/dist/_members/animate/scene/focusResources.d.ts +190 -0
  21. package/dist/_members/animate/scene/focusShaders.d.ts +68 -0
  22. package/dist/_members/animate/scene/fontReadiness.d.ts +27 -0
  23. package/dist/_members/animate/scene/grainNoise.d.ts +118 -0
  24. package/dist/_members/animate/scene/index.d.ts +19 -0
  25. package/dist/_members/animate/scene/internal.d.ts +29 -0
  26. package/dist/_members/animate/scene/planeFit.d.ts +46 -0
  27. package/dist/_members/animate/scene/preparedWorldText.d.ts +25 -0
  28. package/dist/_members/animate/scene/rasterCache.d.ts +30 -0
  29. package/dist/_members/animate/scene/rasterReadiness.d.ts +33 -0
  30. package/dist/_members/animate/scene/readiness.d.ts +69 -0
  31. package/dist/_members/animate/scene/redraw.d.ts +10 -0
  32. package/dist/_members/animate/scene/render.d.ts +9 -0
  33. package/dist/_members/animate/scene/scaling.d.ts +13 -0
  34. package/dist/_members/animate/scene/text.d.ts +40 -0
  35. package/dist/_members/animate/scene/textLayout.d.ts +78 -0
  36. package/dist/_members/animate/scene/textureImageSize.d.ts +4 -0
  37. package/dist/_members/animate/scene/useSceneImageTexture.d.ts +21 -0
  38. package/dist/_members/animate/scene/useWorldTextTexture.d.ts +21 -0
  39. package/dist/_members/animate/scene/v2/MeasuredPlaneGeometry.d.ts +7 -0
  40. package/dist/_members/animate/scene/v2/PhotographicStudioRig.d.ts +11 -0
  41. package/dist/_members/animate/scene/v2/PreparedSceneShotV1.d.ts +12 -0
  42. package/dist/_members/animate/scene/v2/SceneShotV2.d.ts +59 -0
  43. package/dist/_members/animate/scene/v2/builders.d.ts +170 -0
  44. package/dist/_members/animate/scene/v2/finishes.d.ts +152 -0
  45. package/dist/_members/animate/scene/v2/lighting.d.ts +119 -0
  46. package/dist/_members/animate/scene/v2/observePmremTargets.d.ts +4 -0
  47. package/dist/_members/animate/scene/v2/preparationFacts.d.ts +32 -0
  48. package/dist/_members/animate/scene/v2/preparedSurface.d.ts +17 -0
  49. package/dist/_members/animate/scene/v2/projectedResolution.d.ts +2 -0
  50. package/dist/_members/animate/scene/v2/renderTargetObserver.d.ts +5 -0
  51. package/dist/_members/animate/scene/v2/runtimeAllocations.d.ts +55 -0
  52. package/dist/_members/animate/scene/v2/shadow.d.ts +23 -0
  53. package/dist/_members/animate/scene/v2/slabGeometry.d.ts +134 -0
  54. package/dist/_members/animate/scene/v2/slots.d.ts +73 -0
  55. package/dist/_members/animate/scene/v2/videoBinding.d.ts +39 -0
  56. package/dist/_members/animate/scene/worldBounds.d.ts +19 -0
  57. package/dist/_members/animate/scene/worldTextRaster.d.ts +87 -0
  58. package/dist/_members/animate/scene/worldTextTexture.d.ts +32 -0
  59. package/dist/_members/animate/stage/PerspectiveStage.d.ts +73 -0
  60. package/dist/_members/animate/stage/camera.d.ts +143 -0
  61. package/dist/_members/animate/stage/dof.d.ts +9 -0
  62. package/dist/_members/animate/stage/index.d.ts +6 -0
  63. package/dist/_members/animate/stage/presets.d.ts +17 -0
  64. package/dist/_members/animate/three/DeviceMesh.d.ts +256 -0
  65. package/dist/_members/animate/three/SceneCameraRig.d.ts +12 -0
  66. package/dist/_members/animate/three/StageCameraRig.d.ts +7 -0
  67. package/dist/_members/animate/three/StudioRig.d.ts +228 -0
  68. package/dist/_members/animate/three/ThreeCanvas.d.ts +22 -0
  69. package/dist/_members/animate/three/defaultScreen.d.ts +23 -0
  70. package/dist/_members/animate/three/index.d.ts +7 -1
  71. package/dist/_members/animate/three/textureLifecycle.d.ts +29 -0
  72. package/dist/_members/animate/three/toneMapping.d.ts +113 -0
  73. package/dist/_members/animate/three/useImageTexture.d.ts +17 -0
  74. package/dist/_members/authoring/index.d.ts +2 -0
  75. package/dist/_members/authoring/scene/index.d.ts +6 -0
  76. package/dist/_members/authoring/scene/materialize.d.ts +47 -0
  77. package/dist/_members/authoring/scene/validate.d.ts +80 -0
  78. package/dist/_members/authoring/scene/wrapper.d.ts +41 -0
  79. package/dist/_members/component-runtime/allowedImports.d.ts +3 -0
  80. package/dist/_members/component-runtime/allowedImports.d.ts.map +1 -0
  81. package/dist/_members/component-runtime/bake.d.ts +8 -0
  82. package/dist/_members/component-runtime/bake.d.ts.map +1 -1
  83. package/dist/_members/component-runtime/browserFirewall.d.ts +7 -1
  84. package/dist/_members/component-runtime/browserFirewall.d.ts.map +1 -1
  85. package/dist/_members/component-runtime/browserOptions.d.ts +59 -3
  86. package/dist/_members/component-runtime/browserOptions.d.ts.map +1 -1
  87. package/dist/_members/component-runtime/canonicalIdentity.d.ts +14 -0
  88. package/dist/_members/component-runtime/canonicalIdentity.d.ts.map +1 -1
  89. package/dist/_members/component-runtime/contracts.d.ts +341 -1
  90. package/dist/_members/component-runtime/contracts.d.ts.map +1 -1
  91. package/dist/_members/component-runtime/fixtures/imageTileDriftWall.d.ts +5 -0
  92. package/dist/_members/component-runtime/fixtures/imageTileDriftWall.d.ts.map +1 -0
  93. package/dist/_members/component-runtime/fixtures/mediaTileMixed.d.ts +5 -0
  94. package/dist/_members/component-runtime/fixtures/mediaTileMixed.d.ts.map +1 -0
  95. package/dist/_members/component-runtime/fixtures/mediaTileVideo.d.ts +8 -0
  96. package/dist/_members/component-runtime/fixtures/mediaTileVideo.d.ts.map +1 -0
  97. package/dist/_members/component-runtime/importPolicy.d.ts +3 -2
  98. package/dist/_members/component-runtime/importPolicy.d.ts.map +1 -1
  99. package/dist/_members/component-runtime/index.d.ts +3 -0
  100. package/dist/_members/component-runtime/index.d.ts.map +1 -1
  101. package/dist/_members/component-runtime/livePreviewProxy.d.ts +7 -0
  102. package/dist/_members/component-runtime/livePreviewProxy.d.ts.map +1 -0
  103. package/dist/_members/component-runtime/localRoot.d.ts +37 -0
  104. package/dist/_members/component-runtime/localRoot.d.ts.map +1 -0
  105. package/dist/_members/component-runtime/mediaResolution.d.ts +25 -0
  106. package/dist/_members/component-runtime/mediaResolution.d.ts.map +1 -0
  107. package/dist/_members/component-runtime/render.d.ts +151 -13
  108. package/dist/_members/component-runtime/render.d.ts.map +1 -1
  109. package/dist/_members/component-runtime/renderDiagnostics.d.ts +14 -0
  110. package/dist/_members/component-runtime/renderDiagnostics.d.ts.map +1 -0
  111. package/dist/_members/component-runtime/sceneAdmission.d.ts +47 -0
  112. package/dist/_members/component-runtime/sceneAdmission.d.ts.map +1 -0
  113. package/dist/_members/component-runtime/sourceWorkspace.d.ts +8 -0
  114. package/dist/_members/component-runtime/sourceWorkspace.d.ts.map +1 -1
  115. package/dist/_members/component-runtime/webglProbe.d.ts +191 -0
  116. package/dist/_members/component-runtime/webglProbe.d.ts.map +1 -0
  117. package/dist/_members/composition/fonts/bundledFaces.d.ts +150 -0
  118. package/dist/_members/composition/fonts/captionFaces.d.ts +268 -0
  119. package/dist/_members/composition/fonts.d.ts +11 -4
  120. package/dist/_members/composition/graphics-plan/schemas.d.ts +4 -4
  121. package/dist/_members/composition/ops/types.d.ts +1 -1
  122. package/dist/_members/composition/primitive-catalog/types.d.ts +1 -0
  123. package/dist/_members/composition/projection/behind-readiness.d.ts +3 -0
  124. package/dist/_members/composition/projection/brandKit.d.ts +6 -0
  125. package/dist/_members/composition/projection/composition-floor.d.ts +2 -1
  126. package/dist/_members/composition/scene/animation.d.ts +25 -0
  127. package/dist/_members/composition/scene/budget.d.ts +29 -0
  128. package/dist/_members/composition/scene/budgetPolicy.d.mts +13 -0
  129. package/dist/_members/composition/scene/clipRules.d.ts +119 -0
  130. package/dist/_members/composition/scene/constraints.d.ts +61 -0
  131. package/dist/_members/composition/scene/device.d.ts +21 -0
  132. package/dist/_members/composition/scene/examples.d.ts +11 -0
  133. package/dist/_members/composition/scene/index.d.ts +11 -0
  134. package/dist/_members/composition/scene/photographicRig.d.ts +242 -0
  135. package/dist/_members/composition/scene/preparedRender.d.ts +239 -0
  136. package/dist/_members/composition/scene/resolution.d.ts +178 -0
  137. package/dist/_members/composition/scene/schema.d.ts +351 -0
  138. package/dist/_members/composition/scene/videoSchedule.d.ts +43 -0
  139. package/dist/_members/composition/validators/brandKit.d.ts +1 -0
  140. package/dist/_members/composition/validators/render.d.ts +2 -0
  141. package/dist/_members/composition-ops/index.d.ts +45 -0
  142. package/dist/_members/composition-ops/opRecorder.d.ts +1 -1
  143. package/dist/_members/core/render/compositionRender.d.ts +41 -9
  144. package/dist/_members/core/render/index.d.ts +9 -2
  145. package/dist/_members/core/render/sceneCaptureIdentity.d.ts +14 -0
  146. package/dist/_members/core/render/sceneShotPlan.d.ts +142 -0
  147. package/dist/_members/core/render/sceneShotPreparation.d.ts +57 -0
  148. package/dist/_members/core/render/slabDescriptor.d.ts +21 -0
  149. package/dist/_members/core/render/trackProjection.d.ts +33 -0
  150. package/dist/_members/core/render/types.d.ts +142 -0
  151. package/dist/_members/errors/registry.d.ts +6 -0
  152. package/dist/_members/mcp/adapter.d.ts +5 -0
  153. package/dist/_members/mcp/generated/sceneContract.d.ts +155 -0
  154. package/dist/_members/mcp/sceneShot.d.ts +38 -0
  155. package/dist/_members/mcp/sceneShotExample.d.ts +22 -0
  156. package/dist/_members/media-model/api.d.ts +1 -0
  157. package/dist/_members/media-model/media-kind.d.ts +1 -1
  158. package/dist/_members/media-model/testing/mediaStoreContract.d.ts +1 -1
  159. package/dist/_members/primitives/effects/index.d.ts +1 -0
  160. package/dist/_members/primitives/effects/stage-camera/config.d.ts +50 -0
  161. package/dist/_members/primitives/effects/stage-camera/index.d.ts +31 -0
  162. package/dist/_members/primitives/layouts/flex-layout/config.d.ts +73 -0
  163. package/dist/_members/primitives/layouts/flex-layout/index.d.ts +4 -0
  164. package/dist/_members/primitives/layouts/index.d.ts +1 -0
  165. package/dist/_members/primitives/layouts/picture-in-picture/config.d.ts +1 -1
  166. package/dist/_members/primitives/lib/frameScale.d.ts +4 -0
  167. package/dist/_members/primitives/lib/index.d.ts +1 -0
  168. package/dist/_members/primitives/lib/palette.d.ts +30 -30
  169. package/dist/_members/primitives/lib/text/contrast.d.ts +2 -1
  170. package/dist/_members/primitives/lib/text/spec.d.ts +0 -8
  171. package/dist/_members/primitives/lib/types.d.ts +2 -0
  172. package/dist/_members/primitives/scenes/device-showcase/config.d.ts +41 -0
  173. package/dist/_members/primitives/scenes/device-showcase/index.d.ts +36 -0
  174. package/dist/_members/primitives/scenes/hero-device-assemble/config.d.ts +1 -0
  175. package/dist/_members/primitives/scenes/hero-device-assemble/index.d.ts +2 -1
  176. package/dist/_members/primitives/scenes/index.d.ts +1 -0
  177. package/dist/_members/primitives/ui-blocks/badge-pop/config.d.ts +1 -1
  178. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/config.d.ts +1 -0
  179. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/index.d.ts +2 -1
  180. package/dist/_members/primitives/ui-blocks/terminal-simulator/config.d.ts +1 -1
  181. package/dist/_members/primitives/ui-blocks/toast-notification/config.d.ts +1 -1
  182. package/dist/_members/render-harness/cardAssetAdmission.d.ts.map +1 -1
  183. package/dist/_members/render-harness/cardRender.d.ts.map +1 -1
  184. package/dist/_members/render-harness/css-tree-subpaths.d.ts +11 -0
  185. package/dist/_members/render-harness/extractSegments.d.ts +1 -0
  186. package/dist/_members/render-harness/extractSegments.d.ts.map +1 -1
  187. package/dist/_members/render-harness/imageHeader.d.ts +14 -0
  188. package/dist/_members/render-harness/imageHeader.d.ts.map +1 -0
  189. package/dist/_members/render-harness/index.d.ts +6 -0
  190. package/dist/_members/render-harness/index.d.ts.map +1 -1
  191. package/dist/_members/render-harness/materializeSources.d.ts +46 -2
  192. package/dist/_members/render-harness/materializeSources.d.ts.map +1 -1
  193. package/dist/_members/render-harness/nodeScenePreparation.d.ts +97 -0
  194. package/dist/_members/render-harness/nodeScenePreparation.d.ts.map +1 -0
  195. package/dist/_members/render-harness/remotion-runtime.d.ts +16 -2
  196. package/dist/_members/render-harness/renderInputAssets.d.ts +1 -1
  197. package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -1
  198. package/dist/_members/render-harness/resolveAssets.d.ts +2 -2
  199. package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -1
  200. package/dist/_members/render-harness/sceneShotAssets.d.ts +17 -0
  201. package/dist/_members/render-harness/sceneShotAssets.d.ts.map +1 -0
  202. package/dist/animate/preparation-facts.d.ts +1 -0
  203. package/dist/animate/preparation-facts.js +22 -0
  204. package/dist/animate.js +336 -1005
  205. package/dist/authoring/build-tools.js +7 -6
  206. package/dist/authoring/context.js +5 -4
  207. package/dist/authoring/prompts.js +1 -1
  208. package/dist/authoring/scene.d.ts +1 -0
  209. package/dist/authoring/scene.js +50 -0
  210. package/dist/authoring/tools.js +6 -5
  211. package/dist/authoring.js +49 -29
  212. package/dist/chunk-2L7PYYJK.js +23 -0
  213. package/dist/{chunk-ZN6P3KOJ.js → chunk-32TH76H3.js} +2 -2
  214. package/dist/chunk-5DJ3IEJR.js +4424 -0
  215. package/dist/chunk-6BVVCRRD.js +26488 -0
  216. package/dist/{chunk-DQKSCHFC.js → chunk-6EWRIAZA.js} +187 -66
  217. package/dist/{chunk-YQ7FFW3G.js → chunk-6VWICHOZ.js} +26 -5
  218. package/dist/{chunk-2PGLNTB7.js → chunk-A74FZCPY.js} +45 -5
  219. package/dist/{chunk-C5SEPOWD.js → chunk-AS5EXBNS.js} +1792 -707
  220. package/dist/{chunk-BKHGL4MB.js → chunk-B3GSTQLR.js} +341 -274
  221. package/dist/chunk-BVA3537Z.js +63 -0
  222. package/dist/{chunk-DHKQ47Q6.js → chunk-DAARYRNT.js} +6 -1
  223. package/dist/chunk-DQLYWNLC.js +2063 -0
  224. package/dist/chunk-E6WHXIDF.js +3619 -0
  225. package/dist/{chunk-NOEBAV2G.js → chunk-E7GIZEPS.js} +1 -1
  226. package/dist/{chunk-M2TLRXEO.js → chunk-EXY4JJPH.js} +1 -1
  227. package/dist/{chunk-GEGRJKKO.js → chunk-F2DJL7P7.js} +1 -1
  228. package/dist/{chunk-AWT3P5ZN.js → chunk-FVDFPJHT.js} +1 -1
  229. package/dist/{chunk-EMGFZ3PR.js → chunk-FWSJLHSV.js} +5 -1
  230. package/dist/{chunk-TMIBBD5E.js → chunk-I5QWBM3M.js} +280 -113
  231. package/dist/{chunk-IBMJ33EL.js → chunk-I5RX2QZT.js} +1 -1
  232. package/dist/{chunk-4FOOBSEE.js → chunk-J3DIUG24.js} +1 -0
  233. package/dist/{chunk-AD5HWBCE.js → chunk-JX53CVJV.js} +14 -5
  234. package/dist/{chunk-LNBVTDFR.js → chunk-L2AHS3AW.js} +1 -1
  235. package/dist/{chunk-BDMTUEEZ.js → chunk-LT4PWSR2.js} +2 -2
  236. package/dist/chunk-MH3UPKWR.js +3415 -0
  237. package/dist/{chunk-RFXR7ATW.js → chunk-NUKDEOK6.js} +13 -1
  238. package/dist/{chunk-IJ7PVJTK.js → chunk-ODUWCQI3.js} +3 -2
  239. package/dist/chunk-QAGGJHAF.js +16 -0
  240. package/dist/chunk-QS36DMFG.js +332 -0
  241. package/dist/{chunk-G5BFI32U.js → chunk-RAXHCRVV.js} +1 -1
  242. package/dist/{chunk-BIBYZJL3.js → chunk-RL5SO653.js} +3 -3
  243. package/dist/{chunk-ZSZABOE5.js → chunk-S5H6GH6M.js} +1 -1
  244. package/dist/{chunk-EEXCDFY5.js → chunk-SD25VQDE.js} +1 -1
  245. package/dist/{chunk-Y3QGYASW.js → chunk-SX523NDS.js} +14 -14
  246. package/dist/chunk-TARKDVP6.js +430 -0
  247. package/dist/{chunk-IHFREGFA.js → chunk-TCHPRGC5.js} +18 -2
  248. package/dist/{chunk-ZCAQHNPI.js → chunk-UKGNHZS4.js} +1 -1
  249. package/dist/{chunk-KU376ELE.js → chunk-UY77TMKD.js} +31 -44
  250. package/dist/chunk-VKATKWWR.js +1462 -0
  251. package/dist/{chunk-CX2IIQ4R.js → chunk-W2245F6G.js} +29 -29
  252. package/dist/{chunk-XHUYWVYK.js → chunk-WBNFSG6T.js} +1 -1
  253. package/dist/chunk-WIHXXF3X.js +221 -0
  254. package/dist/{chunk-XVBOSPZI.js → chunk-X74EEFXV.js} +6 -6
  255. package/dist/{chunk-7KEUL3FI.js → chunk-XF2QMKRG.js} +9 -1
  256. package/dist/{chunk-HFC3MKXA.js → chunk-Y4HPN4BC.js} +1 -0
  257. package/dist/{chunk-6XI57FZZ.js → chunk-YFSBFCXO.js} +1022 -46
  258. package/dist/{chunk-6ID2J64H.js → chunk-YHC3RXS7.js} +162 -25
  259. package/dist/{chunk-KKEY5MIW.js → chunk-ZS3A3QUM.js} +16 -16
  260. package/dist/{chunk-LQUWKBST.js → chunk-ZVG446DJ.js} +139 -10
  261. package/dist/component-runtime/browserOptions.js +14 -3
  262. package/dist/component-runtime/contracts.js +35 -3
  263. package/dist/component-runtime/identity/browser.js +1 -1
  264. package/dist/component-runtime/identity.js +2 -2
  265. package/dist/component-runtime/importPolicy.js +2 -2
  266. package/dist/component-runtime/mediaResolution.d.ts +1 -0
  267. package/dist/component-runtime/mediaResolution.js +11 -0
  268. package/dist/component-runtime/render.js +38 -5
  269. package/dist/component-runtime.js +118 -14
  270. package/dist/compose.js +27 -21
  271. package/dist/composition/fonts.js +64 -67
  272. package/dist/composition/graphics-plan.js +3 -2
  273. package/dist/composition/ops.js +4 -3
  274. package/dist/composition/primitive-catalog.js +1 -1
  275. package/dist/composition/projection.js +10 -3
  276. package/dist/composition/scene/budget-policy.d.ts +1 -0
  277. package/dist/composition/scene/budget-policy.js +17 -0
  278. package/dist/composition/scene/schema.json +2757 -0
  279. package/dist/composition/scene.d.ts +1 -0
  280. package/dist/composition/scene.js +275 -0
  281. package/dist/composition/validators.js +3 -2
  282. package/dist/composition-ops.js +103 -13
  283. package/dist/composition.js +12 -5
  284. package/dist/{context-4GSDBFT3.js → context-IUPQ54V4.js} +5 -4
  285. package/dist/core/render.js +54 -3
  286. package/dist/core/select.js +2 -2
  287. package/dist/core.js +6 -3
  288. package/dist/director/ai-sdk.js +3 -3
  289. package/dist/director/domain.js +2 -2
  290. package/dist/director.js +3 -3
  291. package/dist/errors.js +1 -1
  292. package/dist/mcp/adapter.js +4 -4
  293. package/dist/mcp/core.js +1 -1
  294. package/dist/mcp/curation.js +1 -1
  295. package/dist/mcp/server.js +4 -4
  296. package/dist/mcp.js +4 -4
  297. package/dist/media-model/media-kind.js +2 -0
  298. package/dist/media-model/testing.js +16 -11
  299. package/dist/media-model.js +1 -1
  300. package/dist/nle-export.js +27 -21
  301. package/dist/primitives/backgrounds.js +2 -2
  302. package/dist/primitives/captions.js +21 -11
  303. package/dist/primitives/effects.js +14 -4
  304. package/dist/primitives/graphics.json +3 -0
  305. package/dist/primitives/hero-text.js +4 -3
  306. package/dist/primitives/layouts.js +9 -2
  307. package/dist/primitives/lib/frameScale.d.ts +1 -0
  308. package/dist/primitives/lib/frameScale.js +11 -0
  309. package/dist/primitives/lib/index.js +18 -10
  310. package/dist/primitives/lib/palette.js +1 -1
  311. package/dist/primitives/lib/text/contrast.js +2 -1
  312. package/dist/primitives/lib/text/typeface.js +1 -1
  313. package/dist/primitives/lib.js +18 -10
  314. package/dist/primitives/params-required.json +3 -0
  315. package/dist/primitives/scenes.js +12 -3
  316. package/dist/primitives/text.js +5 -5
  317. package/dist/primitives/transitions.js +2 -2
  318. package/dist/primitives/ui-blocks.js +7 -6
  319. package/dist/primitives/version-map.json +5 -2
  320. package/dist/primitives.js +27 -20
  321. package/dist/render-harness/cardAssetAdmission.js +2 -2
  322. package/dist/render-harness/renderInputAssets.js +2 -2
  323. package/dist/render-harness.js +876 -126
  324. package/package.json +51 -17
  325. package/dist/_members/animate/three/drei.d.ts +0 -6
  326. package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts +0 -9
  327. package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts.map +0 -1
  328. package/dist/chunk-4JRUGT2Y.js +0 -544
  329. package/dist/chunk-5OTQ7M43.js +0 -718
  330. package/dist/chunk-CGHTMZNC.js +0 -6
  331. package/dist/chunk-QBKDEO7J.js +0 -9521
  332. /package/dist/{chunk-H5LMJKZU.js → chunk-JVDUSOYG.js} +0 -0
@@ -0,0 +1,430 @@
1
+ // ../composition/src/fonts/bundledFaces.ts
2
+ var VENDORED_FONT_FAMILIES = [
3
+ "Inter",
4
+ "Space Mono",
5
+ "Montserrat",
6
+ "Roboto",
7
+ "Poppins",
8
+ "Oswald",
9
+ "Playfair Display",
10
+ "Bebas Neue",
11
+ "Instrument Serif",
12
+ "National Park",
13
+ "Bricolage Grotesque",
14
+ "Schibsted Grotesk"
15
+ ];
16
+ var ALIASED_FONT_FAMILIES = ["Georgia"];
17
+ var BUNDLED_FONT_FACES = Object.freeze({
18
+ // Variable files: one upright binary whose `wght` axis covers the declared range. Each carries
19
+ // the house 600/800 pair outright, so its caption defaults are that pair.
20
+ "Inter": {
21
+ slug: "inter",
22
+ faces: [{ weight: "100 900", file: "400" }],
23
+ captionDefaults: { base: 600, emphasis: 800 }
24
+ },
25
+ "Montserrat": {
26
+ slug: "montserrat",
27
+ faces: [{ weight: "100 900", file: "400" }],
28
+ captionDefaults: { base: 600, emphasis: 800 }
29
+ },
30
+ "Roboto": {
31
+ slug: "roboto",
32
+ faces: [{ weight: "100 900", file: "400" }],
33
+ captionDefaults: { base: 600, emphasis: 800 }
34
+ },
35
+ // Oswald's axis stops at 700, so it declares 700 for the emphasis run rather than an 800 it
36
+ // has no bytes for.
37
+ "Oswald": {
38
+ slug: "oswald",
39
+ faces: [{ weight: "400 700", file: "400" }],
40
+ captionDefaults: { base: 600, emphasis: 700 }
41
+ },
42
+ "Playfair Display": {
43
+ slug: "playfair-display",
44
+ faces: [{ weight: "400 900", file: "400" }],
45
+ captionDefaults: { base: 600, emphasis: 800 }
46
+ },
47
+ "Bricolage Grotesque": {
48
+ slug: "bricolage-grotesque",
49
+ faces: [{ weight: "200 800", file: "400" }],
50
+ captionDefaults: { base: 600, emphasis: 800 }
51
+ },
52
+ "Schibsted Grotesk": {
53
+ slug: "schibsted-grotesk",
54
+ faces: [{ weight: "400 900", file: "400" }],
55
+ captionDefaults: { base: 600, emphasis: 800 }
56
+ },
57
+ // Static files: exactly the weights listed, nothing between them, so the declared defaults are
58
+ // drawn from those weights — the regular for the base run and the bold for the emphasis run.
59
+ "Space Mono": {
60
+ slug: "space-mono",
61
+ faces: [{ weight: "400", file: "400" }, { weight: "700", file: "700" }],
62
+ captionDefaults: { base: 400, emphasis: 700 }
63
+ },
64
+ "Poppins": {
65
+ slug: "poppins",
66
+ faces: [{ weight: "400", file: "400" }, { weight: "700", file: "700" }],
67
+ captionDefaults: { base: 400, emphasis: 700 }
68
+ },
69
+ // One file, one weight: the emphasis run separates itself by scale, colour and letter spacing
70
+ // rather than by a weight these families do not ship.
71
+ "Bebas Neue": {
72
+ slug: "bebas-neue",
73
+ faces: [{ weight: "400", file: "400" }],
74
+ captionDefaults: { base: 400, emphasis: 400 }
75
+ },
76
+ "Instrument Serif": {
77
+ slug: "instrument-serif",
78
+ faces: [{ weight: "400", file: "400" }],
79
+ captionDefaults: { base: 400, emphasis: 400 }
80
+ },
81
+ "National Park": {
82
+ slug: "national-park",
83
+ faces: [{ weight: "400", file: "400" }],
84
+ captionDefaults: { base: 400, emphasis: 400 }
85
+ },
86
+ // The one alias: `@font-face { font-family: 'Georgia' }` served from the Gelasio binary.
87
+ "Georgia": {
88
+ slug: "gelasio",
89
+ faces: [{ weight: "400", file: "400" }, { weight: "700", file: "700" }],
90
+ captionDefaults: { base: 400, emphasis: 700 }
91
+ }
92
+ });
93
+ var BUNDLED_FONT_STYLE = "normal";
94
+ function bundledFontFamilyFaces(family) {
95
+ return BUNDLED_FONT_FACES[family];
96
+ }
97
+ function bundledFaceCoversWeight(face, weight) {
98
+ const parts = face.weight.split(/\s+/).map(Number);
99
+ if (parts.some((n) => !Number.isFinite(n))) return false;
100
+ if (parts.length === 1) return parts[0] === weight;
101
+ const [lo, hi] = parts;
102
+ return weight >= lo && weight <= hi;
103
+ }
104
+ function bundledFontFaceExists(family, weight, style) {
105
+ if (style !== BUNDLED_FONT_STYLE) return false;
106
+ const bundled = bundledFontFamilyFaces(family);
107
+ if (!bundled) return false;
108
+ return bundled.faces.some((face) => bundledFaceCoversWeight(face, weight));
109
+ }
110
+ function describeBundledFontWeights(family) {
111
+ const bundled = bundledFontFamilyFaces(family);
112
+ if (!bundled) return "";
113
+ return bundled.faces.map((face) => face.weight.split(/\s+/).join("-")).join(", ");
114
+ }
115
+ function unrenderableFaceField(family, weight, style, sealed) {
116
+ if (bundledFontFamilyFaces(family)) {
117
+ return style === BUNDLED_FONT_STYLE ? "fontWeight" : "fontStyle";
118
+ }
119
+ if (sealed.hasFamily(family)) {
120
+ return sealed.hasWeight(family, weight) ? "fontStyle" : "fontWeight";
121
+ }
122
+ return "fontFamily";
123
+ }
124
+ function parseFontStack(value) {
125
+ return value.split(",").map((f) => f.trim().replace(/^['"]|['"]$/g, "").trim()).filter(Boolean);
126
+ }
127
+ var CSS_GENERIC_FAMILIES = /* @__PURE__ */ new Set([
128
+ "serif",
129
+ "sans-serif",
130
+ "monospace",
131
+ "cursive",
132
+ "fantasy",
133
+ "system-ui",
134
+ "ui-serif",
135
+ "ui-sans-serif",
136
+ "ui-monospace",
137
+ "ui-rounded",
138
+ "emoji",
139
+ "math",
140
+ "fangsong"
141
+ ]);
142
+ function isGenericOnlyStack(stack) {
143
+ if (typeof stack !== "string" || stack.trim().length === 0) return false;
144
+ const families = parseFontStack(stack);
145
+ return families.length > 0 && families.every((entry) => CSS_GENERIC_FAMILIES.has(entry.toLowerCase()));
146
+ }
147
+ var BUNDLED_BY_LOWER = new Map(
148
+ Object.keys(BUNDLED_FONT_FACES).map((family) => [family.toLowerCase(), family])
149
+ );
150
+ function bundledFamilyForStack(stack) {
151
+ if (typeof stack !== "string" || stack.trim().length === 0) return { kind: "default" };
152
+ if (stack.includes("$brand:") || stack.includes("${")) return { kind: "unknown" };
153
+ let bundled;
154
+ for (const entry of parseFontStack(stack)) {
155
+ const lower = entry.toLowerCase();
156
+ if (CSS_GENERIC_FAMILIES.has(lower)) continue;
157
+ const known = BUNDLED_BY_LOWER.get(lower);
158
+ if (!known) return { kind: "unknown" };
159
+ bundled ??= known;
160
+ }
161
+ return bundled ? { kind: "bundled", family: bundled } : { kind: "default" };
162
+ }
163
+
164
+ // ../composition/src/fonts/captionFaces.ts
165
+ var CAPTION_FACE_DEFAULTS = Object.freeze({
166
+ fontFamily: "Inter, 'Helvetica Neue', Helvetica, Arial, sans-serif",
167
+ fontWeight: 600,
168
+ emphasisFontWeight: 800,
169
+ emphasisFontStyle: "normal"
170
+ });
171
+ var CAPTION_DEFAULT_FAMILY = "Inter";
172
+ function captionStackFamily(stack) {
173
+ if (typeof stack !== "string" || stack.trim().length === 0) {
174
+ return { kind: "bundled", family: CAPTION_DEFAULT_FAMILY };
175
+ }
176
+ return bundledFamilyForStack(stack);
177
+ }
178
+ function captionDefaultWeights(resolved) {
179
+ const bundled = resolved.kind === "bundled" ? bundledFontFamilyFaces(resolved.family) : void 0;
180
+ return bundled?.captionDefaults ?? {
181
+ base: CAPTION_FACE_DEFAULTS.fontWeight,
182
+ emphasis: CAPTION_FACE_DEFAULTS.emphasisFontWeight
183
+ };
184
+ }
185
+ function resolveCaptionFaces(style) {
186
+ const baseStack = style.fontFamily ?? CAPTION_FACE_DEFAULTS.fontFamily;
187
+ const baseResolved = captionStackFamily(style.fontFamily);
188
+ const baseWeight = style.fontWeight ?? captionDefaultWeights(baseResolved).base;
189
+ const emphasisAuthoredStack = style.emphasisFontFamily;
190
+ const emphasisStack = emphasisAuthoredStack ?? baseStack;
191
+ const emphasisResolved = emphasisAuthoredStack === void 0 ? baseResolved : captionStackFamily(emphasisAuthoredStack);
192
+ const emphasisWeight = style.emphasisFontWeight ?? captionDefaultWeights(emphasisResolved).emphasis;
193
+ const emphasisStyle = style.emphasisFontStyle ?? CAPTION_FACE_DEFAULTS.emphasisFontStyle;
194
+ return {
195
+ base: {
196
+ role: "base",
197
+ field: "fontWeight",
198
+ stack: baseStack,
199
+ resolved: baseResolved,
200
+ weight: baseWeight,
201
+ style: BUNDLED_FONT_STYLE,
202
+ fromDefault: style.fontWeight === void 0
203
+ },
204
+ emphasis: {
205
+ role: "emphasis",
206
+ field: emphasisStyle === "italic" ? "emphasisFontStyle" : "emphasisFontWeight",
207
+ stack: emphasisStack,
208
+ resolved: emphasisResolved,
209
+ weight: emphasisWeight,
210
+ style: emphasisStyle,
211
+ fromDefault: emphasisStyle === "italic" ? style.emphasisFontStyle === void 0 : style.emphasisFontWeight === void 0
212
+ }
213
+ };
214
+ }
215
+ function captionFaceUses(style) {
216
+ const { base, emphasis } = resolveCaptionFaces(style);
217
+ const sameFace = emphasis.stack === base.stack && emphasis.weight === base.weight && emphasis.style === base.style;
218
+ return sameFace ? [base] : [base, emphasis];
219
+ }
220
+ var CAPTION_FACE_ISSUE_FIELDS = Object.freeze(["fontWeight", "emphasisFontWeight", "emphasisFontStyle"]);
221
+ function because(use) {
222
+ return use.fromDefault ? `no ${use.field} is authored, so the ${use.role} run is drawn at the default ${use.style === "italic" ? `${use.field} "italic"` : use.weight}` : `${use.field} ${use.style === "italic" ? '"italic"' : use.weight} has no file behind it`;
223
+ }
224
+ function faceIssue(use) {
225
+ if (use.resolved.kind === "default" && use.style === "italic") {
226
+ return {
227
+ field: use.field,
228
+ face: { family: use.stack, weight: use.weight, style: use.style },
229
+ message: `font_not_reproducible \u2014 ${because(use)}: "${use.stack}" names no font file the render bundle carries, and it ships no italic binary at all, so the browser would slant whatever upright face it matched and the render refuses it before capture. Emphasise with emphasisFontWeight, emphasisColor or emphasisScale, or name an uploaded brand font that is sealed in italic.`
230
+ };
231
+ }
232
+ if (use.resolved.kind !== "bundled") return null;
233
+ const face = { family: use.resolved.family, weight: use.weight, style: use.style };
234
+ if (use.style === "italic") {
235
+ return {
236
+ field: use.field,
237
+ face,
238
+ message: `font_not_reproducible \u2014 ${because(use)}: ${use.resolved.family} ships no italic binary, so the browser would slant the upright face and the render refuses it before capture. Emphasise with emphasisFontWeight, emphasisColor or emphasisScale, or name an uploaded brand font that is sealed in italic.`
239
+ };
240
+ }
241
+ if (bundledFontFaceExists(use.resolved.family, use.weight, use.style)) return null;
242
+ return {
243
+ field: use.field,
244
+ face,
245
+ message: `font_not_reproducible \u2014 ${because(use)}: ${use.resolved.family} ships ${describeBundledFontWeights(use.resolved.family)}. The render refuses a weight outside that range before capture rather than let the browser substitute a nearby file, so set ${use.field} to a weight the family covers, or pick a family whose files do.`
246
+ };
247
+ }
248
+ function captionFaceIssues(style) {
249
+ const issues = [];
250
+ for (const use of captionFaceUses(style)) {
251
+ const issue = faceIssue(use);
252
+ if (issue) issues.push(issue);
253
+ }
254
+ return issues;
255
+ }
256
+ function faceKey(issue) {
257
+ return `${issue.face.family}\0${issue.face.weight}\0${issue.face.style}`;
258
+ }
259
+ function introducedCaptionFaceIssues(base, next) {
260
+ const before = new Set(captionFaceIssues(base).map(faceKey));
261
+ return captionFaceIssues(next).filter((issue) => !before.has(faceKey(issue)));
262
+ }
263
+ var CAPTION_FACE_MERGE_FIELDS = Object.freeze([
264
+ "fontFamily",
265
+ "fontWeight",
266
+ "emphasisFontFamily",
267
+ "emphasisFontWeight",
268
+ "emphasisFontStyle"
269
+ ]);
270
+ function captionFontSource(fonts) {
271
+ if (fonts.caption) return { ref: fonts.caption, slot: "caption" };
272
+ if (fonts.body) return { ref: fonts.body, slot: "body" };
273
+ return { ref: fonts.heading, slot: "heading" };
274
+ }
275
+ function effectiveCaptionFamily(kit) {
276
+ const authored = kit.captionProfile?.fontFamily;
277
+ if (authored !== void 0) return { family: authored, path: "captionProfile.fontFamily" };
278
+ const { ref, slot } = captionFontSource(kit.fonts);
279
+ return { family: ref?.family, path: `fonts.${slot}` };
280
+ }
281
+ function brandKitCaptionFaceIssues(kit) {
282
+ const family = effectiveCaptionFamily(kit);
283
+ const profile = kit.captionProfile ?? {};
284
+ const style = {
285
+ ...profile,
286
+ ...family.family !== void 0 ? { fontFamily: family.family } : { fontFamily: void 0 }
287
+ };
288
+ return captionFaceIssues(style).map((issue) => ({
289
+ ...issue,
290
+ // The offending value is normally the profile's own — which is all that is reachable while
291
+ // every bundled family's DECLARED caption defaults are faces it ships (pinned by "declares a
292
+ // base and an emphasis weight every family has bytes for" in fonts.test.ts), because a kit
293
+ // whose profile authors nothing then draws two faces that exist. `family.path` is the answer
294
+ // for the day that stops being true: a defaulted face refused by the family the slot chain
295
+ // chose has to send the author to the SLOT, not to a profile field they never wrote.
296
+ path: profile[issue.field] !== void 0 ? `captionProfile.${issue.field}` : family.path
297
+ }));
298
+ }
299
+ function supplied(value) {
300
+ return value !== void 0 && value !== null && value !== "";
301
+ }
302
+ function mergeCaptionFaceFields(style, brandCaption) {
303
+ const merged = {};
304
+ for (const field of CAPTION_FACE_MERGE_FIELDS) {
305
+ const fromKit = brandCaption?.[field];
306
+ if (supplied(fromKit)) {
307
+ merged[field] = fromKit;
308
+ continue;
309
+ }
310
+ const fromStyle = style?.[field];
311
+ if (supplied(fromStyle)) merged[field] = fromStyle;
312
+ }
313
+ return merged;
314
+ }
315
+ function mergedCaptionFaceIssues(style, brandCaption) {
316
+ const merged = mergeCaptionFaceFields(style, brandCaption);
317
+ const originOf = (field) => {
318
+ if (supplied(brandCaption?.[field])) return "brandKit.captionProfile";
319
+ if (supplied(style?.[field])) return "captions.style";
320
+ return null;
321
+ };
322
+ return captionFaceIssues(merged).map((issue) => {
323
+ const familyField = issue.field === "fontWeight" ? "fontFamily" : supplied(merged.emphasisFontFamily) ? "emphasisFontFamily" : "fontFamily";
324
+ const origin = originOf(issue.field) ?? originOf(familyField);
325
+ if (origin === null) {
326
+ throw new Error(
327
+ `merged caption face refused at ${issue.field}, but neither it nor ${familyField} was authored by the composition or the brand kit, so no surface owns the value`
328
+ );
329
+ }
330
+ return { ...issue, origin, path: `${origin}.${issue.field}` };
331
+ });
332
+ }
333
+ function describeCaptionFaceIssues(issues, pathPrefix = "captionStyle") {
334
+ return issues.map((issue) => `${pathPrefix}.${issue.field}: ${issue.message}`).join(" ");
335
+ }
336
+ var CAPTION_WEIGHT_CHOICES = Object.freeze([400, 500, 600, 700, 800, 900]);
337
+ function captionWeightChoices(stack) {
338
+ const resolved = captionStackFamily(stack);
339
+ if (resolved.kind !== "bundled") return CAPTION_WEIGHT_CHOICES;
340
+ return CAPTION_WEIGHT_CHOICES.filter(
341
+ (weight) => bundledFontFaceExists(resolved.family, weight, BUNDLED_FONT_STYLE)
342
+ );
343
+ }
344
+ function captionStyleChoices(stack) {
345
+ return captionStackFamily(stack).kind === "unknown" ? ["normal", "italic"] : ["normal"];
346
+ }
347
+
348
+ // ../composition/src/fonts.ts
349
+ var AVAILABLE_LOWER = new Set(
350
+ [...VENDORED_FONT_FAMILIES, ...ALIASED_FONT_FAMILIES].map((f) => f.toLowerCase())
351
+ );
352
+ function isAvailableFontFamily(family) {
353
+ return AVAILABLE_LOWER.has(family.trim().replace(/^['"]|['"]$/g, "").toLowerCase());
354
+ }
355
+ var FONT_FAMILY_CSS = /font-family\s*:\s*((?:'[^']*'|"[^"]*"|[^;}"'])+?)\s*(?:;|}|"|$)/gi;
356
+ var FONT_FAMILY_KEY = /fontfamily$/i;
357
+ var MAX_NAMED = 6;
358
+ function collectFontStacks(value, out) {
359
+ if (Array.isArray(value)) {
360
+ for (const v of value) collectFontStacks(v, out);
361
+ return;
362
+ }
363
+ if (value === null || typeof value !== "object") return;
364
+ for (const [k, v] of Object.entries(value)) {
365
+ if (typeof v === "string") {
366
+ if (FONT_FAMILY_KEY.test(k)) out.push(v);
367
+ for (const m of v.matchAll(FONT_FAMILY_CSS)) out.push(m[1]);
368
+ continue;
369
+ }
370
+ collectFontStacks(v, out);
371
+ }
372
+ }
373
+ function detectUnavailableFonts(value) {
374
+ const stacks = [];
375
+ collectFontStacks(value, stacks);
376
+ if (stacks.length === 0) return [];
377
+ const offenders = /* @__PURE__ */ new Map();
378
+ for (const raw of stacks) {
379
+ if (raw.includes("$brand:")) continue;
380
+ const families = parseFontStack(raw);
381
+ if (families.length === 0) continue;
382
+ if (families.some((f) => f.includes("${"))) continue;
383
+ if (families.some(isAvailableFontFamily)) continue;
384
+ offenders.set(families[0], (offenders.get(families[0]) ?? 0) + 1);
385
+ }
386
+ if (offenders.size === 0) return [];
387
+ const names = [...offenders.keys()];
388
+ const shown = names.slice(0, MAX_NAMED).map((n) => `\`${n}\``).join(", ");
389
+ const elided = names.length > MAX_NAMED ? ` (+${names.length - MAX_NAMED} more)` : "";
390
+ const requests = [...offenders.values()].reduce((a, b) => a + b, 0);
391
+ return [
392
+ `font_not_available \u2014 ${requests} font request${requests === 1 ? "" : "s"} name ${shown}${elided}, and nothing else in those stacks is vendored either. Only the vendored faces are guaranteed present in the render, so naming a family alone gets you the generic fallback (Liberation Sans) \u2014 no error, just the wrong typeface. Guaranteed: ${VENDORED_FONT_FAMILIES.join(", ")} (plus Georgia). Note that putting the family on a brand kit does NOT make it available \u2014 brand fonts resolve against the same vendored set.`
393
+ ];
394
+ }
395
+
396
+ export {
397
+ VENDORED_FONT_FAMILIES,
398
+ ALIASED_FONT_FAMILIES,
399
+ BUNDLED_FONT_FACES,
400
+ BUNDLED_FONT_STYLE,
401
+ bundledFontFamilyFaces,
402
+ bundledFaceCoversWeight,
403
+ bundledFontFaceExists,
404
+ describeBundledFontWeights,
405
+ unrenderableFaceField,
406
+ parseFontStack,
407
+ isGenericOnlyStack,
408
+ bundledFamilyForStack,
409
+ CAPTION_FACE_DEFAULTS,
410
+ CAPTION_DEFAULT_FAMILY,
411
+ captionStackFamily,
412
+ captionDefaultWeights,
413
+ resolveCaptionFaces,
414
+ captionFaceUses,
415
+ CAPTION_FACE_ISSUE_FIELDS,
416
+ captionFaceIssues,
417
+ introducedCaptionFaceIssues,
418
+ CAPTION_FACE_MERGE_FIELDS,
419
+ captionFontSource,
420
+ effectiveCaptionFamily,
421
+ brandKitCaptionFaceIssues,
422
+ mergeCaptionFaceFields,
423
+ mergedCaptionFaceIssues,
424
+ describeCaptionFaceIssues,
425
+ CAPTION_WEIGHT_CHOICES,
426
+ captionWeightChoices,
427
+ captionStyleChoices,
428
+ isAvailableFontFamily,
429
+ detectUnavailableFonts
430
+ };
@@ -4,7 +4,10 @@ import {
4
4
  Format,
5
5
  GraphicRole,
6
6
  OpaqueId
7
- } from "./chunk-7KEUL3FI.js";
7
+ } from "./chunk-XF2QMKRG.js";
8
+ import {
9
+ brandKitCaptionFaceIssues
10
+ } from "./chunk-TARKDVP6.js";
8
11
 
9
12
  // ../composition/src/validators/composePlan.ts
10
13
  import { z } from "zod";
@@ -238,9 +241,18 @@ var BrandKit = z2.object({
238
241
  entranceStaggerMs: z2.number().optional(),
239
242
  exitMs: z2.number().optional(),
240
243
  fontFamily: z2.string().optional(),
244
+ // The ordinary run's weight. The profile could name a caption family but never how heavy it
245
+ // was drawn, so the only answer to "that weight has no file behind it" was to change the
246
+ // family. A family that does not declare this weight is still refused here — but now at a
247
+ // field the author can set, and a family that ships it needs no setting at all: every
248
+ // bundled family declares a base and an emphasis weight it has bytes for.
249
+ fontWeight: z2.number().int().min(100).max(900).multipleOf(100).optional(),
241
250
  emphasisFontFamily: z2.string().optional(),
242
251
  emphasisScale: z2.number().positive().optional(),
243
- emphasisFontWeight: z2.number().optional(),
252
+ // A CSS weight, and the profile is projected straight onto the caption style, so it is held
253
+ // to the same range the composition holds `emphasisFontWeight` to. An unbounded number here
254
+ // was a hole: 0 or 1500 named no face at all.
255
+ emphasisFontWeight: z2.number().int().min(100).max(900).optional(),
244
256
  emphasisFontStyle: z2.enum(["normal", "italic"]).optional(),
245
257
  emphasisTextTransform: z2.enum(["none", "uppercase"]).optional(),
246
258
  emphasisLetterSpacing: z2.number().optional(),
@@ -298,6 +310,10 @@ var BrandKit = z2.object({
298
310
  ]).optional(),
299
311
  ownerOrgId: z2.string().optional(),
300
312
  acl: AccessControl.optional()
313
+ }).superRefine((kit, ctx) => {
314
+ for (const issue of brandKitCaptionFaceIssues(kit)) {
315
+ ctx.addIssue({ code: "custom", path: issue.path.split("."), message: issue.message });
316
+ }
301
317
  });
302
318
 
303
319
  // ../composition/src/validators/font.ts
@@ -2,7 +2,7 @@ import {
2
2
  selectAllClips,
3
3
  selectAllOverlays,
4
4
  selectSceneMarkers
5
- } from "./chunk-IBMJ33EL.js";
5
+ } from "./chunk-I5RX2QZT.js";
6
6
 
7
7
  // ../authoring/src/context/transcript.ts
8
8
  var MAX_TRANSCRIPT_CHARS = 6e4;
@@ -1,53 +1,28 @@
1
1
  import {
2
+ assertSceneShotCapabilitySupported,
3
+ assertSceneShotParamsAdmitted,
4
+ materializeComponentSource,
2
5
  renderComponentAlpha
3
- } from "./chunk-5OTQ7M43.js";
4
- import {
5
- findWorkspace
6
- } from "./chunk-WB2VFDQZ.js";
6
+ } from "./chunk-DQLYWNLC.js";
7
7
  import {
8
8
  componentArtifactId,
9
9
  componentBundleId,
10
10
  componentRenderKey,
11
11
  sha256Hex,
12
12
  sourceVersionId
13
- } from "./chunk-M2TLRXEO.js";
13
+ } from "./chunk-EXY4JJPH.js";
14
14
  import {
15
- assertComponentImportsAllowed
16
- } from "./chunk-2PGLNTB7.js";
15
+ resolvedComponentRenderer
16
+ } from "./chunk-WIHXXF3X.js";
17
17
  import {
18
18
  ComponentBakeJobV2,
19
19
  ComponentBakeRequestV2,
20
20
  ComponentRenderReceiptV2,
21
21
  ComponentRenderRequestV2,
22
22
  ComponentRuntimeError,
23
- ComponentSourceV2,
24
- assertGraphicsReceiptMatches
25
- } from "./chunk-LQUWKBST.js";
26
-
27
- // ../execution/component-runtime/src/sourceWorkspace.ts
28
- import { mkdirSync, writeFileSync } from "fs";
29
- import { join } from "path";
30
- function materializeComponentSource(workspaceRoot, input) {
31
- const source = ComponentSourceV2.parse(input);
32
- assertComponentImportsAllowed(source.tsxSource);
33
- mkdirSync(workspaceRoot, { recursive: true });
34
- writeFileSync(join(workspaceRoot, "cueframe.json"), '{"componentsDir":"cueframe/components"}\n', {
35
- flag: "wx"
36
- });
37
- const dir = join(workspaceRoot, "cueframe", "components", source.componentId);
38
- mkdirSync(dir, { recursive: true });
39
- writeFileSync(join(dir, "index.tsx"), source.tsxSource, { flag: "wx" });
40
- writeFileSync(join(dir, "component-source-v2.json"), `${JSON.stringify(source)}
41
- `, { flag: "wx" });
42
- const workspace = findWorkspace(workspaceRoot);
43
- if (!workspace) throw new Error("Materialized component workspace could not be opened.");
44
- return {
45
- workspace,
46
- source,
47
- sourceVersionId: sourceVersionId(source),
48
- componentDir: dir
49
- };
50
- }
23
+ assertGraphicsReceiptMatches,
24
+ assertRendererReceiptMatches
25
+ } from "./chunk-ZVG446DJ.js";
51
26
 
52
27
  // ../execution/component-runtime/src/assetServer.ts
53
28
  import { createHash, randomBytes } from "crypto";
@@ -163,7 +138,7 @@ async function startComponentAssetServer(args) {
163
138
 
164
139
  // ../execution/component-runtime/src/outputVerifier.ts
165
140
  import { execFileSync } from "child_process";
166
- import { dirname, join as join2 } from "path";
141
+ import { dirname, join } from "path";
167
142
  import { existsSync, statSync as statSync2 } from "fs";
168
143
  var OPAQUE_ALPHA_FRACTION = 0.98;
169
144
  function parseAlphaOpaqueFractions(ffmpegOutput) {
@@ -202,7 +177,7 @@ function verifyComponentOutput(options) {
202
177
  if (size <= 0 || size > (options.maxBytes ?? 1073741824)) {
203
178
  throw new ComponentRuntimeError("component_output_invalid", "Rendered component artifact has an invalid size.");
204
179
  }
205
- const bundledProbe = join2(dirname(process.execPath), process.platform === "win32" ? "ffprobe.exe" : "ffprobe");
180
+ const bundledProbe = join(dirname(process.execPath), process.platform === "win32" ? "ffprobe.exe" : "ffprobe");
206
181
  const ffprobeExecutable = options.ffprobeExecutable ?? process.env.COMPONENT_FFPROBE_EXECUTABLE ?? (existsSync(bundledProbe) ? bundledProbe : "ffprobe");
207
182
  let probe;
208
183
  try {
@@ -223,7 +198,7 @@ function verifyComponentOutput(options) {
223
198
  }
224
199
  assertComponentOutputProbe(probe, options.expected);
225
200
  if (options.expected.source.manifest.alphaPolicy === "requires-transparency") {
226
- const bundledFfmpeg = join2(dirname(process.execPath), process.platform === "win32" ? "ffmpeg.exe" : "ffmpeg");
201
+ const bundledFfmpeg = join(dirname(process.execPath), process.platform === "win32" ? "ffmpeg.exe" : "ffmpeg");
227
202
  const ffmpegExecutable = options.ffmpegExecutable ?? process.env.COMPONENT_FFMPEG_EXECUTABLE ?? (existsSync(bundledFfmpeg) ? bundledFfmpeg : "ffmpeg");
228
203
  const durationSec = Math.max(0.05, options.expected.durationInFrames / options.expected.fps);
229
204
  let fractions;
@@ -256,7 +231,7 @@ function verifyComponentOutput(options) {
256
231
  }
257
232
 
258
233
  // ../execution/component-runtime/src/bake.ts
259
- import { constants, copyFileSync, mkdirSync as mkdirSync2, readFileSync, statSync as statSync3 } from "fs";
234
+ import { constants, copyFileSync, mkdirSync, readFileSync, statSync as statSync3 } from "fs";
260
235
  import { dirname as dirname2 } from "path";
261
236
  function assertAssetBindingsMatch(request) {
262
237
  const declared = request.source.manifest.assets;
@@ -294,7 +269,9 @@ function assertAssetBindingsMatch(request) {
294
269
  }
295
270
  }
296
271
  async function bakeComponentAlphaV2(options) {
272
+ assertSceneShotCapabilitySupported(options.job?.source?.manifest, { componentId: options.job?.source?.componentId });
297
273
  const job = ComponentBakeJobV2.parse(options.job);
274
+ assertSceneShotParamsAdmitted(job.source.manifest, job.params, { componentId: job.source.componentId });
298
275
  const assetServer = await startComponentAssetServer({ assets: job.assets, files: job.assetFiles });
299
276
  try {
300
277
  const { assetFiles: _assetFiles, ...unsealedRequest } = job;
@@ -309,6 +286,7 @@ async function bakeComponentAlphaV2(options) {
309
286
  runtimeDigest: request.runtimeDigest,
310
287
  dependencyLockDigest: request.dependencyLockDigest
311
288
  });
289
+ const renderer = resolvedComponentRenderer(request.source.manifest.graphics, request.source.manifest.sceneShot);
312
290
  const renderRequest = ComponentRenderRequestV2.parse({
313
291
  version: 2,
314
292
  bundleId,
@@ -320,7 +298,8 @@ async function bakeComponentAlphaV2(options) {
320
298
  durationInFrames: request.durationInFrames,
321
299
  alpha: true,
322
300
  graphics: request.source.manifest.graphics,
323
- seed: request.seed
301
+ seed: request.seed,
302
+ renderer
324
303
  });
325
304
  const renderKey = componentRenderKey(renderRequest);
326
305
  const rendered = await renderComponentAlpha({
@@ -336,7 +315,10 @@ async function bakeComponentAlphaV2(options) {
336
315
  height: request.height,
337
316
  fps: request.fps,
338
317
  durationInFrames: request.durationInFrames,
339
- renderEntryRoot: options.renderEntryRoot
318
+ renderEntryRoot: options.renderEntryRoot,
319
+ concurrency: options.concurrency,
320
+ onProgress: options.onProgress,
321
+ onTiming: options.onTiming
340
322
  });
341
323
  verifyComponentOutput({
342
324
  path: rendered.videoPath,
@@ -344,7 +326,7 @@ async function bakeComponentAlphaV2(options) {
344
326
  ffprobeExecutable: options.ffprobeExecutable,
345
327
  ffmpegExecutable: options.ffmpegExecutable
346
328
  });
347
- mkdirSync2(dirname2(options.outputPath), { recursive: true });
329
+ mkdirSync(dirname2(options.outputPath), { recursive: true });
348
330
  copyFileSync(rendered.videoPath, options.outputPath, constants.COPYFILE_EXCL);
349
331
  const output = readFileSync(options.outputPath);
350
332
  const outputSha256 = sha256Hex(output);
@@ -363,13 +345,19 @@ async function bakeComponentAlphaV2(options) {
363
345
  durationInFrames: request.durationInFrames,
364
346
  alpha: true,
365
347
  requestedGraphics: request.source.manifest.graphics,
366
- actualGraphics: rendered.actualGraphics
348
+ actualGraphics: rendered.actualGraphics,
349
+ renderer,
350
+ // The machine, not the picture: recorded so an evidence row can cite the host this artifact
351
+ // was drawn on, and dropped by `componentArtifactIdentity` before hashing so two hosts that
352
+ // both clear the shadow-map budget still produce one artifact id for one set of bytes.
353
+ host: rendered.host
367
354
  };
368
355
  const receipt = ComponentRenderReceiptV2.parse({
369
356
  ...receiptWithoutArtifact,
370
357
  artifactId: componentArtifactId({ outputSha256, receipt: receiptWithoutArtifact })
371
358
  });
372
359
  assertGraphicsReceiptMatches(renderRequest, receipt);
360
+ assertRendererReceiptMatches(renderRequest, receipt);
373
361
  return receipt;
374
362
  } finally {
375
363
  await assetServer.close();
@@ -380,7 +368,6 @@ function sourceIdentityForBake(request) {
380
368
  }
381
369
 
382
370
  export {
383
- materializeComponentSource,
384
371
  startComponentAssetServer,
385
372
  parseAlphaOpaqueFractions,
386
373
  bakeOpacityContradictsPolicy,