@appinternalleads/ui 0.4.0 → 0.4.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 (890) hide show
  1. package/dist/cjs/agent/AgentComponent.js +1 -1
  2. package/dist/cjs/agent/AgentComponent.js.map +1 -1
  3. package/dist/cjs/agent/manifests.js +81 -1
  4. package/dist/cjs/agent/manifests.js.map +1 -1
  5. package/dist/cjs/agent/result.js +6 -0
  6. package/dist/cjs/agent/result.js.map +1 -1
  7. package/dist/cjs/components/catalog.js +18 -0
  8. package/dist/cjs/components/catalog.js.map +1 -1
  9. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js +21 -0
  10. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  11. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js +6 -0
  12. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  13. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js +89 -0
  14. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  15. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js +62 -0
  16. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  17. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js +20 -0
  18. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  19. package/dist/cjs/components/onboarding/animated-status/contract.js +87 -0
  20. package/dist/cjs/components/onboarding/animated-status/contract.js.map +1 -0
  21. package/dist/cjs/components/onboarding/animated-status/engine.js +40 -0
  22. package/dist/cjs/components/onboarding/animated-status/engine.js.map +1 -0
  23. package/dist/cjs/components/onboarding/animated-status/index.js +20 -0
  24. package/dist/cjs/components/onboarding/animated-status/index.js.map +1 -0
  25. package/dist/cjs/components/onboarding/animated-status/presets.json +126 -0
  26. package/dist/cjs/components/onboarding/animated-status/riv.js +7 -0
  27. package/dist/cjs/components/onboarding/animated-status/riv.js.map +1 -0
  28. package/dist/cjs/components/onboarding/index.js +4 -0
  29. package/dist/cjs/components/onboarding/index.js.map +1 -1
  30. package/dist/cjs/components/onboarding/presets.js +90 -84
  31. package/dist/cjs/components/onboarding/presets.js.map +1 -1
  32. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js +43 -6
  33. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  34. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js +111 -0
  35. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  36. package/dist/cjs/components/onboarding/send-completion/SendStage.js +37 -0
  37. package/dist/cjs/components/onboarding/send-completion/SendStage.js.map +1 -0
  38. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js +6 -0
  39. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  40. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js +107 -0
  41. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  42. package/dist/cjs/components/onboarding/send-completion/SendStill.js +17 -0
  43. package/dist/cjs/components/onboarding/send-completion/SendStill.js.map +1 -0
  44. package/dist/cjs/components/onboarding/send-completion/contract.js +83 -0
  45. package/dist/cjs/components/onboarding/send-completion/contract.js.map +1 -0
  46. package/dist/cjs/components/onboarding/send-completion/engine.js +32 -0
  47. package/dist/cjs/components/onboarding/send-completion/engine.js.map +1 -0
  48. package/dist/cjs/components/onboarding/send-completion/index.js +22 -0
  49. package/dist/cjs/components/onboarding/send-completion/index.js.map +1 -0
  50. package/dist/cjs/components/onboarding/send-completion/presets.json +132 -0
  51. package/dist/cjs/components/onboarding/send-completion/riv.js +7 -0
  52. package/dist/cjs/components/onboarding/send-completion/riv.js.map +1 -0
  53. package/dist/cjs/components/onboarding/shared/actions-data.js +2 -0
  54. package/dist/cjs/components/onboarding/shared/actions-data.js.map +1 -1
  55. package/dist/cjs/components/onboarding/shared/configColor.js +76 -0
  56. package/dist/cjs/components/onboarding/shared/configColor.js.map +1 -0
  57. package/dist/cjs/components/onboarding/shared/contract.js +4 -0
  58. package/dist/cjs/components/onboarding/shared/contract.js.map +1 -1
  59. package/dist/cjs/components/onboarding/shared/describe.js +1 -1
  60. package/dist/cjs/components/onboarding/shared/describe.js.map +1 -1
  61. package/dist/cjs/components/onboarding/shared/mock.js +2 -0
  62. package/dist/cjs/components/onboarding/shared/mock.js.map +1 -1
  63. package/dist/cjs/components/onboarding/views.js +8 -0
  64. package/dist/cjs/components/onboarding/views.js.map +1 -1
  65. package/dist/cjs/motion/MotionPlayer.js +42 -0
  66. package/dist/cjs/motion/MotionPlayer.js.map +1 -0
  67. package/dist/cjs/motion/agent.js +323 -0
  68. package/dist/cjs/motion/agent.js.map +1 -0
  69. package/dist/cjs/motion/cat/Cat.js +79 -0
  70. package/dist/cjs/motion/cat/Cat.js.map +1 -0
  71. package/dist/cjs/motion/cat/animation.js +204 -0
  72. package/dist/cjs/motion/cat/animation.js.map +1 -0
  73. package/dist/cjs/motion/cat/art.generated.js +37 -0
  74. package/dist/cjs/motion/cat/art.generated.js.map +1 -0
  75. package/dist/cjs/motion/cat/config.js +136 -0
  76. package/dist/cjs/motion/cat/config.js.map +1 -0
  77. package/dist/cjs/motion/cat/index.js +75 -0
  78. package/dist/cjs/motion/cat/index.js.map +1 -0
  79. package/dist/cjs/motion/cat/rig.js +99 -0
  80. package/dist/cjs/motion/cat/rig.js.map +1 -0
  81. package/dist/cjs/motion/cat/scene.js +148 -0
  82. package/dist/cjs/motion/cat/scene.js.map +1 -0
  83. package/dist/cjs/motion/configurable/config.js +477 -0
  84. package/dist/cjs/motion/configurable/config.js.map +1 -0
  85. package/dist/cjs/motion/configurable/controls.js +44 -0
  86. package/dist/cjs/motion/configurable/controls.js.map +1 -0
  87. package/dist/cjs/motion/easing.js +62 -0
  88. package/dist/cjs/motion/easing.js.map +1 -0
  89. package/dist/cjs/motion/fit.js +12 -0
  90. package/dist/cjs/motion/fit.js.map +1 -0
  91. package/dist/cjs/motion/index.js +101 -0
  92. package/dist/cjs/motion/index.js.map +1 -0
  93. package/dist/cjs/motion/neon/GlowRenderer.js +18 -0
  94. package/dist/cjs/motion/neon/GlowRenderer.js.map +1 -0
  95. package/dist/cjs/motion/neon/NeonCanvas.js +97 -0
  96. package/dist/cjs/motion/neon/NeonCanvas.js.map +1 -0
  97. package/dist/cjs/motion/neon/NeonText.js +108 -0
  98. package/dist/cjs/motion/neon/NeonText.js.map +1 -0
  99. package/dist/cjs/motion/neon/NeonTextFrame.js +36 -0
  100. package/dist/cjs/motion/neon/NeonTextFrame.js.map +1 -0
  101. package/dist/cjs/motion/neon/artwork.js +102 -0
  102. package/dist/cjs/motion/neon/artwork.js.map +1 -0
  103. package/dist/cjs/motion/neon/audio.js +165 -0
  104. package/dist/cjs/motion/neon/audio.js.map +1 -0
  105. package/dist/cjs/motion/neon/config.js +334 -0
  106. package/dist/cjs/motion/neon/config.js.map +1 -0
  107. package/dist/cjs/motion/neon/flicker.js +196 -0
  108. package/dist/cjs/motion/neon/flicker.js.map +1 -0
  109. package/dist/cjs/motion/neon/fonts.js +52 -0
  110. package/dist/cjs/motion/neon/fonts.js.map +1 -0
  111. package/dist/cjs/motion/neon/frame.js +24 -0
  112. package/dist/cjs/motion/neon/frame.js.map +1 -0
  113. package/dist/cjs/motion/neon/glitch.js +114 -0
  114. package/dist/cjs/motion/neon/glitch.js.map +1 -0
  115. package/dist/cjs/motion/neon/index.js +119 -0
  116. package/dist/cjs/motion/neon/index.js.map +1 -0
  117. package/dist/cjs/motion/neon/layers.js +68 -0
  118. package/dist/cjs/motion/neon/layers.js.map +1 -0
  119. package/dist/cjs/motion/neon/material.js +56 -0
  120. package/dist/cjs/motion/neon/material.js.map +1 -0
  121. package/dist/cjs/motion/neon/random.js +43 -0
  122. package/dist/cjs/motion/neon/random.js.map +1 -0
  123. package/dist/cjs/motion/neon/scene.js +549 -0
  124. package/dist/cjs/motion/neon/scene.js.map +1 -0
  125. package/dist/cjs/motion/neon/synth.js +213 -0
  126. package/dist/cjs/motion/neon/synth.js.map +1 -0
  127. package/dist/cjs/motion/neon/typography.js +81 -0
  128. package/dist/cjs/motion/neon/typography.js.map +1 -0
  129. package/dist/cjs/motion/neon/wall.js +113 -0
  130. package/dist/cjs/motion/neon/wall.js.map +1 -0
  131. package/dist/cjs/motion/paperfold/PaperFold.js +40 -0
  132. package/dist/cjs/motion/paperfold/PaperFold.js.map +1 -0
  133. package/dist/cjs/motion/paperfold/PaperFoldFrame.js +290 -0
  134. package/dist/cjs/motion/paperfold/PaperFoldFrame.js.map +1 -0
  135. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js +59 -0
  136. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  137. package/dist/cjs/motion/paperfold/art.js +388 -0
  138. package/dist/cjs/motion/paperfold/art.js.map +1 -0
  139. package/dist/cjs/motion/paperfold/config.js +103 -0
  140. package/dist/cjs/motion/paperfold/config.js.map +1 -0
  141. package/dist/cjs/motion/paperfold/controls.js +493 -0
  142. package/dist/cjs/motion/paperfold/controls.js.map +1 -0
  143. package/dist/cjs/motion/paperfold/engine.js +722 -0
  144. package/dist/cjs/motion/paperfold/engine.js.map +1 -0
  145. package/dist/cjs/motion/paperfold/fonts.js +25 -0
  146. package/dist/cjs/motion/paperfold/fonts.js.map +1 -0
  147. package/dist/cjs/motion/paperfold/index.js +113 -0
  148. package/dist/cjs/motion/paperfold/index.js.map +1 -0
  149. package/dist/cjs/motion/paperfold/manipulate.js +170 -0
  150. package/dist/cjs/motion/paperfold/manipulate.js.map +1 -0
  151. package/dist/cjs/motion/paperfold/presets.js +119 -0
  152. package/dist/cjs/motion/paperfold/presets.js.map +1 -0
  153. package/dist/cjs/motion/paperfold/template.js +40 -0
  154. package/dist/cjs/motion/paperfold/template.js.map +1 -0
  155. package/dist/cjs/motion/player.js +203 -0
  156. package/dist/cjs/motion/player.js.map +1 -0
  157. package/dist/cjs/motion/promo/PromoFrame.js +293 -0
  158. package/dist/cjs/motion/promo/PromoFrame.js.map +1 -0
  159. package/dist/cjs/motion/promo/PromoShowcasePlayer.js +59 -0
  160. package/dist/cjs/motion/promo/PromoShowcasePlayer.js.map +1 -0
  161. package/dist/cjs/motion/promo/config.js +565 -0
  162. package/dist/cjs/motion/promo/config.js.map +1 -0
  163. package/dist/cjs/motion/promo/controls.js +571 -0
  164. package/dist/cjs/motion/promo/controls.js.map +1 -0
  165. package/dist/cjs/motion/promo/easing.js +35 -0
  166. package/dist/cjs/motion/promo/easing.js.map +1 -0
  167. package/dist/cjs/motion/promo/engine.js +567 -0
  168. package/dist/cjs/motion/promo/engine.js.map +1 -0
  169. package/dist/cjs/motion/promo/fonts.js +20 -0
  170. package/dist/cjs/motion/promo/fonts.js.map +1 -0
  171. package/dist/cjs/motion/promo/icons.js +29 -0
  172. package/dist/cjs/motion/promo/icons.js.map +1 -0
  173. package/dist/cjs/motion/promo/index.js +73 -0
  174. package/dist/cjs/motion/promo/index.js.map +1 -0
  175. package/dist/cjs/motion/promo/presets.js +44 -0
  176. package/dist/cjs/motion/promo/presets.js.map +1 -0
  177. package/dist/cjs/motion/promo/template.js +38 -0
  178. package/dist/cjs/motion/promo/template.js.map +1 -0
  179. package/dist/cjs/motion/replication2/Replication2Player.js +93 -0
  180. package/dist/cjs/motion/replication2/Replication2Player.js.map +1 -0
  181. package/dist/cjs/motion/replication2/config.js +352 -0
  182. package/dist/cjs/motion/replication2/config.js.map +1 -0
  183. package/dist/cjs/motion/replication2/controls.js +286 -0
  184. package/dist/cjs/motion/replication2/controls.js.map +1 -0
  185. package/dist/cjs/motion/replication2/driver.js +68 -0
  186. package/dist/cjs/motion/replication2/driver.js.map +1 -0
  187. package/dist/cjs/motion/replication2/easing.js +97 -0
  188. package/dist/cjs/motion/replication2/easing.js.map +1 -0
  189. package/dist/cjs/motion/replication2/engine.js +481 -0
  190. package/dist/cjs/motion/replication2/engine.js.map +1 -0
  191. package/dist/cjs/motion/replication2/html.js +88 -0
  192. package/dist/cjs/motion/replication2/html.js.map +1 -0
  193. package/dist/cjs/motion/replication2/index.js +61 -0
  194. package/dist/cjs/motion/replication2/index.js.map +1 -0
  195. package/dist/cjs/motion/replication2/measure.js +30 -0
  196. package/dist/cjs/motion/replication2/measure.js.map +1 -0
  197. package/dist/cjs/motion/replication2/metrics.js +10 -0
  198. package/dist/cjs/motion/replication2/metrics.js.map +1 -0
  199. package/dist/cjs/motion/replication2/presets.js +67 -0
  200. package/dist/cjs/motion/replication2/presets.js.map +1 -0
  201. package/dist/cjs/motion/replication2/riv.js +7 -0
  202. package/dist/cjs/motion/replication2/riv.js.map +1 -0
  203. package/dist/cjs/motion/replication2/rive-contract.js +158 -0
  204. package/dist/cjs/motion/replication2/rive-contract.js.map +1 -0
  205. package/dist/cjs/motion/replication2/template.js +35 -0
  206. package/dist/cjs/motion/replication2/template.js.map +1 -0
  207. package/dist/cjs/motion/sample.js +149 -0
  208. package/dist/cjs/motion/sample.js.map +1 -0
  209. package/dist/cjs/motion/templates/hey-template.js +1552 -0
  210. package/dist/cjs/motion/templates/hey-template.js.map +1 -0
  211. package/dist/cjs/motion/templates/index.js +22 -0
  212. package/dist/cjs/motion/templates/index.js.map +1 -0
  213. package/dist/cjs/motion/templates/word-motion.js +1165 -0
  214. package/dist/cjs/motion/templates/word-motion.js.map +1 -0
  215. package/dist/cjs/motion/types.js +3 -0
  216. package/dist/cjs/motion/types.js.map +1 -0
  217. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js +62 -0
  218. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  219. package/dist/cjs/motion/typesurface/art.js +861 -0
  220. package/dist/cjs/motion/typesurface/art.js.map +1 -0
  221. package/dist/cjs/motion/typesurface/config.js +269 -0
  222. package/dist/cjs/motion/typesurface/config.js.map +1 -0
  223. package/dist/cjs/motion/typesurface/engine.js +607 -0
  224. package/dist/cjs/motion/typesurface/engine.js.map +1 -0
  225. package/dist/cjs/motion/typesurface/fonts.js +45 -0
  226. package/dist/cjs/motion/typesurface/fonts.js.map +1 -0
  227. package/dist/cjs/motion/typesurface/index.js +72 -0
  228. package/dist/cjs/motion/typesurface/index.js.map +1 -0
  229. package/dist/cjs/motion/typesurface/layout.js +130 -0
  230. package/dist/cjs/motion/typesurface/layout.js.map +1 -0
  231. package/dist/cjs/motion/typesurface/ops.js +175 -0
  232. package/dist/cjs/motion/typesurface/ops.js.map +1 -0
  233. package/dist/cjs/motion/typesurface/presets.js +192 -0
  234. package/dist/cjs/motion/typesurface/presets.js.map +1 -0
  235. package/dist/cjs/motion/typesurface/renderer.js +672 -0
  236. package/dist/cjs/motion/typesurface/renderer.js.map +1 -0
  237. package/dist/cjs/motion/typesurface/shaders.js +300 -0
  238. package/dist/cjs/motion/typesurface/shaders.js.map +1 -0
  239. package/dist/cjs/motion/typesurface/surfaces.js +156 -0
  240. package/dist/cjs/motion/typesurface/surfaces.js.map +1 -0
  241. package/dist/cjs/motion/typesurface/text.js +34 -0
  242. package/dist/cjs/motion/typesurface/text.js.map +1 -0
  243. package/dist/cjs/motion/typesurface/timeline.js +64 -0
  244. package/dist/cjs/motion/typesurface/timeline.js.map +1 -0
  245. package/dist/cjs/motion/validate.js +89 -0
  246. package/dist/cjs/motion/validate.js.map +1 -0
  247. package/dist/cjs/native/RiveReceiptStage.js +9 -150
  248. package/dist/cjs/native/RiveReceiptStage.js.map +1 -1
  249. package/dist/cjs/native/riveReceiptStageFactory.js +162 -0
  250. package/dist/cjs/native/riveReceiptStageFactory.js.map +1 -0
  251. package/dist/cjs/tokens/stage.js +10 -0
  252. package/dist/cjs/tokens/stage.js.map +1 -0
  253. package/dist/esm/agent/AgentComponent.js +1 -1
  254. package/dist/esm/agent/AgentComponent.js.map +1 -1
  255. package/dist/esm/agent/manifests.d.ts.map +1 -1
  256. package/dist/esm/agent/manifests.js +81 -1
  257. package/dist/esm/agent/manifests.js.map +1 -1
  258. package/dist/esm/agent/result.d.ts.map +1 -1
  259. package/dist/esm/agent/result.js +6 -0
  260. package/dist/esm/agent/result.js.map +1 -1
  261. package/dist/esm/agent/types.d.ts +1 -1
  262. package/dist/esm/agent/types.d.ts.map +1 -1
  263. package/dist/esm/components/catalog.d.ts +1 -1
  264. package/dist/esm/components/catalog.d.ts.map +1 -1
  265. package/dist/esm/components/catalog.js +18 -0
  266. package/dist/esm/components/catalog.js.map +1 -1
  267. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts +9 -0
  268. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts.map +1 -0
  269. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js +18 -0
  270. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  271. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts +31 -0
  272. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts.map +1 -0
  273. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js +3 -0
  274. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  275. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts +4 -0
  276. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts.map +1 -0
  277. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js +86 -0
  278. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  279. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts +32 -0
  280. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts.map +1 -0
  281. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js +59 -0
  282. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  283. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts +8 -0
  284. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts.map +1 -0
  285. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js +17 -0
  286. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  287. package/dist/esm/components/onboarding/animated-status/contract.d.ts +61 -0
  288. package/dist/esm/components/onboarding/animated-status/contract.d.ts.map +1 -0
  289. package/dist/esm/components/onboarding/animated-status/contract.js +78 -0
  290. package/dist/esm/components/onboarding/animated-status/contract.js.map +1 -0
  291. package/dist/esm/components/onboarding/animated-status/engine.d.ts +24 -0
  292. package/dist/esm/components/onboarding/animated-status/engine.d.ts.map +1 -0
  293. package/dist/esm/components/onboarding/animated-status/engine.js +32 -0
  294. package/dist/esm/components/onboarding/animated-status/engine.js.map +1 -0
  295. package/dist/esm/components/onboarding/animated-status/index.d.ts +5 -0
  296. package/dist/esm/components/onboarding/animated-status/index.d.ts.map +1 -0
  297. package/dist/esm/components/onboarding/animated-status/index.js +4 -0
  298. package/dist/esm/components/onboarding/animated-status/index.js.map +1 -0
  299. package/dist/esm/components/onboarding/animated-status/presets.json +126 -0
  300. package/dist/esm/components/onboarding/animated-status/riv.d.ts +3 -0
  301. package/dist/esm/components/onboarding/animated-status/riv.d.ts.map +1 -0
  302. package/dist/esm/components/onboarding/animated-status/riv.js +4 -0
  303. package/dist/esm/components/onboarding/animated-status/riv.js.map +1 -0
  304. package/dist/esm/components/onboarding/index.d.ts +2 -0
  305. package/dist/esm/components/onboarding/index.d.ts.map +1 -1
  306. package/dist/esm/components/onboarding/index.js +4 -0
  307. package/dist/esm/components/onboarding/index.js.map +1 -1
  308. package/dist/esm/components/onboarding/presets.d.ts.map +1 -1
  309. package/dist/esm/components/onboarding/presets.js +6 -0
  310. package/dist/esm/components/onboarding/presets.js.map +1 -1
  311. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts +4 -6
  312. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts.map +1 -1
  313. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js +42 -6
  314. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  315. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts +47 -0
  316. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts.map +1 -0
  317. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js +108 -0
  318. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  319. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts +9 -0
  320. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts.map +1 -0
  321. package/dist/esm/components/onboarding/send-completion/SendStage.js +34 -0
  322. package/dist/esm/components/onboarding/send-completion/SendStage.js.map +1 -0
  323. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts +33 -0
  324. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts.map +1 -0
  325. package/dist/esm/components/onboarding/send-completion/SendStage.types.js +3 -0
  326. package/dist/esm/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  327. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts +4 -0
  328. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts.map +1 -0
  329. package/dist/esm/components/onboarding/send-completion/SendStage.web.js +104 -0
  330. package/dist/esm/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  331. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts +11 -0
  332. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts.map +1 -0
  333. package/dist/esm/components/onboarding/send-completion/SendStill.js +14 -0
  334. package/dist/esm/components/onboarding/send-completion/SendStill.js.map +1 -0
  335. package/dist/esm/components/onboarding/send-completion/contract.d.ts +99 -0
  336. package/dist/esm/components/onboarding/send-completion/contract.d.ts.map +1 -0
  337. package/dist/esm/components/onboarding/send-completion/contract.js +76 -0
  338. package/dist/esm/components/onboarding/send-completion/contract.js.map +1 -0
  339. package/dist/esm/components/onboarding/send-completion/engine.d.ts +20 -0
  340. package/dist/esm/components/onboarding/send-completion/engine.d.ts.map +1 -0
  341. package/dist/esm/components/onboarding/send-completion/engine.js +28 -0
  342. package/dist/esm/components/onboarding/send-completion/engine.js.map +1 -0
  343. package/dist/esm/components/onboarding/send-completion/index.d.ts +6 -0
  344. package/dist/esm/components/onboarding/send-completion/index.d.ts.map +1 -0
  345. package/dist/esm/components/onboarding/send-completion/index.js +6 -0
  346. package/dist/esm/components/onboarding/send-completion/index.js.map +1 -0
  347. package/dist/esm/components/onboarding/send-completion/presets.json +132 -0
  348. package/dist/esm/components/onboarding/send-completion/riv.d.ts +3 -0
  349. package/dist/esm/components/onboarding/send-completion/riv.d.ts.map +1 -0
  350. package/dist/esm/components/onboarding/send-completion/riv.js +4 -0
  351. package/dist/esm/components/onboarding/send-completion/riv.js.map +1 -0
  352. package/dist/esm/components/onboarding/shared/actions-data.d.ts.map +1 -1
  353. package/dist/esm/components/onboarding/shared/actions-data.js +2 -0
  354. package/dist/esm/components/onboarding/shared/actions-data.js.map +1 -1
  355. package/dist/esm/components/onboarding/shared/configColor.d.ts +29 -0
  356. package/dist/esm/components/onboarding/shared/configColor.d.ts.map +1 -0
  357. package/dist/esm/components/onboarding/shared/configColor.js +69 -0
  358. package/dist/esm/components/onboarding/shared/configColor.js.map +1 -0
  359. package/dist/esm/components/onboarding/shared/contract.d.ts +1 -1
  360. package/dist/esm/components/onboarding/shared/contract.d.ts.map +1 -1
  361. package/dist/esm/components/onboarding/shared/contract.js +4 -0
  362. package/dist/esm/components/onboarding/shared/contract.js.map +1 -1
  363. package/dist/esm/components/onboarding/shared/describe.d.ts.map +1 -1
  364. package/dist/esm/components/onboarding/shared/describe.js +1 -1
  365. package/dist/esm/components/onboarding/shared/describe.js.map +1 -1
  366. package/dist/esm/components/onboarding/shared/mock.d.ts +2 -0
  367. package/dist/esm/components/onboarding/shared/mock.d.ts.map +1 -1
  368. package/dist/esm/components/onboarding/shared/mock.js +2 -0
  369. package/dist/esm/components/onboarding/shared/mock.js.map +1 -1
  370. package/dist/esm/components/onboarding/views.d.ts.map +1 -1
  371. package/dist/esm/components/onboarding/views.js +8 -0
  372. package/dist/esm/components/onboarding/views.js.map +1 -1
  373. package/dist/esm/motion/MotionPlayer.d.ts +22 -0
  374. package/dist/esm/motion/MotionPlayer.d.ts.map +1 -0
  375. package/dist/esm/motion/MotionPlayer.js +39 -0
  376. package/dist/esm/motion/MotionPlayer.js.map +1 -0
  377. package/dist/esm/motion/agent.d.ts +146 -0
  378. package/dist/esm/motion/agent.d.ts.map +1 -0
  379. package/dist/esm/motion/agent.js +278 -0
  380. package/dist/esm/motion/agent.js.map +1 -0
  381. package/dist/esm/motion/cat/Cat.d.ts +43 -0
  382. package/dist/esm/motion/cat/Cat.d.ts.map +1 -0
  383. package/dist/esm/motion/cat/Cat.js +74 -0
  384. package/dist/esm/motion/cat/Cat.js.map +1 -0
  385. package/dist/esm/motion/cat/animation.d.ts +86 -0
  386. package/dist/esm/motion/cat/animation.d.ts.map +1 -0
  387. package/dist/esm/motion/cat/animation.js +193 -0
  388. package/dist/esm/motion/cat/animation.js.map +1 -0
  389. package/dist/esm/motion/cat/art.generated.d.ts +53 -0
  390. package/dist/esm/motion/cat/art.generated.d.ts.map +1 -0
  391. package/dist/esm/motion/cat/art.generated.js +34 -0
  392. package/dist/esm/motion/cat/art.generated.js.map +1 -0
  393. package/dist/esm/motion/cat/config.d.ts +103 -0
  394. package/dist/esm/motion/cat/config.d.ts.map +1 -0
  395. package/dist/esm/motion/cat/config.js +129 -0
  396. package/dist/esm/motion/cat/config.js.map +1 -0
  397. package/dist/esm/motion/cat/index.d.ts +13 -0
  398. package/dist/esm/motion/cat/index.d.ts.map +1 -0
  399. package/dist/esm/motion/cat/index.js +13 -0
  400. package/dist/esm/motion/cat/index.js.map +1 -0
  401. package/dist/esm/motion/cat/rig.d.ts +44 -0
  402. package/dist/esm/motion/cat/rig.d.ts.map +1 -0
  403. package/dist/esm/motion/cat/rig.js +86 -0
  404. package/dist/esm/motion/cat/rig.js.map +1 -0
  405. package/dist/esm/motion/cat/scene.d.ts +66 -0
  406. package/dist/esm/motion/cat/scene.d.ts.map +1 -0
  407. package/dist/esm/motion/cat/scene.js +137 -0
  408. package/dist/esm/motion/cat/scene.js.map +1 -0
  409. package/dist/esm/motion/configurable/config.d.ts +80 -0
  410. package/dist/esm/motion/configurable/config.d.ts.map +1 -0
  411. package/dist/esm/motion/configurable/config.js +468 -0
  412. package/dist/esm/motion/configurable/config.js.map +1 -0
  413. package/dist/esm/motion/configurable/controls.d.ts +74 -0
  414. package/dist/esm/motion/configurable/controls.d.ts.map +1 -0
  415. package/dist/esm/motion/configurable/controls.js +38 -0
  416. package/dist/esm/motion/configurable/controls.js.map +1 -0
  417. package/dist/esm/motion/easing.d.ts +4 -0
  418. package/dist/esm/motion/easing.d.ts.map +1 -0
  419. package/dist/esm/motion/easing.js +58 -0
  420. package/dist/esm/motion/easing.js.map +1 -0
  421. package/dist/esm/motion/fit.d.ts +8 -0
  422. package/dist/esm/motion/fit.d.ts.map +1 -0
  423. package/dist/esm/motion/fit.js +8 -0
  424. package/dist/esm/motion/fit.js.map +1 -0
  425. package/dist/esm/motion/index.d.ts +27 -0
  426. package/dist/esm/motion/index.d.ts.map +1 -0
  427. package/dist/esm/motion/index.js +21 -0
  428. package/dist/esm/motion/index.js.map +1 -0
  429. package/dist/esm/motion/neon/GlowRenderer.d.ts +31 -0
  430. package/dist/esm/motion/neon/GlowRenderer.d.ts.map +1 -0
  431. package/dist/esm/motion/neon/GlowRenderer.js +14 -0
  432. package/dist/esm/motion/neon/GlowRenderer.js.map +1 -0
  433. package/dist/esm/motion/neon/NeonCanvas.d.ts +42 -0
  434. package/dist/esm/motion/neon/NeonCanvas.d.ts.map +1 -0
  435. package/dist/esm/motion/neon/NeonCanvas.js +92 -0
  436. package/dist/esm/motion/neon/NeonCanvas.js.map +1 -0
  437. package/dist/esm/motion/neon/NeonText.d.ts +26 -0
  438. package/dist/esm/motion/neon/NeonText.d.ts.map +1 -0
  439. package/dist/esm/motion/neon/NeonText.js +103 -0
  440. package/dist/esm/motion/neon/NeonText.js.map +1 -0
  441. package/dist/esm/motion/neon/NeonTextFrame.d.ts +29 -0
  442. package/dist/esm/motion/neon/NeonTextFrame.d.ts.map +1 -0
  443. package/dist/esm/motion/neon/NeonTextFrame.js +33 -0
  444. package/dist/esm/motion/neon/NeonTextFrame.js.map +1 -0
  445. package/dist/esm/motion/neon/artwork.d.ts +29 -0
  446. package/dist/esm/motion/neon/artwork.d.ts.map +1 -0
  447. package/dist/esm/motion/neon/artwork.js +98 -0
  448. package/dist/esm/motion/neon/artwork.js.map +1 -0
  449. package/dist/esm/motion/neon/audio.d.ts +49 -0
  450. package/dist/esm/motion/neon/audio.d.ts.map +1 -0
  451. package/dist/esm/motion/neon/audio.js +161 -0
  452. package/dist/esm/motion/neon/audio.js.map +1 -0
  453. package/dist/esm/motion/neon/config.d.ts +319 -0
  454. package/dist/esm/motion/neon/config.d.ts.map +1 -0
  455. package/dist/esm/motion/neon/config.js +319 -0
  456. package/dist/esm/motion/neon/config.js.map +1 -0
  457. package/dist/esm/motion/neon/flicker.d.ts +82 -0
  458. package/dist/esm/motion/neon/flicker.d.ts.map +1 -0
  459. package/dist/esm/motion/neon/flicker.js +187 -0
  460. package/dist/esm/motion/neon/flicker.js.map +1 -0
  461. package/dist/esm/motion/neon/fonts.d.ts +29 -0
  462. package/dist/esm/motion/neon/fonts.d.ts.map +1 -0
  463. package/dist/esm/motion/neon/fonts.js +47 -0
  464. package/dist/esm/motion/neon/fonts.js.map +1 -0
  465. package/dist/esm/motion/neon/frame.d.ts +22 -0
  466. package/dist/esm/motion/neon/frame.d.ts.map +1 -0
  467. package/dist/esm/motion/neon/frame.js +20 -0
  468. package/dist/esm/motion/neon/frame.js.map +1 -0
  469. package/dist/esm/motion/neon/glitch.d.ts +64 -0
  470. package/dist/esm/motion/neon/glitch.d.ts.map +1 -0
  471. package/dist/esm/motion/neon/glitch.js +108 -0
  472. package/dist/esm/motion/neon/glitch.js.map +1 -0
  473. package/dist/esm/motion/neon/index.d.ts +29 -0
  474. package/dist/esm/motion/neon/index.d.ts.map +1 -0
  475. package/dist/esm/motion/neon/index.js +28 -0
  476. package/dist/esm/motion/neon/index.js.map +1 -0
  477. package/dist/esm/motion/neon/layers.d.ts +56 -0
  478. package/dist/esm/motion/neon/layers.d.ts.map +1 -0
  479. package/dist/esm/motion/neon/layers.js +64 -0
  480. package/dist/esm/motion/neon/layers.js.map +1 -0
  481. package/dist/esm/motion/neon/material.d.ts +68 -0
  482. package/dist/esm/motion/neon/material.d.ts.map +1 -0
  483. package/dist/esm/motion/neon/material.js +51 -0
  484. package/dist/esm/motion/neon/material.js.map +1 -0
  485. package/dist/esm/motion/neon/random.d.ts +15 -0
  486. package/dist/esm/motion/neon/random.d.ts.map +1 -0
  487. package/dist/esm/motion/neon/random.js +37 -0
  488. package/dist/esm/motion/neon/random.js.map +1 -0
  489. package/dist/esm/motion/neon/scene.d.ts +255 -0
  490. package/dist/esm/motion/neon/scene.d.ts.map +1 -0
  491. package/dist/esm/motion/neon/scene.js +532 -0
  492. package/dist/esm/motion/neon/scene.js.map +1 -0
  493. package/dist/esm/motion/neon/synth.d.ts +18 -0
  494. package/dist/esm/motion/neon/synth.d.ts.map +1 -0
  495. package/dist/esm/motion/neon/synth.js +208 -0
  496. package/dist/esm/motion/neon/synth.js.map +1 -0
  497. package/dist/esm/motion/neon/typography.d.ts +53 -0
  498. package/dist/esm/motion/neon/typography.d.ts.map +1 -0
  499. package/dist/esm/motion/neon/typography.js +74 -0
  500. package/dist/esm/motion/neon/typography.js.map +1 -0
  501. package/dist/esm/motion/neon/wall.d.ts +62 -0
  502. package/dist/esm/motion/neon/wall.d.ts.map +1 -0
  503. package/dist/esm/motion/neon/wall.js +106 -0
  504. package/dist/esm/motion/neon/wall.js.map +1 -0
  505. package/dist/esm/motion/paperfold/PaperFold.d.ts +36 -0
  506. package/dist/esm/motion/paperfold/PaperFold.d.ts.map +1 -0
  507. package/dist/esm/motion/paperfold/PaperFold.js +37 -0
  508. package/dist/esm/motion/paperfold/PaperFold.js.map +1 -0
  509. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts +39 -0
  510. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts.map +1 -0
  511. package/dist/esm/motion/paperfold/PaperFoldFrame.js +283 -0
  512. package/dist/esm/motion/paperfold/PaperFoldFrame.js.map +1 -0
  513. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts +27 -0
  514. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts.map +1 -0
  515. package/dist/esm/motion/paperfold/PaperFoldPlayer.js +56 -0
  516. package/dist/esm/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  517. package/dist/esm/motion/paperfold/art.d.ts +148 -0
  518. package/dist/esm/motion/paperfold/art.d.ts.map +1 -0
  519. package/dist/esm/motion/paperfold/art.js +374 -0
  520. package/dist/esm/motion/paperfold/art.js.map +1 -0
  521. package/dist/esm/motion/paperfold/config.d.ts +47 -0
  522. package/dist/esm/motion/paperfold/config.d.ts.map +1 -0
  523. package/dist/esm/motion/paperfold/config.js +96 -0
  524. package/dist/esm/motion/paperfold/config.js.map +1 -0
  525. package/dist/esm/motion/paperfold/controls.d.ts +57 -0
  526. package/dist/esm/motion/paperfold/controls.d.ts.map +1 -0
  527. package/dist/esm/motion/paperfold/controls.js +506 -0
  528. package/dist/esm/motion/paperfold/controls.js.map +1 -0
  529. package/dist/esm/motion/paperfold/engine.d.ts +397 -0
  530. package/dist/esm/motion/paperfold/engine.d.ts.map +1 -0
  531. package/dist/esm/motion/paperfold/engine.js +699 -0
  532. package/dist/esm/motion/paperfold/engine.js.map +1 -0
  533. package/dist/esm/motion/paperfold/fonts.d.ts +3 -0
  534. package/dist/esm/motion/paperfold/fonts.d.ts.map +1 -0
  535. package/dist/esm/motion/paperfold/fonts.js +21 -0
  536. package/dist/esm/motion/paperfold/fonts.js.map +1 -0
  537. package/dist/esm/motion/paperfold/index.d.ts +17 -0
  538. package/dist/esm/motion/paperfold/index.d.ts.map +1 -0
  539. package/dist/esm/motion/paperfold/index.js +17 -0
  540. package/dist/esm/motion/paperfold/index.js.map +1 -0
  541. package/dist/esm/motion/paperfold/manipulate.d.ts +59 -0
  542. package/dist/esm/motion/paperfold/manipulate.d.ts.map +1 -0
  543. package/dist/esm/motion/paperfold/manipulate.js +161 -0
  544. package/dist/esm/motion/paperfold/manipulate.js.map +1 -0
  545. package/dist/esm/motion/paperfold/presets.d.ts +9 -0
  546. package/dist/esm/motion/paperfold/presets.d.ts.map +1 -0
  547. package/dist/esm/motion/paperfold/presets.js +115 -0
  548. package/dist/esm/motion/paperfold/presets.js.map +1 -0
  549. package/dist/esm/motion/paperfold/template.d.ts +3 -0
  550. package/dist/esm/motion/paperfold/template.d.ts.map +1 -0
  551. package/dist/esm/motion/paperfold/template.js +37 -0
  552. package/dist/esm/motion/paperfold/template.js.map +1 -0
  553. package/dist/esm/motion/player.d.ts +35 -0
  554. package/dist/esm/motion/player.d.ts.map +1 -0
  555. package/dist/esm/motion/player.js +197 -0
  556. package/dist/esm/motion/player.js.map +1 -0
  557. package/dist/esm/motion/promo/PromoFrame.d.ts +31 -0
  558. package/dist/esm/motion/promo/PromoFrame.d.ts.map +1 -0
  559. package/dist/esm/motion/promo/PromoFrame.js +288 -0
  560. package/dist/esm/motion/promo/PromoFrame.js.map +1 -0
  561. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts +25 -0
  562. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts.map +1 -0
  563. package/dist/esm/motion/promo/PromoShowcasePlayer.js +56 -0
  564. package/dist/esm/motion/promo/PromoShowcasePlayer.js.map +1 -0
  565. package/dist/esm/motion/promo/config.d.ts +91 -0
  566. package/dist/esm/motion/promo/config.d.ts.map +1 -0
  567. package/dist/esm/motion/promo/config.js +550 -0
  568. package/dist/esm/motion/promo/config.js.map +1 -0
  569. package/dist/esm/motion/promo/controls.d.ts +86 -0
  570. package/dist/esm/motion/promo/controls.d.ts.map +1 -0
  571. package/dist/esm/motion/promo/controls.js +567 -0
  572. package/dist/esm/motion/promo/controls.js.map +1 -0
  573. package/dist/esm/motion/promo/easing.d.ts +3 -0
  574. package/dist/esm/motion/promo/easing.d.ts.map +1 -0
  575. package/dist/esm/motion/promo/easing.js +32 -0
  576. package/dist/esm/motion/promo/easing.js.map +1 -0
  577. package/dist/esm/motion/promo/engine.d.ts +205 -0
  578. package/dist/esm/motion/promo/engine.d.ts.map +1 -0
  579. package/dist/esm/motion/promo/engine.js +551 -0
  580. package/dist/esm/motion/promo/engine.js.map +1 -0
  581. package/dist/esm/motion/promo/fonts.d.ts +7 -0
  582. package/dist/esm/motion/promo/fonts.d.ts.map +1 -0
  583. package/dist/esm/motion/promo/fonts.js +16 -0
  584. package/dist/esm/motion/promo/fonts.js.map +1 -0
  585. package/dist/esm/motion/promo/icons.d.ts +7 -0
  586. package/dist/esm/motion/promo/icons.d.ts.map +1 -0
  587. package/dist/esm/motion/promo/icons.js +26 -0
  588. package/dist/esm/motion/promo/icons.js.map +1 -0
  589. package/dist/esm/motion/promo/index.d.ts +15 -0
  590. package/dist/esm/motion/promo/index.d.ts.map +1 -0
  591. package/dist/esm/motion/promo/index.js +15 -0
  592. package/dist/esm/motion/promo/index.js.map +1 -0
  593. package/dist/esm/motion/promo/presets.d.ts +13 -0
  594. package/dist/esm/motion/promo/presets.d.ts.map +1 -0
  595. package/dist/esm/motion/promo/presets.js +40 -0
  596. package/dist/esm/motion/promo/presets.js.map +1 -0
  597. package/dist/esm/motion/promo/template.d.ts +8 -0
  598. package/dist/esm/motion/promo/template.d.ts.map +1 -0
  599. package/dist/esm/motion/promo/template.js +35 -0
  600. package/dist/esm/motion/promo/template.js.map +1 -0
  601. package/dist/esm/motion/replication2/Replication2Player.d.ts +26 -0
  602. package/dist/esm/motion/replication2/Replication2Player.d.ts.map +1 -0
  603. package/dist/esm/motion/replication2/Replication2Player.js +90 -0
  604. package/dist/esm/motion/replication2/Replication2Player.js.map +1 -0
  605. package/dist/esm/motion/replication2/config.d.ts +78 -0
  606. package/dist/esm/motion/replication2/config.d.ts.map +1 -0
  607. package/dist/esm/motion/replication2/config.js +341 -0
  608. package/dist/esm/motion/replication2/config.js.map +1 -0
  609. package/dist/esm/motion/replication2/controls.d.ts +70 -0
  610. package/dist/esm/motion/replication2/controls.d.ts.map +1 -0
  611. package/dist/esm/motion/replication2/controls.js +283 -0
  612. package/dist/esm/motion/replication2/controls.js.map +1 -0
  613. package/dist/esm/motion/replication2/driver.d.ts +23 -0
  614. package/dist/esm/motion/replication2/driver.d.ts.map +1 -0
  615. package/dist/esm/motion/replication2/driver.js +65 -0
  616. package/dist/esm/motion/replication2/driver.js.map +1 -0
  617. package/dist/esm/motion/replication2/easing.d.ts +19 -0
  618. package/dist/esm/motion/replication2/easing.d.ts.map +1 -0
  619. package/dist/esm/motion/replication2/easing.js +92 -0
  620. package/dist/esm/motion/replication2/easing.js.map +1 -0
  621. package/dist/esm/motion/replication2/engine.d.ts +236 -0
  622. package/dist/esm/motion/replication2/engine.d.ts.map +1 -0
  623. package/dist/esm/motion/replication2/engine.js +470 -0
  624. package/dist/esm/motion/replication2/engine.js.map +1 -0
  625. package/dist/esm/motion/replication2/html.d.ts +30 -0
  626. package/dist/esm/motion/replication2/html.d.ts.map +1 -0
  627. package/dist/esm/motion/replication2/html.js +83 -0
  628. package/dist/esm/motion/replication2/html.js.map +1 -0
  629. package/dist/esm/motion/replication2/index.d.ts +15 -0
  630. package/dist/esm/motion/replication2/index.d.ts.map +1 -0
  631. package/dist/esm/motion/replication2/index.js +15 -0
  632. package/dist/esm/motion/replication2/index.js.map +1 -0
  633. package/dist/esm/motion/replication2/measure.d.ts +3 -0
  634. package/dist/esm/motion/replication2/measure.d.ts.map +1 -0
  635. package/dist/esm/motion/replication2/measure.js +27 -0
  636. package/dist/esm/motion/replication2/measure.js.map +1 -0
  637. package/dist/esm/motion/replication2/metrics.d.ts +6 -0
  638. package/dist/esm/motion/replication2/metrics.d.ts.map +1 -0
  639. package/dist/esm/motion/replication2/metrics.js +7 -0
  640. package/dist/esm/motion/replication2/metrics.js.map +1 -0
  641. package/dist/esm/motion/replication2/presets.d.ts +13 -0
  642. package/dist/esm/motion/replication2/presets.d.ts.map +1 -0
  643. package/dist/esm/motion/replication2/presets.js +63 -0
  644. package/dist/esm/motion/replication2/presets.js.map +1 -0
  645. package/dist/esm/motion/replication2/riv.d.ts +3 -0
  646. package/dist/esm/motion/replication2/riv.d.ts.map +1 -0
  647. package/dist/esm/motion/replication2/riv.js +4 -0
  648. package/dist/esm/motion/replication2/riv.js.map +1 -0
  649. package/dist/esm/motion/replication2/rive-contract.d.ts +27 -0
  650. package/dist/esm/motion/replication2/rive-contract.d.ts.map +1 -0
  651. package/dist/esm/motion/replication2/rive-contract.js +153 -0
  652. package/dist/esm/motion/replication2/rive-contract.js.map +1 -0
  653. package/dist/esm/motion/replication2/template.d.ts +8 -0
  654. package/dist/esm/motion/replication2/template.d.ts.map +1 -0
  655. package/dist/esm/motion/replication2/template.js +32 -0
  656. package/dist/esm/motion/replication2/template.js.map +1 -0
  657. package/dist/esm/motion/sample.d.ts +61 -0
  658. package/dist/esm/motion/sample.d.ts.map +1 -0
  659. package/dist/esm/motion/sample.js +138 -0
  660. package/dist/esm/motion/sample.js.map +1 -0
  661. package/dist/esm/motion/templates/hey-template.d.ts +3 -0
  662. package/dist/esm/motion/templates/hey-template.d.ts.map +1 -0
  663. package/dist/esm/motion/templates/hey-template.js +1549 -0
  664. package/dist/esm/motion/templates/hey-template.js.map +1 -0
  665. package/dist/esm/motion/templates/index.d.ts +22 -0
  666. package/dist/esm/motion/templates/index.d.ts.map +1 -0
  667. package/dist/esm/motion/templates/index.js +15 -0
  668. package/dist/esm/motion/templates/index.js.map +1 -0
  669. package/dist/esm/motion/templates/word-motion.d.ts +3 -0
  670. package/dist/esm/motion/templates/word-motion.d.ts.map +1 -0
  671. package/dist/esm/motion/templates/word-motion.js +1162 -0
  672. package/dist/esm/motion/templates/word-motion.js.map +1 -0
  673. package/dist/esm/motion/types.d.ts +192 -0
  674. package/dist/esm/motion/types.d.ts.map +1 -0
  675. package/dist/esm/motion/types.js +2 -0
  676. package/dist/esm/motion/types.js.map +1 -0
  677. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts +22 -0
  678. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts.map +1 -0
  679. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js +58 -0
  680. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  681. package/dist/esm/motion/typesurface/art.d.ts +21 -0
  682. package/dist/esm/motion/typesurface/art.d.ts.map +1 -0
  683. package/dist/esm/motion/typesurface/art.js +854 -0
  684. package/dist/esm/motion/typesurface/art.js.map +1 -0
  685. package/dist/esm/motion/typesurface/config.d.ts +273 -0
  686. package/dist/esm/motion/typesurface/config.d.ts.map +1 -0
  687. package/dist/esm/motion/typesurface/config.js +260 -0
  688. package/dist/esm/motion/typesurface/config.js.map +1 -0
  689. package/dist/esm/motion/typesurface/engine.d.ts +94 -0
  690. package/dist/esm/motion/typesurface/engine.d.ts.map +1 -0
  691. package/dist/esm/motion/typesurface/engine.js +603 -0
  692. package/dist/esm/motion/typesurface/engine.js.map +1 -0
  693. package/dist/esm/motion/typesurface/fonts.d.ts +25 -0
  694. package/dist/esm/motion/typesurface/fonts.d.ts.map +1 -0
  695. package/dist/esm/motion/typesurface/fonts.js +40 -0
  696. package/dist/esm/motion/typesurface/fonts.js.map +1 -0
  697. package/dist/esm/motion/typesurface/index.d.ts +17 -0
  698. package/dist/esm/motion/typesurface/index.d.ts.map +1 -0
  699. package/dist/esm/motion/typesurface/index.js +17 -0
  700. package/dist/esm/motion/typesurface/index.js.map +1 -0
  701. package/dist/esm/motion/typesurface/layout.d.ts +57 -0
  702. package/dist/esm/motion/typesurface/layout.d.ts.map +1 -0
  703. package/dist/esm/motion/typesurface/layout.js +122 -0
  704. package/dist/esm/motion/typesurface/layout.js.map +1 -0
  705. package/dist/esm/motion/typesurface/ops.d.ts +70 -0
  706. package/dist/esm/motion/typesurface/ops.d.ts.map +1 -0
  707. package/dist/esm/motion/typesurface/ops.js +164 -0
  708. package/dist/esm/motion/typesurface/ops.js.map +1 -0
  709. package/dist/esm/motion/typesurface/presets.d.ts +33 -0
  710. package/dist/esm/motion/typesurface/presets.d.ts.map +1 -0
  711. package/dist/esm/motion/typesurface/presets.js +185 -0
  712. package/dist/esm/motion/typesurface/presets.js.map +1 -0
  713. package/dist/esm/motion/typesurface/renderer.d.ts +78 -0
  714. package/dist/esm/motion/typesurface/renderer.d.ts.map +1 -0
  715. package/dist/esm/motion/typesurface/renderer.js +666 -0
  716. package/dist/esm/motion/typesurface/renderer.js.map +1 -0
  717. package/dist/esm/motion/typesurface/shaders.d.ts +17 -0
  718. package/dist/esm/motion/typesurface/shaders.d.ts.map +1 -0
  719. package/dist/esm/motion/typesurface/shaders.js +297 -0
  720. package/dist/esm/motion/typesurface/shaders.js.map +1 -0
  721. package/dist/esm/motion/typesurface/surfaces.d.ts +81 -0
  722. package/dist/esm/motion/typesurface/surfaces.d.ts.map +1 -0
  723. package/dist/esm/motion/typesurface/surfaces.js +149 -0
  724. package/dist/esm/motion/typesurface/surfaces.js.map +1 -0
  725. package/dist/esm/motion/typesurface/text.d.ts +17 -0
  726. package/dist/esm/motion/typesurface/text.d.ts.map +1 -0
  727. package/dist/esm/motion/typesurface/text.js +28 -0
  728. package/dist/esm/motion/typesurface/text.js.map +1 -0
  729. package/dist/esm/motion/typesurface/timeline.d.ts +15 -0
  730. package/dist/esm/motion/typesurface/timeline.d.ts.map +1 -0
  731. package/dist/esm/motion/typesurface/timeline.js +57 -0
  732. package/dist/esm/motion/typesurface/timeline.js.map +1 -0
  733. package/dist/esm/motion/validate.d.ts +22 -0
  734. package/dist/esm/motion/validate.d.ts.map +1 -0
  735. package/dist/esm/motion/validate.js +84 -0
  736. package/dist/esm/motion/validate.js.map +1 -0
  737. package/dist/esm/native/RiveReceiptStage.d.ts +25 -2
  738. package/dist/esm/native/RiveReceiptStage.d.ts.map +1 -1
  739. package/dist/esm/native/RiveReceiptStage.js +7 -148
  740. package/dist/esm/native/RiveReceiptStage.js.map +1 -1
  741. package/dist/esm/native/riveReceiptStageFactory.d.ts +26 -0
  742. package/dist/esm/native/riveReceiptStageFactory.d.ts.map +1 -0
  743. package/dist/esm/native/riveReceiptStageFactory.js +159 -0
  744. package/dist/esm/native/riveReceiptStageFactory.js.map +1 -0
  745. package/dist/esm/tokens/stage.d.ts +7 -0
  746. package/dist/esm/tokens/stage.d.ts.map +1 -0
  747. package/dist/esm/tokens/stage.js +7 -0
  748. package/dist/esm/tokens/stage.js.map +1 -0
  749. package/package.json +35 -1
  750. package/spec/examples/components/onboarding/animated-status/case1.json +42 -0
  751. package/spec/examples/components/onboarding/animated-status/case2.json +42 -0
  752. package/spec/examples/components/onboarding/animated-status/case3.json +42 -0
  753. package/spec/examples/components/onboarding/animated-status/case4.json +42 -0
  754. package/spec/examples/components/onboarding/animated-status/case5.json +42 -0
  755. package/spec/examples/components/onboarding/send-completion/case1.json +48 -0
  756. package/spec/examples/components/onboarding/send-completion/case2.json +48 -0
  757. package/spec/examples/components/onboarding/send-completion/case3.json +48 -0
  758. package/spec/examples/components/onboarding/send-completion/case4.json +48 -0
  759. package/spec/examples/components/onboarding/send-completion/case5.json +48 -0
  760. package/spec/families/onboarding.schema.json +610 -1
  761. package/src/agent/AgentComponent.tsx +1 -1
  762. package/src/agent/manifests.ts +83 -1
  763. package/src/agent/result.ts +6 -0
  764. package/src/agent/types.ts +1 -1
  765. package/src/components/catalog.ts +21 -1
  766. package/src/components/onboarding/animated-status/AnimatedStage.tsx +18 -0
  767. package/src/components/onboarding/animated-status/AnimatedStage.types.ts +30 -0
  768. package/src/components/onboarding/animated-status/AnimatedStage.web.tsx +99 -0
  769. package/src/components/onboarding/animated-status/AnimatedStatusView.tsx +109 -0
  770. package/src/components/onboarding/animated-status/AnimatedStill.tsx +23 -0
  771. package/src/components/onboarding/animated-status/contract.ts +105 -0
  772. package/src/components/onboarding/animated-status/engine.ts +49 -0
  773. package/src/components/onboarding/animated-status/index.ts +8 -0
  774. package/src/components/onboarding/animated-status/presets.json +126 -0
  775. package/src/components/onboarding/animated-status/riv.ts +4 -0
  776. package/src/components/onboarding/index.ts +4 -0
  777. package/src/components/onboarding/presets.ts +6 -0
  778. package/src/components/onboarding/receipt-printer/ReceiptStage.tsx +46 -7
  779. package/src/components/onboarding/send-completion/SendCompletionView.tsx +164 -0
  780. package/src/components/onboarding/send-completion/SendStage.tsx +27 -0
  781. package/src/components/onboarding/send-completion/SendStage.types.ts +32 -0
  782. package/src/components/onboarding/send-completion/SendStage.web.tsx +116 -0
  783. package/src/components/onboarding/send-completion/SendStill.tsx +19 -0
  784. package/src/components/onboarding/send-completion/contract.ts +127 -0
  785. package/src/components/onboarding/send-completion/engine.ts +37 -0
  786. package/src/components/onboarding/send-completion/index.ts +10 -0
  787. package/src/components/onboarding/send-completion/presets.json +132 -0
  788. package/src/components/onboarding/send-completion/riv.ts +4 -0
  789. package/src/components/onboarding/shared/actions-data.ts +2 -0
  790. package/src/components/onboarding/shared/configColor.ts +72 -0
  791. package/src/components/onboarding/shared/contract.ts +4 -0
  792. package/src/components/onboarding/shared/describe.ts +1 -1
  793. package/src/components/onboarding/shared/mock.ts +2 -0
  794. package/src/components/onboarding/views.ts +8 -0
  795. package/src/motion/MotionPlayer.tsx +62 -0
  796. package/src/motion/agent.ts +288 -0
  797. package/src/motion/cat/Cat.tsx +118 -0
  798. package/src/motion/cat/animation.ts +206 -0
  799. package/src/motion/cat/art.generated.ts +44 -0
  800. package/src/motion/cat/config.ts +186 -0
  801. package/src/motion/cat/index.ts +26 -0
  802. package/src/motion/cat/rig.ts +102 -0
  803. package/src/motion/cat/scene.ts +181 -0
  804. package/src/motion/configurable/config.ts +420 -0
  805. package/src/motion/configurable/controls.ts +93 -0
  806. package/src/motion/easing.ts +55 -0
  807. package/src/motion/fit.ts +8 -0
  808. package/src/motion/index.ts +29 -0
  809. package/src/motion/neon/GlowRenderer.tsx +83 -0
  810. package/src/motion/neon/NeonCanvas.tsx +175 -0
  811. package/src/motion/neon/NeonText.tsx +113 -0
  812. package/src/motion/neon/NeonTextFrame.tsx +67 -0
  813. package/src/motion/neon/artwork.ts +95 -0
  814. package/src/motion/neon/audio.ts +162 -0
  815. package/src/motion/neon/config.ts +484 -0
  816. package/src/motion/neon/flicker.ts +225 -0
  817. package/src/motion/neon/fonts.ts +76 -0
  818. package/src/motion/neon/frame.ts +34 -0
  819. package/src/motion/neon/glitch.ts +142 -0
  820. package/src/motion/neon/index.ts +41 -0
  821. package/src/motion/neon/layers.tsx +209 -0
  822. package/src/motion/neon/material.ts +88 -0
  823. package/src/motion/neon/random.ts +40 -0
  824. package/src/motion/neon/scene.ts +610 -0
  825. package/src/motion/neon/synth.ts +188 -0
  826. package/src/motion/neon/typography.ts +102 -0
  827. package/src/motion/neon/wall.ts +157 -0
  828. package/src/motion/paperfold/PaperFold.tsx +45 -0
  829. package/src/motion/paperfold/PaperFoldFrame.tsx +576 -0
  830. package/src/motion/paperfold/PaperFoldPlayer.tsx +80 -0
  831. package/src/motion/paperfold/art.ts +455 -0
  832. package/src/motion/paperfold/config.ts +98 -0
  833. package/src/motion/paperfold/controls.ts +557 -0
  834. package/src/motion/paperfold/engine.ts +852 -0
  835. package/src/motion/paperfold/fonts.ts +21 -0
  836. package/src/motion/paperfold/index.ts +30 -0
  837. package/src/motion/paperfold/manipulate.ts +188 -0
  838. package/src/motion/paperfold/presets.ts +117 -0
  839. package/src/motion/paperfold/template.ts +38 -0
  840. package/src/motion/player.ts +207 -0
  841. package/src/motion/promo/PromoFrame.tsx +501 -0
  842. package/src/motion/promo/PromoShowcasePlayer.tsx +78 -0
  843. package/src/motion/promo/config.ts +479 -0
  844. package/src/motion/promo/controls.ts +643 -0
  845. package/src/motion/promo/easing.ts +36 -0
  846. package/src/motion/promo/engine.ts +587 -0
  847. package/src/motion/promo/fonts.ts +16 -0
  848. package/src/motion/promo/icons.tsx +29 -0
  849. package/src/motion/promo/index.ts +24 -0
  850. package/src/motion/promo/presets.ts +40 -0
  851. package/src/motion/promo/template.ts +36 -0
  852. package/src/motion/replication2/Replication2Player.tsx +115 -0
  853. package/src/motion/replication2/config.ts +323 -0
  854. package/src/motion/replication2/controls.ts +336 -0
  855. package/src/motion/replication2/driver.ts +92 -0
  856. package/src/motion/replication2/easing.ts +88 -0
  857. package/src/motion/replication2/engine.ts +539 -0
  858. package/src/motion/replication2/html.ts +87 -0
  859. package/src/motion/replication2/index.ts +14 -0
  860. package/src/motion/replication2/measure.ts +28 -0
  861. package/src/motion/replication2/metrics.ts +7 -0
  862. package/src/motion/replication2/presets.ts +63 -0
  863. package/src/motion/replication2/riv.ts +4 -0
  864. package/src/motion/replication2/rive-contract.ts +165 -0
  865. package/src/motion/replication2/template.ts +33 -0
  866. package/src/motion/sample.ts +173 -0
  867. package/src/motion/templates/hey-template.ts +1553 -0
  868. package/src/motion/templates/index.ts +17 -0
  869. package/src/motion/templates/word-motion.ts +1166 -0
  870. package/src/motion/types.ts +162 -0
  871. package/src/motion/typesurface/TypeSurfaceCanvas.tsx +73 -0
  872. package/src/motion/typesurface/art.ts +639 -0
  873. package/src/motion/typesurface/config.ts +486 -0
  874. package/src/motion/typesurface/engine.ts +586 -0
  875. package/src/motion/typesurface/fonts.ts +63 -0
  876. package/src/motion/typesurface/index.ts +16 -0
  877. package/src/motion/typesurface/layout.ts +133 -0
  878. package/src/motion/typesurface/ops.ts +196 -0
  879. package/src/motion/typesurface/presets.ts +199 -0
  880. package/src/motion/typesurface/renderer.ts +579 -0
  881. package/src/motion/typesurface/shaders.ts +303 -0
  882. package/src/motion/typesurface/surfaces.ts +223 -0
  883. package/src/motion/typesurface/text.ts +35 -0
  884. package/src/motion/typesurface/timeline.ts +58 -0
  885. package/src/motion/validate.ts +101 -0
  886. package/src/native/RiveReceiptStage.tsx +8 -155
  887. package/src/native/riveReceiptStageFactory.tsx +175 -0
  888. package/src/tokens/stage.ts +6 -0
  889. package/tools/ask/dist/components.mjs +6887 -46
  890. package/tools/ask/mcp.mjs +80 -1
@@ -0,0 +1,567 @@
1
+ /* eslint-disable comppack/no-raw-colour -- the defaults are content: the reference preset's colours, which people and agents replace (DECISIONS §25, §26). */
2
+ /**
3
+ * **promo-product-showcase — the control table.** Every editable value of the promo, once: its path,
4
+ * type, range or options, default, description, and who may edit it. The JSON Schema, the validator,
5
+ * the defaults, the patch API, the Remotion Studio schema, the site editor and the reference in
6
+ * `docs/MOTION-TEMPLATES.md` are all generated from this table, so a person and an agent always see
7
+ * the same contract.
8
+ *
9
+ * Two kinds of entry:
10
+ * - **Controls** — one typed value at a fixed dotted path (`content.title`).
11
+ * - **Lists** — an array of items (`productContent.cards`), each item a set of controls. Patches
12
+ * address items by index (`productContent.cards.1.title`) or replace the whole array.
13
+ *
14
+ * Units:
15
+ * - `frames` — motion frames at the canonical 60 fps, whatever `canvas.fps` the output samples at.
16
+ * - `du` — design units: 1/1080 of the canvas's short side (2 px at 4K), so sizes hold across aspect ratios.
17
+ * - `normalized` — 0‥1 across the box named in the description (the canvas, the layout slot, the UI).
18
+ * - `short` — a fraction of the canvas's short side.
19
+ */
20
+ export const EASING_NAMES = [
21
+ 'linear', 'easeIn', 'easeOut', 'easeInOut', 'easeInCubic', 'easeOutCubic', 'easeInOutCubic',
22
+ 'easeOutQuart', 'easeInOutQuart', 'easeOutExpo', 'easeOutBack', 'springSoft', 'springSnappy',
23
+ ];
24
+ export const ASPECT_RATIOS = ['16:9', '9:16', '1:1'];
25
+ /** The layout block each aspect ratio reads (`layout.<name>`). */
26
+ export const LAYOUT_FOR = { '16:9': 'landscape', '9:16': 'portrait', '1:1': 'square' };
27
+ export const FPS_OPTIONS = [24, 25, 30, 50, 60];
28
+ /** Registered typefaces: each is loaded by the Remotion compositions and by the web player. */
29
+ export const FONT_FAMILIES = ['Inter', 'Manrope', 'DM Sans', 'Plus Jakarta Sans', 'Space Grotesk'];
30
+ export const FONT_WEIGHTS = [300, 400, 500, 600, 700, 800];
31
+ export const TEXT_MODES = ['fade', 'slide', 'scale', 'blur', 'reveal', 'none'];
32
+ export const CARD_ENTRANCES = ['fade', 'slide-up', 'slide-left', 'scale', 'none'];
33
+ export const ICONS = ['none', 'sparkle', 'bolt', 'star', 'check', 'chart', 'heart', 'rocket', 'lock', 'arrow', 'globe', 'chat'];
34
+ export const PLACEHOLDERS = ['website', 'gallery', 'chart', 'gradient', 'text', 'none'];
35
+ export const PHASES = ['intro', 'productEntrance', 'productSettle', 'contentReveal', 'showcase', 'outro'];
36
+ /** The groups people see (the Studio sections and the site editor tabs), in order. */
37
+ export const GROUPS = [
38
+ 'Canvas', 'Layout', 'Content', 'Product', 'Product Header', 'Product UI', 'Background', 'Lights', 'Typography',
39
+ 'Text Animation', 'Product Animation', 'Card Animation', 'Camera', 'Floating Elements', 'Particles', 'Glow',
40
+ 'Timeline', 'Scenes', 'Assets', 'Export',
41
+ ];
42
+ /** Which people-facing group a config key belongs to. */
43
+ const GROUP_OF = {
44
+ canvas: 'Canvas', layout: 'Layout', content: 'Content', productWindow: 'Product', window: 'Product',
45
+ productHeader: 'Product Header', productContent: 'Product UI', background: 'Background', lights: 'Lights',
46
+ typography: 'Typography', textAnimation: 'Text Animation', productEntrance: 'Product Animation', productFloat: 'Product Animation',
47
+ cardAnimation: 'Card Animation', camera: 'Camera', floatingElements: 'Floating Elements', particles: 'Particles', glow: 'Glow',
48
+ timeline: 'Timeline', loop: 'Timeline', scenes: 'Scenes', sceneTransition: 'Scenes', assets: 'Assets', export: 'Export',
49
+ };
50
+ const base = (o = {}) => ({ userEditable: o.userEditable ?? true, agentEditable: o.agentEditable ?? true, ...(o.unit ? { unit: o.unit } : {}), ...(o.step !== undefined ? { step: o.step } : {}) });
51
+ const groupOf = (path) => GROUP_OF[path.split('.')[0]] ?? 'Canvas';
52
+ const num = (path, def, min, max, description, o = {}) => ({ path, group: groupOf(path), type: 'number', default: def, min, max, description, ...base({ step: 0.01, ...o }) });
53
+ const int = (path, def, min, max, description, o = {}) => ({ path, group: groupOf(path), type: 'integer', default: def, min, max, description, ...base({ step: 1, ...o }) });
54
+ const frames = (path, def, max, description, min = 0) => int(path, def, min, max, description, { unit: 'frames' });
55
+ const bool = (path, def, description, o = {}) => ({ path, group: groupOf(path), type: 'boolean', default: def, description, ...base(o) });
56
+ const color = (path, def, description, o = {}) => ({ path, group: groupOf(path), type: 'color', default: def, description, ...base(o) });
57
+ const choice = (path, def, options, description, o = {}) => ({ path, group: groupOf(path), type: 'enum', default: def, options, description, ...base(o) });
58
+ const text = (path, def, maxLength, description, o = {}) => ({ path, group: groupOf(path), type: 'text', default: def, maxLength, minLength: o.minLength ?? 0, description, ...base(o) });
59
+ const easing = (path, def, description) => ({ path, group: groupOf(path), type: 'easing', default: def, options: EASING_NAMES, description, ...base() });
60
+ const asset = (path, description) => ({ path, group: groupOf(path), type: 'asset', default: '', maxLength: 2048, description, ...base() });
61
+ const opacity = (path, def, description) => num(path, def, 0, 1, description, { unit: 'fraction' });
62
+ const du = (path, def, min, max, description) => num(path, def, min, max, description, { step: 1, unit: 'du' });
63
+ const norm = (path, def, min, max, description) => num(path, def, min, max, description, { step: 0.005, unit: 'normalized' });
64
+ const deg = (path, def, min, max, description) => num(path, def, min, max, description, { step: 0.1, unit: 'deg' });
65
+ const factor = (path, def, min, max, description) => num(path, def, min, max, description, { step: 0.01, unit: 'factor' });
66
+ const weight = (path, def, description) => choice(path, def, FONT_WEIGHTS, description, { unit: 'weight' });
67
+ const LAYOUTS = {
68
+ landscape: { textY: 0.085, textWidth: 0.7, productX: 0.5, productY: 0.66, productWidth: 0.6, productHeight: 0.58, ctaY: 0.955, titleScale: 1, uiColumns: 3, logoX: 0.045, logoY: 0.07 },
69
+ portrait: { textY: 0.08, textWidth: 0.86, productX: 0.5, productY: 0.61, productWidth: 0.84, productHeight: 0.54, ctaY: 0.935, titleScale: 1.3, uiColumns: 2, logoX: 0.07, logoY: 0.04 },
70
+ square: { textY: 0.075, textWidth: 0.82, productX: 0.5, productY: 0.635, productWidth: 0.76, productHeight: 0.6, ctaY: 0.955, titleScale: 0.92, uiColumns: 3, logoX: 0.05, logoY: 0.06 },
71
+ };
72
+ const layoutControls = (name, d) => {
73
+ const p = `layout.${name}`;
74
+ const shape = name === 'landscape' ? '16:9' : name === 'portrait' ? '9:16' : '1:1';
75
+ return [
76
+ norm(`${p}.text.x`, 0.5, 0, 1, `(${shape}) Centre of the headline block, across the canvas.`),
77
+ norm(`${p}.text.y`, d.textY, 0, 1, `(${shape}) Top of the headline block, down the canvas.`),
78
+ norm(`${p}.text.width`, d.textWidth, 0.2, 1, `(${shape}) Width the headline wraps within, as a fraction of the canvas width.`),
79
+ choice(`${p}.text.align`, 'center', ['left', 'center', 'right'], `(${shape}) Headline alignment.`),
80
+ factor(`${p}.titleScale`, d.titleScale, 0.3, 2.5, `(${shape}) Multiplies every headline type size on this canvas shape.`),
81
+ norm(`${p}.product.x`, d.productX, 0, 1, `(${shape}) Centre of the product slot, across the canvas.`),
82
+ norm(`${p}.product.y`, d.productY, 0, 1.2, `(${shape}) Centre of the product slot, down the canvas.`),
83
+ norm(`${p}.product.width`, d.productWidth, 0.1, 1.5, `(${shape}) Product slot width, as a fraction of the canvas width.`),
84
+ norm(`${p}.product.height`, d.productHeight, 0.1, 1.5, `(${shape}) Product slot height, as a fraction of the canvas height.`),
85
+ int(`${p}.uiColumns`, d.uiColumns, 1, 4, `(${shape}) Card columns inside the product UI (grid layout).`),
86
+ norm(`${p}.cta.x`, 0.5, 0, 1, `(${shape}) Centre of the call-to-action button, across the canvas.`),
87
+ norm(`${p}.cta.y`, d.ctaY, 0, 1, `(${shape}) Centre of the call-to-action button, down the canvas.`),
88
+ norm(`${p}.logo.x`, d.logoX, 0, 1, `(${shape}) Left edge of the promo logo, across the canvas.`),
89
+ norm(`${p}.logo.y`, d.logoY, 0, 1, `(${shape}) Centre of the promo logo, down the canvas.`),
90
+ ];
91
+ };
92
+ const textAnim = (el, what, d) => {
93
+ const p = `textAnimation.${el}`;
94
+ return [
95
+ bool(`${p}.enabled`, true, `Animate the ${what} in. Off: it is shown at its end values from the start.`),
96
+ choice(`${p}.mode`, d.mode, TEXT_MODES, `How the ${what} arrives. fade: opacity. slide: Y and opacity. scale: scale and opacity. blur: blur, Y and opacity. reveal: a mask wipes it up from below. none: no motion.`),
97
+ frames(`${p}.delayFrames`, d.delay, 600, `Delay after its phase starts (${el === 'cta' ? 'outro' : 'intro'}; in later scenes, after the scene starts).`),
98
+ frames(`${p}.durationFrames`, d.duration, 600, `How long the ${what} takes to arrive.`, 1),
99
+ du(`${p}.startY`, d.startY, -600, 600, `Vertical offset it starts from (slide, blur, reveal).`),
100
+ du(`${p}.endY`, 0, -600, 600, `Vertical offset it settles at.`),
101
+ opacity(`${p}.startOpacity`, 0, `Opacity it starts from.`),
102
+ opacity(`${p}.endOpacity`, 1, `Opacity it settles at.`),
103
+ factor(`${p}.startScale`, d.startScale, 0, 4, `Scale it starts from (scale mode; slight in the others).`),
104
+ factor(`${p}.endScale`, 1, 0, 4, `Scale it settles at.`),
105
+ deg(`${p}.rotation`, 0, -45, 45, `Rotation it starts from, settling to 0.`),
106
+ du(`${p}.blur`, d.blur, 0, 80, `Blur it starts from (blur mode; a light touch in the others).`),
107
+ easing(`${p}.easing`, d.easing, `How the ${what} arrives.`),
108
+ choice(`${p}.split`, d.split, ['none', 'words', 'lines'], `Animate the ${what} as one block, word by word, or line by line.`),
109
+ frames(`${p}.staggerFrames`, d.stagger, 60, `Delay between words or lines when split.`),
110
+ ];
111
+ };
112
+ const phase = (id, delay, duration, hold, what) => [
113
+ int(`timeline.${id}.delayFrames`, delay, -240, 600, `Gap after the previous phase ends (negative overlaps it). ${what}`, { unit: 'frames' }),
114
+ frames(`timeline.${id}.durationFrames`, duration, 3600, `Length of the ${id} phase.`, id === 'showcase' || id === 'productSettle' ? 0 : 1),
115
+ frames(`timeline.${id}.holdFrames`, hold, 3600, `Still frames added after the ${id} phase before the next one starts.`),
116
+ ];
117
+ export const CONTROLS = [
118
+ /* ─── canvas ─────────────────────────────────────────────────────────────────────────────── */
119
+ choice('canvas.aspectRatio', '16:9', ASPECT_RATIOS, 'Canvas shape. Each shape reads its own layout block (layout.landscape / portrait / square): the composition reflows, it is never stretched.'),
120
+ int('canvas.width', 3840, 256, 7680, 'Output width in pixels. Must match the aspect ratio (±1%).', { unit: 'px' }),
121
+ int('canvas.height', 2160, 256, 7680, 'Output height in pixels. Must match the aspect ratio (±1%).', { unit: 'px' }),
122
+ choice('canvas.fps', 60, FPS_OPTIONS, 'Output frame rate. Timing is authored in 60 fps motion frames; a lower rate samples the same motion, it does not slow it down.'),
123
+ choice('canvas.durationMode', 'auto', ['auto', 'fixed'], 'auto: the video lasts as long as the timeline (or the scenes, if longer). fixed: it lasts canvas.durationFrames — the end is held, or the timeline is cut.'),
124
+ int('canvas.durationFrames', 600, 30, 36000, 'Output length in output frames (durationMode fixed).', { unit: 'frames' }),
125
+ color('canvas.backgroundColor', '#12062e', 'Colour behind everything; the outro\'s fadeToBase exit fades to it.'),
126
+ int('canvas.seed', 20260930, 0, 2147483647, 'Seed for every random choice not seeded on its own. Same config + same seed = identical frames.'),
127
+ num('canvas.safeArea', 0.04, 0, 0.2, 'Inset on every side, as a fraction of the short side, that the logo, headline and CTA keep clear of.', { unit: 'fraction' }),
128
+ /* ─── layout (per aspect ratio) ─────────────────────────────────────────────────────────── */
129
+ ...layoutControls('landscape', LAYOUTS.landscape),
130
+ ...layoutControls('portrait', LAYOUTS.portrait),
131
+ ...layoutControls('square', LAYOUTS.square),
132
+ /* ─── content ────────────────────────────────────────────────────────────────────────────── */
133
+ text('content.eyebrow', 'Website promo video', 48, 'Small line above the headline. Empty hides it.'),
134
+ text('content.title', 'Build faster with AI', 80, 'The headline. Wraps within the layout\'s text width. Empty hides it.'),
135
+ text('content.subtitle', 'Turn your ideas into production-ready experiences.', 140, 'The line under the headline. Empty hides it.'),
136
+ text('content.productName', 'Acme AI', 40, 'The product\'s name: the browser tab title and the accessible label.', { minLength: 1 }),
137
+ bool('content.logo.enabled', true, 'Show the promo logo in the corner of the video.'),
138
+ text('content.logo.text', 'LOGO', 24, 'Logo wordmark. With assets.logo set, the image is shown instead of the mark.'),
139
+ choice('content.logo.mark', 'spark', ['none', 'dot', 'spark', 'square', 'ring'], 'A procedural logo mark drawn before the wordmark.'),
140
+ color('content.logo.color', '#ffffff', 'Logo wordmark colour.'),
141
+ color('content.logo.markColor', '#f0abfc', 'Logo mark colour.'),
142
+ du('content.logo.size', 30, 8, 120, 'Logo wordmark size.'),
143
+ bool('content.cta.enabled', true, 'Show the call-to-action button.'),
144
+ text('content.cta.text', 'Try it now', 32, 'Call-to-action label.'),
145
+ choice('content.cta.style', 'pill', ['pill', 'rounded', 'outline'], 'Button shape.'),
146
+ color('content.cta.backgroundColor', '#ffffff', 'Button fill (the outline colour in outline style).'),
147
+ color('content.cta.textColor', '#4c1d95', 'Button label colour.'),
148
+ bool('content.cta.arrow', true, 'Draw an arrow after the label.'),
149
+ bool('content.badge.enabled', true, 'Show the badge pinned to the product window\'s top-right corner.'),
150
+ text('content.badge.text', 'AI powered', 28, 'Badge label.'),
151
+ choice('content.badge.icon', 'sparkle', ICONS, 'Badge icon (drawn procedurally).'),
152
+ color('content.badge.backgroundColor', '#ffffff', 'Badge fill.'),
153
+ color('content.badge.textColor', '#6d28d9', 'Badge label and icon colour.'),
154
+ bool('content.showTopBarTitle', true, 'Show the product name as the browser tab title.'),
155
+ /* ─── product window ───────────────────────────────────────────────────────────────────────── */
156
+ bool('productWindow.enabled', true, 'Show the product window at all.'),
157
+ norm('productWindow.x', 0.5, -0.5, 1.5, 'Window centre across its layout slot (0.5 = centred in the slot).'),
158
+ norm('productWindow.y', 0.5, -0.5, 1.5, 'Window centre down its layout slot.'),
159
+ norm('productWindow.width', 1, 0.1, 2, 'Window width as a fraction of the slot width.'),
160
+ norm('productWindow.height', 1, 0.1, 2, 'Window height as a fraction of the slot height.'),
161
+ factor('productWindow.scale', 1, 0.2, 3, 'Scale of the window (after entrance and float).'),
162
+ deg('productWindow.rotation', 0, -30, 30, 'Resting rotation of the window.'),
163
+ du('productWindow.radius', 30, 0, 200, 'Corner radius.'),
164
+ color('productWindow.backgroundColor', '#ffffff', 'Window surface colour.'),
165
+ du('productWindow.borderWidth', 2, 0, 20, 'Border width.'),
166
+ color('productWindow.borderColor', '#ffffff', 'Border colour.'),
167
+ opacity('productWindow.borderOpacity', 0.7, 'Border opacity.'),
168
+ bool('productWindow.shadow', true, 'Drop a soft shadow under the window.'),
169
+ du('productWindow.shadowBlur', 90, 0, 400, 'Shadow blur.'),
170
+ opacity('productWindow.shadowOpacity', 0.38, 'Shadow opacity.'),
171
+ color('productWindow.shadowColor', '#2a0a5e', 'Shadow colour.'),
172
+ du('productWindow.shadowOffsetY', 40, -200, 200, 'Shadow offset down.'),
173
+ opacity('productWindow.opacity', 1, 'Window opacity (after the entrance).'),
174
+ /* ─── window chrome ────────────────────────────────────────────────────────────────────────── */
175
+ bool('window.showChrome', true, 'Draw browser chrome (the top bar and its parts). Off: a bare rounded panel.'),
176
+ bool('window.showTopBar', true, 'Show the top bar.'),
177
+ bool('window.showTrafficLights', true, 'Show the three window buttons in the top bar.'),
178
+ bool('window.showAddressBar', true, 'Show the address field in the top bar.'),
179
+ text('window.addressText', 'acme.ai/studio', 60, 'Text in the address field.'),
180
+ du('window.topBarHeight', 52, 20, 160, 'Top bar height.'),
181
+ color('window.topBarColor', '#f5f3fa', 'Top bar colour.'),
182
+ color('window.topBarTextColor', '#8b85a0', 'Top bar text colour (address and tab title).'),
183
+ color('window.trafficLight1', '#ff6159', 'First window button colour.'),
184
+ color('window.trafficLight2', '#ffbd2e', 'Second window button colour.'),
185
+ color('window.trafficLight3', '#28c941', 'Third window button colour.'),
186
+ du('window.perspective', 2600, 400, 10000, 'Perspective distance for the window\'s 3D tilt.'),
187
+ deg('window.tiltX', 0, -40, 40, 'Resting tilt back (positive) or forward, in 3D.'),
188
+ deg('window.tiltY', 0, -40, 40, 'Resting turn left or right, in 3D.'),
189
+ /* ─── product header ───────────────────────────────────────────────────────────────────────── */
190
+ bool('productHeader.showNavigation', true, 'Show the app\'s navigation bar under the top bar.'),
191
+ bool('productHeader.showLogo', true, 'Show the app logo in the navigation bar.'),
192
+ text('productHeader.logo', 'LOGO', 24, 'App logo text in the navigation bar.'),
193
+ text('productHeader.activeItem', 'Text', 24, 'The highlighted navigation item: one of productHeader.navItems, or empty for none.'),
194
+ bool('productHeader.showAction', true, 'Show a button on the right of the navigation bar.'),
195
+ text('productHeader.actionText', 'Sign up', 20, 'Navigation bar button label.'),
196
+ du('productHeader.height', 72, 30, 200, 'Navigation bar height.'),
197
+ du('productHeader.padding', 34, 0, 160, 'Horizontal padding of the navigation bar.'),
198
+ du('productHeader.fontSize', 19, 8, 60, 'Navigation text size.'),
199
+ weight('productHeader.fontWeight', 500, 'Navigation text weight.'),
200
+ color('productHeader.backgroundColor', '#ffffff', 'Navigation bar colour.'),
201
+ color('productHeader.textColor', '#6f6886', 'Navigation item colour.'),
202
+ color('productHeader.activeColor', '#1c1432', 'Active item colour.'),
203
+ color('productHeader.activeBackground', '#f0eaff', 'Active item pill colour.'),
204
+ color('productHeader.logoColor', '#1c1432', 'App logo colour.'),
205
+ color('productHeader.accentColor', '#7c3aed', 'Navigation button colour.'),
206
+ bool('productHeader.showDivider', true, 'Draw a line under the navigation bar.'),
207
+ color('productHeader.dividerColor', '#eeebf5', 'Divider colour.'),
208
+ /* ─── product UI content ───────────────────────────────────────────────────────────────────── */
209
+ color('productContent.backgroundColor', '#ffffff', 'App content background.'),
210
+ color('productContent.accentColor', '#7c3aed', 'App accent: send button, focus ring, highlights.'),
211
+ color('productContent.textColor', '#1c1432', 'App body text colour.'),
212
+ color('productContent.mutedColor', '#8b85a0', 'App secondary text colour.'),
213
+ du('productContent.padding', 40, 0, 200, 'App content padding.'),
214
+ du('productContent.fontSize', 21, 8, 60, 'App body text size.'),
215
+ bool('productContent.greeting.enabled', true, 'Show the user\'s message bubble.'),
216
+ text('productContent.greeting.text', 'Could you please send me your amazing portfolio to check?', 140, 'The user\'s message.'),
217
+ choice('productContent.greeting.align', 'right', ['left', 'right'], 'Which side the user\'s message sits.'),
218
+ color('productContent.greeting.bubbleColor', '#7c3aed', 'Message bubble colour.'),
219
+ color('productContent.greeting.textColor', '#ffffff', 'Message text colour.'),
220
+ bool('productContent.avatar.enabled', true, 'Show the assistant avatar beside the reply.'),
221
+ text('productContent.avatar.initials', 'A', 3, 'Avatar initials (with no assets.avatar image).'),
222
+ color('productContent.avatar.color', '#c084fc', 'Avatar colour (with no image).'),
223
+ bool('productContent.response.enabled', true, 'Show the assistant\'s reply line above the cards.'),
224
+ text('productContent.response.text', 'Sure! Here are a few things I made for you:', 120, 'The assistant\'s reply.'),
225
+ bool('productContent.hero.enabled', false, 'Show a wide hero panel above the cards (assets.heroImage, or a procedural placeholder).'),
226
+ norm('productContent.hero.height', 0.3, 0.05, 0.8, 'Hero panel height, as a fraction of the content area.'),
227
+ choice('productContent.cardLayout', 'grid', ['grid', 'free'], 'grid: cards fill a grid (their x/y nudge, width/height multiply the cell). free: each card\'s x/y/width/height place it in the content area.'),
228
+ du('productContent.cardGap', 22, 0, 120, 'Space between cards (grid).'),
229
+ bool('productContent.input.enabled', true, 'Show the message input at the bottom of the app.'),
230
+ text('productContent.input.placeholder', 'Write a message...', 60, 'Input placeholder.'),
231
+ text('productContent.input.typeText', 'Make the hero section brighter', 80, 'Text typed into the input during the showcase. Empty: the placeholder stays.'),
232
+ num('productContent.input.typeSpeed', 18, 1, 80, 'Typing speed, characters per second.', { step: 1, unit: 'factor' }),
233
+ color('productContent.input.backgroundColor', '#f7f5fc', 'Input colour.'),
234
+ color('productContent.input.borderColor', '#e9e4f5', 'Input border colour.'),
235
+ text('productContent.sendButton', '↑', 8, 'Send button label.'),
236
+ color('productContent.sendButtonColor', '#7c3aed', 'Send button colour.'),
237
+ color('productContent.sendButtonTextColor', '#ffffff', 'Send button label colour.'),
238
+ /* ─── background ───────────────────────────────────────────────────────────────────────────── */
239
+ color('background.baseColor', '#3b0f8c', 'Base colour under the gradient.'),
240
+ bool('background.gradient.enabled', true, 'Lay the gradient (background.gradient.stops) over the base.'),
241
+ choice('background.gradient.type', 'mesh', ['linear', 'radial', 'mesh'], 'linear: along the angle. radial: from the centre out. mesh: soft blobs of each stop colour around the canvas.'),
242
+ deg('background.gradient.angle', 135, 0, 360, 'Linear direction (0 = upwards, 90 = to the right); for mesh, rotates the blobs.'),
243
+ norm('background.gradient.softness', 0.65, 0, 1, 'Mesh blob softness (0 = hard edges, 1 = very diffuse).'),
244
+ bool('background.glow.enabled', true, 'The main luminous glow behind the product.'),
245
+ norm('background.glow.x', 0.5, -0.5, 1.5, 'Glow centre across the canvas.'),
246
+ norm('background.glow.y', 0.6, -0.5, 1.5, 'Glow centre down the canvas.'),
247
+ num('background.glow.radius', 0.75, 0, 3, 'Glow radius, as a fraction of the short side.', { unit: 'short' }),
248
+ color('background.glow.color', '#f5a3ff', 'Glow colour.'),
249
+ opacity('background.glow.intensity', 0.75, 'Glow strength.'),
250
+ du('background.glow.blur', 60, 0, 400, 'Extra blur on the glow.'),
251
+ bool('background.secondaryGlow.enabled', true, 'A second, cooler glow.'),
252
+ norm('background.secondaryGlow.x', 0.12, -0.5, 1.5, 'Second glow centre across the canvas.'),
253
+ norm('background.secondaryGlow.y', 0.18, -0.5, 1.5, 'Second glow centre down the canvas.'),
254
+ num('background.secondaryGlow.radius', 0.7, 0, 3, 'Second glow radius, as a fraction of the short side.', { unit: 'short' }),
255
+ color('background.secondaryGlow.color', '#7c9bff', 'Second glow colour.'),
256
+ opacity('background.secondaryGlow.intensity', 0.55, 'Second glow strength.'),
257
+ bool('background.noise.enabled', true, 'Fine film grain over the background (a seeded turbulence).'),
258
+ opacity('background.noise.opacity', 0.07, 'Grain opacity.'),
259
+ factor('background.noise.scale', 1, 0.2, 5, 'Grain size.'),
260
+ int('background.noise.seed', 7, 0, 100000, 'Grain seed.'),
261
+ bool('background.vignette.enabled', true, 'Darken towards the corners.'),
262
+ opacity('background.vignette.intensity', 0.35, 'Vignette strength.'),
263
+ color('background.vignette.color', '#14052f', 'Vignette colour.'),
264
+ /* ─── typography ───────────────────────────────────────────────────────────────────────────── */
265
+ choice('typography.fontFamily', 'Plus Jakarta Sans', FONT_FAMILIES, 'Headline typeface (registered and loaded by the renderer).'),
266
+ choice('typography.uiFontFamily', 'Inter', FONT_FAMILIES, 'Typeface inside the product UI.'),
267
+ du('typography.eyebrowSize', 24, 8, 120, 'Eyebrow size.'),
268
+ du('typography.titleSize', 96, 16, 400, 'Headline size (times the layout\'s titleScale).'),
269
+ du('typography.subtitleSize', 32, 8, 160, 'Subtitle size.'),
270
+ du('typography.ctaSize', 26, 8, 120, 'Call-to-action label size.'),
271
+ du('typography.badgeSize', 19, 8, 80, 'Badge label size.'),
272
+ weight('typography.eyebrowWeight', 600, 'Eyebrow weight.'),
273
+ weight('typography.titleWeight', 700, 'Headline weight.'),
274
+ weight('typography.subtitleWeight', 400, 'Subtitle weight.'),
275
+ weight('typography.ctaWeight', 600, 'Call-to-action weight.'),
276
+ num('typography.titleLetterSpacing', -0.035, -0.15, 0.3, 'Headline tracking.', { step: 0.005, unit: 'em' }),
277
+ num('typography.eyebrowLetterSpacing', 0.12, -0.1, 0.5, 'Eyebrow tracking.', { step: 0.005, unit: 'em' }),
278
+ num('typography.titleLineHeight', 1.04, 0.7, 2, 'Headline line height.', { step: 0.01, unit: 'em' }),
279
+ num('typography.subtitleLineHeight', 1.4, 0.8, 2.5, 'Subtitle line height.', { step: 0.01, unit: 'em' }),
280
+ choice('typography.eyebrowCase', 'uppercase', ['none', 'uppercase'], 'Eyebrow letter case.'),
281
+ choice('typography.eyebrowStyle', 'pill', ['pill', 'plain'], 'Eyebrow in a translucent pill, or plain text.'),
282
+ color('typography.eyebrowColor', '#ffffff', 'Eyebrow colour.'),
283
+ color('typography.eyebrowBackground', '#ffffff', 'Eyebrow pill colour.'),
284
+ opacity('typography.eyebrowBackgroundOpacity', 0.16, 'Eyebrow pill opacity.'),
285
+ color('typography.titleColor', '#ffffff', 'Headline colour.'),
286
+ bool('typography.titleGradient.enabled', true, 'Fill the headline with a vertical gradient instead of the flat colour.'),
287
+ color('typography.titleGradient.from', '#ffffff', 'Headline gradient top.'),
288
+ color('typography.titleGradient.to', '#f3d4ff', 'Headline gradient bottom.'),
289
+ color('typography.subtitleColor', '#f3e8ff', 'Subtitle colour.'),
290
+ opacity('typography.subtitleOpacity', 0.86, 'Subtitle opacity.'),
291
+ du('typography.gap', 20, 0, 200, 'Space between eyebrow, headline and subtitle.'),
292
+ opacity('typography.shadowOpacity', 0.28, 'Soft shadow under the headline text.'),
293
+ color('typography.shadowColor', '#2a0a5e', 'Headline shadow colour.'),
294
+ du('typography.shadowBlur', 30, 0, 200, 'Headline shadow blur.'),
295
+ /* ─── text animation ───────────────────────────────────────────────────────────────────────── */
296
+ ...textAnim('eyebrow', 'eyebrow', { mode: 'blur', delay: 0, duration: 30, startY: 24, blur: 14, easing: 'easeOutCubic', split: 'none', stagger: 0, startScale: 0.96 }),
297
+ ...textAnim('title', 'headline', { mode: 'blur', delay: 6, duration: 42, startY: 48, blur: 22, easing: 'easeOutQuart', split: 'words', stagger: 5, startScale: 0.96 }),
298
+ ...textAnim('subtitle', 'subtitle', { mode: 'slide', delay: 20, duration: 36, startY: 30, blur: 8, easing: 'easeOutCubic', split: 'none', stagger: 0, startScale: 0.98 }),
299
+ ...textAnim('cta', 'call-to-action', { mode: 'scale', delay: 0, duration: 30, startY: 24, blur: 6, easing: 'easeOutBack', split: 'none', stagger: 0, startScale: 0.7 }),
300
+ /* ─── product entrance / float ─────────────────────────────────────────────────────────────── */
301
+ bool('productEntrance.enabled', true, 'Animate the product window in. Off: it is in place from the first frame.'),
302
+ factor('productEntrance.startScale', 0.84, 0, 4, 'Scale it starts from.'),
303
+ factor('productEntrance.endScale', 1, 0, 4, 'Scale it settles at.'),
304
+ du('productEntrance.startY', 260, -2000, 2000, 'Vertical offset it rises from.'),
305
+ du('productEntrance.endY', 0, -2000, 2000, 'Vertical offset it settles at.'),
306
+ opacity('productEntrance.startOpacity', 0, 'Opacity it starts from.'),
307
+ opacity('productEntrance.endOpacity', 1, 'Opacity it settles at.'),
308
+ deg('productEntrance.startRotation', -1.5, -45, 45, 'Rotation it starts from.'),
309
+ deg('productEntrance.endRotation', 0, -45, 45, 'Rotation it settles at.'),
310
+ deg('productEntrance.startTilt', 22, -60, 60, '3D tilt back it starts from (perspective).'),
311
+ deg('productEntrance.endTilt', 0, -60, 60, '3D tilt it settles at.'),
312
+ frames('productEntrance.delayFrames', 0, 600, 'Delay after the productEntrance phase starts.'),
313
+ frames('productEntrance.durationFrames', 54, 600, 'How long the entrance takes.', 1),
314
+ easing('productEntrance.easing', 'easeOutQuart', 'How the window arrives.'),
315
+ bool('productFloat.enabled', true, 'After the entrance, the window floats gently (from the productSettle phase).'),
316
+ du('productFloat.amplitudeX', 4, 0, 200, 'Horizontal float.'),
317
+ du('productFloat.amplitudeY', 10, 0, 200, 'Vertical float.'),
318
+ deg('productFloat.rotationAmplitude', 0.3, 0, 10, 'Rotation float.'),
319
+ num('productFloat.frequency', 0.22, 0.01, 3, 'Float cycles per second (a whole number of cycles per loop when looping).', { step: 0.01, unit: 'hz' }),
320
+ norm('productFloat.phase', 0, 0, 1, 'Where in its cycle the float starts.'),
321
+ choice('productFloat.easing', 'easeInOut', ['linear', 'easeInOut', 'easeInOutCubic', 'easeInOutQuart'], 'Float wave shape: easeInOut is sine-like, linear a triangle.'),
322
+ frames('productFloat.rampFrames', 40, 600, 'The float grows in over this long, so it does not jump after the entrance.'),
323
+ /* ─── camera ───────────────────────────────────────────────────────────────────────────────── */
324
+ bool('camera.enabled', true, 'Move a camera over the whole composition (zoom, pan, drift).'),
325
+ factor('camera.startScale', 1.08, 0.3, 4, 'Zoom at the start.'),
326
+ factor('camera.endScale', 1, 0.3, 4, 'Zoom at the end of the move.'),
327
+ norm('camera.startX', 0, -0.5, 0.5, 'Pan at the start, as a fraction of the canvas width (positive moves the view right).'),
328
+ norm('camera.endX', 0, -0.5, 0.5, 'Pan at the end.'),
329
+ norm('camera.startY', 0.02, -0.5, 0.5, 'Pan at the start, as a fraction of the canvas height (positive moves the view down).'),
330
+ norm('camera.endY', 0, -0.5, 0.5, 'Pan at the end.'),
331
+ deg('camera.startRotation', 0, -30, 30, 'Roll at the start.'),
332
+ deg('camera.endRotation', 0, -30, 30, 'Roll at the end.'),
333
+ du('camera.perspective', 3000, 400, 10000, 'Perspective distance for the camera tilt.'),
334
+ deg('camera.startTilt', 6, -40, 40, 'Camera tilt at the start (3D, around the horizontal axis).'),
335
+ deg('camera.endTilt', 0, -40, 40, 'Camera tilt at the end.'),
336
+ frames('camera.delayFrames', 0, 3600, 'When the move starts (from frame 0).'),
337
+ frames('camera.durationFrames', 360, 36000, 'How long the move takes.', 1),
338
+ easing('camera.easing', 'easeInOutCubic', 'How the camera moves.'),
339
+ du('camera.driftAmplitude', 6, 0, 200, 'A slow drift layered over the move (also what keeps a loop alive).'),
340
+ num('camera.driftFrequency', 0.08, 0.01, 2, 'Drift cycles per second.', { step: 0.01, unit: 'hz' }),
341
+ factor('camera.parallax', 0.5, 0, 2, 'How much more the background and floating elements move than the product (depth).'),
342
+ /* ─── card animation ───────────────────────────────────────────────────────────────────────── */
343
+ choice('cardAnimation.entrance', 'slide-up', CARD_ENTRANCES, 'How each card arrives.'),
344
+ frames('cardAnimation.delayFrames', 12, 600, 'Delay after the contentReveal phase starts.'),
345
+ frames('cardAnimation.durationFrames', 34, 600, 'How long each card takes to arrive.', 1),
346
+ frames('cardAnimation.staggerFrames', 8, 120, 'Delay between one card and the next (deterministic, in list order).'),
347
+ du('cardAnimation.distance', 60, 0, 1000, 'How far cards travel in (slide modes).'),
348
+ factor('cardAnimation.startScale', 0.9, 0, 2, 'Scale cards start from (scale mode, and slightly in the others).'),
349
+ opacity('cardAnimation.opacity', 0, 'Opacity cards start from.'),
350
+ easing('cardAnimation.easing', 'easeOutCubic', 'How each card arrives.'),
351
+ bool('cardAnimation.highlight.enabled', true, 'During the showcase, lift each card in turn.'),
352
+ factor('cardAnimation.highlight.scale', 1.045, 1, 1.5, 'Lifted card scale.'),
353
+ du('cardAnimation.highlight.lift', 10, 0, 100, 'Lifted card rise.'),
354
+ frames('cardAnimation.highlight.everyFrames', 50, 600, 'How long each card stays lifted.', 10),
355
+ /* ─── particles ────────────────────────────────────────────────────────────────────────────── */
356
+ bool('particles.enabled', true, 'Drifting light particles over the background.'),
357
+ int('particles.count', 70, 0, 400, 'Number of particles.'),
358
+ int('particles.seed', 42, 0, 100000, 'Particle seed. Same seed = same particles, frame for frame.'),
359
+ du('particles.sizeMin', 2, 0.5, 60, 'Smallest particle diameter.'),
360
+ du('particles.sizeMax', 7, 0.5, 120, 'Largest particle diameter.'),
361
+ opacity('particles.opacityMin', 0.2, 'Faintest particle.'),
362
+ opacity('particles.opacityMax', 0.85, 'Brightest particle.'),
363
+ num('particles.speed', 22, 0, 600, 'Drift speed.', { step: 1, unit: 'du/s' }),
364
+ deg('particles.direction', 270, 0, 360, 'Drift direction (0 = right, 90 = down, 270 = up).'),
365
+ deg('particles.spread', 35, 0, 180, 'How far each particle\'s direction may vary from the main one.'),
366
+ color('particles.color', '#ffffff', 'Particle colour.'),
367
+ opacity('particles.glow', 0.6, 'Soft halo around each particle.'),
368
+ du('particles.blur', 0, 0, 40, 'Particle blur.'),
369
+ opacity('particles.twinkle', 0.5, 'How much particles flicker (0 = steady).'),
370
+ frames('particles.fadeInFrames', 40, 600, 'Particles fade in over this long from frame 0.'),
371
+ /* ─── glow (bloom) ─────────────────────────────────────────────────────────────────────────── */
372
+ bool('glow.enabled', true, 'Bloom: a coloured halo around the product window and the headline.'),
373
+ opacity('glow.intensity', 0.55, 'Bloom strength.'),
374
+ du('glow.radius', 140, 0, 600, 'Bloom spread.'),
375
+ opacity('glow.opacity', 0.6, 'Bloom opacity.'),
376
+ color('glow.color', '#e879f9', 'Bloom colour.'),
377
+ opacity('glow.threshold', 0.55, 'Only elements brighter than this bloom (by their colour\'s luminance): 0 = everything, 1 = nothing.'),
378
+ /* ─── timeline ─────────────────────────────────────────────────────────────────────────────── */
379
+ ...phase('intro', 0, 42, 0, 'The background settles and the headline arrives.'),
380
+ ...phase('productEntrance', -18, 60, 0, 'The product window arrives.'),
381
+ ...phase('productSettle', -10, 20, 0, 'The window settles and starts to float.'),
382
+ ...phase('contentReveal', -6, 84, 0, 'The UI fills in: message, reply, cards, floating elements.'),
383
+ ...phase('showcase', 0, 210, 0, 'The product is shown off: cards lift in turn, the input types.'),
384
+ ...phase('outro', 0, 48, 36, 'The call to action arrives; the exit plays.'),
385
+ choice('timeline.outro.exit', 'none', ['none', 'fade', 'zoom', 'fadeToBase'], 'How the video ends: hold (none), fade everything out, zoom into the product, or fade to canvas.backgroundColor.'),
386
+ bool('loop.enabled', false, 'Loop seamlessly: the settled composition plays with only periodic motion (float, drift, lights, particles, card highlights, scenes), and the last frame leads into the first.'),
387
+ frames('loop.loopDurationFrames', 480, 36000, 'Loop length (motion frames). Periodic motion is fitted to a whole number of cycles.', 60),
388
+ /* ─── scenes ───────────────────────────────────────────────────────────────────────────────── */
389
+ frames('sceneTransition.durationFrames', 24, 240, 'Scene change length: the old copy leaves, the new copy arrives, overridden values blend.', 1),
390
+ choice('sceneTransition.style', 'blur', ['crossfade', 'slide', 'blur'], 'How the old scene\'s copy leaves.'),
391
+ /* ─── assets ───────────────────────────────────────────────────────────────────────────────── */
392
+ asset('assets.logo', 'Logo image, shown instead of the logo mark and wordmark. An asset reference: static:<file> (the render\'s public folder), https://…, or a PNG/JPEG/WebP data: URL. Empty: the procedural mark.'),
393
+ asset('assets.appLogo', 'Logo image inside the product\'s navigation bar. Empty: productHeader.logo text.'),
394
+ asset('assets.avatar', 'Assistant avatar image. Empty: initials on a colour.'),
395
+ asset('assets.heroImage', 'Hero panel image (productContent.hero). Empty: a procedural placeholder.'),
396
+ /* ─── export ───────────────────────────────────────────────────────────────────────────────── */
397
+ choice('export.codec', 'h264', ['h264', 'h265', 'prores', 'vp9'], 'Video codec for rendered files.'),
398
+ choice('export.pixelFormat', 'yuv420p', ['yuv420p', 'yuv422p10le', 'yuv444p10le'], 'Pixel format. yuv420p plays everywhere; ProRes needs a 10-bit format.'),
399
+ choice('export.colorSpace', 'bt709', ['bt709', 'default'], 'Colour space tag. bt709 is correct for HD/4K SDR.'),
400
+ int('export.crf', 12, 0, 51, 'H.264/H.265 quality (lower is better; 12 is visually lossless).'),
401
+ choice('export.x264Preset', 'slow', ['ultrafast', 'veryfast', 'fast', 'medium', 'slow', 'slower', 'veryslow'], 'Encoder effort.'),
402
+ choice('export.imageFormat', 'png', ['png', 'jpeg'], 'Frame capture format (png keeps gradients clean).'),
403
+ ];
404
+ /* ─── lists ───────────────────────────────────────────────────────────────────────────────────── */
405
+ const itemCtl = (group) => ({
406
+ num: (path, def, min, max, description, o = {}) => ({ ...num(path, def, min, max, description, o), group }),
407
+ int: (path, def, min, max, description, o = {}) => ({ ...int(path, def, min, max, description, o), group }),
408
+ text: (path, def, maxLength, description, o = {}) => ({ ...text(path, def, maxLength, description, o), group }),
409
+ color: (path, def, description) => ({ ...color(path, def, description), group }),
410
+ choice: (path, def, options, description) => ({ ...choice(path, def, options, description), group }),
411
+ asset: (path, description) => ({ ...asset(path, description), group }),
412
+ bool: (path, def, description) => ({ ...bool(path, def, description), group }),
413
+ });
414
+ const S = itemCtl('Background');
415
+ const STOP_ITEM = [
416
+ S.num('offset', 0, 0, 1, 'Where the stop sits along the gradient (0‥1). Stops must be in order.', { step: 0.01, unit: 'fraction' }),
417
+ S.color('color', '#7c3aed', 'Stop colour.'),
418
+ S.num('opacity', 1, 0, 1, 'Stop opacity.', { unit: 'fraction' }),
419
+ ];
420
+ const L = itemCtl('Lights');
421
+ const LIGHT_ITEM = [
422
+ L.num('x', 0.5, -0.5, 1.5, 'Light centre across the canvas.', { step: 0.005, unit: 'normalized' }),
423
+ L.num('y', 0.5, -0.5, 1.5, 'Light centre down the canvas.', { step: 0.005, unit: 'normalized' }),
424
+ L.num('radius', 0.4, 0.01, 3, 'Light radius, as a fraction of the short side.', { unit: 'short' }),
425
+ L.color('color', '#a855f7', 'Light colour.'),
426
+ L.num('opacity', 0.6, 0, 1, 'Light strength.', { unit: 'fraction' }),
427
+ L.num('blur', 40, 0, 400, 'Light blur.', { step: 1, unit: 'du' }),
428
+ L.choice('animation', 'drift', ['none', 'drift', 'pulse', 'orbit'], 'drift: wanders slowly. pulse: breathes in strength. orbit: circles its centre.'),
429
+ L.num('amplitude', 0.04, 0, 0.5, 'How far it moves (drift, orbit) as a fraction of the short side, or how much it breathes (pulse).', { step: 0.005, unit: 'short' }),
430
+ L.num('frequency', 0.1, 0.01, 2, 'Animation cycles per second.', { unit: 'hz' }),
431
+ L.num('phase', 0, 0, 1, 'Where in its cycle it starts.', { unit: 'fraction' }),
432
+ ];
433
+ const C = itemCtl('Product UI');
434
+ const CARD_ITEM = [
435
+ C.text('title', 'Card', 40, 'Card title. Empty hides it.'),
436
+ C.text('subtitle', '', 60, 'Card subtitle. Empty hides it.'),
437
+ C.asset('image', 'Card preview image (asset reference). Empty: the procedural placeholder.'),
438
+ C.choice('imageFit', 'cover', ['cover', 'contain'], 'How the image fills the preview.'),
439
+ C.choice('placeholder', 'website', PLACEHOLDERS, 'Procedural preview drawn when there is no image.'),
440
+ C.color('backgroundColor', '#f7f3ff', 'Card colour.'),
441
+ C.color('textColor', '#1c1432', 'Card text colour.'),
442
+ C.color('accentColor', '#8b5cf6', 'Card accent (the placeholder art and tag).'),
443
+ C.num('width', 1, 0.1, 3, 'grid: multiplies the cell width. free: fraction of the content area width.', { unit: 'factor' }),
444
+ C.num('height', 1, 0.1, 3, 'grid: multiplies the cell height. free: fraction of the content area height.', { unit: 'factor' }),
445
+ C.num('radius', 20, 0, 200, 'Corner radius.', { step: 1, unit: 'du' }),
446
+ C.num('x', 0, -1, 1, 'grid: nudge across, as a fraction of the cell width. free: centre across the content area (0‥1).', { step: 0.005, unit: 'normalized' }),
447
+ C.num('y', 0, -1, 1, 'grid: nudge down, as a fraction of the cell height. free: centre down the content area (0‥1).', { step: 0.005, unit: 'normalized' }),
448
+ C.num('rotation', 0, -45, 45, 'Card rotation.', { step: 0.1, unit: 'deg' }),
449
+ C.num('scale', 1, 0.1, 3, 'Card scale.', { unit: 'factor' }),
450
+ C.num('opacity', 1, 0, 1, 'Card opacity.', { unit: 'fraction' }),
451
+ ];
452
+ const N = itemCtl('Product Header');
453
+ const NAV_ITEM = [N.text('', 'Item', 20, 'A navigation item label.', { minLength: 1 })];
454
+ const F = itemCtl('Floating Elements');
455
+ const FLOAT_ITEM = [
456
+ F.choice('type', 'pill', ['badge', 'pill', 'icon', 'text'], 'badge: icon + label on a card. pill: label on a rounded pill. icon: an icon in a circle. text: bare label.'),
457
+ F.text('content', 'New', 24, 'Label (badge, pill, text).'),
458
+ F.choice('icon', 'sparkle', ICONS, 'Icon (badge, icon).'),
459
+ F.num('x', 0.5, -0.8, 1.8, 'Centre across the product window (0 = its left edge, 1 = its right edge; beyond floats beside it). Anchored to the window, so it follows every aspect ratio\'s layout; kept inside the safe area.', { step: 0.005, unit: 'normalized' }),
460
+ F.num('y', 0.5, -0.8, 1.8, 'Centre down the product window (0 = its top edge, 1 = its bottom edge).', { step: 0.005, unit: 'normalized' }),
461
+ F.num('scale', 1, 0.1, 5, 'Element scale.', { unit: 'factor' }),
462
+ F.num('rotation', 0, -180, 180, 'Element rotation.', { step: 0.1, unit: 'deg' }),
463
+ F.num('fontSize', 22, 8, 120, 'Label size.', { step: 1, unit: 'du' }),
464
+ F.color('backgroundColor', '#ffffff', 'Element fill colour.'),
465
+ F.num('backgroundOpacity', 0.92, 0, 1, 'Fill opacity (lower for glass).', { unit: 'fraction' }),
466
+ F.color('textColor', '#4c1d95', 'Label and icon colour.'),
467
+ F.num('borderRadius', 999, 0, 999, 'Corner radius (999 = fully round).', { step: 1, unit: 'du' }),
468
+ F.num('opacity', 1, 0, 1, 'Element opacity.', { unit: 'fraction' }),
469
+ F.num('blur', 0, 0, 60, 'Blur (depth of field).', { step: 1, unit: 'du' }),
470
+ F.choice('animation', 'float', ['none', 'float', 'pulse', 'drift', 'spin'], 'Motion once it has arrived.'),
471
+ F.num('amplitude', 12, 0, 300, 'How far it floats or drifts (du), or how much it pulses (per cent of its size).', { step: 1, unit: 'du' }),
472
+ F.num('frequency', 0.3, 0.01, 3, 'Motion cycles per second.', { unit: 'hz' }),
473
+ F.num('phase', 0, 0, 1, 'Where in its cycle it starts.', { unit: 'fraction' }),
474
+ F.choice('enter', 'pop', ['pop', 'fade', 'slide-up', 'none'], 'How it arrives.'),
475
+ F.int('delayFrames', 0, 0, 3600, 'When it arrives, after the contentReveal phase starts.', { unit: 'frames' }),
476
+ F.num('depth', 1, 0, 3, 'Parallax depth: how much it follows the camera drift (0 = fixed to the frame).', { unit: 'factor' }),
477
+ ];
478
+ const SC = itemCtl('Scenes');
479
+ /** What a scene's override maps may reach. */
480
+ export const OVERRIDE_SCOPES = {
481
+ contentOverrides: ['content.'],
482
+ backgroundOverrides: ['background.', 'lights.', 'glow.', 'particles.color', 'particles.count', 'particles.speed', 'particles.direction', 'canvas.backgroundColor'],
483
+ productOverrides: ['productWindow.', 'window.', 'productHeader.', 'productContent.'],
484
+ animationOverrides: ['camera.', 'productFloat.', 'cardAnimation.', 'textAnimation.'],
485
+ };
486
+ const overrides = (path, description) => ({
487
+ path, group: 'Scenes', type: 'overrides', default: {}, allow: OVERRIDE_SCOPES[path], description, userEditable: true, agentEditable: true,
488
+ });
489
+ const SCENE_ITEM = [
490
+ SC.text('id', 'scene', 32, 'Scene name (for people and patches).', { minLength: 1 }),
491
+ SC.int('durationFrames', 120, 30, 3600, 'Scene length.', { unit: 'frames' }),
492
+ overrides('contentOverrides', 'Copy for this scene: { "content.title": "…" }. Paths under content.'),
493
+ overrides('backgroundOverrides', 'Look for this scene: paths under background, lights, glow, and particles.color / count / speed / direction. Blended in over the transition.'),
494
+ overrides('productOverrides', 'Product for this scene: paths under productWindow, window, productHeader, productContent (e.g. "productContent.cards.0.title").'),
495
+ overrides('animationOverrides', 'Motion for this scene: paths under camera, productFloat, cardAnimation, textAnimation.'),
496
+ ];
497
+ const card = (title, subtitle, placeholder, bg, accent) => ({
498
+ title, subtitle, image: '', imageFit: 'cover', placeholder, backgroundColor: bg, textColor: '#1c1432', accentColor: accent,
499
+ width: 1, height: 1, radius: 20, x: 0, y: 0, rotation: 0, scale: 1, opacity: 1,
500
+ });
501
+ const light = (x, y, radius, colorHex, op, animation, frequency, phase) => ({
502
+ x, y, radius, color: colorHex, opacity: op, blur: 40, animation, amplitude: 0.04, frequency, phase,
503
+ });
504
+ const floating = (type, content, icon, x, y, extra = {}) => ({
505
+ type, content, icon, x, y, scale: 1, rotation: 0, fontSize: 22, backgroundColor: '#ffffff', backgroundOpacity: 0.92, textColor: '#4c1d95',
506
+ borderRadius: 999, opacity: 1, blur: 0, animation: 'float', amplitude: 12, frequency: 0.3, phase: 0, enter: 'pop', delayFrames: 0, depth: 1, ...extra,
507
+ });
508
+ export const LISTS = [
509
+ {
510
+ path: 'background.gradient.stops', group: 'Background', minItems: 2, maxItems: 6, item: STOP_ITEM,
511
+ description: 'Gradient colour stops, in order of offset.',
512
+ default: [
513
+ { offset: 0, color: '#6d28d9', opacity: 1 },
514
+ { offset: 0.45, color: '#d946ef', opacity: 1 },
515
+ { offset: 1, color: '#4f7cff', opacity: 1 },
516
+ ],
517
+ },
518
+ {
519
+ path: 'lights', group: 'Lights', minItems: 0, maxItems: 8, item: LIGHT_ITEM,
520
+ description: 'Ambient light sources: soft coloured glows that drift, pulse or orbit.',
521
+ default: [
522
+ light(0.16, 0.34, 0.55, '#a855f7', 0.7, 'drift', 0.09, 0),
523
+ light(0.86, 0.24, 0.5, '#f472b6', 0.65, 'drift', 0.07, 0.35),
524
+ light(0.8, 0.9, 0.6, '#60a5fa', 0.6, 'orbit', 0.06, 0.6),
525
+ light(0.5, 0.5, 0.38, '#ffffff', 0.18, 'pulse', 0.12, 0.2),
526
+ ],
527
+ },
528
+ {
529
+ path: 'productHeader.navItems', group: 'Product Header', minItems: 0, maxItems: 6, item: NAV_ITEM,
530
+ description: 'Navigation items in the product\'s header, in order.',
531
+ default: ['Explore', 'Images', 'Text'],
532
+ },
533
+ {
534
+ path: 'productContent.cards', group: 'Product UI', minItems: 0, maxItems: 8, item: CARD_ITEM,
535
+ description: 'Result cards inside the product UI (0–8).',
536
+ default: [
537
+ card('AI Website', 'Landing page', 'website', '#f6f1ff', '#8b5cf6'),
538
+ card('Portfolio', 'Personal site', 'gallery', '#fdf0f8', '#ec4899'),
539
+ card('Dashboard', 'Analytics', 'chart', '#eef3ff', '#3b82f6'),
540
+ ],
541
+ },
542
+ {
543
+ path: 'floatingElements', group: 'Floating Elements', minItems: 0, maxItems: 10, item: FLOAT_ITEM,
544
+ description: 'Badges, pills, icons and labels floating around the product.',
545
+ default: [
546
+ floating('badge', 'Generated in 3s', 'bolt', -0.05, 0.24, { delayFrames: 30, phase: 0.1 }),
547
+ floating('pill', 'New', 'none', 1.06, 0.12, { backgroundColor: '#fdf4ff', textColor: '#a21caf', delayFrames: 42, phase: 0.55, rotation: 4 }),
548
+ floating('icon', '', 'sparkle', -0.03, 0.8, { textColor: '#c026d3', delayFrames: 52, phase: 0.3, fontSize: 30 }),
549
+ floating('pill', '99% faster', 'none', 1.04, 0.74, { delayFrames: 60, phase: 0.8, rotation: -3 }),
550
+ ],
551
+ },
552
+ {
553
+ path: 'scenes', group: 'Scenes', minItems: 0, maxItems: 6, item: SCENE_ITEM,
554
+ description: 'Optional scenes: each overrides copy, look, product or motion for a stretch of the video. Empty: one scene, the base config.',
555
+ default: [],
556
+ },
557
+ ];
558
+ export const CONTROL_BY_PATH = new Map(CONTROLS.map((c) => [c.path, c]));
559
+ export const LIST_BY_PATH = new Map(LISTS.map((l) => [l.path, l]));
560
+ /** Every editable leaf, lists expanded as `<list>[].<field>` — the count people and agents see. */
561
+ export function allControls() {
562
+ return [
563
+ ...CONTROLS,
564
+ ...LISTS.flatMap((l) => l.item.map((c) => ({ ...c, path: c.path ? `${l.path}[].${c.path}` : `${l.path}[]`, list: l.path }))),
565
+ ];
566
+ }
567
+ //# sourceMappingURL=controls.js.map