@appinternalleads/ui 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (890) hide show
  1. package/dist/cjs/agent/AgentComponent.js +1 -1
  2. package/dist/cjs/agent/AgentComponent.js.map +1 -1
  3. package/dist/cjs/agent/manifests.js +81 -1
  4. package/dist/cjs/agent/manifests.js.map +1 -1
  5. package/dist/cjs/agent/result.js +6 -0
  6. package/dist/cjs/agent/result.js.map +1 -1
  7. package/dist/cjs/components/catalog.js +18 -0
  8. package/dist/cjs/components/catalog.js.map +1 -1
  9. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js +21 -0
  10. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  11. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js +6 -0
  12. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  13. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js +89 -0
  14. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  15. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js +62 -0
  16. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  17. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js +20 -0
  18. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  19. package/dist/cjs/components/onboarding/animated-status/contract.js +87 -0
  20. package/dist/cjs/components/onboarding/animated-status/contract.js.map +1 -0
  21. package/dist/cjs/components/onboarding/animated-status/engine.js +40 -0
  22. package/dist/cjs/components/onboarding/animated-status/engine.js.map +1 -0
  23. package/dist/cjs/components/onboarding/animated-status/index.js +20 -0
  24. package/dist/cjs/components/onboarding/animated-status/index.js.map +1 -0
  25. package/dist/cjs/components/onboarding/animated-status/presets.json +126 -0
  26. package/dist/cjs/components/onboarding/animated-status/riv.js +7 -0
  27. package/dist/cjs/components/onboarding/animated-status/riv.js.map +1 -0
  28. package/dist/cjs/components/onboarding/index.js +4 -0
  29. package/dist/cjs/components/onboarding/index.js.map +1 -1
  30. package/dist/cjs/components/onboarding/presets.js +90 -84
  31. package/dist/cjs/components/onboarding/presets.js.map +1 -1
  32. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js +43 -6
  33. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  34. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js +111 -0
  35. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  36. package/dist/cjs/components/onboarding/send-completion/SendStage.js +37 -0
  37. package/dist/cjs/components/onboarding/send-completion/SendStage.js.map +1 -0
  38. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js +6 -0
  39. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  40. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js +107 -0
  41. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  42. package/dist/cjs/components/onboarding/send-completion/SendStill.js +17 -0
  43. package/dist/cjs/components/onboarding/send-completion/SendStill.js.map +1 -0
  44. package/dist/cjs/components/onboarding/send-completion/contract.js +83 -0
  45. package/dist/cjs/components/onboarding/send-completion/contract.js.map +1 -0
  46. package/dist/cjs/components/onboarding/send-completion/engine.js +32 -0
  47. package/dist/cjs/components/onboarding/send-completion/engine.js.map +1 -0
  48. package/dist/cjs/components/onboarding/send-completion/index.js +22 -0
  49. package/dist/cjs/components/onboarding/send-completion/index.js.map +1 -0
  50. package/dist/cjs/components/onboarding/send-completion/presets.json +132 -0
  51. package/dist/cjs/components/onboarding/send-completion/riv.js +7 -0
  52. package/dist/cjs/components/onboarding/send-completion/riv.js.map +1 -0
  53. package/dist/cjs/components/onboarding/shared/actions-data.js +2 -0
  54. package/dist/cjs/components/onboarding/shared/actions-data.js.map +1 -1
  55. package/dist/cjs/components/onboarding/shared/configColor.js +76 -0
  56. package/dist/cjs/components/onboarding/shared/configColor.js.map +1 -0
  57. package/dist/cjs/components/onboarding/shared/contract.js +4 -0
  58. package/dist/cjs/components/onboarding/shared/contract.js.map +1 -1
  59. package/dist/cjs/components/onboarding/shared/describe.js +1 -1
  60. package/dist/cjs/components/onboarding/shared/describe.js.map +1 -1
  61. package/dist/cjs/components/onboarding/shared/mock.js +2 -0
  62. package/dist/cjs/components/onboarding/shared/mock.js.map +1 -1
  63. package/dist/cjs/components/onboarding/views.js +8 -0
  64. package/dist/cjs/components/onboarding/views.js.map +1 -1
  65. package/dist/cjs/motion/MotionPlayer.js +42 -0
  66. package/dist/cjs/motion/MotionPlayer.js.map +1 -0
  67. package/dist/cjs/motion/agent.js +323 -0
  68. package/dist/cjs/motion/agent.js.map +1 -0
  69. package/dist/cjs/motion/cat/Cat.js +79 -0
  70. package/dist/cjs/motion/cat/Cat.js.map +1 -0
  71. package/dist/cjs/motion/cat/animation.js +204 -0
  72. package/dist/cjs/motion/cat/animation.js.map +1 -0
  73. package/dist/cjs/motion/cat/art.generated.js +37 -0
  74. package/dist/cjs/motion/cat/art.generated.js.map +1 -0
  75. package/dist/cjs/motion/cat/config.js +136 -0
  76. package/dist/cjs/motion/cat/config.js.map +1 -0
  77. package/dist/cjs/motion/cat/index.js +75 -0
  78. package/dist/cjs/motion/cat/index.js.map +1 -0
  79. package/dist/cjs/motion/cat/rig.js +99 -0
  80. package/dist/cjs/motion/cat/rig.js.map +1 -0
  81. package/dist/cjs/motion/cat/scene.js +148 -0
  82. package/dist/cjs/motion/cat/scene.js.map +1 -0
  83. package/dist/cjs/motion/configurable/config.js +477 -0
  84. package/dist/cjs/motion/configurable/config.js.map +1 -0
  85. package/dist/cjs/motion/configurable/controls.js +44 -0
  86. package/dist/cjs/motion/configurable/controls.js.map +1 -0
  87. package/dist/cjs/motion/easing.js +62 -0
  88. package/dist/cjs/motion/easing.js.map +1 -0
  89. package/dist/cjs/motion/fit.js +12 -0
  90. package/dist/cjs/motion/fit.js.map +1 -0
  91. package/dist/cjs/motion/index.js +101 -0
  92. package/dist/cjs/motion/index.js.map +1 -0
  93. package/dist/cjs/motion/neon/GlowRenderer.js +18 -0
  94. package/dist/cjs/motion/neon/GlowRenderer.js.map +1 -0
  95. package/dist/cjs/motion/neon/NeonCanvas.js +97 -0
  96. package/dist/cjs/motion/neon/NeonCanvas.js.map +1 -0
  97. package/dist/cjs/motion/neon/NeonText.js +108 -0
  98. package/dist/cjs/motion/neon/NeonText.js.map +1 -0
  99. package/dist/cjs/motion/neon/NeonTextFrame.js +36 -0
  100. package/dist/cjs/motion/neon/NeonTextFrame.js.map +1 -0
  101. package/dist/cjs/motion/neon/artwork.js +102 -0
  102. package/dist/cjs/motion/neon/artwork.js.map +1 -0
  103. package/dist/cjs/motion/neon/audio.js +165 -0
  104. package/dist/cjs/motion/neon/audio.js.map +1 -0
  105. package/dist/cjs/motion/neon/config.js +334 -0
  106. package/dist/cjs/motion/neon/config.js.map +1 -0
  107. package/dist/cjs/motion/neon/flicker.js +196 -0
  108. package/dist/cjs/motion/neon/flicker.js.map +1 -0
  109. package/dist/cjs/motion/neon/fonts.js +52 -0
  110. package/dist/cjs/motion/neon/fonts.js.map +1 -0
  111. package/dist/cjs/motion/neon/frame.js +24 -0
  112. package/dist/cjs/motion/neon/frame.js.map +1 -0
  113. package/dist/cjs/motion/neon/glitch.js +114 -0
  114. package/dist/cjs/motion/neon/glitch.js.map +1 -0
  115. package/dist/cjs/motion/neon/index.js +119 -0
  116. package/dist/cjs/motion/neon/index.js.map +1 -0
  117. package/dist/cjs/motion/neon/layers.js +68 -0
  118. package/dist/cjs/motion/neon/layers.js.map +1 -0
  119. package/dist/cjs/motion/neon/material.js +56 -0
  120. package/dist/cjs/motion/neon/material.js.map +1 -0
  121. package/dist/cjs/motion/neon/random.js +43 -0
  122. package/dist/cjs/motion/neon/random.js.map +1 -0
  123. package/dist/cjs/motion/neon/scene.js +549 -0
  124. package/dist/cjs/motion/neon/scene.js.map +1 -0
  125. package/dist/cjs/motion/neon/synth.js +213 -0
  126. package/dist/cjs/motion/neon/synth.js.map +1 -0
  127. package/dist/cjs/motion/neon/typography.js +81 -0
  128. package/dist/cjs/motion/neon/typography.js.map +1 -0
  129. package/dist/cjs/motion/neon/wall.js +113 -0
  130. package/dist/cjs/motion/neon/wall.js.map +1 -0
  131. package/dist/cjs/motion/paperfold/PaperFold.js +40 -0
  132. package/dist/cjs/motion/paperfold/PaperFold.js.map +1 -0
  133. package/dist/cjs/motion/paperfold/PaperFoldFrame.js +290 -0
  134. package/dist/cjs/motion/paperfold/PaperFoldFrame.js.map +1 -0
  135. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js +59 -0
  136. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  137. package/dist/cjs/motion/paperfold/art.js +388 -0
  138. package/dist/cjs/motion/paperfold/art.js.map +1 -0
  139. package/dist/cjs/motion/paperfold/config.js +103 -0
  140. package/dist/cjs/motion/paperfold/config.js.map +1 -0
  141. package/dist/cjs/motion/paperfold/controls.js +493 -0
  142. package/dist/cjs/motion/paperfold/controls.js.map +1 -0
  143. package/dist/cjs/motion/paperfold/engine.js +722 -0
  144. package/dist/cjs/motion/paperfold/engine.js.map +1 -0
  145. package/dist/cjs/motion/paperfold/fonts.js +25 -0
  146. package/dist/cjs/motion/paperfold/fonts.js.map +1 -0
  147. package/dist/cjs/motion/paperfold/index.js +113 -0
  148. package/dist/cjs/motion/paperfold/index.js.map +1 -0
  149. package/dist/cjs/motion/paperfold/manipulate.js +170 -0
  150. package/dist/cjs/motion/paperfold/manipulate.js.map +1 -0
  151. package/dist/cjs/motion/paperfold/presets.js +119 -0
  152. package/dist/cjs/motion/paperfold/presets.js.map +1 -0
  153. package/dist/cjs/motion/paperfold/template.js +40 -0
  154. package/dist/cjs/motion/paperfold/template.js.map +1 -0
  155. package/dist/cjs/motion/player.js +203 -0
  156. package/dist/cjs/motion/player.js.map +1 -0
  157. package/dist/cjs/motion/promo/PromoFrame.js +293 -0
  158. package/dist/cjs/motion/promo/PromoFrame.js.map +1 -0
  159. package/dist/cjs/motion/promo/PromoShowcasePlayer.js +59 -0
  160. package/dist/cjs/motion/promo/PromoShowcasePlayer.js.map +1 -0
  161. package/dist/cjs/motion/promo/config.js +565 -0
  162. package/dist/cjs/motion/promo/config.js.map +1 -0
  163. package/dist/cjs/motion/promo/controls.js +571 -0
  164. package/dist/cjs/motion/promo/controls.js.map +1 -0
  165. package/dist/cjs/motion/promo/easing.js +35 -0
  166. package/dist/cjs/motion/promo/easing.js.map +1 -0
  167. package/dist/cjs/motion/promo/engine.js +567 -0
  168. package/dist/cjs/motion/promo/engine.js.map +1 -0
  169. package/dist/cjs/motion/promo/fonts.js +20 -0
  170. package/dist/cjs/motion/promo/fonts.js.map +1 -0
  171. package/dist/cjs/motion/promo/icons.js +29 -0
  172. package/dist/cjs/motion/promo/icons.js.map +1 -0
  173. package/dist/cjs/motion/promo/index.js +73 -0
  174. package/dist/cjs/motion/promo/index.js.map +1 -0
  175. package/dist/cjs/motion/promo/presets.js +44 -0
  176. package/dist/cjs/motion/promo/presets.js.map +1 -0
  177. package/dist/cjs/motion/promo/template.js +38 -0
  178. package/dist/cjs/motion/promo/template.js.map +1 -0
  179. package/dist/cjs/motion/replication2/Replication2Player.js +93 -0
  180. package/dist/cjs/motion/replication2/Replication2Player.js.map +1 -0
  181. package/dist/cjs/motion/replication2/config.js +352 -0
  182. package/dist/cjs/motion/replication2/config.js.map +1 -0
  183. package/dist/cjs/motion/replication2/controls.js +286 -0
  184. package/dist/cjs/motion/replication2/controls.js.map +1 -0
  185. package/dist/cjs/motion/replication2/driver.js +68 -0
  186. package/dist/cjs/motion/replication2/driver.js.map +1 -0
  187. package/dist/cjs/motion/replication2/easing.js +97 -0
  188. package/dist/cjs/motion/replication2/easing.js.map +1 -0
  189. package/dist/cjs/motion/replication2/engine.js +481 -0
  190. package/dist/cjs/motion/replication2/engine.js.map +1 -0
  191. package/dist/cjs/motion/replication2/html.js +88 -0
  192. package/dist/cjs/motion/replication2/html.js.map +1 -0
  193. package/dist/cjs/motion/replication2/index.js +61 -0
  194. package/dist/cjs/motion/replication2/index.js.map +1 -0
  195. package/dist/cjs/motion/replication2/measure.js +30 -0
  196. package/dist/cjs/motion/replication2/measure.js.map +1 -0
  197. package/dist/cjs/motion/replication2/metrics.js +10 -0
  198. package/dist/cjs/motion/replication2/metrics.js.map +1 -0
  199. package/dist/cjs/motion/replication2/presets.js +67 -0
  200. package/dist/cjs/motion/replication2/presets.js.map +1 -0
  201. package/dist/cjs/motion/replication2/riv.js +7 -0
  202. package/dist/cjs/motion/replication2/riv.js.map +1 -0
  203. package/dist/cjs/motion/replication2/rive-contract.js +158 -0
  204. package/dist/cjs/motion/replication2/rive-contract.js.map +1 -0
  205. package/dist/cjs/motion/replication2/template.js +35 -0
  206. package/dist/cjs/motion/replication2/template.js.map +1 -0
  207. package/dist/cjs/motion/sample.js +149 -0
  208. package/dist/cjs/motion/sample.js.map +1 -0
  209. package/dist/cjs/motion/templates/hey-template.js +1552 -0
  210. package/dist/cjs/motion/templates/hey-template.js.map +1 -0
  211. package/dist/cjs/motion/templates/index.js +22 -0
  212. package/dist/cjs/motion/templates/index.js.map +1 -0
  213. package/dist/cjs/motion/templates/word-motion.js +1165 -0
  214. package/dist/cjs/motion/templates/word-motion.js.map +1 -0
  215. package/dist/cjs/motion/types.js +3 -0
  216. package/dist/cjs/motion/types.js.map +1 -0
  217. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js +62 -0
  218. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  219. package/dist/cjs/motion/typesurface/art.js +861 -0
  220. package/dist/cjs/motion/typesurface/art.js.map +1 -0
  221. package/dist/cjs/motion/typesurface/config.js +269 -0
  222. package/dist/cjs/motion/typesurface/config.js.map +1 -0
  223. package/dist/cjs/motion/typesurface/engine.js +607 -0
  224. package/dist/cjs/motion/typesurface/engine.js.map +1 -0
  225. package/dist/cjs/motion/typesurface/fonts.js +45 -0
  226. package/dist/cjs/motion/typesurface/fonts.js.map +1 -0
  227. package/dist/cjs/motion/typesurface/index.js +72 -0
  228. package/dist/cjs/motion/typesurface/index.js.map +1 -0
  229. package/dist/cjs/motion/typesurface/layout.js +130 -0
  230. package/dist/cjs/motion/typesurface/layout.js.map +1 -0
  231. package/dist/cjs/motion/typesurface/ops.js +175 -0
  232. package/dist/cjs/motion/typesurface/ops.js.map +1 -0
  233. package/dist/cjs/motion/typesurface/presets.js +192 -0
  234. package/dist/cjs/motion/typesurface/presets.js.map +1 -0
  235. package/dist/cjs/motion/typesurface/renderer.js +672 -0
  236. package/dist/cjs/motion/typesurface/renderer.js.map +1 -0
  237. package/dist/cjs/motion/typesurface/shaders.js +300 -0
  238. package/dist/cjs/motion/typesurface/shaders.js.map +1 -0
  239. package/dist/cjs/motion/typesurface/surfaces.js +156 -0
  240. package/dist/cjs/motion/typesurface/surfaces.js.map +1 -0
  241. package/dist/cjs/motion/typesurface/text.js +34 -0
  242. package/dist/cjs/motion/typesurface/text.js.map +1 -0
  243. package/dist/cjs/motion/typesurface/timeline.js +64 -0
  244. package/dist/cjs/motion/typesurface/timeline.js.map +1 -0
  245. package/dist/cjs/motion/validate.js +89 -0
  246. package/dist/cjs/motion/validate.js.map +1 -0
  247. package/dist/cjs/native/RiveReceiptStage.js +9 -150
  248. package/dist/cjs/native/RiveReceiptStage.js.map +1 -1
  249. package/dist/cjs/native/riveReceiptStageFactory.js +162 -0
  250. package/dist/cjs/native/riveReceiptStageFactory.js.map +1 -0
  251. package/dist/cjs/tokens/stage.js +10 -0
  252. package/dist/cjs/tokens/stage.js.map +1 -0
  253. package/dist/esm/agent/AgentComponent.js +1 -1
  254. package/dist/esm/agent/AgentComponent.js.map +1 -1
  255. package/dist/esm/agent/manifests.d.ts.map +1 -1
  256. package/dist/esm/agent/manifests.js +81 -1
  257. package/dist/esm/agent/manifests.js.map +1 -1
  258. package/dist/esm/agent/result.d.ts.map +1 -1
  259. package/dist/esm/agent/result.js +6 -0
  260. package/dist/esm/agent/result.js.map +1 -1
  261. package/dist/esm/agent/types.d.ts +1 -1
  262. package/dist/esm/agent/types.d.ts.map +1 -1
  263. package/dist/esm/components/catalog.d.ts +1 -1
  264. package/dist/esm/components/catalog.d.ts.map +1 -1
  265. package/dist/esm/components/catalog.js +18 -0
  266. package/dist/esm/components/catalog.js.map +1 -1
  267. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts +9 -0
  268. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts.map +1 -0
  269. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js +18 -0
  270. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  271. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts +31 -0
  272. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts.map +1 -0
  273. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js +3 -0
  274. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  275. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts +4 -0
  276. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts.map +1 -0
  277. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js +86 -0
  278. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  279. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts +32 -0
  280. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts.map +1 -0
  281. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js +59 -0
  282. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  283. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts +8 -0
  284. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts.map +1 -0
  285. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js +17 -0
  286. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  287. package/dist/esm/components/onboarding/animated-status/contract.d.ts +61 -0
  288. package/dist/esm/components/onboarding/animated-status/contract.d.ts.map +1 -0
  289. package/dist/esm/components/onboarding/animated-status/contract.js +78 -0
  290. package/dist/esm/components/onboarding/animated-status/contract.js.map +1 -0
  291. package/dist/esm/components/onboarding/animated-status/engine.d.ts +24 -0
  292. package/dist/esm/components/onboarding/animated-status/engine.d.ts.map +1 -0
  293. package/dist/esm/components/onboarding/animated-status/engine.js +32 -0
  294. package/dist/esm/components/onboarding/animated-status/engine.js.map +1 -0
  295. package/dist/esm/components/onboarding/animated-status/index.d.ts +5 -0
  296. package/dist/esm/components/onboarding/animated-status/index.d.ts.map +1 -0
  297. package/dist/esm/components/onboarding/animated-status/index.js +4 -0
  298. package/dist/esm/components/onboarding/animated-status/index.js.map +1 -0
  299. package/dist/esm/components/onboarding/animated-status/presets.json +126 -0
  300. package/dist/esm/components/onboarding/animated-status/riv.d.ts +3 -0
  301. package/dist/esm/components/onboarding/animated-status/riv.d.ts.map +1 -0
  302. package/dist/esm/components/onboarding/animated-status/riv.js +4 -0
  303. package/dist/esm/components/onboarding/animated-status/riv.js.map +1 -0
  304. package/dist/esm/components/onboarding/index.d.ts +2 -0
  305. package/dist/esm/components/onboarding/index.d.ts.map +1 -1
  306. package/dist/esm/components/onboarding/index.js +4 -0
  307. package/dist/esm/components/onboarding/index.js.map +1 -1
  308. package/dist/esm/components/onboarding/presets.d.ts.map +1 -1
  309. package/dist/esm/components/onboarding/presets.js +6 -0
  310. package/dist/esm/components/onboarding/presets.js.map +1 -1
  311. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts +4 -6
  312. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts.map +1 -1
  313. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js +42 -6
  314. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  315. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts +47 -0
  316. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts.map +1 -0
  317. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js +108 -0
  318. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  319. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts +9 -0
  320. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts.map +1 -0
  321. package/dist/esm/components/onboarding/send-completion/SendStage.js +34 -0
  322. package/dist/esm/components/onboarding/send-completion/SendStage.js.map +1 -0
  323. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts +33 -0
  324. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts.map +1 -0
  325. package/dist/esm/components/onboarding/send-completion/SendStage.types.js +3 -0
  326. package/dist/esm/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  327. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts +4 -0
  328. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts.map +1 -0
  329. package/dist/esm/components/onboarding/send-completion/SendStage.web.js +104 -0
  330. package/dist/esm/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  331. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts +11 -0
  332. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts.map +1 -0
  333. package/dist/esm/components/onboarding/send-completion/SendStill.js +14 -0
  334. package/dist/esm/components/onboarding/send-completion/SendStill.js.map +1 -0
  335. package/dist/esm/components/onboarding/send-completion/contract.d.ts +99 -0
  336. package/dist/esm/components/onboarding/send-completion/contract.d.ts.map +1 -0
  337. package/dist/esm/components/onboarding/send-completion/contract.js +76 -0
  338. package/dist/esm/components/onboarding/send-completion/contract.js.map +1 -0
  339. package/dist/esm/components/onboarding/send-completion/engine.d.ts +20 -0
  340. package/dist/esm/components/onboarding/send-completion/engine.d.ts.map +1 -0
  341. package/dist/esm/components/onboarding/send-completion/engine.js +28 -0
  342. package/dist/esm/components/onboarding/send-completion/engine.js.map +1 -0
  343. package/dist/esm/components/onboarding/send-completion/index.d.ts +6 -0
  344. package/dist/esm/components/onboarding/send-completion/index.d.ts.map +1 -0
  345. package/dist/esm/components/onboarding/send-completion/index.js +6 -0
  346. package/dist/esm/components/onboarding/send-completion/index.js.map +1 -0
  347. package/dist/esm/components/onboarding/send-completion/presets.json +132 -0
  348. package/dist/esm/components/onboarding/send-completion/riv.d.ts +3 -0
  349. package/dist/esm/components/onboarding/send-completion/riv.d.ts.map +1 -0
  350. package/dist/esm/components/onboarding/send-completion/riv.js +4 -0
  351. package/dist/esm/components/onboarding/send-completion/riv.js.map +1 -0
  352. package/dist/esm/components/onboarding/shared/actions-data.d.ts.map +1 -1
  353. package/dist/esm/components/onboarding/shared/actions-data.js +2 -0
  354. package/dist/esm/components/onboarding/shared/actions-data.js.map +1 -1
  355. package/dist/esm/components/onboarding/shared/configColor.d.ts +29 -0
  356. package/dist/esm/components/onboarding/shared/configColor.d.ts.map +1 -0
  357. package/dist/esm/components/onboarding/shared/configColor.js +69 -0
  358. package/dist/esm/components/onboarding/shared/configColor.js.map +1 -0
  359. package/dist/esm/components/onboarding/shared/contract.d.ts +1 -1
  360. package/dist/esm/components/onboarding/shared/contract.d.ts.map +1 -1
  361. package/dist/esm/components/onboarding/shared/contract.js +4 -0
  362. package/dist/esm/components/onboarding/shared/contract.js.map +1 -1
  363. package/dist/esm/components/onboarding/shared/describe.d.ts.map +1 -1
  364. package/dist/esm/components/onboarding/shared/describe.js +1 -1
  365. package/dist/esm/components/onboarding/shared/describe.js.map +1 -1
  366. package/dist/esm/components/onboarding/shared/mock.d.ts +2 -0
  367. package/dist/esm/components/onboarding/shared/mock.d.ts.map +1 -1
  368. package/dist/esm/components/onboarding/shared/mock.js +2 -0
  369. package/dist/esm/components/onboarding/shared/mock.js.map +1 -1
  370. package/dist/esm/components/onboarding/views.d.ts.map +1 -1
  371. package/dist/esm/components/onboarding/views.js +8 -0
  372. package/dist/esm/components/onboarding/views.js.map +1 -1
  373. package/dist/esm/motion/MotionPlayer.d.ts +22 -0
  374. package/dist/esm/motion/MotionPlayer.d.ts.map +1 -0
  375. package/dist/esm/motion/MotionPlayer.js +39 -0
  376. package/dist/esm/motion/MotionPlayer.js.map +1 -0
  377. package/dist/esm/motion/agent.d.ts +146 -0
  378. package/dist/esm/motion/agent.d.ts.map +1 -0
  379. package/dist/esm/motion/agent.js +278 -0
  380. package/dist/esm/motion/agent.js.map +1 -0
  381. package/dist/esm/motion/cat/Cat.d.ts +43 -0
  382. package/dist/esm/motion/cat/Cat.d.ts.map +1 -0
  383. package/dist/esm/motion/cat/Cat.js +74 -0
  384. package/dist/esm/motion/cat/Cat.js.map +1 -0
  385. package/dist/esm/motion/cat/animation.d.ts +86 -0
  386. package/dist/esm/motion/cat/animation.d.ts.map +1 -0
  387. package/dist/esm/motion/cat/animation.js +193 -0
  388. package/dist/esm/motion/cat/animation.js.map +1 -0
  389. package/dist/esm/motion/cat/art.generated.d.ts +53 -0
  390. package/dist/esm/motion/cat/art.generated.d.ts.map +1 -0
  391. package/dist/esm/motion/cat/art.generated.js +34 -0
  392. package/dist/esm/motion/cat/art.generated.js.map +1 -0
  393. package/dist/esm/motion/cat/config.d.ts +103 -0
  394. package/dist/esm/motion/cat/config.d.ts.map +1 -0
  395. package/dist/esm/motion/cat/config.js +129 -0
  396. package/dist/esm/motion/cat/config.js.map +1 -0
  397. package/dist/esm/motion/cat/index.d.ts +13 -0
  398. package/dist/esm/motion/cat/index.d.ts.map +1 -0
  399. package/dist/esm/motion/cat/index.js +13 -0
  400. package/dist/esm/motion/cat/index.js.map +1 -0
  401. package/dist/esm/motion/cat/rig.d.ts +44 -0
  402. package/dist/esm/motion/cat/rig.d.ts.map +1 -0
  403. package/dist/esm/motion/cat/rig.js +86 -0
  404. package/dist/esm/motion/cat/rig.js.map +1 -0
  405. package/dist/esm/motion/cat/scene.d.ts +66 -0
  406. package/dist/esm/motion/cat/scene.d.ts.map +1 -0
  407. package/dist/esm/motion/cat/scene.js +137 -0
  408. package/dist/esm/motion/cat/scene.js.map +1 -0
  409. package/dist/esm/motion/configurable/config.d.ts +80 -0
  410. package/dist/esm/motion/configurable/config.d.ts.map +1 -0
  411. package/dist/esm/motion/configurable/config.js +468 -0
  412. package/dist/esm/motion/configurable/config.js.map +1 -0
  413. package/dist/esm/motion/configurable/controls.d.ts +74 -0
  414. package/dist/esm/motion/configurable/controls.d.ts.map +1 -0
  415. package/dist/esm/motion/configurable/controls.js +38 -0
  416. package/dist/esm/motion/configurable/controls.js.map +1 -0
  417. package/dist/esm/motion/easing.d.ts +4 -0
  418. package/dist/esm/motion/easing.d.ts.map +1 -0
  419. package/dist/esm/motion/easing.js +58 -0
  420. package/dist/esm/motion/easing.js.map +1 -0
  421. package/dist/esm/motion/fit.d.ts +8 -0
  422. package/dist/esm/motion/fit.d.ts.map +1 -0
  423. package/dist/esm/motion/fit.js +8 -0
  424. package/dist/esm/motion/fit.js.map +1 -0
  425. package/dist/esm/motion/index.d.ts +27 -0
  426. package/dist/esm/motion/index.d.ts.map +1 -0
  427. package/dist/esm/motion/index.js +21 -0
  428. package/dist/esm/motion/index.js.map +1 -0
  429. package/dist/esm/motion/neon/GlowRenderer.d.ts +31 -0
  430. package/dist/esm/motion/neon/GlowRenderer.d.ts.map +1 -0
  431. package/dist/esm/motion/neon/GlowRenderer.js +14 -0
  432. package/dist/esm/motion/neon/GlowRenderer.js.map +1 -0
  433. package/dist/esm/motion/neon/NeonCanvas.d.ts +42 -0
  434. package/dist/esm/motion/neon/NeonCanvas.d.ts.map +1 -0
  435. package/dist/esm/motion/neon/NeonCanvas.js +92 -0
  436. package/dist/esm/motion/neon/NeonCanvas.js.map +1 -0
  437. package/dist/esm/motion/neon/NeonText.d.ts +26 -0
  438. package/dist/esm/motion/neon/NeonText.d.ts.map +1 -0
  439. package/dist/esm/motion/neon/NeonText.js +103 -0
  440. package/dist/esm/motion/neon/NeonText.js.map +1 -0
  441. package/dist/esm/motion/neon/NeonTextFrame.d.ts +29 -0
  442. package/dist/esm/motion/neon/NeonTextFrame.d.ts.map +1 -0
  443. package/dist/esm/motion/neon/NeonTextFrame.js +33 -0
  444. package/dist/esm/motion/neon/NeonTextFrame.js.map +1 -0
  445. package/dist/esm/motion/neon/artwork.d.ts +29 -0
  446. package/dist/esm/motion/neon/artwork.d.ts.map +1 -0
  447. package/dist/esm/motion/neon/artwork.js +98 -0
  448. package/dist/esm/motion/neon/artwork.js.map +1 -0
  449. package/dist/esm/motion/neon/audio.d.ts +49 -0
  450. package/dist/esm/motion/neon/audio.d.ts.map +1 -0
  451. package/dist/esm/motion/neon/audio.js +161 -0
  452. package/dist/esm/motion/neon/audio.js.map +1 -0
  453. package/dist/esm/motion/neon/config.d.ts +319 -0
  454. package/dist/esm/motion/neon/config.d.ts.map +1 -0
  455. package/dist/esm/motion/neon/config.js +319 -0
  456. package/dist/esm/motion/neon/config.js.map +1 -0
  457. package/dist/esm/motion/neon/flicker.d.ts +82 -0
  458. package/dist/esm/motion/neon/flicker.d.ts.map +1 -0
  459. package/dist/esm/motion/neon/flicker.js +187 -0
  460. package/dist/esm/motion/neon/flicker.js.map +1 -0
  461. package/dist/esm/motion/neon/fonts.d.ts +29 -0
  462. package/dist/esm/motion/neon/fonts.d.ts.map +1 -0
  463. package/dist/esm/motion/neon/fonts.js +47 -0
  464. package/dist/esm/motion/neon/fonts.js.map +1 -0
  465. package/dist/esm/motion/neon/frame.d.ts +22 -0
  466. package/dist/esm/motion/neon/frame.d.ts.map +1 -0
  467. package/dist/esm/motion/neon/frame.js +20 -0
  468. package/dist/esm/motion/neon/frame.js.map +1 -0
  469. package/dist/esm/motion/neon/glitch.d.ts +64 -0
  470. package/dist/esm/motion/neon/glitch.d.ts.map +1 -0
  471. package/dist/esm/motion/neon/glitch.js +108 -0
  472. package/dist/esm/motion/neon/glitch.js.map +1 -0
  473. package/dist/esm/motion/neon/index.d.ts +29 -0
  474. package/dist/esm/motion/neon/index.d.ts.map +1 -0
  475. package/dist/esm/motion/neon/index.js +28 -0
  476. package/dist/esm/motion/neon/index.js.map +1 -0
  477. package/dist/esm/motion/neon/layers.d.ts +56 -0
  478. package/dist/esm/motion/neon/layers.d.ts.map +1 -0
  479. package/dist/esm/motion/neon/layers.js +64 -0
  480. package/dist/esm/motion/neon/layers.js.map +1 -0
  481. package/dist/esm/motion/neon/material.d.ts +68 -0
  482. package/dist/esm/motion/neon/material.d.ts.map +1 -0
  483. package/dist/esm/motion/neon/material.js +51 -0
  484. package/dist/esm/motion/neon/material.js.map +1 -0
  485. package/dist/esm/motion/neon/random.d.ts +15 -0
  486. package/dist/esm/motion/neon/random.d.ts.map +1 -0
  487. package/dist/esm/motion/neon/random.js +37 -0
  488. package/dist/esm/motion/neon/random.js.map +1 -0
  489. package/dist/esm/motion/neon/scene.d.ts +255 -0
  490. package/dist/esm/motion/neon/scene.d.ts.map +1 -0
  491. package/dist/esm/motion/neon/scene.js +532 -0
  492. package/dist/esm/motion/neon/scene.js.map +1 -0
  493. package/dist/esm/motion/neon/synth.d.ts +18 -0
  494. package/dist/esm/motion/neon/synth.d.ts.map +1 -0
  495. package/dist/esm/motion/neon/synth.js +208 -0
  496. package/dist/esm/motion/neon/synth.js.map +1 -0
  497. package/dist/esm/motion/neon/typography.d.ts +53 -0
  498. package/dist/esm/motion/neon/typography.d.ts.map +1 -0
  499. package/dist/esm/motion/neon/typography.js +74 -0
  500. package/dist/esm/motion/neon/typography.js.map +1 -0
  501. package/dist/esm/motion/neon/wall.d.ts +62 -0
  502. package/dist/esm/motion/neon/wall.d.ts.map +1 -0
  503. package/dist/esm/motion/neon/wall.js +106 -0
  504. package/dist/esm/motion/neon/wall.js.map +1 -0
  505. package/dist/esm/motion/paperfold/PaperFold.d.ts +36 -0
  506. package/dist/esm/motion/paperfold/PaperFold.d.ts.map +1 -0
  507. package/dist/esm/motion/paperfold/PaperFold.js +37 -0
  508. package/dist/esm/motion/paperfold/PaperFold.js.map +1 -0
  509. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts +39 -0
  510. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts.map +1 -0
  511. package/dist/esm/motion/paperfold/PaperFoldFrame.js +283 -0
  512. package/dist/esm/motion/paperfold/PaperFoldFrame.js.map +1 -0
  513. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts +27 -0
  514. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts.map +1 -0
  515. package/dist/esm/motion/paperfold/PaperFoldPlayer.js +56 -0
  516. package/dist/esm/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  517. package/dist/esm/motion/paperfold/art.d.ts +148 -0
  518. package/dist/esm/motion/paperfold/art.d.ts.map +1 -0
  519. package/dist/esm/motion/paperfold/art.js +374 -0
  520. package/dist/esm/motion/paperfold/art.js.map +1 -0
  521. package/dist/esm/motion/paperfold/config.d.ts +47 -0
  522. package/dist/esm/motion/paperfold/config.d.ts.map +1 -0
  523. package/dist/esm/motion/paperfold/config.js +96 -0
  524. package/dist/esm/motion/paperfold/config.js.map +1 -0
  525. package/dist/esm/motion/paperfold/controls.d.ts +57 -0
  526. package/dist/esm/motion/paperfold/controls.d.ts.map +1 -0
  527. package/dist/esm/motion/paperfold/controls.js +506 -0
  528. package/dist/esm/motion/paperfold/controls.js.map +1 -0
  529. package/dist/esm/motion/paperfold/engine.d.ts +397 -0
  530. package/dist/esm/motion/paperfold/engine.d.ts.map +1 -0
  531. package/dist/esm/motion/paperfold/engine.js +699 -0
  532. package/dist/esm/motion/paperfold/engine.js.map +1 -0
  533. package/dist/esm/motion/paperfold/fonts.d.ts +3 -0
  534. package/dist/esm/motion/paperfold/fonts.d.ts.map +1 -0
  535. package/dist/esm/motion/paperfold/fonts.js +21 -0
  536. package/dist/esm/motion/paperfold/fonts.js.map +1 -0
  537. package/dist/esm/motion/paperfold/index.d.ts +17 -0
  538. package/dist/esm/motion/paperfold/index.d.ts.map +1 -0
  539. package/dist/esm/motion/paperfold/index.js +17 -0
  540. package/dist/esm/motion/paperfold/index.js.map +1 -0
  541. package/dist/esm/motion/paperfold/manipulate.d.ts +59 -0
  542. package/dist/esm/motion/paperfold/manipulate.d.ts.map +1 -0
  543. package/dist/esm/motion/paperfold/manipulate.js +161 -0
  544. package/dist/esm/motion/paperfold/manipulate.js.map +1 -0
  545. package/dist/esm/motion/paperfold/presets.d.ts +9 -0
  546. package/dist/esm/motion/paperfold/presets.d.ts.map +1 -0
  547. package/dist/esm/motion/paperfold/presets.js +115 -0
  548. package/dist/esm/motion/paperfold/presets.js.map +1 -0
  549. package/dist/esm/motion/paperfold/template.d.ts +3 -0
  550. package/dist/esm/motion/paperfold/template.d.ts.map +1 -0
  551. package/dist/esm/motion/paperfold/template.js +37 -0
  552. package/dist/esm/motion/paperfold/template.js.map +1 -0
  553. package/dist/esm/motion/player.d.ts +35 -0
  554. package/dist/esm/motion/player.d.ts.map +1 -0
  555. package/dist/esm/motion/player.js +197 -0
  556. package/dist/esm/motion/player.js.map +1 -0
  557. package/dist/esm/motion/promo/PromoFrame.d.ts +31 -0
  558. package/dist/esm/motion/promo/PromoFrame.d.ts.map +1 -0
  559. package/dist/esm/motion/promo/PromoFrame.js +288 -0
  560. package/dist/esm/motion/promo/PromoFrame.js.map +1 -0
  561. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts +25 -0
  562. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts.map +1 -0
  563. package/dist/esm/motion/promo/PromoShowcasePlayer.js +56 -0
  564. package/dist/esm/motion/promo/PromoShowcasePlayer.js.map +1 -0
  565. package/dist/esm/motion/promo/config.d.ts +91 -0
  566. package/dist/esm/motion/promo/config.d.ts.map +1 -0
  567. package/dist/esm/motion/promo/config.js +550 -0
  568. package/dist/esm/motion/promo/config.js.map +1 -0
  569. package/dist/esm/motion/promo/controls.d.ts +86 -0
  570. package/dist/esm/motion/promo/controls.d.ts.map +1 -0
  571. package/dist/esm/motion/promo/controls.js +567 -0
  572. package/dist/esm/motion/promo/controls.js.map +1 -0
  573. package/dist/esm/motion/promo/easing.d.ts +3 -0
  574. package/dist/esm/motion/promo/easing.d.ts.map +1 -0
  575. package/dist/esm/motion/promo/easing.js +32 -0
  576. package/dist/esm/motion/promo/easing.js.map +1 -0
  577. package/dist/esm/motion/promo/engine.d.ts +205 -0
  578. package/dist/esm/motion/promo/engine.d.ts.map +1 -0
  579. package/dist/esm/motion/promo/engine.js +551 -0
  580. package/dist/esm/motion/promo/engine.js.map +1 -0
  581. package/dist/esm/motion/promo/fonts.d.ts +7 -0
  582. package/dist/esm/motion/promo/fonts.d.ts.map +1 -0
  583. package/dist/esm/motion/promo/fonts.js +16 -0
  584. package/dist/esm/motion/promo/fonts.js.map +1 -0
  585. package/dist/esm/motion/promo/icons.d.ts +7 -0
  586. package/dist/esm/motion/promo/icons.d.ts.map +1 -0
  587. package/dist/esm/motion/promo/icons.js +26 -0
  588. package/dist/esm/motion/promo/icons.js.map +1 -0
  589. package/dist/esm/motion/promo/index.d.ts +15 -0
  590. package/dist/esm/motion/promo/index.d.ts.map +1 -0
  591. package/dist/esm/motion/promo/index.js +15 -0
  592. package/dist/esm/motion/promo/index.js.map +1 -0
  593. package/dist/esm/motion/promo/presets.d.ts +13 -0
  594. package/dist/esm/motion/promo/presets.d.ts.map +1 -0
  595. package/dist/esm/motion/promo/presets.js +40 -0
  596. package/dist/esm/motion/promo/presets.js.map +1 -0
  597. package/dist/esm/motion/promo/template.d.ts +8 -0
  598. package/dist/esm/motion/promo/template.d.ts.map +1 -0
  599. package/dist/esm/motion/promo/template.js +35 -0
  600. package/dist/esm/motion/promo/template.js.map +1 -0
  601. package/dist/esm/motion/replication2/Replication2Player.d.ts +26 -0
  602. package/dist/esm/motion/replication2/Replication2Player.d.ts.map +1 -0
  603. package/dist/esm/motion/replication2/Replication2Player.js +90 -0
  604. package/dist/esm/motion/replication2/Replication2Player.js.map +1 -0
  605. package/dist/esm/motion/replication2/config.d.ts +78 -0
  606. package/dist/esm/motion/replication2/config.d.ts.map +1 -0
  607. package/dist/esm/motion/replication2/config.js +341 -0
  608. package/dist/esm/motion/replication2/config.js.map +1 -0
  609. package/dist/esm/motion/replication2/controls.d.ts +70 -0
  610. package/dist/esm/motion/replication2/controls.d.ts.map +1 -0
  611. package/dist/esm/motion/replication2/controls.js +283 -0
  612. package/dist/esm/motion/replication2/controls.js.map +1 -0
  613. package/dist/esm/motion/replication2/driver.d.ts +23 -0
  614. package/dist/esm/motion/replication2/driver.d.ts.map +1 -0
  615. package/dist/esm/motion/replication2/driver.js +65 -0
  616. package/dist/esm/motion/replication2/driver.js.map +1 -0
  617. package/dist/esm/motion/replication2/easing.d.ts +19 -0
  618. package/dist/esm/motion/replication2/easing.d.ts.map +1 -0
  619. package/dist/esm/motion/replication2/easing.js +92 -0
  620. package/dist/esm/motion/replication2/easing.js.map +1 -0
  621. package/dist/esm/motion/replication2/engine.d.ts +236 -0
  622. package/dist/esm/motion/replication2/engine.d.ts.map +1 -0
  623. package/dist/esm/motion/replication2/engine.js +470 -0
  624. package/dist/esm/motion/replication2/engine.js.map +1 -0
  625. package/dist/esm/motion/replication2/html.d.ts +30 -0
  626. package/dist/esm/motion/replication2/html.d.ts.map +1 -0
  627. package/dist/esm/motion/replication2/html.js +83 -0
  628. package/dist/esm/motion/replication2/html.js.map +1 -0
  629. package/dist/esm/motion/replication2/index.d.ts +15 -0
  630. package/dist/esm/motion/replication2/index.d.ts.map +1 -0
  631. package/dist/esm/motion/replication2/index.js +15 -0
  632. package/dist/esm/motion/replication2/index.js.map +1 -0
  633. package/dist/esm/motion/replication2/measure.d.ts +3 -0
  634. package/dist/esm/motion/replication2/measure.d.ts.map +1 -0
  635. package/dist/esm/motion/replication2/measure.js +27 -0
  636. package/dist/esm/motion/replication2/measure.js.map +1 -0
  637. package/dist/esm/motion/replication2/metrics.d.ts +6 -0
  638. package/dist/esm/motion/replication2/metrics.d.ts.map +1 -0
  639. package/dist/esm/motion/replication2/metrics.js +7 -0
  640. package/dist/esm/motion/replication2/metrics.js.map +1 -0
  641. package/dist/esm/motion/replication2/presets.d.ts +13 -0
  642. package/dist/esm/motion/replication2/presets.d.ts.map +1 -0
  643. package/dist/esm/motion/replication2/presets.js +63 -0
  644. package/dist/esm/motion/replication2/presets.js.map +1 -0
  645. package/dist/esm/motion/replication2/riv.d.ts +3 -0
  646. package/dist/esm/motion/replication2/riv.d.ts.map +1 -0
  647. package/dist/esm/motion/replication2/riv.js +4 -0
  648. package/dist/esm/motion/replication2/riv.js.map +1 -0
  649. package/dist/esm/motion/replication2/rive-contract.d.ts +27 -0
  650. package/dist/esm/motion/replication2/rive-contract.d.ts.map +1 -0
  651. package/dist/esm/motion/replication2/rive-contract.js +153 -0
  652. package/dist/esm/motion/replication2/rive-contract.js.map +1 -0
  653. package/dist/esm/motion/replication2/template.d.ts +8 -0
  654. package/dist/esm/motion/replication2/template.d.ts.map +1 -0
  655. package/dist/esm/motion/replication2/template.js +32 -0
  656. package/dist/esm/motion/replication2/template.js.map +1 -0
  657. package/dist/esm/motion/sample.d.ts +61 -0
  658. package/dist/esm/motion/sample.d.ts.map +1 -0
  659. package/dist/esm/motion/sample.js +138 -0
  660. package/dist/esm/motion/sample.js.map +1 -0
  661. package/dist/esm/motion/templates/hey-template.d.ts +3 -0
  662. package/dist/esm/motion/templates/hey-template.d.ts.map +1 -0
  663. package/dist/esm/motion/templates/hey-template.js +1549 -0
  664. package/dist/esm/motion/templates/hey-template.js.map +1 -0
  665. package/dist/esm/motion/templates/index.d.ts +22 -0
  666. package/dist/esm/motion/templates/index.d.ts.map +1 -0
  667. package/dist/esm/motion/templates/index.js +15 -0
  668. package/dist/esm/motion/templates/index.js.map +1 -0
  669. package/dist/esm/motion/templates/word-motion.d.ts +3 -0
  670. package/dist/esm/motion/templates/word-motion.d.ts.map +1 -0
  671. package/dist/esm/motion/templates/word-motion.js +1162 -0
  672. package/dist/esm/motion/templates/word-motion.js.map +1 -0
  673. package/dist/esm/motion/types.d.ts +192 -0
  674. package/dist/esm/motion/types.d.ts.map +1 -0
  675. package/dist/esm/motion/types.js +2 -0
  676. package/dist/esm/motion/types.js.map +1 -0
  677. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts +22 -0
  678. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts.map +1 -0
  679. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js +58 -0
  680. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  681. package/dist/esm/motion/typesurface/art.d.ts +21 -0
  682. package/dist/esm/motion/typesurface/art.d.ts.map +1 -0
  683. package/dist/esm/motion/typesurface/art.js +854 -0
  684. package/dist/esm/motion/typesurface/art.js.map +1 -0
  685. package/dist/esm/motion/typesurface/config.d.ts +273 -0
  686. package/dist/esm/motion/typesurface/config.d.ts.map +1 -0
  687. package/dist/esm/motion/typesurface/config.js +260 -0
  688. package/dist/esm/motion/typesurface/config.js.map +1 -0
  689. package/dist/esm/motion/typesurface/engine.d.ts +94 -0
  690. package/dist/esm/motion/typesurface/engine.d.ts.map +1 -0
  691. package/dist/esm/motion/typesurface/engine.js +603 -0
  692. package/dist/esm/motion/typesurface/engine.js.map +1 -0
  693. package/dist/esm/motion/typesurface/fonts.d.ts +25 -0
  694. package/dist/esm/motion/typesurface/fonts.d.ts.map +1 -0
  695. package/dist/esm/motion/typesurface/fonts.js +40 -0
  696. package/dist/esm/motion/typesurface/fonts.js.map +1 -0
  697. package/dist/esm/motion/typesurface/index.d.ts +17 -0
  698. package/dist/esm/motion/typesurface/index.d.ts.map +1 -0
  699. package/dist/esm/motion/typesurface/index.js +17 -0
  700. package/dist/esm/motion/typesurface/index.js.map +1 -0
  701. package/dist/esm/motion/typesurface/layout.d.ts +57 -0
  702. package/dist/esm/motion/typesurface/layout.d.ts.map +1 -0
  703. package/dist/esm/motion/typesurface/layout.js +122 -0
  704. package/dist/esm/motion/typesurface/layout.js.map +1 -0
  705. package/dist/esm/motion/typesurface/ops.d.ts +70 -0
  706. package/dist/esm/motion/typesurface/ops.d.ts.map +1 -0
  707. package/dist/esm/motion/typesurface/ops.js +164 -0
  708. package/dist/esm/motion/typesurface/ops.js.map +1 -0
  709. package/dist/esm/motion/typesurface/presets.d.ts +33 -0
  710. package/dist/esm/motion/typesurface/presets.d.ts.map +1 -0
  711. package/dist/esm/motion/typesurface/presets.js +185 -0
  712. package/dist/esm/motion/typesurface/presets.js.map +1 -0
  713. package/dist/esm/motion/typesurface/renderer.d.ts +78 -0
  714. package/dist/esm/motion/typesurface/renderer.d.ts.map +1 -0
  715. package/dist/esm/motion/typesurface/renderer.js +666 -0
  716. package/dist/esm/motion/typesurface/renderer.js.map +1 -0
  717. package/dist/esm/motion/typesurface/shaders.d.ts +17 -0
  718. package/dist/esm/motion/typesurface/shaders.d.ts.map +1 -0
  719. package/dist/esm/motion/typesurface/shaders.js +297 -0
  720. package/dist/esm/motion/typesurface/shaders.js.map +1 -0
  721. package/dist/esm/motion/typesurface/surfaces.d.ts +81 -0
  722. package/dist/esm/motion/typesurface/surfaces.d.ts.map +1 -0
  723. package/dist/esm/motion/typesurface/surfaces.js +149 -0
  724. package/dist/esm/motion/typesurface/surfaces.js.map +1 -0
  725. package/dist/esm/motion/typesurface/text.d.ts +17 -0
  726. package/dist/esm/motion/typesurface/text.d.ts.map +1 -0
  727. package/dist/esm/motion/typesurface/text.js +28 -0
  728. package/dist/esm/motion/typesurface/text.js.map +1 -0
  729. package/dist/esm/motion/typesurface/timeline.d.ts +15 -0
  730. package/dist/esm/motion/typesurface/timeline.d.ts.map +1 -0
  731. package/dist/esm/motion/typesurface/timeline.js +57 -0
  732. package/dist/esm/motion/typesurface/timeline.js.map +1 -0
  733. package/dist/esm/motion/validate.d.ts +22 -0
  734. package/dist/esm/motion/validate.d.ts.map +1 -0
  735. package/dist/esm/motion/validate.js +84 -0
  736. package/dist/esm/motion/validate.js.map +1 -0
  737. package/dist/esm/native/RiveReceiptStage.d.ts +25 -2
  738. package/dist/esm/native/RiveReceiptStage.d.ts.map +1 -1
  739. package/dist/esm/native/RiveReceiptStage.js +7 -148
  740. package/dist/esm/native/RiveReceiptStage.js.map +1 -1
  741. package/dist/esm/native/riveReceiptStageFactory.d.ts +26 -0
  742. package/dist/esm/native/riveReceiptStageFactory.d.ts.map +1 -0
  743. package/dist/esm/native/riveReceiptStageFactory.js +159 -0
  744. package/dist/esm/native/riveReceiptStageFactory.js.map +1 -0
  745. package/dist/esm/tokens/stage.d.ts +7 -0
  746. package/dist/esm/tokens/stage.d.ts.map +1 -0
  747. package/dist/esm/tokens/stage.js +7 -0
  748. package/dist/esm/tokens/stage.js.map +1 -0
  749. package/package.json +35 -1
  750. package/spec/examples/components/onboarding/animated-status/case1.json +42 -0
  751. package/spec/examples/components/onboarding/animated-status/case2.json +42 -0
  752. package/spec/examples/components/onboarding/animated-status/case3.json +42 -0
  753. package/spec/examples/components/onboarding/animated-status/case4.json +42 -0
  754. package/spec/examples/components/onboarding/animated-status/case5.json +42 -0
  755. package/spec/examples/components/onboarding/send-completion/case1.json +48 -0
  756. package/spec/examples/components/onboarding/send-completion/case2.json +48 -0
  757. package/spec/examples/components/onboarding/send-completion/case3.json +48 -0
  758. package/spec/examples/components/onboarding/send-completion/case4.json +48 -0
  759. package/spec/examples/components/onboarding/send-completion/case5.json +48 -0
  760. package/spec/families/onboarding.schema.json +610 -1
  761. package/src/agent/AgentComponent.tsx +1 -1
  762. package/src/agent/manifests.ts +83 -1
  763. package/src/agent/result.ts +6 -0
  764. package/src/agent/types.ts +1 -1
  765. package/src/components/catalog.ts +21 -1
  766. package/src/components/onboarding/animated-status/AnimatedStage.tsx +18 -0
  767. package/src/components/onboarding/animated-status/AnimatedStage.types.ts +30 -0
  768. package/src/components/onboarding/animated-status/AnimatedStage.web.tsx +99 -0
  769. package/src/components/onboarding/animated-status/AnimatedStatusView.tsx +109 -0
  770. package/src/components/onboarding/animated-status/AnimatedStill.tsx +23 -0
  771. package/src/components/onboarding/animated-status/contract.ts +105 -0
  772. package/src/components/onboarding/animated-status/engine.ts +49 -0
  773. package/src/components/onboarding/animated-status/index.ts +8 -0
  774. package/src/components/onboarding/animated-status/presets.json +126 -0
  775. package/src/components/onboarding/animated-status/riv.ts +4 -0
  776. package/src/components/onboarding/index.ts +4 -0
  777. package/src/components/onboarding/presets.ts +6 -0
  778. package/src/components/onboarding/receipt-printer/ReceiptStage.tsx +46 -7
  779. package/src/components/onboarding/send-completion/SendCompletionView.tsx +164 -0
  780. package/src/components/onboarding/send-completion/SendStage.tsx +27 -0
  781. package/src/components/onboarding/send-completion/SendStage.types.ts +32 -0
  782. package/src/components/onboarding/send-completion/SendStage.web.tsx +116 -0
  783. package/src/components/onboarding/send-completion/SendStill.tsx +19 -0
  784. package/src/components/onboarding/send-completion/contract.ts +127 -0
  785. package/src/components/onboarding/send-completion/engine.ts +37 -0
  786. package/src/components/onboarding/send-completion/index.ts +10 -0
  787. package/src/components/onboarding/send-completion/presets.json +132 -0
  788. package/src/components/onboarding/send-completion/riv.ts +4 -0
  789. package/src/components/onboarding/shared/actions-data.ts +2 -0
  790. package/src/components/onboarding/shared/configColor.ts +72 -0
  791. package/src/components/onboarding/shared/contract.ts +4 -0
  792. package/src/components/onboarding/shared/describe.ts +1 -1
  793. package/src/components/onboarding/shared/mock.ts +2 -0
  794. package/src/components/onboarding/views.ts +8 -0
  795. package/src/motion/MotionPlayer.tsx +62 -0
  796. package/src/motion/agent.ts +288 -0
  797. package/src/motion/cat/Cat.tsx +118 -0
  798. package/src/motion/cat/animation.ts +206 -0
  799. package/src/motion/cat/art.generated.ts +44 -0
  800. package/src/motion/cat/config.ts +186 -0
  801. package/src/motion/cat/index.ts +26 -0
  802. package/src/motion/cat/rig.ts +102 -0
  803. package/src/motion/cat/scene.ts +181 -0
  804. package/src/motion/configurable/config.ts +420 -0
  805. package/src/motion/configurable/controls.ts +93 -0
  806. package/src/motion/easing.ts +55 -0
  807. package/src/motion/fit.ts +8 -0
  808. package/src/motion/index.ts +29 -0
  809. package/src/motion/neon/GlowRenderer.tsx +83 -0
  810. package/src/motion/neon/NeonCanvas.tsx +175 -0
  811. package/src/motion/neon/NeonText.tsx +113 -0
  812. package/src/motion/neon/NeonTextFrame.tsx +67 -0
  813. package/src/motion/neon/artwork.ts +95 -0
  814. package/src/motion/neon/audio.ts +162 -0
  815. package/src/motion/neon/config.ts +484 -0
  816. package/src/motion/neon/flicker.ts +225 -0
  817. package/src/motion/neon/fonts.ts +76 -0
  818. package/src/motion/neon/frame.ts +34 -0
  819. package/src/motion/neon/glitch.ts +142 -0
  820. package/src/motion/neon/index.ts +41 -0
  821. package/src/motion/neon/layers.tsx +209 -0
  822. package/src/motion/neon/material.ts +88 -0
  823. package/src/motion/neon/random.ts +40 -0
  824. package/src/motion/neon/scene.ts +610 -0
  825. package/src/motion/neon/synth.ts +188 -0
  826. package/src/motion/neon/typography.ts +102 -0
  827. package/src/motion/neon/wall.ts +157 -0
  828. package/src/motion/paperfold/PaperFold.tsx +45 -0
  829. package/src/motion/paperfold/PaperFoldFrame.tsx +576 -0
  830. package/src/motion/paperfold/PaperFoldPlayer.tsx +80 -0
  831. package/src/motion/paperfold/art.ts +455 -0
  832. package/src/motion/paperfold/config.ts +98 -0
  833. package/src/motion/paperfold/controls.ts +557 -0
  834. package/src/motion/paperfold/engine.ts +852 -0
  835. package/src/motion/paperfold/fonts.ts +21 -0
  836. package/src/motion/paperfold/index.ts +30 -0
  837. package/src/motion/paperfold/manipulate.ts +188 -0
  838. package/src/motion/paperfold/presets.ts +117 -0
  839. package/src/motion/paperfold/template.ts +38 -0
  840. package/src/motion/player.ts +207 -0
  841. package/src/motion/promo/PromoFrame.tsx +501 -0
  842. package/src/motion/promo/PromoShowcasePlayer.tsx +78 -0
  843. package/src/motion/promo/config.ts +479 -0
  844. package/src/motion/promo/controls.ts +643 -0
  845. package/src/motion/promo/easing.ts +36 -0
  846. package/src/motion/promo/engine.ts +587 -0
  847. package/src/motion/promo/fonts.ts +16 -0
  848. package/src/motion/promo/icons.tsx +29 -0
  849. package/src/motion/promo/index.ts +24 -0
  850. package/src/motion/promo/presets.ts +40 -0
  851. package/src/motion/promo/template.ts +36 -0
  852. package/src/motion/replication2/Replication2Player.tsx +115 -0
  853. package/src/motion/replication2/config.ts +323 -0
  854. package/src/motion/replication2/controls.ts +336 -0
  855. package/src/motion/replication2/driver.ts +92 -0
  856. package/src/motion/replication2/easing.ts +88 -0
  857. package/src/motion/replication2/engine.ts +539 -0
  858. package/src/motion/replication2/html.ts +87 -0
  859. package/src/motion/replication2/index.ts +14 -0
  860. package/src/motion/replication2/measure.ts +28 -0
  861. package/src/motion/replication2/metrics.ts +7 -0
  862. package/src/motion/replication2/presets.ts +63 -0
  863. package/src/motion/replication2/riv.ts +4 -0
  864. package/src/motion/replication2/rive-contract.ts +165 -0
  865. package/src/motion/replication2/template.ts +33 -0
  866. package/src/motion/sample.ts +173 -0
  867. package/src/motion/templates/hey-template.ts +1553 -0
  868. package/src/motion/templates/index.ts +17 -0
  869. package/src/motion/templates/word-motion.ts +1166 -0
  870. package/src/motion/types.ts +162 -0
  871. package/src/motion/typesurface/TypeSurfaceCanvas.tsx +73 -0
  872. package/src/motion/typesurface/art.ts +639 -0
  873. package/src/motion/typesurface/config.ts +486 -0
  874. package/src/motion/typesurface/engine.ts +586 -0
  875. package/src/motion/typesurface/fonts.ts +63 -0
  876. package/src/motion/typesurface/index.ts +16 -0
  877. package/src/motion/typesurface/layout.ts +133 -0
  878. package/src/motion/typesurface/ops.ts +196 -0
  879. package/src/motion/typesurface/presets.ts +199 -0
  880. package/src/motion/typesurface/renderer.ts +579 -0
  881. package/src/motion/typesurface/shaders.ts +303 -0
  882. package/src/motion/typesurface/surfaces.ts +223 -0
  883. package/src/motion/typesurface/text.ts +35 -0
  884. package/src/motion/typesurface/timeline.ts +58 -0
  885. package/src/motion/validate.ts +101 -0
  886. package/src/native/RiveReceiptStage.tsx +8 -155
  887. package/src/native/riveReceiptStageFactory.tsx +175 -0
  888. package/src/tokens/stage.ts +6 -0
  889. package/tools/ask/dist/components.mjs +6887 -46
  890. package/tools/ask/mcp.mjs +80 -1
@@ -0,0 +1,486 @@
1
+ /* eslint-disable comppack/no-raw-colour -- type, ink and surface colours are experiment content, not theme colours. */
2
+ /**
3
+ * **The typography × surface experiment, as one JSON object.** Six concerns that never reach into
4
+ * each other:
5
+ *
6
+ * text what it says ("BREAKING NEWS", "SUMMER\nSALE", anything)
7
+ * typography how the letters look: font, weight, size, spacing, colour, gradient, blend mode
8
+ * placement where the text sits ON the surface (surface coordinates, 0–1), its angle and width
9
+ * surface which physical thing it meets (newspaper, bottle, wrapper…) and in which state
10
+ * deformation how far each transformation has gone: wrap, morph, fold, roll, crumple…
11
+ * material how the letters become part of the surface: ink, print, foil, emboss
12
+ * view the camera: perspective comes from here, not from the text
13
+ * animation stages over a 0–1 timeline; each stage drives one deformation amount
14
+ *
15
+ * So BREAKING NEWS → SUMMER SALE changes `text` only, and newspaper → bottle changes `surface`
16
+ * only: the text is never flattened into the artwork. Units: `fontSize`, `letterSpacing` and
17
+ * `maxWidth` are **surface units**. Every surface is 1000 units wide, so 96 is 9.6 % of its width.
18
+ * Angles are degrees, times are ms. `docs/TYPE-SURFACE.md`.
19
+ */
20
+ import type { Easing } from '../types';
21
+ import { hasSurface } from './surfaces';
22
+
23
+ export const TS_SURFACES = ['newspaper', 'paper', 'bottle', 'wrapper', 'fabric'] as const;
24
+ export type TSSurfaceType = (typeof TS_SURFACES)[number];
25
+ export const TS_TEXT_MATERIALS = ['ink', 'print', 'foil', 'emboss'] as const;
26
+ /**
27
+ * How the letters join the surface once they land.
28
+ * - `ink`: absorbed into paper (multiplied into it, grain shows through, halftone when embedded).
29
+ * - `print`: a printed film on a label or film: opaque, slightly glossier than what's under it.
30
+ * - `foil`: metallic ink; reflects the room in the text colour.
31
+ * - `emboss`: pressed into the material; mostly relief, a little colour.
32
+ */
33
+ export type TSTextMaterial = (typeof TS_TEXT_MATERIALS)[number];
34
+ export const TS_BLEND_MODES = ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-burn', 'soft-light'] as const;
35
+ export type TSBlendMode = (typeof TS_BLEND_MODES)[number];
36
+ export const TS_ALIGNS = ['left', 'center', 'right'] as const;
37
+ export type TSAlign = (typeof TS_ALIGNS)[number];
38
+ export const TS_FOLD_ORIENTATIONS = ['vertical', 'horizontal'] as const;
39
+ export const TS_FOLD_DIRECTIONS = ['over', 'under'] as const;
40
+ export const TS_ROLL_EDGES = ['bottom', 'top', 'left', 'right'] as const;
41
+ export const TS_FOLD_SIDES = ['far', 'near'] as const;
42
+ /** The folds and the wraps, in the order they are applied. Up to four of each. */
43
+ export const TS_FOLD_KEYS = ['fold', 'fold2', 'fold3', 'fold4'] as const;
44
+ export const TS_WRAP_KEYS = ['wrap1', 'wrap2', 'wrap3', 'wrap4'] as const;
45
+
46
+ export type TSTypography = {
47
+ /** Any CSS font-family list. The page must load the font; nothing is converted to outlines. */
48
+ fontFamily: string;
49
+ fontWeight: number;
50
+ fontStyle: 'normal' | 'italic';
51
+ /** Surface units (the surface is 1000 wide). */
52
+ fontSize: number;
53
+ /** Extra space between letters, surface units. */
54
+ letterSpacing: number;
55
+ /** Line pitch as a multiple of fontSize. */
56
+ lineHeight: number;
57
+ align: TSAlign;
58
+ color: string;
59
+ gradient: { enabled: boolean; from: string; to: string; angle: number };
60
+ opacity: number;
61
+ blendMode: TSBlendMode;
62
+ };
63
+
64
+ export type TSPlacement = {
65
+ /** Centre of the text block on the surface, 0–1 from the left edge. */
66
+ x: number;
67
+ /** Centre of the text block on the surface, 0–1 from the top edge. */
68
+ y: number;
69
+ /** Degrees, clockwise on the surface. */
70
+ rotation: number;
71
+ /** Lines wrap past this width (surface units). 0 = never wrap. */
72
+ maxWidth: number;
73
+ };
74
+
75
+ export type TSSurface = {
76
+ type: TSSurfaceType;
77
+ /** A named state from `SURFACE_STATES[type]`; applying it sets `deformation`. Informational after. */
78
+ state: string;
79
+ /** Seeds every random choice: creases, wrinkles, the newspaper's copy and photos. */
80
+ seed: number;
81
+ /** The surface's own colour where it has one (wrapper film, fabric, bottle glass). null → its default. */
82
+ color: string | null;
83
+ };
84
+
85
+ export type TSFold = {
86
+ /** 0–1: how far the fold has gone. The angle reached is `angle × amount`. */
87
+ amount: number;
88
+ /** Where the crease runs, 0–1 across the surface. */
89
+ position: number;
90
+ /** The angle at full amount, degrees (180 = folded flat). */
91
+ angle: number;
92
+ /** Width of the rounded crease, as a share of the surface width. */
93
+ width: number;
94
+ /** How strongly the crease shades paper and letters (0 = no crease light). */
95
+ influence: number;
96
+ orientation: (typeof TS_FOLD_ORIENTATIONS)[number];
97
+ /** `over`: the moving side lifts toward the camera. `under`: it tucks beneath. */
98
+ direction: (typeof TS_FOLD_DIRECTIONS)[number];
99
+ /** Which side moves: `far` = right of a vertical crease / below a horizontal one; `near` = left / above. */
100
+ side: (typeof TS_FOLD_SIDES)[number];
101
+ };
102
+
103
+ /**
104
+ * A wrap: from a line, the sheet wraps round a rod of `radius` (share of the width). `amount`
105
+ * wraps `angle × amount` of the way round; the rest carries on, tangent. 360° goes all the way.
106
+ */
107
+ export type TSWrap = {
108
+ amount: number;
109
+ position: number;
110
+ radius: number;
111
+ angle: number;
112
+ orientation: (typeof TS_FOLD_ORIENTATIONS)[number];
113
+ direction: (typeof TS_FOLD_DIRECTIONS)[number];
114
+ side: (typeof TS_FOLD_SIDES)[number];
115
+ };
116
+
117
+ export type TSDeformation = {
118
+ /** 0–1: floating typography (0) → conformed to the surface (1). */
119
+ wrap: number;
120
+ /** 0–1: letters peel off and land one by one, spreading apart mid-way. */
121
+ morph: number;
122
+ /** 0–1: camera from straight above (flat) to a low, wide-angle view. */
123
+ perspective: number;
124
+ /** −1–1: turns the object left/right (horizontal distortion). */
125
+ tiltX: number;
126
+ /** −1–1: tips the object toward/away from the camera (vertical distortion). */
127
+ tiltY: number;
128
+ /** −1–1: shears the surface in its own plane. */
129
+ skew: number;
130
+ /** 0–1: cylindrical curvature (a bottle label, a curved plate, a pillow pack's inflation). */
131
+ curve: number;
132
+ fold: TSFold;
133
+ /** A second crease, perpendicular to the first by default: double folded. */
134
+ fold2: TSFold;
135
+ fold3: TSFold;
136
+ fold4: TSFold;
137
+ wrap1: TSWrap;
138
+ wrap2: TSWrap;
139
+ wrap3: TSWrap;
140
+ wrap4: TSWrap;
141
+ roll: { amount: number; edge: (typeof TS_ROLL_EDGES)[number]; radius: number; direction: 'over' | 'under' };
142
+ crumple: { amount: number; scale: number };
143
+ /** 0–1: soft waves (fabric drape, a rippled pane). */
144
+ wave: number;
145
+ /** 0–1: fine wrinkles (a wrapper's film, creased cloth). */
146
+ wrinkle: number;
147
+ };
148
+
149
+ export type TSMaterial = {
150
+ type: TSTextMaterial;
151
+ /** 0–1: floating graphic → lit by the surface → printed → embedded ink. */
152
+ blend: number;
153
+ /** How dark and saturated the ink prints. */
154
+ inkStrength: number;
155
+ /** Ink bleeding into the fibres (dilates the letters a little). */
156
+ inkSpread: number;
157
+ /** Ragged, uneven ink edges. */
158
+ inkRoughness: number;
159
+ /** How much of the surface's own colour the letters take on (multiply). */
160
+ paperInfluence: number;
161
+ /** How much of the paper grain breaks up the ink. */
162
+ grainInfluence: number;
163
+ /** 0–1: embedded ink becomes a printing screen (newsprint dots). */
164
+ halftone: number;
165
+ /** Small ink misregistration, surface units. */
166
+ displacement: number;
167
+ /** How much the surface's light and shadow fall on the letters. */
168
+ surfaceContrast: number;
169
+ /** How high floating letters hover, as a share of the surface width. */
170
+ lift: number;
171
+ /** Strength of the shadow the letters cast while they float. */
172
+ shadow: number;
173
+ /** Varnish: specular shine of the letters. */
174
+ gloss: number;
175
+ /** Relief depth for `emboss` (and a little for every material once embedded). */
176
+ emboss: number;
177
+ };
178
+
179
+ export type TSView = {
180
+ /** Degrees added to the camera's orbit, left/right. */
181
+ yaw: number;
182
+ /** Degrees added to the camera's tilt. */
183
+ pitch: number;
184
+ /** 1 = the object fills the frame. */
185
+ zoom: number;
186
+ /** Degrees: turns the object on the table (the bottle lies diagonally). */
187
+ roll: number;
188
+ /** Keep the object centred as it folds and rolls. */
189
+ autoCenter: boolean;
190
+ /** Time-driven motion (fabric in a breeze, a bottle turning). */
191
+ motion: number;
192
+ };
193
+
194
+ export const TS_ANIMATABLE = ['wrap', 'morph', 'perspective', 'curve', 'fold', 'fold2', 'fold3', 'fold4', 'wrap1', 'wrap2', 'wrap3', 'wrap4', 'roll', 'crumple', 'wave', 'wrinkle', 'blend'] as const;
195
+ /** A transformation amount a timeline stage can drive. */
196
+ export type TSAnimatable = (typeof TS_ANIMATABLE)[number];
197
+ /** Where each animatable amount lives in the config. */
198
+ export const TS_ANIMATABLE_PATHS: Record<TSAnimatable, string> = {
199
+ wrap: 'deformation.wrap', morph: 'deformation.morph', perspective: 'deformation.perspective', curve: 'deformation.curve',
200
+ fold: 'deformation.fold.amount', fold2: 'deformation.fold2.amount', fold3: 'deformation.fold3.amount', fold4: 'deformation.fold4.amount',
201
+ wrap1: 'deformation.wrap1.amount', wrap2: 'deformation.wrap2.amount', wrap3: 'deformation.wrap3.amount', wrap4: 'deformation.wrap4.amount', roll: 'deformation.roll.amount',
202
+ crumple: 'deformation.crumple.amount', wave: 'deformation.wave', wrinkle: 'deformation.wrinkle', blend: 'material.blend',
203
+ };
204
+
205
+ /**
206
+ * One stage of the timeline. Between `start` and `end` (0–1 of the timeline) its amount rises from
207
+ * 0 to the value in the config; with `outStart`/`outEnd` it falls back to 0 (a fold that unfolds).
208
+ * Sliders set how FAR a transformation goes; stages set WHEN.
209
+ */
210
+ export type TSStage = { key: TSAnimatable; start: number; end: number; outStart?: number; outEnd?: number; easing?: Easing; label?: string };
211
+
212
+ export type TSAnimation = {
213
+ /** One pass of the timeline, ms. */
214
+ duration: number;
215
+ loop: boolean;
216
+ stages: TSStage[];
217
+ };
218
+
219
+ export type TypeSurfaceConfig = {
220
+ version: 1;
221
+ text: string;
222
+ typography: TSTypography;
223
+ placement: TSPlacement;
224
+ surface: TSSurface;
225
+ deformation: TSDeformation;
226
+ material: TSMaterial;
227
+ view: TSView;
228
+ animation: TSAnimation;
229
+ };
230
+
231
+ type DeepPartial<T> = T extends (infer U)[] ? U[] : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;
232
+ export type TypeSurfaceConfigInput = DeepPartial<TypeSurfaceConfig>;
233
+
234
+ const FOLD_OFF: TSFold = { amount: 0, position: 0.5, angle: 180, width: 0.035, influence: 0.7, orientation: 'vertical', direction: 'over', side: 'far' };
235
+ const WRAP_OFF: TSWrap = { amount: 0, position: 0.7, radius: 0.06, angle: 300, orientation: 'vertical', direction: 'under', side: 'far' };
236
+
237
+ /** Every transformation at rest: flat, floating, un-inked. States and presets start here. */
238
+ export const REST_DEFORMATION: TSDeformation = {
239
+ wrap: 0, morph: 0, perspective: 0, tiltX: 0, tiltY: 0, skew: 0, curve: 0,
240
+ fold: FOLD_OFF,
241
+ fold2: { ...FOLD_OFF, orientation: 'horizontal' },
242
+ fold3: { ...FOLD_OFF, position: 0.25 },
243
+ fold4: { ...FOLD_OFF, position: 0.25, orientation: 'horizontal' },
244
+ wrap1: WRAP_OFF,
245
+ wrap2: { ...WRAP_OFF, side: 'near', position: 0.3 },
246
+ wrap3: { ...WRAP_OFF, orientation: 'horizontal' },
247
+ wrap4: { ...WRAP_OFF, orientation: 'horizontal', side: 'near', position: 0.3 },
248
+ roll: { amount: 0, edge: 'bottom', radius: 0.085, direction: 'under' },
249
+ crumple: { amount: 0, scale: 1 },
250
+ wave: 0, wrinkle: 0,
251
+ };
252
+
253
+ export const DEFAULT_TYPE_SURFACE: TypeSurfaceConfig = {
254
+ version: 1,
255
+ text: 'BREAKING NEWS',
256
+ typography: {
257
+ fontFamily: "'Anton', 'Impact', sans-serif", fontWeight: 400, fontStyle: 'normal', fontSize: 128, letterSpacing: 2, lineHeight: 1,
258
+ align: 'center', color: '#E0271B', gradient: { enabled: false, from: '#E0271B', to: '#7A0C06', angle: 90 }, opacity: 1, blendMode: 'multiply',
259
+ },
260
+ placement: { x: 0.5, y: 0.34, rotation: 0, maxWidth: 900 },
261
+ surface: { type: 'newspaper', state: 'flat', seed: 7, color: null },
262
+ deformation: { ...REST_DEFORMATION, wrap: 1 },
263
+ material: {
264
+ type: 'ink', blend: 0.75, inkStrength: 0.9, inkSpread: 0.35, inkRoughness: 0.4, paperInfluence: 0.75, grainInfluence: 0.5, halftone: 0,
265
+ displacement: 0.6, surfaceContrast: 1, lift: 0.1, shadow: 0.6, gloss: 0.1, emboss: 0.15,
266
+ },
267
+ view: { yaw: 0, pitch: 0, zoom: 1, roll: 0, autoCenter: true, motion: 1 },
268
+ animation: {
269
+ duration: 9000, loop: true,
270
+ stages: [
271
+ { key: 'wrap', start: 0.04, end: 0.24, easing: 'ease-in-out', label: 'wrap' },
272
+ { key: 'blend', start: 0.3, end: 0.62, easing: 'ease-in-out', label: 'print' },
273
+ ],
274
+ },
275
+ };
276
+
277
+ /* ---------------- controls: the schema a UI or an agent reads ---------------- */
278
+
279
+ export type TSControl = {
280
+ path: string;
281
+ label: string;
282
+ group: 'text' | 'typography' | 'placement' | 'surface' | 'deformation' | 'fold' | 'wraps' | 'material' | 'view' | 'animation';
283
+ kind: 'number' | 'enum' | 'color' | 'boolean' | 'text';
284
+ min?: number;
285
+ max?: number;
286
+ step?: number;
287
+ options?: readonly (string | number)[];
288
+ unit?: string;
289
+ hint: string;
290
+ };
291
+
292
+ const n = (path: string, label: string, group: TSControl['group'], min: number, max: number, step: number, hint: string, unit?: string): TSControl =>
293
+ ({ path, label, group, kind: 'number', min, max, step, hint, unit });
294
+ const e = (path: string, label: string, group: TSControl['group'], options: readonly (string | number)[], hint: string): TSControl =>
295
+ ({ path, label, group, kind: 'enum', options, hint });
296
+ const c = (path: string, label: string, group: TSControl['group'], hint: string): TSControl => ({ path, label, group, kind: 'color', hint });
297
+ const b = (path: string, label: string, group: TSControl['group'], hint: string): TSControl => ({ path, label, group, kind: 'boolean', hint });
298
+
299
+ const foldControls = (key: (typeof TS_FOLD_KEYS)[number], name: string): TSControl[] => [
300
+ n(`deformation.${key}.amount`, `${name} amount`, 'fold', 0, 1, 0.01, 'how far the fold has gone; the angle reached is angle × amount'),
301
+ n(`deformation.${key}.position`, `${name} position`, 'fold', 0.05, 0.95, 0.005, 'where the crease runs, across the surface'),
302
+ n(`deformation.${key}.angle`, `${name} angle`, 'fold', 0, 180, 1, 'the angle at full amount; 180 folds flat', '°'),
303
+ n(`deformation.${key}.width`, `${name} width`, 'fold', 0.004, 0.5, 0.001, 'the rounded crease, as a share of the width'),
304
+ n(`deformation.${key}.influence`, `${name} influence`, 'fold', 0, 1, 0.01, 'how strongly the crease shades the paper and the letters'),
305
+ e(`deformation.${key}.orientation`, `${name} orientation`, 'fold', TS_FOLD_ORIENTATIONS, 'a vertical crease folds left/right; horizontal folds top/bottom'),
306
+ e(`deformation.${key}.direction`, `${name} direction`, 'fold', TS_FOLD_DIRECTIONS, 'over lifts toward the camera; under tucks beneath'),
307
+ e(`deformation.${key}.side`, `${name} side`, 'fold', TS_FOLD_SIDES, 'which side moves: far = right/below the crease, near = left/above'),
308
+ ];
309
+ const wrapControls = (key: (typeof TS_WRAP_KEYS)[number], name: string): TSControl[] => [
310
+ n(`deformation.${key}.amount`, `${name} amount`, 'wraps', 0, 1, 0.01, 'how far round the rod the sheet has wrapped'),
311
+ n(`deformation.${key}.position`, `${name} position`, 'wraps', 0.02, 0.98, 0.005, 'where the wrap starts, across the surface'),
312
+ n(`deformation.${key}.radius`, `${name} radius`, 'wraps', 0.01, 0.5, 0.005, 'the rod, as a share of the width'),
313
+ n(`deformation.${key}.angle`, `${name} angle`, 'wraps', 0, 360, 1, 'how far round at full amount; 360 goes all the way', '°'),
314
+ e(`deformation.${key}.orientation`, `${name} orientation`, 'wraps', TS_FOLD_ORIENTATIONS, 'vertical rod or horizontal rod'),
315
+ e(`deformation.${key}.direction`, `${name} direction`, 'wraps', TS_FOLD_DIRECTIONS, 'over wraps toward the camera; under wraps away'),
316
+ e(`deformation.${key}.side`, `${name} side`, 'wraps', TS_FOLD_SIDES, 'which side wraps: far = right/below, near = left/above'),
317
+ ];
318
+
319
+ /** Every knob: path, range, unit and what it does. Validation, the playground and agents all read this. */
320
+ export const TS_CONTROLS: TSControl[] = [
321
+ { path: 'text', label: 'Text', group: 'text', kind: 'text', hint: 'any words; \\n breaks a line' },
322
+ { path: 'typography.fontFamily', label: 'Font family', group: 'typography', kind: 'text', hint: 'any CSS font-family list the page has loaded' },
323
+ n('typography.fontWeight', 'Weight', 'typography', 100, 900, 100, 'font weight'),
324
+ e('typography.fontStyle', 'Style', 'typography', ['normal', 'italic'], 'upright or italic'),
325
+ n('typography.fontSize', 'Size', 'typography', 12, 400, 1, 'surface units; the surface is 1000 wide', 'u'),
326
+ n('typography.letterSpacing', 'Letter spacing', 'typography', -40, 120, 1, 'extra space between letters', 'u'),
327
+ n('typography.lineHeight', 'Line height', 'typography', 0.6, 2.5, 0.01, 'line pitch as a multiple of the size'),
328
+ e('typography.align', 'Alignment', 'typography', TS_ALIGNS, 'how lines align in the block'),
329
+ c('typography.color', 'Colour', 'typography', 'the letters'),
330
+ b('typography.gradient.enabled', 'Gradient', 'typography', 'fill the letters with a two-colour gradient'),
331
+ c('typography.gradient.from', 'Gradient from', 'typography', 'first stop'),
332
+ c('typography.gradient.to', 'Gradient to', 'typography', 'last stop'),
333
+ n('typography.gradient.angle', 'Gradient angle', 'typography', 0, 360, 1, '0 runs left → right; 90 runs top → bottom', '°'),
334
+ n('typography.opacity', 'Opacity', 'typography', 0, 1, 0.01, 'of the letters'),
335
+ e('typography.blendMode', 'Blend mode', 'typography', TS_BLEND_MODES, 'how the letters combine with the surface once printed'),
336
+ n('placement.x', 'Position X', 'placement', 0, 1, 0.001, 'centre of the text, 0–1 across the surface'),
337
+ n('placement.y', 'Position Y', 'placement', 0, 1, 0.001, 'centre of the text, 0–1 down the surface'),
338
+ n('placement.rotation', 'Rotation', 'placement', -180, 180, 0.5, 'on the surface, clockwise', '°'),
339
+ n('placement.maxWidth', 'Max width', 'placement', 0, 1000, 5, 'lines wrap past this width; 0 never wraps', 'u'),
340
+ e('surface.type', 'Surface', 'surface', TS_SURFACES, 'what the text meets'),
341
+ { path: 'surface.state', label: 'State', group: 'surface', kind: 'text', hint: 'a named state of the surface (flat, folded, crumpled…)' },
342
+ n('surface.seed', 'Seed', 'surface', 0, 99999, 1, 'every crease, wrinkle, photo and line of copy'),
343
+ n('deformation.wrap', 'Wrap', 'deformation', 0, 1, 0.01, 'floating typography → conformed to the surface'),
344
+ n('deformation.morph', 'Morph', 'deformation', 0, 1, 0.01, 'letters peel off and land one at a time'),
345
+ n('deformation.perspective', 'Perspective', 'deformation', 0, 1, 0.01, 'from straight above to a low, wide-angle view'),
346
+ n('deformation.tiltX', 'Horizontal distortion', 'deformation', -1, 1, 0.01, 'turns the object left/right'),
347
+ n('deformation.tiltY', 'Vertical distortion', 'deformation', -1, 1, 0.01, 'tips the object toward/away'),
348
+ n('deformation.skew', 'Skew', 'deformation', -1, 1, 0.01, 'shears the surface in its own plane'),
349
+ n('deformation.curve', 'Curve', 'deformation', 0, 1, 0.01, 'cylindrical curvature: a label on a bottle, a bent plate, an inflated pack'),
350
+ ...foldControls('fold', 'Fold'),
351
+ ...foldControls('fold2', 'Second fold'),
352
+ ...foldControls('fold3', 'Third fold'),
353
+ ...foldControls('fold4', 'Fourth fold'),
354
+ ...wrapControls('wrap1', 'Wrap 1'),
355
+ ...wrapControls('wrap2', 'Wrap 2'),
356
+ ...wrapControls('wrap3', 'Wrap 3'),
357
+ ...wrapControls('wrap4', 'Wrap 4'),
358
+ n('deformation.roll.amount', 'Roll', 'deformation', 0, 1, 0.01, 'rolls the surface up from one edge'),
359
+ e('deformation.roll.edge', 'Roll from', 'deformation', TS_ROLL_EDGES, 'the edge that rolls first'),
360
+ n('deformation.roll.radius', 'Roll radius', 'deformation', 0.03, 0.3, 0.005, 'outer radius of the roll, as a share of the width'),
361
+ e('deformation.roll.direction', 'Roll direction', 'deformation', TS_FOLD_DIRECTIONS, 'under keeps the printed side outside'),
362
+ n('deformation.crumple.amount', 'Crumple', 'deformation', 0, 1, 0.01, 'creased facets; past 0.6 the sheet is crushed'),
363
+ n('deformation.crumple.scale', 'Crumple scale', 'deformation', 0.4, 2.5, 0.01, 'size of the facets'),
364
+ n('deformation.wave', 'Wave', 'deformation', 0, 1, 0.01, 'soft waves: fabric drape, a rippled pane'),
365
+ n('deformation.wrinkle', 'Wrinkle', 'deformation', 0, 1, 0.01, 'fine wrinkles: film, creased cloth'),
366
+ e('material.type', 'Material', 'material', TS_TEXT_MATERIALS, 'how the letters join the surface'),
367
+ n('material.blend', 'Blend', 'material', 0, 1, 0.01, 'floating → lit by the surface → printed → embedded'),
368
+ n('material.inkStrength', 'Ink strength', 'material', 0, 1, 0.01, 'how dark and saturated the ink prints'),
369
+ n('material.inkSpread', 'Ink spread', 'material', 0, 1, 0.01, 'ink bleeding into the fibres'),
370
+ n('material.inkRoughness', 'Ink roughness', 'material', 0, 1, 0.01, 'ragged, uneven ink edges'),
371
+ n('material.paperInfluence', 'Paper influence', 'material', 0, 1, 0.01, 'how much of the surface colour shows through'),
372
+ n('material.grainInfluence', 'Grain influence', 'material', 0, 1, 0.01, 'paper grain breaking up the ink'),
373
+ n('material.halftone', 'Halftone', 'material', 0, 1, 0.01, 'embedded ink becomes a printing screen'),
374
+ n('material.displacement', 'Displacement', 'material', 0, 4, 0.05, 'ink misregistration, surface units', 'u'),
375
+ n('material.surfaceContrast', 'Surface contrast', 'material', 0, 1.5, 0.01, 'how much surface light and shadow fall on the letters'),
376
+ n('material.lift', 'Float height', 'material', 0, 0.4, 0.005, 'how high floating letters hover'),
377
+ n('material.shadow', 'Float shadow', 'material', 0, 1, 0.01, 'the shadow the letters cast while floating'),
378
+ n('material.gloss', 'Gloss', 'material', 0, 1, 0.01, 'varnish on the letters'),
379
+ n('material.emboss', 'Emboss', 'material', 0, 1, 0.01, 'relief depth'),
380
+ n('view.yaw', 'Orbit', 'view', -180, 180, 0.5, 'camera left/right', '°'),
381
+ n('view.pitch', 'Tilt', 'view', -30, 60, 0.5, 'camera tilt, added to perspective', '°'),
382
+ n('view.zoom', 'Zoom', 'view', 0.4, 3, 0.01, '1 fills the frame'),
383
+ n('view.roll', 'Object angle', 'view', -180, 180, 0.5, 'turns the object on the table', '°'),
384
+ b('view.autoCenter', 'Auto-centre', 'view', 'keep the object centred while it folds and rolls'),
385
+ n('view.motion', 'Ambient motion', 'view', 0, 2, 0.01, 'time-driven motion: fabric in a breeze, a bottle turning'),
386
+ n('animation.duration', 'Length', 'animation', 1000, 60000, 100, 'one pass of the timeline', 'ms'),
387
+ b('animation.loop', 'Loop', 'animation', 'play again from the start'),
388
+ ];
389
+
390
+ /* ---------------- resolve, validate, sanitize ---------------- */
391
+
392
+ export type TSConfigError = { path: string; message: string };
393
+ export const MAX_TS_TEXT_LENGTH = 160;
394
+
395
+ const isObj = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v);
396
+ export const isHexColor = (v: unknown): v is string => typeof v === 'string' && /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(v);
397
+
398
+ export function getPath(obj: unknown, path: string): unknown {
399
+ return path.split('.').reduce<unknown>((o, k) => (isObj(o) ? o[k] : undefined), obj);
400
+ }
401
+ export function setPath<T>(obj: T, path: string, value: unknown): T {
402
+ const [head, ...rest] = path.split('.');
403
+ const o = (isObj(obj) ? obj : {}) as Record<string, unknown>;
404
+ return { ...o, [head!]: rest.length ? setPath(o[head!], rest.join('.'), value) : value } as T;
405
+ }
406
+
407
+ /** Deep merge of plain objects; arrays and scalars in `over` replace. */
408
+ function merge<T>(base: T, over: unknown): T {
409
+ if (!isObj(base) || !isObj(over)) return (over === undefined ? base : over) as T;
410
+ const out: Record<string, unknown> = { ...base };
411
+ for (const [k, v] of Object.entries(over)) out[k] = v === undefined ? out[k] : merge((base as Record<string, unknown>)[k], v);
412
+ return out as T;
413
+ }
414
+
415
+ /** Defaults ← input. Pure; does not validate (see `validateTypeSurface` / `sanitizeTypeSurface`). */
416
+ export function resolveTypeSurface(input: TypeSurfaceConfigInput = {}, base: TypeSurfaceConfig = DEFAULT_TYPE_SURFACE): TypeSurfaceConfig {
417
+ return merge(base, input);
418
+ }
419
+
420
+ function checkControl(ctl: TSControl, v: unknown): string | null {
421
+ switch (ctl.kind) {
422
+ case 'number':
423
+ if (typeof v !== 'number' || !Number.isFinite(v)) return `${ctl.label} must be a number.`;
424
+ if (v < ctl.min! || v > ctl.max!) return `${ctl.label} must be between ${ctl.min} and ${ctl.max}.`;
425
+ return null;
426
+ case 'enum':
427
+ if (ctl.path === 'surface.type' && typeof v === 'string' && hasSurface(v)) return null;
428
+ return ctl.options!.includes(v as string) ? null : `${ctl.label} must be one of: ${ctl.options!.join(', ')}.`;
429
+ case 'color': return isHexColor(v) ? null : `${ctl.label} must be a hex colour like #E0271B.`;
430
+ case 'boolean': return typeof v === 'boolean' ? null : `${ctl.label} must be true or false.`;
431
+ case 'text':
432
+ if (typeof v !== 'string') return `${ctl.label} must be text.`;
433
+ if (ctl.path === 'text' && v.length > MAX_TS_TEXT_LENGTH) return `Text is limited to ${MAX_TS_TEXT_LENGTH} characters.`;
434
+ if (ctl.path === 'typography.fontFamily' && !v.trim()) return 'Font family must name a font.';
435
+ return null;
436
+ }
437
+ }
438
+
439
+ function checkStages(stages: unknown): TSConfigError[] {
440
+ if (!Array.isArray(stages)) return [{ path: 'animation.stages', message: 'Stages must be a list.' }];
441
+ const errors: TSConfigError[] = [];
442
+ stages.forEach((s, i) => {
443
+ const p = `animation.stages.${i}`;
444
+ if (!isObj(s)) { errors.push({ path: p, message: 'A stage must be an object.' }); return; }
445
+ if (!TS_ANIMATABLE.includes(s.key as TSAnimatable)) errors.push({ path: `${p}.key`, message: `A stage drives one of: ${TS_ANIMATABLE.join(', ')}.` });
446
+ const t = (k: string) => typeof s[k] === 'number' && Number.isFinite(s[k] as number) && (s[k] as number) >= 0 && (s[k] as number) <= 1;
447
+ if (!t('start') || !t('end')) errors.push({ path: p, message: 'start and end are 0–1 of the timeline.' });
448
+ else if ((s.end as number) < (s.start as number)) errors.push({ path: p, message: 'end must not come before start.' });
449
+ if ((s.outStart !== undefined || s.outEnd !== undefined)) {
450
+ if (!t('outStart') || !t('outEnd')) errors.push({ path: p, message: 'outStart and outEnd are 0–1 of the timeline.' });
451
+ else if ((s.outEnd as number) < (s.outStart as number) || (s.outStart as number) < (s.end as number)) errors.push({ path: p, message: 'A stage goes out after it comes in: end ≤ outStart ≤ outEnd.' });
452
+ }
453
+ });
454
+ return errors;
455
+ }
456
+
457
+ /** `[]` when the config can be drawn; otherwise every problem as `{ path, message }`. Never throws. */
458
+ export function validateTypeSurface(config: unknown): TSConfigError[] {
459
+ if (!isObj(config)) return [{ path: '', message: 'The config must be an object.' }];
460
+ const errors: TSConfigError[] = [];
461
+ for (const ctl of TS_CONTROLS) {
462
+ const msg = checkControl(ctl, getPath(config, ctl.path));
463
+ if (msg) errors.push({ path: ctl.path, message: msg });
464
+ }
465
+ errors.push(...checkStages(getPath(config, 'animation.stages')));
466
+ return errors;
467
+ }
468
+
469
+ /**
470
+ * A config that always draws: every invalid field is replaced by its default and named in
471
+ * `invalid`. The renderer draws the result and the playground lists what it replaced.
472
+ */
473
+ export function sanitizeTypeSurface(input: unknown): { config: TypeSurfaceConfig; invalid: string[] } {
474
+ let config = resolveTypeSurface(isObj(input) ? (input as TypeSurfaceConfigInput) : {});
475
+ const invalid: string[] = [];
476
+ for (const err of validateTypeSurface(config)) {
477
+ if (err.path.startsWith('animation.stages')) {
478
+ config = { ...config, animation: { ...config.animation, stages: [] } };
479
+ if (!invalid.includes('animation.stages')) invalid.push('animation.stages');
480
+ continue;
481
+ }
482
+ config = setPath(config, err.path, getPath(DEFAULT_TYPE_SURFACE, err.path));
483
+ invalid.push(err.path);
484
+ }
485
+ return { config, invalid };
486
+ }