@cueframe/kernel 0.0.1

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 (1119) hide show
  1. package/dist/TextureLoader-UQOFUSAP.js +422 -0
  2. package/dist/VideoTexture-AQWSPIJG.js +62 -0
  3. package/dist/_members/account-model/index.d.ts +1 -0
  4. package/dist/_members/account-model/index.js +4 -0
  5. package/dist/_members/account-model/testing/conversationStoreContract.d.ts +97 -0
  6. package/dist/_members/account-model/testing/conversationStoreContract.js +168 -0
  7. package/dist/_members/account-model/testing/index.d.ts +7 -0
  8. package/dist/_members/account-model/testing/index.js +7 -0
  9. package/dist/_members/account-model/testing/restorePointStoreContract.d.ts +52 -0
  10. package/dist/_members/account-model/testing/restorePointStoreContract.js +69 -0
  11. package/dist/_members/account-model/types/index.d.ts +5 -0
  12. package/dist/_members/account-model/types/index.js +1 -0
  13. package/dist/_members/account-model/validators/contextFile.d.ts +36 -0
  14. package/dist/_members/account-model/validators/contextFile.js +18 -0
  15. package/dist/_members/account-model/validators/conversation.d.ts +153 -0
  16. package/dist/_members/account-model/validators/conversation.js +95 -0
  17. package/dist/_members/account-model/validators/dashboardInsight.d.ts +30 -0
  18. package/dist/_members/account-model/validators/dashboardInsight.js +16 -0
  19. package/dist/_members/account-model/validators/index.d.ts +7 -0
  20. package/dist/_members/account-model/validators/index.js +7 -0
  21. package/dist/_members/account-model/validators/sessionToken.d.ts +79 -0
  22. package/dist/_members/account-model/validators/sessionToken.js +49 -0
  23. package/dist/_members/account-model/validators/uploadToken.d.ts +33 -0
  24. package/dist/_members/account-model/validators/uploadToken.js +16 -0
  25. package/dist/_members/account-model/validators/userSettings.d.ts +22 -0
  26. package/dist/_members/account-model/validators/userSettings.js +12 -0
  27. package/dist/_members/account-model/validators/workingComposition.d.ts +34 -0
  28. package/dist/_members/account-model/validators/workingComposition.js +20 -0
  29. package/dist/_members/animate/animations/Create.d.ts +36 -0
  30. package/dist/_members/animate/animations/FadeIn.d.ts +36 -0
  31. package/dist/_members/animate/animations/GrowArrow.d.ts +36 -0
  32. package/dist/_members/animate/animations/GrowFromCenter.d.ts +25 -0
  33. package/dist/_members/animate/animations/Indicate.d.ts +29 -0
  34. package/dist/_members/animate/animations/MoveAlongPath.d.ts +30 -0
  35. package/dist/_members/animate/animations/Transform.d.ts +46 -0
  36. package/dist/_members/animate/animations/Wiggle.d.ts +31 -0
  37. package/dist/_members/animate/animations/Write.d.ts +35 -0
  38. package/dist/_members/animate/animations/index.d.ts +9 -0
  39. package/dist/_members/animate/composition/AnimationGroup.d.ts +32 -0
  40. package/dist/_members/animate/composition/LaggedStart.d.ts +33 -0
  41. package/dist/_members/animate/composition/Succession.d.ts +27 -0
  42. package/dist/_members/animate/composition/index.d.ts +3 -0
  43. package/dist/_members/animate/easing/index.d.ts +3 -0
  44. package/dist/_members/animate/easing/rush.d.ts +16 -0
  45. package/dist/_members/animate/easing/smooth.d.ts +8 -0
  46. package/dist/_members/animate/easing/smootherstep.d.ts +7 -0
  47. package/dist/_members/animate/index.d.ts +25 -0
  48. package/dist/_members/animate/mobjects/Arrow.d.ts +41 -0
  49. package/dist/_members/animate/mobjects/BrandBox.d.ts +43 -0
  50. package/dist/_members/animate/mobjects/DiGraph.d.ts +21 -0
  51. package/dist/_members/animate/mobjects/Graph.d.ts +72 -0
  52. package/dist/_members/animate/mobjects/index.d.ts +4 -0
  53. package/dist/_members/animate/three/ThreeCanvas.d.ts +36 -0
  54. package/dist/_members/animate/three/drei.d.ts +13 -0
  55. package/dist/_members/animate/three/index.d.ts +2 -0
  56. package/dist/_members/authoring/agent/buildTools.d.ts +54 -0
  57. package/dist/_members/authoring/agent/contextManagement.d.ts +73 -0
  58. package/dist/_members/authoring/agent/errors.d.ts +12 -0
  59. package/dist/_members/authoring/agent/index.d.ts +2 -0
  60. package/dist/_members/authoring/agent/memoryTool.d.ts +8 -0
  61. package/dist/_members/authoring/agent/promptCache.d.ts +34 -0
  62. package/dist/_members/authoring/agent.d.ts +59 -0
  63. package/dist/_members/authoring/capabilities.d.ts +306 -0
  64. package/dist/_members/authoring/composer/index.d.ts +2 -0
  65. package/dist/_members/authoring/composer/scopes.d.ts +26 -0
  66. package/dist/_members/authoring/context/brand.d.ts +37 -0
  67. package/dist/_members/authoring/context/brandTokens.d.ts +6 -0
  68. package/dist/_members/authoring/context/index.d.ts +8 -0
  69. package/dist/_members/authoring/context/timeline.d.ts +33 -0
  70. package/dist/_members/authoring/context/transcript.d.ts +24 -0
  71. package/dist/_members/authoring/context/types.d.ts +5 -0
  72. package/dist/_members/authoring/decomposer.d.ts +17 -0
  73. package/dist/_members/authoring/evaluate.d.ts +37 -0
  74. package/dist/_members/authoring/evaluator.d.ts +22 -0
  75. package/dist/_members/authoring/index.d.ts +25 -0
  76. package/dist/_members/authoring/models/modelFactory.d.ts +107 -0
  77. package/dist/_members/authoring/motion/applyMotionPreset.d.ts +31 -0
  78. package/dist/_members/authoring/motion/index.d.ts +6 -0
  79. package/dist/_members/authoring/motion/materializeMotionPresetOps.d.ts +38 -0
  80. package/dist/_members/authoring/motion/shell.d.ts +30 -0
  81. package/dist/_members/authoring/pipelineTrace.d.ts +38 -0
  82. package/dist/_members/authoring/prompts/decomposerPrompt.d.ts +5 -0
  83. package/dist/_members/authoring/prompts/designReviewerPrompt.d.ts +18 -0
  84. package/dist/_members/authoring/prompts/evaluatorPrompt.d.ts +5 -0
  85. package/dist/_members/authoring/prompts/graphics.d.ts +14 -0
  86. package/dist/_members/authoring/prompts/index.d.ts +4 -0
  87. package/dist/_members/authoring/prompts/plannerPrompt.d.ts +48 -0
  88. package/dist/_members/authoring/providers/index.d.ts +1 -0
  89. package/dist/_members/authoring/providers/resourceApi.d.ts +32 -0
  90. package/dist/_members/authoring/resource-routing.d.ts +186 -0
  91. package/dist/_members/authoring/resources.d.ts +59 -0
  92. package/dist/_members/authoring/scope.d.ts +31 -0
  93. package/dist/_members/authoring/tools/brandTokens.d.ts +34 -0
  94. package/dist/_members/authoring/tools/composeRoleTools.d.ts +112 -0
  95. package/dist/_members/authoring/tools/index.d.ts +4 -0
  96. package/dist/_members/authoring/tools/toolSets.d.ts +54 -0
  97. package/dist/_members/authoring/transpileComponent.d.ts +40 -0
  98. package/dist/_members/authoring/transpileHelper.d.ts +26 -0
  99. package/dist/_members/authoring/types.d.ts +572 -0
  100. package/dist/_members/brand-derivation/constants.d.ts +27 -0
  101. package/dist/_members/brand-derivation/constants.js +20 -0
  102. package/dist/_members/brand-derivation/contrastSafe.d.ts +47 -0
  103. package/dist/_members/brand-derivation/contrastSafe.js +114 -0
  104. package/dist/_members/brand-derivation/index.d.ts +1 -0
  105. package/dist/_members/brand-derivation/index.js +1 -0
  106. package/dist/_members/compose/CompositionRenderer.d.ts +12 -0
  107. package/dist/_members/compose/catalog.d.ts +1 -0
  108. package/dist/_members/compose/index.d.ts +8 -0
  109. package/dist/_members/compose/primitiveRegistry.d.ts +90 -0
  110. package/dist/_members/compose/sceneToRenderInput.d.ts +51 -0
  111. package/dist/_members/compose/schema.d.ts +45 -0
  112. package/dist/_members/compose/tokenResolver.d.ts +28 -0
  113. package/dist/_members/composition/audio/audioMix.d.ts +67 -0
  114. package/dist/_members/composition/audio/audioMix.js +61 -0
  115. package/dist/_members/composition/audio/index.d.ts +5 -0
  116. package/dist/_members/composition/audio/index.js +5 -0
  117. package/dist/_members/composition/audio/mixStaging.d.ts +107 -0
  118. package/dist/_members/composition/audio/mixStaging.js +195 -0
  119. package/dist/_members/composition/audio/musicPack.d.ts +56 -0
  120. package/dist/_members/composition/audio/musicPack.generated.d.ts +9 -0
  121. package/dist/_members/composition/audio/musicPack.generated.js +136 -0
  122. package/dist/_members/composition/audio/musicPack.js +36 -0
  123. package/dist/_members/composition/audio/pack.d.ts +67 -0
  124. package/dist/_members/composition/audio/pack.generated.d.ts +9 -0
  125. package/dist/_members/composition/audio/pack.generated.js +603 -0
  126. package/dist/_members/composition/audio/pack.js +48 -0
  127. package/dist/_members/composition/audio/palette.d.ts +82 -0
  128. package/dist/_members/composition/audio/palette.js +134 -0
  129. package/dist/_members/composition/autozoom/index.d.ts +57 -0
  130. package/dist/_members/composition/autozoom/index.js +83 -0
  131. package/dist/_members/composition/brand-kit.d.ts +58 -0
  132. package/dist/_members/composition/brand-kit.js +45 -0
  133. package/dist/_members/composition/brief/contract.d.ts +132 -0
  134. package/dist/_members/composition/brief/contract.js +209 -0
  135. package/dist/_members/composition/color-grade.d.ts +17 -0
  136. package/dist/_members/composition/color-grade.js +80 -0
  137. package/dist/_members/composition/depth.d.ts +24 -0
  138. package/dist/_members/composition/depth.js +8 -0
  139. package/dist/_members/composition/fixtures/agentErrored.d.ts +25 -0
  140. package/dist/_members/composition/fixtures/index.d.ts +7 -0
  141. package/dist/_members/composition/fixtures/index.js +143 -0
  142. package/dist/_members/composition/fixtures/vaayaErrored.d.ts +25 -0
  143. package/dist/_members/composition/fixtures/vaayaErrored.js +203 -0
  144. package/dist/_members/composition/fonts.d.ts +68 -0
  145. package/dist/_members/composition/fonts.js +162 -0
  146. package/dist/_members/composition/graphics-plan/compile.d.ts +43 -0
  147. package/dist/_members/composition/graphics-plan/compile.js +221 -0
  148. package/dist/_members/composition/graphics-plan/index.d.ts +11 -0
  149. package/dist/_members/composition/graphics-plan/index.js +10 -0
  150. package/dist/_members/composition/graphics-plan/instantiateMotif.d.ts +51 -0
  151. package/dist/_members/composition/graphics-plan/instantiateMotif.js +44 -0
  152. package/dist/_members/composition/graphics-plan/motion.d.ts +19 -0
  153. package/dist/_members/composition/graphics-plan/motion.js +66 -0
  154. package/dist/_members/composition/graphics-plan/schemas.d.ts +1672 -0
  155. package/dist/_members/composition/graphics-plan/schemas.js +261 -0
  156. package/dist/_members/composition/graphics-plan/solve.d.ts +34 -0
  157. package/dist/_members/composition/graphics-plan/solve.js +145 -0
  158. package/dist/_members/composition/index.d.ts +7 -0
  159. package/dist/_members/composition/index.js +5 -0
  160. package/dist/_members/composition/invariants/clipPlacement.d.ts +65 -0
  161. package/dist/_members/composition/invariants/clipPlacement.js +69 -0
  162. package/dist/_members/composition/invariants/composition.d.ts +9 -0
  163. package/dist/_members/composition/invariants/composition.js +28 -0
  164. package/dist/_members/composition/invariants/errors.d.ts +11 -0
  165. package/dist/_members/composition/invariants/errors.js +10 -0
  166. package/dist/_members/composition/invariants/etag.d.ts +10 -0
  167. package/dist/_members/composition/invariants/etag.js +38 -0
  168. package/dist/_members/composition/invariants/ids.d.ts +9 -0
  169. package/dist/_members/composition/invariants/ids.js +33 -0
  170. package/dist/_members/composition/invariants/index.d.ts +9 -0
  171. package/dist/_members/composition/invariants/index.js +9 -0
  172. package/dist/_members/composition/invariants/keyframes.d.ts +23 -0
  173. package/dist/_members/composition/invariants/keyframes.js +45 -0
  174. package/dist/_members/composition/invariants/markers.d.ts +9 -0
  175. package/dist/_members/composition/invariants/markers.js +29 -0
  176. package/dist/_members/composition/invariants/time.d.ts +22 -0
  177. package/dist/_members/composition/invariants/time.js +20 -0
  178. package/dist/_members/composition/invariants/tracks.d.ts +58 -0
  179. package/dist/_members/composition/invariants/tracks.js +304 -0
  180. package/dist/_members/composition/ops/compositionOps.d.ts +129 -0
  181. package/dist/_members/composition/ops/compositionOps.js +1056 -0
  182. package/dist/_members/composition/ops/headlessStore.d.ts +40 -0
  183. package/dist/_members/composition/ops/headlessStore.js +94 -0
  184. package/dist/_members/composition/ops/index.d.ts +6 -0
  185. package/dist/_members/composition/ops/index.js +4 -0
  186. package/dist/_members/composition/ops/selectors.d.ts +81 -0
  187. package/dist/_members/composition/ops/selectors.js +118 -0
  188. package/dist/_members/composition/ops/timeline-word.d.ts +24 -0
  189. package/dist/_members/composition/ops/timeline-word.js +1 -0
  190. package/dist/_members/composition/ops/transcript.d.ts +44 -0
  191. package/dist/_members/composition/ops/transcript.js +77 -0
  192. package/dist/_members/composition/ops/types.d.ts +145 -0
  193. package/dist/_members/composition/ops/types.js +16 -0
  194. package/dist/_members/composition/primitive-catalog/catalogQuery.d.ts +82 -0
  195. package/dist/_members/composition/primitive-catalog/catalogQuery.js +150 -0
  196. package/dist/_members/composition/primitive-catalog/disabled.d.ts +3 -0
  197. package/dist/_members/composition/primitive-catalog/disabled.js +32 -0
  198. package/dist/_members/composition/primitive-catalog/generated/meta.d.ts +2 -0
  199. package/dist/_members/composition/primitive-catalog/generated/meta.js +15161 -0
  200. package/dist/_members/composition/primitive-catalog/index.d.ts +28 -0
  201. package/dist/_members/composition/primitive-catalog/index.js +46 -0
  202. package/dist/_members/composition/primitive-catalog/paramValidation.d.ts +76 -0
  203. package/dist/_members/composition/primitive-catalog/paramValidation.js +231 -0
  204. package/dist/_members/composition/primitive-catalog/projection.d.ts +99 -0
  205. package/dist/_members/composition/primitive-catalog/projection.js +164 -0
  206. package/dist/_members/composition/primitive-catalog/types.d.ts +123 -0
  207. package/dist/_members/composition/primitive-catalog/types.js +14 -0
  208. package/dist/_members/composition/projection/behind-placement.d.ts +64 -0
  209. package/dist/_members/composition/projection/behind-placement.js +62 -0
  210. package/dist/_members/composition/projection/brandKit.d.ts +308 -0
  211. package/dist/_members/composition/projection/brandKit.js +482 -0
  212. package/dist/_members/composition/projection/cardTokens.d.ts +70 -0
  213. package/dist/_members/composition/projection/cardTokens.js +209 -0
  214. package/dist/_members/composition/projection/composition-floor.d.ts +349 -0
  215. package/dist/_members/composition/projection/composition-floor.js +582 -0
  216. package/dist/_members/composition/projection/cropProjection.d.ts +140 -0
  217. package/dist/_members/composition/projection/cropProjection.js +257 -0
  218. package/dist/_members/composition/projection/index.d.ts +7 -0
  219. package/dist/_members/composition/projection/index.js +7 -0
  220. package/dist/_members/composition/projection/occlusion-budget.d.ts +67 -0
  221. package/dist/_members/composition/projection/occlusion-budget.js +104 -0
  222. package/dist/_members/composition/projection/safe-zones.d.ts +38 -0
  223. package/dist/_members/composition/projection/safe-zones.js +99 -0
  224. package/dist/_members/composition/reframe/aspectLoss.d.ts +49 -0
  225. package/dist/_members/composition/reframe/aspectLoss.js +115 -0
  226. package/dist/_members/composition/reframe/coverage.d.ts +48 -0
  227. package/dist/_members/composition/reframe/coverage.js +62 -0
  228. package/dist/_members/composition/reframe/derive.d.ts +37 -0
  229. package/dist/_members/composition/reframe/derive.js +73 -0
  230. package/dist/_members/composition/reframe/index.d.ts +658 -0
  231. package/dist/_members/composition/reframe/index.js +109 -0
  232. package/dist/_members/composition/reframe/kenBurns.d.ts +43 -0
  233. package/dist/_members/composition/reframe/kenBurns.js +64 -0
  234. package/dist/_members/composition/reframe/shotScale.d.ts +118 -0
  235. package/dist/_members/composition/reframe/shotScale.js +176 -0
  236. package/dist/_members/composition/reframe/trajectory.d.ts +99 -0
  237. package/dist/_members/composition/reframe/trajectory.js +124 -0
  238. package/dist/_members/composition/timeline/compound.d.ts +36 -0
  239. package/dist/_members/composition/timeline/compound.js +134 -0
  240. package/dist/_members/composition/timeline/index.d.ts +9 -0
  241. package/dist/_members/composition/timeline/index.js +9 -0
  242. package/dist/_members/composition/timeline/intent.d.ts +54 -0
  243. package/dist/_members/composition/timeline/intent.js +228 -0
  244. package/dist/_members/composition/timeline/keyframes.d.ts +50 -0
  245. package/dist/_members/composition/timeline/keyframes.js +121 -0
  246. package/dist/_members/composition/timeline/link.d.ts +36 -0
  247. package/dist/_members/composition/timeline/link.js +59 -0
  248. package/dist/_members/composition/timeline/occupancy.d.ts +72 -0
  249. package/dist/_members/composition/timeline/occupancy.js +36 -0
  250. package/dist/_members/composition/timeline/placement.d.ts +86 -0
  251. package/dist/_members/composition/timeline/placement.js +74 -0
  252. package/dist/_members/composition/timeline/plan.d.ts +109 -0
  253. package/dist/_members/composition/timeline/plan.js +31 -0
  254. package/dist/_members/composition/timeline/resolve.d.ts +55 -0
  255. package/dist/_members/composition/timeline/resolve.js +170 -0
  256. package/dist/_members/composition/timeline/trims.d.ts +54 -0
  257. package/dist/_members/composition/timeline/trims.js +278 -0
  258. package/dist/_members/composition/types/index.d.ts +8 -0
  259. package/dist/_members/composition/types/index.js +1 -0
  260. package/dist/_members/composition/validators/brandKit.d.ts +1472 -0
  261. package/dist/_members/composition/validators/brandKit.js +295 -0
  262. package/dist/_members/composition/validators/composePlan.d.ts +960 -0
  263. package/dist/_members/composition/validators/composePlan.js +113 -0
  264. package/dist/_members/composition/validators/composition.d.ts +6881 -0
  265. package/dist/_members/composition/validators/composition.js +703 -0
  266. package/dist/_members/composition/validators/font.d.ts +114 -0
  267. package/dist/_members/composition/validators/font.js +34 -0
  268. package/dist/_members/composition/validators/graphicKinds.d.ts +32 -0
  269. package/dist/_members/composition/validators/graphicKinds.js +30 -0
  270. package/dist/_members/composition/validators/index.d.ts +9 -0
  271. package/dist/_members/composition/validators/index.js +9 -0
  272. package/dist/_members/composition/validators/project.d.ts +62 -0
  273. package/dist/_members/composition/validators/project.js +29 -0
  274. package/dist/_members/composition/validators/registry.d.ts +161 -0
  275. package/dist/_members/composition/validators/registry.js +41 -0
  276. package/dist/_members/composition/validators/render.d.ts +8274 -0
  277. package/dist/_members/composition/validators/render.js +139 -0
  278. package/dist/_members/composition/validators/session.d.ts +117 -0
  279. package/dist/_members/composition/validators/session.js +37 -0
  280. package/dist/_members/composition/validators/webhook.d.ts +83 -0
  281. package/dist/_members/composition/validators/webhook.js +72 -0
  282. package/dist/_members/composition-ops/alphaLayers.d.ts +70 -0
  283. package/dist/_members/composition-ops/alphaLayers.js +141 -0
  284. package/dist/_members/composition-ops/index.d.ts +4940 -0
  285. package/dist/_members/composition-ops/index.js +637 -0
  286. package/dist/_members/composition-ops/materializeGrid.d.ts +56 -0
  287. package/dist/_members/composition-ops/materializeGrid.js +99 -0
  288. package/dist/_members/composition-ops/opRecorder.d.ts +77 -0
  289. package/dist/_members/composition-ops/opRecorder.js +196 -0
  290. package/dist/_members/composition-ops/recordingStore.d.ts +23 -0
  291. package/dist/_members/composition-ops/recordingStore.js +14 -0
  292. package/dist/_members/composition-ops/replaceRegion.d.ts +65 -0
  293. package/dist/_members/composition-ops/replaceRegion.js +102 -0
  294. package/dist/_members/composition-ops/testFixtures.d.ts +19 -0
  295. package/dist/_members/composition-ops/testFixtures.js +19 -0
  296. package/dist/_members/core/index.d.ts +3 -0
  297. package/dist/_members/core/index.js +5 -0
  298. package/dist/_members/core/render/bookends.d.ts +62 -0
  299. package/dist/_members/core/render/bookends.js +53 -0
  300. package/dist/_members/core/render/captions.d.ts +65 -0
  301. package/dist/_members/core/render/captions.js +127 -0
  302. package/dist/_members/core/render/compositionRender.d.ts +190 -0
  303. package/dist/_members/core/render/compositionRender.js +1249 -0
  304. package/dist/_members/core/render/deriveTrajectory.d.ts +188 -0
  305. package/dist/_members/core/render/deriveTrajectory.js +889 -0
  306. package/dist/_members/core/render/emphasis.d.ts +13 -0
  307. package/dist/_members/core/render/emphasis.js +16 -0
  308. package/dist/_members/core/render/eval/cropBox.d.ts +88 -0
  309. package/dist/_members/core/render/eval/cropBox.js +139 -0
  310. package/dist/_members/core/render/eval/inclusion.d.ts +50 -0
  311. package/dist/_members/core/render/eval/inclusion.js +96 -0
  312. package/dist/_members/core/render/eval/index.d.ts +93 -0
  313. package/dist/_members/core/render/eval/index.js +146 -0
  314. package/dist/_members/core/render/eval/metrics.d.ts +50 -0
  315. package/dist/_members/core/render/eval/metrics.js +94 -0
  316. package/dist/_members/core/render/exportSettings.d.ts +40 -0
  317. package/dist/_members/core/render/exportSettings.js +65 -0
  318. package/dist/_members/core/render/index.d.ts +14 -0
  319. package/dist/_members/core/render/index.js +20 -0
  320. package/dist/_members/core/render/mapFaceToPerson.d.ts +39 -0
  321. package/dist/_members/core/render/mapFaceToPerson.js +73 -0
  322. package/dist/_members/core/render/types.d.ts +304 -0
  323. package/dist/_members/core/render/types.js +8 -0
  324. package/dist/_members/core/render/vcam/cameraPath.d.ts +51 -0
  325. package/dist/_members/core/render/vcam/cameraPath.js +248 -0
  326. package/dist/_members/core/render/vcam/constants.d.ts +113 -0
  327. package/dist/_members/core/render/vcam/constants.js +115 -0
  328. package/dist/_members/core/render/vcam/errorCodes.d.ts +30 -0
  329. package/dist/_members/core/render/vcam/errorCodes.js +39 -0
  330. package/dist/_members/core/render/vcam/framing.d.ts +90 -0
  331. package/dist/_members/core/render/vcam/framing.js +136 -0
  332. package/dist/_members/core/render/vcam/requiredRegion.d.ts +85 -0
  333. package/dist/_members/core/render/vcam/requiredRegion.js +137 -0
  334. package/dist/_members/core/render/vcam/shots.d.ts +45 -0
  335. package/dist/_members/core/render/vcam/shots.js +53 -0
  336. package/dist/_members/core/render/vcam/subjectSet.d.ts +106 -0
  337. package/dist/_members/core/render/vcam/subjectSet.js +388 -0
  338. package/dist/_members/core/select/errorCodes.d.ts +27 -0
  339. package/dist/_members/core/select/errorCodes.js +38 -0
  340. package/dist/_members/core/select/index.d.ts +27 -0
  341. package/dist/_members/core/select/index.js +26 -0
  342. package/dist/_members/core/select/model.d.ts +178 -0
  343. package/dist/_members/core/select/model.js +18 -0
  344. package/dist/_members/core/select/select.d.ts +63 -0
  345. package/dist/_members/core/select/select.js +244 -0
  346. package/dist/_members/core/select/stabilize.d.ts +145 -0
  347. package/dist/_members/core/select/stabilize.js +242 -0
  348. package/dist/_members/core/types.d.ts +84 -0
  349. package/dist/_members/core/types.js +7 -0
  350. package/dist/_members/errors/index.d.ts +1 -0
  351. package/dist/_members/errors/index.js +1 -0
  352. package/dist/_members/errors/registry.d.ts +708 -0
  353. package/dist/_members/errors/registry.js +560 -0
  354. package/dist/_members/foundation/codes/index.d.ts +31 -0
  355. package/dist/_members/foundation/codes/index.js +31 -0
  356. package/dist/_members/foundation/index.d.ts +2 -0
  357. package/dist/_members/foundation/index.js +2 -0
  358. package/dist/_members/foundation/primitives/index.d.ts +9 -0
  359. package/dist/_members/foundation/primitives/index.js +5 -0
  360. package/dist/_members/mcp/adapter.d.ts +138 -0
  361. package/dist/_members/mcp/adapter.js +771 -0
  362. package/dist/_members/mcp/burnedNames.d.ts +23 -0
  363. package/dist/_members/mcp/burnedNames.js +73 -0
  364. package/dist/_members/mcp/core.d.ts +158 -0
  365. package/dist/_members/mcp/core.js +390 -0
  366. package/dist/_members/mcp/curation.d.ts +155 -0
  367. package/dist/_members/mcp/curation.js +792 -0
  368. package/dist/_members/mcp/executor.d.ts +60 -0
  369. package/dist/_members/mcp/executor.js +142 -0
  370. package/dist/_members/mcp/format.d.ts +7 -0
  371. package/dist/_members/mcp/format.js +9 -0
  372. package/dist/_members/mcp/generated/catalogPreviews.d.ts +2 -0
  373. package/dist/_members/mcp/generated/catalogPreviews.js +95 -0
  374. package/dist/_members/mcp/generated/harness.d.ts +1 -0
  375. package/dist/_members/mcp/generated/harness.js +81 -0
  376. package/dist/_members/mcp/generated/operations.d.ts +41 -0
  377. package/dist/_members/mcp/generated/operations.js +131 -0
  378. package/dist/_members/mcp/index.d.ts +3 -0
  379. package/dist/_members/mcp/index.js +50 -0
  380. package/dist/_members/mcp/internalLoopTools.d.ts +25 -0
  381. package/dist/_members/mcp/internalLoopTools.js +109 -0
  382. package/dist/_members/mcp/prompts.d.ts +22 -0
  383. package/dist/_members/mcp/prompts.js +45 -0
  384. package/dist/_members/mcp/resources.d.ts +16 -0
  385. package/dist/_members/mcp/resources.js +166 -0
  386. package/dist/_members/mcp/server.d.ts +92 -0
  387. package/dist/_members/mcp/server.js +340 -0
  388. package/dist/_members/mcp/wait.d.ts +37 -0
  389. package/dist/_members/mcp/wait.js +378 -0
  390. package/dist/_members/mcp/x402Meta.d.ts +50 -0
  391. package/dist/_members/mcp/x402Meta.js +66 -0
  392. package/dist/_members/media-model/api.d.ts +877 -0
  393. package/dist/_members/media-model/api.js +175 -0
  394. package/dist/_members/media-model/index.d.ts +1 -0
  395. package/dist/_members/media-model/index.js +1 -0
  396. package/dist/_members/media-model/media-kind.d.ts +36 -0
  397. package/dist/_members/media-model/media-kind.js +116 -0
  398. package/dist/_members/media-model/testing/index.d.ts +2 -0
  399. package/dist/_members/media-model/testing/index.js +1 -0
  400. package/dist/_members/media-model/testing/mediaStoreContract.d.ts +17 -0
  401. package/dist/_members/media-model/testing/mediaStoreContract.js +82 -0
  402. package/dist/_members/media-model/transcriptSearch.d.ts +54 -0
  403. package/dist/_members/media-model/transcriptSearch.js +70 -0
  404. package/dist/_members/media-model/transcriptSearchCases.json +79 -0
  405. package/dist/_members/nle-export/compact-timeline.d.ts +2 -0
  406. package/dist/_members/nle-export/compact-timeline.js +73 -0
  407. package/dist/_members/nle-export/compact-timeline.js.map +1 -0
  408. package/dist/_members/nle-export/composition-to-input.d.ts +2 -0
  409. package/dist/_members/nle-export/composition-to-input.js +147 -0
  410. package/dist/_members/nle-export/composition-to-input.js.map +1 -0
  411. package/dist/_members/nle-export/fcpxml.d.ts +15 -0
  412. package/dist/_members/nle-export/fcpxml.js +159 -0
  413. package/dist/_members/nle-export/fcpxml.js.map +1 -0
  414. package/dist/_members/nle-export/index.d.ts +11 -0
  415. package/dist/_members/nle-export/index.js +12 -0
  416. package/dist/_members/nle-export/index.js.map +1 -0
  417. package/dist/_members/nle-export/premiere.d.ts +2 -0
  418. package/dist/_members/nle-export/premiere.js +161 -0
  419. package/dist/_members/nle-export/premiere.js.map +1 -0
  420. package/dist/_members/nle-export/server/index.d.ts +1 -0
  421. package/dist/_members/nle-export/server/index.js +2 -0
  422. package/dist/_members/nle-export/server/index.js.map +1 -0
  423. package/dist/_members/nle-export/server/pack-zip.d.ts +6 -0
  424. package/dist/_members/nle-export/server/pack-zip.js +38 -0
  425. package/dist/_members/nle-export/server/pack-zip.js.map +1 -0
  426. package/dist/_members/nle-export/srt.d.ts +2 -0
  427. package/dist/_members/nle-export/srt.js +50 -0
  428. package/dist/_members/nle-export/srt.js.map +1 -0
  429. package/dist/_members/nle-export/types.d.ts +183 -0
  430. package/dist/_members/nle-export/types.js +9 -0
  431. package/dist/_members/nle-export/types.js.map +1 -0
  432. package/dist/_members/nle-export/xml/index.d.ts +10 -0
  433. package/dist/_members/nle-export/xml/index.js +11 -0
  434. package/dist/_members/nle-export/xml/index.js.map +1 -0
  435. package/dist/_members/nle-export/xml-utils.d.ts +21 -0
  436. package/dist/_members/nle-export/xml-utils.js +48 -0
  437. package/dist/_members/nle-export/xml-utils.js.map +1 -0
  438. package/dist/_members/perception/activeSpeaker.d.ts +108 -0
  439. package/dist/_members/perception/activeSpeaker.js +103 -0
  440. package/dist/_members/perception/audioQuality.d.ts +78 -0
  441. package/dist/_members/perception/audioQuality.js +76 -0
  442. package/dist/_members/perception/energyBeat.d.ts +95 -0
  443. package/dist/_members/perception/energyBeat.js +99 -0
  444. package/dist/_members/perception/identityMatch.d.ts +80 -0
  445. package/dist/_members/perception/identityMatch.js +91 -0
  446. package/dist/_members/perception/index.d.ts +90 -0
  447. package/dist/_members/perception/index.js +48 -0
  448. package/dist/_members/perception/visualQuality.d.ts +86 -0
  449. package/dist/_members/perception/visualQuality.js +95 -0
  450. package/dist/_members/plane/conformance.d.ts +75 -0
  451. package/dist/_members/plane/conformance.js +90 -0
  452. package/dist/_members/plane/contract.d.ts +55 -0
  453. package/dist/_members/plane/contract.js +49 -0
  454. package/dist/_members/plane/index.d.ts +16 -0
  455. package/dist/_members/plane/index.js +16 -0
  456. package/dist/_members/primitives/backgrounds/animated-bar-chart/config.d.ts +42 -0
  457. package/dist/_members/primitives/backgrounds/animated-bar-chart/index.d.ts +28 -0
  458. package/dist/_members/primitives/backgrounds/animated-line-chart/config.d.ts +42 -0
  459. package/dist/_members/primitives/backgrounds/animated-line-chart/index.d.ts +29 -0
  460. package/dist/_members/primitives/backgrounds/dither-gradient-bg/config.d.ts +30 -0
  461. package/dist/_members/primitives/backgrounds/dither-gradient-bg/index.d.ts +25 -0
  462. package/dist/_members/primitives/backgrounds/dynamic-grid/config.d.ts +24 -0
  463. package/dist/_members/primitives/backgrounds/dynamic-grid/index.d.ts +17 -0
  464. package/dist/_members/primitives/backgrounds/ecosystem-constellation/config.d.ts +21 -0
  465. package/dist/_members/primitives/backgrounds/ecosystem-constellation/index.d.ts +16 -0
  466. package/dist/_members/primitives/backgrounds/index.d.ts +13 -0
  467. package/dist/_members/primitives/backgrounds/index.js +32 -0
  468. package/dist/_members/primitives/backgrounds/index.js.map +1 -0
  469. package/dist/_members/primitives/backgrounds/infinite-marquee/config.d.ts +36 -0
  470. package/dist/_members/primitives/backgrounds/infinite-marquee/index.d.ts +21 -0
  471. package/dist/_members/primitives/backgrounds/mesh-gradient-bg/config.d.ts +21 -0
  472. package/dist/_members/primitives/backgrounds/mesh-gradient-bg/index.d.ts +16 -0
  473. package/dist/_members/primitives/backgrounds/perspective-marquee/config.d.ts +42 -0
  474. package/dist/_members/primitives/backgrounds/perspective-marquee/index.d.ts +23 -0
  475. package/dist/_members/primitives/backgrounds/silk-flow-bg/config.d.ts +36 -0
  476. package/dist/_members/primitives/backgrounds/silk-flow-bg/index.d.ts +30 -0
  477. package/dist/_members/primitives/backgrounds/vector-field/config.d.ts +30 -0
  478. package/dist/_members/primitives/backgrounds/vector-field/index.d.ts +25 -0
  479. package/dist/_members/primitives/backgrounds/volumetric-rays/config.d.ts +33 -0
  480. package/dist/_members/primitives/backgrounds/volumetric-rays/index.d.ts +30 -0
  481. package/dist/_members/primitives/captions/Captions.d.ts +33 -0
  482. package/dist/_members/primitives/captions/index.d.ts +17 -0
  483. package/dist/_members/primitives/captions/index.js +398 -0
  484. package/dist/_members/primitives/captions/index.js.map +1 -0
  485. package/dist/_members/primitives/captions/paginate.d.ts +31 -0
  486. package/dist/_members/primitives/captions/placement.d.ts +35 -0
  487. package/dist/_members/primitives/chunk-2LVE4UIT.js +139 -0
  488. package/dist/_members/primitives/chunk-2LVE4UIT.js.map +1 -0
  489. package/dist/_members/primitives/chunk-3IQUH6KK.js +20 -0
  490. package/dist/_members/primitives/chunk-3IQUH6KK.js.map +1 -0
  491. package/dist/_members/primitives/chunk-3OMURV6Q.js +112 -0
  492. package/dist/_members/primitives/chunk-3OMURV6Q.js.map +1 -0
  493. package/dist/_members/primitives/chunk-4IS6TMEG.js +21 -0
  494. package/dist/_members/primitives/chunk-4IS6TMEG.js.map +1 -0
  495. package/dist/_members/primitives/chunk-5MWGAEGQ.js +1644 -0
  496. package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +1 -0
  497. package/dist/_members/primitives/chunk-7RRPFPQK.js +15 -0
  498. package/dist/_members/primitives/chunk-7RRPFPQK.js.map +1 -0
  499. package/dist/_members/primitives/chunk-DH5TRZK2.js +125 -0
  500. package/dist/_members/primitives/chunk-DH5TRZK2.js.map +1 -0
  501. package/dist/_members/primitives/chunk-E3KNUSFG.js +2337 -0
  502. package/dist/_members/primitives/chunk-E3KNUSFG.js.map +1 -0
  503. package/dist/_members/primitives/chunk-G2B3G4HK.js +47 -0
  504. package/dist/_members/primitives/chunk-G2B3G4HK.js.map +1 -0
  505. package/dist/_members/primitives/chunk-HFPFGZXT.js +1494 -0
  506. package/dist/_members/primitives/chunk-HFPFGZXT.js.map +1 -0
  507. package/dist/_members/primitives/chunk-HIWVFZVH.js +19 -0
  508. package/dist/_members/primitives/chunk-HIWVFZVH.js.map +1 -0
  509. package/dist/_members/primitives/chunk-IDAL6G3Y.js +134 -0
  510. package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +1 -0
  511. package/dist/_members/primitives/chunk-KNC6JP5F.js +34 -0
  512. package/dist/_members/primitives/chunk-KNC6JP5F.js.map +1 -0
  513. package/dist/_members/primitives/chunk-KYRDVZST.js +459 -0
  514. package/dist/_members/primitives/chunk-KYRDVZST.js.map +1 -0
  515. package/dist/_members/primitives/chunk-LWLHS2NS.js +3410 -0
  516. package/dist/_members/primitives/chunk-LWLHS2NS.js.map +1 -0
  517. package/dist/_members/primitives/chunk-QAQ3P7DR.js +8855 -0
  518. package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +1 -0
  519. package/dist/_members/primitives/chunk-ROV2ODWC.js +81 -0
  520. package/dist/_members/primitives/chunk-ROV2ODWC.js.map +1 -0
  521. package/dist/_members/primitives/chunk-TCRC2FH3.js +183 -0
  522. package/dist/_members/primitives/chunk-TCRC2FH3.js.map +1 -0
  523. package/dist/_members/primitives/chunk-US4YEDAA.js +96 -0
  524. package/dist/_members/primitives/chunk-US4YEDAA.js.map +1 -0
  525. package/dist/_members/primitives/chunk-UVKRO5ER.js +13 -0
  526. package/dist/_members/primitives/chunk-UVKRO5ER.js.map +1 -0
  527. package/dist/_members/primitives/chunk-W4EIIF2I.js +10 -0
  528. package/dist/_members/primitives/chunk-W4EIIF2I.js.map +1 -0
  529. package/dist/_members/primitives/chunk-WPGKIPCO.js +3563 -0
  530. package/dist/_members/primitives/chunk-WPGKIPCO.js.map +1 -0
  531. package/dist/_members/primitives/chunk-WZFLEGMD.js +1435 -0
  532. package/dist/_members/primitives/chunk-WZFLEGMD.js.map +1 -0
  533. package/dist/_members/primitives/chunk-XHU3WBEI.js +33 -0
  534. package/dist/_members/primitives/chunk-XHU3WBEI.js.map +1 -0
  535. package/dist/_members/primitives/chunk-YN7WTZZ7.js +46 -0
  536. package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +1 -0
  537. package/dist/_members/primitives/effects/blur/config.d.ts +24 -0
  538. package/dist/_members/primitives/effects/blur/index.d.ts +29 -0
  539. package/dist/_members/primitives/effects/color-grade/config.d.ts +30 -0
  540. package/dist/_members/primitives/effects/color-grade/index.d.ts +35 -0
  541. package/dist/_members/primitives/effects/grain/config.d.ts +21 -0
  542. package/dist/_members/primitives/effects/grain/index.d.ts +21 -0
  543. package/dist/_members/primitives/effects/index.d.ts +12 -0
  544. package/dist/_members/primitives/effects/index.js +30 -0
  545. package/dist/_members/primitives/effects/index.js.map +1 -0
  546. package/dist/_members/primitives/effects/parallax/config.d.ts +21 -0
  547. package/dist/_members/primitives/effects/parallax/index.d.ts +25 -0
  548. package/dist/_members/primitives/effects/particles/config.d.ts +33 -0
  549. package/dist/_members/primitives/effects/particles/index.d.ts +31 -0
  550. package/dist/_members/primitives/effects/pulsing-indicator/config.d.ts +24 -0
  551. package/dist/_members/primitives/effects/pulsing-indicator/index.d.ts +19 -0
  552. package/dist/_members/primitives/effects/spotlight-card/config.d.ts +42 -0
  553. package/dist/_members/primitives/effects/spotlight-card/index.d.ts +25 -0
  554. package/dist/_members/primitives/effects/spring-pop-in/config.d.ts +27 -0
  555. package/dist/_members/primitives/effects/spring-pop-in/index.d.ts +22 -0
  556. package/dist/_members/primitives/effects/success-confetti/config.d.ts +42 -0
  557. package/dist/_members/primitives/effects/success-confetti/index.d.ts +23 -0
  558. package/dist/_members/primitives/effects/vignette/config.d.ts +21 -0
  559. package/dist/_members/primitives/effects/vignette/index.d.ts +23 -0
  560. package/dist/_members/primitives/hero-text/HeroText.d.ts +29 -0
  561. package/dist/_members/primitives/hero-text/config.d.ts +46 -0
  562. package/dist/_members/primitives/hero-text/index.d.ts +18 -0
  563. package/dist/_members/primitives/hero-text/index.js +14 -0
  564. package/dist/_members/primitives/hero-text/index.js.map +1 -0
  565. package/dist/_members/primitives/index.d.ts +21 -0
  566. package/dist/_members/primitives/index.js +64 -0
  567. package/dist/_members/primitives/index.js.map +1 -0
  568. package/dist/_members/primitives/layouts/chat-to-preview-layout/config.d.ts +21 -0
  569. package/dist/_members/primitives/layouts/chat-to-preview-layout/index.d.ts +19 -0
  570. package/dist/_members/primitives/layouts/index.d.ts +9 -0
  571. package/dist/_members/primitives/layouts/index.js +24 -0
  572. package/dist/_members/primitives/layouts/index.js.map +1 -0
  573. package/dist/_members/primitives/layouts/infinite-bento-pan/config.d.ts +18 -0
  574. package/dist/_members/primitives/layouts/infinite-bento-pan/index.d.ts +15 -0
  575. package/dist/_members/primitives/layouts/letterbox/config.d.ts +18 -0
  576. package/dist/_members/primitives/layouts/letterbox/index.d.ts +23 -0
  577. package/dist/_members/primitives/layouts/photo-grid/config.d.ts +21 -0
  578. package/dist/_members/primitives/layouts/photo-grid/index.d.ts +25 -0
  579. package/dist/_members/primitives/layouts/picture-in-picture/config.d.ts +21 -0
  580. package/dist/_members/primitives/layouts/picture-in-picture/index.d.ts +32 -0
  581. package/dist/_members/primitives/layouts/split-screen/config.d.ts +15 -0
  582. package/dist/_members/primitives/layouts/split-screen/index.d.ts +22 -0
  583. package/dist/_members/primitives/layouts/staggered-bento-grid/config.d.ts +66 -0
  584. package/dist/_members/primitives/layouts/staggered-bento-grid/index.d.ts +24 -0
  585. package/dist/_members/primitives/lib/easings.d.ts +47 -0
  586. package/dist/_members/primitives/lib/easings.js +26 -0
  587. package/dist/_members/primitives/lib/easings.js.map +1 -0
  588. package/dist/_members/primitives/lib/index.d.ts +8 -0
  589. package/dist/_members/primitives/lib/index.js +74 -0
  590. package/dist/_members/primitives/lib/index.js.map +1 -0
  591. package/dist/_members/primitives/lib/palette.d.ts +55 -0
  592. package/dist/_members/primitives/lib/palette.js +72 -0
  593. package/dist/_members/primitives/lib/palette.js.map +1 -0
  594. package/dist/_members/primitives/lib/preview.d.ts +36 -0
  595. package/dist/_members/primitives/lib/preview.js +8 -0
  596. package/dist/_members/primitives/lib/preview.js.map +1 -0
  597. package/dist/_members/primitives/lib/schema.d.ts +53 -0
  598. package/dist/_members/primitives/lib/schema.js +12 -0
  599. package/dist/_members/primitives/lib/schema.js.map +1 -0
  600. package/dist/_members/primitives/lib/seeded-random.d.ts +33 -0
  601. package/dist/_members/primitives/lib/seeded-random.js +14 -0
  602. package/dist/_members/primitives/lib/seeded-random.js.map +1 -0
  603. package/dist/_members/primitives/lib/text/contrast.d.ts +27 -0
  604. package/dist/_members/primitives/lib/text/contrast.js +12 -0
  605. package/dist/_members/primitives/lib/text/contrast.js.map +1 -0
  606. package/dist/_members/primitives/lib/text/fill.d.ts +8 -0
  607. package/dist/_members/primitives/lib/text/fill.js +8 -0
  608. package/dist/_members/primitives/lib/text/fill.js.map +1 -0
  609. package/dist/_members/primitives/lib/text/fitText.d.ts +62 -0
  610. package/dist/_members/primitives/lib/text/fitText.js +10 -0
  611. package/dist/_members/primitives/lib/text/fitText.js.map +1 -0
  612. package/dist/_members/primitives/lib/text/marker.d.ts +15 -0
  613. package/dist/_members/primitives/lib/text/marker.js +8 -0
  614. package/dist/_members/primitives/lib/text/marker.js.map +1 -0
  615. package/dist/_members/primitives/lib/text/motion.d.ts +57 -0
  616. package/dist/_members/primitives/lib/text/motion.js +16 -0
  617. package/dist/_members/primitives/lib/text/motion.js.map +1 -0
  618. package/dist/_members/primitives/lib/text/recolor.d.ts +12 -0
  619. package/dist/_members/primitives/lib/text/recolor.js +8 -0
  620. package/dist/_members/primitives/lib/text/recolor.js.map +1 -0
  621. package/dist/_members/primitives/lib/text/spec.d.ts +82 -0
  622. package/dist/_members/primitives/lib/text/spec.js +1 -0
  623. package/dist/_members/primitives/lib/text/spec.js.map +1 -0
  624. package/dist/_members/primitives/lib/text/stage.d.ts +23 -0
  625. package/dist/_members/primitives/lib/text/stage.js +8 -0
  626. package/dist/_members/primitives/lib/text/stage.js.map +1 -0
  627. package/dist/_members/primitives/lib/text/typeface.d.ts +16 -0
  628. package/dist/_members/primitives/lib/text/typeface.js +8 -0
  629. package/dist/_members/primitives/lib/text/typeface.js.map +1 -0
  630. package/dist/_members/primitives/lib/tokens.d.ts +109 -0
  631. package/dist/_members/primitives/lib/tokens.js +24 -0
  632. package/dist/_members/primitives/lib/tokens.js.map +1 -0
  633. package/dist/_members/primitives/lib/types.d.ts +200 -0
  634. package/dist/_members/primitives/lib/types.js +1 -0
  635. package/dist/_members/primitives/lib/types.js.map +1 -0
  636. package/dist/_members/primitives/params-required.json +153 -0
  637. package/dist/_members/primitives/scenes/changelog-bite/config.d.ts +36 -0
  638. package/dist/_members/primitives/scenes/changelog-bite/index.d.ts +28 -0
  639. package/dist/_members/primitives/scenes/hero-device-assemble/config.d.ts +24 -0
  640. package/dist/_members/primitives/scenes/hero-device-assemble/index.d.ts +16 -0
  641. package/dist/_members/primitives/scenes/index.d.ts +9 -0
  642. package/dist/_members/primitives/scenes/index.js +25 -0
  643. package/dist/_members/primitives/scenes/index.js.map +1 -0
  644. package/dist/_members/primitives/scenes/landing-code-showcase/config.d.ts +15 -0
  645. package/dist/_members/primitives/scenes/landing-code-showcase/index.d.ts +15 -0
  646. package/dist/_members/primitives/scenes/landing-code-showcase/timeline.d.ts +15 -0
  647. package/dist/_members/primitives/scenes/live-code-compilation/config.d.ts +15 -0
  648. package/dist/_members/primitives/scenes/live-code-compilation/index.d.ts +14 -0
  649. package/dist/_members/primitives/scenes/pricing-tier-focus/config.d.ts +21 -0
  650. package/dist/_members/primitives/scenes/pricing-tier-focus/index.d.ts +15 -0
  651. package/dist/_members/primitives/scenes/product-launch-trailer/config.d.ts +33 -0
  652. package/dist/_members/primitives/scenes/product-launch-trailer/index.d.ts +20 -0
  653. package/dist/_members/primitives/scenes/terminal-to-browser-deploy/config.d.ts +21 -0
  654. package/dist/_members/primitives/scenes/terminal-to-browser-deploy/index.d.ts +15 -0
  655. package/dist/_members/primitives/subject-foreground/SubjectForeground.d.ts +43 -0
  656. package/dist/_members/primitives/subject-foreground/index.d.ts +23 -0
  657. package/dist/_members/primitives/subject-foreground/index.js +30 -0
  658. package/dist/_members/primitives/subject-foreground/index.js.map +1 -0
  659. package/dist/_members/primitives/text/blur-reveal/config.d.ts +30 -0
  660. package/dist/_members/primitives/text/blur-reveal/index.d.ts +20 -0
  661. package/dist/_members/primitives/text/cinematic-title/config.d.ts +87 -0
  662. package/dist/_members/primitives/text/cinematic-title/index.d.ts +31 -0
  663. package/dist/_members/primitives/text/index.d.ts +23 -0
  664. package/dist/_members/primitives/text/index.js +57 -0
  665. package/dist/_members/primitives/text/index.js.map +1 -0
  666. package/dist/_members/primitives/text/inline-highlight/config.d.ts +36 -0
  667. package/dist/_members/primitives/text/inline-highlight/index.d.ts +24 -0
  668. package/dist/_members/primitives/text/karaoke/config.d.ts +108 -0
  669. package/dist/_members/primitives/text/karaoke/index.d.ts +32 -0
  670. package/dist/_members/primitives/text/kinetic-type/config.d.ts +60 -0
  671. package/dist/_members/primitives/text/kinetic-type/index.d.ts +29 -0
  672. package/dist/_members/primitives/text/lower-third/config.d.ts +84 -0
  673. package/dist/_members/primitives/text/lower-third/index.d.ts +30 -0
  674. package/dist/_members/primitives/text/marker-highlight/config.d.ts +39 -0
  675. package/dist/_members/primitives/text/marker-highlight/index.d.ts +24 -0
  676. package/dist/_members/primitives/text/masked-slide-reveal/config.d.ts +30 -0
  677. package/dist/_members/primitives/text/masked-slide-reveal/index.d.ts +19 -0
  678. package/dist/_members/primitives/text/matrix-decode/config.d.ts +33 -0
  679. package/dist/_members/primitives/text/matrix-decode/index.d.ts +21 -0
  680. package/dist/_members/primitives/text/quote-card/config.d.ts +21 -0
  681. package/dist/_members/primitives/text/quote-card/index.d.ts +23 -0
  682. package/dist/_members/primitives/text/rgb-glitch-text/config.d.ts +39 -0
  683. package/dist/_members/primitives/text/rgb-glitch-text/index.d.ts +27 -0
  684. package/dist/_members/primitives/text/shimmer-sweep/config.d.ts +30 -0
  685. package/dist/_members/primitives/text/shimmer-sweep/index.d.ts +21 -0
  686. package/dist/_members/primitives/text/slot-machine-roll/config.d.ts +30 -0
  687. package/dist/_members/primitives/text/slot-machine-roll/index.d.ts +19 -0
  688. package/dist/_members/primitives/text/staggered-fade-up/config.d.ts +39 -0
  689. package/dist/_members/primitives/text/staggered-fade-up/index.d.ts +26 -0
  690. package/dist/_members/primitives/text/stat-counter/config.d.ts +33 -0
  691. package/dist/_members/primitives/text/stat-counter/index.d.ts +31 -0
  692. package/dist/_members/primitives/text/strikethrough-replace/config.d.ts +33 -0
  693. package/dist/_members/primitives/text/strikethrough-replace/index.d.ts +21 -0
  694. package/dist/_members/primitives/text/text-effect/config.d.ts +24 -0
  695. package/dist/_members/primitives/text/text-effect/index.d.ts +29 -0
  696. package/dist/_members/primitives/text/text-fade-replace/config.d.ts +30 -0
  697. package/dist/_members/primitives/text/text-fade-replace/index.d.ts +19 -0
  698. package/dist/_members/primitives/text/token-stream/config.d.ts +21 -0
  699. package/dist/_members/primitives/text/token-stream/index.d.ts +25 -0
  700. package/dist/_members/primitives/text/tracking-in/config.d.ts +33 -0
  701. package/dist/_members/primitives/text/tracking-in/index.d.ts +21 -0
  702. package/dist/_members/primitives/text/typewriter/config.d.ts +36 -0
  703. package/dist/_members/primitives/text/typewriter/index.d.ts +26 -0
  704. package/dist/_members/primitives/transitions/chromatic-aberration-wipe/config.d.ts +15 -0
  705. package/dist/_members/primitives/transitions/chromatic-aberration-wipe/index.d.ts +19 -0
  706. package/dist/_members/primitives/transitions/code-diff-wipe/config.d.ts +36 -0
  707. package/dist/_members/primitives/transitions/code-diff-wipe/index.d.ts +21 -0
  708. package/dist/_members/primitives/transitions/directional-wipe/config.d.ts +12 -0
  709. package/dist/_members/primitives/transitions/directional-wipe/index.d.ts +17 -0
  710. package/dist/_members/primitives/transitions/frosted-glass-wipe/config.d.ts +12 -0
  711. package/dist/_members/primitives/transitions/frosted-glass-wipe/index.d.ts +17 -0
  712. package/dist/_members/primitives/transitions/glitch-cut/config.d.ts +15 -0
  713. package/dist/_members/primitives/transitions/glitch-cut/index.d.ts +11 -0
  714. package/dist/_members/primitives/transitions/grid-pixelate-wipe/config.d.ts +21 -0
  715. package/dist/_members/primitives/transitions/grid-pixelate-wipe/index.d.ts +24 -0
  716. package/dist/_members/primitives/transitions/index.d.ts +17 -0
  717. package/dist/_members/primitives/transitions/index.js +67 -0
  718. package/dist/_members/primitives/transitions/index.js.map +1 -0
  719. package/dist/_members/primitives/transitions/ink-wipe/config.d.ts +15 -0
  720. package/dist/_members/primitives/transitions/ink-wipe/index.d.ts +13 -0
  721. package/dist/_members/primitives/transitions/kinetic-type-mask/config.d.ts +15 -0
  722. package/dist/_members/primitives/transitions/kinetic-type-mask/index.d.ts +20 -0
  723. package/dist/_members/primitives/transitions/light-leak/config.d.ts +15 -0
  724. package/dist/_members/primitives/transitions/light-leak/index.d.ts +11 -0
  725. package/dist/_members/primitives/transitions/luma-matte/config.d.ts +12 -0
  726. package/dist/_members/primitives/transitions/luma-matte/index.d.ts +11 -0
  727. package/dist/_members/primitives/transitions/morph/config.d.ts +12 -0
  728. package/dist/_members/primitives/transitions/morph/index.d.ts +11 -0
  729. package/dist/_members/primitives/transitions/spatial-push/config.d.ts +12 -0
  730. package/dist/_members/primitives/transitions/spatial-push/index.d.ts +17 -0
  731. package/dist/_members/primitives/transitions/swipe-transition-wipe/config.d.ts +18 -0
  732. package/dist/_members/primitives/transitions/swipe-transition-wipe/index.d.ts +22 -0
  733. package/dist/_members/primitives/transitions/zoom-through/config.d.ts +39 -0
  734. package/dist/_members/primitives/transitions/zoom-through/index.d.ts +12 -0
  735. package/dist/_members/primitives/transitions/zoom-through-transition/config.d.ts +24 -0
  736. package/dist/_members/primitives/transitions/zoom-through-transition/index.d.ts +20 -0
  737. package/dist/_members/primitives/ui-blocks/ai-generate-overlay/config.d.ts +48 -0
  738. package/dist/_members/primitives/ui-blocks/ai-generate-overlay/index.d.ts +25 -0
  739. package/dist/_members/primitives/ui-blocks/ai-generation-canvas/config.d.ts +21 -0
  740. package/dist/_members/primitives/ui-blocks/ai-generation-canvas/index.d.ts +16 -0
  741. package/dist/_members/primitives/ui-blocks/badge-pop/config.d.ts +27 -0
  742. package/dist/_members/primitives/ui-blocks/badge-pop/index.d.ts +21 -0
  743. package/dist/_members/primitives/ui-blocks/before-after-slider/config.d.ts +21 -0
  744. package/dist/_members/primitives/ui-blocks/before-after-slider/index.d.ts +20 -0
  745. package/dist/_members/primitives/ui-blocks/benchmark-bars/config.d.ts +86 -0
  746. package/dist/_members/primitives/ui-blocks/benchmark-bars/index.d.ts +25 -0
  747. package/dist/_members/primitives/ui-blocks/bounding-box-selector/config.d.ts +27 -0
  748. package/dist/_members/primitives/ui-blocks/bounding-box-selector/index.d.ts +20 -0
  749. package/dist/_members/primitives/ui-blocks/browser-flow/config.d.ts +15 -0
  750. package/dist/_members/primitives/ui-blocks/browser-flow/index.d.ts +15 -0
  751. package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/config.d.ts +36 -0
  752. package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/index.d.ts +32 -0
  753. package/dist/_members/primitives/ui-blocks/chat-exchange/config.d.ts +27 -0
  754. package/dist/_members/primitives/ui-blocks/chat-exchange/index.d.ts +20 -0
  755. package/dist/_members/primitives/ui-blocks/code-accordion/config.d.ts +42 -0
  756. package/dist/_members/primitives/ui-blocks/code-accordion/index.d.ts +23 -0
  757. package/dist/_members/primitives/ui-blocks/context-meter/config.d.ts +24 -0
  758. package/dist/_members/primitives/ui-blocks/context-meter/index.d.ts +20 -0
  759. package/dist/_members/primitives/ui-blocks/cursor-flow/config.d.ts +84 -0
  760. package/dist/_members/primitives/ui-blocks/cursor-flow/index.d.ts +29 -0
  761. package/dist/_members/primitives/ui-blocks/dashboard-populate/config.d.ts +18 -0
  762. package/dist/_members/primitives/ui-blocks/dashboard-populate/index.d.ts +15 -0
  763. package/dist/_members/primitives/ui-blocks/data-flow-pipes/config.d.ts +120 -0
  764. package/dist/_members/primitives/ui-blocks/data-flow-pipes/index.d.ts +34 -0
  765. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/config.d.ts +24 -0
  766. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/index.d.ts +19 -0
  767. package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/config.d.ts +24 -0
  768. package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/index.d.ts +17 -0
  769. package/dist/_members/primitives/ui-blocks/eval-scorecard/config.d.ts +48 -0
  770. package/dist/_members/primitives/ui-blocks/eval-scorecard/index.d.ts +23 -0
  771. package/dist/_members/primitives/ui-blocks/glass-code-block/config.d.ts +39 -0
  772. package/dist/_members/primitives/ui-blocks/glass-code-block/index.d.ts +22 -0
  773. package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/config.d.ts +141 -0
  774. package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/index.d.ts +32 -0
  775. package/dist/_members/primitives/ui-blocks/index.d.ts +33 -0
  776. package/dist/_members/primitives/ui-blocks/index.js +76 -0
  777. package/dist/_members/primitives/ui-blocks/index.js.map +1 -0
  778. package/dist/_members/primitives/ui-blocks/metric-gauge/config.d.ts +46 -0
  779. package/dist/_members/primitives/ui-blocks/metric-gauge/index.d.ts +23 -0
  780. package/dist/_members/primitives/ui-blocks/morphing-modal/config.d.ts +141 -0
  781. package/dist/_members/primitives/ui-blocks/morphing-modal/index.d.ts +35 -0
  782. package/dist/_members/primitives/ui-blocks/pipeline-journey/config.d.ts +18 -0
  783. package/dist/_members/primitives/ui-blocks/pipeline-journey/index.d.ts +15 -0
  784. package/dist/_members/primitives/ui-blocks/progress-steps/config.d.ts +51 -0
  785. package/dist/_members/primitives/ui-blocks/progress-steps/index.d.ts +22 -0
  786. package/dist/_members/primitives/ui-blocks/reasoning-trace/config.d.ts +21 -0
  787. package/dist/_members/primitives/ui-blocks/reasoning-trace/index.d.ts +18 -0
  788. package/dist/_members/primitives/ui-blocks/simulated-cursor/config.d.ts +69 -0
  789. package/dist/_members/primitives/ui-blocks/simulated-cursor/index.d.ts +23 -0
  790. package/dist/_members/primitives/ui-blocks/terminal-simulator/config.d.ts +63 -0
  791. package/dist/_members/primitives/ui-blocks/terminal-simulator/index.d.ts +39 -0
  792. package/dist/_members/primitives/ui-blocks/toast-notification/config.d.ts +33 -0
  793. package/dist/_members/primitives/ui-blocks/toast-notification/index.d.ts +21 -0
  794. package/dist/_members/primitives/ui-blocks/tool-call-stack/config.d.ts +54 -0
  795. package/dist/_members/primitives/ui-blocks/tool-call-stack/index.d.ts +20 -0
  796. package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/config.d.ts +33 -0
  797. package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/index.d.ts +20 -0
  798. package/dist/_members/primitives/ui-blocks/visual-docs-snippet/config.d.ts +90 -0
  799. package/dist/_members/primitives/ui-blocks/visual-docs-snippet/index.d.ts +27 -0
  800. package/dist/_members/primitives/ui-blocks/voice-waveform/config.d.ts +24 -0
  801. package/dist/_members/primitives/ui-blocks/voice-waveform/index.d.ts +20 -0
  802. package/dist/_members/primitives/version-map.json +105 -0
  803. package/dist/_members/primitives/workspace.d.ts +51 -0
  804. package/dist/_members/primitives/workspace.js +60 -0
  805. package/dist/_members/primitives/workspace.js.map +1 -0
  806. package/dist/_members/render-harness/cardRender.d.ts +64 -0
  807. package/dist/_members/render-harness/cardRender.d.ts.map +1 -0
  808. package/dist/_members/render-harness/contractRender.d.ts +43 -0
  809. package/dist/_members/render-harness/contractRender.d.ts.map +1 -0
  810. package/dist/_members/render-harness/extractSegments.d.ts +53 -0
  811. package/dist/_members/render-harness/extractSegments.d.ts.map +1 -0
  812. package/dist/_members/render-harness/index.d.ts +30 -0
  813. package/dist/_members/render-harness/index.d.ts.map +1 -0
  814. package/dist/_members/render-harness/localRender.d.ts +167 -0
  815. package/dist/_members/render-harness/localRender.d.ts.map +1 -0
  816. package/dist/_members/render-harness/materializeSources.d.ts +29 -0
  817. package/dist/_members/render-harness/materializeSources.d.ts.map +1 -0
  818. package/dist/_members/render-harness/mediaServer.d.ts +22 -0
  819. package/dist/_members/render-harness/mediaServer.d.ts.map +1 -0
  820. package/dist/_members/render-harness/renderInputAssets.d.ts +63 -0
  821. package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -0
  822. package/dist/_members/render-harness/resolveAssets.d.ts +33 -0
  823. package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -0
  824. package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts +23 -0
  825. package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts.map +1 -0
  826. package/dist/account-model/testing.d.ts +1 -0
  827. package/dist/account-model/testing.js +145 -0
  828. package/dist/account-model/types.d.ts +1 -0
  829. package/dist/account-model/types.js +0 -0
  830. package/dist/account-model/validators.d.ts +1 -0
  831. package/dist/account-model/validators.js +26 -0
  832. package/dist/account-model.d.ts +1 -0
  833. package/dist/account-model.js +26 -0
  834. package/dist/animate.d.ts +1 -0
  835. package/dist/animate.js +79412 -0
  836. package/dist/authoring/build-tools.d.ts +1 -0
  837. package/dist/authoring/build-tools.js +29 -0
  838. package/dist/authoring/capabilities.d.ts +1 -0
  839. package/dist/authoring/capabilities.js +11 -0
  840. package/dist/authoring/composer.d.ts +1 -0
  841. package/dist/authoring/composer.js +53 -0
  842. package/dist/authoring/context.d.ts +1 -0
  843. package/dist/authoring/context.js +14 -0
  844. package/dist/authoring/models.d.ts +1 -0
  845. package/dist/authoring/models.js +14 -0
  846. package/dist/authoring/pipelineTrace.d.ts +1 -0
  847. package/dist/authoring/pipelineTrace.js +7 -0
  848. package/dist/authoring/prompts.d.ts +1 -0
  849. package/dist/authoring/prompts.js +29 -0
  850. package/dist/authoring/providers.d.ts +1 -0
  851. package/dist/authoring/providers.js +99 -0
  852. package/dist/authoring/resource-routing.d.ts +1 -0
  853. package/dist/authoring/resource-routing.js +206 -0
  854. package/dist/authoring/resources.d.ts +1 -0
  855. package/dist/authoring/resources.js +35 -0
  856. package/dist/authoring/tools.d.ts +1 -0
  857. package/dist/authoring/tools.js +29 -0
  858. package/dist/authoring/transpileComponent.d.ts +1 -0
  859. package/dist/authoring/transpileComponent.js +2248 -0
  860. package/dist/authoring/transpileHelper.d.ts +1 -0
  861. package/dist/authoring/transpileHelper.js +9 -0
  862. package/dist/authoring/types.d.ts +1 -0
  863. package/dist/authoring/types.js +0 -0
  864. package/dist/authoring.d.ts +1 -0
  865. package/dist/authoring.js +1295 -0
  866. package/dist/brand-derivation/constants.d.ts +1 -0
  867. package/dist/brand-derivation/constants.js +11 -0
  868. package/dist/brand-derivation.d.ts +1 -0
  869. package/dist/brand-derivation.js +23 -0
  870. package/dist/chunk-2ESYSVXG.js +48 -0
  871. package/dist/chunk-37NJ27UU.js +501 -0
  872. package/dist/chunk-52AHXNKM.js +435 -0
  873. package/dist/chunk-5I7VDCAC.js +15647 -0
  874. package/dist/chunk-6CMVBTTP.js +1933 -0
  875. package/dist/chunk-6EQXLEP6.js +194 -0
  876. package/dist/chunk-6QJ3V3VS.js +1444 -0
  877. package/dist/chunk-7DHP4ESU.js +138 -0
  878. package/dist/chunk-7GISRVON.js +14176 -0
  879. package/dist/chunk-7PA7FGLD.js +609 -0
  880. package/dist/chunk-ATAF24QG.js +735 -0
  881. package/dist/chunk-AWT3P5ZN.js +1609 -0
  882. package/dist/chunk-B4VMU2IJ.js +211 -0
  883. package/dist/chunk-BDMTUEEZ.js +19 -0
  884. package/dist/chunk-BRKJKB33.js +683 -0
  885. package/dist/chunk-CX2IIQ4R.js +111 -0
  886. package/dist/chunk-D2EG7J7X.js +31 -0
  887. package/dist/chunk-DENF4TPI.js +249 -0
  888. package/dist/chunk-DIBOJJMU.js +16838 -0
  889. package/dist/chunk-DLF4WVSE.js +9 -0
  890. package/dist/chunk-DSNG6WLU.js +82 -0
  891. package/dist/chunk-EA6MYCYW.js +135 -0
  892. package/dist/chunk-EAUSEGB7.js +420 -0
  893. package/dist/chunk-ELLSET2N.js +195 -0
  894. package/dist/chunk-EMGFZ3PR.js +14 -0
  895. package/dist/chunk-FUWJOVVK.js +3633 -0
  896. package/dist/chunk-G3PBH53P.js +85 -0
  897. package/dist/chunk-G75E7YA4.js +11883 -0
  898. package/dist/chunk-GBRNYH7W.js +72 -0
  899. package/dist/chunk-GH27OS5S.js +104 -0
  900. package/dist/chunk-GULDS3VE.js +41 -0
  901. package/dist/chunk-H5LMJKZU.js +0 -0
  902. package/dist/chunk-HI4UTTPS.js +954 -0
  903. package/dist/chunk-JCZQT7K3.js +3266 -0
  904. package/dist/chunk-JD77Y2WM.js +3423 -0
  905. package/dist/chunk-JF4JJAFP.js +10 -0
  906. package/dist/chunk-JMURQODM.js +438 -0
  907. package/dist/chunk-JOURGVOR.js +27 -0
  908. package/dist/chunk-JRQVPFLF.js +459 -0
  909. package/dist/chunk-KF5ETMKB.js +544 -0
  910. package/dist/chunk-KYRDKK2D.js +47 -0
  911. package/dist/chunk-LD5ZOUFT.js +55 -0
  912. package/dist/chunk-M3I5LMAB.js +426 -0
  913. package/dist/chunk-MC5DLSEV.js +202 -0
  914. package/dist/chunk-MCBUX5XV.js +70 -0
  915. package/dist/chunk-MFHXCHRI.js +33 -0
  916. package/dist/chunk-MMEJ3Y7E.js +327 -0
  917. package/dist/chunk-MVEE6HEC.js +8512 -0
  918. package/dist/chunk-N67PDTKQ.js +1419 -0
  919. package/dist/chunk-NDKERSXY.js +1296 -0
  920. package/dist/chunk-NV4I6GJV.js +1091 -0
  921. package/dist/chunk-OIRUO5P7.js +397 -0
  922. package/dist/chunk-P43IE4WB.js +181 -0
  923. package/dist/chunk-QGAWDLYX.js +92 -0
  924. package/dist/chunk-QH3YI3ND.js +100 -0
  925. package/dist/chunk-QLAQHR3L.js +254 -0
  926. package/dist/chunk-RHVLQNYF.js +20 -0
  927. package/dist/chunk-S3P5BFFL.js +2265 -0
  928. package/dist/chunk-SIGGQRY2.js +8483 -0
  929. package/dist/chunk-TULRCY6U.js +729 -0
  930. package/dist/chunk-TWQOKKAF.js +859 -0
  931. package/dist/chunk-U3JPILZS.js +15 -0
  932. package/dist/chunk-U4V4FZGE.js +20 -0
  933. package/dist/chunk-UEI3NLNK.js +127 -0
  934. package/dist/chunk-V43Y7IE4.js +3621 -0
  935. package/dist/chunk-VIVQHIGZ.js +4319 -0
  936. package/dist/chunk-W35ZMOXB.js +23 -0
  937. package/dist/chunk-WB2VFDQZ.js +58 -0
  938. package/dist/chunk-WREYUH2E.js +104 -0
  939. package/dist/chunk-WZTTZHNR.js +3339 -0
  940. package/dist/chunk-XELS2BGA.js +13 -0
  941. package/dist/chunk-XLIPPLG3.js +18 -0
  942. package/dist/chunk-YA3OR2KK.js +249 -0
  943. package/dist/chunk-ZE76SSRT.js +358 -0
  944. package/dist/chunk-ZFEXATWN.js +46 -0
  945. package/dist/chunk-ZSZABOE5.js +425 -0
  946. package/dist/compose/renderer.d.ts +1 -0
  947. package/dist/compose/renderer.js +173 -0
  948. package/dist/compose.d.ts +1 -0
  949. package/dist/compose.js +76 -0
  950. package/dist/composition/audio.d.ts +1 -0
  951. package/dist/composition/audio.js +63 -0
  952. package/dist/composition/autozoom.d.ts +1 -0
  953. package/dist/composition/autozoom.js +76 -0
  954. package/dist/composition/brand-kit.d.ts +1 -0
  955. package/dist/composition/brand-kit.js +34 -0
  956. package/dist/composition/brief.d.ts +1 -0
  957. package/dist/composition/brief.js +112 -0
  958. package/dist/composition/depth.d.ts +1 -0
  959. package/dist/composition/depth.js +12 -0
  960. package/dist/composition/fixtures.d.ts +1 -0
  961. package/dist/composition/fixtures.js +154 -0
  962. package/dist/composition/fonts.d.ts +1 -0
  963. package/dist/composition/fonts.js +74 -0
  964. package/dist/composition/graphics-plan.d.ts +1 -0
  965. package/dist/composition/graphics-plan.js +400 -0
  966. package/dist/composition/invariants.d.ts +1 -0
  967. package/dist/composition/invariants.js +49 -0
  968. package/dist/composition/ops.d.ts +1 -0
  969. package/dist/composition/ops.js +53 -0
  970. package/dist/composition/primitive-catalog.d.ts +1 -0
  971. package/dist/composition/primitive-catalog.js +60 -0
  972. package/dist/composition/projection.d.ts +1 -0
  973. package/dist/composition/projection.js +119 -0
  974. package/dist/composition/reframe/coverage.d.ts +1 -0
  975. package/dist/composition/reframe/coverage.js +20 -0
  976. package/dist/composition/reframe/kenBurns.d.ts +1 -0
  977. package/dist/composition/reframe/kenBurns.js +53 -0
  978. package/dist/composition/reframe/shotScale.d.ts +1 -0
  979. package/dist/composition/reframe/shotScale.js +25 -0
  980. package/dist/composition/reframe/trajectory.d.ts +1 -0
  981. package/dist/composition/reframe/trajectory.js +17 -0
  982. package/dist/composition/reframe.d.ts +1 -0
  983. package/dist/composition/reframe.js +39 -0
  984. package/dist/composition/timeline.d.ts +1 -0
  985. package/dist/composition/timeline.js +70 -0
  986. package/dist/composition/types.d.ts +1 -0
  987. package/dist/composition/types.js +0 -0
  988. package/dist/composition/validators/graphic-kinds.d.ts +1 -0
  989. package/dist/composition/validators/graphic-kinds.js +9 -0
  990. package/dist/composition/validators.d.ts +1 -0
  991. package/dist/composition/validators.js +180 -0
  992. package/dist/composition-ops.d.ts +1 -0
  993. package/dist/composition-ops.js +882 -0
  994. package/dist/composition.d.ts +1 -0
  995. package/dist/composition.js +433 -0
  996. package/dist/context-CEAKQ5T7.js +14 -0
  997. package/dist/core/render.d.ts +1 -0
  998. package/dist/core/render.js +105 -0
  999. package/dist/core/select.d.ts +1 -0
  1000. package/dist/core/select.js +42 -0
  1001. package/dist/core/types.d.ts +1 -0
  1002. package/dist/core/types.js +0 -0
  1003. package/dist/core.d.ts +1 -0
  1004. package/dist/core.js +38 -0
  1005. package/dist/dist-LAJ2363K.js +545 -0
  1006. package/dist/errors.d.ts +1 -0
  1007. package/dist/errors.js +17 -0
  1008. package/dist/foundation/codes.d.ts +1 -0
  1009. package/dist/foundation/codes.js +7 -0
  1010. package/dist/foundation/primitives.d.ts +1 -0
  1011. package/dist/foundation/primitives.js +13 -0
  1012. package/dist/foundation.d.ts +1 -0
  1013. package/dist/foundation.js +17 -0
  1014. package/dist/hls-HD4C5G6W.js +33000 -0
  1015. package/dist/magic-string.es-SDTMJBWP.js +1308 -0
  1016. package/dist/mcp/adapter.d.ts +1 -0
  1017. package/dist/mcp/adapter.js +670 -0
  1018. package/dist/mcp/core.d.ts +1 -0
  1019. package/dist/mcp/core.js +41 -0
  1020. package/dist/mcp/curation.d.ts +1 -0
  1021. package/dist/mcp/curation.js +23 -0
  1022. package/dist/mcp/executor.d.ts +1 -0
  1023. package/dist/mcp/executor.js +13 -0
  1024. package/dist/mcp/server.d.ts +1 -0
  1025. package/dist/mcp/server.js +27 -0
  1026. package/dist/mcp.d.ts +1 -0
  1027. package/dist/mcp.js +138 -0
  1028. package/dist/media-model/media-kind.d.ts +1 -0
  1029. package/dist/media-model/media-kind.js +108 -0
  1030. package/dist/media-model/testing.d.ts +1 -0
  1031. package/dist/media-model/testing.js +16029 -0
  1032. package/dist/media-model/transcriptSearch.d.ts +1 -0
  1033. package/dist/media-model/transcriptSearch.js +32 -0
  1034. package/dist/media-model.d.ts +1 -0
  1035. package/dist/media-model.js +154 -0
  1036. package/dist/nle-export/server.d.ts +1 -0
  1037. package/dist/nle-export/server.js +25658 -0
  1038. package/dist/nle-export/xml.d.ts +1 -0
  1039. package/dist/nle-export/xml.js +23102 -0
  1040. package/dist/nle-export.d.ts +1 -0
  1041. package/dist/nle-export.js +313 -0
  1042. package/dist/perception.d.ts +1 -0
  1043. package/dist/perception.js +145 -0
  1044. package/dist/plane/conformance.d.ts +1 -0
  1045. package/dist/plane/conformance.js +13 -0
  1046. package/dist/plane/contract.d.ts +1 -0
  1047. package/dist/plane/contract.js +31 -0
  1048. package/dist/plane.d.ts +1 -0
  1049. package/dist/plane.js +13 -0
  1050. package/dist/primitives/backgrounds.d.ts +1 -0
  1051. package/dist/primitives/backgrounds.js +32 -0
  1052. package/dist/primitives/captions.d.ts +1 -0
  1053. package/dist/primitives/captions.js +629 -0
  1054. package/dist/primitives/effects.d.ts +1 -0
  1055. package/dist/primitives/effects.js +30 -0
  1056. package/dist/primitives/hero-text.d.ts +1 -0
  1057. package/dist/primitives/hero-text.js +14 -0
  1058. package/dist/primitives/layouts.d.ts +1 -0
  1059. package/dist/primitives/layouts.js +24 -0
  1060. package/dist/primitives/lib/easings.d.ts +1 -0
  1061. package/dist/primitives/lib/easings.js +25 -0
  1062. package/dist/primitives/lib/index.d.ts +1 -0
  1063. package/dist/primitives/lib/index.js +78 -0
  1064. package/dist/primitives/lib/palette.d.ts +1 -0
  1065. package/dist/primitives/lib/palette.js +71 -0
  1066. package/dist/primitives/lib/preview.d.ts +1 -0
  1067. package/dist/primitives/lib/preview.js +8 -0
  1068. package/dist/primitives/lib/schema.d.ts +1 -0
  1069. package/dist/primitives/lib/schema.js +12 -0
  1070. package/dist/primitives/lib/seeded-random.d.ts +1 -0
  1071. package/dist/primitives/lib/seeded-random.js +13 -0
  1072. package/dist/primitives/lib/text/contrast.d.ts +1 -0
  1073. package/dist/primitives/lib/text/contrast.js +11 -0
  1074. package/dist/primitives/lib/text/fill.d.ts +1 -0
  1075. package/dist/primitives/lib/text/fill.js +7 -0
  1076. package/dist/primitives/lib/text/fitText.d.ts +1 -0
  1077. package/dist/primitives/lib/text/fitText.js +10 -0
  1078. package/dist/primitives/lib/text/marker.d.ts +1 -0
  1079. package/dist/primitives/lib/text/marker.js +7 -0
  1080. package/dist/primitives/lib/text/motion.d.ts +1 -0
  1081. package/dist/primitives/lib/text/motion.js +15 -0
  1082. package/dist/primitives/lib/text/recolor.d.ts +1 -0
  1083. package/dist/primitives/lib/text/recolor.js +7 -0
  1084. package/dist/primitives/lib/text/spec.d.ts +1 -0
  1085. package/dist/primitives/lib/text/spec.js +0 -0
  1086. package/dist/primitives/lib/text/stage.d.ts +1 -0
  1087. package/dist/primitives/lib/text/stage.js +7 -0
  1088. package/dist/primitives/lib/text/typeface.d.ts +1 -0
  1089. package/dist/primitives/lib/text/typeface.js +7 -0
  1090. package/dist/primitives/lib/tokens.d.ts +1 -0
  1091. package/dist/primitives/lib/tokens.js +24 -0
  1092. package/dist/primitives/lib/types.d.ts +1 -0
  1093. package/dist/primitives/lib/types.js +0 -0
  1094. package/dist/primitives/lib.d.ts +1 -0
  1095. package/dist/primitives/lib.js +78 -0
  1096. package/dist/primitives/params-required.json +153 -0
  1097. package/dist/primitives/scenes.d.ts +1 -0
  1098. package/dist/primitives/scenes.js +25 -0
  1099. package/dist/primitives/subject-foreground.d.ts +1 -0
  1100. package/dist/primitives/subject-foreground.js +28 -0
  1101. package/dist/primitives/text.d.ts +1 -0
  1102. package/dist/primitives/text.js +57 -0
  1103. package/dist/primitives/transitions.d.ts +1 -0
  1104. package/dist/primitives/transitions.js +66 -0
  1105. package/dist/primitives/ui-blocks.d.ts +1 -0
  1106. package/dist/primitives/ui-blocks.js +76 -0
  1107. package/dist/primitives/version-map.json +105 -0
  1108. package/dist/primitives/workspace.d.ts +1 -0
  1109. package/dist/primitives/workspace.js +25 -0
  1110. package/dist/primitives.d.ts +1 -0
  1111. package/dist/primitives.js +65 -0
  1112. package/dist/render-harness/sandboxGlobalSpecs.d.ts +1 -0
  1113. package/dist/render-harness/sandboxGlobalSpecs.js +13 -0
  1114. package/dist/render-harness.d.ts +1 -0
  1115. package/dist/render-harness.js +1019 -0
  1116. package/dist/token-RGFIT24D.js +69 -0
  1117. package/dist/token-util-GPLSGYVO.js +5 -0
  1118. package/dist/vision_bundle-5Y376MAR.js +4084 -0
  1119. package/package.json +493 -0
@@ -0,0 +1,3339 @@
1
+ import {
2
+ recolor
3
+ } from "./chunk-DLF4WVSE.js";
4
+ import {
5
+ TextStage
6
+ } from "./chunk-U4V4FZGE.js";
7
+ import {
8
+ resolveTypeface
9
+ } from "./chunk-BDMTUEEZ.js";
10
+ import {
11
+ FLOOR_SHADOW,
12
+ FLOOR_TEXT,
13
+ resolveContrast
14
+ } from "./chunk-EMGFZ3PR.js";
15
+ import {
16
+ resolveEasing,
17
+ staggerRise,
18
+ staggerUp
19
+ } from "./chunk-ZFEXATWN.js";
20
+ import {
21
+ FitText,
22
+ resolveFitFontSize
23
+ } from "./chunk-DSNG6WLU.js";
24
+ import {
25
+ fitTextOnNLines
26
+ } from "./chunk-YA3OR2KK.js";
27
+ import {
28
+ ACCENT,
29
+ ACCENT_STRONG,
30
+ BG,
31
+ BLUE,
32
+ DANGER,
33
+ SUCCESS,
34
+ SURFACE,
35
+ TEAL,
36
+ TEXT_HI,
37
+ TEXT_MUTED,
38
+ VIOLET,
39
+ WARNING
40
+ } from "./chunk-CX2IIQ4R.js";
41
+
42
+ // ../execution/primitives/src/text/blur-reveal/index.tsx
43
+ import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
44
+ var BLUR_REVEAL_TEXT_WIDTH = 1500;
45
+ function BlurReveal({
46
+ text,
47
+ blur = 10,
48
+ fontSize = 48,
49
+ color = FLOOR_TEXT,
50
+ fontFamily = resolveTypeface("display"),
51
+ fontWeight = 600,
52
+ speed = 1
53
+ }) {
54
+ const frame = useCurrentFrame() * speed;
55
+ const { durationInFrames } = useVideoConfig();
56
+ const opacity = interpolate(frame, [0, durationInFrames * 0.6], [0, 1], {
57
+ extrapolateRight: "clamp"
58
+ });
59
+ const blurAmount = interpolate(
60
+ frame,
61
+ [0, durationInFrames * 0.6],
62
+ [blur, 0],
63
+ { extrapolateRight: "clamp" }
64
+ );
65
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
66
+ FitText,
67
+ {
68
+ maxFontSize: fontSize,
69
+ maxWidth: BLUR_REVEAL_TEXT_WIDTH,
70
+ maxLines: 2,
71
+ fontFamily,
72
+ fontWeight,
73
+ letterSpacing: "-0.05em",
74
+ style: {
75
+ opacity,
76
+ filter: `blur(${blurAmount}px)`,
77
+ color,
78
+ textShadow: resolveContrast().textShadow,
79
+ textAlign: "center"
80
+ }
81
+ },
82
+ text
83
+ ));
84
+ }
85
+
86
+ // ../execution/primitives/src/text/cinematic-title/index.tsx
87
+ import React2 from "react";
88
+ import { useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2, spring, interpolate as interpolate2, AbsoluteFill } from "remotion";
89
+ var TITLE_TEXT_WIDTH = 1600;
90
+ var CinematicTitle = ({
91
+ text,
92
+ subtitle,
93
+ variant = "default",
94
+ position = "center",
95
+ tokens = {}
96
+ }) => {
97
+ const frame = useCurrentFrame2();
98
+ const { fps, height, durationInFrames } = useVideoConfig2();
99
+ const {
100
+ fontFamily = resolveTypeface("display"),
101
+ fontSize: baseFontSize = 72,
102
+ subtextFontSize = 18,
103
+ textColor = FLOOR_TEXT,
104
+ accentColor = WARNING,
105
+ letterSpacing: baseLetterSpacing = 6
106
+ } = tokens;
107
+ const barHeight = height * 0.13;
108
+ const barSlide = interpolate2(frame, [0, 20], [barHeight, 0], {
109
+ extrapolateLeft: "clamp",
110
+ extrapolateRight: "clamp"
111
+ });
112
+ const exitStart = durationInFrames - 20;
113
+ const exitOpacity = interpolate2(
114
+ frame,
115
+ [exitStart, durationInFrames],
116
+ [1, 0],
117
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
118
+ );
119
+ let textOpacity;
120
+ let textScale;
121
+ let textBlur;
122
+ let fontSize;
123
+ let fontWeight;
124
+ let currentLetterSpacing;
125
+ if (variant === "zoom") {
126
+ const enterSpring = spring({ fps, frame, config: { damping: 12, stiffness: 80 } });
127
+ textOpacity = interpolate2(frame, [10, 30], [0, 1], {
128
+ extrapolateLeft: "clamp",
129
+ extrapolateRight: "clamp"
130
+ });
131
+ textScale = interpolate2(enterSpring, [0, 1], [2.5, 1]);
132
+ textBlur = interpolate2(frame, [10, 35], [12, 0], {
133
+ extrapolateLeft: "clamp",
134
+ extrapolateRight: "clamp"
135
+ });
136
+ fontSize = baseFontSize;
137
+ fontWeight = 700;
138
+ currentLetterSpacing = baseLetterSpacing;
139
+ } else if (variant === "bold") {
140
+ const enterSpring = spring({ fps, frame: Math.max(0, frame - 5), config: { damping: 14, stiffness: 100 } });
141
+ textOpacity = interpolate2(enterSpring, [0, 1], [0, 1]);
142
+ textScale = interpolate2(enterSpring, [0, 1], [1.4, 1]);
143
+ textBlur = 0;
144
+ fontSize = Math.round(baseFontSize * 1.3);
145
+ fontWeight = 900;
146
+ currentLetterSpacing = baseLetterSpacing;
147
+ } else {
148
+ textOpacity = interpolate2(frame, [18, 40], [0, 1], {
149
+ extrapolateLeft: "clamp",
150
+ extrapolateRight: "clamp"
151
+ });
152
+ currentLetterSpacing = interpolate2(frame, [18, 45], [20, baseLetterSpacing], {
153
+ extrapolateLeft: "clamp",
154
+ extrapolateRight: "clamp"
155
+ });
156
+ textScale = 1;
157
+ textBlur = 0;
158
+ fontSize = baseFontSize;
159
+ fontWeight = 700;
160
+ }
161
+ const subtextOpacity = interpolate2(frame, [35, 55], [0, 1], {
162
+ extrapolateLeft: "clamp",
163
+ extrapolateRight: "clamp"
164
+ });
165
+ const justifyContent = position === "top" ? "flex-start" : position === "bottom" ? "flex-end" : "center";
166
+ const padding = position === "center" ? 0 : barHeight + 48;
167
+ const textShadow = resolveContrast().textShadow;
168
+ const barStyle = {
169
+ position: "absolute",
170
+ left: 0,
171
+ right: 0,
172
+ height: barHeight,
173
+ backgroundColor: BG,
174
+ zIndex: 2
175
+ };
176
+ return /* @__PURE__ */ React2.createElement(AbsoluteFill, { style: { backgroundColor: "transparent", opacity: exitOpacity } }, /* @__PURE__ */ React2.createElement("div", { style: { ...barStyle, top: 0, transform: `translateY(-${barSlide}px)` } }), /* @__PURE__ */ React2.createElement("div", { style: { ...barStyle, bottom: 0, transform: `translateY(${barSlide}px)` } }), /* @__PURE__ */ React2.createElement(
177
+ AbsoluteFill,
178
+ {
179
+ style: {
180
+ justifyContent,
181
+ alignItems: "center",
182
+ zIndex: 1,
183
+ paddingTop: padding,
184
+ paddingBottom: padding
185
+ }
186
+ },
187
+ /* @__PURE__ */ React2.createElement(
188
+ "div",
189
+ {
190
+ style: {
191
+ display: "flex",
192
+ flexDirection: "column",
193
+ alignItems: "center",
194
+ textAlign: "center",
195
+ opacity: textOpacity,
196
+ transform: `scale(${textScale})`,
197
+ filter: textBlur > 0 ? `blur(${textBlur}px)` : "none"
198
+ }
199
+ },
200
+ /* @__PURE__ */ React2.createElement(
201
+ FitText,
202
+ {
203
+ maxFontSize: fontSize,
204
+ maxWidth: TITLE_TEXT_WIDTH,
205
+ fontFamily,
206
+ fontWeight,
207
+ letterSpacing: `${baseLetterSpacing}px`,
208
+ textTransform: "uppercase",
209
+ style: {
210
+ color: textColor,
211
+ textShadow,
212
+ textAlign: "center",
213
+ letterSpacing: `${currentLetterSpacing}px`
214
+ }
215
+ },
216
+ text
217
+ ),
218
+ subtitle ? /* @__PURE__ */ React2.createElement(
219
+ FitText,
220
+ {
221
+ maxFontSize: subtextFontSize,
222
+ maxWidth: TITLE_TEXT_WIDTH,
223
+ maxLines: 2,
224
+ fontFamily,
225
+ fontWeight: 300,
226
+ letterSpacing: "3px",
227
+ textTransform: "uppercase",
228
+ style: {
229
+ marginTop: 16,
230
+ color: accentColor,
231
+ textShadow,
232
+ opacity: subtextOpacity,
233
+ textAlign: "center"
234
+ }
235
+ },
236
+ subtitle
237
+ ) : null
238
+ )
239
+ ));
240
+ };
241
+
242
+ // ../execution/primitives/src/text/inline-highlight/index.tsx
243
+ import { interpolate as interpolate3, useCurrentFrame as useCurrentFrame3, useVideoConfig as useVideoConfig3 } from "remotion";
244
+ function InlineHighlight({
245
+ before,
246
+ highlight,
247
+ after = "",
248
+ baseColor = FLOOR_TEXT,
249
+ highlightColor = ACCENT_STRONG,
250
+ fontFamily = resolveTypeface("display"),
251
+ fontSize = 48,
252
+ fontWeight = 600,
253
+ speed = 1,
254
+ className
255
+ }) {
256
+ const frame = useCurrentFrame3() * speed;
257
+ const { durationInFrames } = useVideoConfig3();
258
+ const progress = interpolate3(
259
+ frame,
260
+ [durationInFrames * 0.2, durationInFrames * 0.7],
261
+ [0, 1],
262
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
263
+ );
264
+ const color = recolor(progress, baseColor, highlightColor);
265
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
266
+ "span",
267
+ {
268
+ className,
269
+ style: {
270
+ fontSize,
271
+ fontWeight,
272
+ color: baseColor,
273
+ letterSpacing: "-0.03em",
274
+ fontFamily,
275
+ textShadow: resolveContrast().textShadow
276
+ }
277
+ },
278
+ before,
279
+ /* @__PURE__ */ React.createElement("span", { style: { color } }, highlight),
280
+ after
281
+ ));
282
+ }
283
+
284
+ // ../execution/primitives/src/text/karaoke/index.tsx
285
+ import React3 from "react";
286
+ import { useCurrentFrame as useCurrentFrame4, useVideoConfig as useVideoConfig4, spring as spring2, interpolate as interpolate4, AbsoluteFill as AbsoluteFill2 } from "remotion";
287
+ var Karaoke = ({
288
+ words,
289
+ position = "center",
290
+ tokens = {}
291
+ }) => {
292
+ const frame = useCurrentFrame4();
293
+ const { fps, durationInFrames } = useVideoConfig4();
294
+ const {
295
+ fontFamily = resolveTypeface("caption"),
296
+ fontSize = 56,
297
+ textColor = FLOOR_TEXT,
298
+ activeColor = ACCENT,
299
+ activeScale = 1.15
300
+ } = tokens;
301
+ const currentTimeMs = frame / fps * 1e3;
302
+ const fadeOut = interpolate4(
303
+ frame,
304
+ [durationInFrames - 15, durationInFrames],
305
+ [1, 0],
306
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
307
+ );
308
+ const justifyContent = position === "center" ? "center" : position === "right" ? "flex-end" : "flex-start";
309
+ const alignItems = position === "bottom" ? "flex-end" : position === "center" ? "center" : position === "right" ? "flex-end" : "flex-start";
310
+ return /* @__PURE__ */ React3.createElement(
311
+ AbsoluteFill2,
312
+ {
313
+ style: {
314
+ justifyContent: position === "bottom" ? "flex-end" : "center",
315
+ alignItems,
316
+ padding: 60,
317
+ paddingBottom: position === "bottom" ? 120 : 60
318
+ }
319
+ },
320
+ /* @__PURE__ */ React3.createElement("div", { style: { opacity: fadeOut } }, /* @__PURE__ */ React3.createElement(
321
+ "div",
322
+ {
323
+ style: {
324
+ display: "flex",
325
+ flexWrap: "wrap",
326
+ justifyContent,
327
+ gap: "4px 12px"
328
+ }
329
+ },
330
+ words.map((word, i) => {
331
+ const isActive = currentTimeMs >= word.startMs && currentTimeMs < word.endMs;
332
+ const isPast = currentTimeMs >= word.endMs;
333
+ const isFuture = currentTimeMs < word.startMs;
334
+ const activeFrame = isActive ? Math.round((currentTimeMs - word.startMs) / 1e3 * fps) : 0;
335
+ const scaleSpr = isActive ? spring2({
336
+ fps,
337
+ frame: activeFrame,
338
+ config: { damping: 14, stiffness: 200 }
339
+ }) : isPast ? 1 : 0;
340
+ const scale = isActive ? interpolate4(scaleSpr, [0, 1], [1, activeScale]) : 1;
341
+ const opacity = isFuture ? 0.4 : 1;
342
+ const color = isActive ? activeColor : textColor;
343
+ return /* @__PURE__ */ React3.createElement(
344
+ "span",
345
+ {
346
+ key: i,
347
+ style: {
348
+ fontSize,
349
+ fontWeight: isActive ? 800 : 600,
350
+ fontFamily,
351
+ color,
352
+ opacity,
353
+ transform: `scale(${scale})`,
354
+ display: "inline-block",
355
+ transition: "color 0.1s",
356
+ textShadow: FLOOR_SHADOW
357
+ }
358
+ },
359
+ word.text
360
+ );
361
+ })
362
+ ))
363
+ );
364
+ };
365
+
366
+ // ../execution/primitives/src/text/kinetic-type/index.tsx
367
+ import React4 from "react";
368
+ import { useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig5, spring as spring3, interpolate as interpolate5, AbsoluteFill as AbsoluteFill3 } from "remotion";
369
+ var PHRASE_TEXT_WIDTH = 1600;
370
+ var KineticType = ({
371
+ text,
372
+ animation = "fly-in",
373
+ position = "center",
374
+ accentColor = ACCENT,
375
+ tokens = {}
376
+ }) => {
377
+ const frame = useCurrentFrame5();
378
+ const { fps, durationInFrames } = useVideoConfig5();
379
+ const {
380
+ fontFamily = resolveTypeface("display"),
381
+ fontSize = 110,
382
+ textColor = FLOOR_TEXT
383
+ } = tokens;
384
+ const words = text.split(" ").filter(Boolean);
385
+ const staggerFrames = 4;
386
+ const fittedFontSize = React4.useMemo(() => {
387
+ if (text.trim().length === 0) return fontSize;
388
+ try {
389
+ const { fontSize: fit } = fitTextOnNLines({
390
+ text,
391
+ maxLines: 2,
392
+ maxBoxWidth: PHRASE_TEXT_WIDTH,
393
+ fontFamily,
394
+ fontWeight: 700,
395
+ maxFontSize: fontSize,
396
+ validateFontIsLoaded: false
397
+ });
398
+ return resolveFitFontSize({
399
+ singleLineFitFontSize: fit,
400
+ minFontSize: Math.round(fontSize * 0.55),
401
+ maxFontSize: fontSize
402
+ }).fontSize;
403
+ } catch {
404
+ return fontSize;
405
+ }
406
+ }, [text, fontFamily, fontSize]);
407
+ const fadeOut = interpolate5(
408
+ frame,
409
+ [durationInFrames - 15, durationInFrames],
410
+ [1, 0],
411
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
412
+ );
413
+ const justifyContent = position === "center" ? "center" : position === "right" ? "flex-end" : "flex-start";
414
+ const getWordStyle = (index) => {
415
+ const delay = index * staggerFrames;
416
+ const spr = spring3({
417
+ fps,
418
+ frame: Math.max(0, frame - delay),
419
+ config: animation === "scale-bounce" ? { damping: 9, stiffness: 130, mass: 0.7 } : { damping: 12, stiffness: 110, mass: 0.8 }
420
+ });
421
+ const opacity = interpolate5(spr, [0, 0.3], [0, 1], {
422
+ extrapolateRight: "clamp"
423
+ });
424
+ switch (animation) {
425
+ case "fly-in": {
426
+ const translateY = interpolate5(spr, [0, 1], [130, 0]);
427
+ const blur = interpolate5(spr, [0, 0.7], [7, 0], { extrapolateRight: "clamp" });
428
+ const scale = interpolate5(spr, [0, 1], [0.92, 1]);
429
+ return { opacity, filter: `blur(${blur}px)`, transform: `translateY(${translateY}px) scale(${scale})` };
430
+ }
431
+ case "rotate": {
432
+ const rotate = interpolate5(spr, [0, 1], [-24, 0]);
433
+ const translateY = interpolate5(spr, [0, 1], [70, 0]);
434
+ return {
435
+ opacity,
436
+ transform: `translateY(${translateY}px) rotate(${rotate}deg)`,
437
+ transformOrigin: "bottom left"
438
+ };
439
+ }
440
+ case "scale-bounce": {
441
+ const scale = interpolate5(spr, [0, 1], [0.2, 1]);
442
+ return { opacity, transform: `scale(${scale})` };
443
+ }
444
+ case "cascade": {
445
+ const translateY = interpolate5(spr, [0, 1], [-150, 0]);
446
+ const blur = interpolate5(spr, [0, 0.7], [7, 0], { extrapolateRight: "clamp" });
447
+ return { opacity, filter: `blur(${blur}px)`, transform: `translateY(${translateY}px)` };
448
+ }
449
+ default:
450
+ return { opacity };
451
+ }
452
+ };
453
+ return /* @__PURE__ */ React4.createElement(
454
+ AbsoluteFill3,
455
+ {
456
+ style: {
457
+ justifyContent: "center",
458
+ alignItems: position === "center" ? "center" : position === "right" ? "flex-end" : "flex-start",
459
+ padding: 60
460
+ }
461
+ },
462
+ /* @__PURE__ */ React4.createElement(
463
+ "div",
464
+ {
465
+ style: {
466
+ opacity: fadeOut,
467
+ // Idle life: the settled phrase breathes imperceptibly.
468
+ transform: `scale(${1 + Math.sin(2 * Math.PI * 0.06 * frame / fps) * 8e-3})`
469
+ }
470
+ },
471
+ /* @__PURE__ */ React4.createElement(
472
+ "div",
473
+ {
474
+ style: {
475
+ display: "flex",
476
+ flexWrap: "wrap",
477
+ justifyContent,
478
+ gap: "0 14px"
479
+ }
480
+ },
481
+ words.map((word, i) => /* @__PURE__ */ React4.createElement(
482
+ "span",
483
+ {
484
+ key: i,
485
+ style: {
486
+ fontSize: fittedFontSize,
487
+ fontWeight: 800,
488
+ fontFamily,
489
+ color: accentColor && i === words.length - 1 ? accentColor : textColor,
490
+ display: "inline-block",
491
+ textShadow: FLOOR_SHADOW,
492
+ ...getWordStyle(i)
493
+ }
494
+ },
495
+ word
496
+ ))
497
+ )
498
+ )
499
+ );
500
+ };
501
+
502
+ // ../execution/primitives/src/text/lower-third/index.tsx
503
+ import React5 from "react";
504
+ import { useCurrentFrame as useCurrentFrame6, useVideoConfig as useVideoConfig6, spring as spring4, interpolate as interpolate6, AbsoluteFill as AbsoluteFill4 } from "remotion";
505
+ var BAR_TEXT_WIDTH = 820;
506
+ var LowerThird = ({
507
+ text,
508
+ subtitle,
509
+ variant = "classic",
510
+ tokens = {}
511
+ }) => {
512
+ const frame = useCurrentFrame6();
513
+ const { fps, durationInFrames } = useVideoConfig6();
514
+ const {
515
+ fontFamily = resolveTypeface("caption"),
516
+ fontSize = 28,
517
+ subtitleFontSize = 20,
518
+ textColor = FLOOR_TEXT,
519
+ accentColor = ACCENT_STRONG,
520
+ backgroundColor = "rgba(0, 0, 0, 0.7)"
521
+ } = tokens;
522
+ const enterSpring = spring4({
523
+ fps,
524
+ frame,
525
+ config: { damping: 15, stiffness: 100 }
526
+ });
527
+ const exitFrame = Math.max(0, frame - (durationInFrames - 15));
528
+ const exitSpring = durationInFrames - frame <= 15 ? spring4({
529
+ fps,
530
+ frame: exitFrame,
531
+ config: { damping: 15, stiffness: 120 }
532
+ }) : 0;
533
+ const slideIn = interpolate6(enterSpring, [0, 1], [-100, 0]);
534
+ const slideOut = interpolate6(exitSpring, [0, 1], [0, 100]);
535
+ const translateX = slideIn + slideOut;
536
+ const opacity = interpolate6(enterSpring, [0, 0.3], [0, 1], {
537
+ extrapolateRight: "clamp"
538
+ }) * (1 - exitSpring);
539
+ const renderContent = () => {
540
+ switch (variant) {
541
+ case "modern":
542
+ return /* @__PURE__ */ React5.createElement(
543
+ "div",
544
+ {
545
+ style: {
546
+ display: "flex",
547
+ flexDirection: "column",
548
+ gap: 2,
549
+ background: accentColor,
550
+ padding: "10px 24px",
551
+ borderRadius: 8
552
+ }
553
+ },
554
+ /* @__PURE__ */ React5.createElement(
555
+ FitText,
556
+ {
557
+ maxFontSize: fontSize,
558
+ maxWidth: BAR_TEXT_WIDTH,
559
+ fontFamily,
560
+ fontWeight: 700,
561
+ style: { color: textColor }
562
+ },
563
+ text
564
+ ),
565
+ subtitle && /* @__PURE__ */ React5.createElement(
566
+ FitText,
567
+ {
568
+ maxFontSize: subtitleFontSize,
569
+ maxWidth: BAR_TEXT_WIDTH,
570
+ maxLines: 2,
571
+ fontFamily,
572
+ fontWeight: 400,
573
+ style: { color: `${textColor}CC` }
574
+ },
575
+ subtitle
576
+ )
577
+ );
578
+ case "cinematic":
579
+ return /* @__PURE__ */ React5.createElement(
580
+ "div",
581
+ {
582
+ style: {
583
+ display: "flex",
584
+ flexDirection: "column",
585
+ gap: 4,
586
+ background: backgroundColor,
587
+ padding: "12px 24px",
588
+ borderLeft: `3px solid ${accentColor}`
589
+ }
590
+ },
591
+ /* @__PURE__ */ React5.createElement(
592
+ FitText,
593
+ {
594
+ maxFontSize: fontSize,
595
+ maxWidth: BAR_TEXT_WIDTH,
596
+ fontFamily,
597
+ fontWeight: 600,
598
+ letterSpacing: "1px",
599
+ textTransform: "uppercase",
600
+ style: { color: textColor }
601
+ },
602
+ text
603
+ ),
604
+ subtitle && /* @__PURE__ */ React5.createElement(
605
+ FitText,
606
+ {
607
+ maxFontSize: subtitleFontSize,
608
+ maxWidth: BAR_TEXT_WIDTH,
609
+ maxLines: 2,
610
+ fontFamily,
611
+ fontWeight: 300,
612
+ letterSpacing: "0.5px",
613
+ style: { color: `${textColor}99` }
614
+ },
615
+ subtitle
616
+ )
617
+ );
618
+ case "classic":
619
+ default:
620
+ return /* @__PURE__ */ React5.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 4 } }, /* @__PURE__ */ React5.createElement(
621
+ FitText,
622
+ {
623
+ maxFontSize: fontSize,
624
+ maxWidth: BAR_TEXT_WIDTH,
625
+ fontFamily,
626
+ fontWeight: 700,
627
+ style: { background: accentColor, padding: "8px 20px", borderRadius: 4, color: textColor }
628
+ },
629
+ text
630
+ ), subtitle && /* @__PURE__ */ React5.createElement(
631
+ FitText,
632
+ {
633
+ maxFontSize: subtitleFontSize,
634
+ maxWidth: BAR_TEXT_WIDTH,
635
+ maxLines: 2,
636
+ fontFamily,
637
+ fontWeight: 400,
638
+ style: { background: backgroundColor, padding: "6px 20px", borderRadius: 4, color: `${textColor}E6` }
639
+ },
640
+ subtitle
641
+ ));
642
+ }
643
+ };
644
+ return /* @__PURE__ */ React5.createElement(AbsoluteFill4, null, /* @__PURE__ */ React5.createElement(
645
+ "div",
646
+ {
647
+ style: {
648
+ position: "absolute",
649
+ bottom: 80,
650
+ left: 40,
651
+ transform: `translateX(${translateX}%)`,
652
+ opacity
653
+ }
654
+ },
655
+ renderContent()
656
+ ));
657
+ };
658
+
659
+ // ../execution/primitives/src/text/marker-highlight/index.tsx
660
+ import { interpolate as interpolate7, spring as spring5, useCurrentFrame as useCurrentFrame7, useVideoConfig as useVideoConfig7 } from "remotion";
661
+ function MarkerHighlight({
662
+ before = "",
663
+ highlight,
664
+ after = "",
665
+ markerColor = WARNING,
666
+ baseColor = FLOOR_TEXT,
667
+ highlightedTextColor = SURFACE,
668
+ fontFamily = resolveTypeface("display"),
669
+ fontSize = 72,
670
+ fontWeight = 600,
671
+ speed = 1,
672
+ className
673
+ }) {
674
+ const frame = useCurrentFrame7() * speed;
675
+ const { fps } = useVideoConfig7();
676
+ const markerScale = spring5({
677
+ frame: frame - 15,
678
+ fps,
679
+ config: { damping: 14 }
680
+ });
681
+ const textColor = recolor(
682
+ interpolate7(markerScale, [0.5, 0.8], [0, 1], {
683
+ extrapolateLeft: "clamp",
684
+ extrapolateRight: "clamp"
685
+ }),
686
+ baseColor,
687
+ highlightedTextColor
688
+ );
689
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
690
+ "span",
691
+ {
692
+ className,
693
+ style: {
694
+ fontSize,
695
+ fontWeight,
696
+ color: baseColor,
697
+ letterSpacing: "-0.03em",
698
+ fontFamily
699
+ }
700
+ },
701
+ before,
702
+ /* @__PURE__ */ React.createElement("span", { style: { position: "relative", display: "inline-block" } }, /* @__PURE__ */ React.createElement(
703
+ "span",
704
+ {
705
+ "aria-hidden": true,
706
+ style: {
707
+ position: "absolute",
708
+ inset: "0 -0.1em",
709
+ background: markerColor,
710
+ transformOrigin: "left center",
711
+ transform: `scaleX(${markerScale})`,
712
+ zIndex: 0
713
+ }
714
+ }
715
+ ), /* @__PURE__ */ React.createElement("span", { style: { position: "relative", zIndex: 1, color: textColor } }, highlight)),
716
+ after
717
+ ));
718
+ }
719
+
720
+ // ../execution/primitives/src/text/shimmer-sweep/index.tsx
721
+ import { useMemo } from "react";
722
+ import { interpolate as interpolate8, useCurrentFrame as useCurrentFrame8, useVideoConfig as useVideoConfig8 } from "remotion";
723
+ function ShimmerSweep({
724
+ text,
725
+ baseColor = "#a1a1aa",
726
+ shineColor = "#ffffff",
727
+ fontFamily = resolveTypeface("display"),
728
+ fontSize = 96,
729
+ fontWeight = 700,
730
+ speed = 1,
731
+ className
732
+ }) {
733
+ const frame = useCurrentFrame8() * speed;
734
+ const { durationInFrames } = useVideoConfig8();
735
+ const position = interpolate8(
736
+ frame,
737
+ [0, durationInFrames * 0.8],
738
+ [200, -100],
739
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
740
+ );
741
+ const fittedFontSize = useMemo(() => {
742
+ const t = (text ?? "").trim();
743
+ if (!t) return fontSize;
744
+ try {
745
+ const { fontSize: fs } = fitTextOnNLines({
746
+ text: t,
747
+ maxLines: 1,
748
+ maxBoxWidth: 1500,
749
+ fontFamily,
750
+ fontWeight,
751
+ letterSpacing: "-0.03em",
752
+ maxFontSize: fontSize,
753
+ validateFontIsLoaded: false
754
+ });
755
+ return resolveFitFontSize({
756
+ singleLineFitFontSize: fs,
757
+ minFontSize: Math.round(fontSize * 0.5),
758
+ maxFontSize: fontSize
759
+ }).fontSize;
760
+ } catch {
761
+ return fontSize;
762
+ }
763
+ }, [text, fontFamily, fontSize, fontWeight]);
764
+ const textStyle = {
765
+ fontSize: fittedFontSize,
766
+ fontWeight,
767
+ letterSpacing: "-0.03em",
768
+ fontFamily,
769
+ margin: 0,
770
+ lineHeight: 1
771
+ };
772
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement("div", { style: { position: "relative", display: "inline-block" } }, /* @__PURE__ */ React.createElement("span", { style: { ...textStyle, color: baseColor } }, text), /* @__PURE__ */ React.createElement(
773
+ "span",
774
+ {
775
+ className,
776
+ style: {
777
+ ...textStyle,
778
+ position: "absolute",
779
+ inset: 0,
780
+ color: "transparent",
781
+ backgroundClip: "text",
782
+ WebkitBackgroundClip: "text",
783
+ backgroundImage: `linear-gradient(110deg, transparent 30%, ${shineColor} 50%, transparent 70%)`,
784
+ backgroundSize: "200% 100%",
785
+ backgroundPosition: `${position}% 50%`
786
+ }
787
+ },
788
+ text
789
+ )));
790
+ }
791
+
792
+ // ../execution/primitives/src/text/staggered-fade-up/index.tsx
793
+ import { useCurrentFrame as useCurrentFrame9, useVideoConfig as useVideoConfig9 } from "remotion";
794
+ function StaggeredFadeUp({
795
+ text,
796
+ staggerDelay = 4,
797
+ staggerMs,
798
+ easing,
799
+ distance = 20,
800
+ fontSize = 72,
801
+ color = FLOOR_TEXT,
802
+ fontFamily = resolveTypeface("display"),
803
+ fontWeight = 600,
804
+ speed = 1,
805
+ className
806
+ }) {
807
+ const frame = useCurrentFrame9() * speed;
808
+ const { fps } = useVideoConfig9();
809
+ const staggerFrames = staggerMs != null ? Math.round(staggerMs / 1e3 * fps) : staggerDelay;
810
+ const ease = resolveEasing(easing);
811
+ const words = text.split(" ");
812
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
813
+ "span",
814
+ {
815
+ className,
816
+ style: {
817
+ fontSize,
818
+ fontWeight,
819
+ color,
820
+ letterSpacing: "-0.03em",
821
+ fontFamily,
822
+ textShadow: resolveContrast().textShadow
823
+ }
824
+ },
825
+ words.map((word, i) => {
826
+ const { opacity: linearO } = staggerUp(frame, i, staggerFrames, 12, distance);
827
+ const opacity = ease(linearO);
828
+ const y = staggerRise(distance, linearO, ease);
829
+ return /* @__PURE__ */ React.createElement(
830
+ "span",
831
+ {
832
+ key: i,
833
+ style: {
834
+ display: "inline-block",
835
+ marginRight: "0.25em",
836
+ opacity,
837
+ transform: `translateY(${y}px)`
838
+ }
839
+ },
840
+ word
841
+ );
842
+ })
843
+ ));
844
+ }
845
+
846
+ // ../execution/primitives/src/text/text-effect/index.tsx
847
+ import React6 from "react";
848
+ var TextEffect = ({
849
+ type,
850
+ colors = [DANGER, TEAL, BLUE],
851
+ color = ACCENT,
852
+ intensity = 0.8,
853
+ children,
854
+ text
855
+ }) => {
856
+ const getEffectStyle = () => {
857
+ const spread = Math.round(intensity * 30);
858
+ const blur = Math.round(intensity * 20);
859
+ switch (type) {
860
+ case "gradient": {
861
+ const gradient = `linear-gradient(90deg, ${colors.join(", ")})`;
862
+ return {
863
+ background: gradient,
864
+ WebkitBackgroundClip: "text",
865
+ WebkitTextFillColor: "transparent",
866
+ backgroundClip: "text"
867
+ };
868
+ }
869
+ case "neon":
870
+ return {
871
+ textShadow: [
872
+ `0 0 ${Math.round(blur * 0.3)}px ${color}`,
873
+ `0 0 ${Math.round(blur * 0.6)}px ${color}`,
874
+ `0 0 ${blur}px ${color}`,
875
+ `0 0 ${spread}px ${color}80`
876
+ ].join(", ")
877
+ };
878
+ case "glow":
879
+ return {
880
+ textShadow: `0 0 ${blur}px ${color}, 0 0 ${spread}px ${color}60`
881
+ };
882
+ case "wave": {
883
+ const gradient = `linear-gradient(90deg, ${colors[0]}, ${colors[1] ?? colors[0]}, ${colors[2] ?? colors[0]}, ${colors[0]})`;
884
+ return {
885
+ background: gradient,
886
+ backgroundSize: "200% 100%",
887
+ WebkitBackgroundClip: "text",
888
+ WebkitTextFillColor: "transparent",
889
+ backgroundClip: "text"
890
+ };
891
+ }
892
+ case "outline":
893
+ return {
894
+ WebkitTextStroke: `${Math.max(1, Math.round(intensity * 3))}px ${color}`,
895
+ color: "transparent"
896
+ };
897
+ case "shadow":
898
+ return {
899
+ textShadow: `${Math.round(intensity * 4)}px ${Math.round(intensity * 4)}px ${Math.round(intensity * 8)}px ${color}`
900
+ };
901
+ default:
902
+ return {};
903
+ }
904
+ };
905
+ const bareStage = children ? {} : {
906
+ position: "absolute",
907
+ inset: 0,
908
+ display: "flex",
909
+ alignItems: "center",
910
+ justifyContent: "center",
911
+ textAlign: "center",
912
+ padding: "0 6%",
913
+ fontSize: 140,
914
+ fontWeight: 800,
915
+ letterSpacing: "-0.02em",
916
+ color: TEXT_HI,
917
+ fontFamily: "inherit"
918
+ };
919
+ return /* @__PURE__ */ React6.createElement("div", { style: { ...bareStage, ...getEffectStyle() } }, children ?? text);
920
+ };
921
+
922
+ // ../execution/primitives/src/text/text-fade-replace/index.tsx
923
+ import { interpolate as interpolate9, useCurrentFrame as useCurrentFrame10, useVideoConfig as useVideoConfig10 } from "remotion";
924
+ function TextFadeReplace({
925
+ from,
926
+ to,
927
+ fontSize = 48,
928
+ color = FLOOR_TEXT,
929
+ fontFamily = resolveTypeface("display"),
930
+ fontWeight = 600,
931
+ speed = 1,
932
+ className
933
+ }) {
934
+ const frame = useCurrentFrame10() * speed;
935
+ const { durationInFrames } = useVideoConfig10();
936
+ const stops = [
937
+ 0,
938
+ durationInFrames * 0.4,
939
+ durationInFrames * 0.6,
940
+ durationInFrames
941
+ ];
942
+ const fromOpacity = interpolate9(frame, stops, [1, 1, 0, 0], {
943
+ extrapolateLeft: "clamp",
944
+ extrapolateRight: "clamp"
945
+ });
946
+ const fromY = interpolate9(frame, stops, [0, 0, -12, -12], {
947
+ extrapolateLeft: "clamp",
948
+ extrapolateRight: "clamp"
949
+ });
950
+ const toOpacity = interpolate9(frame, stops, [0, 0, 1, 1], {
951
+ extrapolateLeft: "clamp",
952
+ extrapolateRight: "clamp"
953
+ });
954
+ const toY = interpolate9(frame, stops, [12, 12, 0, 0], {
955
+ extrapolateLeft: "clamp",
956
+ extrapolateRight: "clamp"
957
+ });
958
+ const baseSpanStyle = {
959
+ position: "absolute",
960
+ left: "50%",
961
+ top: "50%",
962
+ fontSize,
963
+ fontWeight,
964
+ color,
965
+ letterSpacing: "-0.03em",
966
+ fontFamily,
967
+ textShadow: resolveContrast().textShadow,
968
+ whiteSpace: "nowrap"
969
+ };
970
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement("div", { style: { position: "relative", width: 0, height: 0 } }, /* @__PURE__ */ React.createElement(
971
+ "span",
972
+ {
973
+ className,
974
+ style: {
975
+ ...baseSpanStyle,
976
+ opacity: fromOpacity,
977
+ transform: `translate(-50%, calc(-50% + ${fromY}px))`
978
+ }
979
+ },
980
+ from
981
+ ), /* @__PURE__ */ React.createElement(
982
+ "span",
983
+ {
984
+ className,
985
+ style: {
986
+ ...baseSpanStyle,
987
+ opacity: toOpacity,
988
+ transform: `translate(-50%, calc(-50% + ${toY}px))`
989
+ }
990
+ },
991
+ to
992
+ )));
993
+ }
994
+
995
+ // ../execution/primitives/src/text/tracking-in/index.tsx
996
+ import React7 from "react";
997
+ import { interpolate as interpolate10, spring as spring6, useCurrentFrame as useCurrentFrame11, useVideoConfig as useVideoConfig11 } from "remotion";
998
+ var TRACKING_IN_TEXT_WIDTH = 1500;
999
+ var TRACKING_IN_SETTLED_SPACING = "-0.03em";
1000
+ function TrackingIn({
1001
+ text,
1002
+ startTracking = 0.5,
1003
+ startBlur = 12,
1004
+ fontSize = 96,
1005
+ color = FLOOR_TEXT,
1006
+ fontFamily = resolveTypeface("display"),
1007
+ fontWeight = 700,
1008
+ speed = 1,
1009
+ className
1010
+ }) {
1011
+ const frame = useCurrentFrame11() * speed;
1012
+ const { fps } = useVideoConfig11();
1013
+ const t = spring6({
1014
+ frame,
1015
+ fps,
1016
+ config: { damping: 18, stiffness: 90 }
1017
+ });
1018
+ const letterSpacing = interpolate10(t, [0, 1], [startTracking, -0.03]) + "em";
1019
+ const blurAmount = interpolate10(t, [0, 1], [startBlur, 0]);
1020
+ const opacity = interpolate10(frame, [0, 15], [0, 1], {
1021
+ extrapolateLeft: "clamp",
1022
+ extrapolateRight: "clamp"
1023
+ });
1024
+ const fittedFontSize = React7.useMemo(() => {
1025
+ if (text.trim().length === 0) return fontSize;
1026
+ try {
1027
+ const { fontSize: fit } = fitTextOnNLines({
1028
+ text,
1029
+ maxLines: 1,
1030
+ maxBoxWidth: TRACKING_IN_TEXT_WIDTH,
1031
+ fontFamily,
1032
+ fontWeight,
1033
+ letterSpacing: TRACKING_IN_SETTLED_SPACING,
1034
+ maxFontSize: fontSize,
1035
+ validateFontIsLoaded: false
1036
+ });
1037
+ return resolveFitFontSize({
1038
+ singleLineFitFontSize: fit,
1039
+ minFontSize: Math.round(fontSize * 0.55),
1040
+ maxFontSize: fontSize
1041
+ }).fontSize;
1042
+ } catch {
1043
+ return fontSize;
1044
+ }
1045
+ }, [text, fontFamily, fontWeight, fontSize]);
1046
+ return /* @__PURE__ */ React7.createElement(TextStage, null, /* @__PURE__ */ React7.createElement(
1047
+ "span",
1048
+ {
1049
+ className,
1050
+ style: {
1051
+ fontSize: fittedFontSize,
1052
+ fontWeight,
1053
+ color,
1054
+ letterSpacing,
1055
+ opacity,
1056
+ filter: `blur(${blurAmount}px)`,
1057
+ fontFamily,
1058
+ textShadow: resolveContrast().textShadow,
1059
+ maxWidth: TRACKING_IN_TEXT_WIDTH,
1060
+ whiteSpace: "nowrap"
1061
+ }
1062
+ },
1063
+ text
1064
+ ));
1065
+ }
1066
+
1067
+ // ../execution/primitives/src/text/typewriter/index.tsx
1068
+ import React8 from "react";
1069
+ import { interpolate as interpolate11, useCurrentFrame as useCurrentFrame12, useVideoConfig as useVideoConfig12 } from "remotion";
1070
+ var TYPEWRITER_TEXT_WIDTH = 1500;
1071
+ var TYPEWRITER_MAX_LINES = 3;
1072
+ var TYPEWRITER_LETTER_SPACING = "-0.03em";
1073
+ function Typewriter({
1074
+ text,
1075
+ cursor = true,
1076
+ charsPerSecond = 20,
1077
+ speed = 1,
1078
+ fontSize = 48,
1079
+ color = FLOOR_TEXT,
1080
+ cursorColor = FLOOR_TEXT,
1081
+ fontFamily = resolveTypeface("display"),
1082
+ fontWeight = 600,
1083
+ className
1084
+ }) {
1085
+ const frame = useCurrentFrame12() * speed;
1086
+ const { fps } = useVideoConfig12();
1087
+ const charsToRevealOver = text.length / charsPerSecond * fps;
1088
+ const revealed = Math.floor(
1089
+ interpolate11(frame, [0, charsToRevealOver], [0, text.length], {
1090
+ extrapolateLeft: "clamp",
1091
+ extrapolateRight: "clamp"
1092
+ })
1093
+ );
1094
+ const visibleText = text.substring(0, revealed);
1095
+ const isCursorVisible = Math.floor(frame / fps * 2) % 2 === 0;
1096
+ const fittedFontSize = React8.useMemo(() => {
1097
+ if (text.trim().length === 0) return fontSize;
1098
+ try {
1099
+ const { fontSize: fit } = fitTextOnNLines({
1100
+ text,
1101
+ maxLines: TYPEWRITER_MAX_LINES,
1102
+ maxBoxWidth: TYPEWRITER_TEXT_WIDTH,
1103
+ fontFamily,
1104
+ fontWeight,
1105
+ letterSpacing: TYPEWRITER_LETTER_SPACING,
1106
+ maxFontSize: fontSize,
1107
+ validateFontIsLoaded: false
1108
+ });
1109
+ return resolveFitFontSize({
1110
+ singleLineFitFontSize: fit,
1111
+ minFontSize: Math.round(fontSize * 0.55),
1112
+ maxFontSize: fontSize
1113
+ }).fontSize;
1114
+ } catch {
1115
+ return fontSize;
1116
+ }
1117
+ }, [text, fontFamily, fontWeight, fontSize]);
1118
+ return /* @__PURE__ */ React8.createElement(TextStage, null, /* @__PURE__ */ React8.createElement(
1119
+ "span",
1120
+ {
1121
+ className,
1122
+ style: {
1123
+ fontSize: fittedFontSize,
1124
+ fontWeight,
1125
+ color,
1126
+ letterSpacing: TYPEWRITER_LETTER_SPACING,
1127
+ fontFamily,
1128
+ textShadow: resolveContrast().textShadow,
1129
+ maxWidth: TYPEWRITER_TEXT_WIDTH,
1130
+ whiteSpace: "pre-wrap",
1131
+ overflowWrap: "break-word",
1132
+ textAlign: "center"
1133
+ }
1134
+ },
1135
+ visibleText,
1136
+ cursor && /* @__PURE__ */ React8.createElement(
1137
+ "span",
1138
+ {
1139
+ style: {
1140
+ display: "inline-block",
1141
+ width: "0.08em",
1142
+ height: "1em",
1143
+ marginLeft: "0.04em",
1144
+ verticalAlign: "text-bottom",
1145
+ background: cursorColor,
1146
+ opacity: isCursorVisible ? 1 : 0
1147
+ }
1148
+ }
1149
+ )
1150
+ ));
1151
+ }
1152
+
1153
+ // ../execution/primitives/src/text/matrix-decode/index.tsx
1154
+ import { random, useCurrentFrame as useCurrentFrame13, useVideoConfig as useVideoConfig13 } from "remotion";
1155
+ var DECODE_TEXT_WIDTH = 1500;
1156
+ function MatrixDecode({
1157
+ text,
1158
+ charset = "!@#$%^&*()_+-=<>?/\\|",
1159
+ fontSize = 72,
1160
+ color = SUCCESS,
1161
+ fontFamily = resolveTypeface("mono"),
1162
+ fontWeight = 600,
1163
+ revealDuration = 60,
1164
+ speed = 1
1165
+ }) {
1166
+ const frame = useCurrentFrame13() * speed;
1167
+ useVideoConfig13();
1168
+ let output = "";
1169
+ for (let i = 0; i < text.length; i++) {
1170
+ const revealFrame = i / Math.max(text.length, 1) * revealDuration;
1171
+ if (text[i] === " ") {
1172
+ output += " ";
1173
+ } else if (frame >= revealFrame) {
1174
+ output += text[i];
1175
+ } else {
1176
+ const r = random(`${i}-${Math.floor(frame / 2)}`);
1177
+ const ch = charset[Math.floor(r * charset.length)];
1178
+ output += ch;
1179
+ }
1180
+ }
1181
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
1182
+ FitText,
1183
+ {
1184
+ maxFontSize: fontSize,
1185
+ maxWidth: DECODE_TEXT_WIDTH,
1186
+ fontFamily,
1187
+ fontWeight,
1188
+ letterSpacing: "0.05em",
1189
+ style: { color, whiteSpace: "pre" }
1190
+ },
1191
+ output
1192
+ ));
1193
+ }
1194
+
1195
+ // ../execution/primitives/src/text/rgb-glitch-text/index.tsx
1196
+ import { random as random2, useCurrentFrame as useCurrentFrame14 } from "remotion";
1197
+ var GLITCH_TEXT_WIDTH = 1500;
1198
+ function RGBGlitchText({
1199
+ text,
1200
+ fontSize = 96,
1201
+ color = FLOOR_TEXT,
1202
+ fontFamily = resolveTypeface("display"),
1203
+ fontWeight = 700,
1204
+ glitchAt = 20,
1205
+ glitchDuration = 8,
1206
+ intensity = 6,
1207
+ seed = "glitch",
1208
+ speed = 1,
1209
+ className
1210
+ }) {
1211
+ const frame = useCurrentFrame14() * speed;
1212
+ const isGlitching = frame >= glitchAt && frame < glitchAt + glitchDuration;
1213
+ const offset = (axisSeed, scale) => (random2(`${seed}-${axisSeed}-${frame}`) * 2 - 1) * scale;
1214
+ const rX = isGlitching ? offset("r-x", intensity) : 0;
1215
+ const rY = isGlitching ? offset("r-y", intensity * 0.4) : 0;
1216
+ const gX = isGlitching ? offset("g-x", intensity) : 0;
1217
+ const gY = isGlitching ? offset("g-y", intensity * 0.4) : 0;
1218
+ const bX = isGlitching ? offset("b-x", intensity) : 0;
1219
+ const bY = isGlitching ? offset("b-y", intensity * 0.4) : 0;
1220
+ const copyOpacity = isGlitching ? 1 : 0;
1221
+ const copyBaseStyle = {
1222
+ position: "absolute",
1223
+ top: 0,
1224
+ left: 0,
1225
+ whiteSpace: "pre",
1226
+ mixBlendMode: "screen"
1227
+ };
1228
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
1229
+ "div",
1230
+ {
1231
+ className,
1232
+ style: { position: "relative", display: "inline-block" }
1233
+ },
1234
+ /* @__PURE__ */ React.createElement(
1235
+ FitText,
1236
+ {
1237
+ maxFontSize: fontSize,
1238
+ maxWidth: GLITCH_TEXT_WIDTH,
1239
+ fontFamily,
1240
+ fontWeight,
1241
+ letterSpacing: "-0.03em",
1242
+ style: {
1243
+ position: "relative",
1244
+ color,
1245
+ whiteSpace: "pre",
1246
+ textShadow: resolveContrast().textShadow
1247
+ }
1248
+ },
1249
+ text
1250
+ ),
1251
+ /* @__PURE__ */ React.createElement(
1252
+ FitText,
1253
+ {
1254
+ maxFontSize: fontSize,
1255
+ maxWidth: GLITCH_TEXT_WIDTH,
1256
+ fontFamily,
1257
+ fontWeight,
1258
+ letterSpacing: "-0.03em",
1259
+ style: {
1260
+ ...copyBaseStyle,
1261
+ color: "#ff0040",
1262
+ opacity: copyOpacity,
1263
+ transform: `translateX(${rX}px) translateY(${rY}px)`
1264
+ }
1265
+ },
1266
+ text
1267
+ ),
1268
+ /* @__PURE__ */ React.createElement(
1269
+ FitText,
1270
+ {
1271
+ maxFontSize: fontSize,
1272
+ maxWidth: GLITCH_TEXT_WIDTH,
1273
+ fontFamily,
1274
+ fontWeight,
1275
+ letterSpacing: "-0.03em",
1276
+ style: {
1277
+ ...copyBaseStyle,
1278
+ color: "#00ff80",
1279
+ opacity: copyOpacity,
1280
+ transform: `translateX(${gX}px) translateY(${gY}px)`
1281
+ }
1282
+ },
1283
+ text
1284
+ ),
1285
+ /* @__PURE__ */ React.createElement(
1286
+ FitText,
1287
+ {
1288
+ maxFontSize: fontSize,
1289
+ maxWidth: GLITCH_TEXT_WIDTH,
1290
+ fontFamily,
1291
+ fontWeight,
1292
+ letterSpacing: "-0.03em",
1293
+ style: {
1294
+ ...copyBaseStyle,
1295
+ color: "#0080ff",
1296
+ opacity: copyOpacity,
1297
+ transform: `translateX(${bX}px) translateY(${bY}px)`
1298
+ }
1299
+ },
1300
+ text
1301
+ )
1302
+ ));
1303
+ }
1304
+
1305
+ // ../execution/primitives/src/text/quote-card/index.tsx
1306
+ import React9 from "react";
1307
+ import { AbsoluteFill as AbsoluteFill5, interpolate as interpolate12, spring as spring7, useCurrentFrame as useCurrentFrame15, useVideoConfig as useVideoConfig14 } from "remotion";
1308
+ var QuoteCard = ({
1309
+ quote,
1310
+ author = "",
1311
+ role = "",
1312
+ accentColor = ACCENT,
1313
+ tokens = {}
1314
+ }) => {
1315
+ const frame = useCurrentFrame15();
1316
+ const { fps } = useVideoConfig14();
1317
+ const t = frame / fps;
1318
+ const {
1319
+ fontFamily = resolveTypeface("display"),
1320
+ fontSize = 62,
1321
+ textColor = FLOOR_TEXT
1322
+ } = tokens;
1323
+ const markIn = spring7({ frame, fps, config: { damping: 13, stiffness: 140, mass: 1.1 } });
1324
+ const markSettled = markIn > 0.98;
1325
+ const markScale = interpolate12(markIn, [0, 1], [1.6, 1]) * (markSettled ? 1 + Math.sin(2 * Math.PI * 0.07 * t) * 0.012 : 1);
1326
+ const words = quote.split(" ").filter(Boolean);
1327
+ const wordStyle = (i) => {
1328
+ const s = spring7({
1329
+ frame: frame - 6 - i * 2,
1330
+ fps,
1331
+ config: { damping: 15, stiffness: 130, mass: 0.7 }
1332
+ });
1333
+ return {
1334
+ display: "inline-block",
1335
+ opacity: interpolate12(s, [0, 0.4], [0, 1], { extrapolateRight: "clamp" }),
1336
+ transform: `translateY(${interpolate12(s, [0, 1], [26, 0])}px)`
1337
+ };
1338
+ };
1339
+ const attribStart = 6 + words.length * 2 + 8;
1340
+ const ruleP = interpolate12(frame, [attribStart, attribStart + 16], [0, 1], {
1341
+ extrapolateLeft: "clamp",
1342
+ extrapolateRight: "clamp"
1343
+ });
1344
+ const attribIn = spring7({
1345
+ frame: frame - attribStart - 6,
1346
+ fps,
1347
+ config: { damping: 15, stiffness: 110, mass: 0.8 }
1348
+ });
1349
+ return /* @__PURE__ */ React9.createElement(AbsoluteFill5, { style: { justifyContent: "center", alignItems: "center" } }, /* @__PURE__ */ React9.createElement("div", { style: { maxWidth: "72%", textAlign: "left" } }, /* @__PURE__ */ React9.createElement(
1350
+ "div",
1351
+ {
1352
+ style: {
1353
+ fontFamily,
1354
+ fontSize: fontSize * 2.6,
1355
+ fontWeight: 800,
1356
+ lineHeight: 0.6,
1357
+ color: accentColor,
1358
+ opacity: interpolate12(markIn, [0, 0.3], [0, 1], { extrapolateRight: "clamp" }),
1359
+ transform: `scale(${markScale})`,
1360
+ transformOrigin: "left bottom",
1361
+ marginBottom: fontSize * 0.2,
1362
+ textShadow: FLOOR_SHADOW
1363
+ }
1364
+ },
1365
+ "\u201C"
1366
+ ), /* @__PURE__ */ React9.createElement(
1367
+ "div",
1368
+ {
1369
+ style: {
1370
+ fontFamily,
1371
+ fontSize,
1372
+ fontWeight: 600,
1373
+ lineHeight: 1.32,
1374
+ letterSpacing: "-0.01em",
1375
+ color: textColor,
1376
+ textShadow: FLOOR_SHADOW,
1377
+ display: "flex",
1378
+ flexWrap: "wrap",
1379
+ gap: "0 0.28em"
1380
+ }
1381
+ },
1382
+ words.map((w, i) => /* @__PURE__ */ React9.createElement("span", { key: i, style: wordStyle(i) }, w))
1383
+ ), (author || role) && /* @__PURE__ */ React9.createElement("div", { style: { marginTop: fontSize * 0.7 } }, /* @__PURE__ */ React9.createElement(
1384
+ "div",
1385
+ {
1386
+ style: {
1387
+ height: 3,
1388
+ width: `${ruleP * 12}%`,
1389
+ background: accentColor,
1390
+ borderRadius: 2,
1391
+ marginBottom: fontSize * 0.3
1392
+ }
1393
+ }
1394
+ ), /* @__PURE__ */ React9.createElement(
1395
+ "div",
1396
+ {
1397
+ style: {
1398
+ fontFamily,
1399
+ opacity: interpolate12(attribIn, [0, 1], [0, 1]),
1400
+ transform: `translateY(${interpolate12(attribIn, [0, 1], [14, 0])}px)`,
1401
+ textShadow: FLOOR_SHADOW
1402
+ }
1403
+ },
1404
+ author && /* @__PURE__ */ React9.createElement("span", { style: { fontSize: fontSize * 0.42, fontWeight: 700, color: textColor } }, author),
1405
+ role && /* @__PURE__ */ React9.createElement(
1406
+ "span",
1407
+ {
1408
+ style: {
1409
+ fontSize: fontSize * 0.38,
1410
+ fontWeight: 400,
1411
+ color: textColor,
1412
+ opacity: 0.6,
1413
+ marginLeft: author ? "0.8em" : 0
1414
+ }
1415
+ },
1416
+ role
1417
+ )
1418
+ ))));
1419
+ };
1420
+
1421
+ // ../execution/primitives/src/text/slot-machine-roll/index.tsx
1422
+ import { spring as spring8, useCurrentFrame as useCurrentFrame16, useVideoConfig as useVideoConfig15 } from "remotion";
1423
+ function SlotMachineRoll({
1424
+ from = "$99",
1425
+ to = "$199",
1426
+ fontSize = 120,
1427
+ color = FLOOR_TEXT,
1428
+ fontFamily = resolveTypeface("display"),
1429
+ fontWeight = 700,
1430
+ speed = 1,
1431
+ className
1432
+ }) {
1433
+ const frame = useCurrentFrame16() * speed;
1434
+ const { fps } = useVideoConfig15();
1435
+ const len = Math.max(from.length, to.length);
1436
+ const paddedFrom = from.padStart(len, " ");
1437
+ const paddedTo = to.padStart(len, " ");
1438
+ const columns = [];
1439
+ for (let i = 0; i < len; i++) {
1440
+ const raw = spring8({
1441
+ frame: frame - i * 4,
1442
+ fps,
1443
+ config: { damping: 14 }
1444
+ });
1445
+ const t = Math.max(0, Math.min(1, raw));
1446
+ columns.push(
1447
+ /* @__PURE__ */ React.createElement(
1448
+ "span",
1449
+ {
1450
+ key: i,
1451
+ style: {
1452
+ display: "inline-block",
1453
+ overflow: "hidden",
1454
+ height: "1.1em",
1455
+ lineHeight: "1.1em",
1456
+ verticalAlign: "top",
1457
+ width: "0.7em",
1458
+ textAlign: "center"
1459
+ }
1460
+ },
1461
+ /* @__PURE__ */ React.createElement(
1462
+ "span",
1463
+ {
1464
+ style: {
1465
+ display: "flex",
1466
+ flexDirection: "column",
1467
+ transform: `translateY(${-t * fontSize * 1.1}px)`
1468
+ }
1469
+ },
1470
+ /* @__PURE__ */ React.createElement("span", null, paddedFrom[i]),
1471
+ /* @__PURE__ */ React.createElement("span", null, paddedTo[i])
1472
+ )
1473
+ )
1474
+ );
1475
+ }
1476
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
1477
+ "span",
1478
+ {
1479
+ className,
1480
+ style: {
1481
+ fontSize,
1482
+ fontWeight,
1483
+ color,
1484
+ letterSpacing: "-0.03em",
1485
+ fontFamily,
1486
+ textShadow: resolveContrast().textShadow,
1487
+ lineHeight: 1.1
1488
+ }
1489
+ },
1490
+ columns
1491
+ ));
1492
+ }
1493
+
1494
+ // ../execution/primitives/src/text/stat-counter/index.tsx
1495
+ import React10 from "react";
1496
+ import { AbsoluteFill as AbsoluteFill6, Easing, interpolate as interpolate13, spring as spring9, useCurrentFrame as useCurrentFrame17, useVideoConfig as useVideoConfig16 } from "remotion";
1497
+ var StatCounter = ({
1498
+ value,
1499
+ prefix = "",
1500
+ suffix = "",
1501
+ label = "",
1502
+ accentColor = ACCENT,
1503
+ decimals = 0,
1504
+ countFrames = 45,
1505
+ position = "center",
1506
+ tokens = {}
1507
+ }) => {
1508
+ const frame = useCurrentFrame17();
1509
+ const { fps } = useVideoConfig16();
1510
+ const t = frame / fps;
1511
+ const {
1512
+ fontFamily = resolveTypeface("display"),
1513
+ fontSize = 190,
1514
+ textColor = FLOOR_TEXT
1515
+ } = tokens;
1516
+ const countP = interpolate13(frame, [0, countFrames], [0, 1], {
1517
+ extrapolateLeft: "clamp",
1518
+ extrapolateRight: "clamp",
1519
+ easing: Easing.out(Easing.exp)
1520
+ });
1521
+ const shown = (value * countP).toLocaleString("en-US", {
1522
+ minimumFractionDigits: decimals,
1523
+ maximumFractionDigits: decimals
1524
+ });
1525
+ const enter = spring9({ frame, fps, config: { damping: 16, stiffness: 120, mass: 0.9 } });
1526
+ const scale = interpolate13(enter, [0, 1], [0.94, 1]);
1527
+ const opacity = interpolate13(enter, [0, 0.4], [0, 1], { extrapolateRight: "clamp" });
1528
+ const lineP = interpolate13(frame, [countFrames * 0.6, countFrames * 1.2], [0, 1], {
1529
+ extrapolateLeft: "clamp",
1530
+ extrapolateRight: "clamp",
1531
+ easing: Easing.bezier(0.65, 0, 0.35, 1)
1532
+ });
1533
+ const idleGlow = 0.55 + Math.sin(2 * Math.PI * 0.4 * t) * 0.2;
1534
+ const labelIn = spring9({
1535
+ frame: frame - countFrames * 0.7,
1536
+ fps,
1537
+ config: { damping: 15, stiffness: 110, mass: 0.8 }
1538
+ });
1539
+ const align = position === "center" ? "center" : position === "right" ? "flex-end" : "flex-start";
1540
+ const textAlign = position === "center" ? "center" : position === "right" ? "right" : "left";
1541
+ return /* @__PURE__ */ React10.createElement(AbsoluteFill6, { style: { justifyContent: "center", alignItems: align, padding: 80 } }, /* @__PURE__ */ React10.createElement("div", { style: { opacity, transform: `scale(${scale})`, textAlign } }, /* @__PURE__ */ React10.createElement(
1542
+ "div",
1543
+ {
1544
+ style: {
1545
+ fontFamily,
1546
+ fontSize,
1547
+ fontWeight: 800,
1548
+ letterSpacing: "-0.03em",
1549
+ color: textColor,
1550
+ textShadow: FLOOR_SHADOW,
1551
+ fontVariantNumeric: "tabular-nums",
1552
+ lineHeight: 1.05,
1553
+ whiteSpace: "nowrap"
1554
+ }
1555
+ },
1556
+ prefix,
1557
+ shown,
1558
+ /* @__PURE__ */ React10.createElement("span", { style: { color: accentColor } }, suffix)
1559
+ ), /* @__PURE__ */ React10.createElement(
1560
+ "div",
1561
+ {
1562
+ style: {
1563
+ height: Math.max(4, fontSize * 0.035),
1564
+ width: `${lineP * 100}%`,
1565
+ marginTop: fontSize * 0.08,
1566
+ marginLeft: position === "right" ? "auto" : position === "center" ? "auto" : 0,
1567
+ marginRight: position === "left" ? "auto" : position === "center" ? "auto" : 0,
1568
+ background: accentColor,
1569
+ borderRadius: 4,
1570
+ opacity: lineP >= 1 ? idleGlow : 0.9
1571
+ }
1572
+ }
1573
+ ), label && /* @__PURE__ */ React10.createElement(
1574
+ "div",
1575
+ {
1576
+ style: {
1577
+ fontFamily,
1578
+ fontSize: Math.round(fontSize * 0.19),
1579
+ fontWeight: 500,
1580
+ letterSpacing: "0.14em",
1581
+ textTransform: "uppercase",
1582
+ color: textColor,
1583
+ opacity: interpolate13(labelIn, [0, 1], [0, 0.75]),
1584
+ transform: `translateY(${interpolate13(labelIn, [0, 1], [18, 0])}px)`,
1585
+ marginTop: fontSize * 0.12,
1586
+ textShadow: FLOOR_SHADOW
1587
+ }
1588
+ },
1589
+ label
1590
+ )));
1591
+ };
1592
+
1593
+ // ../execution/primitives/src/text/token-stream/index.tsx
1594
+ import React11 from "react";
1595
+ import { AbsoluteFill as AbsoluteFill7, interpolate as interpolate14, useCurrentFrame as useCurrentFrame18, useVideoConfig as useVideoConfig17 } from "remotion";
1596
+ function jitter(i, seed) {
1597
+ let h = Math.imul(i + 1, 374761393) + Math.imul(seed, 668265263);
1598
+ h = Math.imul(h ^ h >>> 13, 1274126177);
1599
+ return ((h ^ h >>> 16) >>> 0) / 4294967295;
1600
+ }
1601
+ var TokenStream = ({
1602
+ text,
1603
+ tokensPerSecond = 9,
1604
+ accentColor = ACCENT,
1605
+ startAt = 8,
1606
+ tokens = {}
1607
+ }) => {
1608
+ const frame = useCurrentFrame18();
1609
+ const { fps } = useVideoConfig17();
1610
+ const {
1611
+ fontFamily = resolveTypeface("display"),
1612
+ fontSize = 54,
1613
+ textColor = FLOOR_TEXT
1614
+ } = tokens;
1615
+ const words = text.split(" ").filter(Boolean);
1616
+ const base = fps / tokensPerSecond;
1617
+ const arrivals = [];
1618
+ let tAcc = startAt;
1619
+ for (let i = 0; i < words.length; i++) {
1620
+ const j = jitter(i, 7);
1621
+ tAcc += base * (0.55 + j * 0.9) + (j > 0.86 ? base * 2.2 : 0);
1622
+ arrivals.push(tAcc);
1623
+ }
1624
+ const done = arrivals.length ? arrivals[arrivals.length - 1] + 6 : startAt;
1625
+ const streaming = frame < done;
1626
+ const cursorOpacity = streaming ? 0.55 + Math.sin(2 * Math.PI * 2.2 * frame / fps) * 0.45 : frame < done + 24 ? Math.round((frame - done) / 8 % 2) === 0 ? 1 : 0.1 : interpolate14(frame, [done + 24, done + 36], [1, 0], {
1627
+ extrapolateLeft: "clamp",
1628
+ extrapolateRight: "clamp"
1629
+ });
1630
+ const arrivedCount = arrivals.filter((a) => frame >= a).length;
1631
+ const cursorAt = Math.max(0, arrivedCount - 1);
1632
+ return /* @__PURE__ */ React11.createElement(AbsoluteFill7, { style: { justifyContent: "center", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(
1633
+ "div",
1634
+ {
1635
+ style: {
1636
+ maxWidth: "68%",
1637
+ fontFamily,
1638
+ fontSize,
1639
+ fontWeight: 500,
1640
+ lineHeight: 1.42,
1641
+ letterSpacing: "-0.005em",
1642
+ color: textColor,
1643
+ textShadow: FLOOR_SHADOW
1644
+ }
1645
+ },
1646
+ words.map((w, i) => {
1647
+ const a = arrivals[i];
1648
+ const o = interpolate14(frame, [a, a + 4], [0, 1], {
1649
+ extrapolateLeft: "clamp",
1650
+ extrapolateRight: "clamp"
1651
+ });
1652
+ const rise = interpolate14(frame, [a, a + 5], [6, 0], {
1653
+ extrapolateLeft: "clamp",
1654
+ extrapolateRight: "clamp"
1655
+ });
1656
+ return /* @__PURE__ */ React11.createElement(
1657
+ "span",
1658
+ {
1659
+ key: i,
1660
+ style: {
1661
+ display: "inline-block",
1662
+ position: "relative",
1663
+ transform: `translateY(${rise}px)`,
1664
+ marginRight: "0.26em"
1665
+ }
1666
+ },
1667
+ /* @__PURE__ */ React11.createElement("span", { style: { opacity: o } }, w),
1668
+ i === cursorAt && /* @__PURE__ */ React11.createElement(
1669
+ "span",
1670
+ {
1671
+ style: {
1672
+ position: "absolute",
1673
+ left: arrivedCount === 0 ? 0 : "100%",
1674
+ marginLeft: arrivedCount === 0 ? 0 : "0.13em",
1675
+ bottom: fontSize * -0.08,
1676
+ width: fontSize * 0.5,
1677
+ height: fontSize * 1.02,
1678
+ background: accentColor,
1679
+ borderRadius: 3,
1680
+ opacity: cursorOpacity
1681
+ }
1682
+ }
1683
+ )
1684
+ );
1685
+ })
1686
+ ));
1687
+ };
1688
+
1689
+ // ../execution/primitives/src/text/strikethrough-replace/index.tsx
1690
+ import { useMemo as useMemo2 } from "react";
1691
+ import { interpolate as interpolate15, useCurrentFrame as useCurrentFrame19, useVideoConfig as useVideoConfig18 } from "remotion";
1692
+ function StrikethroughReplace({
1693
+ from,
1694
+ to,
1695
+ lineColor = "#ff5e3a",
1696
+ fontSize = 48,
1697
+ color = FLOOR_TEXT,
1698
+ fontFamily = resolveTypeface("display"),
1699
+ fontWeight = 600,
1700
+ speed = 1,
1701
+ className
1702
+ }) {
1703
+ const frame = useCurrentFrame19() * speed;
1704
+ const { durationInFrames } = useVideoConfig18();
1705
+ const strikeEnd = durationInFrames * 0.4;
1706
+ const fadeStart = durationInFrames * 0.4;
1707
+ const fadeEnd = durationInFrames * 0.6;
1708
+ const linePct = interpolate15(frame, [0, strikeEnd], [0, 100], {
1709
+ extrapolateLeft: "clamp",
1710
+ extrapolateRight: "clamp"
1711
+ });
1712
+ const fromOpacity = interpolate15(frame, [fadeStart, fadeEnd], [1, 0], {
1713
+ extrapolateLeft: "clamp",
1714
+ extrapolateRight: "clamp"
1715
+ });
1716
+ const toOpacity = interpolate15(frame, [fadeStart, fadeEnd], [0, 1], {
1717
+ extrapolateLeft: "clamp",
1718
+ extrapolateRight: "clamp"
1719
+ });
1720
+ const toY = interpolate15(frame, [fadeStart, fadeEnd], [8, 0], {
1721
+ extrapolateLeft: "clamp",
1722
+ extrapolateRight: "clamp"
1723
+ });
1724
+ const fittedFontSize = useMemo2(() => {
1725
+ const longest = [from, to].map((s) => (s ?? "").trim()).sort((a, b) => b.length - a.length)[0] || "";
1726
+ if (!longest) return fontSize;
1727
+ try {
1728
+ const { fontSize: fs } = fitTextOnNLines({
1729
+ text: longest,
1730
+ maxLines: 1,
1731
+ maxBoxWidth: 1400,
1732
+ fontFamily,
1733
+ fontWeight,
1734
+ letterSpacing: "-0.03em",
1735
+ maxFontSize: fontSize,
1736
+ validateFontIsLoaded: false
1737
+ });
1738
+ return resolveFitFontSize({
1739
+ singleLineFitFontSize: fs,
1740
+ minFontSize: Math.round(fontSize * 0.5),
1741
+ maxFontSize: fontSize
1742
+ }).fontSize;
1743
+ } catch {
1744
+ return fontSize;
1745
+ }
1746
+ }, [from, to, fontFamily, fontSize, fontWeight]);
1747
+ const textStyle = {
1748
+ fontSize: fittedFontSize,
1749
+ fontWeight,
1750
+ color,
1751
+ letterSpacing: "-0.03em",
1752
+ fontFamily,
1753
+ whiteSpace: "nowrap",
1754
+ textShadow: resolveContrast().textShadow
1755
+ };
1756
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
1757
+ "div",
1758
+ {
1759
+ style: {
1760
+ position: "relative",
1761
+ display: "inline-flex",
1762
+ alignItems: "center",
1763
+ justifyContent: "center"
1764
+ }
1765
+ },
1766
+ /* @__PURE__ */ React.createElement(
1767
+ "span",
1768
+ {
1769
+ className,
1770
+ style: {
1771
+ ...textStyle,
1772
+ position: "absolute",
1773
+ opacity: fromOpacity
1774
+ }
1775
+ },
1776
+ from,
1777
+ /* @__PURE__ */ React.createElement(
1778
+ "span",
1779
+ {
1780
+ "aria-hidden": true,
1781
+ style: {
1782
+ position: "absolute",
1783
+ left: 0,
1784
+ top: "50%",
1785
+ height: Math.max(2, Math.round(fittedFontSize * 0.08)),
1786
+ width: `${linePct}%`,
1787
+ background: lineColor,
1788
+ transform: "translateY(-50%)",
1789
+ borderRadius: 2
1790
+ }
1791
+ }
1792
+ )
1793
+ ),
1794
+ /* @__PURE__ */ React.createElement(
1795
+ "span",
1796
+ {
1797
+ className,
1798
+ style: {
1799
+ ...textStyle,
1800
+ opacity: toOpacity,
1801
+ transform: `translateY(${toY}px)`
1802
+ }
1803
+ },
1804
+ to
1805
+ )
1806
+ ));
1807
+ }
1808
+
1809
+ // ../execution/primitives/src/text/masked-slide-reveal/index.tsx
1810
+ import { useMemo as useMemo3 } from "react";
1811
+ import { spring as spring10, useCurrentFrame as useCurrentFrame20, useVideoConfig as useVideoConfig19 } from "remotion";
1812
+ function MaskedSlideReveal({
1813
+ text,
1814
+ staggerDelay = 3,
1815
+ fontSize = 72,
1816
+ color = FLOOR_TEXT,
1817
+ fontFamily = resolveTypeface("display"),
1818
+ fontWeight = 700,
1819
+ speed = 1,
1820
+ className
1821
+ }) {
1822
+ const frame = useCurrentFrame20() * speed;
1823
+ const { fps } = useVideoConfig19();
1824
+ const words = text.split(" ");
1825
+ const fittedFontSize = useMemo3(() => {
1826
+ const t = (text ?? "").trim();
1827
+ if (!t) return fontSize;
1828
+ try {
1829
+ const { fontSize: fs } = fitTextOnNLines({
1830
+ text: t,
1831
+ maxLines: 2,
1832
+ maxBoxWidth: 1500,
1833
+ fontFamily,
1834
+ fontWeight,
1835
+ letterSpacing: "-0.03em",
1836
+ maxFontSize: fontSize,
1837
+ validateFontIsLoaded: false
1838
+ });
1839
+ return resolveFitFontSize({
1840
+ singleLineFitFontSize: fs,
1841
+ minFontSize: Math.round(fontSize * 0.5),
1842
+ maxFontSize: fontSize
1843
+ }).fontSize;
1844
+ } catch {
1845
+ return fontSize;
1846
+ }
1847
+ }, [text, fontFamily, fontSize, fontWeight]);
1848
+ return /* @__PURE__ */ React.createElement(TextStage, null, /* @__PURE__ */ React.createElement(
1849
+ "span",
1850
+ {
1851
+ className,
1852
+ style: {
1853
+ fontSize: fittedFontSize,
1854
+ fontWeight,
1855
+ color,
1856
+ letterSpacing: "-0.03em",
1857
+ fontFamily,
1858
+ textShadow: resolveContrast().textShadow
1859
+ }
1860
+ },
1861
+ words.map((word, i) => {
1862
+ const t = spring10({
1863
+ frame: frame - i * staggerDelay,
1864
+ fps,
1865
+ config: { damping: 14 }
1866
+ });
1867
+ return /* @__PURE__ */ React.createElement(
1868
+ "span",
1869
+ {
1870
+ key: i,
1871
+ style: {
1872
+ display: "inline-block",
1873
+ overflow: "hidden",
1874
+ verticalAlign: "bottom",
1875
+ lineHeight: 1,
1876
+ marginRight: "0.25em"
1877
+ }
1878
+ },
1879
+ /* @__PURE__ */ React.createElement(
1880
+ "span",
1881
+ {
1882
+ style: {
1883
+ display: "inline-block",
1884
+ transform: `translateY(${(1 - t) * 100}%)`
1885
+ }
1886
+ },
1887
+ word
1888
+ )
1889
+ );
1890
+ })
1891
+ ));
1892
+ }
1893
+
1894
+ // ../execution/primitives/src/text/blur-reveal/config.ts
1895
+ import { z } from "zod";
1896
+ var paramsSchema = z.object({
1897
+ text: z.string().min(1).max(160).describe(
1898
+ "The text to reveal. Shorter reads best \u2014 longer strings make the focus-pull feel slow. Auto-fits: long copy shrinks to fit the frame (then wraps), so it no longer overflows."
1899
+ ),
1900
+ blur: z.number().min(0).max(40).default(10).describe(
1901
+ "Initial blur radius in pixels. Higher = more dramatic focus-pull. 6\u201314 is the sweet spot."
1902
+ ),
1903
+ fontSize: z.number().min(16).max(240).default(96).describe(
1904
+ "Font size in pixels at the canonical 1920\xD71080 frame."
1905
+ ),
1906
+ fontWeight: z.number().min(100).max(900).default(600).describe(
1907
+ "CSS font weight. 600 reads as confident; 800+ feels like a headline."
1908
+ ),
1909
+ color: z.string().default(FLOOR_TEXT).describe(
1910
+ "Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."
1911
+ ),
1912
+ fontFamily: z.string().default(resolveTypeface("display")).describe(
1913
+ "Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it."
1914
+ ),
1915
+ speed: z.number().min(0.25).max(4).default(1).describe(
1916
+ "Playback speed multiplier. 1 = normal; 2 = twice as fast."
1917
+ )
1918
+ }).passthrough();
1919
+ var config = {
1920
+ id: "blur-reveal",
1921
+ component: BlurReveal,
1922
+ name: "Blur Reveal",
1923
+ category: "text",
1924
+ kind: "component",
1925
+ version: "0.1.1",
1926
+ intent: "reveal-text",
1927
+ description: 'Single line of text fades in from a heavy gaussian blur into sharp focus. The "focus pull" feel makes it ideal for cinematic title cards, brand reveals, and product taglines where the audience should land on one phrase.',
1928
+ useWhen: "Hero opens, brand statements, single-line callouts. Avoid for >40-character strings (the blur duration scales with content and starts feeling sluggish), and avoid combining with another text primitive that also fades \u2014 pick one focal element per beat.",
1929
+ pairsWith: ["mesh-gradient-bg", "dynamic-grid", "success-confetti"],
1930
+ avoidWith: ["typewriter", "staggered-fade-up"],
1931
+ tier: "standard",
1932
+ useCase: ["title-over-footage", "full-scene"],
1933
+ tags: ["text", "reveal", "blur", "cinematic", "title", "hero"],
1934
+ mood: ["cinematic", "editorial", "minimal", "soft"],
1935
+ paramsSchema,
1936
+ propDefaults: { blur: 10, fontSize: 96, fontWeight: 600, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
1937
+ examples: [
1938
+ {
1939
+ name: "editorial",
1940
+ mood: ["editorial", "minimal"],
1941
+ params: { text: "A film by someone", blur: 8, fontSize: 96, fontWeight: 600, color: FLOOR_TEXT, speed: 1 },
1942
+ description: "Calm, magazine-style reveal over footage. Default values; safest pick."
1943
+ },
1944
+ {
1945
+ name: "cinematic-bold",
1946
+ mood: ["cinematic", "aggressive"],
1947
+ params: { text: "CINEMATIC", blur: 14, fontSize: 144, fontWeight: 800, color: TEXT_HI, speed: 0.85 },
1948
+ description: "Heavier blur + bigger weight + slower speed \u2014 feels like a film opening."
1949
+ },
1950
+ {
1951
+ name: "product-tagline",
1952
+ mood: ["corporate", "minimal"],
1953
+ params: { text: "Built for builders.", blur: 6, fontSize: 72, fontWeight: 500, color: FLOOR_TEXT, speed: 1.2 },
1954
+ description: "Subtle product-page tagline. Lower blur, lighter weight, slightly faster."
1955
+ }
1956
+ ],
1957
+ textParam: "text",
1958
+ subtextParam: null,
1959
+ tokens: [
1960
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
1961
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
1962
+ ],
1963
+ durationInFrames: 90,
1964
+ fps: 30,
1965
+ width: 1920,
1966
+ height: 1080,
1967
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "editorial" }
1968
+ };
1969
+
1970
+ // ../execution/primitives/src/text/cinematic-title/config.ts
1971
+ import { z as z2 } from "zod";
1972
+ var tokensSchema = z2.object({
1973
+ fontFamily: z2.string().default(resolveTypeface("display")),
1974
+ fontSize: z2.number().optional(),
1975
+ subtextFontSize: z2.number().optional(),
1976
+ textColor: z2.string().default(FLOOR_TEXT),
1977
+ accentColor: z2.string().optional(),
1978
+ letterSpacing: z2.number().optional()
1979
+ }).passthrough();
1980
+ var paramsSchema2 = z2.object({
1981
+ text: z2.string().min(1).max(80).describe("Primary title text. Auto-fits: long copy shrinks to fit the frame (then wraps/ellipsizes), so you are not capped at a cramped line."),
1982
+ subtitle: z2.string().max(140).optional().describe('Optional subtitle line. Used for byline / film-credit style ("a film by ..."). Auto-fits and wraps to 2 lines.'),
1983
+ variant: z2.enum(["default", "bold", "zoom"]).default("default").describe(
1984
+ "Visual variant. default: letterboxed fade with letter-spacing tighten. bold: heavier weight + spring entrance. zoom: scale-from-blur with overshoot."
1985
+ ),
1986
+ position: z2.enum(["center", "top", "bottom"]).default("center").describe("Vertical position of the title block."),
1987
+ tokens: tokensSchema.default({}).describe("Visual tokens. fontFamily, fontSize, textColor, accentColor, letterSpacing.")
1988
+ }).passthrough();
1989
+ var config2 = {
1990
+ id: "cinematic-title",
1991
+ component: CinematicTitle,
1992
+ name: "Cinematic Title",
1993
+ category: "text",
1994
+ kind: "component",
1995
+ version: "0.1.1",
1996
+ intent: "name-card",
1997
+ description: "Full-screen title card with cinematic letterbox bars sliding in, primary text fading up, and optional subtitle. Three variants tune the entrance physics: default (subtle), bold (heavy spring), zoom (scale-from-blur with overshoot).",
1998
+ useWhen: "Film opens, brand intros, dramatic chapter cards. Avoid for in-story callouts or quick beats \u2014 the letterbox bars and exit animation eat 40+ frames.",
1999
+ pairsWith: ["light-leak", "mesh-gradient-bg", "parallax", "vignette"],
2000
+ avoidWith: ["lower-third", "kinetic-type"],
2001
+ tier: "standard",
2002
+ useCase: ["intro", "full-scene"],
2003
+ tags: ["text", "title", "cinematic", "letterbox", "hero", "card"],
2004
+ mood: ["cinematic", "editorial"],
2005
+ paramsSchema: paramsSchema2,
2006
+ propDefaults: { variant: "default", position: "center" },
2007
+ examples: [
2008
+ {
2009
+ name: "classic",
2010
+ mood: ["cinematic"],
2011
+ params: { text: "CINEMATIC", subtitle: "A film by someone", variant: "default", position: "center" }
2012
+ },
2013
+ {
2014
+ name: "bold-impact",
2015
+ mood: ["cinematic", "aggressive"],
2016
+ params: { text: "CHAPTER ONE", variant: "bold", position: "center" }
2017
+ },
2018
+ {
2019
+ name: "zoom-reveal",
2020
+ mood: ["cinematic"],
2021
+ params: { text: "NEXT", variant: "zoom", position: "center" }
2022
+ }
2023
+ ],
2024
+ textParam: "text",
2025
+ subtextParam: "subtitle",
2026
+ tokens: [
2027
+ { propPath: "tokens.textColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2028
+ { propPath: "tokens.accentColor", cssVar: "--cf-accent", fallback: WARNING, brandKitPath: "colors.accent" },
2029
+ { propPath: "tokens.fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2030
+ ],
2031
+ durationInFrames: 120,
2032
+ fps: 30,
2033
+ width: 1920,
2034
+ height: 1080,
2035
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "classic" }
2036
+ };
2037
+
2038
+ // ../execution/primitives/src/text/inline-highlight/config.ts
2039
+ import { z as z3 } from "zod";
2040
+ var paramsSchema3 = z3.object({
2041
+ // `before` was required; relaxed to optional with empty default so a
2042
+ // degenerate "single highlighted word, no preceding context" pick is
2043
+ // valid. The renderer treats empty `before` as no-op text. Agent
2044
+ // picks where the highlighted word is the entire phrase (a common
2045
+ // editorial choice on short hooks) no longer crash the render with
2046
+ // `inline-highlight: invalid params — before: Required`. See Block 2
2047
+ // (editorial intelligence) for the upstream fix: validate agent tool
2048
+ // calls against the registry's paramsSchema before accepting them,
2049
+ // so the agent self-corrects instead of relying on schema relaxation.
2050
+ before: z3.string().default("").describe('Text leading up to the highlighted word, including trailing space if any. Empty string is valid for "single word" picks.'),
2051
+ highlight: z3.string().min(1).describe("The single word or phrase to emphasize."),
2052
+ after: z3.string().default("").describe("Text after the highlight, including leading space if any."),
2053
+ baseColor: z3.string().default(FLOOR_TEXT).describe("Color of the surrounding (non-highlighted) text. Defaults to a video-safe off-white so it survives over footage; pass $brand:colors.textOnMedia to theme it."),
2054
+ highlightColor: z3.string().default(ACCENT_STRONG).describe("Color of the emphasized word. A warm accent by default; use a brand-kit accent for cascade."),
2055
+ fontSize: z3.number().min(16).max(180).default(72).describe("Font size in pixels at 1920\xD71080."),
2056
+ fontWeight: z3.number().min(100).max(900).default(600).describe("CSS font weight applied uniformly."),
2057
+ speed: z3.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
2058
+ fontFamily: z3.string().default(resolveTypeface("display")).describe("Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it.")
2059
+ }).passthrough();
2060
+ var config3 = {
2061
+ id: "inline-highlight",
2062
+ component: InlineHighlight,
2063
+ name: "Inline Highlight",
2064
+ category: "text",
2065
+ kind: "component",
2066
+ version: "0.1.1",
2067
+ intent: "emphasize-word",
2068
+ description: "Single sentence with one word color-shifting from a muted base color to a brand accent. The eye lands on the highlighted word naturally because the surrounding text fades to background.",
2069
+ useWhen: 'Caption callouts (e.g., "the user said {important_word}"), pull-quotes from a transcript, when you want to draw the eye to one specific word in a longer phrase. Avoid for short text where the highlight has nothing to contrast against.',
2070
+ pairsWith: ["marker-highlight", "shimmer-sweep", "mesh-gradient-bg"],
2071
+ avoidWith: ["marker-highlight"],
2072
+ tier: "standard",
2073
+ useCase: ["emphasis"],
2074
+ tags: ["text", "highlight", "emphasis", "word", "caption", "callout"],
2075
+ mood: ["editorial", "minimal", "corporate"],
2076
+ paramsSchema: paramsSchema3,
2077
+ propDefaults: { before: "", after: "", baseColor: FLOOR_TEXT, highlightColor: ACCENT_STRONG, fontSize: 72, fontWeight: 600, speed: 1, fontFamily: resolveTypeface("display") },
2078
+ examples: [
2079
+ {
2080
+ name: "product-emphasis",
2081
+ mood: ["corporate"],
2082
+ params: { before: "Built for ", highlight: "builders", after: ".", baseColor: FLOOR_TEXT, highlightColor: ACCENT_STRONG, fontSize: 80, fontWeight: 700, speed: 1 }
2083
+ },
2084
+ {
2085
+ name: "quote-pull",
2086
+ mood: ["editorial"],
2087
+ params: { before: "It just ", highlight: "works", after: ".", baseColor: TEXT_MUTED, highlightColor: TEAL, fontSize: 96, fontWeight: 500, speed: 0.9 }
2088
+ }
2089
+ ],
2090
+ textParam: "highlight",
2091
+ subtextParam: null,
2092
+ tokens: [
2093
+ { propPath: "baseColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2094
+ { propPath: "highlightColor", cssVar: "--cf-accent", fallback: ACCENT_STRONG, brandKitPath: "colors.accent" },
2095
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2096
+ ],
2097
+ durationInFrames: 90,
2098
+ fps: 30,
2099
+ width: 1920,
2100
+ height: 1080,
2101
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "product-emphasis" }
2102
+ };
2103
+
2104
+ // ../execution/primitives/src/text/karaoke/config.ts
2105
+ import { z as z4 } from "zod";
2106
+ var wordSchema = z4.object({
2107
+ text: z4.string().min(1),
2108
+ startMs: z4.number().min(0),
2109
+ endMs: z4.number().min(0)
2110
+ });
2111
+ var tokensSchema2 = z4.object({
2112
+ fontFamily: z4.string().default(resolveTypeface("caption")),
2113
+ fontSize: z4.number().optional(),
2114
+ textColor: z4.string().default(FLOOR_TEXT),
2115
+ activeColor: z4.string().optional(),
2116
+ activeScale: z4.number().optional()
2117
+ }).passthrough();
2118
+ var paramsSchema4 = z4.object({
2119
+ words: z4.array(wordSchema).min(1).describe(
2120
+ "Array of timed words. Each word has text + startMs/endMs in milliseconds relative to the clip start. Source from the transcript."
2121
+ ),
2122
+ position: z4.enum(["center", "left", "right", "bottom"]).default("center").describe('Block position. "bottom" is canonical for caption-style overlays.'),
2123
+ tokens: tokensSchema2.default({}).describe("Visual tokens. fontFamily, fontSize, textColor, activeColor, activeScale.")
2124
+ }).passthrough();
2125
+ var config4 = {
2126
+ id: "karaoke",
2127
+ component: Karaoke,
2128
+ name: "Karaoke",
2129
+ category: "text",
2130
+ kind: "component",
2131
+ version: "0.1.1",
2132
+ intent: "caption-sync",
2133
+ description: "Word-by-word highlighted captions synced to speech timing. Each word gets a spring scale boost and accent color when its timestamp is active. Past words stay full-opacity; future words dim to 0.4. Reads as confident, transcript-backed captioning.",
2134
+ useWhen: "Podcast clips, interview reels, any video where the audio is the source and the captions need to land word-perfect. Requires structured `words[]` from a transcript pipeline (Groq Whisper, AssemblyAI, etc.) \u2014 do NOT use plain text. For non-synced text, use typewriter or staggered-fade-up.",
2135
+ pairsWith: ["lower-third", "mesh-gradient-bg", "pulsing-indicator"],
2136
+ avoidWith: ["typewriter", "staggered-fade-up", "kinetic-type"],
2137
+ tier: "niche",
2138
+ useCase: ["title-over-footage"],
2139
+ tags: ["text", "captions", "karaoke", "synced", "transcript", "word-level", "podcast"],
2140
+ mood: ["editorial", "breaking-news", "minimal"],
2141
+ paramsSchema: paramsSchema4,
2142
+ propDefaults: { position: "center" },
2143
+ examples: [
2144
+ {
2145
+ name: "podcast-bottom",
2146
+ mood: ["editorial"],
2147
+ params: {
2148
+ words: [
2149
+ { text: "The", startMs: 0, endMs: 200 },
2150
+ { text: "whole", startMs: 200, endMs: 500 },
2151
+ { text: "point", startMs: 500, endMs: 800 },
2152
+ { text: "is", startMs: 800, endMs: 1e3 },
2153
+ { text: "distribution.", startMs: 1e3, endMs: 1600 }
2154
+ ],
2155
+ position: "bottom"
2156
+ },
2157
+ description: "Standard podcast-clip caption position with 5 words sample."
2158
+ }
2159
+ ],
2160
+ textParam: null,
2161
+ subtextParam: null,
2162
+ tokens: [
2163
+ { propPath: "tokens.textColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2164
+ { propPath: "tokens.activeColor", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" },
2165
+ { propPath: "tokens.fontFamily", cssVar: "--cf-font-caption", fallback: resolveTypeface("caption"), brandKitPath: "fonts.caption" }
2166
+ ],
2167
+ durationInFrames: 60,
2168
+ fps: 30,
2169
+ width: 1080,
2170
+ height: 1920,
2171
+ preview: { thumbnailFrame: 30, mode: "loop", defaultExample: "podcast-bottom" }
2172
+ };
2173
+
2174
+ // ../execution/primitives/src/text/kinetic-type/config.ts
2175
+ import { z as z5 } from "zod";
2176
+ var tokensSchema3 = z5.object({
2177
+ fontFamily: z5.string().default(resolveTypeface("display")),
2178
+ fontSize: z5.number().optional(),
2179
+ textColor: z5.string().default(FLOOR_TEXT)
2180
+ }).passthrough();
2181
+ var paramsSchema5 = z5.object({
2182
+ text: z5.string().min(1).max(200).describe("Multi-word phrase. Each word animates independently with stagger. Auto-fits: the phrase shrinks to fit the frame (then wraps) so you are not capped at a short line."),
2183
+ animation: z5.enum(["fly-in", "rotate", "scale-bounce", "cascade"]).default("fly-in").describe(
2184
+ "Per-word animation style. fly-in: slide up. rotate: rotate from tilt. scale-bounce: spring scale pop. cascade: drop from above."
2185
+ ),
2186
+ position: z5.enum(["center", "left", "right"]).default("center").describe("Horizontal alignment of the word block."),
2187
+ accentColor: z5.string().default(ACCENT).describe("Accent for the payoff (last) word. Empty string disables."),
2188
+ tokens: tokensSchema3.default({}).describe("Visual tokens. fontFamily, fontSize, textColor.")
2189
+ }).passthrough();
2190
+ var config5 = {
2191
+ id: "kinetic-type",
2192
+ component: KineticType,
2193
+ name: "Kinetic Type",
2194
+ category: "text",
2195
+ kind: "component",
2196
+ version: "0.2.1",
2197
+ intent: "reveal-text",
2198
+ description: "Per-word motion typography with four animation styles. Each word springs in with stagger, bringing energy and pace to multi-word phrases. Different from staggered-fade-up: words have actual rotation/scale dynamics, not just position+fade.",
2199
+ useWhen: "Hype reels, kinetic intros, brand statements that need movement. 3\u201310 words is the sweet spot. Avoid for read-along captions (use karaoke) or single words (use blur-reveal/tracking-in). The cascade and rotate variants feel playful \u2014 pick fly-in for editorial work.",
2200
+ pairsWith: ["mesh-gradient-bg", "success-confetti", "spring-pop-in"],
2201
+ avoidWith: ["karaoke", "cinematic-title", "staggered-fade-up"],
2202
+ tier: "niche",
2203
+ useCase: ["emphasis", "intro"],
2204
+ tags: ["text", "kinetic", "typography", "motion", "words", "energetic"],
2205
+ mood: ["playful", "aggressive", "breaking-news"],
2206
+ paramsSchema: paramsSchema5,
2207
+ propDefaults: { animation: "fly-in", position: "center", accentColor: ACCENT },
2208
+ examples: [
2209
+ {
2210
+ name: "fly-in-statement",
2211
+ mood: ["editorial"],
2212
+ params: { text: "Built for builders", animation: "fly-in", position: "center" }
2213
+ },
2214
+ {
2215
+ name: "cascade-drama",
2216
+ mood: ["cinematic", "aggressive"],
2217
+ params: { text: "EVERYTHING CHANGES NOW", animation: "cascade", position: "center" }
2218
+ },
2219
+ {
2220
+ name: "playful-bounce",
2221
+ mood: ["playful"],
2222
+ params: { text: "It just works!", animation: "scale-bounce", position: "center" }
2223
+ }
2224
+ ],
2225
+ textParam: "text",
2226
+ subtextParam: null,
2227
+ tokens: [
2228
+ { propPath: "tokens.textColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2229
+ { propPath: "tokens.fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2230
+ ],
2231
+ durationInFrames: 90,
2232
+ fps: 30,
2233
+ width: 1920,
2234
+ height: 1080,
2235
+ preview: { thumbnailFrame: 45, mode: "oneshot", defaultExample: "fly-in-statement" }
2236
+ };
2237
+
2238
+ // ../execution/primitives/src/text/lower-third/config.ts
2239
+ import { z as z6 } from "zod";
2240
+ var tokensSchema4 = z6.object({
2241
+ fontFamily: z6.string().default(resolveTypeface("caption")),
2242
+ fontSize: z6.number().optional(),
2243
+ subtitleFontSize: z6.number().optional(),
2244
+ textColor: z6.string().default(FLOOR_TEXT),
2245
+ accentColor: z6.string().optional(),
2246
+ backgroundColor: z6.string().optional()
2247
+ }).passthrough();
2248
+ var paramsSchema6 = z6.object({
2249
+ text: z6.string().min(1).max(80).describe("Primary line \u2014 speaker name or topic. Auto-fits (shrinks) to the bar."),
2250
+ subtitle: z6.string().max(120).optional().describe("Secondary line \u2014 title, role, or affiliation. Auto-fits (shrinks + wraps to 2 lines)."),
2251
+ variant: z6.enum(["classic", "modern", "cinematic"]).default("classic").describe(
2252
+ "Visual variant. classic: split accent + dark sub bar. modern: full accent rounded bg. cinematic: borderLeft accent + translucent dark."
2253
+ ),
2254
+ tokens: tokensSchema4.default({}).describe("Visual tokens. fontFamily, fontSize, subtitleFontSize, textColor, accentColor, backgroundColor.")
2255
+ }).passthrough();
2256
+ var config6 = {
2257
+ id: "lower-third",
2258
+ component: LowerThird,
2259
+ name: "Lower Third",
2260
+ category: "text",
2261
+ kind: "component",
2262
+ version: "0.1.2",
2263
+ intent: "name-card",
2264
+ description: "Broadcast-style speaker identification bar at the lower-left. Spring slide-in from the left, spring slide-out at end. Three variants for different aesthetics: classic (TV news split-bar), modern (rounded accent block), cinematic (translucent with accent stripe).",
2265
+ useWhen: "Identify the on-screen speaker, attribute a quote, name a location. Persistent throughout a 4\u20138 second beat. Avoid for content that needs full attention to the imagery \u2014 lower-thirds anchor the eye to the bottom-left.",
2266
+ pairsWith: ["karaoke", "parallax", "vignette", "color-grade"],
2267
+ avoidWith: ["cinematic-title", "changelog-bite"],
2268
+ tier: "standard",
2269
+ useCase: ["title-over-footage"],
2270
+ tags: ["text", "lower-third", "broadcast", "speaker", "name", "attribution"],
2271
+ mood: ["editorial", "corporate", "breaking-news"],
2272
+ paramsSchema: paramsSchema6,
2273
+ propDefaults: { variant: "classic" },
2274
+ examples: [
2275
+ {
2276
+ name: "classic-broadcast",
2277
+ mood: ["breaking-news"],
2278
+ params: { text: "Maya Alvarez", subtitle: "Head of Product", variant: "classic" }
2279
+ },
2280
+ {
2281
+ name: "modern-rounded",
2282
+ mood: ["corporate"],
2283
+ params: { text: "Karan", subtitle: "MindPump Podcast", variant: "modern" }
2284
+ },
2285
+ {
2286
+ name: "cinematic-stripe",
2287
+ mood: ["cinematic"],
2288
+ params: { text: "The Speaker", subtitle: "Topic of the moment", variant: "cinematic" }
2289
+ }
2290
+ ],
2291
+ textParam: "text",
2292
+ subtextParam: "subtitle",
2293
+ tokens: [
2294
+ { propPath: "tokens.textColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2295
+ { propPath: "tokens.accentColor", cssVar: "--cf-accent", fallback: ACCENT_STRONG, brandKitPath: "colors.accent" },
2296
+ { propPath: "tokens.backgroundColor", cssVar: "--cf-overlay", fallback: "rgba(0, 0, 0, 0.7)", brandKitPath: "colors.overlay" },
2297
+ { propPath: "tokens.fontFamily", cssVar: "--cf-font-sans", fallback: resolveTypeface("caption"), brandKitPath: "fonts.body" }
2298
+ ],
2299
+ durationInFrames: 150,
2300
+ fps: 30,
2301
+ width: 1920,
2302
+ height: 1080,
2303
+ preview: { thumbnailFrame: 60, mode: "loop", defaultExample: "classic-broadcast" }
2304
+ };
2305
+
2306
+ // ../execution/primitives/src/text/marker-highlight/config.ts
2307
+ import { z as z7 } from "zod";
2308
+ var paramsSchema7 = z7.object({
2309
+ before: z7.string().default("").describe("Text leading up to the highlighted phrase."),
2310
+ highlight: z7.string().min(1).describe("The phrase to highlight with a swept marker."),
2311
+ after: z7.string().default("").describe("Text after the highlight."),
2312
+ markerColor: z7.string().default(WARNING).describe("Marker/highlighter background color. Yellow is the canonical choice."),
2313
+ baseColor: z7.string().default(FLOOR_TEXT).describe("Color of unhighlighted text (sits over footage before the marker sweeps \u2014 video-safe off-white). The marker then recolors it to highlightedTextColor."),
2314
+ highlightedTextColor: z7.string().default(SURFACE).describe("Color of text inside the marker (often same as base for contrast)."),
2315
+ fontSize: z7.number().min(16).max(180).default(72).describe("Font size in pixels at 1920\xD71080."),
2316
+ fontWeight: z7.number().min(100).max(900).default(600).describe("CSS font weight applied uniformly."),
2317
+ speed: z7.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
2318
+ fontFamily: z7.string().default(resolveTypeface("display")).describe("Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it.")
2319
+ }).passthrough();
2320
+ var config7 = {
2321
+ id: "marker-highlight",
2322
+ component: MarkerHighlight,
2323
+ name: "Marker Highlight",
2324
+ category: "text",
2325
+ kind: "component",
2326
+ version: "0.1.1",
2327
+ intent: "emphasize-word",
2328
+ description: "A highlighter-style colored bar sweeps across a phrase, leaving a marker background behind it. Feels like physically marking up a transcript or note.",
2329
+ useWhen: "Transcript callouts, quote highlighting, study/educational content. Pairs naturally with podcast clips where you want to flag a specific phrase the speaker said. Avoid combining with inline-highlight (both emphasize words; pick one).",
2330
+ pairsWith: ["typewriter", "mesh-gradient-bg", "pulsing-indicator"],
2331
+ avoidWith: ["inline-highlight"],
2332
+ tier: "standard",
2333
+ useCase: ["emphasis"],
2334
+ tags: ["text", "highlight", "marker", "emphasis", "caption", "transcript"],
2335
+ mood: ["editorial", "playful"],
2336
+ paramsSchema: paramsSchema7,
2337
+ propDefaults: { before: "", after: "", markerColor: WARNING, baseColor: FLOOR_TEXT, highlightedTextColor: SURFACE, fontSize: 72, fontWeight: 600, speed: 1, fontFamily: resolveTypeface("display") },
2338
+ examples: [
2339
+ {
2340
+ name: "classic-yellow",
2341
+ mood: ["editorial"],
2342
+ params: { before: "The whole point is ", highlight: "distribution", after: ".", markerColor: WARNING, baseColor: FLOOR_TEXT, highlightedTextColor: SURFACE, fontSize: 80, fontWeight: 600, speed: 1 }
2343
+ },
2344
+ {
2345
+ name: "brand-accent",
2346
+ mood: ["corporate"],
2347
+ params: { before: "It needs to be ", highlight: "fast", after: " and reliable.", markerColor: TEAL, baseColor: FLOOR_TEXT, highlightedTextColor: TEXT_HI, fontSize: 72, fontWeight: 700, speed: 0.9 },
2348
+ description: "Brand-color marker with white text inside. Higher-contrast than the yellow default."
2349
+ }
2350
+ ],
2351
+ textParam: "highlight",
2352
+ subtextParam: null,
2353
+ tokens: [
2354
+ { propPath: "markerColor", cssVar: "--cf-accent", fallback: WARNING, brandKitPath: "colors.accent" },
2355
+ { propPath: "baseColor", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2356
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2357
+ ],
2358
+ durationInFrames: 90,
2359
+ fps: 30,
2360
+ width: 1920,
2361
+ height: 1080,
2362
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "classic-yellow" }
2363
+ };
2364
+
2365
+ // ../execution/primitives/src/text/shimmer-sweep/config.ts
2366
+ import { z as z8 } from "zod";
2367
+ var paramsSchema8 = z8.object({
2368
+ text: z8.string().min(1).max(160).describe("The text to shimmer across. Auto-fits (shrinks) to the stage."),
2369
+ baseColor: z8.string().default("#a1a1aa").describe("Resting color of the text. Muted/desaturated reads best."),
2370
+ shineColor: z8.string().default("#ffffff").describe("Color of the sweeping shine. White or near-white feels metallic."),
2371
+ fontSize: z8.number().min(16).max(240).default(96).describe("Font size in pixels at 1920\xD71080."),
2372
+ fontWeight: z8.number().min(100).max(900).default(700).describe("CSS font weight. Bold weights catch the shimmer better."),
2373
+ speed: z8.number().min(0.25).max(4).default(1).describe("Playback speed multiplier \u2014 controls sweep tempo."),
2374
+ fontFamily: z8.string().default(resolveTypeface("display")).describe("Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it.")
2375
+ }).passthrough();
2376
+ var config8 = {
2377
+ id: "shimmer-sweep",
2378
+ component: ShimmerSweep,
2379
+ name: "Shimmer Sweep",
2380
+ category: "text",
2381
+ kind: "component",
2382
+ version: "0.1.1",
2383
+ intent: "emphasize-word",
2384
+ description: "A bright shine sweeps left-to-right across the text, briefly catching like light on metal. Subtle motion that adds polish without competing with the content.",
2385
+ useWhen: 'Loop-friendly emphasis when the text needs to feel "alive" but not distract. Logo treatments, premium product names, awards-show vibes. Avoid for time-pressured content (the loop reads as slow).',
2386
+ pairsWith: ["mesh-gradient-bg", "success-confetti", "spring-pop-in"],
2387
+ avoidWith: [],
2388
+ tier: "standard",
2389
+ useCase: ["background", "emphasis"],
2390
+ tags: ["text", "shimmer", "sweep", "shine", "metallic", "loop", "polish"],
2391
+ mood: ["cinematic", "corporate", "minimal"],
2392
+ paramsSchema: paramsSchema8,
2393
+ propDefaults: { baseColor: "#a1a1aa", shineColor: "#ffffff", fontSize: 96, fontWeight: 700, speed: 1, fontFamily: resolveTypeface("display") },
2394
+ examples: [
2395
+ {
2396
+ name: "silver-loop",
2397
+ mood: ["cinematic"],
2398
+ params: { text: "PREMIUM", baseColor: "#a1a1aa", shineColor: "#ffffff", fontSize: 144, fontWeight: 800, speed: 1 }
2399
+ },
2400
+ {
2401
+ name: "brand-shine",
2402
+ mood: ["corporate"],
2403
+ params: { text: "cueframe", baseColor: TEXT_MUTED, shineColor: ACCENT, fontSize: 96, fontWeight: 700, speed: 0.9 }
2404
+ }
2405
+ ],
2406
+ textParam: "text",
2407
+ subtextParam: null,
2408
+ tokens: [
2409
+ { propPath: "baseColor", cssVar: "--cf-text-muted", fallback: "#a1a1aa", brandKitPath: "colors.textMuted" },
2410
+ { propPath: "shineColor", cssVar: "--cf-accent", fallback: "#ffffff", brandKitPath: "colors.accent" },
2411
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2412
+ ],
2413
+ durationInFrames: 90,
2414
+ fps: 30,
2415
+ width: 1920,
2416
+ height: 1080,
2417
+ preview: { thumbnailFrame: 45, mode: "loop", defaultExample: "silver-loop" }
2418
+ };
2419
+
2420
+ // ../execution/primitives/src/text/staggered-fade-up/config.ts
2421
+ import { z as z9 } from "zod";
2422
+ var paramsSchema9 = z9.object({
2423
+ text: z9.string().min(1).describe("Text to split into words and reveal one at a time."),
2424
+ staggerDelay: z9.number().min(0.5).max(20).default(3).describe("Frames between each word's entrance. Lower = faster cascade."),
2425
+ // coerce: a $brand:motion.staggerMs MISS (no kit) falls back to the string '90'; coercion keeps it a number.
2426
+ staggerMs: z9.coerce.number().nonnegative().optional().describe("Per-word stagger gap in ms (overrides staggerDelay). Bind to $brand:motion.staggerMs."),
2427
+ easing: z9.string().optional().describe("Easing keyword for each word's fade/rise (linear/ease/ease-in/ease-out/ease-in-out). Bind to $brand:motion.easing."),
2428
+ distance: z9.number().min(0).max(200).default(40).describe("Pixels each word travels upward as it fades in. 30\u201360 is the sweet spot."),
2429
+ fontSize: z9.number().min(16).max(240).default(96).describe("Font size in pixels at 1920\xD71080."),
2430
+ fontWeight: z9.number().min(100).max(900).default(600).describe("CSS font weight applied uniformly."),
2431
+ color: z9.string().default(FLOOR_TEXT).describe("Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."),
2432
+ fontFamily: z9.string().default(resolveTypeface("display")).describe("Display typeface; pass $brand:fonts.heading to theme."),
2433
+ speed: z9.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
2434
+ }).passthrough();
2435
+ var config9 = {
2436
+ id: "staggered-fade-up",
2437
+ component: StaggeredFadeUp,
2438
+ name: "Staggered Fade Up",
2439
+ category: "text",
2440
+ kind: "component",
2441
+ version: "0.1.0",
2442
+ intent: "reveal-text",
2443
+ description: "Words rise into view one at a time, each fading in with an upward translation. Reads as deliberate, considered prose \u2014 every word lands.",
2444
+ useWhen: "Multi-word headlines (3\u20138 words), poetry/quote reveals, cinematic title cards where each word should register. Avoid for single words (use blur-reveal) or runs longer than ~10 words (cascade gets tedious).",
2445
+ pairsWith: ["mesh-gradient-bg", "dynamic-grid", "success-confetti"],
2446
+ avoidWith: ["blur-reveal", "tracking-in"],
2447
+ tier: "standard",
2448
+ useCase: ["title-over-footage"],
2449
+ tags: ["text", "stagger", "reveal", "fade", "words", "cascade", "cinematic"],
2450
+ mood: ["cinematic", "editorial", "soft"],
2451
+ paramsSchema: paramsSchema9,
2452
+ propDefaults: { staggerDelay: 3, distance: 40, fontSize: 96, fontWeight: 600, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
2453
+ examples: [
2454
+ {
2455
+ name: "cinematic-headline",
2456
+ mood: ["cinematic"],
2457
+ params: { text: "Built for builders", staggerDelay: 4, distance: 50, fontSize: 120, fontWeight: 700, color: FLOOR_TEXT, speed: 1 }
2458
+ },
2459
+ {
2460
+ name: "poetic",
2461
+ mood: ["editorial", "soft"],
2462
+ params: { text: "A film by someone, somewhere", staggerDelay: 6, distance: 30, fontSize: 80, fontWeight: 400, color: FLOOR_TEXT, speed: 0.85 }
2463
+ }
2464
+ ],
2465
+ textParam: "text",
2466
+ subtextParam: null,
2467
+ tokens: [
2468
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2469
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" },
2470
+ { propPath: "staggerMs", cssVar: "--cf-motion-stagger", fallback: "90", brandKitPath: "motion.staggerMs" },
2471
+ { propPath: "easing", cssVar: "--cf-motion-ease", fallback: "ease-out", brandKitPath: "motion.easing" }
2472
+ ],
2473
+ durationInFrames: 120,
2474
+ fps: 30,
2475
+ width: 1920,
2476
+ height: 1080,
2477
+ preview: { thumbnailFrame: 90, mode: "oneshot", defaultExample: "cinematic-headline" }
2478
+ };
2479
+
2480
+ // ../execution/primitives/src/text/text-fade-replace/config.ts
2481
+ import { z as z10 } from "zod";
2482
+ var paramsSchema10 = z10.object({
2483
+ from: z10.string().min(1).describe("Initial text shown for the first half of the duration."),
2484
+ to: z10.string().min(1).describe("Replacement text shown for the second half."),
2485
+ fontSize: z10.number().min(16).max(240).default(96).describe("Font size in pixels at 1920\xD71080."),
2486
+ color: z10.string().default(FLOOR_TEXT).describe("Text color (applied to both from and to). Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."),
2487
+ fontFamily: z10.string().default(resolveTypeface("display")).describe("Display typeface; pass $brand:fonts.heading to theme."),
2488
+ fontWeight: z10.number().min(100).max(900).default(700).describe("CSS font weight."),
2489
+ speed: z10.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
2490
+ }).passthrough();
2491
+ var config10 = {
2492
+ id: "text-fade-replace",
2493
+ component: TextFadeReplace,
2494
+ name: "Text Fade Replace",
2495
+ category: "text",
2496
+ kind: "component",
2497
+ version: "0.1.0",
2498
+ intent: "cycle-text",
2499
+ description: "Cross-fade between two strings on the same line without layout shift. The first text fades out exactly as the second fades in, both centered on the same baseline.",
2500
+ useWhen: 'Caption beat changes ("Question:" \u2192 "Answer:"), product feature cycles ("for everyone" \u2192 "for engineers"), before/after labels. Avoid for >2 strings (use multiple in sequence) and for strings with very different widths (the lack of layout shift makes the longer one feel cramped).',
2501
+ pairsWith: ["mesh-gradient-bg", "pulsing-indicator", "shimmer-sweep"],
2502
+ avoidWith: ["blur-reveal"],
2503
+ tier: "standard",
2504
+ useCase: ["title-over-footage"],
2505
+ tags: ["text", "cycle", "fade", "replace", "caption", "binary"],
2506
+ mood: ["editorial", "minimal", "corporate"],
2507
+ paramsSchema: paramsSchema10,
2508
+ propDefaults: { fontSize: 96, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), fontWeight: 700, speed: 1 },
2509
+ examples: [
2510
+ {
2511
+ name: "q-to-a",
2512
+ mood: ["editorial"],
2513
+ params: { from: "Question.", to: "Answer.", fontSize: 120, color: FLOOR_TEXT, fontWeight: 800, speed: 1 }
2514
+ },
2515
+ {
2516
+ name: "before-after",
2517
+ mood: ["corporate"],
2518
+ params: { from: "Before", to: "After", fontSize: 144, color: FLOOR_TEXT, fontWeight: 700, speed: 0.9 }
2519
+ }
2520
+ ],
2521
+ textParam: "from",
2522
+ subtextParam: "to",
2523
+ tokens: [
2524
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2525
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2526
+ ],
2527
+ durationInFrames: 90,
2528
+ fps: 30,
2529
+ width: 1920,
2530
+ height: 1080,
2531
+ preview: { thumbnailFrame: 60, mode: "loop", defaultExample: "q-to-a" }
2532
+ };
2533
+
2534
+ // ../execution/primitives/src/text/tracking-in/config.ts
2535
+ import { z as z11 } from "zod";
2536
+ var paramsSchema11 = z11.object({
2537
+ text: z11.string().min(1).max(90).describe("Text to reveal. 1\u20133 words works best \u2014 letter-tracking changes are most legible at short lengths. Auto-fits: longer copy shrinks to fit the frame so it no longer overflows."),
2538
+ startTracking: z11.number().min(-0.5).max(2).default(0.5).describe("Initial letter-spacing in em units. Higher = more spread at the start of the reveal."),
2539
+ startBlur: z11.number().min(0).max(20).default(8).describe("Initial blur radius in pixels. Cleared as letters condense into place."),
2540
+ fontSize: z11.number().min(16).max(240).default(120).describe("Font size in pixels at 1920\xD71080."),
2541
+ fontWeight: z11.number().min(100).max(900).default(700).describe("CSS font weight."),
2542
+ color: z11.string().default(FLOOR_TEXT).describe("Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."),
2543
+ fontFamily: z11.string().default(resolveTypeface("display")).describe("Display typeface; pass $brand:fonts.heading to theme."),
2544
+ speed: z11.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
2545
+ }).passthrough();
2546
+ var config11 = {
2547
+ id: "tracking-in",
2548
+ component: TrackingIn,
2549
+ name: "Tracking In",
2550
+ category: "text",
2551
+ kind: "component",
2552
+ version: "0.1.0",
2553
+ intent: "reveal-text",
2554
+ description: 'Letters start spread apart and slightly blurred, then condense into final position with sharp focus. The "from-distance-into-place" feel.',
2555
+ useWhen: "Brand reveals, single-word titles, awards-style intros where the letters should feel like they're assembling themselves. Best for 1\u20133 words; longer strings make tracking changes feel jittery.",
2556
+ pairsWith: ["mesh-gradient-bg", "success-confetti", "shimmer-sweep"],
2557
+ avoidWith: ["blur-reveal", "staggered-fade-up"],
2558
+ tier: "standard",
2559
+ useCase: ["intro"],
2560
+ tags: ["text", "tracking", "letter-spacing", "reveal", "condense", "brand"],
2561
+ mood: ["cinematic", "corporate", "minimal"],
2562
+ paramsSchema: paramsSchema11,
2563
+ propDefaults: { startTracking: 0.5, startBlur: 8, fontSize: 120, fontWeight: 700, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
2564
+ examples: [
2565
+ {
2566
+ name: "brand-reveal",
2567
+ mood: ["cinematic", "corporate"],
2568
+ params: { text: "CUEFRAME", startTracking: 0.6, startBlur: 10, fontSize: 144, fontWeight: 800, color: FLOOR_TEXT, speed: 0.9 }
2569
+ },
2570
+ {
2571
+ name: "subtle-title",
2572
+ mood: ["minimal"],
2573
+ params: { text: "Welcome", startTracking: 0.3, startBlur: 5, fontSize: 96, fontWeight: 500, color: FLOOR_TEXT, speed: 1 }
2574
+ }
2575
+ ],
2576
+ textParam: "text",
2577
+ subtextParam: null,
2578
+ tokens: [
2579
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2580
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2581
+ ],
2582
+ durationInFrames: 90,
2583
+ fps: 30,
2584
+ width: 1920,
2585
+ height: 1080,
2586
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "brand-reveal" }
2587
+ };
2588
+
2589
+ // ../execution/primitives/src/text/typewriter/config.ts
2590
+ import { z as z12 } from "zod";
2591
+ var paramsSchema12 = z12.object({
2592
+ text: z12.string().min(1).max(400).describe(
2593
+ "The text to type out. 20\u201380 characters reads best; longer strings risk losing attention before the cursor finishes. Auto-fits: the text shrinks to fit the frame and wraps to a few lines, so length no longer overflows."
2594
+ ),
2595
+ cursor: z12.boolean().default(true).describe(
2596
+ "Show a blinking cursor at the end of the revealed text."
2597
+ ),
2598
+ charsPerSecond: z12.number().min(2).max(60).default(20).describe(
2599
+ "Typing rate. 20 cps is conversational; 30+ feels urgent; <10 feels deliberate."
2600
+ ),
2601
+ speed: z12.number().min(0.25).max(4).default(1).describe(
2602
+ "Playback speed multiplier independent of charsPerSecond."
2603
+ ),
2604
+ fontSize: z12.number().min(16).max(240).default(72).describe(
2605
+ "Font size in pixels at the canonical 1920\xD71080 frame."
2606
+ ),
2607
+ fontWeight: z12.number().min(100).max(900).default(500).describe(
2608
+ "CSS font weight. 500 keeps a terminal/code feel; 700+ skews toward dramatic quote."
2609
+ ),
2610
+ color: z12.string().default(FLOOR_TEXT).describe(
2611
+ "Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."
2612
+ ),
2613
+ cursorColor: z12.string().optional().describe("Cursor color. Falls back to text color if unset."),
2614
+ fontFamily: z12.string().default(resolveTypeface("display")).describe(
2615
+ "Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it."
2616
+ )
2617
+ }).passthrough();
2618
+ var config12 = {
2619
+ id: "typewriter",
2620
+ component: Typewriter,
2621
+ name: "Typewriter",
2622
+ category: "text",
2623
+ kind: "component",
2624
+ version: "0.1.1",
2625
+ intent: "reveal-text",
2626
+ description: "Character-by-character text reveal with a deterministic blinking cursor. The classic terminal/typing aesthetic \u2014 feels like the audience is reading along as it types.",
2627
+ useWhen: 'Tech demos, code captions, "the AI is generating something" beats, dialogue/quote reveals. Avoid for hero titles longer than ~80 chars (typing time exceeds attention span) and avoid pairing with another character-by-character animation (matrix-decode, glitch text).',
2628
+ pairsWith: ["glass-code-block", "terminal-simulator", "cursor-flow", "pulsing-indicator"],
2629
+ avoidWith: ["blur-reveal"],
2630
+ tier: "standard",
2631
+ useCase: ["title-over-footage"],
2632
+ tags: ["text", "typewriter", "typing", "terminal", "monospace", "reveal", "progressive"],
2633
+ mood: ["tech-demo", "editorial", "minimal"],
2634
+ paramsSchema: paramsSchema12,
2635
+ propDefaults: { cursor: true, charsPerSecond: 20, speed: 1, fontSize: 72, fontWeight: 500, color: FLOOR_TEXT, fontFamily: resolveTypeface("display") },
2636
+ examples: [
2637
+ {
2638
+ name: "terminal-prompt",
2639
+ mood: ["tech-demo"],
2640
+ params: { text: "$ npm install cueframe", cursor: true, charsPerSecond: 24, fontSize: 64, fontWeight: 500, color: SUCCESS },
2641
+ description: "Green-on-dark terminal prompt feel."
2642
+ },
2643
+ {
2644
+ name: "dialogue",
2645
+ mood: ["editorial", "cinematic"],
2646
+ params: { text: "Hello, world.", cursor: true, charsPerSecond: 12, fontSize: 96, fontWeight: 600, color: FLOOR_TEXT },
2647
+ description: "Slower, larger, dialogue-paced reveal."
2648
+ },
2649
+ {
2650
+ name: "urgent-news",
2651
+ mood: ["breaking-news"],
2652
+ params: { text: "BREAKING:", cursor: false, charsPerSecond: 40, fontSize: 120, fontWeight: 800, color: "#dc2626" },
2653
+ description: "Fast type, no cursor, red. Breaking-news tickers."
2654
+ }
2655
+ ],
2656
+ textParam: "text",
2657
+ subtextParam: null,
2658
+ tokens: [
2659
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2660
+ { propPath: "cursorColor", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" },
2661
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2662
+ ],
2663
+ durationInFrames: 120,
2664
+ fps: 30,
2665
+ width: 1920,
2666
+ height: 1080,
2667
+ preview: { thumbnailFrame: 90, mode: "loop", defaultExample: "terminal-prompt" }
2668
+ };
2669
+
2670
+ // ../execution/primitives/src/text/matrix-decode/config.ts
2671
+ import { z as z13 } from "zod";
2672
+ var paramsSchema13 = z13.object({
2673
+ text: z13.string().min(1).max(220).describe(
2674
+ "The final text that decodes into place. Auto-fits (shrinks to the frame, then ellipsizes). 6\u201340 characters reads cleanly; longer strings spend too long in the scrambled state."
2675
+ ),
2676
+ charset: z13.string().min(1).max(80).default("!@#$%^&*()_+-=<>?/\\|").describe(
2677
+ "Pool of characters to scramble through before each glyph resolves. Symbol-heavy charsets feel hacker; alphanumeric feels softer."
2678
+ ),
2679
+ fontSize: z13.number().min(16).max(240).default(72).describe(
2680
+ "Font size in pixels at the canonical 1920\xD71080 frame. 64\u201396 reads as headline; 120+ as hero."
2681
+ ),
2682
+ fontWeight: z13.number().min(100).max(900).default(600).describe(
2683
+ "CSS font weight. 600 keeps the monospace decode feel; 700+ leans dramatic; 400 feels terminal-quiet."
2684
+ ),
2685
+ color: z13.string().default(SUCCESS).describe(
2686
+ "Text color of the resolved glyphs. Green-on-white is the canonical Matrix vibe; high-contrast brand colors also work."
2687
+ ),
2688
+ revealDuration: z13.number().min(15).max(240).default(60).describe(
2689
+ "Frames for all glyphs to finish resolving. Shorter (30\u201345) feels snappy; longer (90+) lets the audience savor the scramble."
2690
+ ),
2691
+ speed: z13.number().min(0.25).max(4).default(1).describe(
2692
+ "Playback speed multiplier independent of revealDuration."
2693
+ ),
2694
+ fontFamily: z13.string().default(resolveTypeface("mono")).describe("Monospace typeface. Fixed to the bundled mono face (Space Mono floor) \u2014 the decode column-shuffle depends on fixed-width glyphs, so brand fonts (serif/display) intentionally do NOT override it.")
2695
+ }).passthrough();
2696
+ var config13 = {
2697
+ id: "matrix-decode",
2698
+ component: MatrixDecode,
2699
+ name: "Matrix Decode",
2700
+ category: "text",
2701
+ kind: "component",
2702
+ version: "0.1.1",
2703
+ intent: "glitch-decode",
2704
+ description: "Per-character scramble that resolves left-to-right into the final text. Each glyph cycles through a charset of symbols before snapping to its true character. Hacker/cypherpunk aesthetic \u2014 feels like the system is being decrypted in real time.",
2705
+ useWhen: 'Tech demos, "AI is thinking" beats, hacker/cypherpunk reveals, codename or version-string drops. Best with monospace-friendly content (commands, hashes, hostnames). Avoid for emotional/editorial copy (wrong tone) and avoid pairing with another character-by-character animation like typewriter or rgb-glitch-text on the same beat.',
2706
+ pairsWith: ["glass-code-block", "terminal-simulator", "pulsing-indicator", "grain"],
2707
+ avoidWith: ["typewriter", "rgb-glitch-text", "blur-reveal"],
2708
+ tier: "niche",
2709
+ useCase: ["emphasis"],
2710
+ tags: ["text", "matrix", "decode", "scramble", "hacker", "cypherpunk", "monospace", "glitch"],
2711
+ mood: ["tech-demo", "glitchy", "aggressive"],
2712
+ paramsSchema: paramsSchema13,
2713
+ propDefaults: {
2714
+ charset: "!@#$%^&*()_+-=<>?/\\|",
2715
+ fontSize: 72,
2716
+ fontWeight: 600,
2717
+ color: SUCCESS,
2718
+ revealDuration: 60,
2719
+ speed: 1,
2720
+ fontFamily: resolveTypeface("mono")
2721
+ },
2722
+ examples: [
2723
+ {
2724
+ name: "classic-matrix",
2725
+ mood: ["tech-demo", "glitchy"],
2726
+ params: { text: "ACCESS GRANTED", charset: "01!@#$%&*<>/\\|", fontSize: 88, fontWeight: 600, color: SUCCESS, revealDuration: 60 },
2727
+ description: "Green-on-white symbol-heavy decode \u2014 the canonical Matrix vibe."
2728
+ },
2729
+ {
2730
+ name: "hash-reveal",
2731
+ mood: ["tech-demo"],
2732
+ params: { text: "0xCAFEBABE", charset: "0123456789abcdef", fontSize: 96, fontWeight: 500, color: FLOOR_TEXT, revealDuration: 45 },
2733
+ description: "Snappy hex decode for hash/address reveals."
2734
+ },
2735
+ {
2736
+ name: "aggressive-codename",
2737
+ mood: ["aggressive", "breaking-news"],
2738
+ params: { text: "PROJECT NEMESIS", charset: "!@#$%^&*()_+-=<>?/\\|", fontSize: 120, fontWeight: 800, color: DANGER, revealDuration: 36 },
2739
+ description: "Fast, large, red \u2014 codename or product reveal."
2740
+ }
2741
+ ],
2742
+ textParam: "text",
2743
+ subtextParam: null,
2744
+ tokens: [
2745
+ { propPath: "color", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" }
2746
+ // No fontFamily brand binding: the decode effect requires fixed-width mono
2747
+ // (Space Mono floor). There is no fonts.mono brand path, and binding to
2748
+ // fonts.heading would let a serif/display brand face break the column shuffle.
2749
+ ],
2750
+ durationInFrames: 120,
2751
+ fps: 30,
2752
+ width: 1920,
2753
+ height: 1080,
2754
+ preview: { thumbnailFrame: 45, mode: "oneshot", defaultExample: "classic-matrix" }
2755
+ };
2756
+
2757
+ // ../execution/primitives/src/text/rgb-glitch-text/config.ts
2758
+ import { z as z14 } from "zod";
2759
+ var paramsSchema14 = z14.object({
2760
+ text: z14.string().min(1).max(220).describe(
2761
+ "Text to display. The base text holds steady; RGB-split copies offset on top during the glitch window. 4\u201330 chars reads punchiest."
2762
+ ),
2763
+ fontSize: z14.number().min(24).max(320).default(96).describe(
2764
+ "Font size in pixels at the canonical 1920\xD71080 frame. Glitch reads best at hero scale (96\u2013160)."
2765
+ ),
2766
+ fontWeight: z14.number().min(100).max(900).default(700).describe(
2767
+ "CSS font weight. 700+ gives the chunky chromatic-split look; lighter weights wash out under the offset copies."
2768
+ ),
2769
+ color: z14.string().default(FLOOR_TEXT).describe("Base text color (video-safe off-white). The R/G/B copies are fixed (#ff0040, #00ff80, #0080ff) and screen-blend (additive) so the chromatic split glows over footage."),
2770
+ glitchAt: z14.number().min(0).max(600).default(20).describe(
2771
+ "Frame at which the glitch window begins. Set ~10\u201330 frames in so the audience reads the title before it cracks."
2772
+ ),
2773
+ glitchDuration: z14.number().min(2).max(60).default(8).describe(
2774
+ "Length of the glitch window in frames. 6\u201312 frames is a sharp punch; 20+ feels like sustained corruption."
2775
+ ),
2776
+ intensity: z14.number().min(0).max(40).default(6).describe(
2777
+ "Pixel offset magnitude for the R/G/B copies. 4\u20138 reads as crisp glitch; 12+ becomes near-illegible. Use sparingly."
2778
+ ),
2779
+ seed: z14.string().min(1).max(32).default("glitch").describe(
2780
+ "Deterministic seed for the per-frame jitter. Change it to get a different glitch pattern with the same params."
2781
+ ),
2782
+ speed: z14.number().min(0.25).max(4).default(1).describe(
2783
+ "Playback speed multiplier. Note: glitchAt and glitchDuration are in source frames before the speed multiplier."
2784
+ ),
2785
+ fontFamily: z14.string().default(resolveTypeface("display")).describe("Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme it.")
2786
+ }).passthrough();
2787
+ var config14 = {
2788
+ id: "rgb-glitch-text",
2789
+ component: RGBGlitchText,
2790
+ name: "RGB Glitch Text",
2791
+ category: "text",
2792
+ kind: "component",
2793
+ version: "0.1.1",
2794
+ intent: "glitch-text",
2795
+ description: "Static text that fractures into red/green/blue chromatic-aberration copies during a configurable glitch window. The base text never moves; the offset color copies appear, jitter for `glitchDuration` frames, then disappear. Crisp cyberpunk/CRT-failure aesthetic.",
2796
+ useWhen: 'Hard cuts, beat-drops, "system corrupted" moments, breaking-news stings, hype-reel punctuation. Place the glitch on the audio hit. Avoid for sustained titles (the eye gets tired in <1 second of glitch) and avoid pairing with matrix-decode or another glitch primitive on the same beat \u2014 the effects fight for attention.',
2797
+ pairsWith: ["glitch-cut", "chromatic-aberration-wipe", "grain", "mesh-gradient-bg"],
2798
+ avoidWith: ["matrix-decode", "typewriter", "blur-reveal"],
2799
+ tier: "niche",
2800
+ useCase: ["emphasis"],
2801
+ tags: ["text", "glitch", "rgb", "chromatic-aberration", "cyberpunk", "crt", "corruption"],
2802
+ mood: ["glitchy", "aggressive", "breaking-news", "tech-demo"],
2803
+ paramsSchema: paramsSchema14,
2804
+ propDefaults: {
2805
+ fontSize: 96,
2806
+ fontWeight: 700,
2807
+ color: FLOOR_TEXT,
2808
+ glitchAt: 20,
2809
+ glitchDuration: 8,
2810
+ intensity: 6,
2811
+ seed: "glitch",
2812
+ speed: 1,
2813
+ fontFamily: resolveTypeface("display")
2814
+ },
2815
+ examples: [
2816
+ {
2817
+ name: "beat-drop",
2818
+ mood: ["aggressive", "glitchy"],
2819
+ params: { text: "SYSTEM ONLINE", fontSize: 128, fontWeight: 800, color: FLOOR_TEXT, glitchAt: 24, glitchDuration: 10, intensity: 8 },
2820
+ description: "Hero text that cracks on the audio hit."
2821
+ },
2822
+ {
2823
+ name: "sustained-corruption",
2824
+ mood: ["glitchy"],
2825
+ params: { text: "CORRUPTED", fontSize: 144, fontWeight: 800, color: DANGER, glitchAt: 0, glitchDuration: 30, intensity: 5 },
2826
+ description: 'Long glitch window for "system failure" beats. Use carefully \u2014 eye fatigue.'
2827
+ },
2828
+ {
2829
+ name: "breaking-news-sting",
2830
+ mood: ["breaking-news"],
2831
+ params: { text: "LIVE", fontSize: 160, fontWeight: 900, color: DANGER, glitchAt: 12, glitchDuration: 6, intensity: 7 },
2832
+ description: "Short, hard glitch on a one-word breaking-news ID."
2833
+ }
2834
+ ],
2835
+ textParam: "text",
2836
+ subtextParam: null,
2837
+ tokens: [
2838
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2839
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2840
+ ],
2841
+ durationInFrames: 90,
2842
+ fps: 30,
2843
+ width: 1920,
2844
+ height: 1080,
2845
+ preview: { thumbnailFrame: 28, mode: "oneshot", defaultExample: "beat-drop" }
2846
+ };
2847
+
2848
+ // ../execution/primitives/src/text/quote-card/config.ts
2849
+ import { z as z15 } from "zod";
2850
+ var paramsSchema15 = z15.object({
2851
+ quote: z15.string().min(1).max(220).describe("The quote text (no quote marks \u2014 the card draws its own oversized mark). 8\u201324 words reads best."),
2852
+ author: z15.string().max(60).default("").describe("Attribution name."),
2853
+ role: z15.string().max(80).default("").describe("Attribution role/company line."),
2854
+ accentColor: z15.string().default(ACCENT).describe("Quote mark + attribution rule accent.")
2855
+ }).passthrough();
2856
+ var config15 = {
2857
+ id: "quote-card",
2858
+ component: QuoteCard,
2859
+ name: "Quote Card",
2860
+ category: "text",
2861
+ kind: "component",
2862
+ version: "0.1.1",
2863
+ intent: "name-card",
2864
+ description: "Attributed testimonial: an oversized accent quote mark drops in with weight, the quote reveals word-by-word on a masked rise, an accent rule draws, and the attribution fades up. Idles on a quiet hold with a breathing mark.",
2865
+ useWhen: "Customer testimonials, press quotes, founder statements \u2014 the social-proof beat of a launch video. Over footage of the speaker or a background primitive. For speaker NAME captions during footage use lower-third instead.",
2866
+ pairsWith: ["silk-flow-bg", "dither-gradient-bg", "vignette", "color-grade"],
2867
+ avoidWith: ["lower-third", "cinematic-title"],
2868
+ tier: "recommended",
2869
+ useCase: ["full-scene", "title-over-footage"],
2870
+ tags: ["text", "quote", "testimonial", "attribution", "social-proof"],
2871
+ mood: ["editorial", "corporate", "cinematic"],
2872
+ paramsSchema: paramsSchema15,
2873
+ propDefaults: {
2874
+ quote: "It replaced our entire editing pipeline in a week.",
2875
+ author: "Maya Alvarez",
2876
+ role: "Head of Product",
2877
+ accentColor: ACCENT
2878
+ },
2879
+ examples: [
2880
+ { name: "customer-proof", mood: ["corporate"], params: { quote: "It replaced our entire editing pipeline in a week.", author: "Maya Alvarez", role: "Head of Product", accentColor: ACCENT } },
2881
+ { name: "press-pull", mood: ["editorial"], params: { quote: "The most opinionated take on programmatic video yet.", author: "The Weekly Build", role: "", accentColor: SUCCESS } }
2882
+ ],
2883
+ textParam: "quote",
2884
+ subtextParam: "author",
2885
+ tokens: [
2886
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" }
2887
+ ],
2888
+ durationInFrames: 150,
2889
+ fps: 30,
2890
+ width: 1920,
2891
+ height: 1080,
2892
+ preview: { thumbnailFrame: 80, mode: "oneshot", defaultExample: "customer-proof" }
2893
+ };
2894
+
2895
+ // ../execution/primitives/src/text/slot-machine-roll/config.ts
2896
+ import { z as z16 } from "zod";
2897
+ var paramsSchema16 = z16.object({
2898
+ from: z16.string().min(1).max(20).default("$99").describe(
2899
+ "Starting value (top of the column). Numbers, prices, scores, or short codes work best \u2014 long strings break the slot-reel feel."
2900
+ ),
2901
+ to: z16.string().min(1).max(20).default("$199").describe(
2902
+ "Ending value (bottom of the column, where the reel lands). Should be the same character class as `from` for visual coherence."
2903
+ ),
2904
+ fontSize: z16.number().min(24).max(320).default(120).describe(
2905
+ "Font size in pixels at the canonical 1920\xD71080 frame. Slot-machine reads as a hero element \u2014 96\u2013160 is the sweet spot."
2906
+ ),
2907
+ fontWeight: z16.number().min(100).max(900).default(700).describe(
2908
+ "CSS font weight. 700+ gives the chunky scoreboard look; 500 reads more editorial."
2909
+ ),
2910
+ color: z16.string().default(FLOOR_TEXT).describe("Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."),
2911
+ fontFamily: z16.string().default(resolveTypeface("display")).describe("Display typeface; pass $brand:fonts.heading to theme."),
2912
+ speed: z16.number().min(0.25).max(4).default(1).describe(
2913
+ "Playback speed multiplier. Slower (0.5\u20130.75) emphasizes the roll; faster (1.5+) makes it incidental."
2914
+ )
2915
+ }).passthrough();
2916
+ var config16 = {
2917
+ id: "slot-machine-roll",
2918
+ component: SlotMachineRoll,
2919
+ name: "Slot Machine Roll",
2920
+ category: "text",
2921
+ kind: "component",
2922
+ version: "0.1.0",
2923
+ intent: "roll-numbers",
2924
+ description: "Per-column vertical roll from a starting value to an ending value, like a slot reel landing. Each column springs in with stagger, so the rightmost digits land last. Feels like a counter, scoreboard, or price update.",
2925
+ useWhen: 'Price changes, score updates, version bumps, follower-count flips, before/after stat reveals. Both `from` and `to` should be short and the same character class (numbers\u2192numbers, prices\u2192prices). Avoid for prose or multi-word phrases \u2014 use kinetic-type or staggered-fade-up instead. Avoid pairing with strikethrough-replace on the same beat (both communicate "value changed" and read as redundant).',
2926
+ pairsWith: ["lower-third", "success-confetti", "spring-pop-in", "pulsing-indicator"],
2927
+ avoidWith: ["strikethrough-replace", "text-fade-replace"],
2928
+ tier: "standard",
2929
+ useCase: ["emphasis"],
2930
+ tags: ["text", "slot-machine", "roll", "counter", "numbers", "price", "scoreboard", "stat"],
2931
+ mood: ["playful", "corporate", "editorial"],
2932
+ paramsSchema: paramsSchema16,
2933
+ propDefaults: { from: "$99", to: "$199", fontSize: 120, fontWeight: 700, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
2934
+ examples: [
2935
+ {
2936
+ name: "price-bump",
2937
+ mood: ["corporate", "editorial"],
2938
+ params: { from: "$99", to: "$199", fontSize: 160, fontWeight: 800, color: FLOOR_TEXT },
2939
+ description: "Classic price-change reveal for promo or pricing-page video."
2940
+ },
2941
+ {
2942
+ name: "follower-count",
2943
+ mood: ["playful"],
2944
+ params: { from: "10K", to: "100K", fontSize: 140, fontWeight: 700, color: "#2563eb" },
2945
+ description: "Milestone counter flip \u2014 followers, downloads, signups."
2946
+ },
2947
+ {
2948
+ name: "version-bump",
2949
+ mood: ["tech-demo"],
2950
+ params: { from: "v2.0", to: "v3.0", fontSize: 120, fontWeight: 600, color: FLOOR_TEXT },
2951
+ description: "Version reveal for changelog/release video."
2952
+ }
2953
+ ],
2954
+ textParam: "to",
2955
+ subtextParam: "from",
2956
+ tokens: [
2957
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
2958
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
2959
+ ],
2960
+ durationInFrames: 90,
2961
+ fps: 30,
2962
+ width: 1920,
2963
+ height: 1080,
2964
+ preview: { thumbnailFrame: 70, mode: "oneshot", defaultExample: "price-bump" }
2965
+ };
2966
+
2967
+ // ../execution/primitives/src/text/stat-counter/config.ts
2968
+ import { z as z17 } from "zod";
2969
+ var paramsSchema17 = z17.object({
2970
+ value: z17.number().min(0).max(1e12).describe("The number that lands. Counts up from 0 with an expo settle."),
2971
+ prefix: z17.string().max(4).default("").describe("Glyphs before the number ('$', '\u20AC', '~')."),
2972
+ suffix: z17.string().max(6).default("").describe("Glyphs after the number ('+', '%', 'k', 'M') \u2014 rendered in the accent color."),
2973
+ label: z17.string().max(60).default("").describe("Uppercase caption under the number ('ACTIVE USERS', 'ARR'). Rises in after the count lands."),
2974
+ accentColor: z17.string().default(ACCENT).describe("Underline + suffix accent."),
2975
+ decimals: z17.number().int().min(0).max(2).default(0).describe("Decimal places (99.99% \u2192 2)."),
2976
+ countFrames: z17.number().int().min(10).max(150).default(45).describe("Frames the count-up takes."),
2977
+ position: z17.enum(["center", "left", "right"]).default("center").describe("Horizontal placement.")
2978
+ }).passthrough();
2979
+ var config17 = {
2980
+ id: "stat-counter",
2981
+ component: StatCounter,
2982
+ name: "Stat Counter",
2983
+ category: "text",
2984
+ kind: "component",
2985
+ version: "0.1.1",
2986
+ intent: "reveal-text",
2987
+ description: 'The launch-video staple: a big number counts up and LANDS \u2014 expo-eased so the final digits settle, tabular numerals (no jitter), an accent underline that draws in as the count completes and glows gently at idle, and an uppercase label that rises in after. "$2M ARR", "10k+ users", "99.99% uptime".',
2988
+ useWhen: "Traction beats, metric reveals, pricing anchors \u2014 any moment the video needs a number to land with weight. Pair over footage or a background primitive. One stat per beat; for dashboards of many numbers use dashboard-populate instead.",
2989
+ pairsWith: ["silk-flow-bg", "mesh-gradient-bg", "dither-gradient-bg", "vignette", "staggered-fade-up"],
2990
+ avoidWith: ["slot-machine-roll", "dashboard-populate"],
2991
+ tier: "recommended",
2992
+ useCase: ["emphasis", "title-over-footage"],
2993
+ tags: ["text", "number", "counter", "stat", "metric", "count-up", "launch"],
2994
+ mood: ["corporate", "tech-demo", "editorial"],
2995
+ paramsSchema: paramsSchema17,
2996
+ propDefaults: {
2997
+ value: 1e4,
2998
+ prefix: "",
2999
+ suffix: "+",
3000
+ label: "ACTIVE USERS",
3001
+ accentColor: ACCENT,
3002
+ decimals: 0,
3003
+ countFrames: 45,
3004
+ position: "center"
3005
+ },
3006
+ examples: [
3007
+ { name: "users-landed", mood: ["corporate"], params: { value: 1e4, suffix: "+", label: "ACTIVE USERS", accentColor: ACCENT, countFrames: 45, position: "center" } },
3008
+ { name: "arr", mood: ["corporate", "editorial"], params: { value: 2, prefix: "$", suffix: "M", label: "ANNUAL RECURRING REVENUE", accentColor: SUCCESS, countFrames: 40, position: "center" } },
3009
+ { name: "uptime", mood: ["tech-demo"], params: { value: 99.99, suffix: "%", label: "UPTIME", accentColor: ACCENT, decimals: 2, countFrames: 50, position: "center" } }
3010
+ ],
3011
+ textParam: "label",
3012
+ subtextParam: null,
3013
+ tokens: [
3014
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" }
3015
+ ],
3016
+ durationInFrames: 120,
3017
+ fps: 30,
3018
+ width: 1920,
3019
+ height: 1080,
3020
+ preview: { thumbnailFrame: 70, mode: "oneshot", defaultExample: "users-landed" }
3021
+ };
3022
+
3023
+ // ../execution/primitives/src/text/token-stream/config.ts
3024
+ import { z as z18 } from "zod";
3025
+ var paramsSchema18 = z18.object({
3026
+ text: z18.string().min(1).max(400).describe("The response text that streams in token-by-token. 15\u201350 words reads best."),
3027
+ tokensPerSecond: z18.number().min(2).max(30).default(9).describe("Average streaming cadence. 8\u201312 feels like a fast model; 4\u20136 deliberate."),
3028
+ accentColor: z18.string().default(ACCENT).describe("Cursor accent."),
3029
+ startAt: z18.number().int().min(0).max(90).default(8).describe("Frames of hold before the first token.")
3030
+ }).passthrough();
3031
+ var config18 = {
3032
+ id: "token-stream",
3033
+ component: TokenStream,
3034
+ name: "Token Stream",
3035
+ category: "text",
3036
+ kind: "component",
3037
+ version: "0.1.1",
3038
+ intent: "reveal-text",
3039
+ description: "THE AI visual: a response streams in token-by-token on an irregular, human-feeling cadence \u2014 deterministic jitter with occasional micro-pauses, each token fading up, a block cursor pulsing at the head. On completion the cursor blinks twice and fades. Running text, not a terminal gimmick (that is typewriter).",
3040
+ useWhen: 'Model output reveals, copilot answer beats, "watch it respond" moments in AI product launches. Over footage or a background primitive. For monospace CLI streaming use typewriter; for a full conversation use chat-exchange.',
3041
+ pairsWith: ["dither-gradient-bg", "vector-field", "silk-flow-bg", "vignette"],
3042
+ avoidWith: ["typewriter", "chat-exchange"],
3043
+ tier: "recommended",
3044
+ useCase: ["title-over-footage", "full-scene", "explainer"],
3045
+ tags: ["text", "ai", "llm", "streaming", "tokens", "cursor", "response"],
3046
+ mood: ["tech-demo", "minimal"],
3047
+ paramsSchema: paramsSchema18,
3048
+ propDefaults: {
3049
+ text: "Here is the summary you asked for \u2014 three risks, two of them already mitigated, and one decision that needs you today.",
3050
+ tokensPerSecond: 9,
3051
+ accentColor: ACCENT,
3052
+ startAt: 8
3053
+ },
3054
+ examples: [
3055
+ { name: "assistant-answer", mood: ["tech-demo"], params: { text: "Here is the summary you asked for \u2014 three risks, two of them already mitigated, and one decision that needs you today.", tokensPerSecond: 9, accentColor: ACCENT } },
3056
+ { name: "deliberate-reasoning", mood: ["minimal"], params: { text: "Thinking through the tradeoffs: speed favors the cache, correctness favors the queue. Recommending the queue.", tokensPerSecond: 5, accentColor: VIOLET } }
3057
+ ],
3058
+ textParam: "text",
3059
+ subtextParam: null,
3060
+ tokens: [
3061
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" }
3062
+ ],
3063
+ durationInFrames: 180,
3064
+ fps: 30,
3065
+ width: 1920,
3066
+ height: 1080,
3067
+ preview: { thumbnailFrame: 60, mode: "oneshot", defaultExample: "assistant-answer" }
3068
+ };
3069
+
3070
+ // ../execution/primitives/src/text/strikethrough-replace/config.ts
3071
+ import { z as z19 } from "zod";
3072
+ var paramsSchema19 = z19.object({
3073
+ from: z19.string().min(1).max(140).describe(
3074
+ 'Original phrase. A line draws across it during the first 40% of duration. Keep short \u2014 this is the "wrong/old" half of a comparison.'
3075
+ ),
3076
+ to: z19.string().min(1).max(140).describe(
3077
+ 'Replacement phrase that fades up after the strikethrough completes. Often the "new/correct/better" half of the comparison.'
3078
+ ),
3079
+ lineColor: z19.string().default("#ff5e3a").describe(
3080
+ 'Color of the strikethrough bar. Hot orange/red reads as "rejected"; brand color softens the verdict.'
3081
+ ),
3082
+ fontSize: z19.number().min(16).max(240).default(48).describe(
3083
+ "Font size in pixels at the canonical 1920\xD71080 frame. 48\u201372 is the lower-third / caption sweet spot for this effect."
3084
+ ),
3085
+ fontWeight: z19.number().min(100).max(900).default(600).describe(
3086
+ "CSS font weight. 600 gives editorial weight without overpowering the line."
3087
+ ),
3088
+ color: z19.string().default(FLOOR_TEXT).describe("Text color for both `from` and `to` (video-safe off-white over footage); pass $brand:colors.textOnMedia to theme."),
3089
+ fontFamily: z19.string().default(resolveTypeface("display")).describe("Display typeface. Defaults to the brand display face (Bricolage Grotesque floor); pass $brand:fonts.heading to theme."),
3090
+ speed: z19.number().min(0.25).max(4).default(1).describe(
3091
+ "Playback speed multiplier. The effect divides duration into strike (0\u201340%), fade (40\u201360%), hold (60\u2013100%) regardless of speed."
3092
+ )
3093
+ }).passthrough();
3094
+ var config19 = {
3095
+ id: "strikethrough-replace",
3096
+ component: StrikethroughReplace,
3097
+ name: "Strikethrough Replace",
3098
+ category: "text",
3099
+ kind: "component",
3100
+ version: "0.1.0",
3101
+ intent: "replace-text",
3102
+ description: 'Draws a strikethrough across the `from` text, then fades it to the `to` text in place. Three phases: line draws (0\u201340%), crossfade with slight rise (40\u201360%), hold (60\u2013100%). Communicates "this, not that" \u2014 myth-busting, before/after, correction.',
3103
+ useWhen: 'Myth-vs-fact captions, "no, actually" reveals, before/after framing, debunking pull-quotes, marketing comparisons (their thing \u2192 our thing). Both phrases should be roughly the same length so the eye sees the same slot getting overwritten. Avoid for emotional reveals (use blur-reveal or cinematic-title) and avoid pairing with slot-machine-roll on the same beat \u2014 both say "value changed" and read as redundant.',
3104
+ pairsWith: ["lower-third", "inline-highlight", "marker-highlight", "pulsing-indicator"],
3105
+ avoidWith: ["slot-machine-roll", "text-fade-replace"],
3106
+ tier: "standard",
3107
+ useCase: ["emphasis", "title-over-footage"],
3108
+ tags: ["text", "strikethrough", "replace", "before-after", "comparison", "myth-bust", "correction"],
3109
+ mood: ["editorial", "breaking-news", "corporate"],
3110
+ paramsSchema: paramsSchema19,
3111
+ propDefaults: { lineColor: "#ff5e3a", fontSize: 48, fontWeight: 600, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
3112
+ examples: [
3113
+ {
3114
+ name: "myth-vs-fact",
3115
+ mood: ["editorial"],
3116
+ params: { from: "AI replaces engineers", to: "AI augments engineers", lineColor: "#ff5e3a", fontSize: 56, fontWeight: 600, color: FLOOR_TEXT },
3117
+ description: "Classic myth-busting caption."
3118
+ },
3119
+ {
3120
+ name: "before-after-pricing",
3121
+ mood: ["corporate"],
3122
+ params: { from: "$199/month", to: "$49/month", lineColor: "#dc2626", fontSize: 72, fontWeight: 700, color: FLOOR_TEXT },
3123
+ description: "Pricing comparison with a hard red line."
3124
+ },
3125
+ {
3126
+ name: "soft-correction",
3127
+ mood: ["editorial", "minimal"],
3128
+ params: { from: "fast", to: "instant", lineColor: "#94a3b8", fontSize: 96, fontWeight: 500, color: FLOOR_TEXT },
3129
+ description: "Subtle gray strike for editorial copy upgrades."
3130
+ }
3131
+ ],
3132
+ textParam: "to",
3133
+ subtextParam: "from",
3134
+ tokens: [
3135
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
3136
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" },
3137
+ { propPath: "lineColor", cssVar: "--cf-accent", fallback: "#ff5e3a", brandKitPath: "colors.accent" }
3138
+ ],
3139
+ durationInFrames: 120,
3140
+ fps: 30,
3141
+ width: 1920,
3142
+ height: 1080,
3143
+ preview: { thumbnailFrame: 90, mode: "oneshot", defaultExample: "myth-vs-fact" }
3144
+ };
3145
+
3146
+ // ../execution/primitives/src/text/masked-slide-reveal/config.ts
3147
+ import { z as z20 } from "zod";
3148
+ var paramsSchema20 = z20.object({
3149
+ text: z20.string().min(1).max(280).describe(
3150
+ "Phrase to reveal. Words are split on whitespace and each slides up from below its own clipping mask. 3\u201310 words reads cleanest."
3151
+ ),
3152
+ staggerDelay: z20.number().min(0).max(20).default(3).describe(
3153
+ "Frames between successive word reveals. 2\u20134 feels brisk; 6+ feels deliberate, almost choreographed."
3154
+ ),
3155
+ fontSize: z20.number().min(24).max(320).default(72).describe(
3156
+ "Font size in pixels at the canonical 1920\xD71080 frame. The masked-slide effect needs hero scale to read \u2014 72\u2013120 is the sweet spot."
3157
+ ),
3158
+ fontWeight: z20.number().min(100).max(900).default(700).describe(
3159
+ "CSS font weight. 700+ gives the chunky editorial feel that the reveal pattern is built for."
3160
+ ),
3161
+ color: z20.string().default(FLOOR_TEXT).describe("Text color. Defaults to a video-safe off-white (text sits over footage); pass $brand:colors.textOnMedia to theme it."),
3162
+ fontFamily: z20.string().default(resolveTypeface("display")).describe("Display typeface; pass $brand:fonts.heading to theme."),
3163
+ speed: z20.number().min(0.25).max(4).default(1).describe(
3164
+ "Playback speed multiplier independent of staggerDelay."
3165
+ )
3166
+ }).passthrough();
3167
+ var config20 = {
3168
+ id: "masked-slide-reveal",
3169
+ component: MaskedSlideReveal,
3170
+ name: "Masked Slide Reveal",
3171
+ category: "text",
3172
+ kind: "component",
3173
+ version: "0.1.0",
3174
+ intent: "reveal-text",
3175
+ description: "Per-word slide-up from a clipping mask, with spring damping and stagger. Each word emerges from beneath an invisible bottom edge, so glyphs appear to be cut by a hard line until they snap into place. Editorial/award-show typography feel.",
3176
+ useWhen: "Hero titles, intro statements, manifesto-style declarations, lecture/conference card reveals. 3\u201310 words is the sweet spot. Avoid for read-along captions (use karaoke), for single words (use blur-reveal or tracking-in), and for content where the bottom edge of the canvas is busy with other elements (the mask becomes visible and looks broken). Don't pair with kinetic-type \u2014 both are per-word reveals and read as competing.",
3177
+ pairsWith: ["mesh-gradient-bg", "cinematic-title", "lower-third", "grain"],
3178
+ avoidWith: ["kinetic-type", "staggered-fade-up", "karaoke"],
3179
+ tier: "recommended",
3180
+ useCase: ["title-over-footage", "intro"],
3181
+ tags: ["text", "masked", "slide", "reveal", "per-word", "editorial", "spring", "hero"],
3182
+ mood: ["editorial", "cinematic", "minimal"],
3183
+ paramsSchema: paramsSchema20,
3184
+ propDefaults: { staggerDelay: 3, fontSize: 72, fontWeight: 700, color: FLOOR_TEXT, fontFamily: resolveTypeface("display"), speed: 1 },
3185
+ examples: [
3186
+ {
3187
+ name: "manifesto-statement",
3188
+ mood: ["editorial", "cinematic"],
3189
+ params: { text: "Built for the next decade", staggerDelay: 4, fontSize: 96, fontWeight: 700, color: FLOOR_TEXT },
3190
+ description: "Hero title with deliberate per-word stagger."
3191
+ },
3192
+ {
3193
+ name: "snappy-intro",
3194
+ mood: ["minimal"],
3195
+ params: { text: "A new way to ship", staggerDelay: 2, fontSize: 80, fontWeight: 600, color: FLOOR_TEXT },
3196
+ description: "Quick stagger for intro/opener cards."
3197
+ },
3198
+ {
3199
+ name: "cinematic-pull-quote",
3200
+ mood: ["cinematic"],
3201
+ params: { text: "The future is uneven", staggerDelay: 6, fontSize: 120, fontWeight: 800, color: FLOOR_TEXT },
3202
+ description: "Slow, large, editorial pull-quote."
3203
+ }
3204
+ ],
3205
+ textParam: "text",
3206
+ subtextParam: null,
3207
+ tokens: [
3208
+ { propPath: "color", cssVar: "--cf-text-onmedia", fallback: FLOOR_TEXT, brandKitPath: "colors.textOnMedia" },
3209
+ { propPath: "fontFamily", cssVar: "--cf-font-display", fallback: resolveTypeface("display"), brandKitPath: "fonts.heading" }
3210
+ ],
3211
+ durationInFrames: 90,
3212
+ fps: 30,
3213
+ width: 1920,
3214
+ height: 1080,
3215
+ preview: { thumbnailFrame: 50, mode: "oneshot", defaultExample: "manifesto-statement" }
3216
+ };
3217
+
3218
+ // ../execution/primitives/src/text/text-effect/config.ts
3219
+ import { z as z21 } from "zod";
3220
+ var paramsSchema21 = z21.object({
3221
+ text: z21.string().min(1).max(80).optional().describe(
3222
+ "Text to style. Required in practice \u2014 the component renders nothing without it (or children in code use)."
3223
+ ),
3224
+ type: z21.enum(["gradient", "neon", "glow", "wave", "outline", "shadow"]).describe(
3225
+ "CSS treatment to apply to the wrapped text. gradient/wave bake a color sweep into the glyphs; neon/glow add radial light bleed; outline strokes the glyphs; shadow drops a soft offset shadow."
3226
+ ),
3227
+ colors: z21.array(z21.string()).min(2).max(6).default([DANGER, TEAL, BLUE]).describe(
3228
+ "Palette for gradient and wave effects. 2\u20134 colors read cleanly; more becomes a smear. Ignored by neon/glow/outline/shadow."
3229
+ ),
3230
+ color: z21.string().default(ACCENT).describe(
3231
+ "Single color for neon/glow/outline/shadow effects. Ignored by gradient/wave."
3232
+ ),
3233
+ intensity: z21.number().min(0).max(1).default(0.8).describe(
3234
+ "Effect strength 0\u20131. 0.6\u20130.8 keeps text readable; 1.0 maxes the glow/stroke and starts losing edges."
3235
+ )
3236
+ }).passthrough();
3237
+ var config21 = {
3238
+ id: "text-effect",
3239
+ component: TextEffect,
3240
+ name: "Text Effect",
3241
+ category: "text",
3242
+ kind: "component",
3243
+ version: "0.1.2",
3244
+ intent: "style-text",
3245
+ description: "Composable CSS-only treatment that wraps another text primitive (cinematic-title, kinetic-type, etc.) and applies a styled appearance \u2014 gradient fill, neon glow, color-cycle wave, stroke outline, or drop shadow. Static styling layer; carries no animation of its own. Pairs with any text primitive that renders glyphs.",
3246
+ useWhen: "When a text primitive needs a vibe shift (neon arcade, gradient hype, outline-only minimalism) without rebuilding the underlying animation. Wrap, don't embed. Avoid stacking multiple TextEffect wrappers on the same content (the inner one wins or both fight). Skip for content where readability matters more than vibe (lower-thirds, captions).",
3247
+ pairsWith: ["cinematic-title", "kinetic-type", "tracking-in", "staggered-fade-up"],
3248
+ avoidWith: ["lower-third", "karaoke", "inline-highlight"],
3249
+ tier: "niche",
3250
+ useCase: ["title-over-footage"],
3251
+ tags: ["text", "effect", "style", "gradient", "neon", "glow", "outline", "shadow", "wrapper"],
3252
+ mood: ["playful", "aggressive", "cinematic", "tech-demo"],
3253
+ paramsSchema: paramsSchema21,
3254
+ propDefaults: {
3255
+ colors: [DANGER, TEAL, BLUE],
3256
+ color: ACCENT,
3257
+ intensity: 0.8
3258
+ },
3259
+ examples: [
3260
+ {
3261
+ name: "neon-arcade",
3262
+ mood: ["playful", "aggressive"],
3263
+ params: { text: "GAME ON", type: "neon", color: ACCENT, intensity: 0.9 },
3264
+ description: "Mandarin neon glow \u2014 arcade/synthwave wrapper."
3265
+ },
3266
+ {
3267
+ name: "sunset-gradient",
3268
+ mood: ["cinematic", "editorial"],
3269
+ params: { text: "Golden hour", type: "gradient", colors: [DANGER, ACCENT, WARNING], intensity: 0.8 },
3270
+ description: "Warm gradient fill across the glyphs."
3271
+ },
3272
+ {
3273
+ name: "minimal-outline",
3274
+ mood: ["minimal", "editorial"],
3275
+ params: { text: "MONOCHROME", type: "outline", color: FLOOR_TEXT, intensity: 0.7 },
3276
+ description: "Stroke-only text \u2014 gallery/editorial feel."
3277
+ }
3278
+ ],
3279
+ textParam: "text",
3280
+ subtextParam: null,
3281
+ tokens: [
3282
+ { propPath: "color", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" }
3283
+ ],
3284
+ durationInFrames: 90,
3285
+ fps: 30,
3286
+ width: 1920,
3287
+ height: 1080,
3288
+ preview: { thumbnailFrame: 45, mode: "loop", defaultExample: "neon-arcade" }
3289
+ };
3290
+
3291
+ // ../execution/primitives/src/text/index.ts
3292
+ var catalog = [
3293
+ config,
3294
+ config2,
3295
+ config3,
3296
+ config4,
3297
+ config5,
3298
+ config6,
3299
+ config7,
3300
+ config8,
3301
+ config9,
3302
+ config10,
3303
+ config11,
3304
+ config12,
3305
+ config13,
3306
+ config14,
3307
+ config16,
3308
+ config19,
3309
+ config20,
3310
+ config21,
3311
+ config15,
3312
+ config17,
3313
+ config18
3314
+ ];
3315
+
3316
+ export {
3317
+ BlurReveal,
3318
+ CinematicTitle,
3319
+ InlineHighlight,
3320
+ Karaoke,
3321
+ KineticType,
3322
+ LowerThird,
3323
+ MarkerHighlight,
3324
+ ShimmerSweep,
3325
+ StaggeredFadeUp,
3326
+ TextEffect,
3327
+ TextFadeReplace,
3328
+ TrackingIn,
3329
+ Typewriter,
3330
+ MatrixDecode,
3331
+ RGBGlitchText,
3332
+ QuoteCard,
3333
+ SlotMachineRoll,
3334
+ StatCounter,
3335
+ TokenStream,
3336
+ StrikethroughReplace,
3337
+ MaskedSlideReveal,
3338
+ catalog
3339
+ };