@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,325 @@
1
+ /**
2
+ * **GLSL for the renderer.** Three programs:
3
+ * surface paper, pages, table and props: textured, lit by one key light with a soft shadow map,
4
+ * a sky/ground ambient, cavity darkening in valleys and crease light along folds
5
+ * text the letters: alpha from the text raster, then the material. Floating, they are a flat
6
+ * graphic; as they blend in they take the surface's light, then its colour (the blend
7
+ * mode, against the paper under them), its grain, ragged edges, and a halftone screen
8
+ * depth the shadow pass (letters cast their shape while they float)
9
+ */
10
+ export const COMMON = /* glsl */ `#version 300 es
11
+ precision highp float;
12
+ precision highp sampler2DShadow;
13
+ uniform vec3 uLightDir;
14
+ uniform vec3 uEye;
15
+ uniform mat4 uLightVP;
16
+ uniform sampler2DShadow uShadow;
17
+ uniform vec3 uKey;
18
+ uniform float uAmb;
19
+ uniform vec3 uBackdrop;
20
+ uniform vec3 uTarget;
21
+ uniform float uRadius;
22
+
23
+ vec3 toLin(vec3 c) { return pow(max(c, 0.0), vec3(2.2)); }
24
+ vec3 toSrgb(vec3 c) { return pow(max(c, 0.0), vec3(1.0 / 2.2)); }
25
+ vec3 tone(vec3 c) { c *= 0.92; return clamp((c * (2.51 * c + 0.03)) / (c * (2.43 * c + 0.59) + 0.14), 0.0, 1.0); }
26
+
27
+ float shadowAt(vec3 wp, vec3 n) {
28
+ vec4 lp = uLightVP * vec4(wp + n * 0.003, 1.0);
29
+ vec3 c = lp.xyz / lp.w * 0.5 + 0.5;
30
+ if (c.x < 0.0 || c.x > 1.0 || c.y < 0.0 || c.y > 1.0 || c.z > 1.0) return 1.0;
31
+ vec2 texel = 1.0 / vec2(textureSize(uShadow, 0));
32
+ float s = 0.0;
33
+ for (int x = -2; x <= 2; x++) for (int y = -2; y <= 2; y++) s += texture(uShadow, vec3(c.xy + vec2(x, y) * texel * 1.5, c.z - 0.0012));
34
+ return s / 25.0;
35
+ }
36
+
37
+ vec3 shade(vec3 alb, vec3 n, vec3 wp, float cav, float spec, float rough, float translucency) {
38
+ float sh = shadowAt(wp, n);
39
+ float nl = dot(n, uLightDir);
40
+ float diff = max(nl, 0.0) * sh;
41
+ float back = max(-nl, 0.0) * translucency;
42
+ vec3 sky = vec3(0.66, 0.68, 0.74), gnd = vec3(0.3, 0.27, 0.23);
43
+ vec3 amb = mix(gnd, sky, n.z * 0.5 + 0.5) * (1.0 - max(cav, 0.0) * 0.6) * (0.75 + 0.25 * sh);
44
+ vec3 V = normalize(uEye - wp);
45
+ vec3 H = normalize(uLightDir + V);
46
+ float sp = pow(max(dot(n, H), 0.0), mix(6.0, 160.0, 1.0 - rough)) * spec * sh;
47
+ return alb * (uKey * (diff + back) + amb * uAmb) + uKey * sp;
48
+ }
49
+
50
+ /** A photo studio, as seen in a reflection: dim room, the key softbox toward the light, a long strip light opposite. */
51
+ vec3 envAt(vec3 r) {
52
+ vec3 base = mix(vec3(0.05, 0.05, 0.055), vec3(0.42, 0.43, 0.45), smoothstep(-0.3, 0.9, r.z));
53
+ float key = smoothstep(0.9, 0.965, dot(r, uLightDir));
54
+ vec3 sd = normalize(vec3(0.72, -0.25, 0.64));
55
+ vec3 ax = normalize(cross(sd, vec3(0.0, 0.0, 1.0)));
56
+ float along = dot(r, ax);
57
+ float strip = smoothstep(0.975, 0.992, dot(normalize(r - ax * along), sd)) * (1.0 - smoothstep(0.4, 0.62, abs(along)));
58
+ return base + vec3(1.0, 0.98, 0.95) * key * 3.2 + vec3(0.95, 0.97, 1.0) * strip * 2.4;
59
+ }
60
+ /** The same studio seen in a rough surface: the lights spread into a broad glow. */
61
+ vec3 envSoft(vec3 r) {
62
+ vec3 base = mix(vec3(0.07, 0.07, 0.075), vec3(0.36, 0.37, 0.39), smoothstep(-0.6, 1.0, r.z));
63
+ float key = smoothstep(0.3, 1.0, dot(r, uLightDir));
64
+ return base + vec3(1.0, 0.98, 0.95) * key * key * 0.9;
65
+ }
66
+ float fresnel(float ndv, float f0) { return f0 + (1.0 - f0) * pow(1.0 - ndv, 5.0); }
67
+
68
+ float hash12(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * 0.1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); }
69
+ float vnoise(vec2 p) {
70
+ vec2 i = floor(p), f = fract(p); f = f * f * (3.0 - 2.0 * f);
71
+ return mix(mix(hash12(i), hash12(i + vec2(1, 0)), f.x), mix(hash12(i + vec2(0, 1)), hash12(i + vec2(1, 1)), f.x), f.y);
72
+ }
73
+ float fbm(vec2 p) { float s = 0.0, a = 0.5; for (int i = 0; i < 5; i++) { s += a * vnoise(p); p *= 2.03; a *= 0.5; } return s; }
74
+ `;
75
+
76
+ export const SURFACE_VS = /* glsl */ `#version 300 es
77
+ layout(location = 0) in vec3 aPos;
78
+ layout(location = 1) in vec3 aNrm;
79
+ layout(location = 2) in vec2 aUv;
80
+ layout(location = 3) in vec4 aAttr;
81
+ uniform mat4 uVP;
82
+ out vec3 vW; out vec3 vN; out vec2 vUv; out vec4 vAttr;
83
+ void main() { vW = aPos; vN = aNrm; vUv = aUv; vAttr = aAttr; gl_Position = uVP * vec4(aPos, 1.0); }
84
+ `;
85
+
86
+ export const SURFACE_FS = COMMON + /* glsl */ `
87
+ in vec3 vW; in vec3 vN; in vec2 vUv; in vec4 vAttr;
88
+ uniform int uMode; // 0 sheet, 1 table, 2 prop (the bottle, or a constructed part)
89
+ uniform int uPartOn; // 1: a constructed part, shaded by uPart; 0: the wine bottle
90
+ uniform vec4 uPart; // metalness, roughness, reflection, albedo gain
91
+ uniform int uShading; // 0 paper, 1 label, 2 film, 3 fabric
92
+ uniform vec3 uPropColor;
93
+ uniform vec3 uCapColor;
94
+ uniform int uTable; // 0 desk, 1 studio, 3 wood
95
+ uniform sampler2D uFront;
96
+ uniform sampler2D uBackTex;
97
+ uniform sampler2D uGrain;
98
+ uniform float uAspect;
99
+ uniform float uSpec;
100
+ uniform float uRough;
101
+ uniform float uTranslucent;
102
+ uniform int uDebug; // 1 deformation, 2 mapping
103
+ out vec4 outColor;
104
+
105
+ vec3 tableColor(vec2 p) {
106
+ if (uTable == 0) {
107
+ float g = fbm(vec2(p.x * 1.2, p.y * 14.0) + fbm(p * 3.0) * 1.5);
108
+ float rings = sin((p.y * 26.0 + g * 6.0)) * 0.5 + 0.5;
109
+ return toLin(mix(vec3(0.20, 0.12, 0.07), vec3(0.34, 0.21, 0.12), g * 0.7 + rings * 0.3));
110
+ }
111
+ if (uTable == 3) {
112
+ float g = fbm(vec2(p.x * 1.0, p.y * 10.0) + fbm(p * 2.0));
113
+ return toLin(mix(vec3(0.46, 0.33, 0.21), vec3(0.62, 0.47, 0.31), g));
114
+ }
115
+ return toLin(uBackdrop * (0.96 + 0.06 * fbm(p * 4.0)));
116
+ }
117
+
118
+ void main() {
119
+ vec3 n = normalize(vN);
120
+ vec3 col;
121
+ if (uMode == 1) {
122
+ vec3 alb = tableColor(vW.xy);
123
+ col = shade(alb, vec3(0, 0, 1), vW, 0.0, 0.05, 0.8, 0.0);
124
+ vec3 disp = toSrgb(tone(col));
125
+ float f = smoothstep(uRadius * 1.3, uRadius * 3.2, length(vW.xy - uTarget.xy));
126
+ outColor = vec4(mix(disp, uBackdrop, f), 1.0);
127
+ return;
128
+ }
129
+ vec3 V = normalize(uEye - vW);
130
+ if (uMode == 2 && uPartOn == 1) {
131
+ if (!gl_FrontFacing) n = -n;
132
+ float ndv = max(dot(n, V), 0.0);
133
+ vec3 alb = toLin(uPropColor) * uPart.w;
134
+ float metal = uPart.x, rough = uPart.y;
135
+ vec3 body = shade(alb * (1.0 - metal), n, vW, 0.0, uPart.z * (1.0 - rough) * 1.2, rough, 0.0);
136
+ // A dielectric reflects the studio through its Fresnel term; a metal reflects it in its own colour.
137
+ vec3 F = mix(vec3(fresnel(ndv, 0.05)), alb + (1.0 - alb) * pow(1.0 - ndv, 5.0), metal);
138
+ vec3 R = reflect(-V, n);
139
+ vec3 env = mix(envAt(R), envSoft(R), smoothstep(0.08, 0.5, rough));
140
+ col = body + env * F * uPart.z;
141
+ outColor = vec4(toSrgb(tone(col)), 1.0);
142
+ return;
143
+ }
144
+ if (uMode == 2) {
145
+ float ndv = max(dot(n, V), 0.0);
146
+ vec3 R = reflect(-V, n);
147
+ if (vAttr.x < 0.5) {
148
+ // Dark glass: almost black body, the room in its reflection.
149
+ vec3 body = shade(toLin(uPropColor) * 0.55, n, vW, 0.0, 1.4, 0.04, 0.0);
150
+ col = body + envAt(R) * fresnel(ndv, 0.06) * 1.1;
151
+ } else {
152
+ // Foil capsule: coloured metal, crinkled.
153
+ vec3 c = toLin(uCapColor);
154
+ float crink = fbm(vec2(atan(vW.x, vW.z + 0.36) * 9.0, vW.y * 30.0)) - 0.5;
155
+ vec3 nb = normalize(n + vec3(crink * 0.25, 0.0, crink * 0.2));
156
+ col = shade(c * 0.3, nb, vW, 0.0, 0.8, 0.3, 0.0) + c * envAt(reflect(-V, nb)) * 0.7;
157
+ }
158
+ outColor = vec4(toSrgb(tone(col)), 1.0);
159
+ return;
160
+ }
161
+ bool front = gl_FrontFacing;
162
+ if (!front) n = -n;
163
+ vec2 uv = front ? vUv : vec2(1.0 - vUv.x, vUv.y);
164
+ vec4 tex = front ? texture(uFront, uv) : texture(uBackTex, uv);
165
+ if (tex.a < 0.5) discard; // punched holes
166
+ vec3 alb = toLin(tex.rgb);
167
+ if (uMode == 0) {
168
+ float gr = texture(uGrain, vUv * vec2(5.0, 5.0 * uAspect)).r - 0.5;
169
+ alb *= 1.0 + gr * 0.1;
170
+ alb *= 1.0 - vAttr.x * 0.1;
171
+ }
172
+ if (uDebug == 1) alb = mix(vec3(0.05, 0.1, 0.6), vec3(1.0, 0.25, 0.05), clamp(vAttr.z * 6.0, 0.0, 1.0));
173
+ if (uDebug == 2) { vec2 c = floor(vUv * vec2(20.0, 20.0 * uAspect)); alb = mix(alb, mod(c.x + c.y, 2.0) < 1.0 ? vec3(0.9, 0.3, 0.3) : vec3(0.3, 0.5, 0.9), 0.55); }
174
+ float ndv = max(dot(n, V), 0.0);
175
+ col = shade(alb, n, vW, vAttr.y, uSpec, uRough, uTranslucent);
176
+ if (uShading == 1) col += envAt(reflect(-V, n)) * fresnel(ndv, 0.02) * 0.35;
177
+ if (uShading == 2) col += envAt(reflect(-V, n)) * fresnel(ndv, 0.07) * 0.9;
178
+ if (uShading == 3) col += alb * uKey * pow(1.0 - ndv, 3.0) * 0.45;
179
+ col += uKey * alb * vAttr.x * 0.05;
180
+ outColor = vec4(toSrgb(tone(col)), 1.0);
181
+ }
182
+ `;
183
+
184
+ export const TEXT_VS = /* glsl */ `#version 300 es
185
+ layout(location = 0) in vec3 aPos;
186
+ layout(location = 1) in vec3 aNrm;
187
+ layout(location = 2) in vec2 aUv;
188
+ layout(location = 3) in vec4 aAttr;
189
+ layout(location = 4) in vec2 aTuv;
190
+ uniform mat4 uVP;
191
+ out vec3 vW; out vec3 vN; out vec2 vUv; out vec4 vAttr; out vec2 vTuv;
192
+ void main() { vW = aPos; vN = aNrm; vUv = aUv; vAttr = aAttr; vTuv = aTuv; gl_Position = uVP * vec4(aPos, 1.0); }
193
+ `;
194
+
195
+ /** The glyph remap (letters spread mid-morph) and alpha sampling, shared by text and its shadow. */
196
+ const TEXT_ALPHA = /* glsl */ `
197
+ uniform sampler2D uText;
198
+ uniform vec2 uBlock;
199
+ uniform float uGap;
200
+ uniform vec4 uGlyphs[96]; // x0, x1, shift, _
201
+ uniform vec4 uLines[8]; // top, _, first glyph, count
202
+ uniform int uLineCount;
203
+
204
+ // Returns the source point, and z = 0 when it falls outside the chosen letter (a neighbour's ink).
205
+ vec3 remap(vec2 b) {
206
+ if (uGap <= 0.0) return vec3(b, 1.0);
207
+ int li = 0;
208
+ for (int k = 0; k < 8; k++) if (k < uLineCount && b.y >= uLines[k].x) li = k;
209
+ vec4 L = uLines[li];
210
+ int first = int(L.z), cnt = int(L.w);
211
+ float best = 1e9, shift = 0.0, x0 = 0.0, x1 = 0.0;
212
+ for (int i = 0; i < 96; i++) {
213
+ if (i >= cnt) break;
214
+ vec4 g = uGlyphs[first + i];
215
+ float d = abs(b.x - ((g.x + g.y) * 0.5 + g.z));
216
+ if (d < best) { best = d; shift = g.z; x0 = g.x; x1 = g.y; }
217
+ }
218
+ float sx = b.x - shift;
219
+ float m = (x1 - x0) * 0.06;
220
+ return vec3(sx, b.y, (sx >= x0 - m && sx <= x1 + m) ? 1.0 : 0.0);
221
+ }
222
+ float alphaAt(vec2 tc, float lod) {
223
+ if (tc.x < 0.0 || tc.y < 0.0 || tc.x > 1.0 || tc.y > 1.0) return 0.0;
224
+ return textureLod(uText, tc, lod).a;
225
+ }
226
+ `;
227
+
228
+ export const TEXT_FS = COMMON + TEXT_ALPHA + /* glsl */ `
229
+ in vec3 vW; in vec3 vN; in vec2 vUv; in vec4 vAttr; in vec2 vTuv;
230
+ uniform sampler2D uPaper;
231
+ uniform sampler2D uGrain;
232
+ uniform float uAspect;
233
+ uniform vec3 uColor; uniform vec3 uColor2; uniform float uGradOn; uniform float uGradAngle;
234
+ uniform float uOpacity; uniform int uBlendMode; uniform int uMat;
235
+ uniform float uBlendAmt, uInkStrength, uSpread, uRough, uPaperInf, uGrainInf, uHalftone, uDisp, uContrast, uGloss, uEmboss;
236
+ uniform float uLod;
237
+ out vec4 outColor;
238
+
239
+ vec3 blendWith(vec3 b, vec3 s) {
240
+ if (uBlendMode == 1) return b * s;
241
+ if (uBlendMode == 2) return 1.0 - (1.0 - b) * (1.0 - s);
242
+ if (uBlendMode == 3) return mix(2.0 * b * s, 1.0 - 2.0 * (1.0 - b) * (1.0 - s), step(0.5, b));
243
+ if (uBlendMode == 4) return min(b, s);
244
+ if (uBlendMode == 5) return max(b, s);
245
+ if (uBlendMode == 6) return 1.0 - min(vec3(1.0), (1.0 - b) / max(s, vec3(0.001)));
246
+ if (uBlendMode == 7) return mix(2.0 * b * s + b * b * (1.0 - 2.0 * s), sqrt(b) * (2.0 * s - 1.0) + 2.0 * b * (1.0 - s), step(0.5, s));
247
+ return s;
248
+ }
249
+
250
+ void main() {
251
+ if (!gl_FrontFacing) discard;
252
+ float lit = smoothstep(0.0, 0.35, uBlendAmt);
253
+ float prn = smoothstep(0.25, 0.7, uBlendAmt);
254
+ float emb = smoothstep(0.6, 1.0, uBlendAmt);
255
+ float gr = texture(uGrain, vUv * vec2(9.0, 9.0 * uAspect)).r;
256
+ float gr2 = texture(uGrain, vUv * vec2(2.1, 2.1 * uAspect) + 0.37).r;
257
+ vec3 rm = remap(vTuv * uBlock);
258
+ vec2 b = rm.xy + (vec2(gr2, gr) - 0.5) * uDisp * prn;
259
+ vec2 tc = b / uBlock;
260
+ float a = alphaAt(tc, 0.0) * rm.z;
261
+ float ab = alphaAt(tc, uLod + 1.0 + uSpread * 2.0);
262
+ a = max(a, smoothstep(0.1, 0.6, ab) * uSpread * prn * 0.85 * rm.z);
263
+ // Ragged edges: noise only where the letter is partly covered.
264
+ float edge = 1.0 - abs(a * 2.0 - 1.0);
265
+ a = clamp(a + (gr - 0.5) * 2.2 * uRough * prn * edge, 0.0, 1.0);
266
+ // Paper tooth breaks the ink up.
267
+ a *= 1.0 - uGrainInf * prn * smoothstep(0.45, 0.85, 1.0 - gr) * 0.75;
268
+ if (uHalftone > 0.0 && emb > 0.0) {
269
+ vec2 hp = mat2(0.7071, -0.7071, 0.7071, 0.7071) * (vUv * vec2(1000.0, 1000.0 * uAspect)) / 3.6;
270
+ float d = length(fract(hp) - 0.5);
271
+ float r = sqrt(clamp(a * uInkStrength, 0.0, 1.0)) * 0.64;
272
+ float dotm = 1.0 - smoothstep(r - 0.07, r + 0.07, d);
273
+ a = mix(a, dotm * step(0.03, a), uHalftone * emb);
274
+ }
275
+ vec2 dir = vec2(cos(radians(uGradAngle)), sin(radians(uGradAngle)));
276
+ float gt = clamp(dot(vTuv - 0.5, dir) + 0.5, 0.0, 1.0);
277
+ vec3 base = mix(uColor, uColor2, uGradOn * gt);
278
+ vec3 col = toLin(base);
279
+ vec4 paperTex = texture(uPaper, vUv);
280
+ if (paperTex.a < 0.5 && lit > 0.5) discard;
281
+ vec3 paper = toLin(paperTex.rgb);
282
+ vec3 printed = mix(paper, blendWith(paper, col), uInkStrength);
283
+ col = mix(col, printed, prn * uPaperInf);
284
+ vec3 n = normalize(vN);
285
+ if (uEmboss > 0.0) {
286
+ float e = 1.5 / (uBlock.x);
287
+ float gx = alphaAt(tc + vec2(e * 2.0, 0.0), uLod + 1.0) - alphaAt(tc - vec2(e * 2.0, 0.0), uLod + 1.0);
288
+ float gy = alphaAt(tc + vec2(0.0, e * 2.0 * uBlock.x / uBlock.y), uLod + 1.0) - alphaAt(tc - vec2(0.0, e * 2.0 * uBlock.x / uBlock.y), uLod + 1.0);
289
+ vec3 t = normalize(dFdx(vW)), bt = normalize(dFdy(vW));
290
+ n = normalize(n - (t * gx - bt * gy) * uEmboss * emb * 0.8);
291
+ }
292
+ vec3 lit3 = shade(col, n, vW, vAttr.z, 0.03 + uGloss * 0.6, 1.0 - uGloss * 0.75, 0.2);
293
+ lit3 *= 1.0 - vAttr.y * 0.12 * lit;
294
+ vec3 Vt = normalize(uEye - vW);
295
+ lit3 += envAt(reflect(-Vt, n)) * fresnel(max(dot(n, Vt), 0.0), 0.04) * uGloss * 0.8;
296
+ vec3 disp = mix(base, toSrgb(tone(lit3)), clamp(lit * uContrast, 0.0, 1.0));
297
+ outColor = vec4(disp, a * uOpacity);
298
+ }
299
+ `;
300
+
301
+ export const DEPTH_VS = /* glsl */ `#version 300 es
302
+ layout(location = 0) in vec3 aPos;
303
+ layout(location = 3) in vec4 aAttr;
304
+ layout(location = 4) in vec2 aTuv;
305
+ uniform mat4 uVP;
306
+ out vec2 vTuv; out float vConform;
307
+ void main() { vTuv = aTuv; vConform = aAttr.x; gl_Position = uVP * vec4(aPos, 1.0); }
308
+ `;
309
+
310
+ export const DEPTH_FS = /* glsl */ `#version 300 es
311
+ precision highp float;
312
+ ` + TEXT_ALPHA + /* glsl */ `
313
+ in vec2 vTuv; in float vConform;
314
+ uniform int uIsText;
315
+ uniform float uCast;
316
+ out vec4 outColor;
317
+ void main() {
318
+ if (uIsText == 1) {
319
+ if (vConform > 0.97) discard;
320
+ vec3 b = remap(vTuv * uBlock);
321
+ if (alphaAt(b.xy / uBlock, 0.0) * b.z * uCast < 0.4) discard;
322
+ }
323
+ outColor = vec4(1.0);
324
+ }
325
+ `;
@@ -0,0 +1,300 @@
1
+ /* eslint-disable comppack/no-raw-colour -- paper, film, cloth and backdrop colours are surface artwork, not theme colours. */
2
+ /**
3
+ * **Surfaces** — the physical things text meets. A surface is data: its size, how finely it is
4
+ * meshed, which artwork paints it, how it shades, and its named states. Only a few have their own
5
+ * shape (a pillow pack inflates, cloth drapes); everything else, folds, rolls,
6
+ * cylinders and crumples, comes from the shared operators in `ops.ts`, so a new surface gets every
7
+ * transformation, and the text on it, without touching the typography.
8
+ *
9
+ * To add one: `registerSurface({ id, name, width, height, grid, art, shading, table, states, … })`.
10
+ * Its `id` becomes a valid `surface.type`, and the renderer paints it with the named `art` (or a
11
+ * plain colour if it has no painter). Pure; no React.
12
+ */
13
+ import type { TSDeformation, TSMaterial, TSSurfaceType, TSView, TypeSurfaceConfig } from './config';
14
+ import { buildObject, createObject, sanitizeObject, type PartRange, type TSObjectSpec } from './construct';
15
+ import { smoothstep, type Vec3 } from './ops';
16
+
17
+ /** How the substrate itself shades. The renderer maps each to a lighting model. */
18
+ export type SurfaceShading = 'newsprint' | 'paper' | 'label' | 'film' | 'fabric';
19
+ /** What the object lies on. */
20
+ export type TableStyle = 'desk' | 'studio' | 'wood';
21
+
22
+ type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;
23
+
24
+ export type SurfaceState = { label: string; deformation: DeepPartial<TSDeformation>; view?: Partial<TSView> };
25
+
26
+ export type SurfaceDef = {
27
+ id: string;
28
+ name: string;
29
+ blurb: string;
30
+ /** World units. The text's surface units map 1000 → `width`. */
31
+ width: number;
32
+ height: number;
33
+ /** Mesh vertices across and down. Enough for a crease a few cells wide. */
34
+ grid: [number, number];
35
+ /** The artwork painter (`art.ts`). An unknown name paints `color`. */
36
+ art: string;
37
+ shading: SurfaceShading;
38
+ table: TableStyle;
39
+ /** Backdrop gradient, top → bottom. */
40
+ backdrop: [string, string];
41
+ /** The surface's own colour where the artwork uses one (film, cloth). */
42
+ color: string;
43
+ /** The text material that suits it, and any material defaults. */
44
+ material: Partial<TSMaterial> & { type: TSMaterial['type'] };
45
+ /** `curve` wraps a cylinder of this radius (world) at 1… */
46
+ curveRadius: number;
47
+ /** …or, for a pack, inflates it (`shape` reads `curve`). */
48
+ curveMode: 'cylinder' | 'inflate';
49
+ /** Loose sheets stacked under this one (a newspaper's pages). */
50
+ stack?: { sheets: number; gap: number };
51
+ /** Another page lying on the table under it. */
52
+ looseSheet?: boolean;
53
+ /** A solid object the surface is wrapped on. */
54
+ prop?: 'bottle';
55
+ /**
56
+ * A constructed object the surface is wrapped on (`objectSurface`): its mesh, already in the
57
+ * sheet's frame (the wrap axis parallel to y at z = −curveRadius), one triangle range per part.
58
+ */
59
+ solid?: { positions: Float32Array; normals: Float32Array; indices: Uint32Array; count: number; ranges: PartRange[] };
60
+ /** The wrapped sheet's radius at a height y (world): it follows a tapered or bulged part. */
61
+ radiusAt?: (y: number) => number;
62
+ /** `hidden`: the sheet is not drawn, so the text reads as printed straight onto the object. */
63
+ sheet?: 'visible' | 'hidden';
64
+ /** Radius that frames the object (camera fit); sheets work theirs out from their size. */
65
+ frameRadius?: number;
66
+ /** How much fine wrinkles lift the surface, as a share of its width. */
67
+ wrinkleDepth: number;
68
+ /** The surface's own shape, before the shared operators. `x, y` are sheet units (1 wide). */
69
+ shape?: (p: Vec3, x: number, y: number, d: TSDeformation, timeMs: number, motion: number) => void;
70
+ states: Record<string, SurfaceState>;
71
+ defaultState: string;
72
+ /** Degrees of camera tilt at perspective 0 and 1. */
73
+ camera: { flat: number; deep: number };
74
+ };
75
+
76
+ /* ---------------- shapes ---------------- */
77
+
78
+ /** A newspaper remembers the fold it was delivered in: a faint ridge across the middle. */
79
+ const newspaperShape: SurfaceDef['shape'] = (p, _x, y) => {
80
+ p[2] += 0.0035 * (1 - smoothstep(0, 0.035, Math.abs(y)));
81
+ };
82
+
83
+ /** A pillow pack: inflated body, flat crimped seals at both ends, film gathered into ribs near them. */
84
+ const wrapperShape: SurfaceDef['shape'] = (p, x, y, d) => {
85
+ const X = x / 0.5; // −1…1 across
86
+ const Y = y / (0.8 / 1.4 / 2); // −1…1 down (height/width = 0.8/1.4)
87
+ const ax = Math.abs(X);
88
+ const a = d.curve;
89
+ const body = 1 - smoothstep(0.7, 0.9, ax);
90
+ const seal = smoothstep(0.86, 0.92, ax);
91
+ const prof = Math.pow(Math.max(0, 1 - Y * Y), 0.62);
92
+ p[2] += a * 0.085 * prof * body;
93
+ // Inflation pulls the film in from the edges; the seals stay full height.
94
+ p[1] *= 1 - a * 0.12 * body * (1 - Y * Y * 0.3);
95
+ p[0] *= 1 - a * 0.035;
96
+ // Film gathered between body and seal: ribs that run toward the seal.
97
+ const gather = smoothstep(0.55, 0.8, ax) * (1 - seal);
98
+ p[2] += (a * 0.8 + d.wrinkle * 0.6) * 0.012 * gather * Math.sin(Y * 11 + x * 3) * (0.6 + 0.4 * Math.sin(Y * 23.7 + 1.3));
99
+ // The crimped seal: a fine serration.
100
+ p[2] += seal * 0.0045 * Math.sin(Y * 70);
101
+ };
102
+
103
+ /** Cloth: rounded folds that mostly share a direction, gathering the cloth, drifting in a breeze. */
104
+ const fabricShape: SurfaceDef['shape'] = (p, x, y, d, timeMs, motion) => {
105
+ const w = d.wave;
106
+ if (w <= 0) return;
107
+ const t = (timeMs / 1000) * motion;
108
+ const folds: [number, number, number, number, number][] = [
109
+ // angle, frequency, amplitude, phase, drift
110
+ [1.35, 6.2, 1, 0.3, 0.35], [1.62, 9.4, 0.55, 1.7, -0.25], [1.1, 4.1, 0.8, 2.2, 0.18], [0.35, 7.3, 0.35, 0.9, 0.3],
111
+ ];
112
+ let z = 0;
113
+ let gx = 0, gy = 0;
114
+ for (const [ang, f, amp, ph, drift] of folds) {
115
+ const dx = Math.cos(ang), dy = Math.sin(ang);
116
+ const s = (x * dx + y * dy) * f * 2.4 + ph + t * drift + 0.6 * Math.sin(x * 2.3 - y * 1.7 + ph);
117
+ const ridge = Math.pow(0.5 + 0.5 * Math.cos(s), 1.6);
118
+ z += amp * ridge;
119
+ gx += dx * amp * 0.5; gy += dy * amp * 0.5;
120
+ }
121
+ p[2] += w * 0.034 * z;
122
+ // Folds take up cloth across them.
123
+ const take = w * 0.05;
124
+ p[0] -= take * x * Math.abs(gx) * 0.5;
125
+ p[1] -= take * y * Math.abs(gy) * 0.5;
126
+ };
127
+
128
+ /* ---------------- states ---------------- */
129
+
130
+ const s = (label: string, deformation: SurfaceState['deformation'], view?: Partial<TSView>): SurfaceState => ({ label, deformation, view });
131
+
132
+ const PAPER_STATES: Record<string, SurfaceState> = {
133
+ flat: s('Flat', {}),
134
+ folded: s('Folded', { fold: { amount: 1, position: 0.5, direction: 'under', orientation: 'horizontal' } }),
135
+ 'double-folded': s('Double folded', { fold: { amount: 1, position: 0.5, direction: 'under', orientation: 'horizontal' }, fold2: { amount: 1, position: 0.5, direction: 'under', orientation: 'vertical' } }),
136
+ rolled: s('Rolled', { roll: { amount: 1, edge: 'bottom', direction: 'under' } }),
137
+ 'partially-folded': s('Partially folded', { fold: { amount: 0.55, position: 0.52, direction: 'over', orientation: 'vertical' } }),
138
+ 'letter-folded': s('Letter folded (3 panels)', {
139
+ fold: { amount: 1, position: 0.667, direction: 'over', orientation: 'horizontal', side: 'far', width: 0.02 },
140
+ fold2: { amount: 1, position: 0.333, direction: 'over', orientation: 'horizontal', side: 'near', width: 0.02 },
141
+ }),
142
+ 'folded-in-four': s('Folded four times', {
143
+ fold: { amount: 1, position: 0.5, direction: 'under', orientation: 'horizontal', width: 0.02 },
144
+ fold2: { amount: 1, position: 0.5, direction: 'under', orientation: 'vertical', width: 0.02 },
145
+ fold3: { amount: 1, position: 0.25, direction: 'under', orientation: 'vertical', side: 'near', width: 0.02 },
146
+ fold4: { amount: 0.5, position: 0.25, direction: 'over', orientation: 'horizontal', side: 'near', width: 0.02 },
147
+ }),
148
+ 'wrapped-rod': s('Wrapped on rods', {
149
+ wrap1: { amount: 1, position: 0.78, radius: 0.05, angle: 200, direction: 'under', orientation: 'vertical', side: 'far' },
150
+ wrap2: { amount: 1, position: 0.22, radius: 0.05, angle: 200, direction: 'under', orientation: 'vertical', side: 'near' },
151
+ }),
152
+ crumpled: s('Crumpled', { crumple: { amount: 0.5 } }),
153
+ 'heavily-crumpled': s('Heavily crumpled', { crumple: { amount: 1 } }),
154
+ };
155
+
156
+ /* ---------------- the built-in surfaces ---------------- */
157
+
158
+ const newspaper: SurfaceDef = {
159
+ id: 'newspaper', name: 'Newspaper', blurb: 'A broadsheet page on a stack of pages: columns, photos, ads, grain and the fold it was delivered in.',
160
+ width: 1, height: 1.36, grid: [160, 218], art: 'newspaper', shading: 'newsprint', table: 'desk', backdrop: ['#2b2723', '#15130f'],
161
+ color: '#ECE6D6', material: { type: 'ink', halftone: 0.35 }, curveRadius: 0.16, curveMode: 'cylinder',
162
+ stack: { sheets: 2, gap: 0.0026 }, looseSheet: true, wrinkleDepth: 0.02, shape: newspaperShape,
163
+ states: PAPER_STATES, defaultState: 'flat', camera: { flat: 0, deep: 56 },
164
+ };
165
+
166
+ const paper: SurfaceDef = {
167
+ id: 'paper', name: 'Paper', blurb: 'A plain letter sheet: fine tooth, a watermark, nothing printed but your words.',
168
+ width: 0.85, height: 1.1, grid: [140, 182], art: 'paper', shading: 'paper', table: 'wood', backdrop: ['#2f2a25', '#171411'],
169
+ color: '#F6F1E6', material: { type: 'ink', halftone: 0 }, curveRadius: 0.14, curveMode: 'cylinder', wrinkleDepth: 0.02,
170
+ states: PAPER_STATES, defaultState: 'flat', camera: { flat: 0, deep: 54 },
171
+ };
172
+
173
+ const bottle: SurfaceDef = {
174
+ id: 'bottle', name: 'Bottle', blurb: 'A paper label on a dark glass wine bottle: the label wraps the cylinder, the text wraps with it.',
175
+ width: 1.81, height: 0.86, grid: [220, 96], art: 'label', shading: 'label', table: 'studio', backdrop: ['#d9dadc', '#b9bbbf'],
176
+ color: '#1A1512', material: { type: 'print', halftone: 0, grainInfluence: 0.25, paperInfluence: 0.35 }, curveRadius: 0.3625, curveMode: 'cylinder',
177
+ prop: 'bottle', wrinkleDepth: 0.004,
178
+ states: {
179
+ flat: s('Flat label', {}),
180
+ curved: s('Curving', { curve: 0.5 }),
181
+ wrapped: s('Wrapped', { curve: 1 }),
182
+ lying: s('Lying on the table', { curve: 1 }, { roll: -28 }),
183
+ },
184
+ defaultState: 'wrapped', camera: { flat: 0, deep: 48 },
185
+ };
186
+
187
+ const wrapper: SurfaceDef = {
188
+ id: 'wrapper', name: 'Wrapper', blurb: 'A glossy pillow pack: an inflated body, crimped seals, film gathered into ribs.',
189
+ width: 1.4, height: 0.8, grid: [210, 120], art: 'wrapper', shading: 'film', table: 'studio', backdrop: ['#e8e2d8', '#c8c0b2'],
190
+ color: '#F2B705', material: { type: 'print', halftone: 0, grainInfluence: 0.1, paperInfluence: 0.25, gloss: 0.7 }, curveRadius: 0.4, curveMode: 'inflate',
191
+ wrinkleDepth: 0.012, shape: wrapperShape,
192
+ states: {
193
+ flat: s('Flat film', {}),
194
+ pillow: s('Inflated', { curve: 1 }),
195
+ folded: s('Folded end', { curve: 0.8, fold: { amount: 0.85, position: 0.8, angle: 160, direction: 'under', width: 0.05 } }),
196
+ wrinkled: s('Wrinkled', { curve: 1, wrinkle: 0.9, crumple: { amount: 0.12, scale: 0.7 } }),
197
+ },
198
+ defaultState: 'pillow', camera: { flat: 0, deep: 52 },
199
+ };
200
+
201
+ const fabric: SurfaceDef = {
202
+ id: 'fabric', name: 'Fabric', blurb: 'Woven cotton lying in soft folds that drift in a breeze; the print moves with the cloth.',
203
+ width: 1.4, height: 1.1, grid: [180, 142], art: 'fabric', shading: 'fabric', table: 'wood', backdrop: ['#28231e', '#12100d'],
204
+ color: '#2F4A73', material: { type: 'print', halftone: 0, grainInfluence: 0.6, paperInfluence: 0.45, inkRoughness: 0.55 }, curveRadius: 0.3, curveMode: 'cylinder',
205
+ wrinkleDepth: 0.018, shape: fabricShape,
206
+ states: {
207
+ flat: s('Laid flat', {}),
208
+ draped: s('Soft folds', { wave: 0.7 }),
209
+ folded: s('Folded over', { wave: 0.45, fold: { amount: 0.8, position: 0.66, angle: 170, width: 0.07, direction: 'over' } }),
210
+ creased: s('Creased', { wave: 0.5, wrinkle: 0.8, crumple: { amount: 0.2, scale: 1.3 } }),
211
+ },
212
+ defaultState: 'draped', camera: { flat: 0, deep: 52 },
213
+ };
214
+
215
+ const BUILT_IN: SurfaceDef[] = [newspaper, paper, bottle, wrapper, fabric];
216
+ const REGISTRY = new Map<string, SurfaceDef>(BUILT_IN.map((d) => [d.id, d]));
217
+
218
+ /** The built-in surfaces, by id. */
219
+ export const SURFACES: Readonly<Record<TSSurfaceType, SurfaceDef>> = Object.fromEntries(BUILT_IN.map((d) => [d.id, d])) as Record<TSSurfaceType, SurfaceDef>;
220
+
221
+ /** Add (or replace) a surface. Its id becomes a valid `surface.type`. */
222
+ export function registerSurface(def: SurfaceDef): SurfaceDef {
223
+ REGISTRY.set(def.id, def);
224
+ return def;
225
+ }
226
+ /** A surface by id; unknown ids fall back to the newspaper so something always draws. */
227
+ export function getSurface(id: string): SurfaceDef {
228
+ return REGISTRY.get(id) ?? newspaper;
229
+ }
230
+ export function hasSurface(id: string): boolean {
231
+ return REGISTRY.has(id);
232
+ }
233
+ export function listSurfaces(): SurfaceDef[] {
234
+ return [...REGISTRY.values()];
235
+ }
236
+
237
+ /* ---------------- constructed objects ---------------- */
238
+
239
+ /** The gap between a part and the text area wrapped on it: enough depth to keep them apart. */
240
+ const OBJECT_GAP = 0.0025;
241
+ const OBJECTS = new Map<string, SurfaceDef>();
242
+
243
+ /**
244
+ * A constructed object as a surface: the parts become the solid, and a sheet the size of the text
245
+ * area wraps the part that carries the text, following its radius at every height. The sheet is
246
+ * hidden unless the object asks for a paper label, so the words read as printed on the object. An
247
+ * invalid spec is repaired first (`sanitizeObject`), so this always returns something drawable.
248
+ */
249
+ export function objectSurface(input: TSObjectSpec): SurfaceDef {
250
+ const key = JSON.stringify(input);
251
+ const hit = OBJECTS.get(key);
252
+ if (hit) return hit;
253
+ const spec = sanitizeObject(input).object ?? sanitizeObject(createObject('')).object!;
254
+ const built = buildObject(spec);
255
+ const { host } = built;
256
+ const hostH = host.y1 - host.y0;
257
+ const height = Math.max(0.02, spec.text.height * hostH);
258
+ // Keep the text area on the part.
259
+ const yc = Math.min(host.y1 - height / 2, Math.max(host.y0 + height / 2, host.y0 + spec.text.y * hostH));
260
+ const R = host.radiusAt(yc) + OBJECT_GAP;
261
+ const width = (spec.text.arc * Math.PI / 180) * R;
262
+ // Into the sheet's frame: the text area's centre at the origin, the axis behind it.
263
+ const positions = new Float32Array(built.positions);
264
+ for (let k = 0; k < built.count; k++) { positions[k * 3 + 1] = positions[k * 3 + 1]! - yc; positions[k * 3 + 2] = positions[k * 3 + 2]! - R; }
265
+ const { min, max } = built.bounds;
266
+ const nu = Math.round(Math.min(260, Math.max(96, spec.text.arc * 1.1)));
267
+ const def: SurfaceDef = {
268
+ id: `object:${hashString(key)}`, name: spec.name, blurb: `Built from ${spec.parts.map((p) => p.shape).join(' + ')}.`,
269
+ width, height, grid: [nu, Math.round(Math.min(220, Math.max(24, (nu * height) / width)))],
270
+ art: 'plain', shading: 'label', table: spec.scene.table, backdrop: spec.scene.backdrop,
271
+ color: spec.text.label ?? host.color,
272
+ material: { type: 'print', halftone: 0, grainInfluence: spec.text.label ? 0.25 : 0.05, paperInfluence: spec.text.label ? 0.35 : 0.15 },
273
+ curveRadius: R, curveMode: 'cylinder', wrinkleDepth: 0.004,
274
+ solid: { positions, normals: built.normals, indices: built.indices, count: built.count, ranges: built.ranges },
275
+ radiusAt: (y) => host.radiusAt(y + yc) + OBJECT_GAP,
276
+ sheet: spec.text.label ? 'visible' : 'hidden',
277
+ frameRadius: 0.5 * Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]) * 1.06,
278
+ states: {
279
+ wrapped: s('Standing', { curve: 1 }),
280
+ lying: s('Lying on the table', { curve: 1 }, { roll: -28 }),
281
+ turned: s('Turned away', { curve: 1, tiltX: 0.5 }),
282
+ tipped: s('Tipped toward you', { curve: 1, tiltY: -0.7 }),
283
+ },
284
+ defaultState: 'wrapped', camera: { flat: 0, deep: 48 },
285
+ };
286
+ if (OBJECTS.size >= 12) OBJECTS.delete(OBJECTS.keys().next().value!);
287
+ OBJECTS.set(key, def);
288
+ return def;
289
+ }
290
+
291
+ function hashString(v: string): string {
292
+ let h = 0x811c9dc5;
293
+ for (let i = 0; i < v.length; i++) h = Math.imul(h ^ v.charCodeAt(i), 0x01000193);
294
+ return (h >>> 0).toString(36);
295
+ }
296
+
297
+ /** What a config's text meets: its constructed `object` when it has one, else the surface it names. */
298
+ export function surfaceFor(config: Pick<TypeSurfaceConfig, 'surface' | 'object'>): SurfaceDef {
299
+ return config.object ? objectSurface(config.object) : getSurface(config.surface.type);
300
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * **The text raster.** The layout (`layout.ts`) drawn into a canvas as white letters on nothing:
3
+ * an alpha mask. Colour, gradient, blend mode and ink are applied by the renderer on top of it,
4
+ * so changing a colour never repaints, and changing a word repaints only this. Live fonts; never
5
+ * outlines. Browser-only; no React.
6
+ */
7
+ import type { TSTypography } from './config';
8
+ import type { TSMeasurer, TSTextLayout } from './layout';
9
+
10
+ export const cssFont = (t: TSTypography, px: number) => `${t.fontStyle} ${t.fontWeight} ${px}px ${t.fontFamily}`;
11
+
12
+ let measureCtx: CanvasRenderingContext2D | null = null;
13
+ /** Width in surface units, measured by the browser at 100 px and scaled. */
14
+ export const canvasMeasurer: TSMeasurer = (text, t) => {
15
+ measureCtx ??= document.createElement('canvas').getContext('2d');
16
+ if (!measureCtx) return text.length * t.fontSize * 0.55;
17
+ measureCtx.font = cssFont(t, 100);
18
+ return (measureCtx.measureText(text).width / 100) * t.fontSize;
19
+ };
20
+
21
+ /** Paint the layout. `maxPx` caps the longer side; returns the canvas and its pixels per unit. */
22
+ export function rasterText(layout: TSTextLayout, t: TSTypography, maxPx = 2048): { canvas: HTMLCanvasElement; ppu: number } {
23
+ const ppu = Math.min(4, maxPx / layout.width, maxPx / 2 / layout.height);
24
+ const c = document.createElement('canvas');
25
+ c.width = Math.max(4, Math.ceil(layout.width * ppu));
26
+ c.height = Math.max(4, Math.ceil(layout.height * ppu));
27
+ const ctx = c.getContext('2d')!;
28
+ ctx.fillStyle = 'white';
29
+ ctx.font = cssFont(t, t.fontSize * ppu);
30
+ ctx.textBaseline = 'alphabetic';
31
+ for (const line of layout.lines) {
32
+ for (const g of line.glyphs) if (g.ch !== ' ') ctx.fillText(g.ch, g.x0 * ppu, line.baseline * ppu);
33
+ }
34
+ return { canvas: c, ppu };
35
+ }