@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,3563 +0,0 @@
1
- import {
2
- frostedGlassWipe,
3
- spatialPush
4
- } from "./chunk-US4YEDAA.js";
5
- import {
6
- DashboardPopulate
7
- } from "./chunk-KYRDVZST.js";
8
- import {
9
- ACCENT_SOFT,
10
- BG,
11
- BG_DEEP,
12
- BLUE,
13
- BORDER,
14
- BORDER_STRONG,
15
- DANGER,
16
- SUCCESS,
17
- SURFACE,
18
- SURFACE_HI,
19
- SYN_COMMENT,
20
- SYN_FN,
21
- SYN_KEYWORD,
22
- SYN_NUMBER,
23
- SYN_STRING,
24
- SYN_TEXT,
25
- TEXT,
26
- TEXT_HI,
27
- TEXT_MUTED,
28
- VIOLET,
29
- WARNING
30
- } from "./chunk-3OMURV6Q.js";
31
-
32
- // src/scenes/changelog-bite/index.tsx
33
- import {
34
- AbsoluteFill,
35
- Easing,
36
- interpolate,
37
- spring,
38
- useCurrentFrame,
39
- useVideoConfig
40
- } from "remotion";
41
- import { jsx, jsxs } from "react/jsx-runtime";
42
- var FONT_FAMILY = "inherit";
43
- var MONO_FAMILY = "monospace";
44
- var SOFT = Easing.bezier(0.16, 1, 0.3, 1);
45
- function ChangelogBite({
46
- label = "New",
47
- title = "Inline diff view",
48
- oldContent,
49
- newContent,
50
- oldLines,
51
- newLines,
52
- format = "square",
53
- background = BG,
54
- cardBackground = SURFACE,
55
- accent = ACCENT_SOFT,
56
- speed = 1,
57
- className
58
- }) {
59
- const frame = useCurrentFrame() * speed;
60
- const { fps, durationInFrames } = useVideoConfig();
61
- const enterT = interpolate(frame, [0, 10], [0, 1], {
62
- extrapolateLeft: "clamp",
63
- extrapolateRight: "clamp",
64
- easing: SOFT
65
- });
66
- const exitT = interpolate(
67
- frame,
68
- [durationInFrames - 15, durationInFrames - 1],
69
- [0, 1],
70
- { extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: SOFT }
71
- );
72
- const cardScale = 0.95 + enterT * 0.05 - exitT * 0.05;
73
- const cardOpacity = enterT * (1 - exitT);
74
- const wipe = spring({
75
- frame: frame - 60,
76
- fps,
77
- config: { damping: 18, mass: 0.9, stiffness: 90 },
78
- durationInFrames: 50
79
- });
80
- const wipePct = wipe * 100;
81
- const isSquare = format === "square";
82
- const cardWidth = isSquare ? 880 : 880;
83
- const cardHeight = isSquare ? 880 : 1100;
84
- const oldNode = oldContent ?? (oldLines && oldLines.length > 0 ? /* @__PURE__ */ jsx(LinesPanel, { lines: oldLines, variant: "old", accent }) : /* @__PURE__ */ jsx(DefaultOldPanel, { accent }));
85
- const newNode = newContent ?? (newLines && newLines.length > 0 ? /* @__PURE__ */ jsx(LinesPanel, { lines: newLines, variant: "new", accent }) : /* @__PURE__ */ jsx(DefaultNewPanel, { accent }));
86
- return /* @__PURE__ */ jsx(
87
- AbsoluteFill,
88
- {
89
- className,
90
- style: {
91
- background,
92
- display: "flex",
93
- alignItems: "center",
94
- justifyContent: "center",
95
- fontFamily: FONT_FAMILY
96
- },
97
- children: /* @__PURE__ */ jsxs(
98
- "div",
99
- {
100
- style: {
101
- width: cardWidth,
102
- height: cardHeight,
103
- borderRadius: 56,
104
- background: cardBackground,
105
- border: `1px solid ${accent}33`,
106
- opacity: cardOpacity,
107
- transform: `scale(${cardScale})`,
108
- transformOrigin: "center",
109
- willChange: "transform, opacity",
110
- padding: 56,
111
- display: "flex",
112
- flexDirection: "column",
113
- gap: 28,
114
- position: "relative",
115
- overflow: "hidden"
116
- },
117
- children: [
118
- /* @__PURE__ */ jsxs(
119
- "div",
120
- {
121
- style: {
122
- display: "flex",
123
- alignItems: "center",
124
- justifyContent: "space-between"
125
- },
126
- children: [
127
- /* @__PURE__ */ jsx(
128
- "div",
129
- {
130
- style: {
131
- color: "rgba(255,255,255,0.55)",
132
- fontSize: 22,
133
- letterSpacing: "0.02em"
134
- },
135
- children: title
136
- }
137
- ),
138
- /* @__PURE__ */ jsx(PulsingPill, { label, color: accent, speed })
139
- ]
140
- }
141
- ),
142
- /* @__PURE__ */ jsxs(
143
- "div",
144
- {
145
- style: {
146
- position: "relative",
147
- flex: 1,
148
- borderRadius: 32,
149
- overflow: "hidden",
150
- background: "rgba(8,7,12,0.6)",
151
- border: "1px solid rgba(255,255,255,0.05)"
152
- },
153
- children: [
154
- /* @__PURE__ */ jsx("div", { style: { position: "absolute", inset: 0 }, children: newNode }),
155
- /* @__PURE__ */ jsx(
156
- "div",
157
- {
158
- style: {
159
- position: "absolute",
160
- inset: 0,
161
- clipPath: `inset(0 ${wipePct}% 0 0)`,
162
- willChange: "clip-path"
163
- },
164
- children: oldNode
165
- }
166
- ),
167
- wipePct > 0 && wipePct < 100 && /* @__PURE__ */ jsx(
168
- "div",
169
- {
170
- style: {
171
- position: "absolute",
172
- top: 0,
173
- bottom: 0,
174
- left: `calc(${wipePct}% - 60px)`,
175
- width: 120,
176
- background: "linear-gradient(90deg, rgba(255,255,255,0.0) 0%, rgba(255,255,255,0.10) 50%, rgba(255,255,255,0.0) 100%)",
177
- backdropFilter: "blur(18px)",
178
- WebkitBackdropFilter: "blur(18px)",
179
- pointerEvents: "none"
180
- }
181
- }
182
- ),
183
- wipePct > 0 && wipePct < 100 && /* @__PURE__ */ jsx(
184
- "div",
185
- {
186
- style: {
187
- position: "absolute",
188
- top: 0,
189
- bottom: 0,
190
- left: `${wipePct}%`,
191
- width: 1.5,
192
- background: accent,
193
- opacity: 0.55,
194
- pointerEvents: "none"
195
- }
196
- }
197
- )
198
- ]
199
- }
200
- ),
201
- /* @__PURE__ */ jsxs(
202
- "div",
203
- {
204
- style: {
205
- display: "flex",
206
- justifyContent: "space-between",
207
- color: "rgba(255,255,255,0.4)",
208
- fontSize: 16,
209
- fontFamily: MONO_FAMILY
210
- },
211
- children: [
212
- /* @__PURE__ */ jsx("span", { style: { opacity: 1 - wipe }, children: "before" }),
213
- /* @__PURE__ */ jsx("span", { style: { opacity: wipe }, children: "after" })
214
- ]
215
- }
216
- )
217
- ]
218
- }
219
- )
220
- }
221
- );
222
- }
223
- function LinesPanel({
224
- lines,
225
- variant,
226
- accent
227
- }) {
228
- const isOld = variant === "old";
229
- return /* @__PURE__ */ jsxs(
230
- "div",
231
- {
232
- style: {
233
- position: "absolute",
234
- inset: 0,
235
- background: isOld ? BG_DEEP : "radial-gradient(ellipse at 50% 30%, rgba(255,179,142,0.10) 0%, rgba(10,9,14,1) 70%)",
236
- padding: "44px 52px",
237
- fontFamily: MONO_FAMILY,
238
- color: isOld ? TEXT_MUTED : TEXT,
239
- fontSize: 22,
240
- lineHeight: 1.55,
241
- whiteSpace: "pre"
242
- },
243
- children: [
244
- lines.map((line, i) => /* @__PURE__ */ jsx("div", { children: line === "" ? "\xA0" : line }, i)),
245
- /* @__PURE__ */ jsx(
246
- "div",
247
- {
248
- style: {
249
- marginTop: 24,
250
- display: "inline-block",
251
- padding: "6px 14px",
252
- borderRadius: 999,
253
- background: isOld ? `${DANGER}1f` : `${accent}1a`,
254
- border: isOld ? `1px solid ${DANGER}59` : `1px solid ${accent}55`,
255
- color: isOld ? DANGER : accent,
256
- fontSize: 13,
257
- letterSpacing: "0.12em",
258
- fontWeight: 700
259
- },
260
- children: isOld ? "BEFORE" : "AFTER"
261
- }
262
- )
263
- ]
264
- }
265
- );
266
- }
267
- function DefaultOldPanel({ accent }) {
268
- return /* @__PURE__ */ jsxs(
269
- "div",
270
- {
271
- style: {
272
- position: "absolute",
273
- inset: 0,
274
- background: BG_DEEP,
275
- padding: "44px 52px",
276
- fontFamily: MONO_FAMILY,
277
- color: TEXT_MUTED,
278
- fontSize: 22,
279
- lineHeight: 1.55,
280
- whiteSpace: "pre"
281
- },
282
- children: [
283
- /* @__PURE__ */ jsx("div", { children: "function diff(a, b) {" }),
284
- /* @__PURE__ */ jsx("div", { children: " if (a === b) return null;" }),
285
- /* @__PURE__ */ jsx("div", { children: " return {" }),
286
- /* @__PURE__ */ jsx("div", { children: " before: a," }),
287
- /* @__PURE__ */ jsx("div", { children: " after: b," }),
288
- /* @__PURE__ */ jsx("div", { children: " };" }),
289
- /* @__PURE__ */ jsx("div", { children: "}" }),
290
- /* @__PURE__ */ jsx(
291
- "div",
292
- {
293
- style: {
294
- marginTop: 24,
295
- display: "inline-block",
296
- padding: "6px 14px",
297
- borderRadius: 999,
298
- background: `${DANGER}1f`,
299
- border: `1px solid ${DANGER}59`,
300
- color: DANGER,
301
- fontSize: 13,
302
- letterSpacing: "0.12em",
303
- fontWeight: 700
304
- },
305
- children: "BEFORE"
306
- }
307
- ),
308
- /* @__PURE__ */ jsx("span", { style: { display: "none" }, children: accent })
309
- ]
310
- }
311
- );
312
- }
313
- function DefaultNewPanel({ accent }) {
314
- return /* @__PURE__ */ jsxs(
315
- "div",
316
- {
317
- style: {
318
- position: "absolute",
319
- inset: 0,
320
- background: "radial-gradient(ellipse at 50% 30%, rgba(255,179,142,0.10) 0%, rgba(10,9,14,1) 70%)",
321
- padding: "44px 52px",
322
- fontFamily: MONO_FAMILY,
323
- color: TEXT,
324
- fontSize: 22,
325
- lineHeight: 1.55,
326
- whiteSpace: "pre"
327
- },
328
- children: [
329
- /* @__PURE__ */ jsxs("div", { children: [
330
- /* @__PURE__ */ jsx("span", { style: { color: SYN_KEYWORD }, children: "function" }),
331
- " ",
332
- /* @__PURE__ */ jsx("span", { style: { color: SYN_FN }, children: "diff" }),
333
- "(a, b) {"
334
- ] }),
335
- /* @__PURE__ */ jsxs("div", { children: [
336
- " return ",
337
- /* @__PURE__ */ jsx("span", { style: { color: SYN_STRING }, children: "visualDiff" }),
338
- "(a, b);"
339
- ] }),
340
- /* @__PURE__ */ jsx("div", { children: "}" }),
341
- /* @__PURE__ */ jsx(
342
- "div",
343
- {
344
- style: {
345
- marginTop: 24,
346
- display: "inline-block",
347
- padding: "6px 14px",
348
- borderRadius: 999,
349
- background: `${accent}1a`,
350
- border: `1px solid ${accent}55`,
351
- color: accent,
352
- fontSize: 13,
353
- letterSpacing: "0.12em",
354
- fontWeight: 700
355
- },
356
- children: "AFTER"
357
- }
358
- )
359
- ]
360
- }
361
- );
362
- }
363
- function PulsingPill({
364
- label,
365
- color,
366
- speed
367
- }) {
368
- const frame = useCurrentFrame() * speed;
369
- const wave = (Math.sin(frame / 8) + 1) / 2;
370
- const dotScale = 0.92 + wave * 0.16;
371
- const ringPhase = frame % 60 / 60;
372
- const ringScale = 1 + ringPhase * 1.6;
373
- const ringOpacity = (1 - ringPhase) * 0.6;
374
- return /* @__PURE__ */ jsxs(
375
- "div",
376
- {
377
- style: {
378
- display: "flex",
379
- alignItems: "center",
380
- gap: 12,
381
- padding: "10px 18px 10px 14px",
382
- borderRadius: 999,
383
- background: `${color}1a`,
384
- border: `1px solid ${color}55`,
385
- color,
386
- fontSize: 16,
387
- fontWeight: 600,
388
- letterSpacing: "0.02em"
389
- },
390
- children: [
391
- /* @__PURE__ */ jsxs("div", { style: { position: "relative", width: 12, height: 12 }, children: [
392
- /* @__PURE__ */ jsx(
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
- }
403
- }
404
- ),
405
- /* @__PURE__ */ jsx(
406
- "div",
407
- {
408
- style: {
409
- position: "absolute",
410
- inset: 0,
411
- borderRadius: "50%",
412
- background: color,
413
- transform: `scale(${dotScale})`
414
- }
415
- }
416
- )
417
- ] }),
418
- label
419
- ]
420
- }
421
- );
422
- }
423
-
424
- // src/scenes/live-code-compilation/index.tsx
425
- import { useCurrentFrame as useCurrentFrame2 } from "remotion";
426
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
427
- var FONT_FAMILY2 = "inherit";
428
- var MONO_FAMILY2 = "monospace";
429
- var EVENTS = [
430
- {
431
- code: "export function Button() {\n return (\n <button",
432
- ui: {}
433
- },
434
- { code: "\n style={{", ui: {} },
435
- {
436
- code: '\n background: "#7b93b0",',
437
- ui: { background: "#7b93b0" }
438
- },
439
- {
440
- code: '\n color: "white",',
441
- ui: { color: "white" }
442
- },
443
- {
444
- code: '\n padding: "12px 28px",',
445
- ui: { padding: "12px 28px" }
446
- },
447
- {
448
- code: '\n borderRadius: "999px",',
449
- ui: { borderRadius: "999px" }
450
- },
451
- {
452
- code: "\n fontWeight: 600,",
453
- ui: { fontWeight: 600 }
454
- },
455
- {
456
- code: "\n }}\n >\n Ship it\n </button>\n );\n}",
457
- ui: { label: "Ship it" }
458
- }
459
- ];
460
- var CHARS_PER_FRAME = 1.6;
461
- var DWELL_FRAMES = 5;
462
- var INITIAL_OFFSET = 8;
463
- var TIMELINE = (() => {
464
- let cursor = INITIAL_OFFSET;
465
- return EVENTS.map((ev) => {
466
- const start = cursor;
467
- const end = start + Math.ceil(ev.code.length / CHARS_PER_FRAME);
468
- cursor = end + DWELL_FRAMES;
469
- return { ...ev, start, end };
470
- });
471
- })();
472
- var TIMELINE_END = TIMELINE[TIMELINE.length - 1].end;
473
- function highlightLine(line, accentColor) {
474
- const tokens = [];
475
- const regex = /(\bexport\b|\bfunction\b|\breturn\b)|("[^"]*")|(\b[a-zA-Z_][a-zA-Z0-9_]*)(?=:)|(\{|\}|\(|\)|<|>|\/)|([0-9]+)/g;
476
- let lastIndex = 0;
477
- let m = regex.exec(line);
478
- while (m !== null) {
479
- if (m.index > lastIndex) {
480
- tokens.push({
481
- text: line.slice(lastIndex, m.index),
482
- color: SYN_TEXT
483
- });
484
- }
485
- if (m[1]) tokens.push({ text: m[1], color: SYN_KEYWORD });
486
- else if (m[2]) tokens.push({ text: m[2], color: SYN_STRING });
487
- else if (m[3]) tokens.push({ text: m[3], color: accentColor });
488
- else if (m[4]) tokens.push({ text: m[4], color: SYN_COMMENT });
489
- else if (m[5]) tokens.push({ text: m[5], color: SYN_NUMBER });
490
- lastIndex = regex.lastIndex;
491
- m = regex.exec(line);
492
- }
493
- if (lastIndex < line.length) {
494
- tokens.push({ text: line.slice(lastIndex), color: SYN_TEXT });
495
- }
496
- return tokens;
497
- }
498
- function LiveCodeCompilation({
499
- accentColor = "#7b93b0",
500
- speed = 1,
501
- className
502
- }) {
503
- const frame = useCurrentFrame2() * speed;
504
- let visibleCode = "";
505
- const ui = {};
506
- for (const t of TIMELINE) {
507
- if (frame < t.start) break;
508
- const elapsed = frame - t.start;
509
- const charsTyped = Math.min(
510
- t.code.length,
511
- Math.floor(elapsed * CHARS_PER_FRAME)
512
- );
513
- visibleCode += t.code.slice(0, charsTyped);
514
- if (frame >= t.end) Object.assign(ui, t.ui);
515
- }
516
- const lines = visibleCode.split("\n");
517
- const buttonLabel = ui.label ?? "Button";
518
- const cursorVisible = frame < TIMELINE_END && Math.floor(frame / 12) % 2 === 0;
519
- const lastLineIndex = lines.length - 1;
520
- return /* @__PURE__ */ jsxs2(
521
- "div",
522
- {
523
- className,
524
- style: {
525
- position: "absolute",
526
- inset: 0,
527
- background: BG,
528
- overflow: "hidden",
529
- fontFamily: FONT_FAMILY2,
530
- display: "flex"
531
- },
532
- children: [
533
- /* @__PURE__ */ jsx2(
534
- "div",
535
- {
536
- style: {
537
- position: "absolute",
538
- inset: 0,
539
- background: `radial-gradient(ellipse at 20% 30%, ${BLUE}14, transparent 60%), radial-gradient(ellipse at 80% 70%, ${VIOLET}0f, transparent 60%)`
540
- }
541
- }
542
- ),
543
- /* @__PURE__ */ jsx2(
544
- "div",
545
- {
546
- style: {
547
- flex: 1,
548
- display: "flex",
549
- alignItems: "center",
550
- justifyContent: "center",
551
- padding: 48,
552
- position: "relative"
553
- },
554
- children: /* @__PURE__ */ jsx2(
555
- "div",
556
- {
557
- style: {
558
- width: "100%",
559
- maxWidth: 560,
560
- position: "relative",
561
- borderRadius: 14,
562
- padding: 1,
563
- background: "linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.02) 50%, rgba(255,255,255,0.06) 100%)"
564
- },
565
- children: /* @__PURE__ */ jsxs2(
566
- "div",
567
- {
568
- style: {
569
- borderRadius: 13,
570
- background: "rgba(12,12,14,0.85)",
571
- backdropFilter: "blur(20px)",
572
- overflow: "hidden"
573
- },
574
- children: [
575
- /* @__PURE__ */ jsxs2(
576
- "div",
577
- {
578
- style: {
579
- height: 38,
580
- display: "flex",
581
- alignItems: "center",
582
- padding: "0 16px",
583
- borderBottom: "1px solid rgba(255,255,255,0.06)",
584
- gap: 8
585
- },
586
- children: [
587
- /* @__PURE__ */ jsx2(
588
- "div",
589
- {
590
- style: {
591
- width: 11,
592
- height: 11,
593
- borderRadius: 6,
594
- background: "#ff5f57",
595
- opacity: 0.6
596
- }
597
- }
598
- ),
599
- /* @__PURE__ */ jsx2(
600
- "div",
601
- {
602
- style: {
603
- width: 11,
604
- height: 11,
605
- borderRadius: 6,
606
- background: "#febc2e",
607
- opacity: 0.6
608
- }
609
- }
610
- ),
611
- /* @__PURE__ */ jsx2(
612
- "div",
613
- {
614
- style: {
615
- width: 11,
616
- height: 11,
617
- borderRadius: 6,
618
- background: "#28c840",
619
- opacity: 0.6
620
- }
621
- }
622
- ),
623
- /* @__PURE__ */ jsx2(
624
- "div",
625
- {
626
- style: {
627
- marginLeft: 12,
628
- fontSize: 12,
629
- color: "rgba(255,255,255,0.45)",
630
- fontFamily: MONO_FAMILY2
631
- },
632
- children: "Button.tsx"
633
- }
634
- )
635
- ]
636
- }
637
- ),
638
- /* @__PURE__ */ jsx2(
639
- "div",
640
- {
641
- style: {
642
- padding: "20px 22px",
643
- fontFamily: MONO_FAMILY2,
644
- fontSize: 14,
645
- lineHeight: 1.65,
646
- color: SYN_TEXT,
647
- minHeight: 360
648
- },
649
- children: lines.map((line, i) => {
650
- const tokens = highlightLine(line, accentColor);
651
- const isLast = i === lastLineIndex;
652
- return /* @__PURE__ */ jsxs2("div", { style: { display: "flex", whiteSpace: "pre" }, children: [
653
- /* @__PURE__ */ jsx2(
654
- "span",
655
- {
656
- style: {
657
- width: 28,
658
- color: "rgba(255,255,255,0.2)",
659
- userSelect: "none",
660
- flexShrink: 0
661
- },
662
- children: i + 1
663
- }
664
- ),
665
- /* @__PURE__ */ jsxs2("span", { children: [
666
- tokens.length === 0 ? /* @__PURE__ */ jsx2("span", { children: " " }) : tokens.map((t, j) => /* @__PURE__ */ jsx2("span", { style: { color: t.color }, children: t.text }, j)),
667
- isLast && cursorVisible && /* @__PURE__ */ jsx2(
668
- "span",
669
- {
670
- style: {
671
- display: "inline-block",
672
- width: 8,
673
- height: 16,
674
- marginLeft: 1,
675
- verticalAlign: "text-bottom",
676
- background: accentColor
677
- }
678
- }
679
- )
680
- ] })
681
- ] }, i);
682
- })
683
- }
684
- )
685
- ]
686
- }
687
- )
688
- }
689
- )
690
- }
691
- ),
692
- /* @__PURE__ */ jsxs2(
693
- "div",
694
- {
695
- style: {
696
- flex: 1,
697
- position: "relative",
698
- display: "flex",
699
- alignItems: "center",
700
- justifyContent: "center",
701
- borderLeft: "1px solid rgba(255,255,255,0.05)",
702
- background: "repeating-conic-gradient(rgba(255,255,255,0.018) 0deg 90deg, transparent 90deg 180deg) 0 0 / 28px 28px"
703
- },
704
- children: [
705
- /* @__PURE__ */ jsxs2(
706
- "div",
707
- {
708
- style: {
709
- position: "absolute",
710
- top: 24,
711
- left: 24,
712
- display: "flex",
713
- alignItems: "center",
714
- gap: 8
715
- },
716
- children: [
717
- /* @__PURE__ */ jsx2(
718
- "div",
719
- {
720
- style: {
721
- width: 8,
722
- height: 8,
723
- borderRadius: 4,
724
- background: SUCCESS
725
- }
726
- }
727
- ),
728
- /* @__PURE__ */ jsx2(
729
- "div",
730
- {
731
- style: {
732
- fontSize: 11,
733
- fontFamily: MONO_FAMILY2,
734
- color: "rgba(255,255,255,0.5)",
735
- textTransform: "uppercase",
736
- letterSpacing: "0.08em"
737
- },
738
- children: "Preview \xB7 HMR"
739
- }
740
- )
741
- ]
742
- }
743
- ),
744
- /* @__PURE__ */ jsx2(
745
- "button",
746
- {
747
- type: "button",
748
- style: {
749
- background: ui.background ?? "rgba(255,255,255,0.06)",
750
- color: ui.color ?? "rgba(255,255,255,0.4)",
751
- padding: ui.padding ?? "10px 20px",
752
- borderRadius: ui.borderRadius ?? "4px",
753
- fontWeight: ui.fontWeight ?? 400,
754
- fontSize: 18,
755
- fontFamily: FONT_FAMILY2,
756
- border: ui.background ? "none" : "1px dashed rgba(255,255,255,0.15)",
757
- cursor: "pointer",
758
- transition: "none"
759
- },
760
- children: buttonLabel
761
- }
762
- )
763
- ]
764
- }
765
- )
766
- ]
767
- }
768
- );
769
- }
770
-
771
- // src/scenes/product-launch-trailer/index.tsx
772
- import {
773
- AbsoluteFill as AbsoluteFill2,
774
- Easing as Easing2,
775
- interpolate as interpolate2,
776
- random,
777
- Sequence,
778
- spring as spring2,
779
- useCurrentFrame as useCurrentFrame3,
780
- useVideoConfig as useVideoConfig2
781
- } from "remotion";
782
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
783
- var FONT_FAMILY3 = "inherit";
784
- var MONO_FAMILY3 = "monospace";
785
- var SOFT2 = Easing2.bezier(0.16, 1, 0.3, 1);
786
- var T = {
787
- pulseStart: 0,
788
- pulseEnd: 50,
789
- zoomStart: 38,
790
- zoomEnd: 78,
791
- shellStart: 70,
792
- flyStart: 110,
793
- flyEnd: 200,
794
- outroStart: 190,
795
- outroEnd: 240
796
- };
797
- function ProductLaunchTrailer({
798
- logoLabel = "R",
799
- productName = "Remocn",
800
- versionLabel = "v1.0 is live",
801
- accentPeach = ACCENT_SOFT,
802
- accentLavender = VIOLET,
803
- accentMint = SUCCESS,
804
- background = BG,
805
- speed = 1,
806
- className
807
- }) {
808
- return /* @__PURE__ */ jsxs3(AbsoluteFill2, { className, style: { background }, children: [
809
- /* @__PURE__ */ jsx3(Sequence, { from: T.pulseStart, durationInFrames: T.zoomEnd - T.pulseStart, children: /* @__PURE__ */ jsx3(
810
- PulseLogo,
811
- {
812
- label: logoLabel,
813
- name: productName,
814
- accentLavender,
815
- background,
816
- speed
817
- }
818
- ) }),
819
- /* @__PURE__ */ jsx3(Sequence, { from: T.shellStart, durationInFrames: T.outroEnd - T.shellStart, children: /* @__PURE__ */ jsx3(
820
- AppShellFlyover,
821
- {
822
- accentPeach,
823
- accentLavender,
824
- accentMint,
825
- background,
826
- speed,
827
- flyStartLocal: T.flyStart - T.shellStart,
828
- flyEndLocal: T.flyEnd - T.shellStart,
829
- outroStartLocal: T.outroStart - T.shellStart
830
- }
831
- ) }),
832
- /* @__PURE__ */ jsx3(
833
- Sequence,
834
- {
835
- from: T.outroStart,
836
- durationInFrames: T.outroEnd - T.outroStart + 1,
837
- children: /* @__PURE__ */ jsx3(
838
- Outro,
839
- {
840
- versionLabel,
841
- accentMint,
842
- accentPeach,
843
- accentLavender,
844
- speed
845
- }
846
- )
847
- }
848
- )
849
- ] });
850
- }
851
- function PulseLogo({
852
- label,
853
- name,
854
- accentLavender,
855
- background,
856
- speed
857
- }) {
858
- const frame = useCurrentFrame3() * speed;
859
- const localDuration = T.zoomEnd - T.pulseStart;
860
- const pulse = (Math.sin(frame / 6) + 1) / 2;
861
- const zoomLocal = Math.max(0, frame - (T.zoomStart - T.pulseStart));
862
- const zoomDuration = T.zoomEnd - T.zoomStart;
863
- const zoom = interpolate2(zoomLocal, [0, zoomDuration], [1, 14], {
864
- extrapolateLeft: "clamp",
865
- extrapolateRight: "clamp",
866
- easing: Easing2.bezier(0.7, 0, 0.84, 0)
867
- });
868
- const fade = interpolate2(zoomLocal, [zoomDuration * 0.5, zoomDuration], [1, 0], {
869
- extrapolateLeft: "clamp",
870
- extrapolateRight: "clamp"
871
- });
872
- const baseScale = 0.96 + pulse * 0.04;
873
- const glowAlpha = 0.35 + pulse * 0.4;
874
- const labelOpacity = interpolate2(frame, [4, 18], [0, 1], {
875
- extrapolateLeft: "clamp",
876
- extrapolateRight: "clamp"
877
- });
878
- return /* @__PURE__ */ jsxs3(
879
- AbsoluteFill2,
880
- {
881
- style: {
882
- // Exposure lift — the scene graded ~1.5 stops under launch-video norm.
883
- filter: "brightness(1.28) contrast(1.03)",
884
- background,
885
- display: "flex",
886
- alignItems: "center",
887
- justifyContent: "center"
888
- },
889
- children: [
890
- /* @__PURE__ */ jsxs3(
891
- "div",
892
- {
893
- style: {
894
- transform: `scale(${zoom * baseScale})`,
895
- opacity: fade,
896
- willChange: "transform, opacity",
897
- display: "flex",
898
- flexDirection: "column",
899
- alignItems: "center",
900
- gap: 28
901
- },
902
- children: [
903
- /* @__PURE__ */ jsx3(
904
- "div",
905
- {
906
- style: {
907
- width: 200,
908
- height: 200,
909
- borderRadius: 56,
910
- background: "linear-gradient(160deg, rgba(255,255,255,0.10) 0%, rgba(255,255,255,0.02) 100%)",
911
- border: `1px solid ${accentLavender}55`,
912
- boxShadow: `0 0 ${60 + pulse * 80}px ${accentLavender}${toHex(
913
- glowAlpha
914
- )}, inset 0 1px 0 rgba(255,255,255,0.12)`,
915
- display: "flex",
916
- alignItems: "center",
917
- justifyContent: "center",
918
- color: "white",
919
- fontFamily: FONT_FAMILY3,
920
- fontSize: 112,
921
- fontWeight: 700,
922
- letterSpacing: "-0.06em"
923
- },
924
- children: label
925
- }
926
- ),
927
- /* @__PURE__ */ jsx3(
928
- "div",
929
- {
930
- style: {
931
- opacity: labelOpacity,
932
- color: "rgba(255,255,255,0.92)",
933
- fontFamily: FONT_FAMILY3,
934
- fontSize: 28,
935
- fontWeight: 500,
936
- letterSpacing: "0.02em"
937
- },
938
- children: name
939
- }
940
- )
941
- ]
942
- }
943
- ),
944
- /* @__PURE__ */ jsx3("span", { style: { display: "none" }, children: localDuration })
945
- ]
946
- }
947
- );
948
- }
949
- function AppShellFlyover({
950
- accentPeach,
951
- accentLavender,
952
- accentMint,
953
- background,
954
- speed,
955
- flyStartLocal,
956
- flyEndLocal,
957
- outroStartLocal
958
- }) {
959
- const frame = useCurrentFrame3() * speed;
960
- const enter = interpolate2(frame, [0, 14], [0, 1], {
961
- extrapolateLeft: "clamp",
962
- extrapolateRight: "clamp",
963
- easing: SOFT2
964
- });
965
- const flyT = interpolate2(frame, [flyStartLocal, flyEndLocal], [0, 1], {
966
- extrapolateLeft: "clamp",
967
- extrapolateRight: "clamp",
968
- easing: SOFT2
969
- });
970
- const outroT = interpolate2(
971
- frame,
972
- [outroStartLocal, outroStartLocal + 30],
973
- [0, 1],
974
- {
975
- extrapolateLeft: "clamp",
976
- extrapolateRight: "clamp",
977
- easing: SOFT2
978
- }
979
- );
980
- const rx = interpolate2(flyT, [0, 1], [0, -8]) * (1 - outroT);
981
- const ry = interpolate2(flyT, [0, 1], [-6, 6]) * (1 - outroT);
982
- const tz = interpolate2(flyT, [0, 1], [-220, 80]) * (1 - outroT) + outroT * -360;
983
- const scaleBoost = interpolate2(flyT, [0, 1], [0.92, 1.04]) * (1 - outroT) + outroT * 0.84;
984
- const shadowBlur = Math.max(20, 28 + tz * 0.4);
985
- const shadowOpacity = 0.35 + Math.max(0, tz / 180) * 0.35;
986
- return /* @__PURE__ */ jsx3(
987
- AbsoluteFill2,
988
- {
989
- style: {
990
- // Exposure lift — the scene graded ~1.5 stops under launch-video norm.
991
- filter: "brightness(1.28) contrast(1.03)",
992
- background,
993
- opacity: enter,
994
- perspective: 2e3,
995
- perspectiveOrigin: "50% 45%"
996
- },
997
- children: /* @__PURE__ */ jsxs3(
998
- "div",
999
- {
1000
- style: {
1001
- position: "absolute",
1002
- inset: 0,
1003
- transformStyle: "preserve-3d",
1004
- transform: `rotateX(${rx}deg) rotateY(${ry}deg) translateZ(${tz}px) scale(${scaleBoost})`,
1005
- willChange: "transform"
1006
- },
1007
- children: [
1008
- /* @__PURE__ */ jsx3(
1009
- "div",
1010
- {
1011
- style: {
1012
- position: "absolute",
1013
- inset: 40,
1014
- borderRadius: 24,
1015
- border: `1px solid ${accentLavender}1f`,
1016
- background: "linear-gradient(180deg, rgba(255,255,255,0.02) 0%, rgba(255,255,255,0) 100%)"
1017
- }
1018
- }
1019
- ),
1020
- /* @__PURE__ */ jsx3(
1021
- "div",
1022
- {
1023
- style: {
1024
- position: "absolute",
1025
- left: 80,
1026
- top: 110,
1027
- width: 520,
1028
- height: 500,
1029
- transform: "translateZ(20px)",
1030
- filter: `drop-shadow(0 22px ${shadowBlur}px ${accentLavender}${toHex(
1031
- shadowOpacity
1032
- )})`
1033
- },
1034
- children: /* @__PURE__ */ jsx3(FauxCodeBlock, { accentLavender, accentMint })
1035
- }
1036
- ),
1037
- /* @__PURE__ */ jsx3(
1038
- "div",
1039
- {
1040
- style: {
1041
- position: "absolute",
1042
- right: 80,
1043
- top: 110,
1044
- width: 540,
1045
- height: 500,
1046
- transform: "translateZ(40px)",
1047
- filter: `drop-shadow(0 22px ${shadowBlur}px ${accentPeach}${toHex(
1048
- shadowOpacity
1049
- )})`
1050
- },
1051
- children: /* @__PURE__ */ jsx3(
1052
- FauxBentoGrid,
1053
- {
1054
- accentPeach,
1055
- accentLavender,
1056
- accentMint,
1057
- speed
1058
- }
1059
- )
1060
- }
1061
- )
1062
- ]
1063
- }
1064
- )
1065
- }
1066
- );
1067
- }
1068
- function FauxCodeBlock({
1069
- accentLavender,
1070
- accentMint
1071
- }) {
1072
- const frame = useCurrentFrame3();
1073
- const lines = [
1074
- { t: "import { Trailer } from 'remocn'", c: SYN_KEYWORD },
1075
- { t: "", c: "" },
1076
- { t: "export const Scene = () => (", c: SYN_TEXT },
1077
- { t: " <Trailer", c: SYN_TEXT },
1078
- { t: ` label="v1.0"`, c: SYN_STRING },
1079
- { t: ` accent="lavender"`, c: SYN_NUMBER },
1080
- { t: " />", c: SYN_TEXT },
1081
- { t: ")", c: SYN_TEXT }
1082
- ];
1083
- return /* @__PURE__ */ jsxs3(
1084
- "div",
1085
- {
1086
- style: {
1087
- position: "absolute",
1088
- inset: 0,
1089
- borderRadius: 20,
1090
- background: "rgba(20,19,24,0.78)",
1091
- backdropFilter: "blur(18px)",
1092
- WebkitBackdropFilter: "blur(18px)",
1093
- border: `1px solid ${accentLavender}33`,
1094
- overflow: "hidden",
1095
- fontFamily: MONO_FAMILY3
1096
- },
1097
- children: [
1098
- /* @__PURE__ */ jsxs3(
1099
- "div",
1100
- {
1101
- style: {
1102
- height: 38,
1103
- display: "flex",
1104
- alignItems: "center",
1105
- gap: 8,
1106
- padding: "0 16px",
1107
- borderBottom: "1px solid rgba(255,255,255,0.06)"
1108
- },
1109
- children: [
1110
- [ACCENT_SOFT, WARNING, accentMint].map((c) => /* @__PURE__ */ jsx3(
1111
- "div",
1112
- {
1113
- style: {
1114
- width: 10,
1115
- height: 10,
1116
- borderRadius: "50%",
1117
- background: c,
1118
- opacity: 0.85
1119
- }
1120
- },
1121
- c
1122
- )),
1123
- /* @__PURE__ */ jsx3(
1124
- "span",
1125
- {
1126
- style: {
1127
- marginLeft: 12,
1128
- color: "rgba(255,255,255,0.45)",
1129
- fontSize: 12
1130
- },
1131
- children: "scene.tsx"
1132
- }
1133
- )
1134
- ]
1135
- }
1136
- ),
1137
- /* @__PURE__ */ jsx3("div", { style: { padding: "20px 22px", display: "flex", flexDirection: "column", gap: 6 }, children: lines.map((line, i) => {
1138
- const local = frame - 14 - i * 5;
1139
- const o = interpolate2(local, [0, 10], [0, 1], {
1140
- extrapolateLeft: "clamp",
1141
- extrapolateRight: "clamp"
1142
- });
1143
- const x = interpolate2(local, [0, 10], [12, 0], {
1144
- extrapolateLeft: "clamp",
1145
- extrapolateRight: "clamp"
1146
- });
1147
- return /* @__PURE__ */ jsxs3(
1148
- "div",
1149
- {
1150
- style: {
1151
- display: "flex",
1152
- gap: 14,
1153
- opacity: o,
1154
- transform: `translateX(${x}px)`,
1155
- fontSize: 15,
1156
- lineHeight: "22px"
1157
- },
1158
- children: [
1159
- /* @__PURE__ */ jsx3("span", { style: { color: BORDER_STRONG, width: 18, textAlign: "right" }, children: i + 1 }),
1160
- /* @__PURE__ */ jsx3("span", { style: { color: line.c || SYN_TEXT, whiteSpace: "pre" }, children: line.t || " " })
1161
- ]
1162
- },
1163
- i
1164
- );
1165
- }) })
1166
- ]
1167
- }
1168
- );
1169
- }
1170
- function FauxBentoGrid({
1171
- accentPeach,
1172
- accentLavender,
1173
- accentMint,
1174
- speed
1175
- }) {
1176
- const frame = useCurrentFrame3() * speed;
1177
- const { fps } = useVideoConfig2();
1178
- const cards = [
1179
- { title: "Animations", body: "Spring-tuned", tint: accentLavender, span: 2 },
1180
- { title: "Transitions", body: "Cinematic", tint: accentPeach, span: 1 },
1181
- { title: "Backgrounds", body: "Volumetric", tint: accentMint, span: 1 },
1182
- { title: "Compositions", body: "Production-ready", tint: accentLavender, span: 2 }
1183
- ];
1184
- return /* @__PURE__ */ jsx3(
1185
- "div",
1186
- {
1187
- style: {
1188
- position: "absolute",
1189
- inset: 0,
1190
- display: "grid",
1191
- gridTemplateColumns: "1fr 1fr",
1192
- gap: 16
1193
- },
1194
- children: cards.map((c, i) => {
1195
- const progress = spring2({
1196
- frame: frame - 30 - i * 8,
1197
- fps,
1198
- config: { damping: 14, stiffness: 110, mass: 0.7 },
1199
- durationInFrames: 28
1200
- });
1201
- return /* @__PURE__ */ jsxs3(
1202
- "div",
1203
- {
1204
- style: {
1205
- gridColumn: c.span === 2 ? "span 2" : "span 1",
1206
- minHeight: 110,
1207
- padding: 22,
1208
- borderRadius: 18,
1209
- background: "linear-gradient(160deg, rgba(255,255,255,0.06) 0%, rgba(255,255,255,0.02) 100%)",
1210
- border: `1px solid ${c.tint}33`,
1211
- opacity: progress,
1212
- transform: `translateY(${(1 - progress) * 18}px) scale(${0.92 + progress * 0.08})`,
1213
- transformOrigin: "center",
1214
- willChange: "transform, opacity",
1215
- display: "flex",
1216
- flexDirection: "column",
1217
- justifyContent: "flex-end"
1218
- },
1219
- children: [
1220
- /* @__PURE__ */ jsx3(
1221
- "div",
1222
- {
1223
- style: {
1224
- color: TEXT_HI,
1225
- fontFamily: FONT_FAMILY3,
1226
- fontSize: 22,
1227
- fontWeight: 600,
1228
- letterSpacing: "-0.02em"
1229
- },
1230
- children: c.title
1231
- }
1232
- ),
1233
- /* @__PURE__ */ jsx3(
1234
- "div",
1235
- {
1236
- style: {
1237
- color: `${c.tint}cc`,
1238
- fontFamily: FONT_FAMILY3,
1239
- fontSize: 13,
1240
- marginTop: 2
1241
- },
1242
- children: c.body
1243
- }
1244
- )
1245
- ]
1246
- },
1247
- c.title
1248
- );
1249
- })
1250
- }
1251
- );
1252
- }
1253
- function Outro({
1254
- versionLabel,
1255
- accentMint,
1256
- accentPeach,
1257
- accentLavender,
1258
- speed
1259
- }) {
1260
- const frame = useCurrentFrame3() * speed;
1261
- const { fps } = useVideoConfig2();
1262
- const drop = spring2({
1263
- frame: frame - 6,
1264
- fps,
1265
- config: { damping: 14, stiffness: 110, mass: 0.7 },
1266
- durationInFrames: 28
1267
- });
1268
- const headingY = interpolate2(drop, [0, 1], [-40, 0]);
1269
- const headingOpacity = interpolate2(drop, [0, 1], [0, 1]);
1270
- const particles = Array.from({ length: 70 }, (_, i) => {
1271
- const angle = random(`pl:${i}:a`) * Math.PI * 2;
1272
- const v = 9 + random(`pl:${i}:v`) * 9;
1273
- const sz = 5 + random(`pl:${i}:s`) * 7;
1274
- const f = Math.max(0, frame - 14 - Math.floor(random(`pl:${i}:d`) * 6));
1275
- const cx = 640 + Math.cos(angle) * v * f;
1276
- const cy = 280 + Math.sin(angle) * v * f + 0.4 * f * f;
1277
- const colors = [accentMint, accentPeach, accentLavender, WARNING];
1278
- const color = colors[Math.floor(random(`pl:${i}:c`) * colors.length)];
1279
- const opacity = interpolate2(f, [0, 4, 38, 50], [0, 1, 1, 0], {
1280
- extrapolateLeft: "clamp",
1281
- extrapolateRight: "clamp"
1282
- });
1283
- return { cx, cy, sz, color, opacity, key: i };
1284
- });
1285
- return /* @__PURE__ */ jsxs3(AbsoluteFill2, { style: { pointerEvents: "none" }, children: [
1286
- /* @__PURE__ */ jsx3(
1287
- "svg",
1288
- {
1289
- width: 1280,
1290
- height: 720,
1291
- viewBox: "0 0 1280 720",
1292
- style: { position: "absolute", inset: 0 },
1293
- children: particles.map((p) => /* @__PURE__ */ jsx3(
1294
- "rect",
1295
- {
1296
- x: p.cx - p.sz / 2,
1297
- y: p.cy - p.sz / 2,
1298
- width: p.sz,
1299
- height: p.sz * 0.55,
1300
- rx: 1,
1301
- fill: p.color,
1302
- opacity: p.opacity
1303
- },
1304
- p.key
1305
- ))
1306
- }
1307
- ),
1308
- /* @__PURE__ */ jsx3(
1309
- "div",
1310
- {
1311
- style: {
1312
- position: "absolute",
1313
- left: 0,
1314
- right: 0,
1315
- top: 240,
1316
- textAlign: "center",
1317
- transform: `translateY(${headingY}px)`,
1318
- opacity: headingOpacity,
1319
- willChange: "transform, opacity"
1320
- },
1321
- children: /* @__PURE__ */ jsx3(
1322
- "div",
1323
- {
1324
- style: {
1325
- fontFamily: FONT_FAMILY3,
1326
- fontSize: 96,
1327
- fontWeight: 700,
1328
- letterSpacing: "-0.04em",
1329
- color: TEXT_HI
1330
- },
1331
- children: versionLabel
1332
- }
1333
- )
1334
- }
1335
- )
1336
- ] });
1337
- }
1338
- function toHex(alpha) {
1339
- const clamped = Math.max(0, Math.min(1, alpha));
1340
- return Math.round(clamped * 255).toString(16).padStart(2, "0");
1341
- }
1342
-
1343
- // src/scenes/hero-device-assemble/index.tsx
1344
- import { interpolate as interpolate3, spring as spring3, useCurrentFrame as useCurrentFrame4, useVideoConfig as useVideoConfig3 } from "remotion";
1345
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1346
- var FONT_FAMILY4 = "inherit";
1347
- function MockUI({ accentColor }) {
1348
- return /* @__PURE__ */ jsxs4(
1349
- "div",
1350
- {
1351
- style: {
1352
- position: "absolute",
1353
- inset: 0,
1354
- display: "flex",
1355
- flexDirection: "column",
1356
- background: BG,
1357
- fontFamily: FONT_FAMILY4,
1358
- color: "white",
1359
- overflow: "hidden"
1360
- },
1361
- children: [
1362
- /* @__PURE__ */ jsxs4(
1363
- "div",
1364
- {
1365
- style: {
1366
- height: "10%",
1367
- background: SURFACE,
1368
- borderBottom: "1px solid rgba(255,255,255,0.06)",
1369
- display: "flex",
1370
- alignItems: "center",
1371
- padding: "0 16px",
1372
- gap: 8
1373
- },
1374
- children: [
1375
- /* @__PURE__ */ jsx4(
1376
- "div",
1377
- {
1378
- style: {
1379
- width: 10,
1380
- height: 10,
1381
- borderRadius: "50%",
1382
- background: "rgba(255,255,255,0.18)"
1383
- }
1384
- }
1385
- ),
1386
- /* @__PURE__ */ jsx4(
1387
- "div",
1388
- {
1389
- style: {
1390
- width: 10,
1391
- height: 10,
1392
- borderRadius: "50%",
1393
- background: "rgba(255,255,255,0.18)"
1394
- }
1395
- }
1396
- ),
1397
- /* @__PURE__ */ jsx4(
1398
- "div",
1399
- {
1400
- style: {
1401
- width: 10,
1402
- height: 10,
1403
- borderRadius: "50%",
1404
- background: "rgba(255,255,255,0.18)"
1405
- }
1406
- }
1407
- )
1408
- ]
1409
- }
1410
- ),
1411
- /* @__PURE__ */ jsxs4("div", { style: { flex: 1, display: "flex" }, children: [
1412
- /* @__PURE__ */ jsxs4(
1413
- "div",
1414
- {
1415
- style: {
1416
- width: "22%",
1417
- background: BG,
1418
- borderRight: "1px solid rgba(255,255,255,0.05)",
1419
- padding: 16,
1420
- display: "flex",
1421
- flexDirection: "column",
1422
- gap: 10
1423
- },
1424
- children: [
1425
- /* @__PURE__ */ jsx4(
1426
- "div",
1427
- {
1428
- style: {
1429
- height: 12,
1430
- borderRadius: 4,
1431
- background: accentColor,
1432
- opacity: 0.85,
1433
- width: "70%"
1434
- }
1435
- }
1436
- ),
1437
- /* @__PURE__ */ jsx4(
1438
- "div",
1439
- {
1440
- style: {
1441
- height: 10,
1442
- borderRadius: 4,
1443
- background: "rgba(255,255,255,0.1)",
1444
- width: "85%"
1445
- }
1446
- }
1447
- ),
1448
- /* @__PURE__ */ jsx4(
1449
- "div",
1450
- {
1451
- style: {
1452
- height: 10,
1453
- borderRadius: 4,
1454
- background: "rgba(255,255,255,0.08)",
1455
- width: "60%"
1456
- }
1457
- }
1458
- ),
1459
- /* @__PURE__ */ jsx4(
1460
- "div",
1461
- {
1462
- style: {
1463
- height: 10,
1464
- borderRadius: 4,
1465
- background: "rgba(255,255,255,0.08)",
1466
- width: "75%"
1467
- }
1468
- }
1469
- )
1470
- ]
1471
- }
1472
- ),
1473
- /* @__PURE__ */ jsxs4(
1474
- "div",
1475
- {
1476
- style: {
1477
- flex: 1,
1478
- padding: 24,
1479
- display: "flex",
1480
- flexDirection: "column",
1481
- gap: 16
1482
- },
1483
- children: [
1484
- /* @__PURE__ */ jsx4(
1485
- "div",
1486
- {
1487
- style: {
1488
- height: 18,
1489
- width: "40%",
1490
- background: "rgba(255,255,255,0.85)",
1491
- borderRadius: 4
1492
- }
1493
- }
1494
- ),
1495
- /* @__PURE__ */ jsx4(
1496
- "div",
1497
- {
1498
- style: {
1499
- height: 10,
1500
- width: "65%",
1501
- background: "rgba(255,255,255,0.18)",
1502
- borderRadius: 4
1503
- }
1504
- }
1505
- ),
1506
- /* @__PURE__ */ jsxs4(
1507
- "div",
1508
- {
1509
- style: {
1510
- display: "grid",
1511
- gridTemplateColumns: "1fr 1fr 1fr",
1512
- gap: 12,
1513
- marginTop: 12
1514
- },
1515
- children: [
1516
- /* @__PURE__ */ jsx4(
1517
- "div",
1518
- {
1519
- style: {
1520
- height: 90,
1521
- borderRadius: 8,
1522
- background: "linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02))",
1523
- border: "1px solid rgba(255,255,255,0.06)"
1524
- }
1525
- }
1526
- ),
1527
- /* @__PURE__ */ jsx4(
1528
- "div",
1529
- {
1530
- style: {
1531
- height: 90,
1532
- borderRadius: 8,
1533
- background: `linear-gradient(180deg, ${accentColor}33, ${accentColor}11)`,
1534
- border: `1px solid ${accentColor}55`
1535
- }
1536
- }
1537
- ),
1538
- /* @__PURE__ */ jsx4(
1539
- "div",
1540
- {
1541
- style: {
1542
- height: 90,
1543
- borderRadius: 8,
1544
- background: "linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02))",
1545
- border: "1px solid rgba(255,255,255,0.06)"
1546
- }
1547
- }
1548
- )
1549
- ]
1550
- }
1551
- ),
1552
- /* @__PURE__ */ jsx4(
1553
- "div",
1554
- {
1555
- style: {
1556
- flex: 1,
1557
- borderRadius: 8,
1558
- background: "linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01))",
1559
- border: "1px solid rgba(255,255,255,0.06)"
1560
- }
1561
- }
1562
- )
1563
- ]
1564
- }
1565
- )
1566
- ] })
1567
- ]
1568
- }
1569
- );
1570
- }
1571
- function HeroDeviceAssemble({
1572
- assembleStart = 0,
1573
- device = "laptop",
1574
- accentColor = SUCCESS,
1575
- speed = 1,
1576
- className
1577
- }) {
1578
- const frame = useCurrentFrame4() * speed;
1579
- const { fps } = useVideoConfig3();
1580
- const assemble = spring3({
1581
- frame: frame - assembleStart,
1582
- fps,
1583
- config: { mass: 1.4, damping: 12, stiffness: 90 },
1584
- durationInFrames: 60
1585
- });
1586
- const lidZ = interpolate3(assemble, [0, 1], [1e3, 0]);
1587
- const baseZ = interpolate3(assemble, [0, 1], [-800, 0]);
1588
- const bezelZ = interpolate3(assemble, [0, 1], [600, 0]);
1589
- const screenZ = interpolate3(assemble, [0, 1], [300, 0]);
1590
- const rotX = interpolate3(assemble, [0, 1], [-22, 0]);
1591
- const rotY = interpolate3(assemble, [0, 1], [28, 0]);
1592
- const layerOpacity = interpolate3(assemble, [0, 0.4], [0, 1], {
1593
- extrapolateLeft: "clamp",
1594
- extrapolateRight: "clamp"
1595
- });
1596
- const settleFrame = assembleStart + 45;
1597
- const screenWake = interpolate3(
1598
- frame,
1599
- [settleFrame, settleFrame + 18],
1600
- [0, 1],
1601
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
1602
- );
1603
- const shimmerProgress = interpolate3(
1604
- frame,
1605
- [settleFrame + 6, settleFrame + 30],
1606
- [-1, 2],
1607
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
1608
- );
1609
- const isPhone = device === "phone";
1610
- const deviceW = isPhone ? 320 : 760;
1611
- const deviceH = isPhone ? 640 : 470;
1612
- const screenInset = isPhone ? 12 : 18;
1613
- const bezelRadius = isPhone ? 36 : 14;
1614
- return /* @__PURE__ */ jsx4(
1615
- "div",
1616
- {
1617
- className,
1618
- style: {
1619
- position: "absolute",
1620
- inset: 0,
1621
- overflow: "hidden",
1622
- background: `radial-gradient(ellipse at center, ${SURFACE} 0%, ${BG_DEEP} 70%)`,
1623
- display: "flex",
1624
- alignItems: "center",
1625
- justifyContent: "center",
1626
- perspective: 2e3,
1627
- fontFamily: FONT_FAMILY4
1628
- },
1629
- children: /* @__PURE__ */ jsxs4(
1630
- "div",
1631
- {
1632
- style: {
1633
- position: "relative",
1634
- width: deviceW,
1635
- height: deviceH,
1636
- transformStyle: "preserve-3d",
1637
- transform: `rotateX(${rotX}deg) rotateY(${rotY}deg)`,
1638
- willChange: "transform"
1639
- },
1640
- children: [
1641
- /* @__PURE__ */ jsx4(
1642
- "div",
1643
- {
1644
- style: {
1645
- position: "absolute",
1646
- inset: 0,
1647
- transform: `translateZ(${lidZ - 8}px)`,
1648
- background: `linear-gradient(180deg, ${SURFACE_HI} 0%, ${BG} 100%)`,
1649
- borderRadius: bezelRadius + 4,
1650
- border: "1px solid rgba(255,255,255,0.08)",
1651
- opacity: layerOpacity
1652
- }
1653
- }
1654
- ),
1655
- !isPhone && /* @__PURE__ */ jsx4(
1656
- "div",
1657
- {
1658
- style: {
1659
- position: "absolute",
1660
- left: -40,
1661
- right: -40,
1662
- bottom: -28,
1663
- height: 28,
1664
- transform: `translateZ(${baseZ}px) rotateX(78deg)`,
1665
- transformOrigin: "top center",
1666
- background: `linear-gradient(180deg, ${SURFACE_HI} 0%, ${BG} 100%)`,
1667
- borderRadius: "0 0 12px 12px",
1668
- border: "1px solid rgba(255,255,255,0.06)",
1669
- opacity: layerOpacity
1670
- }
1671
- }
1672
- ),
1673
- /* @__PURE__ */ jsx4(
1674
- "div",
1675
- {
1676
- style: {
1677
- position: "absolute",
1678
- inset: 0,
1679
- transform: `translateZ(${bezelZ}px)`,
1680
- background: BG_DEEP,
1681
- borderRadius: bezelRadius,
1682
- border: "1px solid rgba(255,255,255,0.12)",
1683
- opacity: layerOpacity
1684
- }
1685
- }
1686
- ),
1687
- /* @__PURE__ */ jsxs4(
1688
- "div",
1689
- {
1690
- style: {
1691
- position: "absolute",
1692
- inset: screenInset,
1693
- transform: `translateZ(${screenZ}px)`,
1694
- borderRadius: bezelRadius - 6,
1695
- overflow: "hidden",
1696
- background: "black",
1697
- opacity: layerOpacity
1698
- },
1699
- children: [
1700
- /* @__PURE__ */ jsx4(
1701
- "div",
1702
- {
1703
- style: {
1704
- position: "absolute",
1705
- inset: 0,
1706
- background: "#000",
1707
- opacity: 1 - screenWake
1708
- }
1709
- }
1710
- ),
1711
- /* @__PURE__ */ jsx4("div", { style: { position: "absolute", inset: 0, opacity: screenWake }, children: /* @__PURE__ */ jsx4(MockUI, { accentColor }) }),
1712
- /* @__PURE__ */ jsx4(
1713
- "div",
1714
- {
1715
- style: {
1716
- position: "absolute",
1717
- inset: 0,
1718
- background: `linear-gradient(115deg, transparent 40%, rgba(255,255,255,0.18) 50%, transparent 60%)`,
1719
- transform: `translateX(${shimmerProgress * 100}%)`,
1720
- mixBlendMode: "screen",
1721
- pointerEvents: "none"
1722
- }
1723
- }
1724
- )
1725
- ]
1726
- }
1727
- )
1728
- ]
1729
- }
1730
- )
1731
- }
1732
- );
1733
- }
1734
-
1735
- // src/scenes/pricing-tier-focus/index.tsx
1736
- import { interpolate as interpolate4, spring as spring4, useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig4 } from "remotion";
1737
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1738
- var FONT_FAMILY5 = "inherit";
1739
- var TIERS = [
1740
- {
1741
- name: "Free",
1742
- price: "$0",
1743
- period: "/mo",
1744
- features: ["1 project", "Community support", "1 GB storage"],
1745
- cta: "Get started"
1746
- },
1747
- {
1748
- name: "Pro",
1749
- price: "$24",
1750
- period: "/mo",
1751
- features: [
1752
- "Unlimited projects",
1753
- "Priority support",
1754
- "100 GB storage",
1755
- "Advanced analytics"
1756
- ],
1757
- cta: "Buy Pro"
1758
- },
1759
- {
1760
- name: "Enterprise",
1761
- price: "$99",
1762
- period: "/mo",
1763
- features: ["SSO & SAML", "Dedicated manager", "Unlimited storage"],
1764
- cta: "Contact sales"
1765
- }
1766
- ];
1767
- function PricingTierFocus({
1768
- focusedTier = 1,
1769
- accentColor = SUCCESS,
1770
- speed = 1,
1771
- className
1772
- }) {
1773
- const frame = useCurrentFrame5() * speed;
1774
- const { fps } = useVideoConfig4();
1775
- const focusedIdx = Number(focusedTier);
1776
- const focusStart = 30;
1777
- const focusProgress = spring4({
1778
- frame: frame - focusStart,
1779
- fps,
1780
- config: { mass: 1, damping: 18, stiffness: 90 },
1781
- durationInFrames: 50
1782
- });
1783
- const focusScale = interpolate4(focusProgress, [0, 1], [1, 1.05]);
1784
- const focusLift = interpolate4(focusProgress, [0, 1], [0, -20]);
1785
- const sideBrightness = interpolate4(focusProgress, [0, 1], [1, 0.4]);
1786
- const sideBlur = interpolate4(focusProgress, [0, 1], [0, 4]);
1787
- const sideScale = interpolate4(focusProgress, [0, 1], [1, 0.95]);
1788
- const shimmerStart = 90;
1789
- const shimmerPos = interpolate4(
1790
- frame,
1791
- [shimmerStart, shimmerStart + 40],
1792
- [-150, 250],
1793
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
1794
- );
1795
- return /* @__PURE__ */ jsx5(
1796
- "div",
1797
- {
1798
- className,
1799
- style: {
1800
- position: "absolute",
1801
- inset: 0,
1802
- background: BG,
1803
- fontFamily: FONT_FAMILY5,
1804
- display: "flex",
1805
- alignItems: "center",
1806
- justifyContent: "center",
1807
- padding: 60,
1808
- gap: 28
1809
- },
1810
- children: TIERS.map((tier, i) => {
1811
- const isFocused = i === focusedIdx;
1812
- const scale = isFocused ? focusScale : sideScale;
1813
- const lift = isFocused ? focusLift : 0;
1814
- const brightness = isFocused ? 1 : sideBrightness;
1815
- const blurPx = isFocused ? 0 : sideBlur;
1816
- const z8 = isFocused ? 10 : 1;
1817
- return /* @__PURE__ */ jsxs5(
1818
- "div",
1819
- {
1820
- style: {
1821
- position: "relative",
1822
- flex: "1 1 0",
1823
- maxWidth: 320,
1824
- minHeight: 460,
1825
- padding: 32,
1826
- borderRadius: 20,
1827
- background: `linear-gradient(180deg, ${SURFACE} 0%, ${BG} 100%)`,
1828
- border: isFocused ? `1px solid ${accentColor}88` : `1px solid ${BORDER}`,
1829
- transform: `translateY(${lift}px) scale(${scale})`,
1830
- filter: `brightness(${brightness}) blur(${blurPx}px)`,
1831
- zIndex: z8,
1832
- display: "flex",
1833
- flexDirection: "column",
1834
- willChange: "transform, filter"
1835
- },
1836
- children: [
1837
- isFocused && /* @__PURE__ */ jsx5(
1838
- "div",
1839
- {
1840
- style: {
1841
- position: "absolute",
1842
- top: 16,
1843
- right: 16,
1844
- padding: "4px 10px",
1845
- borderRadius: 999,
1846
- background: accentColor,
1847
- color: BG,
1848
- fontSize: 11,
1849
- fontWeight: 700,
1850
- letterSpacing: "0.04em",
1851
- textTransform: "uppercase"
1852
- },
1853
- children: "Popular"
1854
- }
1855
- ),
1856
- /* @__PURE__ */ jsx5(
1857
- "div",
1858
- {
1859
- style: {
1860
- fontSize: 14,
1861
- fontWeight: 600,
1862
- color: "rgba(255,255,255,0.6)",
1863
- letterSpacing: "0.04em",
1864
- textTransform: "uppercase"
1865
- },
1866
- children: tier.name
1867
- }
1868
- ),
1869
- /* @__PURE__ */ jsxs5(
1870
- "div",
1871
- {
1872
- style: {
1873
- marginTop: 12,
1874
- display: "flex",
1875
- alignItems: "baseline",
1876
- gap: 4
1877
- },
1878
- children: [
1879
- /* @__PURE__ */ jsx5(
1880
- "div",
1881
- {
1882
- style: {
1883
- fontSize: 56,
1884
- fontWeight: 700,
1885
- color: TEXT_HI,
1886
- letterSpacing: "-0.04em",
1887
- lineHeight: 1
1888
- },
1889
- children: tier.price
1890
- }
1891
- ),
1892
- /* @__PURE__ */ jsx5(
1893
- "div",
1894
- {
1895
- style: {
1896
- fontSize: 16,
1897
- color: "rgba(255,255,255,0.5)",
1898
- fontWeight: 500
1899
- },
1900
- children: tier.period
1901
- }
1902
- )
1903
- ]
1904
- }
1905
- ),
1906
- /* @__PURE__ */ jsx5(
1907
- "div",
1908
- {
1909
- style: {
1910
- marginTop: 24,
1911
- display: "flex",
1912
- flexDirection: "column",
1913
- gap: 12,
1914
- flex: 1
1915
- },
1916
- children: tier.features.map((f) => /* @__PURE__ */ jsxs5(
1917
- "div",
1918
- {
1919
- style: {
1920
- display: "flex",
1921
- alignItems: "center",
1922
- gap: 10,
1923
- fontSize: 14,
1924
- color: "rgba(255,255,255,0.85)"
1925
- },
1926
- children: [
1927
- /* @__PURE__ */ jsx5(
1928
- "div",
1929
- {
1930
- style: {
1931
- width: 16,
1932
- height: 16,
1933
- borderRadius: 999,
1934
- background: `${accentColor}22`,
1935
- display: "flex",
1936
- alignItems: "center",
1937
- justifyContent: "center",
1938
- color: accentColor,
1939
- fontSize: 11,
1940
- fontWeight: 700,
1941
- flexShrink: 0
1942
- },
1943
- children: "\u2713"
1944
- }
1945
- ),
1946
- f
1947
- ]
1948
- },
1949
- f
1950
- ))
1951
- }
1952
- ),
1953
- /* @__PURE__ */ jsxs5(
1954
- "div",
1955
- {
1956
- style: {
1957
- marginTop: 24,
1958
- position: "relative",
1959
- height: 44,
1960
- borderRadius: 12,
1961
- background: isFocused ? accentColor : "rgba(255,255,255,0.08)",
1962
- color: isFocused ? BG : TEXT_HI,
1963
- display: "flex",
1964
- alignItems: "center",
1965
- justifyContent: "center",
1966
- fontSize: 14,
1967
- fontWeight: 600,
1968
- overflow: "hidden",
1969
- border: isFocused ? "none" : "1px solid rgba(255,255,255,0.1)"
1970
- },
1971
- children: [
1972
- tier.cta,
1973
- isFocused && /* @__PURE__ */ jsx5(
1974
- "div",
1975
- {
1976
- style: {
1977
- position: "absolute",
1978
- top: 0,
1979
- left: 0,
1980
- bottom: 0,
1981
- width: 80,
1982
- transform: `translateX(${shimmerPos}px) skewX(-20deg)`,
1983
- background: "linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.55) 50%, transparent 100%)",
1984
- pointerEvents: "none"
1985
- }
1986
- }
1987
- )
1988
- ]
1989
- }
1990
- )
1991
- ]
1992
- },
1993
- tier.name
1994
- );
1995
- })
1996
- }
1997
- );
1998
- }
1999
-
2000
- // src/scenes/landing-code-showcase/index.tsx
2001
- import {
2002
- AbsoluteFill as AbsoluteFill3,
2003
- Freeze,
2004
- interpolate as interpolate6,
2005
- Sequence as Sequence2,
2006
- spring as spring6,
2007
- useCurrentFrame as useCurrentFrame7,
2008
- useVideoConfig as useVideoConfig6
2009
- } from "remotion";
2010
-
2011
- // src/scenes/landing-code-showcase/timeline.ts
2012
- var SCENES = {
2013
- blur: { start: 0, duration: 90 },
2014
- push1: { start: 70, duration: 60 },
2015
- dashboard: { start: 130, duration: 110 },
2016
- glassWipe: { start: 230, duration: 60 },
2017
- maskedSlide: { start: 290, duration: 120 },
2018
- push2: { start: 400, duration: 60 },
2019
- terminal: { start: 460, duration: 180 },
2020
- // Quiet hold at the very end so the loop never restarts mid-action.
2021
- endHold: 80
2022
- };
2023
- var LANDING_CODE_SHOWCASE_DURATION = SCENES.terminal.start + SCENES.terminal.duration + SCENES.endHold;
2024
-
2025
- // src/scenes/landing-code-showcase/index.tsx
2026
- import { TransitionSeries, linearTiming } from "@remotion/transitions";
2027
-
2028
- // src/scenes/terminal-to-browser-deploy/index.tsx
2029
- import { interpolate as interpolate5, spring as spring5, useCurrentFrame as useCurrentFrame6, useVideoConfig as useVideoConfig5 } from "remotion";
2030
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2031
- var FONT_FAMILY6 = "inherit";
2032
- var MONO_FAMILY4 = "monospace";
2033
- function MacDots({ size = 12 }) {
2034
- return /* @__PURE__ */ jsx6("div", { style: { display: "flex", gap: 8, alignItems: "center" }, children: ["#ff5f57", "#febc2e", "#28c840"].map((c) => /* @__PURE__ */ jsx6(
2035
- "div",
2036
- {
2037
- style: {
2038
- width: size,
2039
- height: size,
2040
- borderRadius: "50%",
2041
- background: c,
2042
- opacity: 0.85
2043
- }
2044
- },
2045
- c
2046
- )) });
2047
- }
2048
- function TerminalToBrowserDeploy({
2049
- siteUrl = "https://app.example.com",
2050
- accentColor = SUCCESS,
2051
- speed = 1,
2052
- className
2053
- }) {
2054
- const frame = useCurrentFrame6() * speed;
2055
- const { fps, durationInFrames } = useVideoConfig5();
2056
- const lines = [
2057
- { text: "$ pnpm deploy", start: 10, type: "command" },
2058
- { text: "\u2192 Building project...", start: 35, type: "step" },
2059
- { text: "\u2192 Bundling assets...", start: 55, type: "step" },
2060
- { text: "\u2192 Optimizing images...", start: 75, type: "step" },
2061
- { text: "\u2192 Uploading...", start: 95, type: "step" },
2062
- { text: `\u2713 Deployed to ${siteUrl}`, start: 120, type: "success" }
2063
- ];
2064
- const renderedLines = lines.map((line) => {
2065
- const elapsed = frame - line.start;
2066
- const charsPerFrame = 1.6;
2067
- const visibleChars = Math.max(
2068
- 0,
2069
- Math.min(line.text.length, Math.floor(elapsed * charsPerFrame))
2070
- );
2071
- return {
2072
- ...line,
2073
- visible: line.text.slice(0, visibleChars),
2074
- isVisible: elapsed >= 0
2075
- };
2076
- });
2077
- const collapseStart = 155;
2078
- const collapseProgress = interpolate5(
2079
- frame,
2080
- [collapseStart, collapseStart + 18],
2081
- [0, 1],
2082
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
2083
- );
2084
- const terminalScale = interpolate5(collapseProgress, [0, 1], [1, 0.8]);
2085
- const terminalBlur = interpolate5(collapseProgress, [0, 1], [0, 10]);
2086
- const terminalOpacity = interpolate5(collapseProgress, [0, 1], [1, 0.35]);
2087
- const browserSpring = spring5({
2088
- frame: frame - collapseStart - 4,
2089
- fps,
2090
- config: { mass: 1, damping: 14, stiffness: 110 },
2091
- durationInFrames: 50
2092
- });
2093
- const browserScale = browserSpring;
2094
- const browserOpacity = interpolate5(browserSpring, [0, 0.3, 1], [0, 1, 1], {
2095
- extrapolateRight: "clamp"
2096
- });
2097
- let activeLine;
2098
- for (let i = renderedLines.length - 1; i >= 0; i--) {
2099
- const l = renderedLines[i];
2100
- if (l.isVisible && l.visible.length < l.text.length) {
2101
- activeLine = l;
2102
- break;
2103
- }
2104
- }
2105
- const urlLineIndex = 5;
2106
- const lineHeight = 30;
2107
- const terminalBodyPaddingTop = 22;
2108
- const urlLineCenterY = terminalBodyPaddingTop + urlLineIndex * lineHeight + 12;
2109
- const terminalWidth = 820;
2110
- const terminalHeight = 360;
2111
- const terminalLeft = (1280 - terminalWidth) / 2;
2112
- const terminalTop = (720 - terminalHeight) / 2;
2113
- const terminalHeaderHeight = 36;
2114
- const originX = terminalLeft + 200;
2115
- const originY = terminalTop + terminalHeaderHeight + urlLineCenterY;
2116
- const browserWidth = 980;
2117
- const browserHeight = 560;
2118
- return /* @__PURE__ */ jsxs6(
2119
- "div",
2120
- {
2121
- className,
2122
- style: {
2123
- position: "absolute",
2124
- inset: 0,
2125
- overflow: "hidden",
2126
- background: BG,
2127
- fontFamily: FONT_FAMILY6
2128
- },
2129
- children: [
2130
- /* @__PURE__ */ jsx6(
2131
- "div",
2132
- {
2133
- style: {
2134
- position: "absolute",
2135
- inset: 0,
2136
- background: `radial-gradient(ellipse at center, ${SURFACE} 0%, ${BG_DEEP} 70%)`
2137
- }
2138
- }
2139
- ),
2140
- /* @__PURE__ */ jsxs6(
2141
- "div",
2142
- {
2143
- style: {
2144
- position: "absolute",
2145
- left: terminalLeft,
2146
- top: terminalTop,
2147
- width: terminalWidth,
2148
- height: terminalHeight,
2149
- borderRadius: 14,
2150
- background: "rgba(15,15,17,0.96)",
2151
- border: "1px solid rgba(255,255,255,0.08)",
2152
- overflow: "hidden",
2153
- transform: `scale(${terminalScale})`,
2154
- filter: `blur(${terminalBlur}px)`,
2155
- opacity: terminalOpacity,
2156
- transformOrigin: "center center",
2157
- willChange: "transform, filter"
2158
- },
2159
- children: [
2160
- /* @__PURE__ */ jsxs6(
2161
- "div",
2162
- {
2163
- style: {
2164
- height: terminalHeaderHeight,
2165
- display: "flex",
2166
- alignItems: "center",
2167
- paddingLeft: 14,
2168
- borderBottom: "1px solid rgba(255,255,255,0.06)",
2169
- background: "rgba(255,255,255,0.02)"
2170
- },
2171
- children: [
2172
- /* @__PURE__ */ jsx6(MacDots, {}),
2173
- /* @__PURE__ */ jsx6(
2174
- "div",
2175
- {
2176
- style: {
2177
- flex: 1,
2178
- textAlign: "center",
2179
- color: "rgba(255,255,255,0.45)",
2180
- fontFamily: MONO_FAMILY4,
2181
- fontSize: 12,
2182
- marginRight: 56
2183
- },
2184
- children: "~/project \u2014 zsh"
2185
- }
2186
- )
2187
- ]
2188
- }
2189
- ),
2190
- /* @__PURE__ */ jsx6(
2191
- "div",
2192
- {
2193
- style: {
2194
- padding: `${terminalBodyPaddingTop}px 22px`,
2195
- fontFamily: MONO_FAMILY4,
2196
- fontSize: 16,
2197
- lineHeight: `${lineHeight}px`,
2198
- color: "rgba(255,255,255,0.85)"
2199
- },
2200
- children: renderedLines.map((line, i) => {
2201
- if (!line.isVisible) return null;
2202
- const isActive = activeLine === line;
2203
- const showCursor = isActive && Math.floor(frame / 12) % 2 === 0;
2204
- const color = line.type === "success" ? accentColor : line.type === "command" ? "rgba(255,255,255,0.95)" : "rgba(255,255,255,0.7)";
2205
- return /* @__PURE__ */ jsxs6(
2206
- "div",
2207
- {
2208
- style: {
2209
- color,
2210
- whiteSpace: "pre"
2211
- },
2212
- children: [
2213
- line.visible,
2214
- showCursor && /* @__PURE__ */ jsx6(
2215
- "span",
2216
- {
2217
- style: {
2218
- display: "inline-block",
2219
- width: 8,
2220
- height: 18,
2221
- background: "rgba(255,255,255,0.85)",
2222
- verticalAlign: "text-bottom",
2223
- marginLeft: 2
2224
- }
2225
- }
2226
- )
2227
- ]
2228
- },
2229
- i
2230
- );
2231
- })
2232
- }
2233
- )
2234
- ]
2235
- }
2236
- ),
2237
- /* @__PURE__ */ jsxs6(
2238
- "div",
2239
- {
2240
- style: {
2241
- position: "absolute",
2242
- left: (1280 - browserWidth) / 2,
2243
- top: (720 - browserHeight) / 2,
2244
- width: browserWidth,
2245
- height: browserHeight,
2246
- borderRadius: 16,
2247
- overflow: "hidden",
2248
- background: BG,
2249
- border: "1px solid rgba(255,255,255,0.1)",
2250
- transform: `scale(${browserScale})`,
2251
- transformOrigin: `${(originX - (1280 - browserWidth) / 2) / browserWidth * 100}% ${(originY - (720 - browserHeight) / 2) / browserHeight * 100}%`,
2252
- opacity: browserOpacity,
2253
- willChange: "transform, opacity"
2254
- },
2255
- children: [
2256
- /* @__PURE__ */ jsxs6(
2257
- "div",
2258
- {
2259
- style: {
2260
- height: 44,
2261
- display: "flex",
2262
- alignItems: "center",
2263
- gap: 14,
2264
- paddingLeft: 16,
2265
- paddingRight: 16,
2266
- background: "rgba(20,20,22,0.95)",
2267
- borderBottom: "1px solid rgba(255,255,255,0.06)"
2268
- },
2269
- children: [
2270
- /* @__PURE__ */ jsx6(MacDots, {}),
2271
- /* @__PURE__ */ jsx6(
2272
- "div",
2273
- {
2274
- style: {
2275
- flex: 1,
2276
- height: 26,
2277
- borderRadius: 13,
2278
- background: "rgba(255,255,255,0.06)",
2279
- border: "1px solid rgba(255,255,255,0.08)",
2280
- display: "flex",
2281
- alignItems: "center",
2282
- justifyContent: "center",
2283
- color: "rgba(255,255,255,0.7)",
2284
- fontFamily: MONO_FAMILY4,
2285
- fontSize: 12
2286
- },
2287
- children: siteUrl
2288
- }
2289
- ),
2290
- /* @__PURE__ */ jsx6("div", { style: { width: 60 } })
2291
- ]
2292
- }
2293
- ),
2294
- /* @__PURE__ */ jsxs6(
2295
- "div",
2296
- {
2297
- style: {
2298
- position: "absolute",
2299
- inset: "44px 0 0 0",
2300
- background: `linear-gradient(180deg, ${BG} 0%, ${SURFACE} 60%, ${BG} 100%)`,
2301
- color: "white",
2302
- padding: "60px 80px",
2303
- display: "flex",
2304
- flexDirection: "column",
2305
- alignItems: "flex-start",
2306
- gap: 24
2307
- },
2308
- children: [
2309
- /* @__PURE__ */ jsxs6(
2310
- "div",
2311
- {
2312
- style: {
2313
- position: "absolute",
2314
- top: 22,
2315
- left: 80,
2316
- right: 80,
2317
- display: "flex",
2318
- alignItems: "center",
2319
- justifyContent: "space-between",
2320
- fontFamily: FONT_FAMILY6,
2321
- fontSize: 14,
2322
- color: "rgba(255,255,255,0.7)"
2323
- },
2324
- children: [
2325
- /* @__PURE__ */ jsx6("div", { style: { fontWeight: 600, color: TEXT_HI }, children: "Acme" }),
2326
- /* @__PURE__ */ jsxs6("div", { style: { display: "flex", gap: 24 }, children: [
2327
- /* @__PURE__ */ jsx6("span", { children: "Features" }),
2328
- /* @__PURE__ */ jsx6("span", { children: "Pricing" }),
2329
- /* @__PURE__ */ jsx6("span", { children: "Docs" })
2330
- ] })
2331
- ]
2332
- }
2333
- ),
2334
- /* @__PURE__ */ jsx6(
2335
- "div",
2336
- {
2337
- style: {
2338
- position: "absolute",
2339
- right: 60,
2340
- top: 120,
2341
- width: 280,
2342
- height: 280,
2343
- borderRadius: "50%",
2344
- background: `radial-gradient(circle at 30% 30%, ${accentColor}55, transparent 70%)`,
2345
- filter: "blur(20px)"
2346
- }
2347
- }
2348
- ),
2349
- /* @__PURE__ */ jsx6(
2350
- "div",
2351
- {
2352
- style: {
2353
- position: "absolute",
2354
- right: 100,
2355
- top: 160,
2356
- width: 200,
2357
- height: 200,
2358
- borderRadius: 24,
2359
- border: `1px solid ${accentColor}55`,
2360
- transform: "rotate(12deg)",
2361
- background: "linear-gradient(135deg, rgba(255,255,255,0.04), transparent)"
2362
- }
2363
- }
2364
- ),
2365
- /* @__PURE__ */ jsx6(
2366
- "div",
2367
- {
2368
- style: {
2369
- fontFamily: FONT_FAMILY6,
2370
- fontSize: 14,
2371
- color: accentColor,
2372
- fontWeight: 500,
2373
- marginTop: 50
2374
- },
2375
- children: "Now live"
2376
- }
2377
- ),
2378
- /* @__PURE__ */ jsx6(
2379
- "div",
2380
- {
2381
- style: {
2382
- fontFamily: FONT_FAMILY6,
2383
- fontSize: 72,
2384
- fontWeight: 700,
2385
- letterSpacing: "-0.04em",
2386
- lineHeight: 1,
2387
- maxWidth: 560
2388
- },
2389
- children: "Ship faster."
2390
- }
2391
- ),
2392
- /* @__PURE__ */ jsx6(
2393
- "div",
2394
- {
2395
- style: {
2396
- fontFamily: FONT_FAMILY6,
2397
- fontSize: 18,
2398
- color: "rgba(255,255,255,0.65)",
2399
- maxWidth: 480,
2400
- lineHeight: 1.5
2401
- },
2402
- children: "From commit to global edge in seconds. No config. No drama."
2403
- }
2404
- ),
2405
- /* @__PURE__ */ jsx6(
2406
- "button",
2407
- {
2408
- type: "button",
2409
- style: {
2410
- marginTop: 8,
2411
- padding: "14px 28px",
2412
- borderRadius: 10,
2413
- background: accentColor,
2414
- color: BG,
2415
- fontFamily: FONT_FAMILY6,
2416
- fontSize: 15,
2417
- fontWeight: 600,
2418
- border: "none"
2419
- },
2420
- children: "Get started \u2192"
2421
- }
2422
- )
2423
- ]
2424
- }
2425
- )
2426
- ]
2427
- }
2428
- ),
2429
- /* @__PURE__ */ jsx6("div", { style: { display: "none" }, children: durationInFrames })
2430
- ]
2431
- }
2432
- );
2433
- }
2434
-
2435
- // src/scenes/landing-code-showcase/index.tsx
2436
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
2437
- function WipeWindow({
2438
- presentation,
2439
- duration,
2440
- from,
2441
- to
2442
- }) {
2443
- return /* @__PURE__ */ jsxs7(TransitionSeries, { children: [
2444
- /* @__PURE__ */ jsx7(TransitionSeries.Sequence, { durationInFrames: duration, children: from }),
2445
- /* @__PURE__ */ jsx7(
2446
- TransitionSeries.Transition,
2447
- {
2448
- presentation,
2449
- timing: linearTiming({ durationInFrames: duration - 1 })
2450
- }
2451
- ),
2452
- /* @__PURE__ */ jsx7(TransitionSeries.Sequence, { durationInFrames: duration, children: to })
2453
- ] });
2454
- }
2455
- var FONT_FAMILY7 = "inherit";
2456
- var MONO_FAMILY5 = "monospace";
2457
- var PEACH = ACCENT_SOFT;
2458
- var LAVENDER = VIOLET;
2459
- var MINT = SUCCESS;
2460
- var STAGE_BG = BG_DEEP;
2461
- var PANEL_BG = BG;
2462
- var HEADER = `import { BlurReveal, DashboardPopulate, MaskedSlideReveal,
2463
- TerminalToBrowserDeploy, Transition } from "@/components/remocn";
2464
-
2465
- export default function Scene() {
2466
- return (
2467
- <>
2468
- `;
2469
- var FOOTER = ` </>
2470
- );
2471
- }`;
2472
- var STEPS = [
2473
- {
2474
- startFrame: 4,
2475
- code: ` <BlurReveal text="Build faster." />
2476
- `
2477
- },
2478
- {
2479
- startFrame: SCENES.push1.start,
2480
- code: ` <Transition type="spatial-push" />
2481
- `,
2482
- highlight: "spatial-push"
2483
- },
2484
- {
2485
- startFrame: SCENES.dashboard.start,
2486
- code: ` <DashboardPopulate data={metrics} />
2487
- `
2488
- },
2489
- {
2490
- startFrame: SCENES.glassWipe.start,
2491
- code: ` <Transition type="glass-wipe" />
2492
- `,
2493
- highlight: "glass-wipe"
2494
- },
2495
- {
2496
- startFrame: SCENES.maskedSlide.start,
2497
- code: ` <MaskedSlideReveal text="Ship to production." />
2498
- `
2499
- },
2500
- {
2501
- startFrame: SCENES.push2.start,
2502
- code: ` <Transition type="spatial-push" direction="left" />
2503
- `,
2504
- highlight: "spatial-push"
2505
- },
2506
- {
2507
- startFrame: SCENES.terminal.start,
2508
- code: ` <TerminalToBrowserDeploy />
2509
- `
2510
- }
2511
- ];
2512
- var CHARS_PER_FRAME2 = 2.2;
2513
- var BUILT_STEPS = STEPS.map((s) => ({
2514
- ...s,
2515
- endFrame: s.startFrame + Math.ceil(s.code.length / CHARS_PER_FRAME2)
2516
- }));
2517
- function tokenizeLine(line, accentColor, highlightedToken) {
2518
- const tokens = [];
2519
- const regex = /(\bimport\b|\bfrom\b|\bexport\b|\bdefault\b|\bfunction\b|\breturn\b|\bconst\b)|("[^"]*")|(\b[A-Z][a-zA-Z0-9_]*)|(\b[a-zA-Z_][a-zA-Z0-9_]*)(?==)|(\{|\}|\(|\)|<|>|\/|;)|([0-9]+)/g;
2520
- let lastIndex = 0;
2521
- let m = regex.exec(line);
2522
- while (m !== null) {
2523
- if (m.index > lastIndex) {
2524
- tokens.push({
2525
- text: line.slice(lastIndex, m.index),
2526
- color: SYN_TEXT
2527
- });
2528
- }
2529
- if (m[1]) tokens.push({ text: m[1], color: LAVENDER });
2530
- else if (m[2]) {
2531
- const inner = m[2].slice(1, -1);
2532
- if (highlightedToken && inner === highlightedToken) {
2533
- tokens.push({ text: m[2], color: LAVENDER, glow: true });
2534
- } else {
2535
- tokens.push({ text: m[2], color: MINT });
2536
- }
2537
- } else if (m[3]) tokens.push({ text: m[3], color: PEACH });
2538
- else if (m[4]) tokens.push({ text: m[4], color: accentColor });
2539
- else if (m[5]) tokens.push({ text: m[5], color: SYN_COMMENT });
2540
- else if (m[6]) tokens.push({ text: m[6], color: SYN_NUMBER });
2541
- lastIndex = regex.lastIndex;
2542
- m = regex.exec(line);
2543
- }
2544
- if (lastIndex < line.length) {
2545
- tokens.push({ text: line.slice(lastIndex), color: SYN_TEXT });
2546
- }
2547
- return tokens;
2548
- }
2549
- function CodeEditor({
2550
- frame,
2551
- accentColor
2552
- }) {
2553
- const dynamicChunks = [];
2554
- let activeHighlight = null;
2555
- for (const step of BUILT_STEPS) {
2556
- if (frame < step.startFrame) break;
2557
- const elapsed = frame - step.startFrame;
2558
- const charsTyped = Math.min(
2559
- step.code.length,
2560
- Math.floor(elapsed * CHARS_PER_FRAME2)
2561
- );
2562
- dynamicChunks.push(step.code.slice(0, charsTyped));
2563
- if (step.highlight) {
2564
- const sinceStart = frame - step.startFrame;
2565
- if (sinceStart >= 0 && sinceStart < 60) {
2566
- activeHighlight = step.highlight;
2567
- }
2568
- }
2569
- }
2570
- const allTyped = dynamicChunks.join("");
2571
- const lastStep = BUILT_STEPS[BUILT_STEPS.length - 1];
2572
- const showFooter = frame > lastStep.endFrame + 4;
2573
- const visibleCode = HEADER + allTyped + (showFooter ? FOOTER : "");
2574
- const lines = visibleCode.split("\n");
2575
- const lastLineIdx = lines.length - 1;
2576
- const caretOn = Math.floor(frame / 12) % 2 === 0;
2577
- return /* @__PURE__ */ jsx7(
2578
- "div",
2579
- {
2580
- style: {
2581
- width: "100%",
2582
- maxWidth: 540,
2583
- position: "relative",
2584
- borderRadius: 16,
2585
- padding: 1,
2586
- background: "linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.02) 50%, rgba(255,255,255,0.06) 100%)"
2587
- },
2588
- children: /* @__PURE__ */ jsxs7(
2589
- "div",
2590
- {
2591
- style: {
2592
- borderRadius: 15,
2593
- background: "rgba(12,12,14,0.9)",
2594
- backdropFilter: "blur(20px)",
2595
- overflow: "hidden"
2596
- },
2597
- children: [
2598
- /* @__PURE__ */ jsxs7(
2599
- "div",
2600
- {
2601
- style: {
2602
- height: 40,
2603
- display: "flex",
2604
- alignItems: "center",
2605
- padding: "0 16px",
2606
- borderBottom: "1px solid rgba(255,255,255,0.06)",
2607
- gap: 8
2608
- },
2609
- children: [
2610
- ["#ff5f57", "#febc2e", "#28c840"].map((c) => /* @__PURE__ */ jsx7(
2611
- "div",
2612
- {
2613
- style: {
2614
- width: 11,
2615
- height: 11,
2616
- borderRadius: 6,
2617
- background: c,
2618
- opacity: 0.65
2619
- }
2620
- },
2621
- c
2622
- )),
2623
- /* @__PURE__ */ jsx7(
2624
- "div",
2625
- {
2626
- style: {
2627
- marginLeft: 12,
2628
- fontSize: 12,
2629
- color: "rgba(255,255,255,0.5)",
2630
- fontFamily: MONO_FAMILY5
2631
- },
2632
- children: "scene.tsx"
2633
- }
2634
- )
2635
- ]
2636
- }
2637
- ),
2638
- /* @__PURE__ */ jsx7(
2639
- "div",
2640
- {
2641
- style: {
2642
- padding: "20px 22px",
2643
- fontFamily: MONO_FAMILY5,
2644
- fontSize: 12.5,
2645
- lineHeight: 1.7,
2646
- color: SYN_TEXT,
2647
- minHeight: 480
2648
- },
2649
- children: lines.map((line, i) => {
2650
- const tokens = tokenizeLine(line, accentColor, activeHighlight);
2651
- const isLast = i === lastLineIdx;
2652
- return /* @__PURE__ */ jsxs7(
2653
- "div",
2654
- {
2655
- style: { display: "flex", whiteSpace: "pre" },
2656
- children: [
2657
- /* @__PURE__ */ jsx7(
2658
- "span",
2659
- {
2660
- style: {
2661
- width: 26,
2662
- color: "rgba(255,255,255,0.18)",
2663
- userSelect: "none",
2664
- flexShrink: 0
2665
- },
2666
- children: i + 1
2667
- }
2668
- ),
2669
- /* @__PURE__ */ jsxs7("span", { children: [
2670
- tokens.length === 0 ? /* @__PURE__ */ jsx7("span", { children: " " }) : tokens.map((t, j) => /* @__PURE__ */ jsx7(
2671
- "span",
2672
- {
2673
- style: {
2674
- color: t.color
2675
- },
2676
- children: t.text
2677
- },
2678
- j
2679
- )),
2680
- isLast && caretOn && /* @__PURE__ */ jsx7(
2681
- "span",
2682
- {
2683
- style: {
2684
- display: "inline-block",
2685
- width: 7,
2686
- height: 14,
2687
- marginLeft: 1,
2688
- verticalAlign: "text-bottom",
2689
- background: accentColor
2690
- }
2691
- }
2692
- )
2693
- ] })
2694
- ]
2695
- },
2696
- i
2697
- );
2698
- })
2699
- }
2700
- )
2701
- ]
2702
- }
2703
- )
2704
- }
2705
- );
2706
- }
2707
- function PastelStage({
2708
- background = STAGE_BG,
2709
- children
2710
- }) {
2711
- return /* @__PURE__ */ jsxs7(
2712
- "div",
2713
- {
2714
- style: {
2715
- position: "absolute",
2716
- inset: 0,
2717
- background,
2718
- overflow: "hidden"
2719
- },
2720
- children: [
2721
- /* @__PURE__ */ jsx7(
2722
- "div",
2723
- {
2724
- style: {
2725
- position: "absolute",
2726
- inset: 0,
2727
- background: "radial-gradient(ellipse at 20% 30%, rgba(255,179,142,0.08), transparent 60%), radial-gradient(ellipse at 80% 70%, rgba(155,139,176,0.06), transparent 60%)"
2728
- }
2729
- }
2730
- ),
2731
- children
2732
- ]
2733
- }
2734
- );
2735
- }
2736
- function BlurRevealScene() {
2737
- const frame = useCurrentFrame7();
2738
- const opacity = interpolate6(frame, [0, 50], [0, 1], {
2739
- extrapolateRight: "clamp"
2740
- });
2741
- const blurAmount = interpolate6(frame, [0, 50], [22, 0], {
2742
- extrapolateRight: "clamp"
2743
- });
2744
- return /* @__PURE__ */ jsx7(
2745
- "div",
2746
- {
2747
- style: {
2748
- position: "absolute",
2749
- inset: 0,
2750
- display: "flex",
2751
- alignItems: "center",
2752
- justifyContent: "center"
2753
- },
2754
- children: /* @__PURE__ */ jsx7(
2755
- "span",
2756
- {
2757
- style: {
2758
- opacity,
2759
- filter: `blur(${blurAmount}px)`,
2760
- fontSize: 96,
2761
- fontWeight: 600,
2762
- color: PEACH,
2763
- letterSpacing: "-0.04em",
2764
- fontFamily: FONT_FAMILY7
2765
- },
2766
- children: "Build faster."
2767
- }
2768
- )
2769
- }
2770
- );
2771
- }
2772
- function DashboardScene() {
2773
- return /* @__PURE__ */ jsx7("div", { style: { position: "absolute", inset: 0 }, children: /* @__PURE__ */ jsx7(DashboardPopulate, { accentColor: PEACH }) });
2774
- }
2775
- function MaskedSlideScene() {
2776
- const frame = useCurrentFrame7();
2777
- const { fps } = useVideoConfig6();
2778
- const words = "Ship to production.".split(" ");
2779
- return /* @__PURE__ */ jsx7(
2780
- "div",
2781
- {
2782
- style: {
2783
- position: "absolute",
2784
- inset: 0,
2785
- display: "flex",
2786
- alignItems: "center",
2787
- justifyContent: "center"
2788
- },
2789
- children: /* @__PURE__ */ jsx7(
2790
- "span",
2791
- {
2792
- style: {
2793
- fontSize: 92,
2794
- fontWeight: 700,
2795
- color: MINT,
2796
- letterSpacing: "-0.03em",
2797
- fontFamily: FONT_FAMILY7
2798
- },
2799
- children: words.map((word, i) => {
2800
- const t = spring6({
2801
- frame: frame - i * 4,
2802
- fps,
2803
- config: { damping: 18, stiffness: 120 }
2804
- });
2805
- return /* @__PURE__ */ jsx7(
2806
- "span",
2807
- {
2808
- style: {
2809
- display: "inline-block",
2810
- overflow: "hidden",
2811
- verticalAlign: "bottom",
2812
- lineHeight: 1.05,
2813
- marginRight: "0.25em"
2814
- },
2815
- children: /* @__PURE__ */ jsx7(
2816
- "span",
2817
- {
2818
- style: {
2819
- display: "inline-block",
2820
- transform: `translateY(${(1 - t) * 110}%)`
2821
- },
2822
- children: word
2823
- }
2824
- )
2825
- },
2826
- i
2827
- );
2828
- })
2829
- }
2830
- )
2831
- }
2832
- );
2833
- }
2834
- function TerminalScene() {
2835
- return /* @__PURE__ */ jsx7("div", { style: { position: "absolute", inset: 0 }, children: /* @__PURE__ */ jsx7(TerminalToBrowserDeploy, { accentColor: MINT, siteUrl: "remocn.dev" }) });
2836
- }
2837
- function RightPane() {
2838
- return /* @__PURE__ */ jsxs7(
2839
- "div",
2840
- {
2841
- style: {
2842
- position: "relative",
2843
- width: "100%",
2844
- height: "100%",
2845
- background: STAGE_BG,
2846
- overflow: "hidden",
2847
- borderRadius: 18
2848
- },
2849
- children: [
2850
- /* @__PURE__ */ jsx7(
2851
- Sequence2,
2852
- {
2853
- from: SCENES.blur.start,
2854
- durationInFrames: SCENES.blur.duration + SCENES.push1.duration,
2855
- children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(BlurRevealScene, {}) })
2856
- }
2857
- ),
2858
- /* @__PURE__ */ jsx7(
2859
- Sequence2,
2860
- {
2861
- from: SCENES.dashboard.start,
2862
- durationInFrames: SCENES.dashboard.duration + SCENES.glassWipe.duration,
2863
- children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(DashboardScene, {}) })
2864
- }
2865
- ),
2866
- /* @__PURE__ */ jsx7(
2867
- Sequence2,
2868
- {
2869
- from: SCENES.maskedSlide.start,
2870
- durationInFrames: SCENES.maskedSlide.duration + SCENES.push2.duration,
2871
- children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(MaskedSlideScene, {}) })
2872
- }
2873
- ),
2874
- /* @__PURE__ */ jsx7(
2875
- Sequence2,
2876
- {
2877
- from: SCENES.terminal.start,
2878
- durationInFrames: SCENES.terminal.duration + SCENES.endHold,
2879
- children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(TerminalScene, {}) })
2880
- }
2881
- ),
2882
- /* @__PURE__ */ jsx7(
2883
- Sequence2,
2884
- {
2885
- from: SCENES.push1.start,
2886
- durationInFrames: SCENES.push1.duration,
2887
- children: /* @__PURE__ */ jsx7(
2888
- WipeWindow,
2889
- {
2890
- presentation: spatialPush({ direction: "up" }),
2891
- duration: SCENES.push1.duration,
2892
- from: /* @__PURE__ */ jsx7(Freeze, { frame: SCENES.push1.start - SCENES.blur.start - 1, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(BlurRevealScene, {}) }) }),
2893
- to: /* @__PURE__ */ jsx7(Freeze, { frame: 0, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(DashboardScene, {}) }) })
2894
- }
2895
- )
2896
- }
2897
- ),
2898
- /* @__PURE__ */ jsx7(
2899
- Sequence2,
2900
- {
2901
- from: SCENES.glassWipe.start,
2902
- durationInFrames: SCENES.glassWipe.duration,
2903
- children: /* @__PURE__ */ jsx7(
2904
- WipeWindow,
2905
- {
2906
- presentation: frostedGlassWipe({ glassBlur: 28 }),
2907
- duration: SCENES.glassWipe.duration,
2908
- from: /* @__PURE__ */ jsx7(Freeze, { frame: SCENES.dashboard.duration - 1, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(DashboardScene, {}) }) }),
2909
- to: /* @__PURE__ */ jsx7(Freeze, { frame: 0, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(MaskedSlideScene, {}) }) })
2910
- }
2911
- )
2912
- }
2913
- ),
2914
- /* @__PURE__ */ jsx7(
2915
- Sequence2,
2916
- {
2917
- from: SCENES.push2.start,
2918
- durationInFrames: SCENES.push2.duration,
2919
- children: /* @__PURE__ */ jsx7(
2920
- WipeWindow,
2921
- {
2922
- presentation: spatialPush({ direction: "left" }),
2923
- duration: SCENES.push2.duration,
2924
- from: /* @__PURE__ */ jsx7(Freeze, { frame: SCENES.maskedSlide.duration - 1, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(MaskedSlideScene, {}) }) }),
2925
- to: /* @__PURE__ */ jsx7(Freeze, { frame: 0, children: /* @__PURE__ */ jsx7(PastelStage, { children: /* @__PURE__ */ jsx7(TerminalScene, {}) }) })
2926
- }
2927
- )
2928
- }
2929
- )
2930
- ]
2931
- }
2932
- );
2933
- }
2934
- function LandingCodeShowcase({
2935
- accentColor = ACCENT_SOFT,
2936
- speed = 1
2937
- }) {
2938
- const rawFrame = useCurrentFrame7();
2939
- const frame = rawFrame * speed;
2940
- const successGlow = interpolate6(
2941
- frame,
2942
- [SCENES.terminal.start + 70, SCENES.terminal.start + 100],
2943
- [0, 1],
2944
- { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
2945
- );
2946
- return /* @__PURE__ */ jsxs7(
2947
- AbsoluteFill3,
2948
- {
2949
- style: {
2950
- background: PANEL_BG,
2951
- fontFamily: FONT_FAMILY7,
2952
- overflow: "hidden"
2953
- },
2954
- children: [
2955
- /* @__PURE__ */ jsx7(
2956
- "div",
2957
- {
2958
- style: {
2959
- position: "absolute",
2960
- inset: 0,
2961
- background: "radial-gradient(ellipse at 20% 30%, rgba(255,179,142,0.06), transparent 55%), radial-gradient(ellipse at 80% 70%, rgba(155,139,176,0.06), transparent 55%)"
2962
- }
2963
- }
2964
- ),
2965
- /* @__PURE__ */ jsx7(
2966
- "div",
2967
- {
2968
- style: {
2969
- position: "absolute",
2970
- left: 0,
2971
- top: 0,
2972
- bottom: 0,
2973
- width: "38%",
2974
- display: "flex",
2975
- alignItems: "center",
2976
- justifyContent: "center",
2977
- padding: 48
2978
- },
2979
- children: /* @__PURE__ */ jsx7(CodeEditor, { frame, accentColor })
2980
- }
2981
- ),
2982
- /* @__PURE__ */ jsxs7(
2983
- "div",
2984
- {
2985
- style: {
2986
- position: "absolute",
2987
- right: 0,
2988
- top: 0,
2989
- bottom: 0,
2990
- width: "62%",
2991
- borderLeft: "1px solid rgba(255,255,255,0.05)"
2992
- },
2993
- children: [
2994
- /* @__PURE__ */ jsxs7(
2995
- "div",
2996
- {
2997
- style: {
2998
- position: "absolute",
2999
- top: 22,
3000
- left: 24,
3001
- display: "flex",
3002
- alignItems: "center",
3003
- gap: 8,
3004
- zIndex: 5
3005
- },
3006
- children: [
3007
- /* @__PURE__ */ jsx7(
3008
- "div",
3009
- {
3010
- style: {
3011
- width: 8,
3012
- height: 8,
3013
- borderRadius: 4,
3014
- background: MINT,
3015
- boxShadow: `0 0 ${10 + successGlow * 12}px ${MINT}`
3016
- }
3017
- }
3018
- ),
3019
- /* @__PURE__ */ jsx7(
3020
- "div",
3021
- {
3022
- style: {
3023
- fontSize: 11,
3024
- fontFamily: MONO_FAMILY5,
3025
- color: "rgba(255,255,255,0.5)",
3026
- textTransform: "uppercase",
3027
- letterSpacing: "0.1em"
3028
- },
3029
- children: "Preview \xB7 HMR"
3030
- }
3031
- )
3032
- ]
3033
- }
3034
- ),
3035
- /* @__PURE__ */ jsx7(
3036
- "div",
3037
- {
3038
- style: {
3039
- position: "absolute",
3040
- inset: 0,
3041
- overflow: "hidden",
3042
- boxShadow: `inset 0 0 ${60 * successGlow}px rgba(127,174,122,${successGlow * 0.45})`
3043
- },
3044
- children: /* @__PURE__ */ jsx7(RightPane, {})
3045
- }
3046
- )
3047
- ]
3048
- }
3049
- )
3050
- ]
3051
- }
3052
- );
3053
- }
3054
-
3055
- // src/scenes/changelog-bite/config.ts
3056
- import { z } from "zod";
3057
- var paramsSchema = z.object({
3058
- label: z.string().default("Changelog").describe("Short eyebrow label (1\u20132 words)."),
3059
- title: z.string().default("Faster builds").describe("Headline (1 short sentence)."),
3060
- format: z.enum(["square", "portrait"]).default("square").describe("Aspect ratio. square: 1080\xD71080. portrait: 1080\xD71920."),
3061
- background: z.string().optional().describe("Frame background."),
3062
- cardBackground: z.string().optional().describe("Card panel background."),
3063
- accent: z.string().default("#ffb38e").describe('Accent color for label/highlights. Brand-bindable: pass "$brand:colors.accent" to track the project brand kit.'),
3064
- speed: z.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
3065
- // Structured-content slot for the before/after comparison panels. These are
3066
- // the JSON-serializable replacement for the inexpressible `oldContent`/
3067
- // `newContent` ReactNode props: supply the literal diff lines and they render
3068
- // in the panels. Omit them to show the baked sample diff.
3069
- oldLines: z.array(z.string()).optional().describe("BEFORE-panel content: one string per line (e.g. the old code). Rendered as monospace text. Omit to show the baked sample diff."),
3070
- newLines: z.array(z.string()).optional().describe("AFTER-panel content: one string per line (e.g. the new code). Rendered as monospace text. Omit to show the baked sample diff.")
3071
- }).passthrough();
3072
- var config = {
3073
- id: "changelog-bite",
3074
- component: ChangelogBite,
3075
- name: "Changelog Bite",
3076
- category: "scenes",
3077
- kind: "scene",
3078
- version: "0.1.1",
3079
- intent: "changelog",
3080
- description: "Short-form changelog post (square or portrait) with a label/title header and side-by-side old/new content panels. Designed for social-feed posts announcing a release.",
3081
- useWhen: "Twitter/X, Instagram, LinkedIn release posts. The portrait format works for Stories/Reels; square works for feeds. Pass oldLines/newLines (string[]) to fill the before/after comparison panels; omit them to show the baked sample diff.",
3082
- pairsWith: [],
3083
- avoidWith: ["product-launch-trailer"],
3084
- tier: "niche",
3085
- useCase: ["social-cut"],
3086
- tags: ["scene", "changelog", "release", "social", "comparison"],
3087
- mood: ["corporate", "tech-demo", "minimal"],
3088
- paramsSchema,
3089
- propDefaults: { label: "Changelog", title: "Faster builds", format: "square", accent: "#ffb38e", speed: 1 },
3090
- primitivesUsed: [],
3091
- examples: [
3092
- { name: "square-feed", mood: ["corporate"], params: { label: "Changelog", title: "Faster builds", format: "square", accent: "#ffb38e", speed: 1 } },
3093
- { name: "portrait-story", mood: ["minimal"], params: { label: "v2.1", title: "New API surface", format: "portrait", accent: "#9b8bb0", speed: 1 } }
3094
- ],
3095
- textParam: "title",
3096
- subtextParam: "label",
3097
- // label/title/oldLines/newLines ARE params — the diff CONTENT is now
3098
- // expressible (string[] panels, see oldLines/newLines). What remains baked is
3099
- // only the panel chrome: the BEFORE/AFTER corner badges and the mid-wipe
3100
- // footer labels. Omitting oldLines/newLines falls back to a baked sample diff
3101
- // (its literals are the params' documented defaults, not fixed copy).
3102
- fixedCopy: [
3103
- "BEFORE",
3104
- "AFTER",
3105
- // old/new panel corner badges
3106
- "before",
3107
- "after"
3108
- // mid-wipe footer labels
3109
- ],
3110
- tokens: [
3111
- { propPath: "accent", cssVar: "--cf-accent", fallback: "#ffb38e", brandKitPath: "colors.accent" }
3112
- ],
3113
- durationInFrames: 180,
3114
- fps: 30,
3115
- width: 1080,
3116
- height: 1080,
3117
- preview: { thumbnailFrame: 90, mode: "oneshot", defaultExample: "square-feed" }
3118
- };
3119
-
3120
- // src/scenes/live-code-compilation/config.ts
3121
- import { z as z2 } from "zod";
3122
- var paramsSchema2 = z2.object({
3123
- accentColor: z2.string().default("#7fae7a").describe("Accent for build success indicators."),
3124
- speed: z2.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
3125
- }).passthrough();
3126
- var config2 = {
3127
- id: "live-code-compilation",
3128
- component: LiveCodeCompilation,
3129
- name: "Live Code Compilation",
3130
- category: "scenes",
3131
- kind: "scene",
3132
- version: "0.1.1",
3133
- intent: "feature-walkthrough",
3134
- description: "Composed scene showing code typing alongside a live build/output panel. Self-contained mini-product-demo for developer-tooling content. Compiles green when the code reaches a working state.",
3135
- useWhen: 'Developer-tooling product demos, build-time-savings claims, "watch the magic" moments for compiler/transpiler/builder tools. Pair with a mesh-gradient-bg behind for premium feel. Avoid for non-build content.',
3136
- pairsWith: ["mesh-gradient-bg", "pulsing-indicator", "success-confetti"],
3137
- avoidWith: ["changelog-bite"],
3138
- tier: "niche",
3139
- useCase: ["full-scene", "explainer"],
3140
- tags: ["scene", "code", "build", "compilation", "developer", "demo"],
3141
- mood: ["tech-demo", "corporate"],
3142
- paramsSchema: paramsSchema2,
3143
- propDefaults: { accentColor: "#7fae7a", speed: 1 },
3144
- primitivesUsed: [],
3145
- examples: [
3146
- { name: "green-build", mood: ["tech-demo"], params: { accentColor: "#7fae7a", speed: 1 } },
3147
- { name: "brand-blue", mood: ["corporate"], params: { accentColor: "#7b93b0", speed: 1 } }
3148
- ],
3149
- textParam: null,
3150
- subtextParam: null,
3151
- // The typed program + rendered output are BAKED — no param sets the code or
3152
- // the resulting button label.
3153
- fixedCopy: [
3154
- "Button",
3155
- // editor filename tab
3156
- "export function Button() { \u2026 }",
3157
- // baked sample component source
3158
- "Ship it"
3159
- // the rendered button label in the live output panel
3160
- ],
3161
- tokens: [
3162
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3163
- ],
3164
- durationInFrames: 240,
3165
- fps: 30,
3166
- width: 1920,
3167
- height: 1080,
3168
- preview: { thumbnailFrame: 120, mode: "oneshot", defaultExample: "green-build" }
3169
- };
3170
-
3171
- // src/scenes/product-launch-trailer/config.ts
3172
- import { z as z3 } from "zod";
3173
- var paramsSchema3 = z3.object({
3174
- logoLabel: z3.string().default("cf").describe("Short logo glyph (1\u20133 characters)."),
3175
- productName: z3.string().default("cueframe").describe("Product name (1\u20133 words)."),
3176
- versionLabel: z3.string().default("v2.1").describe("Version or release tag."),
3177
- accentPeach: z3.string().default("#e8782b").describe("Primary accent color (peach in default)."),
3178
- accentLavender: z3.string().default("#9b8bb0").describe("Secondary accent color (lavender in default)."),
3179
- accentMint: z3.string().default("#7fae7a").describe("Tertiary accent color (mint in default)."),
3180
- background: z3.string().default("#14100c").describe("Frame background."),
3181
- speed: z3.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
3182
- }).passthrough();
3183
- var config3 = {
3184
- id: "product-launch-trailer",
3185
- component: ProductLaunchTrailer,
3186
- name: "Product Launch Trailer",
3187
- category: "scenes",
3188
- kind: "scene",
3189
- version: "0.1.2",
3190
- intent: "product-trailer",
3191
- description: "Full-frame multi-phase trailer: pulsing logo intro \u2192 app-shell flyover \u2192 outro with confetti. ~8-second self-contained scene with three named accent colors. Use as a reference template for client-trailer work or as a drop-in launch video.",
3192
- useWhen: "Product launches, version releases, hero pages, anywhere a polished 8-second trailer fits. Customize via the brand-kit-driven accent triplet + product copy. Avoid editing the timing \u2014 the anchor object inside is tuned.",
3193
- pairsWith: [],
3194
- avoidWith: ["changelog-bite", "live-code-compilation"],
3195
- tier: "recommended",
3196
- useCase: ["intro", "full-scene"],
3197
- tags: ["scene", "trailer", "product", "launch", "composition", "multi-phase"],
3198
- mood: ["cinematic", "corporate", "aggressive"],
3199
- paramsSchema: paramsSchema3,
3200
- propDefaults: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: "#e8782b", accentLavender: "#9b8bb0", accentMint: "#7fae7a", background: "#14100c", speed: 1 },
3201
- primitivesUsed: [],
3202
- examples: [
3203
- { name: "cueframe-launch", mood: ["corporate"], params: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: "#e8782b", accentLavender: "#9b8bb0", accentMint: "#7fae7a", background: "#14100c", speed: 1 } }
3204
- ],
3205
- textParam: "productName",
3206
- subtextParam: "versionLabel",
3207
- // logoLabel/productName/versionLabel ARE params; these are the BAKED strings
3208
- // (FauxBentoGrid cards + FauxCodeBlock body) no param can change.
3209
- fixedCopy: [
3210
- "Animations",
3211
- "Spring-tuned",
3212
- // bento card 1
3213
- "Transitions",
3214
- "Cinematic",
3215
- // bento card 2
3216
- "Backgrounds",
3217
- "Volumetric",
3218
- // bento card 3
3219
- "Compositions",
3220
- "Production-ready",
3221
- // bento card 4
3222
- "scene.tsx",
3223
- // faux code block title bar
3224
- "import { Trailer } from 'remocn'",
3225
- '<Trailer label="v1.0" accent="lavender" />'
3226
- ],
3227
- tokens: [
3228
- { propPath: "accentPeach", cssVar: "--cf-accent", fallback: "#e8782b", brandKitPath: "colors.accent" },
3229
- { propPath: "accentLavender", cssVar: "--cf-accent-2", fallback: "#9b8bb0", brandKitPath: "colors.accentMuted" },
3230
- { propPath: "accentMint", cssVar: "--cf-accent-3", fallback: "#7fae7a", brandKitPath: "colors.accentMuted" },
3231
- { propPath: "background", cssVar: "--cf-bg", fallback: "#14100c", brandKitPath: "colors.background" }
3232
- ],
3233
- durationInFrames: 240,
3234
- fps: 30,
3235
- width: 1920,
3236
- height: 1080,
3237
- preview: { thumbnailFrame: 120, mode: "oneshot", defaultExample: "cueframe-launch" }
3238
- };
3239
-
3240
- // src/scenes/hero-device-assemble/config.ts
3241
- import { z as z4 } from "zod";
3242
- var paramsSchema4 = z4.object({
3243
- assembleStart: z4.number().min(0).default(0).describe("Frame at which the 3D layer-stack assembly spring fires. Use to delay the assemble after a title beat."),
3244
- device: z4.enum(["laptop", "phone"]).default("laptop").describe("Device silhouette. `laptop` adds a chassis base under the screen; `phone` uses a tall portrait bezel."),
3245
- accentColor: z4.string().default("#7fae7a").describe("Accent color for the mock-UI sidebar bar, the highlighted dashboard card, and brand surfaces inside the screen."),
3246
- speed: z4.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. >1 condenses the assemble + screen wake + shimmer."),
3247
- className: z4.string().optional().describe("Optional className passthrough on the outer absolute frame.")
3248
- }).passthrough();
3249
- var config4 = {
3250
- id: "hero-device-assemble",
3251
- component: HeroDeviceAssemble,
3252
- name: "Hero Device Assemble",
3253
- category: "scenes",
3254
- kind: "scene",
3255
- version: "0.1.1",
3256
- intent: "assemble-hero-device",
3257
- description: "Hero shot where a laptop or phone assembles in 3D from exploded layers (lid, base, bezel, screen) into a settled device, then the screen wakes from black to a mock UI and a shimmer sweeps across. Self-contained ~3-second product reveal beat.",
3258
- useWhen: 'App / SaaS hero loops, product-page intros, "see it on your device" moments, ad pre-rolls. Use `device="phone"` for mobile-first products. Pair with a title card before or a CTA after. Avoid for short clips <4s \u2014 the assemble spring + wake + shimmer needs ~80 frames to land. Avoid for vertical/9:16 with `device="laptop"` \u2014 the laptop aspect cuts off; switch to `device="phone"`.',
3259
- pairsWith: ["kinetic-type-mask", "pulsing-indicator"],
3260
- avoidWith: ["changelog-bite"],
3261
- tier: "standard",
3262
- useCase: ["intro", "full-scene"],
3263
- tags: ["scene", "hero", "device", "mockup", "laptop", "phone", "3d", "assemble", "product"],
3264
- mood: ["cinematic", "tech-demo", "corporate"],
3265
- paramsSchema: paramsSchema4,
3266
- propDefaults: { assembleStart: 0, device: "laptop", accentColor: "#7fae7a", speed: 1 },
3267
- primitivesUsed: [],
3268
- examples: [
3269
- {
3270
- name: "laptop-green",
3271
- mood: ["tech-demo", "corporate"],
3272
- params: { assembleStart: 0, device: "laptop", accentColor: "#7fae7a", speed: 1 },
3273
- description: "Default \u2014 laptop assemble with green accent on the mock dashboard. Use for SaaS hero loops."
3274
- },
3275
- {
3276
- name: "phone-lavender",
3277
- mood: ["cinematic"],
3278
- params: { assembleStart: 0, device: "phone", accentColor: "#9b8bb0", speed: 1 },
3279
- description: "Phone variant with lavender accent. Use for mobile-first product launches."
3280
- },
3281
- {
3282
- name: "delayed-laptop",
3283
- mood: ["cinematic"],
3284
- params: { assembleStart: 30, device: "laptop", accentColor: "#7b93b0", speed: 1 },
3285
- description: "Hold black for 1s before assembling. Use when stacking after a title-card beat."
3286
- }
3287
- ],
3288
- textParam: null,
3289
- subtextParam: null,
3290
- tokens: [
3291
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3292
- ],
3293
- durationInFrames: 240,
3294
- fps: 30,
3295
- width: 1920,
3296
- height: 1080,
3297
- preview: { thumbnailFrame: 75, mode: "oneshot", defaultExample: "laptop-green" }
3298
- };
3299
-
3300
- // src/scenes/pricing-tier-focus/config.ts
3301
- import { z as z5 } from "zod";
3302
- var paramsSchema5 = z5.object({
3303
- focusedTier: z5.union([
3304
- z5.literal(0),
3305
- z5.literal(1),
3306
- z5.literal(2),
3307
- z5.literal("0"),
3308
- z5.literal("1"),
3309
- z5.literal("2")
3310
- ]).default(1).describe('Index of the tier to focus (0=Free, 1=Pro, 2=Enterprise). The focused tier scales up, lifts, and gets a "Popular" badge + shimmering CTA; siblings dim and blur.'),
3311
- accentColor: z5.string().default("#7fae7a").describe('Accent color for the focused-tier border glow, "Popular" badge, feature checks, and CTA fill.'),
3312
- speed: z5.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
3313
- className: z5.string().optional().describe("Optional className passthrough on the outer flex frame.")
3314
- }).passthrough();
3315
- var config5 = {
3316
- id: "pricing-tier-focus",
3317
- component: PricingTierFocus,
3318
- name: "Pricing Tier Focus",
3319
- category: "scenes",
3320
- kind: "scene",
3321
- version: "0.1.1",
3322
- intent: "showcase-pricing",
3323
- description: "Three-card pricing layout (Free / Pro / Enterprise) where one tier scales up, lifts, and shimmers while the others dim and blur. Tier copy is hardcoded; the agent picks which tier to spotlight via `focusedTier`.",
3324
- useWhen: 'SaaS pricing reveals, plan-upgrade promos, "this is the one to pick" moments. Use `focusedTier=1` for Pro-default upsell, `2` for enterprise sales decks. Avoid for short clips <8s \u2014 the focus spring lands at frame 50, shimmer at 90. Avoid for vertical/9:16 unless rebuilt \u2014 three side-by-side cards need 16:9 width.',
3325
- pairsWith: ["success-confetti"],
3326
- avoidWith: ["changelog-bite"],
3327
- tier: "standard",
3328
- useCase: ["full-scene", "explainer"],
3329
- tags: ["scene", "pricing", "tiers", "saas", "upsell", "plans"],
3330
- mood: ["corporate", "tech-demo", "minimal"],
3331
- paramsSchema: paramsSchema5,
3332
- propDefaults: { focusedTier: 1, accentColor: "#7fae7a", speed: 1 },
3333
- primitivesUsed: [],
3334
- examples: [
3335
- {
3336
- name: "pro-upsell",
3337
- mood: ["corporate"],
3338
- params: { focusedTier: 1, accentColor: "#7fae7a", speed: 1 },
3339
- description: "Default \u2014 focus the middle Pro tier with green accent. Best for self-serve SaaS landing pages."
3340
- },
3341
- {
3342
- name: "enterprise-sales",
3343
- mood: ["corporate", "cinematic"],
3344
- params: { focusedTier: 2, accentColor: "#9b8bb0", speed: 1 },
3345
- description: "Spotlight Enterprise with lavender accent. Use in sales-deck loops or B2B trailers."
3346
- },
3347
- {
3348
- name: "free-onboarding",
3349
- mood: ["playful", "minimal"],
3350
- params: { focusedTier: 0, accentColor: "#7b93b0", speed: 1 },
3351
- description: "Spotlight the Free tier with sky-blue accent. Use in product-led-growth onboarding videos."
3352
- }
3353
- ],
3354
- textParam: null,
3355
- subtextParam: null,
3356
- // focusedTier picks WHICH card to spotlight; all tier copy/prices are BAKED.
3357
- // The scene that exists to show pricing cannot carry the agent's pricing.
3358
- fixedCopy: [
3359
- "Free",
3360
- "$0",
3361
- "/mo",
3362
- "1 project",
3363
- "Community support",
3364
- "1 GB storage",
3365
- "Get started",
3366
- "Pro",
3367
- "$24",
3368
- "/mo",
3369
- "Unlimited projects",
3370
- "Priority support",
3371
- "100 GB storage",
3372
- "Advanced analytics",
3373
- "Buy Pro",
3374
- "Enterprise",
3375
- "Dedicated manager",
3376
- "Unlimited storage",
3377
- "Contact sales",
3378
- "Popular"
3379
- // badge on the focused tier
3380
- ],
3381
- tokens: [
3382
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3383
- ],
3384
- durationInFrames: 240,
3385
- fps: 30,
3386
- width: 1920,
3387
- height: 1080,
3388
- preview: { thumbnailFrame: 110, mode: "oneshot", defaultExample: "pro-upsell" }
3389
- };
3390
-
3391
- // src/scenes/landing-code-showcase/config.ts
3392
- import { z as z6 } from "zod";
3393
- var paramsSchema6 = z6.object({
3394
- accentColor: z6.string().default("#FFB38E").describe("Accent color for the code editor caret, syntax highlight on local identifiers, and the success-glow halo on the right preview pane."),
3395
- speed: z6.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. The internal timeline assumes 30fps base; >1 condenses the whole 24s sequence.")
3396
- }).passthrough();
3397
- var config6 = {
3398
- id: "landing-code-showcase",
3399
- component: LandingCodeShowcase,
3400
- name: "Landing Code Showcase",
3401
- category: "scenes",
3402
- kind: "scene",
3403
- version: "0.1.1",
3404
- intent: "showcase-landing-code",
3405
- description: 'Two-pane "code \u2192 live preview" hero loop. Left: a glassy editor types JSX one component at a time. Right: each typed component renders inside a warm pastel stage, with `spatial-push` and `frosted-glass-wipe` transitions between beats (BlurReveal \u2192 DashboardPopulate \u2192 MaskedSlideReveal \u2192 TerminalToBrowserDeploy). Self-contained 24-second showcase loop for component-library marketing.',
3406
- useWhen: 'Component library / framework / Remotion-style SDK landing pages, hero loops, "build with us" demos, conference talk title cards. Avoid for short clips <16s \u2014 the staged code-typing pace cannot be compressed without losing the reveal beats. Avoid for vertical/9:16 unless rebuilt \u2014 split-pane layout assumes 16:9.',
3407
- pairsWith: [],
3408
- avoidWith: ["changelog-bite", "product-launch-trailer"],
3409
- tier: "recommended",
3410
- useCase: ["full-scene"],
3411
- tags: ["scene", "landing", "code", "showcase", "hero", "split-pane", "components", "library"],
3412
- mood: ["cinematic", "tech-demo", "editorial"],
3413
- paramsSchema: paramsSchema6,
3414
- propDefaults: { accentColor: "#FFB38E", speed: 1 },
3415
- primitivesUsed: [
3416
- "dashboard-populate",
3417
- "frosted-glass-wipe",
3418
- "spatial-push",
3419
- "terminal-to-browser-deploy"
3420
- ],
3421
- examples: [
3422
- {
3423
- name: "peach-default",
3424
- mood: ["cinematic", "editorial"],
3425
- params: { accentColor: "#FFB38E", speed: 1 },
3426
- description: "Default warm peach accent. Use for premium dev-tool landing pages where the pastel stage matches the brand."
3427
- },
3428
- {
3429
- name: "mint-hero",
3430
- mood: ["tech-demo"],
3431
- params: { accentColor: "#7fae7a", speed: 1 },
3432
- description: 'Mint accent \u2014 pairs well when the brand already uses green for "ship/deploy" semantics.'
3433
- }
3434
- ],
3435
- textParam: null,
3436
- subtextParam: null,
3437
- // No prop changes the marketing copy or the typed program — fork via
3438
- // get_component_source to rewrite (index.tsx STEPS / BlurRevealScene /
3439
- // MaskedSlideScene / TerminalScene).
3440
- fixedCopy: [
3441
- "Build faster.",
3442
- // BlurReveal headline (right preview pane)
3443
- "Ship to production.",
3444
- // MaskedSlideReveal headline
3445
- "Preview \xB7 HMR",
3446
- // live-preview label
3447
- "scene.tsx",
3448
- // editor title-bar filename
3449
- "remocn.dev",
3450
- // deploy URL inside the embedded terminal-to-browser beat
3451
- 'import { BlurReveal, DashboardPopulate, MaskedSlideReveal, TerminalToBrowserDeploy, Transition } from "@/components/remocn"',
3452
- '<BlurReveal text="Build faster." />',
3453
- '<MaskedSlideReveal text="Ship to production." />'
3454
- ],
3455
- tokens: [
3456
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#FFB38E", brandKitPath: "colors.accent" }
3457
- ],
3458
- durationInFrames: LANDING_CODE_SHOWCASE_DURATION,
3459
- fps: 30,
3460
- width: 1920,
3461
- height: 1080,
3462
- preview: { thumbnailFrame: 540, mode: "oneshot", defaultExample: "peach-default" }
3463
- };
3464
-
3465
- // src/scenes/terminal-to-browser-deploy/config.ts
3466
- import { z as z7 } from "zod";
3467
- var paramsSchema7 = z7.object({
3468
- siteUrl: z7.string().default("https://app.example.com").describe("Deploy target URL shown on the success line and inside the browser address bar."),
3469
- accentColor: z7.string().default("#7fae7a").describe("Accent color for the deploy success line, browser hero copy, and CTA button."),
3470
- speed: z7.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. >1 condenses the typewriter + collapse + browser reveal."),
3471
- className: z7.string().optional().describe("Optional className passthrough on the outer absolute frame.")
3472
- }).passthrough();
3473
- var config7 = {
3474
- id: "terminal-to-browser-deploy",
3475
- component: TerminalToBrowserDeploy,
3476
- name: "Terminal to Browser Deploy",
3477
- category: "scenes",
3478
- kind: "scene",
3479
- version: "0.1.1",
3480
- intent: "animate-deploy-flow",
3481
- description: 'Full-frame deploy beat: terminal types `pnpm deploy`, prints build/bundle/upload steps, then the success line collapses-and-blurs while a polished marketing browser springs forward at the URL. Self-contained ~6-second story for "ship it" moments.',
3482
- useWhen: 'Developer-tooling launches, deploy/CI/CD product demos, "from commit to live" moments, hero loops behind a CTA. Pair with `success-confetti` or a short outro card. Avoid for short clips <10s where the terminal collapse never plays. Avoid for vertical/9:16 unless the terminal + browser geometry is rebuilt \u2014 internal coordinates are baked at 1280\xD7720.',
3483
- pairsWith: ["success-confetti", "pulsing-indicator"],
3484
- avoidWith: ["changelog-bite"],
3485
- tier: "recommended",
3486
- useCase: ["outro", "full-scene"],
3487
- tags: ["scene", "terminal", "deploy", "browser", "cli", "developer", "shipping", "cicd"],
3488
- mood: ["tech-demo", "cinematic", "corporate"],
3489
- paramsSchema: paramsSchema7,
3490
- propDefaults: { siteUrl: "https://app.example.com", accentColor: "#7fae7a", speed: 1 },
3491
- primitivesUsed: [],
3492
- examples: [
3493
- {
3494
- name: "green-ship",
3495
- mood: ["tech-demo"],
3496
- params: { siteUrl: "https://app.example.com", accentColor: "#7fae7a", speed: 1 },
3497
- description: "Default green-build deploy. Use for generic developer-tool demos."
3498
- },
3499
- {
3500
- name: "brand-blue",
3501
- mood: ["corporate"],
3502
- params: { siteUrl: "https://acme.dev", accentColor: "#7b93b0", speed: 1 },
3503
- description: "Corporate blue accent on a real-looking domain. Use when the brand kit resolves the accent."
3504
- },
3505
- {
3506
- name: "fast-edit",
3507
- mood: ["tech-demo", "aggressive"],
3508
- params: { siteUrl: "https://remocn.dev", accentColor: "#9b8bb0", speed: 1.4 },
3509
- description: "1.4x speed cut, lavender accent. Use inside compilation montages where the deploy beat is one of several."
3510
- }
3511
- ],
3512
- textParam: "siteUrl",
3513
- subtextParam: null,
3514
- // siteUrl is a param (it interpolates into the success line + address bar);
3515
- // the terminal log lines + browser chrome/hero are BAKED.
3516
- fixedCopy: [
3517
- "$ pnpm deploy",
3518
- "\u2192 Building project...",
3519
- "\u2192 Bundling assets...",
3520
- "\u2192 Uploading...",
3521
- "\u2713 Deployed to <siteUrl>",
3522
- // siteUrl param interpolates here
3523
- "Acme",
3524
- "Features",
3525
- "Pricing",
3526
- "Docs",
3527
- // browser nav (Acme brand is fixed)
3528
- "Ship faster.",
3529
- "Get started \u2192"
3530
- // browser hero headline + CTA
3531
- ],
3532
- tokens: [
3533
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3534
- ],
3535
- durationInFrames: 240,
3536
- fps: 30,
3537
- width: 1920,
3538
- height: 1080,
3539
- preview: { thumbnailFrame: 165, mode: "oneshot", defaultExample: "green-ship" }
3540
- };
3541
-
3542
- // src/scenes/index.ts
3543
- var catalog = [
3544
- config,
3545
- config2,
3546
- config3,
3547
- config4,
3548
- config5,
3549
- config6,
3550
- config7
3551
- ];
3552
-
3553
- export {
3554
- ChangelogBite,
3555
- LiveCodeCompilation,
3556
- ProductLaunchTrailer,
3557
- HeroDeviceAssemble,
3558
- PricingTierFocus,
3559
- TerminalToBrowserDeploy,
3560
- LandingCodeShowcase,
3561
- catalog
3562
- };
3563
- //# sourceMappingURL=chunk-WPGKIPCO.js.map