@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
@@ -13,7 +13,7 @@ import { presetsOf, resolveConfig, type OnboardingComponent } from './contract';
13
13
  */
14
14
 
15
15
  /** Keys whose values select behaviour or carry data rather than words. The agent-editable test uses the same rule. */
16
- export const CHOICE_KEYS = /^(type|icon|ship|id|key|status|tone|sentiment|kind|variant|format|currency|paymentMethod|value|mode|unit|date|when|time|href|url|ext|code|symbol|period|layout|state|strength|priority|previewKind|defaultPlan|defaultSelected|suggestions|range|start|end|today|hue|color|colour|primary|accent|font|avatar|initials|column|sortKey|field)$/i;
16
+ export const CHOICE_KEYS = /^(type|icon|ship|id|key|status|tone|sentiment|kind|variant|format|currency|paymentMethod|value|mode|unit|date|when|time|href|url|ext|code|symbol|period|layout|state|strength|priority|previewKind|defaultPlan|defaultSelected|suggestions|range|start|end|today|hue|color|colour|primary|accent|font|avatar|initials|column|sortKey|field|textColor|accentColor|emblemIcon|autoplay|backgroundColor|buttonColor|iconColor|completionColor|trailColor|sendIcon|iconScale|cornerRadius|width|showTapCue|loop)$/i;
17
17
 
18
18
  export type SettingKind = 'text' | 'number' | 'yes/no' | 'list' | 'object';
19
19
  export type SettingDescription = {
@@ -34,6 +34,8 @@ export const ONBOARDING_TIMING = {
34
34
  toast: 6000,
35
35
  /** Receipt Printer: the host's print. Shorter than the paper's feed, so a failure lands mid-feed. */
36
36
  print: 900,
37
+ /** Send Completion: the host's send. Shorter than the launch, so the check never waits in the demo. */
38
+ send: 900,
37
39
  } as const;
38
40
 
39
41
  export type OnboardingOutcome = { ok: true } | { ok: false; message?: string };
@@ -46,6 +46,8 @@ import { CriteriaSpider } from './criteria-spider/CriteriaSpiderView';
46
46
  import { ActivityHeatmap } from './activity-heatmap/ActivityHeatmapView';
47
47
  import { TagCloud } from './tag-cloud/TagCloudView';
48
48
  import { ReceiptPrinter } from './receipt-printer/ReceiptPrinterView';
49
+ import { AnimatedStatus } from './animated-status/AnimatedStatusView';
50
+ import { SendCompletion } from './send-completion/SendCompletionView';
49
51
  import type { ComponentType } from 'react';
50
52
  import { AB_TESTS_IN_FLIGHT, AB_TESTS_SCENES, abTestsSeed } from './ab-tests';
51
53
  import { ACHIEVEMENT_IN_FLIGHT, ACHIEVEMENT_SCENES, achievementSeed } from './achievement';
@@ -84,6 +86,8 @@ import { QUEUE_IN_FLIGHT, QUEUE_SCENES, queueSeed } from './queue-status';
84
86
  import { QUICK_ACTIONS_IN_FLIGHT, QUICK_ACTIONS_SCENES, quickActionsSeed } from './quick-actions';
85
87
  import { RATE_LIMIT_IN_FLIGHT, RATE_LIMIT_SCENES, rateLimitSeed } from './rate-limit';
86
88
  import { RECEIPT_PRINTER_IN_FLIGHT, RECEIPT_PRINTER_SCENES, receiptPrinterSeed } from './receipt-printer';
89
+ import { ANIMATED_STATUS_IN_FLIGHT, ANIMATED_STATUS_SCENES, animatedStatusSeed } from './animated-status';
90
+ import { SEND_COMPLETION_IN_FLIGHT, SEND_COMPLETION_SCENES, sendCompletionSeed } from './send-completion';
87
91
  import { SCORE_IN_FLIGHT, SCORE_SCENES, scoreSeed } from './score-summary';
88
92
  import { SEAT_IN_FLIGHT, SEAT_SCENES, seatSeed } from './seat-allocation';
89
93
  import { SETUP_TASKS_IN_FLIGHT, SETUP_TASKS_SCENES, setupTasksSeed } from './setup-tasks';
@@ -154,6 +158,8 @@ export const ONBOARDING_VIEWS: Record<OnboardingComponent, ComponentType<Record<
154
158
  'activity-heatmap': ActivityHeatmap,
155
159
  'tag-cloud': TagCloud,
156
160
  'receipt-printer': ReceiptPrinter,
161
+ 'animated-status': AnimatedStatus,
162
+ 'send-completion': SendCompletion,
157
163
  } as unknown as Record<OnboardingComponent, ComponentType<Record<string, unknown> & GuardProps>>;
158
164
 
159
165
  /**
@@ -200,6 +206,8 @@ export const ONBOARDING_SCENES: Record<OnboardingComponent, OnboardingScenes> =
200
206
  'quick-actions': { scenes: QUICK_ACTIONS_SCENES, seed: quickActionsSeed as OnboardingScenes['seed'], inFlight: QUICK_ACTIONS_IN_FLIGHT },
201
207
  'rate-limit': { scenes: RATE_LIMIT_SCENES, seed: rateLimitSeed as OnboardingScenes['seed'], inFlight: RATE_LIMIT_IN_FLIGHT },
202
208
  'receipt-printer': { scenes: RECEIPT_PRINTER_SCENES, seed: receiptPrinterSeed as OnboardingScenes['seed'], inFlight: RECEIPT_PRINTER_IN_FLIGHT },
209
+ 'animated-status': { scenes: ANIMATED_STATUS_SCENES, seed: animatedStatusSeed as OnboardingScenes['seed'], inFlight: ANIMATED_STATUS_IN_FLIGHT },
210
+ 'send-completion': { scenes: SEND_COMPLETION_SCENES, seed: sendCompletionSeed as OnboardingScenes['seed'], inFlight: SEND_COMPLETION_IN_FLIGHT },
203
211
  'score-summary': { scenes: SCORE_SCENES, seed: scoreSeed as OnboardingScenes['seed'], inFlight: SCORE_IN_FLIGHT },
204
212
  'seat-allocation': { scenes: SEAT_SCENES, seed: seatSeed as OnboardingScenes['seed'], inFlight: SEAT_IN_FLIGHT },
205
213
  'setup-tasks': { scenes: SETUP_TASKS_SCENES, seed: setupTasksSeed as OnboardingScenes['seed'], inFlight: SETUP_TASKS_IN_FLIGHT },
@@ -0,0 +1,62 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { formatFor } from './sample';
3
+ import { mountMotion, MotionContentValidationError, type MotionController } from './player';
4
+ import type { MotionTemplate } from './types';
5
+ import type { MotionContentError } from './validate';
6
+
7
+ export type MotionPlayerProps = {
8
+ template: MotionTemplate;
9
+ /** The content contract: text slots, optional `theme`, optional scenes. Validated before mounting. */
10
+ content: unknown;
11
+ autoPlay?: boolean;
12
+ loop?: boolean;
13
+ /** Rendered width in px; the canvas keeps its aspect ratio (the content's `aspectRatio` format). Defaults to the canvas width. */
14
+ width?: number;
15
+ onReady?: (controller: MotionController) => void;
16
+ onFrame?: (frame: number) => void;
17
+ onInvalid?: (errors: MotionContentError[]) => void;
18
+ className?: string;
19
+ };
20
+
21
+ /**
22
+ * **A motion template in a React web app.** Web only (it plays DOM, not React Native views). The
23
+ * animation is the template's; this component only passes content through and scales the canvas.
24
+ */
25
+ export function MotionPlayer({ template, content, autoPlay = true, loop = true, width, onReady, onFrame, onInvalid, className }: MotionPlayerProps) {
26
+ const mountRef = useRef<HTMLDivElement>(null);
27
+ const [errors, setErrors] = useState<MotionContentError[] | null>(null);
28
+ const callbacks = useRef({ onReady, onFrame, onInvalid });
29
+ callbacks.current = { onReady, onFrame, onInvalid };
30
+ const key = JSON.stringify(content);
31
+
32
+ useEffect(() => {
33
+ const root = mountRef.current;
34
+ if (!root) return;
35
+ let controller: MotionController | undefined;
36
+ try {
37
+ controller = mountMotion(root, template, JSON.parse(key), { autoPlay, loop, onFrame: (f) => callbacks.current.onFrame?.(f) });
38
+ setErrors(null);
39
+ callbacks.current.onReady?.(controller);
40
+ } catch (e) {
41
+ if (!(e instanceof MotionContentValidationError)) throw e;
42
+ setErrors(e.errors);
43
+ callbacks.current.onInvalid?.(e.errors);
44
+ }
45
+ return () => controller?.destroy();
46
+ }, [template, key, autoPlay, loop]);
47
+
48
+ const { width: w, height: h } = formatFor(template.motion, content);
49
+ const shown = width ?? w;
50
+ const scale = shown / w;
51
+ return (
52
+ <div className={className} style={{ position: 'relative', width: shown, height: (h * shown) / w, overflow: 'hidden' }}>
53
+ <div ref={mountRef} style={{ width: w, height: h, transform: `scale(${scale})`, transformOrigin: '0 0' }} />
54
+ {errors && (
55
+ <div role="alert" style={{ position: 'absolute', inset: 0, padding: 16, background: 'Canvas', color: 'CanvasText', font: '13px/1.5 system-ui, sans-serif', overflow: 'auto' }}>
56
+ <strong>Content does not fit this template:</strong>
57
+ <ul>{errors.map((e) => <li key={e.path + e.message}>{e.message}</li>)}</ul>
58
+ </div>
59
+ )}
60
+ </div>
61
+ );
62
+ }
@@ -0,0 +1,288 @@
1
+ import { applyPatch, validateConfig, type Replication2Config } from './replication2/config';
2
+ import { outputDuration } from './replication2/engine';
3
+ import * as PromoConfig from './promo/config';
4
+ import { outputDuration as promoOutputDuration } from './promo/engine';
5
+ import { LISTS as PROMO_LISTS } from './promo/controls';
6
+ import * as PaperFoldConfig from './paperfold/config';
7
+ import { outputDuration as paperFoldOutputDuration } from './paperfold/engine';
8
+ import { LISTS as PAPER_FOLD_LISTS } from './paperfold/controls';
9
+ import { durationFor } from './sample';
10
+ import { CONFIGURABLE_MOTION_TEMPLATES, MOTION_TEMPLATES } from './templates';
11
+ import type { ConfigurableMotionTemplate, MotionTemplate } from './types';
12
+ import { validateMotionContent, type MotionContentError } from './validate';
13
+
14
+ /**
15
+ * **Motion templates for agents** — pure, no React, no DOM. An agent lists templates, reads one
16
+ * contract, sends `{ schema: 'motion/1', template, content }`, and checks it here (the MCP server and
17
+ * the site's API run the same code). The motion itself is never part of what an agent sees or sends.
18
+ */
19
+ export const MOTION_REQUEST_SCHEMA = 'motion/1';
20
+
21
+ export const NOT_CONFIGURABLE = [
22
+ 'animation timing', 'scene order', 'scene duration', 'frame rate', 'easing', 'motion paths', 'positions',
23
+ 'scale', 'rotation', 'transitions', 'font family', 'font size', 'font weight', 'layout', 'canvas size',
24
+ 'word / character limits', 'markup, CSS or script of any kind',
25
+ ];
26
+
27
+ /**
28
+ * **What a template can be turned into, and in what format.** Said explicitly because "an animation"
29
+ * could mean a video file or a live element, and the two are used differently.
30
+ */
31
+ export function motionOutputFormats(t: MotionTemplate) {
32
+ const { fps } = t.motion;
33
+ const canvases = (t.motion.formats ?? [{ id: 'default', aspectRatio: '', width: t.motion.width, height: t.motion.height }])
34
+ .map((f) => `${f.width}×${f.height}${f.aspectRatio ? ` (${f.aspectRatio})` : ''}`).join(' or ');
35
+ const composition = t.id.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('');
36
+ return [
37
+ {
38
+ output: 'live',
39
+ format: 'HTML + CSS (DOM)',
40
+ detail: `${canvases} canvas, ${fps} fps, scalable; played in the page by the package runtime (MotionPlayer / mountMotion). Not a video file.`,
41
+ },
42
+ {
43
+ output: 'video',
44
+ format: 'MP4 (H.264)',
45
+ detail: `${canvases}, ${fps} fps, rendered with Remotion from the same template source (remotion-prototype/, composition ${composition}${t.motion.formats ? '<Format>' : ''}). --scale=3 renders true 4K (2160×3840 / 3840×2160 for a 720-line canvas).`,
46
+ },
47
+ { output: 'request', format: 'JSON (motion/1)', detail: 'What a person or agent sends: { schema, template, content }.' },
48
+ { output: 'schema', format: 'JSON Schema 2020-12', detail: 'The content contract, with the maxWords, onlyWith and hex-color extensions.' },
49
+ ];
50
+ }
51
+
52
+ export type MotionRequest = { schema: typeof MOTION_REQUEST_SCHEMA; template: string; content: Record<string, unknown>; patch?: unknown };
53
+
54
+ const seconds = (t: MotionTemplate, frames: number) => Math.round((frames / t.motion.fps) * 100) / 100;
55
+
56
+ export function getMotionTemplate(id: string): MotionTemplate | undefined {
57
+ return (MOTION_TEMPLATES as Record<string, MotionTemplate>)[id];
58
+ }
59
+
60
+ /** Short cards, for choosing a template. */
61
+ export function listMotionTemplates() {
62
+ return Object.values(MOTION_TEMPLATES).map((t: MotionTemplate) => ({
63
+ template: t.id,
64
+ version: t.version,
65
+ title: t.title,
66
+ description: t.description,
67
+ canvas: { width: t.motion.width, height: t.motion.height },
68
+ ...(t.motion.formats ? { aspectRatios: t.motion.formats.map((f) => f.aspectRatio) } : {}),
69
+ ...(t.motion.sequence ? { kind: 'sequence' as const } : {}),
70
+ seconds: seconds(t, t.motion.durationInFrames),
71
+ slots: t.slots.length,
72
+ formats: motionOutputFormats(t).map((f) => f.format),
73
+ })).concat(Object.values(CONFIGURABLE_MOTION_TEMPLATES).map((t: ConfigurableMotionTemplate) => ({
74
+ template: t.id,
75
+ version: t.version,
76
+ title: t.title,
77
+ description: t.description,
78
+ canvas: { width: t.formats[0]!.width, height: t.formats[0]!.height },
79
+ aspectRatios: t.formats.map((f) => f.aspectRatio),
80
+ kind: 'configurableMotion' as const,
81
+ renderer: t.renderer,
82
+ seconds: Math.round((t.durationInFrames / t.fps) * 100) / 100,
83
+ slots: 0,
84
+ controls: t.controls.length,
85
+ formats: configurableOutputFormats(t).map((f) => f.format),
86
+ })) as never[]);
87
+ }
88
+
89
+ export function getConfigurableMotionTemplate(id: string): ConfigurableMotionTemplate | undefined {
90
+ return (CONFIGURABLE_MOTION_TEMPLATES as Record<string, ConfigurableMotionTemplate>)[id];
91
+ }
92
+
93
+ type ConfigCheck = { valid: boolean; errors: { path: string; message: string }[]; config?: Record<string, unknown> };
94
+ /** Each configurable template's own validator, patcher and clock — the functions behind its data. */
95
+ const CONFIG_API: Record<string, { validate: (c: unknown) => ConfigCheck; patch: (c: unknown, p: unknown) => ConfigCheck; frames: (c: Record<string, unknown>) => number }> = {
96
+ 'replication-2': { validate: validateConfig, patch: applyPatch as (c: unknown, p: unknown) => ConfigCheck, frames: (c) => outputDuration(c as Replication2Config) },
97
+ 'promo-product-showcase': { validate: PromoConfig.validateConfig, patch: PromoConfig.applyPatch as (c: unknown, p: unknown) => ConfigCheck, frames: (c) => promoOutputDuration(c as PromoConfig.PromoConfig) },
98
+ 'paper-fold-promo': { validate: PaperFoldConfig.validateConfig, patch: PaperFoldConfig.applyPatch as (c: unknown, p: unknown) => ConfigCheck, frames: (c) => paperFoldOutputDuration(c as PaperFoldConfig.PaperFoldConfig) },
99
+ };
100
+ /** The React web player of each procedural template. */
101
+ const LIVE_PLAYER: Record<string, string> = { 'promo-product-showcase': 'PromoShowcasePlayer', 'paper-fold-promo': 'PaperFoldPlayer' };
102
+
103
+ /** What a configurable-motion template can be turned into. */
104
+ export function configurableOutputFormats(t: ConfigurableMotionTemplate) {
105
+ const canvases = t.formats.map((f) => `${f.width}×${f.height} (${f.aspectRatio})`).join(', ');
106
+ if (t.renderer === 'remotion') {
107
+ return [
108
+ { output: 'live', format: 'HTML + CSS (DOM)', detail: `Any size, ${t.fps} fps; drawn procedurally from the config by the package's renderer (${LIVE_PLAYER[t.id] ?? 'its player'} on the web). Not a video file.` },
109
+ { output: 'video', format: 'MP4 (H.264, yuv420p, bt709) / H.265 / ProRes / VP9', detail: `${canvases}, ${t.fps} fps, rendered with Remotion from the same renderer and engine (remotion-prototype/, compositions ${t.remotion!.compositions.join(' / ')}). The codec, pixel format and colour space come from the config's export group.` },
110
+ { output: 'request', format: 'JSON (motion/1)', detail: 'What a person or agent sends: { schema, template, content } where content is the config (any subset), optionally with patch.' },
111
+ { output: 'schema', format: 'JSON Schema 2020-12', detail: 'Every control and list, with type, range or options, default, unit, and x-userEditable / x-agentEditable.' },
112
+ ];
113
+ }
114
+ return [
115
+ { output: 'live', format: 'Rive (canvas)', detail: `${canvases}, ${t.fps} fps; drawn by the package's Rive driver from the config (Replication2Player on the web). Not a video file.` },
116
+ { output: 'video', format: 'MP4 (H.264) / ProRes', detail: `${canvases}, ${t.fps} fps, rendered with Remotion from the same Rive file and engine (remotion-prototype/, compositions ${t.id}-landscape-4k / -portrait-4k / -square-4k).` },
117
+ { output: 'request', format: 'JSON (motion/1)', detail: 'What a person or agent sends: { schema, template, content } where content is the config (any subset), optionally with patch.' },
118
+ { output: 'schema', format: 'JSON Schema 2020-12', detail: 'Every control, with type, range or options, default, unit, and x-userEditable / x-agentEditable.' },
119
+ { output: 'html', format: 'HTML host (manifest + config + .riv)', detail: 'replication-2-prototype/dist/replication-2/: index.html reads config.json and draws with the Rive runtime.' },
120
+ ];
121
+ }
122
+
123
+ /* Example patches an agent reads: their colours are config content, not UI colours. */
124
+ const EXAMPLE_PATCHES: Record<string, Record<string, unknown>> = {
125
+ 'replication-2': { 'text.what': 'Why', 'glow.intensity': 0.9, 'scenes.what.durationFrames': 42 },
126
+ // eslint-disable-next-line comppack/no-raw-colour -- a config value in an example request
127
+ 'promo-product-showcase': { 'content.title': 'Launch faster.', 'background.gradient.stops.1.color': '#6a7cff', 'productEntrance.durationFrames': 60, 'content.cta.enabled': false },
128
+ // eslint-disable-next-line comppack/no-raw-colour -- a config value in an example request
129
+ 'paper-fold-promo': { 'content.top.headline': 'Summer events are here', 'paperMaterial.baseColor': '#ff7a18', 'folds.top.peakAngle': 170, 'folds.0.durationFrames': 72, 'hands.top.x': 0.56, 'background.backgroundTypography.enabled': false, 'content.cta.text': 'Join the beta' },
130
+ };
131
+
132
+ /** The contract of a configurable-motion template, grouped for choosing what to change. */
133
+ function describeConfigurable(t: ConfigurableMotionTemplate) {
134
+ const promo = t.id === 'promo-product-showcase';
135
+ const paper = t.id === 'paper-fold-promo';
136
+ return {
137
+ template: t.id,
138
+ version: t.version,
139
+ kind: t.kind,
140
+ renderer: t.renderer,
141
+ title: t.title,
142
+ description: t.description,
143
+ request: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: '<object: any subset of the config below>', patch: '<optional: { "patch": { "<control path>": value } } or [{ op: replace|merge|remove, path, value }]>' },
144
+ output: {
145
+ width: t.formats[0]!.width, height: t.formats[0]!.height, fps: t.fps, durationInFrames: t.durationInFrames,
146
+ seconds: Math.round((t.durationInFrames / t.fps) * 100) / 100, formats: configurableOutputFormats(t),
147
+ },
148
+ rules: [
149
+ 'People and agents edit the same config: change values, never code.',
150
+ 'Every value is one of the controls below: a typed property with a range or an approved option. Unknown keys are refused.',
151
+ 'Timing is in 60 fps motion frames; canvas.fps is the output sampling rate.',
152
+ 'No JavaScript, CSS, HTML, SVG, shader or animation code of any kind can be set.',
153
+ ...(promo ? [
154
+ 'Lists (controls whose path has "[]") are arrays: address an item by index ("productContent.cards.1.title"), add one at index = length, delete one with { op: "remove", path: "productContent.cards.2" }, or replace the whole array.',
155
+ 'Assets are references only: "static:<file>", "https://…" or a PNG/JPEG/WebP data: URL. "" draws a procedural placeholder.',
156
+ 'Each aspect ratio reads its own layout block (layout.landscape / portrait / square); productWindow.x/y/width/height place the window inside that slot.',
157
+ ] : []),
158
+ ...(paper ? [
159
+ 'folds and creases are fixed two-item lists (top, then bottom): address an item by index ("folds.0.peakAngle") or by its id ("folds.top.peakAngle").',
160
+ 'A fold turns about its crease (creases.<id>.position): direction says which side swings (down = the part above, up = the part below), side says toward the viewer (inward) or behind (outward). Angles are the crease\'s dihedral: 0 flat, 180 folded flat.',
161
+ 'Timing is the phase order INTRO → TOP_FOLD → BOTTOM_FOLD → FOLDED_HOLD → BOTTOM_UNFOLD → TOP_UNFOLD → FINAL_HOLD; a fold phase takes its delay, length and easing from its fold (folds.<id>.durationFrames, unfoldDurationFrames, …).',
162
+ 'Hands are attached to a point of the paper (hands.<id>.x / y, 0‥1 across and down the sheet) and follow it through the folds; handInteraction sets how.',
163
+ 'Each aspect ratio reads its own layout block (layout.portrait / landscape / square). Text on the paper is sized in paper units (1/1000 of the sheet width), so it keeps its place on the sheet in every layout.',
164
+ 'Copy may contain line breaks (\\n); it is always rendered as text.',
165
+ ] : []),
166
+ ],
167
+ controls: Object.fromEntries(t.groups.map((g) => [g, Object.fromEntries(t.controls.filter((c) => c.group === g).map((c) => [c.path, {
168
+ type: c.type, default: c.default, ...(c.min !== undefined ? { min: c.min, max: c.max } : {}), ...(c.options ? { options: c.options } : {}),
169
+ ...(c.maxLength !== undefined ? { maxLength: c.maxLength } : {}), ...(c.unit ? { unit: c.unit } : {}), ...(c.allow ? { allow: c.allow } : {}),
170
+ description: c.description, userEditable: c.userEditable, agentEditable: c.agentEditable,
171
+ }]))])),
172
+ ...(promo ? { lists: Object.fromEntries(PROMO_LISTS.map((l) => [l.path, { minItems: l.minItems, maxItems: l.maxItems, description: l.description, default: l.default }])) } : {}),
173
+ ...(paper ? { lists: Object.fromEntries(PAPER_FOLD_LISTS.map((l) => [l.path, { minItems: l.minItems, maxItems: l.maxItems, description: l.description, default: l.default, ...(l.keys ? { keys: l.keys } : {}) }])) } : {}),
174
+ presets: Object.fromEntries(Object.entries(t.presets).map(([k, v]) => [k, v.description])),
175
+ notConfigurable: promo
176
+ ? ['markup, CSS, SVG, shaders or script of any kind', 'typefaces outside the registered five', 'icons outside the registered set', 'the phase order (intro → productEntrance → productSettle → contentReveal → showcase → outro; delays may overlap them)']
177
+ : paper
178
+ ? ['markup, CSS, SVG, shaders or script of any kind', 'the number of panels (three) and creases (two)', 'typefaces outside the registered five', 'the hand drawings (their pose, size, colours and motion are configurable)', 'the phase order (delays may overlap phases, never reorder them)', 'the debug overlay (a development flag of the renderer, never part of the config)']
179
+ : ['markup, CSS, SVG, shaders or script of any kind', 'fonts that are not embedded in the Rive file', 'scene order (each scene builds on the one before; scenes can be switched off)'],
180
+ example: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: {}, patch: { patch: EXAMPLE_PATCHES[t.id] ?? {} } },
181
+ schema: t.schema,
182
+ };
183
+ }
184
+
185
+ /** The content contract of one template: every slot and limit, the theme tokens, optional scenes. */
186
+ export function describeMotionTemplate(id: string) {
187
+ const configurable = getConfigurableMotionTemplate(id);
188
+ if (configurable) return describeConfigurable(configurable) as unknown as ReturnType<typeof describeDom>;
189
+ return describeDom(id);
190
+ }
191
+
192
+ function describeDom(id: string) {
193
+ const t = getMotionTemplate(id);
194
+ if (!t) return undefined;
195
+ const withoutOptional = Object.fromEntries(Object.entries(t.exampleContent).filter(([k]) => !t.optionalScenes.includes(k)));
196
+ return {
197
+ template: t.id,
198
+ version: t.version,
199
+ title: t.title,
200
+ description: t.description,
201
+ request: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: '<object: the slots below, plus optional theme>' },
202
+ output: {
203
+ width: t.motion.width,
204
+ height: t.motion.height,
205
+ fps: t.motion.fps,
206
+ durationInFrames: t.motion.durationInFrames,
207
+ seconds: seconds(t, t.motion.durationInFrames),
208
+ secondsWithoutOptionalScenes: seconds(t, durationFor(t.motion, withoutOptional)),
209
+ formats: motionOutputFormats(t),
210
+ },
211
+ slots: Object.fromEntries(t.slots.map((s) => [s.path, {
212
+ type: 'string', maxWords: s.maxWords, maxChars: s.maxChars, description: s.description,
213
+ ...(s.optional ? { optional: true } : {}), ...(s.onlyWith ? { onlyWith: s.onlyWith } : {}),
214
+ autoFit: 'text wider than the slot is scaled down, never wrapped',
215
+ }])),
216
+ theme: Object.fromEntries(t.theme.map((c) => [`theme.${c.token}`, { type: 'hex colour', default: c.default, description: c.description }])),
217
+ optionalScenes: t.optionalScenes.map((id) => ({ scene: id, effect: `leave "${id}" out of content (or set it to null) to ${t.motion.sequence ? 'hide it' : 'end the video before it'}` })),
218
+ ...(t.motion.formats ? { aspectRatio: { field: 'aspectRatio', values: t.motion.formats.map((f) => ({ value: f.aspectRatio, width: f.width, height: f.height })), default: t.motion.formats[0]!.aspectRatio, effect: 'the same animation, laid out for that canvas' } } : {}),
219
+ ...(t.motion.sequence ? { sequence: describeSequence(t) } : {}),
220
+ notConfigurable: NOT_CONFIGURABLE,
221
+ example: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: t.exampleContent },
222
+ schema: t.schema,
223
+ };
224
+ }
225
+
226
+ /** A sequence template, for an agent: the list, its limits, each item's choices, and its rhythm. */
227
+ function describeSequence(t: MotionTemplate) {
228
+ const seq = t.motion.sequence!;
229
+ return {
230
+ list: seq.path,
231
+ minItems: seq.minItems,
232
+ maxItems: seq.maxItems,
233
+ item: `each item is one scene: its text slots (${t.slots.filter((s) => s.path.startsWith(`${seq.path}[]`)).map((s) => s.path.split('.').pop()).join(', ')}) plus the choices below`,
234
+ choices: Object.fromEntries((t.choices ?? []).map((c) => [c.field, { default: c.default, description: c.description, values: Object.fromEntries(c.values.map((v) => [v.value, v.description])) }])),
235
+ timing: `fixed by the template: item i lasts rhythm[i] frames at ${t.motion.fps} fps (the last value repeats), or longer when its transition needs it. More items make a longer video; nothing makes one item slower or faster.`,
236
+ rhythm: seq.rhythm,
237
+ };
238
+ }
239
+
240
+ /** Check a request before rendering it. Never throws. */
241
+ export function validateMotionRequest(request: unknown): { valid: true; request: MotionRequest; seconds: number } | { valid: false; errors: MotionContentError[] } {
242
+ const bad = (path: string, message: string) => ({ valid: false as const, errors: [{ scene: '(request)', path, message }] });
243
+ if (typeof request !== 'object' || request === null || Array.isArray(request)) return bad('', 'The request must be an object: { schema: "motion/1", template, content }.');
244
+ const { schema, template, content, patch, ...extra } = request as Record<string, unknown>;
245
+ const configurable = typeof template === 'string' ? getConfigurableMotionTemplate(template) : undefined;
246
+ if (patch !== undefined && !configurable) extra.patch = patch;
247
+ if (Object.keys(extra).length) return bad(Object.keys(extra)[0]!, `Only schema, template and content may be sent${configurable ? ' (and patch)' : ''}; got ${Object.keys(extra).join(', ')}.`);
248
+ if (schema !== undefined && schema !== MOTION_REQUEST_SCHEMA) return bad('schema', `schema must be "${MOTION_REQUEST_SCHEMA}".`);
249
+ if (configurable) return validateConfigurableRequest(configurable, content, patch);
250
+ const t = typeof template === 'string' ? getMotionTemplate(template) : undefined;
251
+ if (!t) return bad('template', `Unknown template "${String(template)}". Available: ${[...Object.keys(MOTION_TEMPLATES), ...Object.keys(CONFIGURABLE_MOTION_TEMPLATES)].join(', ')}.`);
252
+ const checked = validateMotionContent(t.schema, content);
253
+ if (!checked.valid) return { valid: false, errors: checked.errors };
254
+ return { valid: true, request: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: content as Record<string, unknown> }, seconds: seconds(t, durationFor(t.motion, content)) };
255
+ }
256
+
257
+ /** A configurable-motion request: the content (a config, any subset) with the patch applied, validated. */
258
+ function validateConfigurableRequest(t: ConfigurableMotionTemplate, content: unknown, patch: unknown): { valid: true; request: MotionRequest; seconds: number } | { valid: false; errors: MotionContentError[] } {
259
+ const api = CONFIG_API[t.id]!;
260
+ const base = content === undefined ? {} : content;
261
+ const checked = patch === undefined ? api.validate(base) : api.patch(base, patch);
262
+ if (!checked.valid) return { valid: false as const, errors: checked.errors.map((e) => ({ scene: e.path.split('.')[0] || '(root)', path: e.path, message: e.message })) };
263
+ const config = checked.config as Record<string, unknown>;
264
+ return {
265
+ valid: true as const,
266
+ request: { schema: MOTION_REQUEST_SCHEMA, template: t.id, content: config } as MotionRequest,
267
+ seconds: Math.round((api.frames(config) / Number((config.canvas as { fps: number }).fps)) * 100) / 100,
268
+ };
269
+ }
270
+
271
+ /** A link that plays the request on the template's own page of the CompPack site (`/animations/<id>`). */
272
+ export function motionPreviewUrl(request: MotionRequest, origin = 'https://comppack.vercel.app') {
273
+ const json = JSON.stringify({ template: request.template, content: request.content });
274
+ const b64 = btoa(String.fromCharCode(...new TextEncoder().encode(json)));
275
+ return `${origin.replace(/\/+$/, '')}/animations/${encodeURIComponent(request.template)}?request=${b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')}`;
276
+ }
277
+
278
+ /** Inverse of `motionPreviewUrl`'s parameter. Returns undefined if it is not valid base64url JSON. */
279
+ export function decodeMotionPreview(param: string): { template: string; content: unknown } | undefined {
280
+ try {
281
+ const b64 = param.replace(/-/g, '+').replace(/_/g, '/');
282
+ const json = new TextDecoder().decode(Uint8Array.from(atob(b64), (ch) => ch.charCodeAt(0)));
283
+ const v = JSON.parse(json);
284
+ return v && typeof v === 'object' ? v : undefined;
285
+ } catch {
286
+ return undefined;
287
+ }
288
+ }
@@ -0,0 +1,118 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useRef, useState, type ReactNode, type Ref, type SVGProps } from 'react';
4
+ import { CAT_CREDIT, CAT_VIEWBOX, TAIL_BONES } from './art.generated';
5
+ import { buildAnimationDocument, catPose, type CatAnimationDocument } from './animation';
6
+ import { resolveCatConfig, type CatConfigInput } from './config';
7
+ import { posedJoints, pathD } from './rig';
8
+ import { catScene, matrixAttr, tailMatrix, type SceneNode } from './scene';
9
+
10
+ export type CatProps = Omit<SVGProps<SVGSVGElement>, 'children' | 'viewBox' | 'ref'> & {
11
+ /** The root <svg> element (for pointer maths: getScreenCTM). */
12
+ svgRef?: Ref<SVGSVGElement>;
13
+ /** The manipulation model (any subset; the rest are defaults). */
14
+ config?: CatConfigInput;
15
+ /** The clock, in ms. The caller owns time — Remotion passes frame / fps × 1000 — so a frame is a pure function of it. */
16
+ timeMs?: number;
17
+ /** An animation model to play instead of the one the config builds (e.g. an exported JSON). */
18
+ animation?: CatAnimationDocument;
19
+ /** Shorthands over `config.tail` / `config.color` / `config.background`. */
20
+ tailWiggle?: boolean;
21
+ tailWiggleAmount?: number;
22
+ tailWiggleDuration?: number;
23
+ tailWiggleSpeed?: number;
24
+ color?: string;
25
+ background?: string | null;
26
+ /** Prepended to every element id, so several cats can share a page. */
27
+ idPrefix?: string;
28
+ /** Draw the tail's bones and joints over the art. */
29
+ debug?: boolean;
30
+ /** Drawn inside the SVG after the cat, in artboard coordinates (the editor's handles). */
31
+ children?: ReactNode;
32
+ };
33
+
34
+ function renderNode(node: SceneNode, prefix: string): ReactNode {
35
+ if (node.kind === 'path') return <path key={node.id} id={prefix + node.id} data-part={node.id} fill={node.fill} d={pathD(node.commands)} />;
36
+ return (
37
+ <g key={node.id} id={prefix + node.id} data-part={node.id} fill={node.fill} transform={node.transform ? matrixAttr(node.transform) : undefined}>
38
+ {node.children.map((c) => renderNode(c, prefix))}
39
+ </g>
40
+ );
41
+ }
42
+
43
+ /**
44
+ * **The cat, as a live SVG.** Every part is a real element with a semantic id (`cat-tail`,
45
+ * `cat-head`, `cat-eye-left`, …); the tail's outline is re-skinned from its bones each render. Pure:
46
+ * the same props and `timeMs` always draw the same frame, which is what Remotion needs.
47
+ *
48
+ * <Cat tailWiggle tailWiggleAmount={12} tailWiggleDuration={1500} timeMs={frame / fps * 1000} />
49
+ */
50
+ export function Cat({
51
+ config: input, timeMs = 0, animation, tailWiggle, tailWiggleAmount, tailWiggleDuration, tailWiggleSpeed, color, background,
52
+ idPrefix = '', debug = false, children, svgRef, ...svg
53
+ }: CatProps) {
54
+ /* No hooks on purpose: <Cat> is a pure function of its props, so it renders the same under any React
55
+ copy (Remotion's bundle imports it from outside its own node_modules) and in a server render. */
56
+ const base = resolveCatConfig(input);
57
+ const config = {
58
+ ...base,
59
+ color: color ?? base.color,
60
+ background: background === undefined ? base.background : background,
61
+ tail: {
62
+ ...base.tail,
63
+ wiggle: tailWiggle ?? base.tail.wiggle,
64
+ amount: tailWiggleAmount ?? base.tail.amount,
65
+ duration: tailWiggleDuration ?? base.tail.duration,
66
+ speed: tailWiggleSpeed ?? base.tail.speed,
67
+ },
68
+ };
69
+ const doc = animation ?? buildAnimationDocument(config);
70
+ const pose = catPose(config, timeMs, doc);
71
+ const scene = catScene(config, pose);
72
+ const { x, y, width, height } = CAT_VIEWBOX;
73
+ return (
74
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox={`${x} ${y} ${width} ${height}`} role="img" aria-label="Cat" ref={svgRef} {...svg}>
75
+ <title>{`Cat. ${CAT_CREDIT}`}</title>
76
+ {config.background ? <rect x={x} y={y} width={width} height={height} fill={config.background} /> : null}
77
+ {renderNode(scene, idPrefix)}
78
+ {debug && pose.tail.visible ? <TailBones pose={pose} /> : null}
79
+ {children}
80
+ </svg>
81
+ );
82
+ }
83
+
84
+ /** The bone chain drawn over the tail: joints as dots, bones as lines. */
85
+ function TailBones({ pose }: { pose: ReturnType<typeof catPose> }) {
86
+ const m = tailMatrix(pose.tail);
87
+ const joints = posedJoints(pose.tail.bones);
88
+ return (
89
+ <g data-part="cat-tail-rig" transform={matrixAttr(m)} pointerEvents="none">
90
+ <polyline points={joints.map((j) => j.join(',')).join(' ')} fill="none" stroke="currentColor" strokeWidth={10} strokeDasharray="28 18" opacity={0.7} />
91
+ {joints.map(([jx, jy], i) => <circle key={i} cx={jx} cy={jy} r={i < TAIL_BONES.length ? 26 : 16} fill="currentColor" opacity={0.85} />)}
92
+ </g>
93
+ );
94
+ }
95
+
96
+ export type CatPlayerProps = Omit<CatProps, 'timeMs'> & { playing?: boolean };
97
+
98
+ /**
99
+ * **A realtime player for the web** — `<Cat>` driven by requestAnimationFrame. For pages only; a
100
+ * Remotion composition passes its frame to `<Cat timeMs>` instead.
101
+ */
102
+ export function CatPlayer({ playing = true, ...props }: CatPlayerProps) {
103
+ const [t, setT] = useState(0);
104
+ const start = useRef<number | null>(null);
105
+ useEffect(() => {
106
+ if (!playing) { start.current = null; return; }
107
+ let raf = 0;
108
+ const tick = (now: number) => {
109
+ if (start.current === null) start.current = now - t;
110
+ setT(now - start.current);
111
+ raf = requestAnimationFrame(tick);
112
+ };
113
+ raf = requestAnimationFrame(tick);
114
+ return () => cancelAnimationFrame(raf);
115
+ /* Resumes from the current time only when `playing` toggles. */
116
+ }, [playing]);
117
+ return <Cat {...props} timeMs={t} />;
118
+ }