@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
@@ -5,6 +5,8 @@ import { FIELD_KEY, RECEIPT_MAX_AMOUNT, RECEIPT_MAX_FIELDS, RECEIPT_MAX_ITEMS, R
5
5
  import { HEATMAP_REVEALS } from '../components/onboarding/activity-heatmap/contract';
6
6
  import { FEED_BLOCK_KINDS } from '../components/onboarding/expandable-feed/contract';
7
7
  import { MAX_SLIDES } from '../components/onboarding/carousel/contract';
8
+ import { SEND_COMPLETION_ICONS, SEND_COMPLETION_LIMITS } from '../components/onboarding/send-completion/contract';
9
+ import { COLOR_FORMATS, COLOR_HINT, COLOR_PATTERN } from '../components/onboarding/shared/configColor';
8
10
  import { bool, json, list, map, num, obj, text } from './spec';
9
11
  import type { AgentCapability, CapabilityAction, CapabilityCard, CapabilityEvent, CopySpec, FieldSpec } from './types';
10
12
 
@@ -531,4 +533,84 @@ const completion: NewManifest = {
531
533
  system: ['partialStats', 'successStats', 'partialItems', 'successItems', 'demoSkipped', 'ship'],
532
534
  };
533
535
 
534
- export const NEW_MANIFESTS: readonly NewManifest[] = [receiptPrinter, budgetTracker, activityHeatmap, criteriaSpider, expandableFeed, fallback, seatAllocation, carousel, completion];
536
+ const colour = (c: OnboardingComponent, key: string, what: string) =>
537
+ text(`${what} A colour: ${COLOR_FORMATS}.`, {
538
+ format: 'color', pattern: COLOR_PATTERN.source, patternHint: COLOR_HINT, default: base(c)[key], owners: ['agent', 'builder', 'developer'],
539
+ });
540
+ const sendCompletion: NewManifest = {
541
+ family: 'new',
542
+ component: 'send-completion',
543
+ name: 'Send Completion',
544
+ kind: 'interactive',
545
+ purpose: 'A single send button that shows the send happening: pressed, its icon launches, the button becomes a check, and a pill confirms ("Sent!") — once the host\'s send has really succeeded.',
546
+ signals: ['send button', 'sent', 'submit', 'submitted', 'send button', 'confirm', 'upload', 'save', 'message sent', 'done button', 'send animation', 'success animation'],
547
+ useWhen: [
548
+ 'One action the person triggers — send, submit, upload, confirm, save — whose success should be shown as it happens.',
549
+ 'The host can run the action (the send operation) and say whether it succeeded.',
550
+ ],
551
+ avoidWhen: [
552
+ 'A form with fields to fill — this is the one button, not the form.',
553
+ 'Making a receipt, invoice or document to send someone — that is the document\'s own component; this is only the button that sends.',
554
+ 'Several steps or a summary of what was set up — use completion.',
555
+ 'Progress over time (percent, many items) — the circle only waits, it does not count.',
556
+ ],
557
+ related: [
558
+ { component: 'completion', distinction: 'Completion summarises a finished flow; Send Completion is the one press that finishes it.' },
559
+ ],
560
+ states: [
561
+ { state: 'idle', description: 'The button, ready; the tap cue shows first when behavior.showTapCue.' },
562
+ { state: 'sending', description: 'Pressed: the host\'s send runs while the icon flies; the circle waits (breathing) for it.' },
563
+ { state: 'sent', description: 'The send succeeded: the check and the completed label. This is the task\'s result, not just the animation\'s end.' },
564
+ { state: 'failed', description: 'The send failed: the button returns and an alert says why; pressing again retries.' },
565
+ ...LOAD_STATES,
566
+ ],
567
+ actions: [
568
+ { id: 'send', description: 'The person presses the button (or Enter / Space on it). Runs the host\'s send operation.', hostOperation: true },
569
+ { id: 'reset', description: 'Brings the button back, after sent or failed.' },
570
+ ],
571
+ events: [
572
+ { event: 'sendStarted', description: 'The person pressed the button; the send is running.', data: '{}' },
573
+ { event: 'sent', description: 'The send succeeded and "Sent!" is showing.', data: '{}' },
574
+ { event: 'reset', description: 'The person pressed Reset.', data: '{}' },
575
+ { event: 'statusChanged', description: 'Playback moved on.', data: '{ status: "idle" | "pressed" | "launching" | "transforming" | "sent" }' },
576
+ ],
577
+ requiresInput: false,
578
+ rules: [
579
+ 'data.label is what the button does (Send, Submit, Upload…); data.completedLabel what it says when done (Sent!, Submitted!…). Each at most 3 words and 16 characters: longer text shrinks inside the fixed button.',
580
+ 'The motion, its timing and the layout are fixed: there are no keys for them.',
581
+ '"sent" is reported only after the host\'s send operation succeeds; a failure never shows the check.',
582
+ 'behavior.loop is decorative: it replays forever and never calls the host\'s send.',
583
+ ],
584
+ askFor: {
585
+ label: 'What does the button do — Send, Submit, Upload, Save?',
586
+ },
587
+ data: {
588
+ label: text('What the button says: the action (Send, Submit, Upload, Confirm, Save…).', { required: true, maxLength: SEND_COMPLETION_LIMITS.label.chars, origin: 'invent' }),
589
+ completedLabel: text('What the pill says once it is done (Sent!, Submitted!, Uploaded…).', { required: true, maxLength: SEND_COMPLETION_LIMITS.completedLabel.chars, origin: 'invent' }),
590
+ },
591
+ behavior: {
592
+ showTapCue: bool('Show "TAP/CLICK" and a fingertip before the press.', { default: base('send-completion').showTapCue, owners: ['agent', 'builder', 'developer'] }),
593
+ autoplay: bool('Press on its own as soon as it shows (and run the send).', { default: false, owners: ['agent', 'builder', 'developer'] }),
594
+ loop: bool('Replay forever as a decoration; the host\'s send is never called.', { default: false, owners: ['agent', 'builder', 'developer'] }),
595
+ },
596
+ presentation: {
597
+ ...presentation('send-completion'),
598
+ backgroundColor: colour('send-completion', 'backgroundColor', 'Behind everything.'),
599
+ buttonColor: colour('send-completion', 'buttonColor', 'The button, the circle and the pill.'),
600
+ textColor: colour('send-completion', 'textColor', 'The button\'s label.'),
601
+ iconColor: colour('send-completion', 'iconColor', 'The icon while it sits in the button.'),
602
+ completionColor: colour('send-completion', 'completionColor', 'The check and the completed label.'),
603
+ trailColor: colour('send-completion', 'trailColor', 'The icon in flight, its trail and the tap cue.'),
604
+ sendIcon: text('The icon the button carries and launches.', { enum: SEND_COMPLETION_ICONS, default: base('send-completion').sendIcon, owners: ['agent', 'builder', 'developer'] }),
605
+ iconScale: num('The icon\'s size (1 is the design\'s).', { min: SEND_COMPLETION_LIMITS.iconScale[0], max: SEND_COMPLETION_LIMITS.iconScale[1], default: 1, owners: ['agent', 'builder', 'developer'] }),
606
+ cornerRadius: num('The button\'s corner radius, in points.', { min: SEND_COMPLETION_LIMITS.cornerRadius[0], max: SEND_COMPLETION_LIMITS.cornerRadius[1], default: base('send-completion').cornerRadius, owners: ['agent', 'builder', 'developer'] }),
607
+ width: num('The animation\'s widest, in points; it keeps 4:3 and shrinks with its container.', { min: SEND_COMPLETION_LIMITS.width[0], max: SEND_COMPLETION_LIMITS.width[1], default: base('send-completion').width, owners: ['agent', 'builder', 'developer'] }),
608
+ },
609
+ system: ['ship'],
610
+ copyExtra: {
611
+ ...HEADER,
612
+ tapHint: { maxLength: SEND_COMPLETION_LIMITS.tapHint.chars },
613
+ },
614
+ };
615
+
616
+ export const NEW_MANIFESTS: readonly NewManifest[] = [receiptPrinter, budgetTracker, activityHeatmap, criteriaSpider, expandableFeed, fallback, seatAllocation, carousel, completion, sendCompletion];
@@ -40,6 +40,12 @@ export const RESULT_EVENTS: Record<string, Record<string, [string, Mapper]>> = {
40
40
  onContinue: ['continued', (() => ({})) as Mapper],
41
41
  onFinishLater: ['finishLater', (() => ({})) as Mapper],
42
42
  },
43
+ 'send-completion': {
44
+ onSend: ['sendStarted', (() => ({})) as Mapper],
45
+ onSent: ['sent', (() => ({})) as Mapper],
46
+ onReset: ['reset', (() => ({})) as Mapper],
47
+ onStatusChange: ['statusChanged', ((status: string) => ({ status })) as Mapper],
48
+ },
43
49
  directory: { onSelect: ['selected', ((id: string) => ({ id })) as Mapper] },
44
50
  checklist: { onChange: ['changed', ((checklist: unknown, change: unknown) => ({ checklist, change })) as Mapper] },
45
51
  'threshold-flow': {
@@ -45,7 +45,7 @@ type Base = {
45
45
  };
46
46
 
47
47
  export type FieldSpec =
48
- | Base & { type: 'text'; maxLength?: number; minLength?: number; pattern?: string; patternHint?: string; format?: 'date'; enum?: readonly string[]; unique?: boolean }
48
+ | Base & { type: 'text'; maxLength?: number; minLength?: number; pattern?: string; patternHint?: string; format?: 'date' | 'color'; enum?: readonly string[]; unique?: boolean }
49
49
  | Base & { type: 'number'; integer?: boolean; min?: number; max?: number; exclusiveMin?: number }
50
50
  | Base & { type: 'boolean' }
51
51
  | Base & { type: 'list'; item: FieldSpec; minItems?: number; maxItems?: number }
@@ -40,7 +40,9 @@ export type ComponentFamily =
40
40
  | 'combobox' | 'tabbed' | 'fallback'
41
41
  | 'budget-tracker' | 'ab-tests' | 'conversion-funnel'
42
42
  | 'expandable-feed' | 'score-summary' | 'criteria-spider' | 'activity-heatmap' | 'tag-cloud'
43
- | 'receipt-printer';
43
+ | 'receipt-printer'
44
+ | 'animated-status'
45
+ | 'send-completion';
44
46
 
45
47
  /**
46
48
  * **A set of families shipped and shown together.** The seven onboarding components (2026-09-24)
@@ -573,6 +575,24 @@ export const COMPONENT_CATALOGUE: ComponentCatalogueEntry[] = [
573
575
  playground: { slug: 'new/receipt-printer' },
574
576
  note: 'The first New component animated with Rive. The printer and the paper are a Rive file authored as RML with the Rive CLI (rive/receipt-printer/receipt-printer.rml, reference ~/Downloads/printerPDF.pdf) and shipped as base64 (riv.ts, `npm run rive:receipt-printer`); React owns the form, the checks, the print operation and the lifecycle, and talks to Rive only through the `Receipt` view model (ten strings, print/reset/reveal triggers, a status the machine writes). Web: @rive-app/react-canvas. Native: the same receipt as a still. Built to docs/COMPONENT-RULES.md.',
575
577
  },
578
+ {
579
+ type: 'animated-status', label: 'Animated Status', status: 'implemented', driver: 'configuration-driven', introduced: '2026-09-29', group: 'new', caseStudies: 5,
580
+ blurb: 'A six-scene animated message in a fixed motion design — give it the words, two colours and an icon; the motion never changes.',
581
+ fixtureDir: 'onboarding/animated-status',
582
+ storyId: 'Components/Onboarding/Animated Status',
583
+ resource: { slug: 'new/animated-status', defaultFixture: 'case1' },
584
+ playground: { slug: 'new/animated-status' },
585
+ note: 'Rebuilt from a reference GIF (720×1280, 271 frames at 24 fps) as one Rive file authored as RML with the Rive CLI (rive/animated-status, generated by authoring/generate-rml.mjs) and shipped as base64 (riv.ts, `npm run rive:animated-status`). The config holds only the words (six slots with fixed word limits), textColor, accentColor and emblemIcon; timing, layout and typography have no key, and every text box in the file is fixed and shrinks its type, so no word moves anything. `done` means the animation finished, not the task. Web: @rive-app/react-canvas. Native: a still. Standalone prototype: rive-prototype/. Built to docs/COMPONENT-RULES.md.',
586
+ },
587
+ {
588
+ type: 'send-completion', label: 'Send Completion', status: 'implemented', driver: 'configuration-driven', introduced: '2026-09-29', group: 'new', caseStudies: 5,
589
+ blurb: 'A send button that launches its icon, balls up into a check and says “Sent!” — once the send has really succeeded.',
590
+ fixtureDir: 'onboarding/send-completion',
591
+ storyId: 'Components/Onboarding/Send Completion',
592
+ resource: { slug: 'new/send-completion', defaultFixture: 'case1' },
593
+ playground: { slug: 'new/send-completion' },
594
+ note: 'Rebuilt natively in Rive from a reference GIF (720×540, 120 frames at 24 fps): one master timeline of measured keys cut into a state machine (tap cue → press → launch → wait → transform → sent), authored as RML (rive/send-completion, generated by authoring/generate-rml.mjs) and shipped as base64 (riv.ts, `npm run rive:send-completion`). The plane rides a path (FollowPathConstraint) with a trimmed trail; the button morphs by keyed size and a data-driven corner radius. The config holds the words, six colours, the icon, its scale, the corner radius, the width and the behaviour; the press runs the host `send` operation and the check waits for it. Web: @rive-app/react-canvas. Native: a still. Built to docs/COMPONENT-RULES.md.',
595
+ },
576
596
  ];
577
597
 
578
598
  /** The most recent `introduced` date among these — what "New" means on the site. */
@@ -0,0 +1,18 @@
1
+ import { useEffect } from 'react';
2
+ import { AnimatedStill } from './AnimatedStill';
3
+ import type { AnimatedStageProps } from './AnimatedStage.types';
4
+
5
+ export type { AnimatedStageProps };
6
+
7
+ /**
8
+ * **The native half: a still.** The Rive runtime this component plays on the web
9
+ * (`@rive-app/react-canvas`) is a browser runtime, so it is never imported here. Play lands on
10
+ * `done` at once; reset returns to `idle`.
11
+ */
12
+ export function AnimatedStage({ command, onStatus, ...still }: AnimatedStageProps) {
13
+ useEffect(() => {
14
+ if (!command) return;
15
+ onStatus(command.kind === 'reset' ? 'idle' : 'done');
16
+ }, [command?.n]);
17
+ return <AnimatedStill {...still} />;
18
+ }
@@ -0,0 +1,30 @@
1
+ import type { AnimatedStatusStatus } from './contract';
2
+ import type { AnimatedStatusWords } from './engine';
3
+
4
+ /**
5
+ * **The animation — the one boundary between the component and how it is drawn.**
6
+ *
7
+ * The component hands over the words, two colours, an icon and a command, and hears back the
8
+ * playback status. The web half (`AnimatedStage.web.tsx`) plays the Rive file; the native half, and
9
+ * the web half whenever the Rive runtime cannot load, show a still (`AnimatedStill`) and finish at
10
+ * once. Nothing about Rive — artboards, view models, triggers — crosses this line.
11
+ */
12
+ export type AnimatedStageCommand = { kind: 'play' | 'reset' | 'reveal'; n: number };
13
+
14
+ export type AnimatedStageProps = {
15
+ words: AnimatedStatusWords;
16
+ textColor: string;
17
+ accentColor: string;
18
+ icon: string;
19
+ /** The latest command; a new `n` runs it again. */
20
+ command: AnimatedStageCommand | null;
21
+ /** Playback moved on: `idle`, `playing` or `done`. */
22
+ onStatus: (status: AnimatedStatusStatus) => void;
23
+ /** The animation's accessible name: every word it shows. */
24
+ label: string;
25
+ maxWidth: number;
26
+ testID?: string;
27
+ };
28
+
29
+ /** The artboard's 9:16. */
30
+ export const STAGE_ASPECT = 720 / 1280;
@@ -0,0 +1,99 @@
1
+ import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import { Alignment, Fit, Layout, useRive } from '@rive-app/react-canvas';
3
+ import { Box } from '../../../core';
4
+ import { blockRadii } from '../../../tokens';
5
+ import { ANIMATION_GROUND } from '../../../tokens/stage';
6
+ import type { AnimatedStatusStatus } from './contract';
7
+ import { riveWrites } from './engine';
8
+ import { AnimatedStill } from './AnimatedStill';
9
+ import { ANIMATED_STATUS_RIV } from './riv';
10
+ import { STAGE_ASPECT, type AnimatedStageProps } from './AnimatedStage.types';
11
+
12
+ export type { AnimatedStageProps };
13
+
14
+ /**
15
+ * **The web half: the Rive animation.**
16
+ *
17
+ * The Rive file (`rive/animated-status/`) owns the artwork, the six scenes and every frame of
18
+ * motion. This owns only the conversation with it, through the `AnimatedStatus` view model: the
19
+ * words, the two colours and the icon index are written whenever they change; `play`, `reset` and
20
+ * `reveal` are triggers; `status` is written by the file's own state machine (`idle` · `playing` ·
21
+ * `done`). No word can move anything: every text box in the file is fixed and shrinks its type.
22
+ *
23
+ * If the runtime or the file cannot load, the stage shows the still and a play finishes at once.
24
+ */
25
+
26
+ const ARTBOARD = 'AnimatedStatus';
27
+ const MACHINE = 'AnimatedStatusMachine';
28
+
29
+ let bytes: Uint8Array | null = null;
30
+ /** The `.riv`, decoded once per page; each stage gets its own copy of the buffer. */
31
+ function rivBuffer(): ArrayBuffer {
32
+ if (!bytes) {
33
+ const bin = atob(ANIMATED_STATUS_RIV);
34
+ bytes = new Uint8Array(bin.length);
35
+ for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
36
+ }
37
+ return bytes.slice().buffer;
38
+ }
39
+
40
+ type Prop = { value: string | number };
41
+ type Instance = {
42
+ string(p: string): (Prop & { on(cb: () => void): void; off(cb?: () => void): void; value: string }) | null;
43
+ number(p: string): Prop | null;
44
+ color(p: string): Prop | null;
45
+ trigger(p: string): { trigger(): void } | null;
46
+ };
47
+
48
+ export function AnimatedStage({ words, textColor, accentColor, icon, command, onStatus, label, maxWidth, testID }: AnimatedStageProps) {
49
+ const [failed, setFailed] = useState(false);
50
+ const params = useMemo(() => ({
51
+ buffer: rivBuffer(),
52
+ artboard: ARTBOARD,
53
+ stateMachines: MACHINE,
54
+ autoplay: true,
55
+ autoBind: true,
56
+ layout: new Layout({ fit: Fit.Contain, alignment: Alignment.Center }),
57
+ onLoadError: () => setFailed(true),
58
+ }), []);
59
+ const { rive, RiveComponent } = useRive(params);
60
+ const heard = useRef(onStatus);
61
+ heard.current = onStatus;
62
+ const vm = rive?.viewModelInstance as unknown as Instance | undefined;
63
+
64
+ /* 1 · The words and the look, whenever they change — they never restart playback. */
65
+ useEffect(() => {
66
+ if (!vm) return;
67
+ for (const w of riveWrites(words, textColor, accentColor, icon)) {
68
+ const p = vm[w.kind](w.name);
69
+ if (p && p.value !== w.value) p.value = w.value;
70
+ }
71
+ }, [vm, words, textColor, accentColor, icon]);
72
+
73
+ /* 2 · Commands, as triggers. */
74
+ useEffect(() => {
75
+ if (!vm || !command) return;
76
+ vm.trigger(command.kind)?.trigger();
77
+ rive?.play();
78
+ }, [vm, command?.n]);
79
+
80
+ /* 3 · The file says where playback is. */
81
+ useEffect(() => {
82
+ const status = vm?.string('status');
83
+ if (!status) return;
84
+ const report = () => heard.current(status.value as AnimatedStatusStatus);
85
+ status.on(report);
86
+ return () => status.off(report);
87
+ }, [vm]);
88
+
89
+ /* Without the runtime, a command settles at once, exactly as on native. */
90
+ useEffect(() => { if (failed && command) heard.current(command.kind === 'reset' ? 'idle' : 'done'); }, [failed, command?.n]);
91
+
92
+ if (failed) return <AnimatedStill words={words} textColor={textColor} accentColor={accentColor} label={label} maxWidth={maxWidth} testID={testID} />;
93
+ return (
94
+ /* `data-rive` says whether the artboard has painted — a screenshot (the visual gate) waits for `ready`. */
95
+ <Box testID={testID} role="img" aria-label={label} style={{ width: '100%', maxWidth, aspectRatio: STAGE_ASPECT, borderRadius: blockRadii.mid, overflow: 'hidden', backgroundColor: ANIMATION_GROUND }}>
96
+ <RiveComponent aria-hidden="true" data-rive={rive ? 'ready' : 'loading'} style={{ width: '100%', height: '100%', display: 'block' }} />
97
+ </Box>
98
+ );
99
+ }
@@ -0,0 +1,109 @@
1
+ import { useEffect, useMemo, useRef, useState, type ComponentType } from 'react';
2
+ import { Box, useReduceMotion } from '../../../core';
3
+ import type { DensityName } from '../../../tokens';
4
+ import { fill, resolveConfig, type OnboardingPreset, type PatternStatus } from '../shared/contract';
5
+ import type { OnboardingOperation } from '../shared/mock';
6
+ import { InvalidConfig } from '../shared/InvalidConfig';
7
+ import { OnboardingCard } from '../shared/OnboardingCard';
8
+ import { usePatternStatus, useSceneReport } from '../shared/runtime';
9
+ import { guarded } from '../shared/guard';
10
+ import { ANIMATED_STATUS_PRESETS, ANIMATED_STATUS_SECONDS, validateAnimatedStatus, type AnimatedStatusSettings, type AnimatedStatusStatus } from './contract';
11
+ import { spokenText, wordsOf, type AnimatedStatusSeed } from './engine';
12
+ import { AnimatedStage } from './AnimatedStage';
13
+ import type { AnimatedStageCommand, AnimatedStageProps } from './AnimatedStage.types';
14
+
15
+ export type AnimatedStatusProps = {
16
+ preset?: OnboardingPreset;
17
+ config?: Partial<AnimatedStatusSettings>;
18
+ density?: DensityName;
19
+ status?: PatternStatus;
20
+ reload?: OnboardingOperation<void>;
21
+ /** A demo scene's starting point — see `animatedStatusSeed`. */
22
+ initial?: AnimatedStatusSeed;
23
+ /** What draws the animation. Default: Rive on the web, a still on native. */
24
+ stage?: ComponentType<AnimatedStageProps>;
25
+ /** Playback moved on. `done` means the animation finished — not that the task it describes did. */
26
+ onStatusChange?: (status: AnimatedStatusStatus) => void;
27
+ /** Play (or Replay) was pressed. */
28
+ onPlay?: () => void;
29
+ /** Reset was pressed. */
30
+ onReset?: () => void;
31
+ onScene?: (scene: string) => void;
32
+ testID?: string;
33
+ };
34
+
35
+ /**
36
+ * **Animated Status** — the animation on a card: the header, the 9:16 stage, a status chip
37
+ * (Ready · Playing · Played), Play / Replay and Reset. With reduced motion, Play shows the last
38
+ * frame at once.
39
+ */
40
+ function AnimatedStatusView(props: AnimatedStatusProps) {
41
+ const config = resolveConfig(ANIMATED_STATUS_PRESETS, props.preset, props.config);
42
+ const issues = validateAnimatedStatus(config);
43
+ if (issues.length) return <InvalidConfig title={config.title} issues={issues} testID={props.testID} />;
44
+ return <Valid {...props} config={config} />;
45
+ }
46
+
47
+ function Valid({ config, density, status, reload, initial, stage: Stage = AnimatedStage, onStatusChange, onPlay, onReset, onScene, testID }: Omit<AnimatedStatusProps, 'config'> & { config: AnimatedStatusSettings }) {
48
+ const pattern = usePatternStatus(status ?? 'ready', reload);
49
+ const reduceMotion = useReduceMotion();
50
+ const words = useMemo(() => wordsOf(config), [config.scene1Text, config.scene2Text, config.scene3Text, config.scene4Text, config.scene5Text, config.scene6Text]);
51
+ const [playback, setPlayback] = useState<AnimatedStatusStatus>('idle');
52
+ const [command, setCommand] = useState<AnimatedStageCommand | null>(null);
53
+ const n = useRef(0);
54
+ const run = (kind: AnimatedStageCommand['kind']) => setCommand({ kind, n: ++n.current });
55
+
56
+ /* A scene's seed, or autoplay, starts playback once the card shows. */
57
+ const seeded = initial?.status ?? (config.autoplay ? 'playing' : 'idle');
58
+ useEffect(() => {
59
+ if (seeded === 'playing') run(reduceMotion ? 'reveal' : 'play');
60
+ else if (seeded === 'done') run('reveal');
61
+ }, [seeded]);
62
+
63
+ const changed = useRef(onStatusChange);
64
+ changed.current = onStatusChange;
65
+ const last = useRef<AnimatedStatusStatus>('idle');
66
+ const heard = (s: AnimatedStatusStatus) => {
67
+ if (last.current === s) return;
68
+ last.current = s;
69
+ setPlayback(s);
70
+ changed.current?.(s);
71
+ };
72
+
73
+ useSceneReport(pattern.status === 'ready' ? (playback === 'idle' ? 'default' : playback) : pattern.status, onScene);
74
+
75
+ const chip = playback === 'playing'
76
+ ? { tone: 'attention' as const, label: config.playingLabel, dot: true }
77
+ : playback === 'done' ? { tone: 'success' as const, label: config.doneLabel } : { tone: 'neutral' as const, label: config.idleLabel };
78
+ return (
79
+ <OnboardingCard
80
+ testID={testID}
81
+ header={config}
82
+ copy={config}
83
+ density={density}
84
+ status={pattern.status}
85
+ onRetry={pattern.retry}
86
+ onEmptyAction={pattern.retry}
87
+ chip={chip}
88
+ hint={fill(config.hintText, { seconds: ANIMATED_STATUS_SECONDS })}
89
+ secondary={playback !== 'idle' ? { label: config.resetLabel, onPress: () => { onReset?.(); run('reset'); } } : undefined}
90
+ primary={{ label: playback === 'idle' ? config.playLabel : config.replayLabel, onPress: () => { onPlay?.(); run(reduceMotion ? 'reveal' : 'play'); } }}>
91
+ <Box align="center">
92
+ <Stage
93
+ words={words}
94
+ textColor={config.textColor}
95
+ accentColor={config.accentColor}
96
+ icon={config.emblemIcon}
97
+ command={command}
98
+ onStatus={heard}
99
+ label={spokenText(words)}
100
+ maxWidth={300}
101
+ testID={testID ? `${testID}-stage` : undefined}
102
+ />
103
+ </Box>
104
+ </OnboardingCard>
105
+ );
106
+ }
107
+
108
+ /** Animated Status, guarded: a wrong-kind config is refused by name and a render error is caught (`shared/guard`). */
109
+ export const AnimatedStatus = guarded(AnimatedStatusView, ANIMATED_STATUS_PRESETS, 'AnimatedStatus');
@@ -0,0 +1,23 @@
1
+ import { Box, Text } from '../../../core';
2
+ import { blockRadii } from '../../../tokens';
3
+ import { ANIMATION_GROUND } from '../../../tokens/stage';
4
+ import { cssColor } from './engine';
5
+ import { STAGE_ASPECT, type AnimatedStageProps } from './AnimatedStage.types';
6
+
7
+ /**
8
+ * **The animation as a still** — native, and the web when the Rive runtime cannot load: the opening
9
+ * word and the call to action on the white ground, the sign-off on an accent rule. Same words and
10
+ * colours; no motion.
11
+ */
12
+ export function AnimatedStill({ words, textColor, accentColor, label, maxWidth, testID }: Pick<AnimatedStageProps, 'words' | 'textColor' | 'accentColor' | 'label' | 'maxWidth' | 'testID'>) {
13
+ const ink = cssColor(textColor);
14
+ return (
15
+ <Box testID={testID} role="img" aria-label={label}
16
+ style={{ width: '100%', maxWidth, aspectRatio: STAGE_ASPECT, borderRadius: blockRadii.mid, overflow: 'hidden', backgroundColor: ANIMATION_GROUND, alignItems: 'center', justifyContent: 'center', gap: 18, padding: 16 }}>
17
+ <Text numberOfLines={1} style={{ fontSize: 44, fontWeight: '800', color: ink }}>{words.scene1Text}</Text>
18
+ <Text numberOfLines={1} style={{ fontSize: 18, fontWeight: '700', color: ink }}>{words.scene5Text}</Text>
19
+ <Box style={{ width: 96, height: 3, backgroundColor: cssColor(accentColor) }} />
20
+ <Text numberOfLines={1} style={{ fontSize: 11, color: ink, opacity: 0.7 }}>{words.scene6Text}</Text>
21
+ </Box>
22
+ );
23
+ }
@@ -0,0 +1,105 @@
1
+ import type { HeaderConfig, LoadCopy, OnboardingIssue, PresetsFile } from '../shared/contract';
2
+ import { COLOR_TOKENS, parseColor } from '../shared/configColor';
3
+ import presetsJson from './presets.json';
4
+
5
+ /**
6
+ * **Animated Status** — a short animated message in a fixed motion design (Rive,
7
+ * `rive/animated-status/`): six scenes, from an opening word a square bounces across to a dark end
8
+ * card with an icon. The config gives the words, two colours and the icon; the motion, layout,
9
+ * typography and timing are the component's and have no key.
10
+ *
11
+ * Every word slot has its own word limit, part of the design: over it, the config is refused with
12
+ * the reason — never cut short. A longer word shrinks inside its fixed box in the animation, so no
13
+ * text can move anything. `done` means the animation finished playing — not that the task the
14
+ * words describe is done; the host owns that.
15
+ */
16
+
17
+ export const ANIMATED_STATUS_SCENES = ['default', 'playing', 'done', 'loading', 'empty', 'error'] as const;
18
+ export type AnimatedStatusScene = (typeof ANIMATED_STATUS_SCENES)[number];
19
+ export const ANIMATED_STATUS_IN_FLIGHT: readonly string[] = [];
20
+
21
+ /** The emblem's icons, in the order the Rive file holds their artwork. */
22
+ export const ANIMATED_STATUS_ICONS = ['search', 'location', 'document', 'calendar', 'check', 'sparkles', 'loader', 'warning'] as const;
23
+ export type AnimatedStatusIcon = (typeof ANIMATED_STATUS_ICONS)[number];
24
+
25
+ export type AnimatedStatusSlot = 'scene1Text' | 'scene2Text' | 'scene3Text' | 'scene4Text' | 'scene5Text' | 'scene6Text';
26
+ /** Each slot's limits: words `[min, max]`, characters, and characters per word. */
27
+ export const ANIMATED_STATUS_SLOTS: Record<AnimatedStatusSlot, { words: [number, number]; maxChars: number; maxWordChars?: number; shows: string }> = {
28
+ scene1Text: { words: [1, 1], maxChars: 12, shows: 'the opening word; a square bounces across it and fills it in' },
29
+ scene2Text: { words: [1, 1], maxChars: 12, shows: 'one word, stacked up the screen five times' },
30
+ scene3Text: { words: [6, 6], maxChars: 44, maxWordChars: 11, shows: 'six words, one per line, each larger; the fifth is emphasised' },
31
+ scene4Text: { words: [3, 3], maxChars: 20, maxWordChars: 6, shows: 'three words as hard cuts; a full stop follows the third' },
32
+ scene5Text: { words: [1, 3], maxChars: 22, shows: 'the call to action' },
33
+ scene6Text: { words: [1, 3], maxChars: 36, shows: 'the sign-off on the dark end card' },
34
+ };
35
+ export const ANIMATED_STATUS_SLOT_KEYS = Object.keys(ANIMATED_STATUS_SLOTS) as AnimatedStatusSlot[];
36
+
37
+ export type AnimatedStatusStatus = 'idle' | 'playing' | 'done';
38
+
39
+ /** Every word the card shows around the animation. */
40
+ export type AnimatedStatusCopy = {
41
+ playLabel: string;
42
+ replayLabel: string;
43
+ resetLabel: string;
44
+ /** The status chip: before, during and after playback. */
45
+ idleLabel: string;
46
+ playingLabel: string;
47
+ doneLabel: string;
48
+ /** Under the animation: "Plays once · {seconds} s". */
49
+ hintText: string;
50
+ };
51
+
52
+ export type AnimatedStatusSettings = HeaderConfig & LoadCopy & AnimatedStatusCopy & Record<AnimatedStatusSlot, string> & {
53
+ /** Colour of every word on the white scenes, the square and the dots. Hex, rgb(), rgba() or a hue token. */
54
+ textColor: string;
55
+ /** Colour of the end card: the emblem, the rule and the glow. */
56
+ accentColor: string;
57
+ /** The emblem's icon — one of `ANIMATED_STATUS_ICONS`. */
58
+ emblemIcon: string;
59
+ /** Play as soon as it shows. Default false: the card waits for Play. */
60
+ autoplay?: boolean;
61
+ ship?: string;
62
+ };
63
+
64
+ export const ANIMATED_STATUS_PRESETS = presetsJson as unknown as PresetsFile<AnimatedStatusSettings>;
65
+ /** How long one playthrough takes: 271 frames at 24 fps. */
66
+ export const ANIMATED_STATUS_SECONDS = 11.3;
67
+
68
+ /* Colours are content here: see `shared/configColor`. */
69
+ export { COLOR_TOKENS, parseColor, type Rgba } from '../shared/configColor';
70
+
71
+ /* ─── validation ──────────────────────────────────────────────────────────────────────────── */
72
+
73
+ const words = (s: string) => s.trim().split(/\s+/).filter(Boolean);
74
+ const plural = (n: number, one: string) => `${n} ${one}${n === 1 ? '' : 's'}`;
75
+
76
+ /**
77
+ * The config's problems, each with its field. Text over a limit is refused and says which limit;
78
+ * it is never shortened. Never throws, whatever it is given.
79
+ */
80
+ export function validateAnimatedStatus(c: AnimatedStatusSettings): OnboardingIssue[] {
81
+ const issues: OnboardingIssue[] = [];
82
+ for (const key of ANIMATED_STATUS_SLOT_KEYS) {
83
+ const rule = ANIMATED_STATUS_SLOTS[key];
84
+ const text = c?.[key];
85
+ if (typeof text !== 'string' || !text.trim()) { issues.push({ path: key, message: `${key} needs text: ${rule.shows}.` }); continue; }
86
+ if ([...text].some(ch => ch.charCodeAt(0) < 32 || ch.charCodeAt(0) === 127)) { issues.push({ path: key, message: `${key} is one line of plain text.` }); continue; }
87
+ const ws = words(text);
88
+ const [min, max] = rule.words;
89
+ const exact = min === max;
90
+ if (ws.length > max) issues.push({ path: key, message: `${key} takes ${exact ? 'exactly' : 'at most'} ${plural(max, 'word')} (${rule.shows}); it has ${ws.length}.` });
91
+ else if (ws.length < min) issues.push({ path: key, message: `${key} takes ${exact ? 'exactly' : 'at least'} ${plural(min, 'word')} (${rule.shows}); it has ${ws.length}.` });
92
+ if (text.trim().length > rule.maxChars) issues.push({ path: key, message: `${key} takes at most ${rule.maxChars} characters; it has ${text.trim().length}.` });
93
+ const long = rule.maxWordChars ? ws.filter(w => w.length > rule.maxWordChars!) : [];
94
+ if (long.length) issues.push({ path: key, message: `Each word of ${key} is at most ${rule.maxWordChars} characters: ${long.join(', ')} is too long.` });
95
+ }
96
+ for (const key of ['textColor', 'accentColor'] as const) {
97
+ // eslint-disable-next-line comppack/no-raw-colour -- the message names the colour formats the config may supply
98
+ if (!parseColor(c?.[key])) issues.push({ path: key, message: `${key} is a colour: #RGB, #RRGGBB, #RRGGBBAA, rgb(), rgba() or a hue token (${Object.keys(COLOR_TOKENS).slice(0, 4).join(', ')}…).` });
99
+ }
100
+ if (!(ANIMATED_STATUS_ICONS as readonly string[]).includes(c?.emblemIcon as string)) {
101
+ issues.push({ path: 'emblemIcon', message: `emblemIcon is one of ${ANIMATED_STATUS_ICONS.join(', ')}.` });
102
+ }
103
+ if (c?.autoplay !== undefined && typeof c.autoplay !== 'boolean') issues.push({ path: 'autoplay', message: 'autoplay is yes or no.' });
104
+ return issues;
105
+ }
@@ -0,0 +1,49 @@
1
+ import {
2
+ ANIMATED_STATUS_ICONS, ANIMATED_STATUS_SLOT_KEYS,
3
+ type AnimatedStatusScene, type AnimatedStatusSettings, type AnimatedStatusStatus,
4
+ } from './contract';
5
+ import { argb } from '../shared/configColor';
6
+
7
+ export { cssColor } from '../shared/configColor';
8
+
9
+ /** A demo scene's starting point: where playback is when the card shows. */
10
+ export type AnimatedStatusSeed = { status: AnimatedStatusStatus };
11
+
12
+ export function animatedStatusSeed(_config: AnimatedStatusSettings, scene: AnimatedStatusScene | string): AnimatedStatusSeed {
13
+ return { status: scene === 'playing' ? 'playing' : scene === 'done' ? 'done' : 'idle' };
14
+ }
15
+
16
+ /** The config's words, as the animation shows them. */
17
+ export type AnimatedStatusWords = Record<(typeof ANIMATED_STATUS_SLOT_KEYS)[number], string>;
18
+ export const wordsOf = (c: AnimatedStatusSettings): AnimatedStatusWords =>
19
+ Object.fromEntries(ANIMATED_STATUS_SLOT_KEYS.map(k => [k, c[k].trim().split(/\s+/).join(' ')])) as AnimatedStatusWords;
20
+
21
+ /** Everything the animation says, in order — its accessible name (a canvas has no text of its own). */
22
+ export function spokenText(w: AnimatedStatusWords): string {
23
+ return [w.scene1Text, w.scene2Text, w.scene3Text, `${w.scene4Text}.`, w.scene5Text, w.scene6Text].join(' · ');
24
+ }
25
+
26
+
27
+ export type RiveWrite = { kind: 'string' | 'color' | 'number'; name: string; value: string | number };
28
+
29
+ /**
30
+ * **The words and appearance as the Rive file's view model takes them.** The one place its names
31
+ * appear: scene 3's words go one per line (`scene3Line1–6`), scene 4's one per cut
32
+ * (`scene4Word1–3`), and the icon by its index in the file (`iconIndex`).
33
+ */
34
+ export function riveWrites(w: AnimatedStatusWords, textColor: string, accentColor: string, icon: string): RiveWrite[] {
35
+ const s3 = w.scene3Text.split(' ');
36
+ const s4 = w.scene4Text.split(' ');
37
+ return [
38
+ { kind: 'string', name: 'scene1Text', value: w.scene1Text },
39
+ { kind: 'string', name: 'scene2Text', value: w.scene2Text },
40
+ ...s3.map((v, i): RiveWrite => ({ kind: 'string', name: `scene3Line${i + 1}`, value: v })),
41
+ ...s4.map((v, i): RiveWrite => ({ kind: 'string', name: `scene4Word${i + 1}`, value: v })),
42
+ { kind: 'string', name: 'scene5Text', value: w.scene5Text },
43
+ { kind: 'string', name: 'scene6Text', value: w.scene6Text },
44
+ { kind: 'color', name: 'textColor', value: argb(textColor) },
45
+ { kind: 'color', name: 'accentColor', value: argb(accentColor) },
46
+ { kind: 'number', name: 'iconIndex', value: Math.max(0, (ANIMATED_STATUS_ICONS as readonly string[]).indexOf(icon)) },
47
+ ];
48
+ }
49
+
@@ -0,0 +1,8 @@
1
+ export {
2
+ ANIMATED_STATUS_ICONS, ANIMATED_STATUS_IN_FLIGHT, ANIMATED_STATUS_PRESETS, ANIMATED_STATUS_SCENES, ANIMATED_STATUS_SECONDS, ANIMATED_STATUS_SLOTS,
3
+ COLOR_TOKENS as ANIMATED_STATUS_COLOR_TOKENS, parseColor as parseAnimatedStatusColor, validateAnimatedStatus,
4
+ type AnimatedStatusIcon, type AnimatedStatusScene, type AnimatedStatusSettings, type AnimatedStatusStatus,
5
+ } from './contract';
6
+ export { animatedStatusSeed, riveWrites as animatedStatusRiveWrites, spokenText as animatedStatusSpokenText, type AnimatedStatusSeed } from './engine';
7
+ export { AnimatedStatus, type AnimatedStatusProps } from './AnimatedStatusView';
8
+ export type { AnimatedStageProps, AnimatedStageCommand } from './AnimatedStage.types';