@cueframe/kernel 0.1.0 → 0.1.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 (355) hide show
  1. package/LICENSE +661 -0
  2. package/dist/_members/composition/ops/compositionOps.d.ts +1 -0
  3. package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
  4. package/dist/_members/composition/projection/index.d.ts +2 -0
  5. package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
  6. package/dist/_members/composition/validators/composition.d.ts +42 -25
  7. package/dist/_members/composition/validators/render.d.ts +32 -0
  8. package/dist/_members/core/render/compositionRender.d.ts +17 -1
  9. package/dist/_members/core/render/types.d.ts +31 -0
  10. package/dist/authoring/build-tools.js +6 -6
  11. package/dist/authoring/context.js +4 -4
  12. package/dist/authoring/tools.js +5 -5
  13. package/dist/authoring.js +11 -9
  14. package/dist/{chunk-ZB3C3HM7.js → chunk-7FO3ZJ43.js} +3 -0
  15. package/dist/{chunk-ODL7GQJG.js → chunk-AP6ZIVAV.js} +2 -2
  16. package/dist/{chunk-IBYQG46O.js → chunk-AQBREB5O.js} +1 -1
  17. package/dist/{chunk-YIOY2XEO.js → chunk-DK2ODBNT.js} +15 -5
  18. package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
  19. package/dist/{chunk-GEA7E2FL.js → chunk-JJ6XD7NG.js} +151 -1
  20. package/dist/{chunk-COYMZ76S.js → chunk-MBCXCJOE.js} +1 -1
  21. package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
  22. package/dist/{chunk-VOO5FQSS.js → chunk-PDYO3DOJ.js} +5 -5
  23. package/dist/{chunk-MXFAADCQ.js → chunk-PODIYN2K.js} +9 -2
  24. package/dist/{chunk-NFEGPWGS.js → chunk-TOJEXFXL.js} +1 -1
  25. package/dist/{chunk-LM4WDUQJ.js → chunk-UHGSZZDI.js} +1 -1
  26. package/dist/{chunk-XWKZB5U5.js → chunk-ZWMV6DD2.js} +24 -1
  27. package/dist/compose/renderer.js +3 -3
  28. package/dist/compose.js +6 -6
  29. package/dist/composition/graphics-plan.js +1 -1
  30. package/dist/composition/ops.js +3 -3
  31. package/dist/composition/primitive-catalog.js +1 -1
  32. package/dist/composition/projection.js +19 -3
  33. package/dist/composition/validators.js +6 -4
  34. package/dist/composition-ops.js +8 -6
  35. package/dist/composition.js +24 -6
  36. package/dist/{context-OKX3HHFS.js → context-YWUZDG5X.js} +4 -4
  37. package/dist/core/render.js +3 -3
  38. package/dist/core/select.js +2 -2
  39. package/dist/core.js +3 -3
  40. package/dist/errors.js +1 -1
  41. package/dist/mcp/adapter.js +1 -0
  42. package/dist/media-model/testing.js +1071 -718
  43. package/dist/nle-export/server.js +328 -130
  44. package/dist/nle-export.js +7 -6
  45. package/package.json +13 -14
  46. package/dist/_members/account-model/index.js +0 -4
  47. package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
  48. package/dist/_members/account-model/testing/index.js +0 -7
  49. package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
  50. package/dist/_members/account-model/types/index.js +0 -1
  51. package/dist/_members/account-model/validators/contextFile.js +0 -18
  52. package/dist/_members/account-model/validators/conversation.js +0 -95
  53. package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
  54. package/dist/_members/account-model/validators/index.js +0 -7
  55. package/dist/_members/account-model/validators/sessionToken.js +0 -49
  56. package/dist/_members/account-model/validators/uploadToken.js +0 -16
  57. package/dist/_members/account-model/validators/userSettings.js +0 -12
  58. package/dist/_members/account-model/validators/workingComposition.js +0 -20
  59. package/dist/_members/brand-derivation/constants.js +0 -20
  60. package/dist/_members/brand-derivation/contrastSafe.js +0 -114
  61. package/dist/_members/brand-derivation/index.js +0 -1
  62. package/dist/_members/cloud-import/chunk-XKO6ZSWI.js +0 -162
  63. package/dist/_members/cloud-import/chunk-XKO6ZSWI.js.map +0 -1
  64. package/dist/_members/cloud-import/index.js +0 -241
  65. package/dist/_members/cloud-import/index.js.map +0 -1
  66. package/dist/_members/cloud-import/multipartUpload.js +0 -7
  67. package/dist/_members/cloud-import/multipartUpload.js.map +0 -1
  68. package/dist/_members/composition/audio/audioMix.js +0 -61
  69. package/dist/_members/composition/audio/index.js +0 -5
  70. package/dist/_members/composition/audio/mixStaging.js +0 -195
  71. package/dist/_members/composition/audio/musicPack.generated.js +0 -136
  72. package/dist/_members/composition/audio/musicPack.js +0 -36
  73. package/dist/_members/composition/audio/pack.generated.js +0 -603
  74. package/dist/_members/composition/audio/pack.js +0 -48
  75. package/dist/_members/composition/audio/palette.js +0 -134
  76. package/dist/_members/composition/autozoom/index.js +0 -83
  77. package/dist/_members/composition/brand-kit.js +0 -45
  78. package/dist/_members/composition/brief/contract.js +0 -209
  79. package/dist/_members/composition/color-grade.js +0 -80
  80. package/dist/_members/composition/depth.js +0 -8
  81. package/dist/_members/composition/fixtures/index.js +0 -143
  82. package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
  83. package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
  84. package/dist/_members/composition/fonts.js +0 -162
  85. package/dist/_members/composition/graphics-plan/compile.js +0 -221
  86. package/dist/_members/composition/graphics-plan/index.js +0 -10
  87. package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
  88. package/dist/_members/composition/graphics-plan/motion.js +0 -66
  89. package/dist/_members/composition/graphics-plan/schemas.js +0 -261
  90. package/dist/_members/composition/graphics-plan/solve.js +0 -145
  91. package/dist/_members/composition/index.js +0 -5
  92. package/dist/_members/composition/invariants/clipPlacement.js +0 -69
  93. package/dist/_members/composition/invariants/composition.js +0 -28
  94. package/dist/_members/composition/invariants/errors.js +0 -10
  95. package/dist/_members/composition/invariants/etag.js +0 -38
  96. package/dist/_members/composition/invariants/ids.js +0 -33
  97. package/dist/_members/composition/invariants/index.js +0 -9
  98. package/dist/_members/composition/invariants/keyframes.js +0 -45
  99. package/dist/_members/composition/invariants/markers.js +0 -29
  100. package/dist/_members/composition/invariants/time.js +0 -20
  101. package/dist/_members/composition/invariants/tracks.js +0 -304
  102. package/dist/_members/composition/ops/compositionOps.js +0 -1056
  103. package/dist/_members/composition/ops/headlessStore.js +0 -94
  104. package/dist/_members/composition/ops/index.js +0 -4
  105. package/dist/_members/composition/ops/selectors.js +0 -118
  106. package/dist/_members/composition/ops/timeline-word.js +0 -1
  107. package/dist/_members/composition/ops/transcript.js +0 -77
  108. package/dist/_members/composition/ops/types.js +0 -16
  109. package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
  110. package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
  111. package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
  112. package/dist/_members/composition/primitive-catalog/index.js +0 -46
  113. package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
  114. package/dist/_members/composition/primitive-catalog/projection.js +0 -164
  115. package/dist/_members/composition/primitive-catalog/types.js +0 -14
  116. package/dist/_members/composition/projection/behind-placement.js +0 -62
  117. package/dist/_members/composition/projection/brandKit.js +0 -482
  118. package/dist/_members/composition/projection/cardTokens.js +0 -209
  119. package/dist/_members/composition/projection/composition-floor.js +0 -582
  120. package/dist/_members/composition/projection/cropProjection.js +0 -257
  121. package/dist/_members/composition/projection/index.js +0 -7
  122. package/dist/_members/composition/projection/occlusion-budget.js +0 -104
  123. package/dist/_members/composition/projection/safe-zones.js +0 -99
  124. package/dist/_members/composition/reframe/aspectLoss.js +0 -115
  125. package/dist/_members/composition/reframe/coverage.js +0 -62
  126. package/dist/_members/composition/reframe/derive.js +0 -73
  127. package/dist/_members/composition/reframe/index.js +0 -109
  128. package/dist/_members/composition/reframe/kenBurns.js +0 -64
  129. package/dist/_members/composition/reframe/shotScale.js +0 -176
  130. package/dist/_members/composition/reframe/trajectory.js +0 -124
  131. package/dist/_members/composition/timeline/compound.js +0 -134
  132. package/dist/_members/composition/timeline/index.js +0 -9
  133. package/dist/_members/composition/timeline/intent.js +0 -228
  134. package/dist/_members/composition/timeline/keyframes.js +0 -121
  135. package/dist/_members/composition/timeline/link.js +0 -59
  136. package/dist/_members/composition/timeline/occupancy.js +0 -36
  137. package/dist/_members/composition/timeline/placement.js +0 -74
  138. package/dist/_members/composition/timeline/plan.js +0 -31
  139. package/dist/_members/composition/timeline/resolve.js +0 -170
  140. package/dist/_members/composition/timeline/trims.js +0 -278
  141. package/dist/_members/composition/types/index.js +0 -1
  142. package/dist/_members/composition/validators/brandKit.js +0 -295
  143. package/dist/_members/composition/validators/composePlan.js +0 -113
  144. package/dist/_members/composition/validators/composition.js +0 -703
  145. package/dist/_members/composition/validators/font.js +0 -34
  146. package/dist/_members/composition/validators/graphicKinds.js +0 -30
  147. package/dist/_members/composition/validators/index.js +0 -9
  148. package/dist/_members/composition/validators/project.js +0 -29
  149. package/dist/_members/composition/validators/registry.js +0 -41
  150. package/dist/_members/composition/validators/render.js +0 -139
  151. package/dist/_members/composition/validators/session.js +0 -37
  152. package/dist/_members/composition/validators/webhook.js +0 -72
  153. package/dist/_members/composition-ops/alphaLayers.js +0 -141
  154. package/dist/_members/composition-ops/index.js +0 -637
  155. package/dist/_members/composition-ops/materializeGrid.js +0 -99
  156. package/dist/_members/composition-ops/opRecorder.js +0 -196
  157. package/dist/_members/composition-ops/recordingStore.js +0 -14
  158. package/dist/_members/composition-ops/replaceRegion.js +0 -102
  159. package/dist/_members/composition-ops/testFixtures.js +0 -19
  160. package/dist/_members/core/index.js +0 -5
  161. package/dist/_members/core/render/bookends.js +0 -53
  162. package/dist/_members/core/render/captions.js +0 -127
  163. package/dist/_members/core/render/compositionRender.js +0 -1249
  164. package/dist/_members/core/render/deriveTrajectory.js +0 -889
  165. package/dist/_members/core/render/emphasis.js +0 -16
  166. package/dist/_members/core/render/eval/cropBox.js +0 -139
  167. package/dist/_members/core/render/eval/inclusion.js +0 -96
  168. package/dist/_members/core/render/eval/index.js +0 -146
  169. package/dist/_members/core/render/eval/metrics.js +0 -94
  170. package/dist/_members/core/render/exportSettings.js +0 -65
  171. package/dist/_members/core/render/index.js +0 -20
  172. package/dist/_members/core/render/mapFaceToPerson.js +0 -73
  173. package/dist/_members/core/render/types.js +0 -8
  174. package/dist/_members/core/render/vcam/cameraPath.js +0 -248
  175. package/dist/_members/core/render/vcam/constants.js +0 -115
  176. package/dist/_members/core/render/vcam/errorCodes.js +0 -39
  177. package/dist/_members/core/render/vcam/framing.js +0 -136
  178. package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
  179. package/dist/_members/core/render/vcam/shots.js +0 -53
  180. package/dist/_members/core/render/vcam/subjectSet.js +0 -388
  181. package/dist/_members/core/select/errorCodes.js +0 -38
  182. package/dist/_members/core/select/index.js +0 -26
  183. package/dist/_members/core/select/model.js +0 -18
  184. package/dist/_members/core/select/select.js +0 -244
  185. package/dist/_members/core/select/stabilize.js +0 -242
  186. package/dist/_members/core/types.js +0 -7
  187. package/dist/_members/errors/index.js +0 -1
  188. package/dist/_members/errors/registry.js +0 -560
  189. package/dist/_members/foundation/codes/index.js +0 -31
  190. package/dist/_members/foundation/index.js +0 -2
  191. package/dist/_members/foundation/primitives/index.js +0 -5
  192. package/dist/_members/mcp/adapter.js +0 -771
  193. package/dist/_members/mcp/burnedNames.js +0 -73
  194. package/dist/_members/mcp/core.js +0 -390
  195. package/dist/_members/mcp/curation.js +0 -792
  196. package/dist/_members/mcp/executor.js +0 -142
  197. package/dist/_members/mcp/format.js +0 -9
  198. package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
  199. package/dist/_members/mcp/generated/harness.js +0 -81
  200. package/dist/_members/mcp/generated/operations.js +0 -131
  201. package/dist/_members/mcp/index.js +0 -50
  202. package/dist/_members/mcp/internalLoopTools.js +0 -109
  203. package/dist/_members/mcp/prompts.js +0 -45
  204. package/dist/_members/mcp/resources.js +0 -166
  205. package/dist/_members/mcp/server.js +0 -340
  206. package/dist/_members/mcp/wait.js +0 -378
  207. package/dist/_members/mcp/x402Meta.js +0 -66
  208. package/dist/_members/media-model/api.js +0 -175
  209. package/dist/_members/media-model/index.js +0 -1
  210. package/dist/_members/media-model/media-kind.js +0 -116
  211. package/dist/_members/media-model/testing/index.js +0 -1
  212. package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
  213. package/dist/_members/media-model/transcriptSearch.js +0 -70
  214. package/dist/_members/media-model/transcriptSearchCases.json +0 -79
  215. package/dist/_members/nle-export/compact-timeline.js +0 -73
  216. package/dist/_members/nle-export/compact-timeline.js.map +0 -1
  217. package/dist/_members/nle-export/composition-to-input.js +0 -147
  218. package/dist/_members/nle-export/composition-to-input.js.map +0 -1
  219. package/dist/_members/nle-export/fcpxml.js +0 -159
  220. package/dist/_members/nle-export/fcpxml.js.map +0 -1
  221. package/dist/_members/nle-export/index.js +0 -12
  222. package/dist/_members/nle-export/index.js.map +0 -1
  223. package/dist/_members/nle-export/premiere.js +0 -161
  224. package/dist/_members/nle-export/premiere.js.map +0 -1
  225. package/dist/_members/nle-export/server/index.js +0 -2
  226. package/dist/_members/nle-export/server/index.js.map +0 -1
  227. package/dist/_members/nle-export/server/pack-zip.js +0 -38
  228. package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
  229. package/dist/_members/nle-export/srt.js +0 -50
  230. package/dist/_members/nle-export/srt.js.map +0 -1
  231. package/dist/_members/nle-export/types.js +0 -9
  232. package/dist/_members/nle-export/types.js.map +0 -1
  233. package/dist/_members/nle-export/xml/index.js +0 -11
  234. package/dist/_members/nle-export/xml/index.js.map +0 -1
  235. package/dist/_members/nle-export/xml-utils.js +0 -48
  236. package/dist/_members/nle-export/xml-utils.js.map +0 -1
  237. package/dist/_members/perception/activeSpeaker.js +0 -103
  238. package/dist/_members/perception/audioQuality.js +0 -76
  239. package/dist/_members/perception/energyBeat.js +0 -99
  240. package/dist/_members/perception/identityMatch.js +0 -91
  241. package/dist/_members/perception/index.js +0 -48
  242. package/dist/_members/perception/visualQuality.js +0 -95
  243. package/dist/_members/plane/conformance.js +0 -90
  244. package/dist/_members/plane/contract.js +0 -49
  245. package/dist/_members/plane/index.js +0 -16
  246. package/dist/_members/primitives/backgrounds/index.js +0 -32
  247. package/dist/_members/primitives/backgrounds/index.js.map +0 -1
  248. package/dist/_members/primitives/captions/index.js +0 -398
  249. package/dist/_members/primitives/captions/index.js.map +0 -1
  250. package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
  251. package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
  252. package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
  253. package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
  254. package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
  255. package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
  256. package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
  257. package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
  258. package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
  259. package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
  260. package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
  261. package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
  262. package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
  263. package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
  264. package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
  265. package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
  266. package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
  267. package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
  268. package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
  269. package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
  270. package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
  271. package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
  272. package/dist/_members/primitives/chunk-IDAL6G3Y.js +0 -134
  273. package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
  274. package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
  275. package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
  276. package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
  277. package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
  278. package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
  279. package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
  280. package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
  281. package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
  282. package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
  283. package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
  284. package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
  285. package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
  286. package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
  287. package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
  288. package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
  289. package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
  290. package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
  291. package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
  292. package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
  293. package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
  294. package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
  295. package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
  296. package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
  297. package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
  298. package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
  299. package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
  300. package/dist/_members/primitives/effects/index.js +0 -30
  301. package/dist/_members/primitives/effects/index.js.map +0 -1
  302. package/dist/_members/primitives/hero-text/index.js +0 -14
  303. package/dist/_members/primitives/hero-text/index.js.map +0 -1
  304. package/dist/_members/primitives/index.js +0 -64
  305. package/dist/_members/primitives/index.js.map +0 -1
  306. package/dist/_members/primitives/layouts/index.js +0 -24
  307. package/dist/_members/primitives/layouts/index.js.map +0 -1
  308. package/dist/_members/primitives/lib/easings.js +0 -26
  309. package/dist/_members/primitives/lib/easings.js.map +0 -1
  310. package/dist/_members/primitives/lib/index.js +0 -74
  311. package/dist/_members/primitives/lib/index.js.map +0 -1
  312. package/dist/_members/primitives/lib/palette.js +0 -72
  313. package/dist/_members/primitives/lib/palette.js.map +0 -1
  314. package/dist/_members/primitives/lib/preview.js +0 -8
  315. package/dist/_members/primitives/lib/preview.js.map +0 -1
  316. package/dist/_members/primitives/lib/schema.js +0 -12
  317. package/dist/_members/primitives/lib/schema.js.map +0 -1
  318. package/dist/_members/primitives/lib/seeded-random.js +0 -14
  319. package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
  320. package/dist/_members/primitives/lib/text/contrast.js +0 -12
  321. package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
  322. package/dist/_members/primitives/lib/text/fill.js +0 -8
  323. package/dist/_members/primitives/lib/text/fill.js.map +0 -1
  324. package/dist/_members/primitives/lib/text/fitText.js +0 -10
  325. package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
  326. package/dist/_members/primitives/lib/text/marker.js +0 -8
  327. package/dist/_members/primitives/lib/text/marker.js.map +0 -1
  328. package/dist/_members/primitives/lib/text/motion.js +0 -16
  329. package/dist/_members/primitives/lib/text/motion.js.map +0 -1
  330. package/dist/_members/primitives/lib/text/recolor.js +0 -8
  331. package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
  332. package/dist/_members/primitives/lib/text/spec.js +0 -1
  333. package/dist/_members/primitives/lib/text/spec.js.map +0 -1
  334. package/dist/_members/primitives/lib/text/stage.js +0 -8
  335. package/dist/_members/primitives/lib/text/stage.js.map +0 -1
  336. package/dist/_members/primitives/lib/text/typeface.js +0 -8
  337. package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
  338. package/dist/_members/primitives/lib/tokens.js +0 -24
  339. package/dist/_members/primitives/lib/tokens.js.map +0 -1
  340. package/dist/_members/primitives/lib/types.js +0 -1
  341. package/dist/_members/primitives/lib/types.js.map +0 -1
  342. package/dist/_members/primitives/params-required.json +0 -153
  343. package/dist/_members/primitives/scenes/index.js +0 -25
  344. package/dist/_members/primitives/scenes/index.js.map +0 -1
  345. package/dist/_members/primitives/subject-foreground/index.js +0 -30
  346. package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
  347. package/dist/_members/primitives/text/index.js +0 -57
  348. package/dist/_members/primitives/text/index.js.map +0 -1
  349. package/dist/_members/primitives/transitions/index.js +0 -67
  350. package/dist/_members/primitives/transitions/index.js.map +0 -1
  351. package/dist/_members/primitives/ui-blocks/index.js +0 -76
  352. package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
  353. package/dist/_members/primitives/version-map.json +0 -105
  354. package/dist/_members/primitives/workspace.js +0 -60
  355. package/dist/_members/primitives/workspace.js.map +0 -1
@@ -1,1435 +0,0 @@
1
- import {
2
- ACCENT,
3
- ACCENT_STRONG,
4
- BG,
5
- BORDER_SOFT,
6
- DANGER,
7
- SUCCESS,
8
- SURFACE,
9
- TEAL,
10
- TEXT_HI,
11
- TEXT_MUTED,
12
- VIOLET,
13
- WARNING
14
- } from "./chunk-3OMURV6Q.js";
15
- import {
16
- FitText
17
- } from "./chunk-ROV2ODWC.js";
18
-
19
- // src/effects/blur/index.tsx
20
- import { useCurrentFrame, useVideoConfig, interpolate } from "remotion";
21
- import { jsx } from "react/jsx-runtime";
22
- var Blur = ({
23
- type = "gaussian",
24
- radius = 4,
25
- animateFrom,
26
- animateTo,
27
- easing,
28
- children,
29
- style
30
- }) => {
31
- const frame = useCurrentFrame();
32
- const { durationInFrames } = useVideoConfig();
33
- let currentRadius;
34
- if (animateFrom !== void 0 && animateTo !== void 0) {
35
- currentRadius = interpolate(
36
- frame,
37
- [0, durationInFrames - 1],
38
- [animateFrom, animateTo],
39
- { extrapolateLeft: "clamp", extrapolateRight: "clamp", easing }
40
- );
41
- } else {
42
- currentRadius = radius;
43
- }
44
- const filterValue = currentRadius > 0 ? `blur(${currentRadius}px)` : "none";
45
- return /* @__PURE__ */ jsx(
46
- "div",
47
- {
48
- style: {
49
- width: "100%",
50
- height: "100%",
51
- filter: filterValue,
52
- // Motion blur simulation: scale slightly in one direction
53
- ...type === "motion" && currentRadius > 0 ? { transform: `scaleX(${1 + currentRadius * 5e-3})` } : {},
54
- ...style
55
- },
56
- children
57
- }
58
- );
59
- };
60
-
61
- // src/effects/color-grade/index.tsx
62
- import { jsx as jsx2 } from "react/jsx-runtime";
63
- var PRESET_FILTERS = {
64
- none: { brightness: 1, contrast: 1, saturation: 1, hue: 0, sepia: 0 },
65
- vintage: { brightness: 1.05, contrast: 1.1, saturation: 0.7, hue: -5, sepia: 0.3 },
66
- cinematic: { brightness: 0.95, contrast: 1.3, saturation: 0.85, hue: 0, sepia: 0 },
67
- "bleach-bypass": { brightness: 1.1, contrast: 1.4, saturation: 0.3, hue: 0, sepia: 0 },
68
- sepia: { brightness: 1, contrast: 1.05, saturation: 0.8, hue: 0, sepia: 0.8 },
69
- cool: { brightness: 1, contrast: 1.05, saturation: 0.9, hue: 10, sepia: 0 },
70
- warm: { brightness: 1.05, contrast: 1.05, saturation: 1.1, hue: -10, sepia: 0.1 }
71
- };
72
- var ColorGrade = ({
73
- preset = "none",
74
- brightness: brightnessProp,
75
- contrast: contrastProp,
76
- saturation: saturationProp,
77
- hue: hueProp,
78
- temperature = 0,
79
- intensity = 1,
80
- children,
81
- style
82
- }) => {
83
- const base = PRESET_FILTERS[preset];
84
- const k = Math.max(0, Math.min(1, intensity));
85
- const toNeutral = (v) => 1 + (v - 1) * k;
86
- const brightness = toNeutral(brightnessProp ?? base.brightness);
87
- const contrast = toNeutral(contrastProp ?? base.contrast);
88
- const saturation = toNeutral(saturationProp ?? base.saturation);
89
- const hue = ((hueProp ?? base.hue) + temperature) * k;
90
- const sepia = base.sepia * k;
91
- const filters = [];
92
- if (brightness !== 1) filters.push(`brightness(${brightness})`);
93
- if (contrast !== 1) filters.push(`contrast(${contrast})`);
94
- if (saturation !== 1) filters.push(`saturate(${saturation})`);
95
- if (hue !== 0) filters.push(`hue-rotate(${hue}deg)`);
96
- if (sepia > 0) filters.push(`sepia(${sepia})`);
97
- const filterString = filters.length > 0 ? filters.join(" ") : "none";
98
- return /* @__PURE__ */ jsx2(
99
- "div",
100
- {
101
- style: {
102
- width: "100%",
103
- height: "100%",
104
- filter: filterString,
105
- ...style
106
- },
107
- children
108
- }
109
- );
110
- };
111
-
112
- // src/effects/grain/index.tsx
113
- import { useRef, useEffect } from "react";
114
- import { useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2 } from "remotion";
115
- import { jsx as jsx3 } from "react/jsx-runtime";
116
- function seededRandom(seed) {
117
- let s = seed;
118
- return () => {
119
- s = (s * 16807 + 0) % 2147483647;
120
- return (s - 1) / 2147483646;
121
- };
122
- }
123
- var Grain = ({
124
- intensity = 0.3,
125
- speed = 1,
126
- blendMode = "overlay",
127
- monochrome = true,
128
- style
129
- }) => {
130
- const canvasRef = useRef(null);
131
- const frame = useCurrentFrame2();
132
- const { width, height } = useVideoConfig2();
133
- const scale = 0.25;
134
- const w = Math.ceil(width * scale);
135
- const h = Math.ceil(height * scale);
136
- useEffect(() => {
137
- const canvas = canvasRef.current;
138
- if (!canvas) return;
139
- const ctx = canvas.getContext("2d");
140
- if (!ctx) return;
141
- canvas.width = w;
142
- canvas.height = h;
143
- const grainFrame = Math.floor(frame * speed);
144
- const rand = seededRandom(grainFrame * 7919 + 1);
145
- const imageData = ctx.createImageData(w, h);
146
- const data = imageData.data;
147
- for (let i = 0; i < data.length; i += 4) {
148
- if (monochrome) {
149
- const v = rand() * 255;
150
- data[i] = v;
151
- data[i + 1] = v;
152
- data[i + 2] = v;
153
- } else {
154
- data[i] = rand() * 255;
155
- data[i + 1] = rand() * 255;
156
- data[i + 2] = rand() * 255;
157
- }
158
- data[i + 3] = intensity * 255;
159
- }
160
- ctx.putImageData(imageData, 0, 0);
161
- }, [frame, speed, w, h, intensity, monochrome]);
162
- return /* @__PURE__ */ jsx3(
163
- "canvas",
164
- {
165
- ref: canvasRef,
166
- style: {
167
- position: "absolute",
168
- top: 0,
169
- left: 0,
170
- width: "100%",
171
- height: "100%",
172
- pointerEvents: "none",
173
- mixBlendMode: blendMode,
174
- imageRendering: "pixelated",
175
- ...style
176
- }
177
- }
178
- );
179
- };
180
-
181
- // src/effects/parallax/index.tsx
182
- import { useCurrentFrame as useCurrentFrame3, useVideoConfig as useVideoConfig3, interpolate as interpolate2, Img } from "remotion";
183
- import { jsx as jsx4 } from "react/jsx-runtime";
184
- var Parallax = ({
185
- src,
186
- zoom = 1.2,
187
- pan = "left",
188
- speed = 1,
189
- easing,
190
- style
191
- }) => {
192
- const frame = useCurrentFrame3();
193
- const { durationInFrames } = useVideoConfig3();
194
- const progress = interpolate2(
195
- frame,
196
- [0, durationInFrames],
197
- [0, 1 * speed],
198
- { extrapolateRight: "clamp", easing }
199
- );
200
- const scale = interpolate2(progress, [0, 1], [1, zoom]);
201
- let translateX = 0;
202
- let translateY = 0;
203
- const maxOffset = (zoom - 1) * 50;
204
- switch (pan) {
205
- case "left":
206
- translateX = interpolate2(progress, [0, 1], [0, -maxOffset]);
207
- break;
208
- case "right":
209
- translateX = interpolate2(progress, [0, 1], [0, maxOffset]);
210
- break;
211
- case "up":
212
- translateY = interpolate2(progress, [0, 1], [0, -maxOffset]);
213
- break;
214
- case "down":
215
- translateY = interpolate2(progress, [0, 1], [0, maxOffset]);
216
- break;
217
- case "none":
218
- break;
219
- }
220
- return /* @__PURE__ */ jsx4(
221
- "div",
222
- {
223
- style: {
224
- width: "100%",
225
- height: "100%",
226
- overflow: "hidden",
227
- ...style
228
- },
229
- children: /* @__PURE__ */ jsx4(
230
- Img,
231
- {
232
- src,
233
- style: {
234
- width: "100%",
235
- height: "100%",
236
- objectFit: "cover",
237
- transform: `scale(${scale}) translate(${translateX}%, ${translateY}%)`,
238
- transformOrigin: "center center"
239
- }
240
- }
241
- )
242
- }
243
- );
244
- };
245
-
246
- // src/effects/particles/index.tsx
247
- import { useRef as useRef2, useEffect as useEffect2 } from "react";
248
- import { useCurrentFrame as useCurrentFrame4, useVideoConfig as useVideoConfig4 } from "remotion";
249
- import { jsx as jsx5 } from "react/jsx-runtime";
250
- function seededRandom2(seed) {
251
- let s = seed;
252
- return () => {
253
- s = (s * 16807 + 0) % 2147483647;
254
- return (s - 1) / 2147483646;
255
- };
256
- }
257
- var PRESET_DEFAULTS = {
258
- dust: { size: 2, color: `${TEXT_HI}cc`, gravity: 0, wind: 0.1 },
259
- bokeh: { size: 20, color: `${TEXT_HI}4d`, gravity: -0.02, wind: 0 },
260
- snow: { size: 4, color: TEXT_HI, gravity: 0.3, wind: 0.15 },
261
- sparks: { size: 3, color: ACCENT, gravity: -0.5, wind: 0 },
262
- embers: { size: 5, color: ACCENT_STRONG, gravity: -0.2, wind: 0.05 },
263
- fireflies: { size: 4, color: WARNING, gravity: 0, wind: 0 }
264
- };
265
- var Particles = ({
266
- preset = "dust",
267
- count = 60,
268
- speed = 1,
269
- size: sizeProp,
270
- color: colorProp,
271
- opacity = 0.6,
272
- wind: windProp,
273
- gravity: gravityProp,
274
- style
275
- }) => {
276
- const canvasRef = useRef2(null);
277
- const particlesRef = useRef2(null);
278
- const frame = useCurrentFrame4();
279
- const { width, height, fps } = useVideoConfig4();
280
- const defaults = PRESET_DEFAULTS[preset];
281
- const pSize = sizeProp ?? defaults.size;
282
- const pColor = colorProp ?? defaults.color;
283
- const pWind = windProp ?? defaults.wind;
284
- const pGravity = gravityProp ?? defaults.gravity;
285
- if (!particlesRef.current) {
286
- const rand = seededRandom2(42);
287
- particlesRef.current = Array.from({ length: count }, () => ({
288
- x: rand() * width,
289
- y: rand() * height,
290
- vx: (rand() - 0.5) * 2,
291
- vy: (rand() - 0.5) * 2,
292
- size: pSize * (0.5 + rand()),
293
- alpha: 0.3 + rand() * 0.7,
294
- phase: rand() * Math.PI * 2
295
- }));
296
- }
297
- useEffect2(() => {
298
- const canvas = canvasRef.current;
299
- if (!canvas || !particlesRef.current) return;
300
- const ctx = canvas.getContext("2d");
301
- if (!ctx) return;
302
- canvas.width = width;
303
- canvas.height = height;
304
- ctx.clearRect(0, 0, width, height);
305
- const dt = speed / fps;
306
- for (const p of particlesRef.current) {
307
- const time = frame * dt;
308
- const x = ((p.x + (p.vx + pWind * 60) * time) % width + width) % width;
309
- const y = ((p.y + (p.vy + pGravity * 60) * time) % height + height) % height;
310
- let alpha = p.alpha * opacity;
311
- if (preset === "fireflies") {
312
- alpha *= 0.5 + 0.5 * Math.sin(time * 3 + p.phase);
313
- }
314
- ctx.globalAlpha = alpha;
315
- ctx.fillStyle = pColor;
316
- if (preset === "bokeh") {
317
- ctx.beginPath();
318
- ctx.arc(x, y, p.size, 0, Math.PI * 2);
319
- ctx.fill();
320
- } else if (preset === "sparks" || preset === "embers") {
321
- const gradient = ctx.createRadialGradient(x, y, 0, x, y, p.size);
322
- gradient.addColorStop(0, pColor);
323
- gradient.addColorStop(1, "transparent");
324
- ctx.fillStyle = gradient;
325
- ctx.beginPath();
326
- ctx.arc(x, y, p.size, 0, Math.PI * 2);
327
- ctx.fill();
328
- } else {
329
- ctx.beginPath();
330
- ctx.arc(x, y, p.size, 0, Math.PI * 2);
331
- ctx.fill();
332
- }
333
- }
334
- }, [frame, width, height, fps, speed, pColor, pWind, pGravity, opacity, preset, pSize]);
335
- return /* @__PURE__ */ jsx5(
336
- "canvas",
337
- {
338
- ref: canvasRef,
339
- style: {
340
- position: "absolute",
341
- top: 0,
342
- left: 0,
343
- width: "100%",
344
- height: "100%",
345
- pointerEvents: "none",
346
- ...style
347
- }
348
- }
349
- );
350
- };
351
-
352
- // src/effects/pulsing-indicator/index.tsx
353
- import { useCurrentFrame as useCurrentFrame5 } from "remotion";
354
- import { jsx as jsx6, jsxs } from "react/jsx-runtime";
355
- function PulsingIndicator({
356
- color = SUCCESS,
357
- size = 16,
358
- period = 8,
359
- speed = 1,
360
- background = "white",
361
- className
362
- }) {
363
- const frame = useCurrentFrame5() * speed;
364
- const wave = Math.sin(frame / period) * 0.5 + 0.5;
365
- const dotScale = 0.9 + wave * 0.2;
366
- const dotOpacity = 0.6 + wave * 0.4;
367
- const ringPeriod = period * Math.PI * 2;
368
- const phase = frame % ringPeriod / ringPeriod;
369
- const ringScale = 1 + phase * 1.6;
370
- const ringOpacity = (1 - phase) * 0.7;
371
- return /* @__PURE__ */ jsx6(
372
- "div",
373
- {
374
- className,
375
- style: {
376
- position: "absolute",
377
- inset: 0,
378
- display: "flex",
379
- alignItems: "center",
380
- justifyContent: "center",
381
- background
382
- },
383
- children: /* @__PURE__ */ jsxs(
384
- "div",
385
- {
386
- style: {
387
- position: "relative",
388
- width: size,
389
- height: size
390
- },
391
- children: [
392
- /* @__PURE__ */ jsx6(
393
- "div",
394
- {
395
- style: {
396
- position: "absolute",
397
- inset: 0,
398
- borderRadius: "50%",
399
- background: color,
400
- opacity: ringOpacity,
401
- transform: `scale(${ringScale})`,
402
- transformOrigin: "center",
403
- willChange: "transform, opacity"
404
- }
405
- }
406
- ),
407
- /* @__PURE__ */ jsx6(
408
- "div",
409
- {
410
- style: {
411
- position: "absolute",
412
- inset: 0,
413
- borderRadius: "50%",
414
- background: color,
415
- opacity: dotOpacity,
416
- transform: `scale(${dotScale})`,
417
- transformOrigin: "center",
418
- willChange: "transform, opacity"
419
- }
420
- }
421
- )
422
- ]
423
- }
424
- )
425
- }
426
- );
427
- }
428
-
429
- // src/effects/spotlight-card/index.tsx
430
- import { interpolate as interpolate3, useCurrentFrame as useCurrentFrame6, useVideoConfig as useVideoConfig5 } from "remotion";
431
- import { Fragment, jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
432
- var FONT_FAMILY = "inherit";
433
- function cursorAt(frame, cardWidth, cardHeight, durationInFrames) {
434
- const t = frame / durationInFrames * Math.PI * 2;
435
- const x = cardWidth / 2 + Math.sin(t) * (cardWidth * 0.42);
436
- const y = cardHeight / 2 + Math.sin(t * 2) * (cardHeight * 0.32);
437
- return { x, y };
438
- }
439
- function SpotlightCard({
440
- title = "Spotlight Card",
441
- body = "Soft radial light follows the cursor, picking out the microborder.",
442
- cardWidth = 520,
443
- cardHeight = 320,
444
- glowSize = 600,
445
- glowOpacity = 0.08,
446
- background = BG,
447
- cardColor = SURFACE,
448
- textColor = TEXT_HI,
449
- mutedColor = TEXT_MUTED,
450
- speed = 1,
451
- className,
452
- children
453
- }) {
454
- const frame = useCurrentFrame6() * speed;
455
- const { durationInFrames } = useVideoConfig5();
456
- const cursor = cursorAt(
457
- Math.max(0, frame - 1),
458
- cardWidth,
459
- cardHeight,
460
- durationInFrames
461
- );
462
- const cardOpacity = interpolate3(frame, [0, 12], [0, 1], {
463
- extrapolateLeft: "clamp",
464
- extrapolateRight: "clamp"
465
- });
466
- const CONTENT_PADDING = 36;
467
- const contentWidth = Math.max(80, cardWidth - CONTENT_PADDING * 2);
468
- const bodyWidth = Math.min(360, contentWidth);
469
- const surfaceGlow = `radial-gradient(${glowSize}px circle at ${cursor.x}px ${cursor.y}px, rgba(255,255,255,${glowOpacity}), transparent 40%)`;
470
- const borderGlow = `radial-gradient(${glowSize * 0.6}px circle at ${cursor.x}px ${cursor.y}px, rgba(255,255,255,0.35), transparent 40%)`;
471
- return /* @__PURE__ */ jsx7(
472
- "div",
473
- {
474
- className,
475
- style: {
476
- position: "absolute",
477
- inset: 0,
478
- background,
479
- display: "flex",
480
- alignItems: "center",
481
- justifyContent: "center",
482
- fontFamily: FONT_FAMILY
483
- },
484
- children: /* @__PURE__ */ jsx7(
485
- "div",
486
- {
487
- style: {
488
- position: "relative",
489
- width: cardWidth,
490
- height: cardHeight,
491
- borderRadius: 20,
492
- padding: 1,
493
- background: borderGlow,
494
- opacity: cardOpacity
495
- },
496
- children: /* @__PURE__ */ jsxs2(
497
- "div",
498
- {
499
- style: {
500
- position: "relative",
501
- width: "100%",
502
- height: "100%",
503
- borderRadius: 19,
504
- background: cardColor,
505
- overflow: "hidden"
506
- },
507
- children: [
508
- /* @__PURE__ */ jsx7(
509
- "div",
510
- {
511
- style: {
512
- position: "absolute",
513
- inset: 0,
514
- background: surfaceGlow,
515
- pointerEvents: "none"
516
- }
517
- }
518
- ),
519
- /* @__PURE__ */ jsx7(
520
- "div",
521
- {
522
- style: {
523
- position: "relative",
524
- padding: 36,
525
- display: "flex",
526
- flexDirection: "column",
527
- gap: 12,
528
- height: "100%",
529
- justifyContent: "flex-end"
530
- },
531
- children: children ?? /* @__PURE__ */ jsxs2(Fragment, { children: [
532
- /* @__PURE__ */ jsx7(
533
- FitText,
534
- {
535
- maxFontSize: 28,
536
- maxWidth: contentWidth,
537
- maxLines: 2,
538
- fontFamily: FONT_FAMILY,
539
- fontWeight: 700,
540
- letterSpacing: "-0.02em",
541
- style: { color: textColor },
542
- children: title
543
- }
544
- ),
545
- /* @__PURE__ */ jsx7(
546
- FitText,
547
- {
548
- maxFontSize: 16,
549
- maxWidth: bodyWidth,
550
- maxLines: 4,
551
- fontFamily: FONT_FAMILY,
552
- fontWeight: 400,
553
- style: { color: mutedColor, lineHeight: 1.5 },
554
- children: body
555
- }
556
- )
557
- ] })
558
- }
559
- )
560
- ]
561
- }
562
- )
563
- }
564
- )
565
- }
566
- );
567
- }
568
-
569
- // src/effects/spring-pop-in/index.tsx
570
- import { spring, useCurrentFrame as useCurrentFrame7, useVideoConfig as useVideoConfig6 } from "remotion";
571
- import { jsx as jsx8 } from "react/jsx-runtime";
572
- var FONT_FAMILY2 = "inherit";
573
- function DefaultChild() {
574
- return /* @__PURE__ */ jsx8(
575
- "div",
576
- {
577
- style: {
578
- width: 280,
579
- height: 280,
580
- borderRadius: 32,
581
- background: `linear-gradient(135deg, ${ACCENT} 0%, ${VIOLET} 100%)`,
582
- display: "flex",
583
- alignItems: "center",
584
- justifyContent: "center",
585
- color: TEXT_HI,
586
- fontFamily: FONT_FAMILY2,
587
- fontSize: 56,
588
- fontWeight: 700,
589
- letterSpacing: "-0.04em",
590
- border: `1px solid ${BORDER_SOFT}`
591
- },
592
- children: "Pop!"
593
- }
594
- );
595
- }
596
- function SpringPopIn({
597
- children,
598
- damping = 12,
599
- mass = 1,
600
- stiffness = 100,
601
- delayInFrames = 0,
602
- speed = 1,
603
- background = "transparent",
604
- className
605
- }) {
606
- const frame = useCurrentFrame7() * speed;
607
- const { fps } = useVideoConfig6();
608
- const scale = spring({
609
- fps,
610
- frame: frame - delayInFrames,
611
- config: {
612
- damping,
613
- mass,
614
- stiffness
615
- }
616
- });
617
- return /* @__PURE__ */ jsx8(
618
- "div",
619
- {
620
- className,
621
- style: {
622
- position: "absolute",
623
- inset: 0,
624
- display: "flex",
625
- alignItems: "center",
626
- justifyContent: "center",
627
- background
628
- },
629
- children: /* @__PURE__ */ jsx8(
630
- "div",
631
- {
632
- style: {
633
- transform: `scale(${scale})`,
634
- transformOrigin: "center",
635
- willChange: "transform"
636
- },
637
- children: children ?? /* @__PURE__ */ jsx8(DefaultChild, {})
638
- }
639
- )
640
- }
641
- );
642
- }
643
-
644
- // src/effects/success-confetti/index.tsx
645
- import {
646
- interpolate as interpolate4,
647
- random,
648
- spring as spring2,
649
- useCurrentFrame as useCurrentFrame8,
650
- useVideoConfig as useVideoConfig7
651
- } from "remotion";
652
- import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
653
- function SuccessConfetti({
654
- count = 60,
655
- colors = [ACCENT_STRONG, SUCCESS, TEAL, WARNING, VIOLET],
656
- originX = 0.5,
657
- originY = 0.5,
658
- gravity = 0.4,
659
- velocity = 12,
660
- text = "Merged!",
661
- textColor = SURFACE,
662
- background = TEXT_HI,
663
- seed = "remocn",
664
- speed = 1,
665
- className
666
- }) {
667
- const frame = useCurrentFrame8() * speed;
668
- const { fps, durationInFrames } = useVideoConfig7();
669
- const width = 1280;
670
- const height = 720;
671
- const cx = width * originX;
672
- const cy = height * originY;
673
- const textPop = spring2({
674
- frame: frame - 4,
675
- fps,
676
- config: { damping: 9, stiffness: 160, mass: 0.7 }
677
- });
678
- const textScale = interpolate4(textPop, [0, 1], [0.6, 1]);
679
- const textOpacity = interpolate4(frame, [4, 14], [0, 1], {
680
- extrapolateLeft: "clamp",
681
- extrapolateRight: "clamp"
682
- });
683
- const textExit = interpolate4(
684
- frame,
685
- [durationInFrames - 12, durationInFrames],
686
- [1, 0],
687
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
688
- );
689
- const particles = Array.from({ length: count }, (_, i) => {
690
- const seedKey = `${seed}:${i}`;
691
- const angle = random(`${seedKey}:angle`) * Math.PI * 2;
692
- const speed2 = velocity * (0.6 + random(`${seedKey}:speed`) * 0.8);
693
- const colorIndex = Math.floor(random(`${seedKey}:color`) * colors.length);
694
- const color = colors[colorIndex] ?? colors[0];
695
- const size = 6 + random(`${seedKey}:size`) * 8;
696
- const rotationSpeed = (random(`${seedKey}:rot`) - 0.5) * 16;
697
- const initialRotation = random(`${seedKey}:irot`) * 360;
698
- const isCircle = random(`${seedKey}:shape`) > 0.6;
699
- const lifeOffset = Math.floor(random(`${seedKey}:delay`) * 4);
700
- const f = Math.max(0, frame - lifeOffset);
701
- const x = cx + Math.cos(angle) * speed2 * f;
702
- const y = cy + Math.sin(angle) * speed2 * f + 0.5 * gravity * f * f;
703
- const rotation = initialRotation + rotationSpeed * f;
704
- const opacity = interpolate4(
705
- frame,
706
- [0, 4, durationInFrames - 20, durationInFrames],
707
- [0, 1, 1, 0],
708
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
709
- );
710
- return {
711
- x,
712
- y,
713
- rotation,
714
- color,
715
- size,
716
- isCircle,
717
- opacity,
718
- key: i
719
- };
720
- });
721
- return /* @__PURE__ */ jsxs3(
722
- "div",
723
- {
724
- className,
725
- style: {
726
- position: "absolute",
727
- inset: 0,
728
- background,
729
- overflow: "hidden",
730
- fontFamily: "inherit"
731
- },
732
- children: [
733
- /* @__PURE__ */ jsx9(
734
- "svg",
735
- {
736
- width,
737
- height,
738
- viewBox: `0 0 ${width} ${height}`,
739
- style: { position: "absolute", inset: 0 },
740
- children: particles.map(
741
- (p) => p.isCircle ? /* @__PURE__ */ jsx9(
742
- "circle",
743
- {
744
- cx: p.x,
745
- cy: p.y,
746
- r: p.size / 2,
747
- fill: p.color,
748
- opacity: p.opacity
749
- },
750
- p.key
751
- ) : /* @__PURE__ */ jsx9(
752
- "rect",
753
- {
754
- x: -p.size / 2,
755
- y: -p.size / 2,
756
- width: p.size,
757
- height: p.size * 0.5,
758
- rx: 1,
759
- fill: p.color,
760
- opacity: p.opacity,
761
- transform: `translate(${p.x} ${p.y}) rotate(${p.rotation})`
762
- },
763
- p.key
764
- )
765
- )
766
- }
767
- ),
768
- text ? /* @__PURE__ */ jsx9(
769
- "div",
770
- {
771
- style: {
772
- position: "absolute",
773
- inset: 0,
774
- display: "flex",
775
- alignItems: "center",
776
- justifyContent: "center",
777
- pointerEvents: "none"
778
- },
779
- children: /* @__PURE__ */ jsx9(
780
- "span",
781
- {
782
- style: {
783
- fontSize: 96,
784
- fontWeight: 700,
785
- letterSpacing: "-0.04em",
786
- color: textColor,
787
- transform: `scale(${textScale})`,
788
- opacity: Math.min(textOpacity, textExit)
789
- },
790
- children: text
791
- }
792
- )
793
- }
794
- ) : null
795
- ]
796
- }
797
- );
798
- }
799
-
800
- // src/effects/vignette/index.tsx
801
- import { jsx as jsx10 } from "react/jsx-runtime";
802
- var Vignette = ({
803
- intensity = 0.5,
804
- spread = 0.5,
805
- shape = "ellipse",
806
- color = "black",
807
- style
808
- }) => {
809
- const innerStop = Math.round(spread * 70);
810
- const outerStop = Math.round(70 + spread * 30);
811
- const shapeValue = shape === "circle" ? "circle" : "ellipse";
812
- const gradient = `radial-gradient(${shapeValue} at center, transparent ${innerStop}%, ${color} ${outerStop}%)`;
813
- return /* @__PURE__ */ jsx10(
814
- "div",
815
- {
816
- style: {
817
- position: "absolute",
818
- top: 0,
819
- left: 0,
820
- width: "100%",
821
- height: "100%",
822
- pointerEvents: "none",
823
- background: gradient,
824
- opacity: intensity,
825
- ...style
826
- }
827
- }
828
- );
829
- };
830
-
831
- // src/effects/blur/config.ts
832
- import { z } from "zod";
833
- var paramsSchema = z.object({
834
- type: z.enum(["gaussian", "motion"]).default("gaussian").describe("Blur type. gaussian: standard. motion: adds slight horizontal stretch."),
835
- radius: z.number().min(0).max(40).default(4).describe("Static blur radius. Used when animateFrom/animateTo are not set."),
836
- animateFrom: z.number().min(0).max(40).optional().describe("Starting blur radius. Pair with animateTo to animate."),
837
- animateTo: z.number().min(0).max(40).optional().describe("Ending blur radius. Pair with animateFrom to animate."),
838
- speed: z.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
839
- }).passthrough();
840
- var config = {
841
- id: "blur",
842
- component: Blur,
843
- name: "Blur",
844
- category: "effects",
845
- kind: "component",
846
- version: "0.1.0",
847
- // Same wrapper contract as color-grade — see that config's note. Caveat the
848
- // wrap mount inherits: `animateFrom/To` interpolate over the BODY's frame
849
- // span (there is no Sequence around a wrap mount), not the effect window.
850
- effectPlacement: "wrap",
851
- intent: "depth-blur",
852
- description: "Animatable blur wrapper. Wrap any child to apply CSS filter blur, optionally animating the radius across the duration (focus pull, reveal, transition out). Motion blur variant adds a slight scaleX stretch for a horizontal-pan feel.",
853
- useWhen: "Focus pulls (animateFrom: 12, animateTo: 0), out-of-focus backgrounds (static high radius), transitional fade to next scene (animateTo: 20). Pair with Img/Video/Composition. Avoid wrapping text \u2014 use blur-reveal instead.",
854
- pairsWith: ["parallax", "vignette", "mesh-gradient-bg"],
855
- avoidWith: ["blur-reveal"],
856
- tier: "standard",
857
- useCase: ["transition", "emphasis"],
858
- tags: ["effect", "blur", "gaussian", "focus", "depth", "animatable"],
859
- mood: ["cinematic", "soft", "editorial"],
860
- paramsSchema,
861
- propDefaults: { type: "gaussian", radius: 4, speed: 1 },
862
- examples: [
863
- {
864
- name: "focus-pull",
865
- mood: ["cinematic"],
866
- params: { type: "gaussian", animateFrom: 12, animateTo: 0, speed: 1 }
867
- },
868
- {
869
- name: "static-bg-blur",
870
- mood: ["soft"],
871
- params: { type: "gaussian", radius: 8, speed: 1 }
872
- },
873
- {
874
- name: "motion-stretch",
875
- mood: ["cinematic"],
876
- params: { type: "motion", animateFrom: 0, animateTo: 16, speed: 1 }
877
- }
878
- ],
879
- textParam: null,
880
- subtextParam: null,
881
- tokens: [],
882
- durationInFrames: 60,
883
- fps: 30,
884
- width: 1920,
885
- height: 1080,
886
- preview: { thumbnailFrame: 8, mode: "oneshot", defaultExample: "focus-pull" }
887
- };
888
-
889
- // src/effects/color-grade/config.ts
890
- import { z as z2 } from "zod";
891
- var paramsSchema2 = z2.object({
892
- preset: z2.enum(["vintage", "cinematic", "bleach-bypass", "sepia", "cool", "warm", "none"]).default("none").describe(
893
- "Built-in look. Override with brightness/contrast/saturation/hue/temperature for fine control."
894
- ),
895
- brightness: z2.number().min(0).max(2).optional().describe("Brightness multiplier. Overrides preset."),
896
- contrast: z2.number().min(0).max(2).optional().describe("Contrast multiplier. Overrides preset."),
897
- saturation: z2.number().min(0).max(2).optional().describe("Saturation multiplier. 0 = grayscale."),
898
- hue: z2.number().min(-180).max(180).optional().describe("Hue rotation in degrees."),
899
- temperature: z2.number().min(-30).max(30).default(0).describe("Color temperature shift. Positive = warm; negative = cool."),
900
- intensity: z2.number().min(0).max(1).default(1).describe("Grade strength 0..1 (default 1). Scales every filter delta toward neutral \u2014 1 = full preset, 0 = no grade. Use ~0.6 for a mild anchor over a talking head so a strong preset does not shift skin tones.")
901
- }).passthrough();
902
- var config2 = {
903
- id: "color-grade",
904
- component: ColorGrade,
905
- name: "Color Grade",
906
- category: "effects",
907
- kind: "component",
908
- version: "0.1.0",
909
- // A filter WRAPPER: CSS `filter` only touches the element's own subtree, so
910
- // the render must mount this AROUND the footage (WrapEffects), never as a
911
- // stacked layer — stacked, it filters an empty div and grades nothing.
912
- effectPlacement: "wrap",
913
- intent: "color-grade",
914
- description: "CSS-filter-based color grading wrapper. Seven presets cover the common looks (vintage, cinematic, bleach-bypass, sepia, cool, warm, none) and per-channel overrides are available for fine-tuning. Wrap any media \u2014 Img, Video, full Composition.",
915
- useWhen: 'Match footage from different sources, establish mood, age archival material. The "cinematic" preset is the safest starting point; tune temperature for warm/cool shifts. Avoid stacking color-grades.',
916
- pairsWith: ["parallax", "vignette", "grain"],
917
- avoidWith: [],
918
- tier: "standard",
919
- useCase: ["grade"],
920
- tags: ["effect", "color", "grade", "lut", "filter", "preset"],
921
- mood: ["cinematic", "editorial"],
922
- paramsSchema: paramsSchema2,
923
- propDefaults: { preset: "none", temperature: 0 },
924
- examples: [
925
- {
926
- name: "cinematic-look",
927
- mood: ["cinematic"],
928
- params: { preset: "cinematic", temperature: 0 }
929
- },
930
- {
931
- name: "warm-vintage",
932
- mood: ["editorial"],
933
- params: { preset: "vintage", temperature: 5 }
934
- },
935
- {
936
- name: "cool-tech",
937
- mood: ["tech-demo"],
938
- params: { preset: "cool", temperature: -10 }
939
- }
940
- ],
941
- textParam: null,
942
- subtextParam: null,
943
- tokens: [],
944
- durationInFrames: 60,
945
- fps: 30,
946
- width: 1920,
947
- height: 1080,
948
- preview: { thumbnailFrame: 30, mode: "oneshot", defaultExample: "cinematic-look" }
949
- };
950
-
951
- // src/effects/grain/config.ts
952
- import { z as z3 } from "zod";
953
- var paramsSchema3 = z3.object({
954
- intensity: z3.number().min(0).max(1).default(0.3).describe("Grain opacity. 0.2\u20130.4 is the sweet spot \u2014 heavier feels dirty."),
955
- speed: z3.number().min(0.25).max(4).default(1).describe("Animation speed. Higher = faster jitter."),
956
- blendMode: z3.enum(["overlay", "multiply", "screen", "soft-light", "hard-light", "normal"]).default("overlay").describe("CSS blend mode against the underlying frame."),
957
- monochrome: z3.boolean().default(true).describe("Pure luminance grain (true) vs RGB color noise (false).")
958
- }).passthrough();
959
- var config3 = {
960
- id: "grain",
961
- component: Grain,
962
- name: "Grain",
963
- category: "effects",
964
- kind: "component",
965
- version: "0.1.0",
966
- intent: "film-grain",
967
- description: "Animated film-grain overlay. Canvas-based monochrome (or color) noise that brings analog warmth to digital footage. Downsampled internally for performance \u2014 grain doesn't need full resolution.",
968
- useWhen: 'Add cinematic texture to anything that looks too clean. Pair with vignette + color-grade for the full "film" treatment. Avoid combining with particles (already textural) or stacking multiple grains.',
969
- pairsWith: ["vignette", "color-grade", "parallax", "light-leak"],
970
- avoidWith: ["particles"],
971
- tier: "standard",
972
- useCase: ["grade"],
973
- tags: ["effect", "grain", "film", "noise", "texture", "analog"],
974
- mood: ["cinematic", "editorial"],
975
- paramsSchema: paramsSchema3,
976
- propDefaults: { intensity: 0.3, speed: 1, blendMode: "overlay", monochrome: true },
977
- examples: [
978
- {
979
- name: "subtle-film",
980
- mood: ["cinematic"],
981
- params: { intensity: 0.25, speed: 1, blendMode: "overlay", monochrome: true }
982
- },
983
- {
984
- name: "heavy-vintage",
985
- mood: ["cinematic", "editorial"],
986
- params: { intensity: 0.5, speed: 0.8, blendMode: "soft-light", monochrome: true }
987
- }
988
- ],
989
- textParam: null,
990
- subtextParam: null,
991
- tokens: [],
992
- durationInFrames: 60,
993
- fps: 30,
994
- width: 1920,
995
- height: 1080,
996
- preview: { thumbnailFrame: 30, mode: "loop", defaultExample: "subtle-film" }
997
- };
998
-
999
- // src/effects/parallax/config.ts
1000
- import { z as z4 } from "zod";
1001
- var paramsSchema4 = z4.object({
1002
- src: z4.string().url().describe("Image URL. Pair with high-resolution sources \u2014 the zoom amplifies aliasing."),
1003
- zoom: z4.number().min(1).max(2).default(1.2).describe("End zoom factor. 1.2\u20131.4 reads as a gentle Ken Burns; >1.5 starts feeling aggressive."),
1004
- pan: z4.enum(["left", "right", "up", "down", "none"]).default("left").describe("Direction of the slow pan."),
1005
- speed: z4.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
1006
- }).passthrough();
1007
- var config4 = {
1008
- id: "parallax",
1009
- component: Parallax,
1010
- name: "Parallax",
1011
- category: "effects",
1012
- kind: "component",
1013
- version: "0.1.0",
1014
- intent: "parallax-pan",
1015
- description: 'Ken-Burns-style slow zoom + pan over a still image. Adds depth and "the camera is moving" feel to static photography. Five pan directions plus none-for-zoom-only.',
1016
- useWhen: 'Photo backgrounds in a montage, biographical clips ("a young Einstein..."), travel/landscape moments, anywhere a still image would feel static. Best at the canonical 1.2\xD7\u20131.4\xD7 zoom range.',
1017
- pairsWith: ["vignette", "color-grade", "lower-third", "cinematic-title"],
1018
- avoidWith: ["ken-burns"],
1019
- tier: "standard",
1020
- useCase: ["background"],
1021
- tags: ["effect", "ken-burns", "parallax", "pan", "zoom", "image", "cinematic"],
1022
- mood: ["cinematic", "editorial", "soft"],
1023
- paramsSchema: paramsSchema4,
1024
- propDefaults: { zoom: 1.2, pan: "left", speed: 1 },
1025
- examples: [
1026
- {
1027
- name: "gentle-pan-left",
1028
- mood: ["cinematic"],
1029
- params: { src: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=1920", zoom: 1.3, pan: "left", speed: 1 }
1030
- },
1031
- {
1032
- name: "zoom-only",
1033
- mood: ["editorial"],
1034
- params: { src: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=1920", zoom: 1.4, pan: "none", speed: 1 }
1035
- }
1036
- ],
1037
- textParam: null,
1038
- subtextParam: null,
1039
- tokens: [],
1040
- durationInFrames: 180,
1041
- fps: 30,
1042
- width: 1920,
1043
- height: 1080,
1044
- preview: { thumbnailFrame: 90, mode: "oneshot", defaultExample: "gentle-pan-left" }
1045
- };
1046
-
1047
- // src/effects/particles/config.ts
1048
- import { z as z5 } from "zod";
1049
- var paramsSchema5 = z5.object({
1050
- preset: z5.enum(["dust", "bokeh", "snow", "sparks", "embers", "fireflies"]).default("dust").describe(
1051
- "Particle aesthetic. dust: drifting motes. bokeh: soft glowing circles. snow: falling crystals. sparks: rising glow. embers: warm rising. fireflies: flicker."
1052
- ),
1053
- count: z5.number().int().min(5).max(300).default(60).describe("Particle count. 30\u2013100 is the sweet spot."),
1054
- size: z5.number().min(1).max(60).optional().describe("Override base particle size in px. Defaults vary per preset."),
1055
- color: z5.string().optional().describe("Override particle color. Defaults vary per preset."),
1056
- opacity: z5.number().min(0).max(1).default(0.6).describe("Overall opacity multiplier."),
1057
- wind: z5.number().min(-1).max(1).optional().describe("Horizontal drift force. Positive = right."),
1058
- gravity: z5.number().min(-1).max(1).optional().describe("Vertical force. Positive = down."),
1059
- speed: z5.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
1060
- }).passthrough();
1061
- var config5 = {
1062
- id: "particles",
1063
- component: Particles,
1064
- name: "Particles",
1065
- category: "effects",
1066
- kind: "component",
1067
- version: "0.1.1",
1068
- intent: "particle-overlay",
1069
- description: "Configurable ambient particle layer rendered via Canvas. Six presets cover the most common atmospheric needs (dust, bokeh, snow, sparks, embers, fireflies) and each is tunable via overrides for size, color, count, wind, and gravity.",
1070
- useWhen: "Add atmosphere to a scene that feels too sterile. Bokeh for warmth, dust for cinematic film grain extras, snow for winter mood, sparks for reveals, fireflies for whimsy. Avoid combining two preset types \u2014 feels muddled.",
1071
- pairsWith: ["parallax", "vignette", "color-grade", "cinematic-title", "mesh-gradient-bg"],
1072
- avoidWith: ["grain"],
1073
- tier: "niche",
1074
- useCase: ["background"],
1075
- tags: ["effect", "particles", "atmosphere", "bokeh", "dust", "snow", "fireflies", "sparks"],
1076
- mood: ["cinematic", "soft", "playful"],
1077
- paramsSchema: paramsSchema5,
1078
- propDefaults: { preset: "dust", count: 60, opacity: 0.6, speed: 1 },
1079
- examples: [
1080
- {
1081
- name: "soft-bokeh",
1082
- mood: ["cinematic", "soft"],
1083
- params: { preset: "bokeh", count: 40, opacity: 0.5, speed: 1 }
1084
- },
1085
- {
1086
- name: "falling-snow",
1087
- mood: ["cinematic"],
1088
- params: { preset: "snow", count: 120, opacity: 0.8, speed: 1 }
1089
- },
1090
- {
1091
- name: "fireflies-summer",
1092
- mood: ["playful", "soft"],
1093
- params: { preset: "fireflies", count: 30, opacity: 0.9, speed: 0.8 }
1094
- }
1095
- ],
1096
- textParam: null,
1097
- subtextParam: null,
1098
- tokens: [],
1099
- durationInFrames: 180,
1100
- fps: 30,
1101
- width: 1920,
1102
- height: 1080,
1103
- preview: { thumbnailFrame: 90, mode: "loop", defaultExample: "soft-bokeh" }
1104
- };
1105
-
1106
- // src/effects/pulsing-indicator/config.ts
1107
- import { z as z6 } from "zod";
1108
- var paramsSchema6 = z6.object({
1109
- color: z6.string().default(DANGER).describe('Pulse dot color. Red is canonical for "live" / "recording".'),
1110
- size: z6.number().min(8).max(64).default(16).describe("Diameter of the inner dot in pixels at 1920\xD71080."),
1111
- period: z6.number().min(20).max(180).default(60).describe("Frames per full pulse cycle. 60 frames = 2 seconds at 30fps."),
1112
- speed: z6.number().min(0.25).max(4).default(1).describe("Playback speed multiplier \u2014 overrides perceived period."),
1113
- background: z6.string().optional().describe("Optional background color behind the indicator.")
1114
- }).passthrough();
1115
- var config6 = {
1116
- id: "pulsing-indicator",
1117
- component: PulsingIndicator,
1118
- name: "Pulsing Indicator",
1119
- category: "effects",
1120
- kind: "component",
1121
- version: "0.1.1",
1122
- intent: "particle-overlay",
1123
- description: 'Small pulsing dot \u2014 the canonical "LIVE", "RECORDING", or "ACTIVE" indicator. A solid dot in the center, surrounded by a ring of decaying outer pulses radiating outward.',
1124
- useWhen: 'Live streaming overlays, recording badges, "you are here" indicators in a UI walkthrough, status pings. Pair with a tiny text label ("LIVE") for clarity. Avoid for any moment that needs the eye elsewhere \u2014 the pulse is hypnotic.',
1125
- pairsWith: ["lower-third", "toast-notification", "typewriter"],
1126
- avoidWith: [],
1127
- tier: "standard",
1128
- useCase: ["emphasis"],
1129
- tags: ["effect", "pulse", "indicator", "live", "badge", "status", "loop"],
1130
- mood: ["breaking-news", "tech-demo", "minimal"],
1131
- paramsSchema: paramsSchema6,
1132
- propDefaults: { color: DANGER, size: 16, period: 60, speed: 1 },
1133
- examples: [
1134
- {
1135
- name: "live-red",
1136
- mood: ["breaking-news"],
1137
- params: { color: DANGER, size: 16, period: 60, speed: 1 }
1138
- },
1139
- {
1140
- name: "recording-amber",
1141
- mood: ["tech-demo"],
1142
- params: { color: WARNING, size: 14, period: 50, speed: 1.2 }
1143
- }
1144
- ],
1145
- textParam: null,
1146
- subtextParam: null,
1147
- tokens: [
1148
- { propPath: "color", cssVar: "--cf-accent", fallback: DANGER, brandKitPath: "colors.accent" }
1149
- ],
1150
- durationInFrames: 60,
1151
- fps: 30,
1152
- width: 200,
1153
- height: 200,
1154
- preview: { thumbnailFrame: 30, mode: "loop", defaultExample: "live-red" }
1155
- };
1156
-
1157
- // src/effects/spotlight-card/config.ts
1158
- import { z as z7 } from "zod";
1159
- var paramsSchema7 = z7.object({
1160
- title: z7.string().max(140).default("Spotlight Card").describe(
1161
- "Card headline. Keep \u22646 words; the spotlight effect is the hero, not the copy. Auto-fits (shrinks + wraps to 2 lines) to the card."
1162
- ),
1163
- body: z7.string().max(360).default("Soft radial light follows the cursor, picking out the microborder.").describe(
1164
- "Supporting copy beneath the title. 1\u20132 sentences max \u2014 content sits in a small footer block. Auto-fits (shrinks + wraps to 4 lines)."
1165
- ),
1166
- cardWidth: z7.number().min(200).max(1600).default(520).describe(
1167
- "Card width in pixels at 1920\xD71080. 480\u2013640 is the sweet spot for a single-card hero."
1168
- ),
1169
- cardHeight: z7.number().min(120).max(900).default(320).describe(
1170
- "Card height in pixels. 280\u2013360 reads like a product card; >500 starts feeling like a panel."
1171
- ),
1172
- glowSize: z7.number().min(100).max(2e3).default(600).describe(
1173
- "Radius of the moving radial spotlight in pixels. Larger = softer, more diffuse light."
1174
- ),
1175
- glowOpacity: z7.number().min(0).max(1).default(0.08).describe(
1176
- "Surface glow strength. 0.06\u20130.12 reads as subtle premium; >0.2 looks like a flashlight."
1177
- ),
1178
- background: z7.string().default(BG).describe("Frame background behind the card."),
1179
- cardColor: z7.string().default(SURFACE).describe("Card surface fill."),
1180
- textColor: z7.string().default(TEXT_HI).describe("Title color."),
1181
- mutedColor: z7.string().default(TEXT_MUTED).describe("Body/secondary text color."),
1182
- speed: z7.number().min(0.25).max(4).default(1).describe("Cursor-tour playback speed multiplier.")
1183
- }).passthrough();
1184
- var config7 = {
1185
- id: "spotlight-card",
1186
- component: SpotlightCard,
1187
- name: "Spotlight Card",
1188
- category: "effects",
1189
- kind: "component",
1190
- version: "0.1.1",
1191
- intent: "highlight-area",
1192
- description: 'Premium product-card primitive with a soft radial spotlight that drifts across the surface on a slow Lissajous path. The cursor-following light picks out a 1px microborder so the card always has a "hovered" feel even on still frames. Linear/Vercel/Stripe-style hero card.',
1193
- useWhen: 'Hero cards, feature callouts, "what we shipped" beats, premium SaaS product showcases on a dark background. Avoid on light backgrounds (the radial highlight needs darkness to read) and avoid stacking multiple spotlight cards in one frame \u2014 the wandering lights compete.',
1194
- pairsWith: ["mesh-gradient-bg", "dynamic-grid", "grain", "kinetic-type"],
1195
- avoidWith: ["vignette"],
1196
- tier: "recommended",
1197
- useCase: ["emphasis", "full-scene"],
1198
- tags: ["effect", "card", "spotlight", "cursor", "glow", "premium", "saas"],
1199
- mood: ["tech-demo", "minimal", "corporate", "editorial"],
1200
- paramsSchema: paramsSchema7,
1201
- propDefaults: {
1202
- title: "Spotlight Card",
1203
- body: "Soft radial light follows the cursor, picking out the microborder.",
1204
- cardWidth: 520,
1205
- cardHeight: 320,
1206
- glowSize: 600,
1207
- glowOpacity: 0.08,
1208
- background: BG,
1209
- cardColor: SURFACE,
1210
- textColor: TEXT_HI,
1211
- mutedColor: TEXT_MUTED,
1212
- speed: 1
1213
- },
1214
- examples: [
1215
- {
1216
- name: "product-hero",
1217
- mood: ["tech-demo", "minimal"],
1218
- params: { title: "Now Generally Available", body: "Ship faster with sub-second cold starts and zero infrastructure to manage.", glowSize: 600, glowOpacity: 0.1 },
1219
- description: "Default product-launch card on dark bg."
1220
- },
1221
- {
1222
- name: "subtle-feature",
1223
- mood: ["corporate", "minimal"],
1224
- params: { title: "Audit Logs", body: "Every action, every actor, every change.", glowSize: 480, glowOpacity: 0.06, cardWidth: 480, cardHeight: 280 },
1225
- description: "Smaller, calmer feature card for a grid of three."
1226
- },
1227
- {
1228
- name: "editorial-quote",
1229
- mood: ["editorial"],
1230
- params: { title: `"Honestly, the best DX we've seen."`, body: "Lead Engineer, Linear", glowSize: 700, glowOpacity: 0.12, cardWidth: 640, cardHeight: 360, textColor: TEXT_HI, mutedColor: TEXT_MUTED }
1231
- }
1232
- ],
1233
- textParam: "title",
1234
- subtextParam: "body",
1235
- tokens: [
1236
- { propPath: "background", cssVar: "--cf-bg", fallback: BG, brandKitPath: "colors.background" },
1237
- { propPath: "cardColor", cssVar: "--cf-surface", fallback: SURFACE, brandKitPath: "colors.surface" },
1238
- { propPath: "textColor", cssVar: "--cf-fg", fallback: TEXT_HI, brandKitPath: "colors.textOnSurface" },
1239
- { propPath: "mutedColor", cssVar: "--cf-muted", fallback: TEXT_MUTED, brandKitPath: "colors.textMuted" }
1240
- ],
1241
- durationInFrames: 240,
1242
- fps: 30,
1243
- width: 1920,
1244
- height: 1080,
1245
- preview: { thumbnailFrame: 90, mode: "loop", defaultExample: "product-hero" }
1246
- };
1247
-
1248
- // src/effects/spring-pop-in/config.ts
1249
- import { z as z8 } from "zod";
1250
- var paramsSchema8 = z8.object({
1251
- damping: z8.number().min(2).max(40).default(12).describe("Spring damping. Lower = more bounce; higher = faster settle."),
1252
- mass: z8.number().min(0.1).max(5).default(1).describe("Spring mass. Higher feels heavier and overshoots more."),
1253
- stiffness: z8.number().min(20).max(400).default(140).describe("Spring stiffness. Higher = snappier response."),
1254
- delayInFrames: z8.number().int().min(0).max(120).default(0).describe("Frames to wait before the entrance starts."),
1255
- speed: z8.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
1256
- background: z8.string().default("transparent").describe("Stage color behind the popping child. Keep transparent when compositing over a scene.")
1257
- }).passthrough();
1258
- var config8 = {
1259
- id: "spring-pop-in",
1260
- component: SpringPopIn,
1261
- name: "Spring Pop In",
1262
- category: "effects",
1263
- kind: "component",
1264
- version: "0.1.2",
1265
- intent: "particle-overlay",
1266
- description: "Wrapper that pops any child element into view with spring-driven scale. The child appears with a satisfying overshoot bounce and settles. Composable with any primitive that needs a more interesting entrance than a plain fade.",
1267
- useWhen: 'Wrap around badges, icons, callouts, modal dialogs, anything that should "arrive" with weight. Avoid wrapping text that has its own entrance animation (typewriter, blur-reveal) \u2014 double-animation.',
1268
- pairsWith: ["toast-notification", "pulsing-indicator", "success-confetti"],
1269
- avoidWith: ["blur-reveal", "tracking-in"],
1270
- tier: "standard",
1271
- useCase: ["emphasis"],
1272
- tags: ["effect", "spring", "pop-in", "wrapper", "entrance", "bounce"],
1273
- mood: ["playful", "tech-demo", "soft"],
1274
- paramsSchema: paramsSchema8,
1275
- propDefaults: { damping: 12, mass: 1, stiffness: 140, delayInFrames: 0, speed: 1, background: "transparent" },
1276
- examples: [
1277
- {
1278
- name: "default-bounce",
1279
- mood: ["playful"],
1280
- params: { damping: 12, mass: 1, stiffness: 140, delayInFrames: 0, speed: 1 }
1281
- },
1282
- {
1283
- name: "gentle-arrive",
1284
- mood: ["soft"],
1285
- params: { damping: 18, mass: 0.8, stiffness: 100, delayInFrames: 0, speed: 1 }
1286
- },
1287
- {
1288
- name: "snappy-pop",
1289
- mood: ["tech-demo"],
1290
- params: { damping: 8, mass: 0.6, stiffness: 220, delayInFrames: 0, speed: 1.1 }
1291
- }
1292
- ],
1293
- textParam: null,
1294
- subtextParam: null,
1295
- tokens: [],
1296
- durationInFrames: 60,
1297
- fps: 30,
1298
- width: 1920,
1299
- height: 1080,
1300
- preview: { thumbnailFrame: 30, mode: "oneshot", defaultExample: "default-bounce" }
1301
- };
1302
-
1303
- // src/effects/success-confetti/config.ts
1304
- import { z as z9 } from "zod";
1305
- var paramsSchema9 = z9.object({
1306
- count: z9.number().int().min(10).max(400).default(120).describe("Number of confetti particles. 80\u2013150 reads festive without overwhelming."),
1307
- colors: z9.array(z9.string()).min(1).default([DANGER, WARNING, SUCCESS, TEAL, VIOLET]).describe("Particle colors to sample from. 4\u20136 distinct hues works best."),
1308
- originX: z9.number().min(0).max(1).default(0.5).describe("Horizontal origin of the burst, normalized 0\u20131."),
1309
- originY: z9.number().min(0).max(1).default(0.5).describe("Vertical origin of the burst, normalized 0\u20131."),
1310
- gravity: z9.number().min(0).max(2).default(0.8).describe("Downward acceleration. 0 = particles drift; 1+ = particles fall fast."),
1311
- velocity: z9.number().min(1).max(40).default(14).describe("Initial burst speed. Higher = particles travel further."),
1312
- text: z9.string().optional().describe('Optional centered text on top of the confetti (e.g., "\u2713 Done").'),
1313
- textColor: z9.string().default(SURFACE).describe("Color of the optional text."),
1314
- background: z9.string().optional().describe("Optional full-frame background behind the burst."),
1315
- seed: z9.string().default("cueframe").describe("Deterministic seed for the particle distribution."),
1316
- speed: z9.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
1317
- }).passthrough();
1318
- var config9 = {
1319
- id: "success-confetti",
1320
- component: SuccessConfetti,
1321
- name: "Success Confetti",
1322
- category: "effects",
1323
- kind: "component",
1324
- version: "0.1.1",
1325
- intent: "particle-overlay",
1326
- description: "Particle burst from a configurable origin point \u2014 confetti, success celebration, achievement unlock. Colors cycle through a palette; gravity and velocity tune the physics.",
1327
- useWhen: 'Demo end cards, "you did it!" beats, deal closed, level cleared, milestone hit. Overlay on top of any other content. Avoid for serious/editorial moments \u2014 confetti is loud.',
1328
- pairsWith: ["blur-reveal", "shimmer-sweep", "kinetic-type"],
1329
- avoidWith: ["glitch-cut", "matrix-decode"],
1330
- tier: "niche",
1331
- useCase: ["emphasis"],
1332
- tags: ["effect", "confetti", "celebration", "particles", "success", "achievement"],
1333
- mood: ["playful", "breaking-news"],
1334
- paramsSchema: paramsSchema9,
1335
- propDefaults: { count: 120, colors: [DANGER, WARNING, SUCCESS, TEAL, VIOLET], originX: 0.5, originY: 0.5, gravity: 0.8, velocity: 14, textColor: SURFACE, seed: "cueframe", speed: 1 },
1336
- examples: [
1337
- {
1338
- name: "classic-burst",
1339
- mood: ["playful"],
1340
- params: { count: 120, originX: 0.5, originY: 0.5, gravity: 0.8, velocity: 14, seed: "cueframe", speed: 1 }
1341
- },
1342
- {
1343
- name: "with-text",
1344
- mood: ["playful"],
1345
- params: { count: 100, originX: 0.5, originY: 0.4, gravity: 0.7, velocity: 12, text: "\u2713 Done", textColor: BG, seed: "win", speed: 1 }
1346
- }
1347
- ],
1348
- textParam: "text",
1349
- subtextParam: null,
1350
- tokens: [
1351
- { propPath: "textColor", cssVar: "--cf-text", fallback: SURFACE, brandKitPath: "colors.text" }
1352
- ],
1353
- durationInFrames: 90,
1354
- fps: 30,
1355
- width: 1920,
1356
- height: 1080,
1357
- preview: { thumbnailFrame: 18, mode: "oneshot", defaultExample: "classic-burst" }
1358
- };
1359
-
1360
- // src/effects/vignette/config.ts
1361
- import { z as z10 } from "zod";
1362
- var paramsSchema10 = z10.object({
1363
- intensity: z10.number().min(0).max(1).default(0.5).describe("Edge darkness. 0.4\u20130.6 reads as cinematic; 0.8+ feels like a tunnel."),
1364
- spread: z10.number().min(0).max(1).default(0.5).describe("How far from the edges the vignette starts. Lower = covers more of the frame."),
1365
- shape: z10.enum(["ellipse", "circle"]).default("ellipse").describe("Gradient shape. Ellipse follows the frame ratio; circle is centered round."),
1366
- color: z10.string().default("black").describe("Vignette color. Black is canonical; dark colors can tint the frame edges.")
1367
- }).passthrough();
1368
- var config10 = {
1369
- id: "vignette",
1370
- component: Vignette,
1371
- name: "Vignette",
1372
- category: "effects",
1373
- kind: "component",
1374
- version: "0.1.0",
1375
- intent: "depth-blur",
1376
- description: "Edge darkening overlay. Pure CSS radial-gradient \u2014 no canvas needed. Pulls focus to the center of the frame and adds cinematic depth.",
1377
- useWhen: "Anywhere you want to focus the eye toward the center: speaker close-ups, hero text frames, dramatic moments. Avoid combining with letterbox at high intensity (frame gets too dark) or for moments that need full peripheral visibility.",
1378
- pairsWith: ["parallax", "color-grade", "grain", "cinematic-title"],
1379
- avoidWith: [],
1380
- tier: "standard",
1381
- useCase: ["grade"],
1382
- tags: ["effect", "vignette", "edge", "darken", "focus", "cinematic"],
1383
- mood: ["cinematic", "editorial", "minimal"],
1384
- paramsSchema: paramsSchema10,
1385
- propDefaults: { intensity: 0.5, spread: 0.5, shape: "ellipse", color: "black" },
1386
- examples: [
1387
- {
1388
- name: "cinematic",
1389
- mood: ["cinematic"],
1390
- params: { intensity: 0.6, spread: 0.4, shape: "ellipse", color: "black" }
1391
- },
1392
- {
1393
- name: "subtle-focus",
1394
- mood: ["minimal"],
1395
- params: { intensity: 0.3, spread: 0.6, shape: "ellipse", color: "black" }
1396
- }
1397
- ],
1398
- textParam: null,
1399
- subtextParam: null,
1400
- tokens: [],
1401
- durationInFrames: 60,
1402
- fps: 30,
1403
- width: 1920,
1404
- height: 1080,
1405
- preview: { thumbnailFrame: 30, mode: "oneshot", defaultExample: "cinematic" }
1406
- };
1407
-
1408
- // src/effects/index.ts
1409
- var catalog = [
1410
- config,
1411
- config2,
1412
- config3,
1413
- config4,
1414
- config5,
1415
- config6,
1416
- config7,
1417
- config8,
1418
- config9,
1419
- config10
1420
- ];
1421
-
1422
- export {
1423
- Blur,
1424
- ColorGrade,
1425
- Grain,
1426
- Parallax,
1427
- Particles,
1428
- PulsingIndicator,
1429
- SpotlightCard,
1430
- SpringPopIn,
1431
- SuccessConfetti,
1432
- Vignette,
1433
- catalog
1434
- };
1435
- //# sourceMappingURL=chunk-WZFLEGMD.js.map