@appinternalleads/ui 0.4.0 → 0.4.2

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 (901) hide show
  1. package/README.md +92 -0
  2. package/dist/cjs/agent/AgentComponent.js +1 -1
  3. package/dist/cjs/agent/AgentComponent.js.map +1 -1
  4. package/dist/cjs/agent/manifests.js +81 -1
  5. package/dist/cjs/agent/manifests.js.map +1 -1
  6. package/dist/cjs/agent/result.js +6 -0
  7. package/dist/cjs/agent/result.js.map +1 -1
  8. package/dist/cjs/components/catalog.js +18 -0
  9. package/dist/cjs/components/catalog.js.map +1 -1
  10. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js +21 -0
  11. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  12. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js +6 -0
  13. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  14. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js +89 -0
  15. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  16. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js +62 -0
  17. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  18. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js +20 -0
  19. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  20. package/dist/cjs/components/onboarding/animated-status/contract.js +87 -0
  21. package/dist/cjs/components/onboarding/animated-status/contract.js.map +1 -0
  22. package/dist/cjs/components/onboarding/animated-status/engine.js +40 -0
  23. package/dist/cjs/components/onboarding/animated-status/engine.js.map +1 -0
  24. package/dist/cjs/components/onboarding/animated-status/index.js +20 -0
  25. package/dist/cjs/components/onboarding/animated-status/index.js.map +1 -0
  26. package/dist/cjs/components/onboarding/animated-status/presets.json +126 -0
  27. package/dist/cjs/components/onboarding/animated-status/riv.js +7 -0
  28. package/dist/cjs/components/onboarding/animated-status/riv.js.map +1 -0
  29. package/dist/cjs/components/onboarding/index.js +4 -0
  30. package/dist/cjs/components/onboarding/index.js.map +1 -1
  31. package/dist/cjs/components/onboarding/presets.js +90 -84
  32. package/dist/cjs/components/onboarding/presets.js.map +1 -1
  33. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js +43 -6
  34. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  35. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js +111 -0
  36. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  37. package/dist/cjs/components/onboarding/send-completion/SendStage.js +37 -0
  38. package/dist/cjs/components/onboarding/send-completion/SendStage.js.map +1 -0
  39. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js +6 -0
  40. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  41. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js +107 -0
  42. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  43. package/dist/cjs/components/onboarding/send-completion/SendStill.js +17 -0
  44. package/dist/cjs/components/onboarding/send-completion/SendStill.js.map +1 -0
  45. package/dist/cjs/components/onboarding/send-completion/contract.js +83 -0
  46. package/dist/cjs/components/onboarding/send-completion/contract.js.map +1 -0
  47. package/dist/cjs/components/onboarding/send-completion/engine.js +32 -0
  48. package/dist/cjs/components/onboarding/send-completion/engine.js.map +1 -0
  49. package/dist/cjs/components/onboarding/send-completion/index.js +22 -0
  50. package/dist/cjs/components/onboarding/send-completion/index.js.map +1 -0
  51. package/dist/cjs/components/onboarding/send-completion/presets.json +132 -0
  52. package/dist/cjs/components/onboarding/send-completion/riv.js +7 -0
  53. package/dist/cjs/components/onboarding/send-completion/riv.js.map +1 -0
  54. package/dist/cjs/components/onboarding/shared/actions-data.js +2 -0
  55. package/dist/cjs/components/onboarding/shared/actions-data.js.map +1 -1
  56. package/dist/cjs/components/onboarding/shared/configColor.js +76 -0
  57. package/dist/cjs/components/onboarding/shared/configColor.js.map +1 -0
  58. package/dist/cjs/components/onboarding/shared/contract.js +4 -0
  59. package/dist/cjs/components/onboarding/shared/contract.js.map +1 -1
  60. package/dist/cjs/components/onboarding/shared/describe.js +1 -1
  61. package/dist/cjs/components/onboarding/shared/describe.js.map +1 -1
  62. package/dist/cjs/components/onboarding/shared/mock.js +2 -0
  63. package/dist/cjs/components/onboarding/shared/mock.js.map +1 -1
  64. package/dist/cjs/components/onboarding/views.js +8 -0
  65. package/dist/cjs/components/onboarding/views.js.map +1 -1
  66. package/dist/cjs/motion/MotionPlayer.js +42 -0
  67. package/dist/cjs/motion/MotionPlayer.js.map +1 -0
  68. package/dist/cjs/motion/agent.js +323 -0
  69. package/dist/cjs/motion/agent.js.map +1 -0
  70. package/dist/cjs/motion/cat/Cat.js +79 -0
  71. package/dist/cjs/motion/cat/Cat.js.map +1 -0
  72. package/dist/cjs/motion/cat/animation.js +204 -0
  73. package/dist/cjs/motion/cat/animation.js.map +1 -0
  74. package/dist/cjs/motion/cat/art.generated.js +37 -0
  75. package/dist/cjs/motion/cat/art.generated.js.map +1 -0
  76. package/dist/cjs/motion/cat/config.js +136 -0
  77. package/dist/cjs/motion/cat/config.js.map +1 -0
  78. package/dist/cjs/motion/cat/index.js +75 -0
  79. package/dist/cjs/motion/cat/index.js.map +1 -0
  80. package/dist/cjs/motion/cat/rig.js +99 -0
  81. package/dist/cjs/motion/cat/rig.js.map +1 -0
  82. package/dist/cjs/motion/cat/scene.js +148 -0
  83. package/dist/cjs/motion/cat/scene.js.map +1 -0
  84. package/dist/cjs/motion/configurable/config.js +477 -0
  85. package/dist/cjs/motion/configurable/config.js.map +1 -0
  86. package/dist/cjs/motion/configurable/controls.js +44 -0
  87. package/dist/cjs/motion/configurable/controls.js.map +1 -0
  88. package/dist/cjs/motion/easing.js +62 -0
  89. package/dist/cjs/motion/easing.js.map +1 -0
  90. package/dist/cjs/motion/fit.js +12 -0
  91. package/dist/cjs/motion/fit.js.map +1 -0
  92. package/dist/cjs/motion/index.js +101 -0
  93. package/dist/cjs/motion/index.js.map +1 -0
  94. package/dist/cjs/motion/neon/GlowRenderer.js +18 -0
  95. package/dist/cjs/motion/neon/GlowRenderer.js.map +1 -0
  96. package/dist/cjs/motion/neon/NeonCanvas.js +97 -0
  97. package/dist/cjs/motion/neon/NeonCanvas.js.map +1 -0
  98. package/dist/cjs/motion/neon/NeonText.js +108 -0
  99. package/dist/cjs/motion/neon/NeonText.js.map +1 -0
  100. package/dist/cjs/motion/neon/NeonTextFrame.js +36 -0
  101. package/dist/cjs/motion/neon/NeonTextFrame.js.map +1 -0
  102. package/dist/cjs/motion/neon/artwork.js +102 -0
  103. package/dist/cjs/motion/neon/artwork.js.map +1 -0
  104. package/dist/cjs/motion/neon/audio.js +165 -0
  105. package/dist/cjs/motion/neon/audio.js.map +1 -0
  106. package/dist/cjs/motion/neon/config.js +334 -0
  107. package/dist/cjs/motion/neon/config.js.map +1 -0
  108. package/dist/cjs/motion/neon/flicker.js +196 -0
  109. package/dist/cjs/motion/neon/flicker.js.map +1 -0
  110. package/dist/cjs/motion/neon/fonts.js +52 -0
  111. package/dist/cjs/motion/neon/fonts.js.map +1 -0
  112. package/dist/cjs/motion/neon/frame.js +24 -0
  113. package/dist/cjs/motion/neon/frame.js.map +1 -0
  114. package/dist/cjs/motion/neon/glitch.js +114 -0
  115. package/dist/cjs/motion/neon/glitch.js.map +1 -0
  116. package/dist/cjs/motion/neon/index.js +119 -0
  117. package/dist/cjs/motion/neon/index.js.map +1 -0
  118. package/dist/cjs/motion/neon/layers.js +68 -0
  119. package/dist/cjs/motion/neon/layers.js.map +1 -0
  120. package/dist/cjs/motion/neon/material.js +56 -0
  121. package/dist/cjs/motion/neon/material.js.map +1 -0
  122. package/dist/cjs/motion/neon/random.js +43 -0
  123. package/dist/cjs/motion/neon/random.js.map +1 -0
  124. package/dist/cjs/motion/neon/scene.js +549 -0
  125. package/dist/cjs/motion/neon/scene.js.map +1 -0
  126. package/dist/cjs/motion/neon/synth.js +213 -0
  127. package/dist/cjs/motion/neon/synth.js.map +1 -0
  128. package/dist/cjs/motion/neon/typography.js +81 -0
  129. package/dist/cjs/motion/neon/typography.js.map +1 -0
  130. package/dist/cjs/motion/neon/wall.js +113 -0
  131. package/dist/cjs/motion/neon/wall.js.map +1 -0
  132. package/dist/cjs/motion/paperfold/PaperFold.js +40 -0
  133. package/dist/cjs/motion/paperfold/PaperFold.js.map +1 -0
  134. package/dist/cjs/motion/paperfold/PaperFoldFrame.js +290 -0
  135. package/dist/cjs/motion/paperfold/PaperFoldFrame.js.map +1 -0
  136. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js +59 -0
  137. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  138. package/dist/cjs/motion/paperfold/art.js +388 -0
  139. package/dist/cjs/motion/paperfold/art.js.map +1 -0
  140. package/dist/cjs/motion/paperfold/config.js +103 -0
  141. package/dist/cjs/motion/paperfold/config.js.map +1 -0
  142. package/dist/cjs/motion/paperfold/controls.js +493 -0
  143. package/dist/cjs/motion/paperfold/controls.js.map +1 -0
  144. package/dist/cjs/motion/paperfold/engine.js +722 -0
  145. package/dist/cjs/motion/paperfold/engine.js.map +1 -0
  146. package/dist/cjs/motion/paperfold/fonts.js +25 -0
  147. package/dist/cjs/motion/paperfold/fonts.js.map +1 -0
  148. package/dist/cjs/motion/paperfold/index.js +113 -0
  149. package/dist/cjs/motion/paperfold/index.js.map +1 -0
  150. package/dist/cjs/motion/paperfold/manipulate.js +170 -0
  151. package/dist/cjs/motion/paperfold/manipulate.js.map +1 -0
  152. package/dist/cjs/motion/paperfold/presets.js +119 -0
  153. package/dist/cjs/motion/paperfold/presets.js.map +1 -0
  154. package/dist/cjs/motion/paperfold/template.js +40 -0
  155. package/dist/cjs/motion/paperfold/template.js.map +1 -0
  156. package/dist/cjs/motion/player.js +203 -0
  157. package/dist/cjs/motion/player.js.map +1 -0
  158. package/dist/cjs/motion/promo/PromoFrame.js +293 -0
  159. package/dist/cjs/motion/promo/PromoFrame.js.map +1 -0
  160. package/dist/cjs/motion/promo/PromoShowcasePlayer.js +59 -0
  161. package/dist/cjs/motion/promo/PromoShowcasePlayer.js.map +1 -0
  162. package/dist/cjs/motion/promo/config.js +565 -0
  163. package/dist/cjs/motion/promo/config.js.map +1 -0
  164. package/dist/cjs/motion/promo/controls.js +571 -0
  165. package/dist/cjs/motion/promo/controls.js.map +1 -0
  166. package/dist/cjs/motion/promo/easing.js +35 -0
  167. package/dist/cjs/motion/promo/easing.js.map +1 -0
  168. package/dist/cjs/motion/promo/engine.js +567 -0
  169. package/dist/cjs/motion/promo/engine.js.map +1 -0
  170. package/dist/cjs/motion/promo/fonts.js +20 -0
  171. package/dist/cjs/motion/promo/fonts.js.map +1 -0
  172. package/dist/cjs/motion/promo/icons.js +29 -0
  173. package/dist/cjs/motion/promo/icons.js.map +1 -0
  174. package/dist/cjs/motion/promo/index.js +73 -0
  175. package/dist/cjs/motion/promo/index.js.map +1 -0
  176. package/dist/cjs/motion/promo/presets.js +44 -0
  177. package/dist/cjs/motion/promo/presets.js.map +1 -0
  178. package/dist/cjs/motion/promo/template.js +38 -0
  179. package/dist/cjs/motion/promo/template.js.map +1 -0
  180. package/dist/cjs/motion/replication2/Replication2Player.js +93 -0
  181. package/dist/cjs/motion/replication2/Replication2Player.js.map +1 -0
  182. package/dist/cjs/motion/replication2/config.js +352 -0
  183. package/dist/cjs/motion/replication2/config.js.map +1 -0
  184. package/dist/cjs/motion/replication2/controls.js +286 -0
  185. package/dist/cjs/motion/replication2/controls.js.map +1 -0
  186. package/dist/cjs/motion/replication2/driver.js +68 -0
  187. package/dist/cjs/motion/replication2/driver.js.map +1 -0
  188. package/dist/cjs/motion/replication2/easing.js +97 -0
  189. package/dist/cjs/motion/replication2/easing.js.map +1 -0
  190. package/dist/cjs/motion/replication2/engine.js +481 -0
  191. package/dist/cjs/motion/replication2/engine.js.map +1 -0
  192. package/dist/cjs/motion/replication2/html.js +88 -0
  193. package/dist/cjs/motion/replication2/html.js.map +1 -0
  194. package/dist/cjs/motion/replication2/index.js +61 -0
  195. package/dist/cjs/motion/replication2/index.js.map +1 -0
  196. package/dist/cjs/motion/replication2/measure.js +30 -0
  197. package/dist/cjs/motion/replication2/measure.js.map +1 -0
  198. package/dist/cjs/motion/replication2/metrics.js +10 -0
  199. package/dist/cjs/motion/replication2/metrics.js.map +1 -0
  200. package/dist/cjs/motion/replication2/presets.js +67 -0
  201. package/dist/cjs/motion/replication2/presets.js.map +1 -0
  202. package/dist/cjs/motion/replication2/riv.js +7 -0
  203. package/dist/cjs/motion/replication2/riv.js.map +1 -0
  204. package/dist/cjs/motion/replication2/rive-contract.js +158 -0
  205. package/dist/cjs/motion/replication2/rive-contract.js.map +1 -0
  206. package/dist/cjs/motion/replication2/template.js +35 -0
  207. package/dist/cjs/motion/replication2/template.js.map +1 -0
  208. package/dist/cjs/motion/sample.js +149 -0
  209. package/dist/cjs/motion/sample.js.map +1 -0
  210. package/dist/cjs/motion/templates/hey-template.js +1552 -0
  211. package/dist/cjs/motion/templates/hey-template.js.map +1 -0
  212. package/dist/cjs/motion/templates/index.js +22 -0
  213. package/dist/cjs/motion/templates/index.js.map +1 -0
  214. package/dist/cjs/motion/templates/word-motion.js +1165 -0
  215. package/dist/cjs/motion/templates/word-motion.js.map +1 -0
  216. package/dist/cjs/motion/types.js +3 -0
  217. package/dist/cjs/motion/types.js.map +1 -0
  218. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js +85 -0
  219. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  220. package/dist/cjs/motion/typesurface/art.js +861 -0
  221. package/dist/cjs/motion/typesurface/art.js.map +1 -0
  222. package/dist/cjs/motion/typesurface/config.js +289 -0
  223. package/dist/cjs/motion/typesurface/config.js.map +1 -0
  224. package/dist/cjs/motion/typesurface/construct.js +875 -0
  225. package/dist/cjs/motion/typesurface/construct.js.map +1 -0
  226. package/dist/cjs/motion/typesurface/engine.js +631 -0
  227. package/dist/cjs/motion/typesurface/engine.js.map +1 -0
  228. package/dist/cjs/motion/typesurface/fonts.js +45 -0
  229. package/dist/cjs/motion/typesurface/fonts.js.map +1 -0
  230. package/dist/cjs/motion/typesurface/index.js +80 -0
  231. package/dist/cjs/motion/typesurface/index.js.map +1 -0
  232. package/dist/cjs/motion/typesurface/layout.js +130 -0
  233. package/dist/cjs/motion/typesurface/layout.js.map +1 -0
  234. package/dist/cjs/motion/typesurface/ops.js +175 -0
  235. package/dist/cjs/motion/typesurface/ops.js.map +1 -0
  236. package/dist/cjs/motion/typesurface/presets.js +259 -0
  237. package/dist/cjs/motion/typesurface/presets.js.map +1 -0
  238. package/dist/cjs/motion/typesurface/renderer.js +738 -0
  239. package/dist/cjs/motion/typesurface/renderer.js.map +1 -0
  240. package/dist/cjs/motion/typesurface/shaders.js +322 -0
  241. package/dist/cjs/motion/typesurface/shaders.js.map +1 -0
  242. package/dist/cjs/motion/typesurface/surfaces.js +225 -0
  243. package/dist/cjs/motion/typesurface/surfaces.js.map +1 -0
  244. package/dist/cjs/motion/typesurface/text.js +34 -0
  245. package/dist/cjs/motion/typesurface/text.js.map +1 -0
  246. package/dist/cjs/motion/typesurface/timeline.js +64 -0
  247. package/dist/cjs/motion/typesurface/timeline.js.map +1 -0
  248. package/dist/cjs/motion/validate.js +89 -0
  249. package/dist/cjs/motion/validate.js.map +1 -0
  250. package/dist/cjs/native/RiveReceiptStage.js +9 -150
  251. package/dist/cjs/native/RiveReceiptStage.js.map +1 -1
  252. package/dist/cjs/native/riveReceiptStageFactory.js +162 -0
  253. package/dist/cjs/native/riveReceiptStageFactory.js.map +1 -0
  254. package/dist/cjs/tokens/stage.js +10 -0
  255. package/dist/cjs/tokens/stage.js.map +1 -0
  256. package/dist/esm/agent/AgentComponent.js +1 -1
  257. package/dist/esm/agent/AgentComponent.js.map +1 -1
  258. package/dist/esm/agent/manifests.d.ts.map +1 -1
  259. package/dist/esm/agent/manifests.js +81 -1
  260. package/dist/esm/agent/manifests.js.map +1 -1
  261. package/dist/esm/agent/result.d.ts.map +1 -1
  262. package/dist/esm/agent/result.js +6 -0
  263. package/dist/esm/agent/result.js.map +1 -1
  264. package/dist/esm/agent/types.d.ts +1 -1
  265. package/dist/esm/agent/types.d.ts.map +1 -1
  266. package/dist/esm/components/catalog.d.ts +1 -1
  267. package/dist/esm/components/catalog.d.ts.map +1 -1
  268. package/dist/esm/components/catalog.js +18 -0
  269. package/dist/esm/components/catalog.js.map +1 -1
  270. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts +9 -0
  271. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts.map +1 -0
  272. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js +18 -0
  273. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  274. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts +31 -0
  275. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts.map +1 -0
  276. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js +3 -0
  277. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  278. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts +4 -0
  279. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts.map +1 -0
  280. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js +86 -0
  281. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  282. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts +32 -0
  283. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts.map +1 -0
  284. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js +59 -0
  285. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  286. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts +8 -0
  287. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts.map +1 -0
  288. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js +17 -0
  289. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  290. package/dist/esm/components/onboarding/animated-status/contract.d.ts +61 -0
  291. package/dist/esm/components/onboarding/animated-status/contract.d.ts.map +1 -0
  292. package/dist/esm/components/onboarding/animated-status/contract.js +78 -0
  293. package/dist/esm/components/onboarding/animated-status/contract.js.map +1 -0
  294. package/dist/esm/components/onboarding/animated-status/engine.d.ts +24 -0
  295. package/dist/esm/components/onboarding/animated-status/engine.d.ts.map +1 -0
  296. package/dist/esm/components/onboarding/animated-status/engine.js +32 -0
  297. package/dist/esm/components/onboarding/animated-status/engine.js.map +1 -0
  298. package/dist/esm/components/onboarding/animated-status/index.d.ts +5 -0
  299. package/dist/esm/components/onboarding/animated-status/index.d.ts.map +1 -0
  300. package/dist/esm/components/onboarding/animated-status/index.js +4 -0
  301. package/dist/esm/components/onboarding/animated-status/index.js.map +1 -0
  302. package/dist/esm/components/onboarding/animated-status/presets.json +126 -0
  303. package/dist/esm/components/onboarding/animated-status/riv.d.ts +3 -0
  304. package/dist/esm/components/onboarding/animated-status/riv.d.ts.map +1 -0
  305. package/dist/esm/components/onboarding/animated-status/riv.js +4 -0
  306. package/dist/esm/components/onboarding/animated-status/riv.js.map +1 -0
  307. package/dist/esm/components/onboarding/index.d.ts +2 -0
  308. package/dist/esm/components/onboarding/index.d.ts.map +1 -1
  309. package/dist/esm/components/onboarding/index.js +4 -0
  310. package/dist/esm/components/onboarding/index.js.map +1 -1
  311. package/dist/esm/components/onboarding/presets.d.ts.map +1 -1
  312. package/dist/esm/components/onboarding/presets.js +6 -0
  313. package/dist/esm/components/onboarding/presets.js.map +1 -1
  314. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts +4 -6
  315. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts.map +1 -1
  316. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js +42 -6
  317. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  318. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts +47 -0
  319. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts.map +1 -0
  320. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js +108 -0
  321. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  322. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts +9 -0
  323. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts.map +1 -0
  324. package/dist/esm/components/onboarding/send-completion/SendStage.js +34 -0
  325. package/dist/esm/components/onboarding/send-completion/SendStage.js.map +1 -0
  326. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts +33 -0
  327. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts.map +1 -0
  328. package/dist/esm/components/onboarding/send-completion/SendStage.types.js +3 -0
  329. package/dist/esm/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  330. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts +4 -0
  331. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts.map +1 -0
  332. package/dist/esm/components/onboarding/send-completion/SendStage.web.js +104 -0
  333. package/dist/esm/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  334. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts +11 -0
  335. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts.map +1 -0
  336. package/dist/esm/components/onboarding/send-completion/SendStill.js +14 -0
  337. package/dist/esm/components/onboarding/send-completion/SendStill.js.map +1 -0
  338. package/dist/esm/components/onboarding/send-completion/contract.d.ts +99 -0
  339. package/dist/esm/components/onboarding/send-completion/contract.d.ts.map +1 -0
  340. package/dist/esm/components/onboarding/send-completion/contract.js +76 -0
  341. package/dist/esm/components/onboarding/send-completion/contract.js.map +1 -0
  342. package/dist/esm/components/onboarding/send-completion/engine.d.ts +20 -0
  343. package/dist/esm/components/onboarding/send-completion/engine.d.ts.map +1 -0
  344. package/dist/esm/components/onboarding/send-completion/engine.js +28 -0
  345. package/dist/esm/components/onboarding/send-completion/engine.js.map +1 -0
  346. package/dist/esm/components/onboarding/send-completion/index.d.ts +6 -0
  347. package/dist/esm/components/onboarding/send-completion/index.d.ts.map +1 -0
  348. package/dist/esm/components/onboarding/send-completion/index.js +6 -0
  349. package/dist/esm/components/onboarding/send-completion/index.js.map +1 -0
  350. package/dist/esm/components/onboarding/send-completion/presets.json +132 -0
  351. package/dist/esm/components/onboarding/send-completion/riv.d.ts +3 -0
  352. package/dist/esm/components/onboarding/send-completion/riv.d.ts.map +1 -0
  353. package/dist/esm/components/onboarding/send-completion/riv.js +4 -0
  354. package/dist/esm/components/onboarding/send-completion/riv.js.map +1 -0
  355. package/dist/esm/components/onboarding/shared/actions-data.d.ts.map +1 -1
  356. package/dist/esm/components/onboarding/shared/actions-data.js +2 -0
  357. package/dist/esm/components/onboarding/shared/actions-data.js.map +1 -1
  358. package/dist/esm/components/onboarding/shared/configColor.d.ts +29 -0
  359. package/dist/esm/components/onboarding/shared/configColor.d.ts.map +1 -0
  360. package/dist/esm/components/onboarding/shared/configColor.js +69 -0
  361. package/dist/esm/components/onboarding/shared/configColor.js.map +1 -0
  362. package/dist/esm/components/onboarding/shared/contract.d.ts +1 -1
  363. package/dist/esm/components/onboarding/shared/contract.d.ts.map +1 -1
  364. package/dist/esm/components/onboarding/shared/contract.js +4 -0
  365. package/dist/esm/components/onboarding/shared/contract.js.map +1 -1
  366. package/dist/esm/components/onboarding/shared/describe.d.ts.map +1 -1
  367. package/dist/esm/components/onboarding/shared/describe.js +1 -1
  368. package/dist/esm/components/onboarding/shared/describe.js.map +1 -1
  369. package/dist/esm/components/onboarding/shared/mock.d.ts +2 -0
  370. package/dist/esm/components/onboarding/shared/mock.d.ts.map +1 -1
  371. package/dist/esm/components/onboarding/shared/mock.js +2 -0
  372. package/dist/esm/components/onboarding/shared/mock.js.map +1 -1
  373. package/dist/esm/components/onboarding/views.d.ts.map +1 -1
  374. package/dist/esm/components/onboarding/views.js +8 -0
  375. package/dist/esm/components/onboarding/views.js.map +1 -1
  376. package/dist/esm/motion/MotionPlayer.d.ts +22 -0
  377. package/dist/esm/motion/MotionPlayer.d.ts.map +1 -0
  378. package/dist/esm/motion/MotionPlayer.js +39 -0
  379. package/dist/esm/motion/MotionPlayer.js.map +1 -0
  380. package/dist/esm/motion/agent.d.ts +146 -0
  381. package/dist/esm/motion/agent.d.ts.map +1 -0
  382. package/dist/esm/motion/agent.js +278 -0
  383. package/dist/esm/motion/agent.js.map +1 -0
  384. package/dist/esm/motion/cat/Cat.d.ts +43 -0
  385. package/dist/esm/motion/cat/Cat.d.ts.map +1 -0
  386. package/dist/esm/motion/cat/Cat.js +74 -0
  387. package/dist/esm/motion/cat/Cat.js.map +1 -0
  388. package/dist/esm/motion/cat/animation.d.ts +86 -0
  389. package/dist/esm/motion/cat/animation.d.ts.map +1 -0
  390. package/dist/esm/motion/cat/animation.js +193 -0
  391. package/dist/esm/motion/cat/animation.js.map +1 -0
  392. package/dist/esm/motion/cat/art.generated.d.ts +53 -0
  393. package/dist/esm/motion/cat/art.generated.d.ts.map +1 -0
  394. package/dist/esm/motion/cat/art.generated.js +34 -0
  395. package/dist/esm/motion/cat/art.generated.js.map +1 -0
  396. package/dist/esm/motion/cat/config.d.ts +103 -0
  397. package/dist/esm/motion/cat/config.d.ts.map +1 -0
  398. package/dist/esm/motion/cat/config.js +129 -0
  399. package/dist/esm/motion/cat/config.js.map +1 -0
  400. package/dist/esm/motion/cat/index.d.ts +13 -0
  401. package/dist/esm/motion/cat/index.d.ts.map +1 -0
  402. package/dist/esm/motion/cat/index.js +13 -0
  403. package/dist/esm/motion/cat/index.js.map +1 -0
  404. package/dist/esm/motion/cat/rig.d.ts +44 -0
  405. package/dist/esm/motion/cat/rig.d.ts.map +1 -0
  406. package/dist/esm/motion/cat/rig.js +86 -0
  407. package/dist/esm/motion/cat/rig.js.map +1 -0
  408. package/dist/esm/motion/cat/scene.d.ts +66 -0
  409. package/dist/esm/motion/cat/scene.d.ts.map +1 -0
  410. package/dist/esm/motion/cat/scene.js +137 -0
  411. package/dist/esm/motion/cat/scene.js.map +1 -0
  412. package/dist/esm/motion/configurable/config.d.ts +80 -0
  413. package/dist/esm/motion/configurable/config.d.ts.map +1 -0
  414. package/dist/esm/motion/configurable/config.js +468 -0
  415. package/dist/esm/motion/configurable/config.js.map +1 -0
  416. package/dist/esm/motion/configurable/controls.d.ts +74 -0
  417. package/dist/esm/motion/configurable/controls.d.ts.map +1 -0
  418. package/dist/esm/motion/configurable/controls.js +38 -0
  419. package/dist/esm/motion/configurable/controls.js.map +1 -0
  420. package/dist/esm/motion/easing.d.ts +4 -0
  421. package/dist/esm/motion/easing.d.ts.map +1 -0
  422. package/dist/esm/motion/easing.js +58 -0
  423. package/dist/esm/motion/easing.js.map +1 -0
  424. package/dist/esm/motion/fit.d.ts +8 -0
  425. package/dist/esm/motion/fit.d.ts.map +1 -0
  426. package/dist/esm/motion/fit.js +8 -0
  427. package/dist/esm/motion/fit.js.map +1 -0
  428. package/dist/esm/motion/index.d.ts +27 -0
  429. package/dist/esm/motion/index.d.ts.map +1 -0
  430. package/dist/esm/motion/index.js +21 -0
  431. package/dist/esm/motion/index.js.map +1 -0
  432. package/dist/esm/motion/neon/GlowRenderer.d.ts +31 -0
  433. package/dist/esm/motion/neon/GlowRenderer.d.ts.map +1 -0
  434. package/dist/esm/motion/neon/GlowRenderer.js +14 -0
  435. package/dist/esm/motion/neon/GlowRenderer.js.map +1 -0
  436. package/dist/esm/motion/neon/NeonCanvas.d.ts +42 -0
  437. package/dist/esm/motion/neon/NeonCanvas.d.ts.map +1 -0
  438. package/dist/esm/motion/neon/NeonCanvas.js +92 -0
  439. package/dist/esm/motion/neon/NeonCanvas.js.map +1 -0
  440. package/dist/esm/motion/neon/NeonText.d.ts +26 -0
  441. package/dist/esm/motion/neon/NeonText.d.ts.map +1 -0
  442. package/dist/esm/motion/neon/NeonText.js +103 -0
  443. package/dist/esm/motion/neon/NeonText.js.map +1 -0
  444. package/dist/esm/motion/neon/NeonTextFrame.d.ts +29 -0
  445. package/dist/esm/motion/neon/NeonTextFrame.d.ts.map +1 -0
  446. package/dist/esm/motion/neon/NeonTextFrame.js +33 -0
  447. package/dist/esm/motion/neon/NeonTextFrame.js.map +1 -0
  448. package/dist/esm/motion/neon/artwork.d.ts +29 -0
  449. package/dist/esm/motion/neon/artwork.d.ts.map +1 -0
  450. package/dist/esm/motion/neon/artwork.js +98 -0
  451. package/dist/esm/motion/neon/artwork.js.map +1 -0
  452. package/dist/esm/motion/neon/audio.d.ts +49 -0
  453. package/dist/esm/motion/neon/audio.d.ts.map +1 -0
  454. package/dist/esm/motion/neon/audio.js +161 -0
  455. package/dist/esm/motion/neon/audio.js.map +1 -0
  456. package/dist/esm/motion/neon/config.d.ts +319 -0
  457. package/dist/esm/motion/neon/config.d.ts.map +1 -0
  458. package/dist/esm/motion/neon/config.js +319 -0
  459. package/dist/esm/motion/neon/config.js.map +1 -0
  460. package/dist/esm/motion/neon/flicker.d.ts +82 -0
  461. package/dist/esm/motion/neon/flicker.d.ts.map +1 -0
  462. package/dist/esm/motion/neon/flicker.js +187 -0
  463. package/dist/esm/motion/neon/flicker.js.map +1 -0
  464. package/dist/esm/motion/neon/fonts.d.ts +29 -0
  465. package/dist/esm/motion/neon/fonts.d.ts.map +1 -0
  466. package/dist/esm/motion/neon/fonts.js +47 -0
  467. package/dist/esm/motion/neon/fonts.js.map +1 -0
  468. package/dist/esm/motion/neon/frame.d.ts +22 -0
  469. package/dist/esm/motion/neon/frame.d.ts.map +1 -0
  470. package/dist/esm/motion/neon/frame.js +20 -0
  471. package/dist/esm/motion/neon/frame.js.map +1 -0
  472. package/dist/esm/motion/neon/glitch.d.ts +64 -0
  473. package/dist/esm/motion/neon/glitch.d.ts.map +1 -0
  474. package/dist/esm/motion/neon/glitch.js +108 -0
  475. package/dist/esm/motion/neon/glitch.js.map +1 -0
  476. package/dist/esm/motion/neon/index.d.ts +29 -0
  477. package/dist/esm/motion/neon/index.d.ts.map +1 -0
  478. package/dist/esm/motion/neon/index.js +28 -0
  479. package/dist/esm/motion/neon/index.js.map +1 -0
  480. package/dist/esm/motion/neon/layers.d.ts +56 -0
  481. package/dist/esm/motion/neon/layers.d.ts.map +1 -0
  482. package/dist/esm/motion/neon/layers.js +64 -0
  483. package/dist/esm/motion/neon/layers.js.map +1 -0
  484. package/dist/esm/motion/neon/material.d.ts +68 -0
  485. package/dist/esm/motion/neon/material.d.ts.map +1 -0
  486. package/dist/esm/motion/neon/material.js +51 -0
  487. package/dist/esm/motion/neon/material.js.map +1 -0
  488. package/dist/esm/motion/neon/random.d.ts +15 -0
  489. package/dist/esm/motion/neon/random.d.ts.map +1 -0
  490. package/dist/esm/motion/neon/random.js +37 -0
  491. package/dist/esm/motion/neon/random.js.map +1 -0
  492. package/dist/esm/motion/neon/scene.d.ts +255 -0
  493. package/dist/esm/motion/neon/scene.d.ts.map +1 -0
  494. package/dist/esm/motion/neon/scene.js +532 -0
  495. package/dist/esm/motion/neon/scene.js.map +1 -0
  496. package/dist/esm/motion/neon/synth.d.ts +18 -0
  497. package/dist/esm/motion/neon/synth.d.ts.map +1 -0
  498. package/dist/esm/motion/neon/synth.js +208 -0
  499. package/dist/esm/motion/neon/synth.js.map +1 -0
  500. package/dist/esm/motion/neon/typography.d.ts +53 -0
  501. package/dist/esm/motion/neon/typography.d.ts.map +1 -0
  502. package/dist/esm/motion/neon/typography.js +74 -0
  503. package/dist/esm/motion/neon/typography.js.map +1 -0
  504. package/dist/esm/motion/neon/wall.d.ts +62 -0
  505. package/dist/esm/motion/neon/wall.d.ts.map +1 -0
  506. package/dist/esm/motion/neon/wall.js +106 -0
  507. package/dist/esm/motion/neon/wall.js.map +1 -0
  508. package/dist/esm/motion/paperfold/PaperFold.d.ts +36 -0
  509. package/dist/esm/motion/paperfold/PaperFold.d.ts.map +1 -0
  510. package/dist/esm/motion/paperfold/PaperFold.js +37 -0
  511. package/dist/esm/motion/paperfold/PaperFold.js.map +1 -0
  512. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts +39 -0
  513. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts.map +1 -0
  514. package/dist/esm/motion/paperfold/PaperFoldFrame.js +283 -0
  515. package/dist/esm/motion/paperfold/PaperFoldFrame.js.map +1 -0
  516. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts +27 -0
  517. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts.map +1 -0
  518. package/dist/esm/motion/paperfold/PaperFoldPlayer.js +56 -0
  519. package/dist/esm/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  520. package/dist/esm/motion/paperfold/art.d.ts +148 -0
  521. package/dist/esm/motion/paperfold/art.d.ts.map +1 -0
  522. package/dist/esm/motion/paperfold/art.js +374 -0
  523. package/dist/esm/motion/paperfold/art.js.map +1 -0
  524. package/dist/esm/motion/paperfold/config.d.ts +47 -0
  525. package/dist/esm/motion/paperfold/config.d.ts.map +1 -0
  526. package/dist/esm/motion/paperfold/config.js +96 -0
  527. package/dist/esm/motion/paperfold/config.js.map +1 -0
  528. package/dist/esm/motion/paperfold/controls.d.ts +57 -0
  529. package/dist/esm/motion/paperfold/controls.d.ts.map +1 -0
  530. package/dist/esm/motion/paperfold/controls.js +506 -0
  531. package/dist/esm/motion/paperfold/controls.js.map +1 -0
  532. package/dist/esm/motion/paperfold/engine.d.ts +397 -0
  533. package/dist/esm/motion/paperfold/engine.d.ts.map +1 -0
  534. package/dist/esm/motion/paperfold/engine.js +699 -0
  535. package/dist/esm/motion/paperfold/engine.js.map +1 -0
  536. package/dist/esm/motion/paperfold/fonts.d.ts +3 -0
  537. package/dist/esm/motion/paperfold/fonts.d.ts.map +1 -0
  538. package/dist/esm/motion/paperfold/fonts.js +21 -0
  539. package/dist/esm/motion/paperfold/fonts.js.map +1 -0
  540. package/dist/esm/motion/paperfold/index.d.ts +17 -0
  541. package/dist/esm/motion/paperfold/index.d.ts.map +1 -0
  542. package/dist/esm/motion/paperfold/index.js +17 -0
  543. package/dist/esm/motion/paperfold/index.js.map +1 -0
  544. package/dist/esm/motion/paperfold/manipulate.d.ts +59 -0
  545. package/dist/esm/motion/paperfold/manipulate.d.ts.map +1 -0
  546. package/dist/esm/motion/paperfold/manipulate.js +161 -0
  547. package/dist/esm/motion/paperfold/manipulate.js.map +1 -0
  548. package/dist/esm/motion/paperfold/presets.d.ts +9 -0
  549. package/dist/esm/motion/paperfold/presets.d.ts.map +1 -0
  550. package/dist/esm/motion/paperfold/presets.js +115 -0
  551. package/dist/esm/motion/paperfold/presets.js.map +1 -0
  552. package/dist/esm/motion/paperfold/template.d.ts +3 -0
  553. package/dist/esm/motion/paperfold/template.d.ts.map +1 -0
  554. package/dist/esm/motion/paperfold/template.js +37 -0
  555. package/dist/esm/motion/paperfold/template.js.map +1 -0
  556. package/dist/esm/motion/player.d.ts +35 -0
  557. package/dist/esm/motion/player.d.ts.map +1 -0
  558. package/dist/esm/motion/player.js +197 -0
  559. package/dist/esm/motion/player.js.map +1 -0
  560. package/dist/esm/motion/promo/PromoFrame.d.ts +31 -0
  561. package/dist/esm/motion/promo/PromoFrame.d.ts.map +1 -0
  562. package/dist/esm/motion/promo/PromoFrame.js +288 -0
  563. package/dist/esm/motion/promo/PromoFrame.js.map +1 -0
  564. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts +25 -0
  565. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts.map +1 -0
  566. package/dist/esm/motion/promo/PromoShowcasePlayer.js +56 -0
  567. package/dist/esm/motion/promo/PromoShowcasePlayer.js.map +1 -0
  568. package/dist/esm/motion/promo/config.d.ts +91 -0
  569. package/dist/esm/motion/promo/config.d.ts.map +1 -0
  570. package/dist/esm/motion/promo/config.js +550 -0
  571. package/dist/esm/motion/promo/config.js.map +1 -0
  572. package/dist/esm/motion/promo/controls.d.ts +86 -0
  573. package/dist/esm/motion/promo/controls.d.ts.map +1 -0
  574. package/dist/esm/motion/promo/controls.js +567 -0
  575. package/dist/esm/motion/promo/controls.js.map +1 -0
  576. package/dist/esm/motion/promo/easing.d.ts +3 -0
  577. package/dist/esm/motion/promo/easing.d.ts.map +1 -0
  578. package/dist/esm/motion/promo/easing.js +32 -0
  579. package/dist/esm/motion/promo/easing.js.map +1 -0
  580. package/dist/esm/motion/promo/engine.d.ts +205 -0
  581. package/dist/esm/motion/promo/engine.d.ts.map +1 -0
  582. package/dist/esm/motion/promo/engine.js +551 -0
  583. package/dist/esm/motion/promo/engine.js.map +1 -0
  584. package/dist/esm/motion/promo/fonts.d.ts +7 -0
  585. package/dist/esm/motion/promo/fonts.d.ts.map +1 -0
  586. package/dist/esm/motion/promo/fonts.js +16 -0
  587. package/dist/esm/motion/promo/fonts.js.map +1 -0
  588. package/dist/esm/motion/promo/icons.d.ts +7 -0
  589. package/dist/esm/motion/promo/icons.d.ts.map +1 -0
  590. package/dist/esm/motion/promo/icons.js +26 -0
  591. package/dist/esm/motion/promo/icons.js.map +1 -0
  592. package/dist/esm/motion/promo/index.d.ts +15 -0
  593. package/dist/esm/motion/promo/index.d.ts.map +1 -0
  594. package/dist/esm/motion/promo/index.js +15 -0
  595. package/dist/esm/motion/promo/index.js.map +1 -0
  596. package/dist/esm/motion/promo/presets.d.ts +13 -0
  597. package/dist/esm/motion/promo/presets.d.ts.map +1 -0
  598. package/dist/esm/motion/promo/presets.js +40 -0
  599. package/dist/esm/motion/promo/presets.js.map +1 -0
  600. package/dist/esm/motion/promo/template.d.ts +8 -0
  601. package/dist/esm/motion/promo/template.d.ts.map +1 -0
  602. package/dist/esm/motion/promo/template.js +35 -0
  603. package/dist/esm/motion/promo/template.js.map +1 -0
  604. package/dist/esm/motion/replication2/Replication2Player.d.ts +26 -0
  605. package/dist/esm/motion/replication2/Replication2Player.d.ts.map +1 -0
  606. package/dist/esm/motion/replication2/Replication2Player.js +90 -0
  607. package/dist/esm/motion/replication2/Replication2Player.js.map +1 -0
  608. package/dist/esm/motion/replication2/config.d.ts +78 -0
  609. package/dist/esm/motion/replication2/config.d.ts.map +1 -0
  610. package/dist/esm/motion/replication2/config.js +341 -0
  611. package/dist/esm/motion/replication2/config.js.map +1 -0
  612. package/dist/esm/motion/replication2/controls.d.ts +70 -0
  613. package/dist/esm/motion/replication2/controls.d.ts.map +1 -0
  614. package/dist/esm/motion/replication2/controls.js +283 -0
  615. package/dist/esm/motion/replication2/controls.js.map +1 -0
  616. package/dist/esm/motion/replication2/driver.d.ts +23 -0
  617. package/dist/esm/motion/replication2/driver.d.ts.map +1 -0
  618. package/dist/esm/motion/replication2/driver.js +65 -0
  619. package/dist/esm/motion/replication2/driver.js.map +1 -0
  620. package/dist/esm/motion/replication2/easing.d.ts +19 -0
  621. package/dist/esm/motion/replication2/easing.d.ts.map +1 -0
  622. package/dist/esm/motion/replication2/easing.js +92 -0
  623. package/dist/esm/motion/replication2/easing.js.map +1 -0
  624. package/dist/esm/motion/replication2/engine.d.ts +236 -0
  625. package/dist/esm/motion/replication2/engine.d.ts.map +1 -0
  626. package/dist/esm/motion/replication2/engine.js +470 -0
  627. package/dist/esm/motion/replication2/engine.js.map +1 -0
  628. package/dist/esm/motion/replication2/html.d.ts +30 -0
  629. package/dist/esm/motion/replication2/html.d.ts.map +1 -0
  630. package/dist/esm/motion/replication2/html.js +83 -0
  631. package/dist/esm/motion/replication2/html.js.map +1 -0
  632. package/dist/esm/motion/replication2/index.d.ts +15 -0
  633. package/dist/esm/motion/replication2/index.d.ts.map +1 -0
  634. package/dist/esm/motion/replication2/index.js +15 -0
  635. package/dist/esm/motion/replication2/index.js.map +1 -0
  636. package/dist/esm/motion/replication2/measure.d.ts +3 -0
  637. package/dist/esm/motion/replication2/measure.d.ts.map +1 -0
  638. package/dist/esm/motion/replication2/measure.js +27 -0
  639. package/dist/esm/motion/replication2/measure.js.map +1 -0
  640. package/dist/esm/motion/replication2/metrics.d.ts +6 -0
  641. package/dist/esm/motion/replication2/metrics.d.ts.map +1 -0
  642. package/dist/esm/motion/replication2/metrics.js +7 -0
  643. package/dist/esm/motion/replication2/metrics.js.map +1 -0
  644. package/dist/esm/motion/replication2/presets.d.ts +13 -0
  645. package/dist/esm/motion/replication2/presets.d.ts.map +1 -0
  646. package/dist/esm/motion/replication2/presets.js +63 -0
  647. package/dist/esm/motion/replication2/presets.js.map +1 -0
  648. package/dist/esm/motion/replication2/riv.d.ts +3 -0
  649. package/dist/esm/motion/replication2/riv.d.ts.map +1 -0
  650. package/dist/esm/motion/replication2/riv.js +4 -0
  651. package/dist/esm/motion/replication2/riv.js.map +1 -0
  652. package/dist/esm/motion/replication2/rive-contract.d.ts +27 -0
  653. package/dist/esm/motion/replication2/rive-contract.d.ts.map +1 -0
  654. package/dist/esm/motion/replication2/rive-contract.js +153 -0
  655. package/dist/esm/motion/replication2/rive-contract.js.map +1 -0
  656. package/dist/esm/motion/replication2/template.d.ts +8 -0
  657. package/dist/esm/motion/replication2/template.d.ts.map +1 -0
  658. package/dist/esm/motion/replication2/template.js +32 -0
  659. package/dist/esm/motion/replication2/template.js.map +1 -0
  660. package/dist/esm/motion/sample.d.ts +61 -0
  661. package/dist/esm/motion/sample.d.ts.map +1 -0
  662. package/dist/esm/motion/sample.js +138 -0
  663. package/dist/esm/motion/sample.js.map +1 -0
  664. package/dist/esm/motion/templates/hey-template.d.ts +3 -0
  665. package/dist/esm/motion/templates/hey-template.d.ts.map +1 -0
  666. package/dist/esm/motion/templates/hey-template.js +1549 -0
  667. package/dist/esm/motion/templates/hey-template.js.map +1 -0
  668. package/dist/esm/motion/templates/index.d.ts +22 -0
  669. package/dist/esm/motion/templates/index.d.ts.map +1 -0
  670. package/dist/esm/motion/templates/index.js +15 -0
  671. package/dist/esm/motion/templates/index.js.map +1 -0
  672. package/dist/esm/motion/templates/word-motion.d.ts +3 -0
  673. package/dist/esm/motion/templates/word-motion.d.ts.map +1 -0
  674. package/dist/esm/motion/templates/word-motion.js +1162 -0
  675. package/dist/esm/motion/templates/word-motion.js.map +1 -0
  676. package/dist/esm/motion/types.d.ts +192 -0
  677. package/dist/esm/motion/types.d.ts.map +1 -0
  678. package/dist/esm/motion/types.js +2 -0
  679. package/dist/esm/motion/types.js.map +1 -0
  680. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts +32 -0
  681. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts.map +1 -0
  682. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js +81 -0
  683. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  684. package/dist/esm/motion/typesurface/art.d.ts +21 -0
  685. package/dist/esm/motion/typesurface/art.d.ts.map +1 -0
  686. package/dist/esm/motion/typesurface/art.js +854 -0
  687. package/dist/esm/motion/typesurface/art.js.map +1 -0
  688. package/dist/esm/motion/typesurface/config.d.ts +284 -0
  689. package/dist/esm/motion/typesurface/config.d.ts.map +1 -0
  690. package/dist/esm/motion/typesurface/config.js +280 -0
  691. package/dist/esm/motion/typesurface/config.js.map +1 -0
  692. package/dist/esm/motion/typesurface/construct.d.ts +284 -0
  693. package/dist/esm/motion/typesurface/construct.d.ts.map +1 -0
  694. package/dist/esm/motion/typesurface/construct.js +866 -0
  695. package/dist/esm/motion/typesurface/construct.js.map +1 -0
  696. package/dist/esm/motion/typesurface/engine.d.ts +102 -0
  697. package/dist/esm/motion/typesurface/engine.d.ts.map +1 -0
  698. package/dist/esm/motion/typesurface/engine.js +627 -0
  699. package/dist/esm/motion/typesurface/engine.js.map +1 -0
  700. package/dist/esm/motion/typesurface/fonts.d.ts +25 -0
  701. package/dist/esm/motion/typesurface/fonts.d.ts.map +1 -0
  702. package/dist/esm/motion/typesurface/fonts.js +40 -0
  703. package/dist/esm/motion/typesurface/fonts.js.map +1 -0
  704. package/dist/esm/motion/typesurface/index.d.ts +21 -0
  705. package/dist/esm/motion/typesurface/index.d.ts.map +1 -0
  706. package/dist/esm/motion/typesurface/index.js +21 -0
  707. package/dist/esm/motion/typesurface/index.js.map +1 -0
  708. package/dist/esm/motion/typesurface/layout.d.ts +57 -0
  709. package/dist/esm/motion/typesurface/layout.d.ts.map +1 -0
  710. package/dist/esm/motion/typesurface/layout.js +122 -0
  711. package/dist/esm/motion/typesurface/layout.js.map +1 -0
  712. package/dist/esm/motion/typesurface/ops.d.ts +70 -0
  713. package/dist/esm/motion/typesurface/ops.d.ts.map +1 -0
  714. package/dist/esm/motion/typesurface/ops.js +164 -0
  715. package/dist/esm/motion/typesurface/ops.js.map +1 -0
  716. package/dist/esm/motion/typesurface/presets.d.ts +51 -0
  717. package/dist/esm/motion/typesurface/presets.d.ts.map +1 -0
  718. package/dist/esm/motion/typesurface/presets.js +250 -0
  719. package/dist/esm/motion/typesurface/presets.js.map +1 -0
  720. package/dist/esm/motion/typesurface/renderer.d.ts +88 -0
  721. package/dist/esm/motion/typesurface/renderer.d.ts.map +1 -0
  722. package/dist/esm/motion/typesurface/renderer.js +732 -0
  723. package/dist/esm/motion/typesurface/renderer.js.map +1 -0
  724. package/dist/esm/motion/typesurface/shaders.d.ts +17 -0
  725. package/dist/esm/motion/typesurface/shaders.d.ts.map +1 -0
  726. package/dist/esm/motion/typesurface/shaders.js +319 -0
  727. package/dist/esm/motion/typesurface/shaders.js.map +1 -0
  728. package/dist/esm/motion/typesurface/surfaces.d.ts +108 -0
  729. package/dist/esm/motion/typesurface/surfaces.d.ts.map +1 -0
  730. package/dist/esm/motion/typesurface/surfaces.js +216 -0
  731. package/dist/esm/motion/typesurface/surfaces.js.map +1 -0
  732. package/dist/esm/motion/typesurface/text.d.ts +17 -0
  733. package/dist/esm/motion/typesurface/text.d.ts.map +1 -0
  734. package/dist/esm/motion/typesurface/text.js +28 -0
  735. package/dist/esm/motion/typesurface/text.js.map +1 -0
  736. package/dist/esm/motion/typesurface/timeline.d.ts +15 -0
  737. package/dist/esm/motion/typesurface/timeline.d.ts.map +1 -0
  738. package/dist/esm/motion/typesurface/timeline.js +57 -0
  739. package/dist/esm/motion/typesurface/timeline.js.map +1 -0
  740. package/dist/esm/motion/validate.d.ts +22 -0
  741. package/dist/esm/motion/validate.d.ts.map +1 -0
  742. package/dist/esm/motion/validate.js +84 -0
  743. package/dist/esm/motion/validate.js.map +1 -0
  744. package/dist/esm/native/RiveReceiptStage.d.ts +25 -2
  745. package/dist/esm/native/RiveReceiptStage.d.ts.map +1 -1
  746. package/dist/esm/native/RiveReceiptStage.js +7 -148
  747. package/dist/esm/native/RiveReceiptStage.js.map +1 -1
  748. package/dist/esm/native/riveReceiptStageFactory.d.ts +26 -0
  749. package/dist/esm/native/riveReceiptStageFactory.d.ts.map +1 -0
  750. package/dist/esm/native/riveReceiptStageFactory.js +159 -0
  751. package/dist/esm/native/riveReceiptStageFactory.js.map +1 -0
  752. package/dist/esm/tokens/stage.d.ts +7 -0
  753. package/dist/esm/tokens/stage.d.ts.map +1 -0
  754. package/dist/esm/tokens/stage.js +7 -0
  755. package/dist/esm/tokens/stage.js.map +1 -0
  756. package/docs/TYPE-SURFACE.md +183 -0
  757. package/package.json +38 -2
  758. package/spec/examples/components/onboarding/animated-status/case1.json +42 -0
  759. package/spec/examples/components/onboarding/animated-status/case2.json +42 -0
  760. package/spec/examples/components/onboarding/animated-status/case3.json +42 -0
  761. package/spec/examples/components/onboarding/animated-status/case4.json +42 -0
  762. package/spec/examples/components/onboarding/animated-status/case5.json +42 -0
  763. package/spec/examples/components/onboarding/send-completion/case1.json +48 -0
  764. package/spec/examples/components/onboarding/send-completion/case2.json +48 -0
  765. package/spec/examples/components/onboarding/send-completion/case3.json +48 -0
  766. package/spec/examples/components/onboarding/send-completion/case4.json +48 -0
  767. package/spec/examples/components/onboarding/send-completion/case5.json +48 -0
  768. package/spec/families/onboarding.schema.json +610 -1
  769. package/src/agent/AgentComponent.tsx +1 -1
  770. package/src/agent/manifests.ts +83 -1
  771. package/src/agent/result.ts +6 -0
  772. package/src/agent/types.ts +1 -1
  773. package/src/components/catalog.ts +21 -1
  774. package/src/components/onboarding/animated-status/AnimatedStage.tsx +18 -0
  775. package/src/components/onboarding/animated-status/AnimatedStage.types.ts +30 -0
  776. package/src/components/onboarding/animated-status/AnimatedStage.web.tsx +99 -0
  777. package/src/components/onboarding/animated-status/AnimatedStatusView.tsx +109 -0
  778. package/src/components/onboarding/animated-status/AnimatedStill.tsx +23 -0
  779. package/src/components/onboarding/animated-status/contract.ts +105 -0
  780. package/src/components/onboarding/animated-status/engine.ts +49 -0
  781. package/src/components/onboarding/animated-status/index.ts +8 -0
  782. package/src/components/onboarding/animated-status/presets.json +126 -0
  783. package/src/components/onboarding/animated-status/riv.ts +4 -0
  784. package/src/components/onboarding/index.ts +4 -0
  785. package/src/components/onboarding/presets.ts +6 -0
  786. package/src/components/onboarding/receipt-printer/ReceiptStage.tsx +46 -7
  787. package/src/components/onboarding/send-completion/SendCompletionView.tsx +164 -0
  788. package/src/components/onboarding/send-completion/SendStage.tsx +27 -0
  789. package/src/components/onboarding/send-completion/SendStage.types.ts +32 -0
  790. package/src/components/onboarding/send-completion/SendStage.web.tsx +116 -0
  791. package/src/components/onboarding/send-completion/SendStill.tsx +19 -0
  792. package/src/components/onboarding/send-completion/contract.ts +127 -0
  793. package/src/components/onboarding/send-completion/engine.ts +37 -0
  794. package/src/components/onboarding/send-completion/index.ts +10 -0
  795. package/src/components/onboarding/send-completion/presets.json +132 -0
  796. package/src/components/onboarding/send-completion/riv.ts +4 -0
  797. package/src/components/onboarding/shared/actions-data.ts +2 -0
  798. package/src/components/onboarding/shared/configColor.ts +72 -0
  799. package/src/components/onboarding/shared/contract.ts +4 -0
  800. package/src/components/onboarding/shared/describe.ts +1 -1
  801. package/src/components/onboarding/shared/mock.ts +2 -0
  802. package/src/components/onboarding/views.ts +8 -0
  803. package/src/motion/MotionPlayer.tsx +62 -0
  804. package/src/motion/agent.ts +288 -0
  805. package/src/motion/cat/Cat.tsx +118 -0
  806. package/src/motion/cat/animation.ts +206 -0
  807. package/src/motion/cat/art.generated.ts +44 -0
  808. package/src/motion/cat/config.ts +186 -0
  809. package/src/motion/cat/index.ts +26 -0
  810. package/src/motion/cat/rig.ts +102 -0
  811. package/src/motion/cat/scene.ts +181 -0
  812. package/src/motion/configurable/config.ts +420 -0
  813. package/src/motion/configurable/controls.ts +93 -0
  814. package/src/motion/easing.ts +55 -0
  815. package/src/motion/fit.ts +8 -0
  816. package/src/motion/index.ts +29 -0
  817. package/src/motion/neon/GlowRenderer.tsx +83 -0
  818. package/src/motion/neon/NeonCanvas.tsx +175 -0
  819. package/src/motion/neon/NeonText.tsx +113 -0
  820. package/src/motion/neon/NeonTextFrame.tsx +67 -0
  821. package/src/motion/neon/artwork.ts +95 -0
  822. package/src/motion/neon/audio.ts +162 -0
  823. package/src/motion/neon/config.ts +484 -0
  824. package/src/motion/neon/flicker.ts +225 -0
  825. package/src/motion/neon/fonts.ts +76 -0
  826. package/src/motion/neon/frame.ts +34 -0
  827. package/src/motion/neon/glitch.ts +142 -0
  828. package/src/motion/neon/index.ts +41 -0
  829. package/src/motion/neon/layers.tsx +209 -0
  830. package/src/motion/neon/material.ts +88 -0
  831. package/src/motion/neon/random.ts +40 -0
  832. package/src/motion/neon/scene.ts +610 -0
  833. package/src/motion/neon/synth.ts +188 -0
  834. package/src/motion/neon/typography.ts +102 -0
  835. package/src/motion/neon/wall.ts +157 -0
  836. package/src/motion/paperfold/PaperFold.tsx +45 -0
  837. package/src/motion/paperfold/PaperFoldFrame.tsx +576 -0
  838. package/src/motion/paperfold/PaperFoldPlayer.tsx +80 -0
  839. package/src/motion/paperfold/art.ts +455 -0
  840. package/src/motion/paperfold/config.ts +98 -0
  841. package/src/motion/paperfold/controls.ts +557 -0
  842. package/src/motion/paperfold/engine.ts +852 -0
  843. package/src/motion/paperfold/fonts.ts +21 -0
  844. package/src/motion/paperfold/index.ts +30 -0
  845. package/src/motion/paperfold/manipulate.ts +188 -0
  846. package/src/motion/paperfold/presets.ts +117 -0
  847. package/src/motion/paperfold/template.ts +38 -0
  848. package/src/motion/player.ts +207 -0
  849. package/src/motion/promo/PromoFrame.tsx +501 -0
  850. package/src/motion/promo/PromoShowcasePlayer.tsx +78 -0
  851. package/src/motion/promo/config.ts +479 -0
  852. package/src/motion/promo/controls.ts +643 -0
  853. package/src/motion/promo/easing.ts +36 -0
  854. package/src/motion/promo/engine.ts +587 -0
  855. package/src/motion/promo/fonts.ts +16 -0
  856. package/src/motion/promo/icons.tsx +29 -0
  857. package/src/motion/promo/index.ts +24 -0
  858. package/src/motion/promo/presets.ts +40 -0
  859. package/src/motion/promo/template.ts +36 -0
  860. package/src/motion/replication2/Replication2Player.tsx +115 -0
  861. package/src/motion/replication2/config.ts +323 -0
  862. package/src/motion/replication2/controls.ts +336 -0
  863. package/src/motion/replication2/driver.ts +92 -0
  864. package/src/motion/replication2/easing.ts +88 -0
  865. package/src/motion/replication2/engine.ts +539 -0
  866. package/src/motion/replication2/html.ts +87 -0
  867. package/src/motion/replication2/index.ts +14 -0
  868. package/src/motion/replication2/measure.ts +28 -0
  869. package/src/motion/replication2/metrics.ts +7 -0
  870. package/src/motion/replication2/presets.ts +63 -0
  871. package/src/motion/replication2/riv.ts +4 -0
  872. package/src/motion/replication2/rive-contract.ts +165 -0
  873. package/src/motion/replication2/template.ts +33 -0
  874. package/src/motion/sample.ts +173 -0
  875. package/src/motion/templates/hey-template.ts +1553 -0
  876. package/src/motion/templates/index.ts +17 -0
  877. package/src/motion/templates/word-motion.ts +1166 -0
  878. package/src/motion/types.ts +162 -0
  879. package/src/motion/typesurface/TypeSurfaceCanvas.tsx +101 -0
  880. package/src/motion/typesurface/art.ts +639 -0
  881. package/src/motion/typesurface/config.ts +512 -0
  882. package/src/motion/typesurface/construct.ts +828 -0
  883. package/src/motion/typesurface/engine.ts +612 -0
  884. package/src/motion/typesurface/fonts.ts +63 -0
  885. package/src/motion/typesurface/index.ts +20 -0
  886. package/src/motion/typesurface/layout.ts +133 -0
  887. package/src/motion/typesurface/ops.ts +196 -0
  888. package/src/motion/typesurface/presets.ts +271 -0
  889. package/src/motion/typesurface/renderer.ts +639 -0
  890. package/src/motion/typesurface/shaders.ts +325 -0
  891. package/src/motion/typesurface/surfaces.ts +300 -0
  892. package/src/motion/typesurface/text.ts +35 -0
  893. package/src/motion/typesurface/timeline.ts +58 -0
  894. package/src/motion/validate.ts +101 -0
  895. package/src/native/RiveReceiptStage.tsx +8 -155
  896. package/src/native/riveReceiptStageFactory.tsx +175 -0
  897. package/src/tokens/stage.ts +6 -0
  898. package/tools/ask/dist/components.mjs +8010 -88
  899. package/tools/ask/dist/neon.js +69 -0
  900. package/tools/ask/mcp.mjs +166 -2
  901. package/tools/ask/neon-render.mjs +143 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * **Typography × surface** — text that physically meets a surface: it wraps, morphs, folds,
3
+ * crumples, rolls and finally prints into the material. `docs/TYPE-SURFACE.md`.
4
+ *
5
+ * text → layout (TextGeometry) → surface pipeline (SurfaceMapping) → deformation → material → renderer
6
+ *
7
+ * The text meets a built-in surface, or an object composed from primitives (`construct.ts`):
8
+ * `describeConstruction()` is the manifest an agent reads to build one.
9
+ */
10
+ export * from './config';
11
+ export { stageEnvelope, envelopes, configAt, stageLabels, activeStage } from './timeline';
12
+ export { bend, bendDistance, roll, cylinder, crumpleCreases, crumpleField, rotate, smoothstep, type Bend, type Roll, type Crease, type Vec3 } from './ops';
13
+ export * from './construct';
14
+ export { SURFACES, registerSurface, getSurface, hasSurface, listSurfaces, objectSurface, surfaceFor, type SurfaceDef, type SurfaceState, type SurfaceShading, type TableStyle } from './surfaces';
15
+ export { layoutText, estimateMeasurer, morphGap, glyphShift, glyphAt, type TSMeasurer, type TSGlyph, type TSLine, type TSTextLayout } from './layout';
16
+ export { createGeometryEngine, textVertexOnSheet, type GeometryEngine, type SceneGeometry, type TextMesh, type PropMesh, type PropRange, type Guides } from './engine';
17
+ export { TYPE_SURFACE_PRESETS, findTypeSurfacePreset, applySurfaceState, switchSurface, withObject, fitObjectText, createTypeSurface, type TypeSurfacePreset, type TypeSurfaceShorthand } from './presets';
18
+ export { TS_FONTS, TS_FONT_CATEGORIES, findTypeSurfaceFont, typeSurfaceFontsUrl, type TSFont, type TSFontCategory } from './fonts';
19
+ export { TypeSurfaceRenderer, drawDebugOverlay, cameraFor, type TSDebug } from './renderer';
20
+ export { TypeSurfaceCanvas, type TypeSurfaceCanvasProps } from './TypeSurfaceCanvas';
@@ -0,0 +1,133 @@
1
+ /**
2
+ * **Text geometry.** The text is laid out once into a block (surface units): lines, and each
3
+ * glyph's box on its line. The raster draws exactly this layout, and the mesh uses the glyph boxes
4
+ * to land letters one by one (morph) and to spread them apart mid-morph. Kerning is kept: a
5
+ * glyph's position is the width of everything before it on the line. Pure; the width of a string
6
+ * comes from a measurer (a canvas in the browser, an estimate on a server).
7
+ */
8
+ import type { TSTypography } from './config';
9
+
10
+ /** Width of `text` in surface units at `typography.fontSize`, letter spacing excluded. */
11
+ export type TSMeasurer = (text: string, typography: TSTypography) => number;
12
+
13
+ export type TSGlyph = { ch: string; x0: number; x1: number; order: number };
14
+ export type TSLine = { text: string; glyphs: TSGlyph[]; left: number; width: number; top: number; baseline: number; bottom: number };
15
+ export type TSTextLayout = {
16
+ /** Block size, surface units, padding included. */
17
+ width: number;
18
+ height: number;
19
+ pad: number;
20
+ fontSize: number;
21
+ lines: TSLine[];
22
+ /** Glyphs that are not spaces, in reading order. */
23
+ glyphCount: number;
24
+ };
25
+
26
+ const NARROW = new Set([...'iljtfr.,:;!|\'`I1()[]{} ']);
27
+ const WIDE = new Set([...'MWmw@%&']);
28
+
29
+ /** A font-free width estimate: good enough for a server render or a test. */
30
+ export const estimateMeasurer: TSMeasurer = (text, t) => {
31
+ const fam = t.fontFamily.toLowerCase();
32
+ const mono = /mono|courier|code/.test(fam);
33
+ const condensed = /condensed|oswald|bebas|anton|league gothic|narrow|compressed/.test(fam);
34
+ let w = 0;
35
+ for (const ch of text) {
36
+ if (mono) { w += 0.6; continue; }
37
+ if (ch === ' ') w += 0.27;
38
+ else if (NARROW.has(ch)) w += 0.3;
39
+ else if (WIDE.has(ch)) w += 0.86;
40
+ else if (ch >= 'A' && ch <= 'Z') w += 0.66;
41
+ else if (ch >= '0' && ch <= '9') w += 0.56;
42
+ else w += 0.52;
43
+ }
44
+ const weight = 1 + (t.fontWeight - 400) / 2200;
45
+ return w * t.fontSize * weight * (condensed ? 0.7 : 1);
46
+ };
47
+
48
+ function wrapLine(line: string, maxWidth: number, width: (s: string) => number): string[] {
49
+ if (maxWidth <= 0 || width(line) <= maxWidth) return [line];
50
+ const words = line.split(/(\s+)/);
51
+ const out: string[] = [];
52
+ let cur = '';
53
+ for (const w of words) {
54
+ const next = cur + w;
55
+ if (cur.trim() && width(next.trimEnd()) > maxWidth) {
56
+ out.push(cur.trimEnd());
57
+ cur = w.trimStart();
58
+ } else cur = next;
59
+ }
60
+ if (cur.trim()) out.push(cur.trimEnd());
61
+ return out.length ? out : [line];
62
+ }
63
+
64
+ /** Lay out `text` as a block. Pure. */
65
+ export function layoutText(text: string, t: TSTypography, maxWidth: number, measure: TSMeasurer = estimateMeasurer): TSTextLayout {
66
+ const fs = t.fontSize;
67
+ const ls = t.letterSpacing;
68
+ const chars = (s: string) => [...s];
69
+ const width = (s: string) => {
70
+ const n = chars(s).length;
71
+ return n ? measure(s, t) + ls * (n - 1) : 0;
72
+ };
73
+ const rows = (text || ' ').split('\n').flatMap((l) => wrapLine(l, maxWidth, width));
74
+ const pad = Math.round(fs * 0.45 + 12);
75
+ const pitch = fs * t.lineHeight;
76
+ const widths = rows.map(width);
77
+ const inner = Math.max(1, ...widths);
78
+ let order = 0;
79
+ const lines: TSLine[] = rows.map((row, k) => {
80
+ const w = widths[k]!;
81
+ const left = pad + (t.align === 'left' ? 0 : t.align === 'right' ? inner - w : (inner - w) / 2);
82
+ const top = pad + k * pitch;
83
+ const cs = chars(row);
84
+ const glyphs: TSGlyph[] = [];
85
+ let prefix = '';
86
+ for (let i = 0; i < cs.length; i++) {
87
+ const x0 = left + (prefix ? measure(prefix, t) : 0) + ls * i;
88
+ prefix += cs[i];
89
+ const x1 = left + measure(prefix, t) + ls * i;
90
+ glyphs.push({ ch: cs[i]!, x0, x1, order: cs[i] === ' ' ? order : order++ });
91
+ }
92
+ // Cap height ≈ 0.7 em sits centred in the line.
93
+ const baseline = top + pitch / 2 + fs * 0.35;
94
+ return { text: row, glyphs, left, width: w, top, baseline, bottom: top + pitch };
95
+ });
96
+ return { width: inner + pad * 2, height: pitch * rows.length + pad * 2, pad, fontSize: fs, lines, glyphCount: order };
97
+ }
98
+
99
+ /**
100
+ * How far letters move apart at morph `m`: nothing at rest and when landed, most mid-way. Capped so
101
+ * the longest line grows by at most a quarter, and stays on the surface.
102
+ */
103
+ export function morphGap(m: number, layout: TSTextLayout): number {
104
+ const most = Math.max(2, ...layout.lines.map((l) => l.glyphs.length));
105
+ const cap = (0.25 * (layout.width - layout.pad * 2)) / (most - 1);
106
+ return Math.pow(Math.sin(Math.PI * Math.min(1, Math.max(0, m))), 1.4) * Math.min(layout.fontSize * 0.42, cap);
107
+ }
108
+
109
+ /** A glyph's sideways shift when letters are `gap` apart: centred on its line. */
110
+ export function glyphShift(line: TSLine, index: number, gap: number): number {
111
+ const n = line.glyphs.length;
112
+ return (index - (n - 1) / 2) * gap;
113
+ }
114
+
115
+ /**
116
+ * The glyph under block point (bx, by) when letters are `gap` apart, or null off the text. The
117
+ * shader runs the same search, so a vertex and the pixels around it agree on their letter.
118
+ */
119
+ export function glyphAt(layout: TSTextLayout, bx: number, by: number, gap: number): { line: number; index: number; glyph: TSGlyph; shift: number } | null {
120
+ let li = 0;
121
+ for (let k = 0; k < layout.lines.length; k++) if (by >= layout.lines[k]!.top) li = k;
122
+ const line = layout.lines[li];
123
+ if (!line || !line.glyphs.length) return null;
124
+ let best = 0, bestD = Infinity;
125
+ for (let i = 0; i < line.glyphs.length; i++) {
126
+ const g = line.glyphs[i]!;
127
+ const sh = glyphShift(line, i, gap);
128
+ const c = (g.x0 + g.x1) / 2 + sh;
129
+ const d = Math.abs(bx - c);
130
+ if (d < bestD) { bestD = d; best = i; }
131
+ }
132
+ return { line: li, index: best, glyph: line.glyphs[best]!, shift: glyphShift(line, best, gap) };
133
+ }
@@ -0,0 +1,196 @@
1
+ /**
2
+ * **Deformation operators** — the shared vocabulary every surface is built from. Each maps a point
3
+ * of a sheet to where it is after one physical operation, in place, with no allocation:
4
+ *
5
+ * bend a crease: one side rotates about a line through a rounded zone (fold, double fold)
6
+ * roll the sheet winds up from an edge onto a tightening spiral (a rolled newspaper)
7
+ * cylinder the sheet wraps a cylinder (a bottle label, a curved plate, a rolled tube)
8
+ * crumple a network of sharp creases: planar facets, ridges and valleys, and shrinkage
9
+ * rotate rigid turns of the whole object (horizontal / vertical distortion)
10
+ *
11
+ * Frame: the sheet starts in the plane z = 0, x right, y up, the printed side facing +z (the
12
+ * camera). Every operator is an isometry of the sheet, or close to one, so text on it keeps its
13
+ * length and only bends, which is what makes the letters look physically attached. Pure; no React.
14
+ */
15
+ import { hash32 } from '../neon/random';
16
+
17
+ export type Vec3 = [number, number, number];
18
+
19
+ const clamp = (v: number, lo: number, hi: number) => (v < lo ? lo : v > hi ? hi : v);
20
+ export const smoothstep = (a: number, b: number, v: number) => {
21
+ const t = clamp((v - a) / (b - a), 0, 1);
22
+ return t * t * (3 - 2 * t);
23
+ };
24
+
25
+ /* ---------------- bend (a fold) ---------------- */
26
+
27
+ /**
28
+ * A crease. `px, py` is a point on the crease line, `dx, dy` its unit direction; the moving side is
29
+ * the one `(nx, ny) = (dy, −dx)` points to. `theta` is the signed angle reached (radians; positive
30
+ * lifts toward +z) and `width` the arc length of the rounded zone. Points in the zone lie on a
31
+ * circular arc of radius width/|θ|; beyond it they turn rigidly by θ. Height above the sheet (z)
32
+ * is carried through the bend, so stacked layers and creased paper fold together. `core` widens the
33
+ * crease so layers already folded onto its inner side wrap around instead of turning inside out.
34
+ */
35
+ export type Bend = { px: number; py: number; dx: number; dy: number; theta: number; width: number; core?: number };
36
+
37
+ export function bend(p: Vec3, b: Bend): void {
38
+ if (Math.abs(b.theta) < 1e-5) return;
39
+ const nx = b.dy, ny = -b.dx;
40
+ const rx = p[0] - b.px, ry = p[1] - b.py;
41
+ const d = rx * nx + ry * ny;
42
+ if (d <= 0) return;
43
+ const t = rx * b.dx + ry * b.dy;
44
+ const h = p[2];
45
+ const w = Math.max(b.width, 1e-5);
46
+ const sig = b.theta > 0 ? 1 : -1;
47
+ const R = w / Math.abs(b.theta) + (b.core ?? 0);
48
+ const zone = Math.abs(b.theta) * R;
49
+ const s = Math.min(d, zone);
50
+ const phi = b.theta * (s / zone);
51
+ // Rotate the radial vector (0, h − σR) about the centre (0, σR) by φ.
52
+ const vy = h - sig * R;
53
+ const c = Math.cos(phi), sn = Math.sin(phi);
54
+ let dd = -vy * sn;
55
+ let zz = sig * R + vy * c;
56
+ if (d > zone) {
57
+ dd += (d - zone) * Math.cos(b.theta);
58
+ zz += (d - zone) * Math.sin(b.theta);
59
+ }
60
+ p[0] = b.px + t * b.dx + dd * nx;
61
+ p[1] = b.py + t * b.dy + dd * ny;
62
+ p[2] = zz;
63
+ }
64
+
65
+ /** Signed distance from the crease (positive on the moving side), for shading and debug. */
66
+ export function bendDistance(x: number, y: number, b: Bend): number {
67
+ return (x - b.px) * b.dy - (y - b.py) * b.dx;
68
+ }
69
+
70
+ /* ---------------- roll (a spiral from one edge) ---------------- */
71
+
72
+ /**
73
+ * The sheet winds up from an edge. `e` measures the distance from the rolling edge into the sheet
74
+ * along (ex, ey); everything nearer the edge than `reach` is wound onto a spiral whose outer radius
75
+ * is `radius` and that tightens toward the edge (the edge is the innermost turn), so turns never
76
+ * pass through each other. `sign` −1 curls away from the camera: the printed side stays outside.
77
+ */
78
+ export type Roll = { ox: number; oy: number; ex: number; ey: number; reach: number; radius: number; inner: number; length: number; sign: number };
79
+
80
+ export function roll(p: Vec3, r: Roll): void {
81
+ if (r.reach <= 1e-5) return;
82
+ const rx = p[0] - r.ox, ry = p[1] - r.oy;
83
+ const e = rx * r.ex + ry * r.ey;
84
+ if (e >= r.reach) return;
85
+ const t = rx * -r.ey + ry * r.ex;
86
+ const s = r.reach - Math.max(e, r.reach - r.length);
87
+ // r(φ) = R − kφ, s(φ) = Rφ − kφ²/2, and the spiral ends at `inner` after the whole length.
88
+ const R = r.radius;
89
+ const k = Math.max(1e-6, ((R - r.inner) * (R + r.inner)) / (2 * r.length));
90
+ const disc = Math.max(0, R * R - 2 * k * s);
91
+ const phi = (R - Math.sqrt(disc)) / k;
92
+ const rad = Math.max(1e-4, R - k * phi - r.sign * p[2]);
93
+ const ee = r.reach - rad * Math.sin(phi);
94
+ const zz = r.sign * R - rad * r.sign * Math.cos(phi);
95
+ p[0] = r.ox + ee * r.ex + t * -r.ey;
96
+ p[1] = r.oy + ee * r.ey + t * r.ex;
97
+ p[2] = zz;
98
+ }
99
+
100
+ /* ---------------- cylinder (wrap around an axis) ---------------- */
101
+
102
+ /**
103
+ * Wrap onto a cylinder whose axis is parallel to y, behind the sheet, at distance 1/κ. κ = 0 is
104
+ * flat; the front (x = 0) never moves, so the text in the middle stays put while its ends curve
105
+ * away. Arc length is kept: a label of width w covers w / radius radians.
106
+ */
107
+ export function cylinder(p: Vec3, kappa: number): void {
108
+ if (Math.abs(kappa) < 1e-6) return;
109
+ const r = 1 / kappa + p[2];
110
+ const a = p[0] * kappa;
111
+ p[0] = Math.sin(a) * r;
112
+ p[2] = Math.cos(a) * r - 1 / kappa;
113
+ }
114
+
115
+ /* ---------------- crumple (a crease network) ---------------- */
116
+
117
+ /**
118
+ * One crease of a crumple: a straight ridge (or valley) with planar flanks. Crumpled paper is a
119
+ * network of such creases; their sum gives flat facets, sharp ridges and the shrinkage the ridges
120
+ * take up.
121
+ */
122
+ export type Crease = { cx: number; cy: number; dx: number; dy: number; half: number; width: number; height: number };
123
+
124
+ /** The creases of one crumple, in sheet units where the sheet is 1 wide. Deterministic per seed. */
125
+ export function crumpleCreases(seed: number, scale: number, aspect: number): Crease[] {
126
+ const out: Crease[] = [];
127
+ const r = (i: number, salt: number) => hash32(seed, i, salt) / 4294967296;
128
+ const layer = (count: number, base: number, lenMin: number, lenMax: number, wMin: number, wMax: number, amp: number, salt: number) => {
129
+ for (let i = 0; i < count; i++) {
130
+ const a = r(i, salt + 1) * Math.PI;
131
+ const sgn = r(i, salt + 2) < 0.62 ? 1 : -1;
132
+ out.push({
133
+ cx: (r(i, salt + 3) - 0.5) * 1.25,
134
+ cy: (r(i, salt + 4) - 0.5) * 1.25 * aspect,
135
+ dx: Math.cos(a), dy: Math.sin(a),
136
+ half: (lenMin + (lenMax - lenMin) * r(i, salt + 5)) * scale * base,
137
+ width: (wMin + (wMax - wMin) * r(i, salt + 6)) * scale,
138
+ height: sgn * amp * (0.35 + 0.65 * r(i, salt + 7)),
139
+ });
140
+ }
141
+ };
142
+ const k = Math.round(26 / Math.max(0.5, scale));
143
+ layer(k, 1, 0.3, 0.85, 0.06, 0.17, 1, 10);
144
+ layer(k * 2 + 12, 1, 0.12, 0.35, 0.035, 0.08, 0.3, 20);
145
+ return out;
146
+ }
147
+
148
+ /**
149
+ * The crumple field at (x, y) (sheet units, 1 wide): `out = [dx, dy, dz]` for a unit crumple.
150
+ * `fine` keeps only the small creases, which are the wrinkles.
151
+ */
152
+ export function crumpleField(creases: readonly Crease[], x: number, y: number, out: Vec3, fine = false): void {
153
+ let dx = 0, dy = 0, dz = 0;
154
+ for (const c of creases) {
155
+ if (fine && Math.abs(c.height) > 0.5) continue;
156
+ const rx = x - c.cx, ry = y - c.cy;
157
+ const along = rx * c.dx + ry * c.dy;
158
+ const across = rx * -c.dy + ry * c.dx;
159
+ const aa = Math.abs(across);
160
+ if (aa >= c.width) continue;
161
+ const la = Math.abs(along) / c.half;
162
+ if (la >= 1) continue;
163
+ const win = la < 0.55 ? 1 : 1 - smoothstep(0.55, 1, la);
164
+ const tent = (1 - aa / c.width) * win;
165
+ dz += c.height * tent * c.width;
166
+ // The paper a ridge stands up in comes from both sides of it: pull the flanks in.
167
+ const pull = -0.12 * Math.sign(across) * Math.abs(c.height) * c.width * tent;
168
+ dx += pull * -c.dy;
169
+ dy += pull * c.dx;
170
+ }
171
+ out[0] = dx; out[1] = dy; out[2] = dz;
172
+ }
173
+
174
+ /* ---------------- rigid transforms ---------------- */
175
+
176
+ /** Rotate about the y axis (a), then x (b), then z (c), radians. */
177
+ export function rotate(p: Vec3, a: number, b: number, c: number): void {
178
+ if (a) {
179
+ const ca = Math.cos(a), sa = Math.sin(a);
180
+ const x = p[0] * ca + p[2] * sa;
181
+ p[2] = -p[0] * sa + p[2] * ca;
182
+ p[0] = x;
183
+ }
184
+ if (b) {
185
+ const cb = Math.cos(b), sb = Math.sin(b);
186
+ const y = p[1] * cb - p[2] * sb;
187
+ p[2] = p[1] * sb + p[2] * cb;
188
+ p[1] = y;
189
+ }
190
+ if (c) {
191
+ const cc = Math.cos(c), sc = Math.sin(c);
192
+ const x = p[0] * cc - p[1] * sc;
193
+ p[1] = p[0] * sc + p[1] * cc;
194
+ p[0] = x;
195
+ }
196
+ }
@@ -0,0 +1,271 @@
1
+ /* eslint-disable comppack/no-raw-colour -- preset type and ink colours are experiment content. */
2
+ /**
3
+ * **Experiments.** Each preset is a complete config: text, typography, surface and state, how far
4
+ * every transformation goes, the material, and the stages that play it. They are starting points
5
+ * for looking, not fixed animations: every value is still a slider. Plus the helpers that put a
6
+ * surface into a named state and build an experiment from a few words (for agents).
7
+ */
8
+ import { findTypeSurfaceFont } from './fonts';
9
+ import { DEFAULT_TYPE_SURFACE, REST_DEFORMATION, resolveTypeSurface, type TSStage, type TSSurfaceType, type TypeSurfaceConfig, type TypeSurfaceConfigInput } from './config';
10
+ import { createObject, OBJECT_FRONT_ARC, type TSObjectMaterialId, type TSObjectSpec } from './construct';
11
+ import { estimateMeasurer, layoutText, type TSMeasurer } from './layout';
12
+ import { getSurface, objectSurface, surfaceFor } from './surfaces';
13
+
14
+ const isObj = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v);
15
+ function merge<T>(base: T, over: unknown): T {
16
+ if (!isObj(base) || !isObj(over)) return (over === undefined ? base : over) as T;
17
+ const out: Record<string, unknown> = { ...base };
18
+ for (const [k, v] of Object.entries(over)) out[k] = merge((base as Record<string, unknown>)[k], v);
19
+ return out as T;
20
+ }
21
+
22
+ /**
23
+ * Put the surface in a named state (`SURFACES[type].states`). The surface's shape and the camera
24
+ * change; the text, and how far it has wrapped and morphed, do not.
25
+ */
26
+ export function applySurfaceState(config: TypeSurfaceConfig, stateId: string): TypeSurfaceConfig {
27
+ const def = surfaceFor(config);
28
+ const state = def.states[stateId];
29
+ if (!state) return config;
30
+ const deformation = merge(REST_DEFORMATION, state.deformation);
31
+ return {
32
+ ...config,
33
+ surface: { ...config.surface, state: stateId },
34
+ deformation: { ...deformation, wrap: config.deformation.wrap, morph: config.deformation.morph },
35
+ view: { ...config.view, roll: 0, ...state.view },
36
+ };
37
+ }
38
+
39
+ /**
40
+ * Switch surface: its default state and its natural text material, keeping the words and type.
41
+ * Stages that drive a transformation the new surface has no use for are kept; they just do nothing.
42
+ */
43
+ export function switchSurface(config: TypeSurfaceConfig, type: TSSurfaceType | string): TypeSurfaceConfig {
44
+ const def = getSurface(type);
45
+ const next: TypeSurfaceConfig = { ...config, object: null, surface: { ...config.surface, type: type as TSSurfaceType, color: null }, material: { ...config.material, ...def.material } };
46
+ return applySurfaceState(next, def.defaultState);
47
+ }
48
+
49
+ const stage = (key: TSStage['key'], start: number, end: number, label?: string, out?: [number, number]): TSStage =>
50
+ ({ key, start, end, easing: 'ease-in-out', label: label ?? key, ...(out ? { outStart: out[0], outEnd: out[1] } : {}) });
51
+
52
+ export type TypeSurfacePreset = { id: string; name: string; description: string; config: TypeSurfaceConfig };
53
+
54
+ const on = (type: TSSurfaceType, input: TypeSurfaceConfigInput): TypeSurfaceConfig => {
55
+ const def = getSurface(type);
56
+ const base = { ...DEFAULT_TYPE_SURFACE, material: { ...DEFAULT_TYPE_SURFACE.material, ...def.material } };
57
+ return resolveTypeSurface({ ...input, surface: { type, state: def.defaultState, seed: 7, color: null, ...input.surface } }, { ...base, deformation: REST_DEFORMATION });
58
+ };
59
+
60
+ /**
61
+ * Put the text on a constructed object: the object replaces the surface, the text wraps the part it
62
+ * names and prints in its own colour (not multiplied into the part's). The words and type are kept.
63
+ */
64
+ export function withObject(config: TypeSurfaceConfig, object: TSObjectSpec): TypeSurfaceConfig {
65
+ const def = objectSurface(object);
66
+ return {
67
+ ...config, object,
68
+ surface: { ...config.surface, type: 'object', state: def.defaultState, color: null },
69
+ typography: { ...config.typography, blendMode: 'normal' },
70
+ placement: { ...config.placement, x: 0.5, y: 0.5, rotation: 0 },
71
+ deformation: { ...merge(REST_DEFORMATION, def.states[def.defaultState]!.deformation), wrap: 1 },
72
+ material: { ...config.material, ...def.material, blend: 1, gloss: 0.2 },
73
+ view: { ...config.view, roll: 0 },
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Size the text to the object: as large as fits the part's front face (`OBJECT_FRONT_ARC` of its
79
+ * circumference) and the text area's height, on one block that never wraps. Without an object the
80
+ * config is returned as it is. Pass the canvas measurer in a browser for exact widths.
81
+ */
82
+ export function fitObjectText(config: TypeSurfaceConfig, measure: TSMeasurer = estimateMeasurer): TypeSurfaceConfig {
83
+ if (!config.object || !config.text.trim()) return config;
84
+ const def = objectSurface(config.object);
85
+ const arc = (def.width / def.curveRadius) * (180 / Math.PI);
86
+ const wide = 1000 * Math.min(1, OBJECT_FRONT_ARC / arc) * 0.95;
87
+ const high = 1000 * (def.height / def.width) * 0.8;
88
+ const at100 = layoutText(config.text, { ...config.typography, fontSize: 100 }, 0, measure);
89
+ const fontSize = Math.max(12, Math.min(400, Math.floor(100 * Math.min(wide / at100.width, high / at100.height))));
90
+ return { ...config, typography: { ...config.typography, fontSize }, placement: { ...config.placement, maxWidth: 0 } };
91
+ }
92
+
93
+ /** Near-white or near-black, whichever reads on a colour. */
94
+ const inkOn = (hex: string): string => {
95
+ const h = hex.length === 4 ? hex.slice(1).split('').map((c) => c + c).join('') : hex.slice(1);
96
+ const n = parseInt(h, 16);
97
+ return 0.299 * ((n >> 16) & 255) + 0.587 * ((n >> 8) & 255) + 0.114 * (n & 255) > 140 ? '#1B1D20' : '#FFFFFF';
98
+ };
99
+
100
+ const onObject = (object: TSObjectSpec, input: TypeSurfaceConfigInput): TypeSurfaceConfig =>
101
+ resolveTypeSurface(input, withObject({ ...DEFAULT_TYPE_SURFACE, deformation: REST_DEFORMATION }, object));
102
+
103
+ const ANTON = "'Anton', Impact, sans-serif";
104
+ const PLAYFAIR = "'Playfair Display', Georgia, serif";
105
+
106
+ export const TYPE_SURFACE_PRESETS: TypeSurfacePreset[] = [
107
+ {
108
+ id: 'newspaper-fold', name: 'Newspaper · Fold', description: 'The headline lands, then the page folds under through NEWS: the letters wrap round the crease and vanish beneath.',
109
+ config: on('newspaper', {
110
+ text: 'BREAKING NEWS', typography: { fontFamily: ANTON, fontSize: 132, color: '#E0271B' },
111
+ deformation: { wrap: 1, fold: { amount: 1, position: 0.7, angle: 180, width: 0.03, direction: 'under', influence: 0.8 } },
112
+ material: { blend: 0.55 },
113
+ animation: { duration: 9000, stages: [stage('wrap', 0.03, 0.22), stage('blend', 0.12, 0.28, 'print'), stage('fold', 0.32, 0.75)] },
114
+ }),
115
+ },
116
+ {
117
+ id: 'newspaper-fold-word', name: 'Newspaper · Crease through a word', description: 'The hard case: a crease runs through the middle of a word. Letters compress, turn, darken and pass behind.',
118
+ config: on('newspaper', {
119
+ text: 'EXTRAORDINARY', typography: { fontFamily: "'Playfair Display', Georgia, serif", fontWeight: 900, fontSize: 118, letterSpacing: 0, color: '#141210' },
120
+ placement: { y: 0.3 },
121
+ deformation: { wrap: 1, tiltX: -0.12, fold: { amount: 1, position: 0.5, angle: 80, width: 0.018, direction: 'over', influence: 1 } },
122
+ material: { blend: 0.9 },
123
+ animation: { duration: 7000, stages: [stage('fold', 0.1, 0.7)] },
124
+ }),
125
+ },
126
+ {
127
+ id: 'newspaper-four-folds', name: 'Newspaper · Four folds', description: 'An accordion of four creases, the farthest folded first; the last crease runs through the headline, so the lower half of the letters tilts away.',
128
+ config: on('newspaper', {
129
+ text: 'BREAKING NEWS', typography: { fontFamily: ANTON, fontSize: 150, color: '#E0271B' }, placement: { y: 0.3 },
130
+ deformation: {
131
+ wrap: 1,
132
+ fold: { amount: 1, position: 0.84, angle: 100, direction: 'under', orientation: 'horizontal', width: 0.02 },
133
+ fold2: { amount: 1, position: 0.68, angle: 100, direction: 'over', orientation: 'horizontal', width: 0.02 },
134
+ fold3: { amount: 1, position: 0.52, angle: 100, direction: 'under', orientation: 'horizontal', width: 0.02 },
135
+ fold4: { amount: 1, position: 0.31, angle: 50, direction: 'over', orientation: 'horizontal', width: 0.02, influence: 1 },
136
+ },
137
+ material: { blend: 0.85 },
138
+ animation: { duration: 10000, stages: [stage('fold', 0.05, 0.28), stage('fold2', 0.28, 0.5), stage('fold3', 0.5, 0.72), stage('fold4', 0.72, 0.94)] },
139
+ }),
140
+ },
141
+ {
142
+ id: 'newspaper-wraps', name: 'Newspaper · Wraps', description: 'Both sides wrap round rods and the bottom rolls under a third: the headline stays on the flat middle, the columns curve away.',
143
+ config: on('newspaper', {
144
+ text: 'BREAKING NEWS', typography: { fontFamily: ANTON, fontSize: 120, color: '#E0271B' }, placement: { y: 0.34 },
145
+ deformation: {
146
+ wrap: 1,
147
+ wrap1: { amount: 1, position: 0.9, radius: 0.05, angle: 190, direction: 'under', orientation: 'vertical', side: 'far' },
148
+ wrap2: { amount: 1, position: 0.1, radius: 0.05, angle: 190, direction: 'under', orientation: 'vertical', side: 'near' },
149
+ wrap3: { amount: 1, position: 0.72, radius: 0.07, angle: 210, direction: 'under', orientation: 'horizontal', side: 'far' },
150
+ wrap4: { amount: 0.6, position: 0.12, radius: 0.04, angle: 120, direction: 'over', orientation: 'horizontal', side: 'near' },
151
+ },
152
+ material: { blend: 0.8 },
153
+ animation: { duration: 10000, stages: [stage('wrap1', 0.05, 0.3, 'wrap 1'), stage('wrap2', 0.25, 0.5, 'wrap 2'), stage('wrap3', 0.5, 0.75, 'wrap 3'), stage('wrap4', 0.72, 0.95, 'wrap 4')] },
154
+ }),
155
+ },
156
+ {
157
+ id: 'newspaper-crumple', name: 'Newspaper · Crumple', description: 'Printed headline → folded once → crushed. The letters break across facets like real newsprint.',
158
+ config: on('newspaper', {
159
+ text: 'BREAKING NEWS', typography: { fontFamily: PLAYFAIR, fontWeight: 900, fontSize: 124, letterSpacing: -2, color: '#161412' },
160
+ deformation: { wrap: 1, fold: { amount: 0.55, position: 0.5, orientation: 'horizontal', direction: 'under', width: 0.05 }, crumple: { amount: 0.9, scale: 1 } },
161
+ material: { blend: 1, halftone: 0 },
162
+ animation: { duration: 9000, stages: [stage('fold', 0.08, 0.3), stage('crumple', 0.32, 0.8, 'crumple')] },
163
+ }),
164
+ },
165
+ {
166
+ id: 'newspaper-roll', name: 'Newspaper · Roll', description: 'The page rolls up from the bottom into a tube; the headline rides the outside of the roll.',
167
+ config: on('newspaper', {
168
+ text: 'BREAKING NEWS', typography: { fontFamily: ANTON, fontSize: 132, color: '#E0271B' }, placement: { y: 0.3 },
169
+ deformation: { wrap: 1, roll: { amount: 0.7, edge: 'bottom', direction: 'under', radius: 0.085 } },
170
+ material: { blend: 0.8 },
171
+ animation: { duration: 8000, stages: [stage('roll', 0.1, 0.8, 'roll')] },
172
+ }),
173
+ },
174
+ {
175
+ id: 'bottle-wrap', name: 'Bottle · Wrap', description: 'Flat label → cylinder → the type wraps it → glass reflections → printed.',
176
+ config: on('bottle', {
177
+ text: 'HELLO\nWORLD', typography: { fontFamily: "'Archivo Black', 'Arial Black', sans-serif", fontSize: 150, lineHeight: 0.92, letterSpacing: -3, color: '#161616', align: 'left' },
178
+ placement: { x: 0.5, y: 0.47 },
179
+ deformation: { wrap: 1, curve: 1 },
180
+ material: { blend: 1, gloss: 0.25 },
181
+ view: { roll: -28, motion: 0.8 },
182
+ animation: { duration: 9000, stages: [stage('curve', 0.05, 0.38, 'cylinder'), stage('wrap', 0.3, 0.55), stage('blend', 0.55, 0.85, 'print')] },
183
+ }),
184
+ },
185
+ {
186
+ id: 'wrapper-fold', name: 'Wrapper · Fold', description: 'Flat film → inflated pack → the end folds under → wrinkles → printed on the foil.',
187
+ config: on('wrapper', {
188
+ text: 'SUMMER\nSALE', typography: { fontFamily: ANTON, fontSize: 170, lineHeight: 0.9, color: '#C8102E', gradient: { enabled: true, from: '#E3262B', to: '#8E0B1F', angle: 90 } },
189
+ placement: { x: 0.46, y: 0.5, rotation: -6 },
190
+ deformation: { wrap: 1, curve: 1, wrinkle: 0.7, fold: { amount: 0.85, position: 0.82, angle: 150, width: 0.05, direction: 'under' } },
191
+ material: { blend: 1 },
192
+ animation: { duration: 9000, stages: [stage('curve', 0.05, 0.3, 'inflate'), stage('wrap', 0.12, 0.36), stage('fold', 0.36, 0.58), stage('wrinkle', 0.55, 0.75), stage('blend', 0.7, 0.92, 'print')] },
193
+ }),
194
+ },
195
+ {
196
+ id: 'fabric-fold', name: 'Fabric · Fold', description: 'Screen print on cotton: the cloth drifts into folds, then folds over; the ink moves with the weave.',
197
+ config: on('fabric', {
198
+ text: 'WEEKEND\nCLUB', typography: { fontFamily: "'Oswald', 'Arial Narrow', sans-serif", fontWeight: 700, fontSize: 150, lineHeight: 0.95, letterSpacing: 6, color: '#F2EBDD' },
199
+ placement: { y: 0.46 },
200
+ deformation: { wrap: 1, wave: 0.75, fold: { amount: 1, position: 0.88, angle: 170, width: 0.05, direction: 'over' } },
201
+ material: { blend: 1 }, view: { motion: 1 },
202
+ animation: { duration: 9000, stages: [stage('wrap', 0.03, 0.2), stage('wave', 0.15, 0.5, 'folds'), stage('fold', 0.55, 0.85)] },
203
+ }),
204
+ },
205
+ {
206
+ id: 'paper-crumple', name: 'Paper · Note', description: 'A marker note on a plain sheet, crushed.',
207
+ config: on('paper', {
208
+ text: 'Call me\nback!', typography: { fontFamily: "'Permanent Marker', cursive", fontSize: 118, lineHeight: 1.05, color: '#1F3FA8', letterSpacing: 0 },
209
+ placement: { y: 0.42, rotation: -5 },
210
+ deformation: { wrap: 1, crumple: { amount: 0.75, scale: 0.9 } },
211
+ material: { blend: 1, inkRoughness: 0.2 },
212
+ animation: { duration: 8000, stages: [stage('crumple', 0.15, 0.7, 'crush')] },
213
+ }),
214
+ },
215
+ {
216
+ id: 'object-tumbler', name: 'Tumbler · Built from parts', description: 'No tumbler exists in the library: a hollow tapered cylinder, a ring for the rim and a short cylinder for the foot. The name wraps the taper.',
217
+ config: onObject(createObject('tumbler'), {
218
+ text: 'Shekhar', typography: { fontFamily: "'Archivo Black', 'Arial Black', sans-serif", fontSize: 120, letterSpacing: 0, color: '#F4F1EA' },
219
+ view: { motion: 0.8 },
220
+ animation: { duration: 8000, stages: [stage('curve', 0.05, 0.45, 'wrap round'), stage('blend', 0.45, 0.85, 'print')] },
221
+ }),
222
+ },
223
+ {
224
+ id: 'object-mug', name: 'Mug · Built from parts', description: 'A hollow cylinder and a tube along a path for the handle, glazed black; the name is printed in white.',
225
+ config: onObject(createObject('mug'), {
226
+ text: 'Tushar', typography: { fontFamily: PLAYFAIR, fontWeight: 900, fontSize: 150, letterSpacing: 0, color: '#FFFFFF' },
227
+ view: { motion: 0.8 },
228
+ animation: { duration: 8000, stages: [stage('curve', 0.05, 0.45, 'wrap round'), stage('blend', 0.45, 0.85, 'print')] },
229
+ }),
230
+ },
231
+ ];
232
+
233
+ export function findTypeSurfacePreset(id: string): TypeSurfacePreset | undefined {
234
+ return TYPE_SURFACE_PRESETS.find((p) => p.id === id);
235
+ }
236
+
237
+ /** A few words an agent can say → a config. Unknown fonts/states are ignored, not fatal. */
238
+ export type TypeSurfaceShorthand = {
239
+ text?: string;
240
+ surface?: TSSurfaceType | string;
241
+ state?: string;
242
+ font?: string;
243
+ color?: string;
244
+ material?: TypeSurfaceConfig['material']['type'];
245
+ /** One of the preset ids to start from. */
246
+ preset?: string;
247
+ /** Instead of a surface: a recipe name (`TS_RECIPES`), or a whole object spec built from primitives. */
248
+ object?: string | TSObjectSpec;
249
+ /** With a recipe name: the object's colour and material. The text is then sized to the object (`fitObjectText`) and, with no `color`, inked to read on it. */
250
+ objectColor?: string;
251
+ objectMaterial?: TSObjectMaterialId;
252
+ };
253
+
254
+ /** Build an experiment from shorthand: preset → surface → state → text, font, colour, material. */
255
+ export function createTypeSurface(s: TypeSurfaceShorthand = {}): TypeSurfaceConfig {
256
+ let cfg = findTypeSurfacePreset(s.preset ?? '')?.config ?? TYPE_SURFACE_PRESETS[0]!.config;
257
+ if (s.surface && s.surface !== cfg.surface.type) cfg = switchSurface(cfg, s.surface);
258
+ if (s.object) cfg = withObject(cfg, typeof s.object === 'string' ? createObject(s.object, { color: s.objectColor, material: s.objectMaterial }) : s.object);
259
+ if (s.state) cfg = applySurfaceState(cfg, s.state);
260
+ if (s.text !== undefined) cfg = { ...cfg, text: s.text };
261
+ const font = s.font ? findTypeSurfaceFont(s.font) : undefined;
262
+ if (font) cfg = { ...cfg, typography: { ...cfg.typography, fontFamily: font.family, fontWeight: font.weights.includes(cfg.typography.fontWeight) ? cfg.typography.fontWeight : font.weights[font.weights.length - 1]! } };
263
+ if (s.color && /^#[0-9a-f]{6}$/i.test(s.color)) cfg = { ...cfg, typography: { ...cfg.typography, color: s.color.toUpperCase() } };
264
+ if (s.material) cfg = { ...cfg, material: { ...cfg.material, type: s.material } };
265
+ if (cfg.object && s.object) {
266
+ // On an object the words start legible: sized to its front face, in an ink that reads on it.
267
+ if (!s.color) cfg = { ...cfg, typography: { ...cfg.typography, color: inkOn(objectSurface(cfg.object).color) } };
268
+ cfg = fitObjectText(cfg);
269
+ }
270
+ return cfg;
271
+ }