@appinternalleads/ui 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (988) hide show
  1. package/dist/cjs/agent/AgentComponent.js +1 -1
  2. package/dist/cjs/agent/AgentComponent.js.map +1 -1
  3. package/dist/cjs/agent/base.js +25 -0
  4. package/dist/cjs/agent/base.js.map +1 -0
  5. package/dist/cjs/agent/catalog.js +0 -32
  6. package/dist/cjs/agent/catalog.js.map +1 -1
  7. package/dist/cjs/agent/core.js +22 -20
  8. package/dist/cjs/agent/core.js.map +1 -1
  9. package/dist/cjs/agent/index.js +6 -5
  10. package/dist/cjs/agent/index.js.map +1 -1
  11. package/dist/cjs/agent/manifests.js +81 -1
  12. package/dist/cjs/agent/manifests.js.map +1 -1
  13. package/dist/cjs/agent/result.js +6 -0
  14. package/dist/cjs/agent/result.js.map +1 -1
  15. package/dist/cjs/agent/search/document.js +50 -0
  16. package/dist/cjs/agent/search/document.js.map +1 -0
  17. package/dist/cjs/agent/search/embedding.js +107 -0
  18. package/dist/cjs/agent/search/embedding.js.map +1 -0
  19. package/dist/cjs/agent/search/index.js +25 -0
  20. package/dist/cjs/agent/search/index.js.map +1 -0
  21. package/dist/cjs/agent/search/lexical.js +28 -0
  22. package/dist/cjs/agent/search/lexical.js.map +1 -0
  23. package/dist/cjs/agent/search/normalize.js +15 -0
  24. package/dist/cjs/agent/search/normalize.js.map +1 -0
  25. package/dist/cjs/agent/search/search.js +123 -0
  26. package/dist/cjs/agent/search/search.js.map +1 -0
  27. package/dist/cjs/agent/search/searchIndex.js +120 -0
  28. package/dist/cjs/agent/search/searchIndex.js.map +1 -0
  29. package/dist/cjs/agent/search/types.js +8 -0
  30. package/dist/cjs/agent/search/types.js.map +1 -0
  31. package/dist/cjs/agent/search/weights.js +34 -0
  32. package/dist/cjs/agent/search/weights.js.map +1 -0
  33. package/dist/cjs/agent/search/wordvectors.json +1 -0
  34. package/dist/cjs/components/catalog.js +18 -0
  35. package/dist/cjs/components/catalog.js.map +1 -1
  36. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js +21 -0
  37. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  38. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js +6 -0
  39. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  40. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js +89 -0
  41. package/dist/cjs/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  42. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js +62 -0
  43. package/dist/cjs/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  44. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js +20 -0
  45. package/dist/cjs/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  46. package/dist/cjs/components/onboarding/animated-status/contract.js +87 -0
  47. package/dist/cjs/components/onboarding/animated-status/contract.js.map +1 -0
  48. package/dist/cjs/components/onboarding/animated-status/engine.js +40 -0
  49. package/dist/cjs/components/onboarding/animated-status/engine.js.map +1 -0
  50. package/dist/cjs/components/onboarding/animated-status/index.js +20 -0
  51. package/dist/cjs/components/onboarding/animated-status/index.js.map +1 -0
  52. package/dist/cjs/components/onboarding/animated-status/presets.json +126 -0
  53. package/dist/cjs/components/onboarding/animated-status/riv.js +7 -0
  54. package/dist/cjs/components/onboarding/animated-status/riv.js.map +1 -0
  55. package/dist/cjs/components/onboarding/index.js +4 -0
  56. package/dist/cjs/components/onboarding/index.js.map +1 -1
  57. package/dist/cjs/components/onboarding/presets.js +90 -84
  58. package/dist/cjs/components/onboarding/presets.js.map +1 -1
  59. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js +43 -6
  60. package/dist/cjs/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  61. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js +111 -0
  62. package/dist/cjs/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  63. package/dist/cjs/components/onboarding/send-completion/SendStage.js +37 -0
  64. package/dist/cjs/components/onboarding/send-completion/SendStage.js.map +1 -0
  65. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js +6 -0
  66. package/dist/cjs/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  67. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js +107 -0
  68. package/dist/cjs/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  69. package/dist/cjs/components/onboarding/send-completion/SendStill.js +17 -0
  70. package/dist/cjs/components/onboarding/send-completion/SendStill.js.map +1 -0
  71. package/dist/cjs/components/onboarding/send-completion/contract.js +83 -0
  72. package/dist/cjs/components/onboarding/send-completion/contract.js.map +1 -0
  73. package/dist/cjs/components/onboarding/send-completion/engine.js +32 -0
  74. package/dist/cjs/components/onboarding/send-completion/engine.js.map +1 -0
  75. package/dist/cjs/components/onboarding/send-completion/index.js +22 -0
  76. package/dist/cjs/components/onboarding/send-completion/index.js.map +1 -0
  77. package/dist/cjs/components/onboarding/send-completion/presets.json +132 -0
  78. package/dist/cjs/components/onboarding/send-completion/riv.js +7 -0
  79. package/dist/cjs/components/onboarding/send-completion/riv.js.map +1 -0
  80. package/dist/cjs/components/onboarding/shared/actions-data.js +2 -0
  81. package/dist/cjs/components/onboarding/shared/actions-data.js.map +1 -1
  82. package/dist/cjs/components/onboarding/shared/configColor.js +76 -0
  83. package/dist/cjs/components/onboarding/shared/configColor.js.map +1 -0
  84. package/dist/cjs/components/onboarding/shared/contract.js +4 -0
  85. package/dist/cjs/components/onboarding/shared/contract.js.map +1 -1
  86. package/dist/cjs/components/onboarding/shared/describe.js +1 -1
  87. package/dist/cjs/components/onboarding/shared/describe.js.map +1 -1
  88. package/dist/cjs/components/onboarding/shared/mock.js +2 -0
  89. package/dist/cjs/components/onboarding/shared/mock.js.map +1 -1
  90. package/dist/cjs/components/onboarding/views.js +8 -0
  91. package/dist/cjs/components/onboarding/views.js.map +1 -1
  92. package/dist/cjs/index.js +1 -1
  93. package/dist/cjs/index.js.map +1 -1
  94. package/dist/cjs/motion/MotionPlayer.js +42 -0
  95. package/dist/cjs/motion/MotionPlayer.js.map +1 -0
  96. package/dist/cjs/motion/agent.js +323 -0
  97. package/dist/cjs/motion/agent.js.map +1 -0
  98. package/dist/cjs/motion/cat/Cat.js +79 -0
  99. package/dist/cjs/motion/cat/Cat.js.map +1 -0
  100. package/dist/cjs/motion/cat/animation.js +204 -0
  101. package/dist/cjs/motion/cat/animation.js.map +1 -0
  102. package/dist/cjs/motion/cat/art.generated.js +37 -0
  103. package/dist/cjs/motion/cat/art.generated.js.map +1 -0
  104. package/dist/cjs/motion/cat/config.js +136 -0
  105. package/dist/cjs/motion/cat/config.js.map +1 -0
  106. package/dist/cjs/motion/cat/index.js +75 -0
  107. package/dist/cjs/motion/cat/index.js.map +1 -0
  108. package/dist/cjs/motion/cat/rig.js +99 -0
  109. package/dist/cjs/motion/cat/rig.js.map +1 -0
  110. package/dist/cjs/motion/cat/scene.js +148 -0
  111. package/dist/cjs/motion/cat/scene.js.map +1 -0
  112. package/dist/cjs/motion/configurable/config.js +477 -0
  113. package/dist/cjs/motion/configurable/config.js.map +1 -0
  114. package/dist/cjs/motion/configurable/controls.js +44 -0
  115. package/dist/cjs/motion/configurable/controls.js.map +1 -0
  116. package/dist/cjs/motion/easing.js +62 -0
  117. package/dist/cjs/motion/easing.js.map +1 -0
  118. package/dist/cjs/motion/fit.js +12 -0
  119. package/dist/cjs/motion/fit.js.map +1 -0
  120. package/dist/cjs/motion/index.js +101 -0
  121. package/dist/cjs/motion/index.js.map +1 -0
  122. package/dist/cjs/motion/neon/GlowRenderer.js +18 -0
  123. package/dist/cjs/motion/neon/GlowRenderer.js.map +1 -0
  124. package/dist/cjs/motion/neon/NeonCanvas.js +97 -0
  125. package/dist/cjs/motion/neon/NeonCanvas.js.map +1 -0
  126. package/dist/cjs/motion/neon/NeonText.js +108 -0
  127. package/dist/cjs/motion/neon/NeonText.js.map +1 -0
  128. package/dist/cjs/motion/neon/NeonTextFrame.js +36 -0
  129. package/dist/cjs/motion/neon/NeonTextFrame.js.map +1 -0
  130. package/dist/cjs/motion/neon/artwork.js +102 -0
  131. package/dist/cjs/motion/neon/artwork.js.map +1 -0
  132. package/dist/cjs/motion/neon/audio.js +165 -0
  133. package/dist/cjs/motion/neon/audio.js.map +1 -0
  134. package/dist/cjs/motion/neon/config.js +334 -0
  135. package/dist/cjs/motion/neon/config.js.map +1 -0
  136. package/dist/cjs/motion/neon/flicker.js +196 -0
  137. package/dist/cjs/motion/neon/flicker.js.map +1 -0
  138. package/dist/cjs/motion/neon/fonts.js +52 -0
  139. package/dist/cjs/motion/neon/fonts.js.map +1 -0
  140. package/dist/cjs/motion/neon/frame.js +24 -0
  141. package/dist/cjs/motion/neon/frame.js.map +1 -0
  142. package/dist/cjs/motion/neon/glitch.js +114 -0
  143. package/dist/cjs/motion/neon/glitch.js.map +1 -0
  144. package/dist/cjs/motion/neon/index.js +119 -0
  145. package/dist/cjs/motion/neon/index.js.map +1 -0
  146. package/dist/cjs/motion/neon/layers.js +68 -0
  147. package/dist/cjs/motion/neon/layers.js.map +1 -0
  148. package/dist/cjs/motion/neon/material.js +56 -0
  149. package/dist/cjs/motion/neon/material.js.map +1 -0
  150. package/dist/cjs/motion/neon/random.js +43 -0
  151. package/dist/cjs/motion/neon/random.js.map +1 -0
  152. package/dist/cjs/motion/neon/scene.js +549 -0
  153. package/dist/cjs/motion/neon/scene.js.map +1 -0
  154. package/dist/cjs/motion/neon/synth.js +213 -0
  155. package/dist/cjs/motion/neon/synth.js.map +1 -0
  156. package/dist/cjs/motion/neon/typography.js +81 -0
  157. package/dist/cjs/motion/neon/typography.js.map +1 -0
  158. package/dist/cjs/motion/neon/wall.js +113 -0
  159. package/dist/cjs/motion/neon/wall.js.map +1 -0
  160. package/dist/cjs/motion/paperfold/PaperFold.js +40 -0
  161. package/dist/cjs/motion/paperfold/PaperFold.js.map +1 -0
  162. package/dist/cjs/motion/paperfold/PaperFoldFrame.js +290 -0
  163. package/dist/cjs/motion/paperfold/PaperFoldFrame.js.map +1 -0
  164. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js +59 -0
  165. package/dist/cjs/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  166. package/dist/cjs/motion/paperfold/art.js +388 -0
  167. package/dist/cjs/motion/paperfold/art.js.map +1 -0
  168. package/dist/cjs/motion/paperfold/config.js +103 -0
  169. package/dist/cjs/motion/paperfold/config.js.map +1 -0
  170. package/dist/cjs/motion/paperfold/controls.js +493 -0
  171. package/dist/cjs/motion/paperfold/controls.js.map +1 -0
  172. package/dist/cjs/motion/paperfold/engine.js +722 -0
  173. package/dist/cjs/motion/paperfold/engine.js.map +1 -0
  174. package/dist/cjs/motion/paperfold/fonts.js +25 -0
  175. package/dist/cjs/motion/paperfold/fonts.js.map +1 -0
  176. package/dist/cjs/motion/paperfold/index.js +113 -0
  177. package/dist/cjs/motion/paperfold/index.js.map +1 -0
  178. package/dist/cjs/motion/paperfold/manipulate.js +170 -0
  179. package/dist/cjs/motion/paperfold/manipulate.js.map +1 -0
  180. package/dist/cjs/motion/paperfold/presets.js +119 -0
  181. package/dist/cjs/motion/paperfold/presets.js.map +1 -0
  182. package/dist/cjs/motion/paperfold/template.js +40 -0
  183. package/dist/cjs/motion/paperfold/template.js.map +1 -0
  184. package/dist/cjs/motion/player.js +203 -0
  185. package/dist/cjs/motion/player.js.map +1 -0
  186. package/dist/cjs/motion/promo/PromoFrame.js +293 -0
  187. package/dist/cjs/motion/promo/PromoFrame.js.map +1 -0
  188. package/dist/cjs/motion/promo/PromoShowcasePlayer.js +59 -0
  189. package/dist/cjs/motion/promo/PromoShowcasePlayer.js.map +1 -0
  190. package/dist/cjs/motion/promo/config.js +565 -0
  191. package/dist/cjs/motion/promo/config.js.map +1 -0
  192. package/dist/cjs/motion/promo/controls.js +571 -0
  193. package/dist/cjs/motion/promo/controls.js.map +1 -0
  194. package/dist/cjs/motion/promo/easing.js +35 -0
  195. package/dist/cjs/motion/promo/easing.js.map +1 -0
  196. package/dist/cjs/motion/promo/engine.js +567 -0
  197. package/dist/cjs/motion/promo/engine.js.map +1 -0
  198. package/dist/cjs/motion/promo/fonts.js +20 -0
  199. package/dist/cjs/motion/promo/fonts.js.map +1 -0
  200. package/dist/cjs/motion/promo/icons.js +29 -0
  201. package/dist/cjs/motion/promo/icons.js.map +1 -0
  202. package/dist/cjs/motion/promo/index.js +73 -0
  203. package/dist/cjs/motion/promo/index.js.map +1 -0
  204. package/dist/cjs/motion/promo/presets.js +44 -0
  205. package/dist/cjs/motion/promo/presets.js.map +1 -0
  206. package/dist/cjs/motion/promo/template.js +38 -0
  207. package/dist/cjs/motion/promo/template.js.map +1 -0
  208. package/dist/cjs/motion/replication2/Replication2Player.js +93 -0
  209. package/dist/cjs/motion/replication2/Replication2Player.js.map +1 -0
  210. package/dist/cjs/motion/replication2/config.js +352 -0
  211. package/dist/cjs/motion/replication2/config.js.map +1 -0
  212. package/dist/cjs/motion/replication2/controls.js +286 -0
  213. package/dist/cjs/motion/replication2/controls.js.map +1 -0
  214. package/dist/cjs/motion/replication2/driver.js +68 -0
  215. package/dist/cjs/motion/replication2/driver.js.map +1 -0
  216. package/dist/cjs/motion/replication2/easing.js +97 -0
  217. package/dist/cjs/motion/replication2/easing.js.map +1 -0
  218. package/dist/cjs/motion/replication2/engine.js +481 -0
  219. package/dist/cjs/motion/replication2/engine.js.map +1 -0
  220. package/dist/cjs/motion/replication2/html.js +88 -0
  221. package/dist/cjs/motion/replication2/html.js.map +1 -0
  222. package/dist/cjs/motion/replication2/index.js +61 -0
  223. package/dist/cjs/motion/replication2/index.js.map +1 -0
  224. package/dist/cjs/motion/replication2/measure.js +30 -0
  225. package/dist/cjs/motion/replication2/measure.js.map +1 -0
  226. package/dist/cjs/motion/replication2/metrics.js +10 -0
  227. package/dist/cjs/motion/replication2/metrics.js.map +1 -0
  228. package/dist/cjs/motion/replication2/presets.js +67 -0
  229. package/dist/cjs/motion/replication2/presets.js.map +1 -0
  230. package/dist/cjs/motion/replication2/riv.js +7 -0
  231. package/dist/cjs/motion/replication2/riv.js.map +1 -0
  232. package/dist/cjs/motion/replication2/rive-contract.js +158 -0
  233. package/dist/cjs/motion/replication2/rive-contract.js.map +1 -0
  234. package/dist/cjs/motion/replication2/template.js +35 -0
  235. package/dist/cjs/motion/replication2/template.js.map +1 -0
  236. package/dist/cjs/motion/sample.js +149 -0
  237. package/dist/cjs/motion/sample.js.map +1 -0
  238. package/dist/cjs/motion/templates/hey-template.js +1552 -0
  239. package/dist/cjs/motion/templates/hey-template.js.map +1 -0
  240. package/dist/cjs/motion/templates/index.js +22 -0
  241. package/dist/cjs/motion/templates/index.js.map +1 -0
  242. package/dist/cjs/motion/templates/word-motion.js +1165 -0
  243. package/dist/cjs/motion/templates/word-motion.js.map +1 -0
  244. package/dist/cjs/motion/types.js +3 -0
  245. package/dist/cjs/motion/types.js.map +1 -0
  246. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js +62 -0
  247. package/dist/cjs/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  248. package/dist/cjs/motion/typesurface/art.js +861 -0
  249. package/dist/cjs/motion/typesurface/art.js.map +1 -0
  250. package/dist/cjs/motion/typesurface/config.js +269 -0
  251. package/dist/cjs/motion/typesurface/config.js.map +1 -0
  252. package/dist/cjs/motion/typesurface/engine.js +607 -0
  253. package/dist/cjs/motion/typesurface/engine.js.map +1 -0
  254. package/dist/cjs/motion/typesurface/fonts.js +45 -0
  255. package/dist/cjs/motion/typesurface/fonts.js.map +1 -0
  256. package/dist/cjs/motion/typesurface/index.js +72 -0
  257. package/dist/cjs/motion/typesurface/index.js.map +1 -0
  258. package/dist/cjs/motion/typesurface/layout.js +130 -0
  259. package/dist/cjs/motion/typesurface/layout.js.map +1 -0
  260. package/dist/cjs/motion/typesurface/ops.js +175 -0
  261. package/dist/cjs/motion/typesurface/ops.js.map +1 -0
  262. package/dist/cjs/motion/typesurface/presets.js +192 -0
  263. package/dist/cjs/motion/typesurface/presets.js.map +1 -0
  264. package/dist/cjs/motion/typesurface/renderer.js +672 -0
  265. package/dist/cjs/motion/typesurface/renderer.js.map +1 -0
  266. package/dist/cjs/motion/typesurface/shaders.js +300 -0
  267. package/dist/cjs/motion/typesurface/shaders.js.map +1 -0
  268. package/dist/cjs/motion/typesurface/surfaces.js +156 -0
  269. package/dist/cjs/motion/typesurface/surfaces.js.map +1 -0
  270. package/dist/cjs/motion/typesurface/text.js +34 -0
  271. package/dist/cjs/motion/typesurface/text.js.map +1 -0
  272. package/dist/cjs/motion/typesurface/timeline.js +64 -0
  273. package/dist/cjs/motion/typesurface/timeline.js.map +1 -0
  274. package/dist/cjs/motion/validate.js +89 -0
  275. package/dist/cjs/motion/validate.js.map +1 -0
  276. package/dist/cjs/native/RiveReceiptStage.js +9 -150
  277. package/dist/cjs/native/RiveReceiptStage.js.map +1 -1
  278. package/dist/cjs/native/riveReceiptStageFactory.js +162 -0
  279. package/dist/cjs/native/riveReceiptStageFactory.js.map +1 -0
  280. package/dist/cjs/tokens/stage.js +10 -0
  281. package/dist/cjs/tokens/stage.js.map +1 -0
  282. package/dist/esm/agent/AgentComponent.js +1 -1
  283. package/dist/esm/agent/AgentComponent.js.map +1 -1
  284. package/dist/esm/agent/base.d.ts +11 -0
  285. package/dist/esm/agent/base.d.ts.map +1 -0
  286. package/dist/esm/agent/base.js +11 -0
  287. package/dist/esm/agent/base.js.map +1 -0
  288. package/dist/esm/agent/catalog.d.ts +0 -8
  289. package/dist/esm/agent/catalog.d.ts.map +1 -1
  290. package/dist/esm/agent/catalog.js +0 -31
  291. package/dist/esm/agent/catalog.js.map +1 -1
  292. package/dist/esm/agent/core.d.ts +6 -7
  293. package/dist/esm/agent/core.d.ts.map +1 -1
  294. package/dist/esm/agent/core.js +6 -7
  295. package/dist/esm/agent/core.js.map +1 -1
  296. package/dist/esm/agent/index.d.ts +6 -5
  297. package/dist/esm/agent/index.d.ts.map +1 -1
  298. package/dist/esm/agent/index.js +6 -5
  299. package/dist/esm/agent/index.js.map +1 -1
  300. package/dist/esm/agent/manifests.d.ts.map +1 -1
  301. package/dist/esm/agent/manifests.js +81 -1
  302. package/dist/esm/agent/manifests.js.map +1 -1
  303. package/dist/esm/agent/result.d.ts.map +1 -1
  304. package/dist/esm/agent/result.js +6 -0
  305. package/dist/esm/agent/result.js.map +1 -1
  306. package/dist/esm/agent/search/document.d.ts +6 -0
  307. package/dist/esm/agent/search/document.d.ts.map +1 -0
  308. package/dist/esm/agent/search/document.js +46 -0
  309. package/dist/esm/agent/search/document.js.map +1 -0
  310. package/dist/esm/agent/search/embedding.d.ts +31 -0
  311. package/dist/esm/agent/search/embedding.d.ts.map +1 -0
  312. package/dist/esm/agent/search/embedding.js +103 -0
  313. package/dist/esm/agent/search/embedding.js.map +1 -0
  314. package/dist/esm/agent/search/index.d.ts +10 -0
  315. package/dist/esm/agent/search/index.d.ts.map +1 -0
  316. package/dist/esm/agent/search/index.js +17 -0
  317. package/dist/esm/agent/search/index.js.map +1 -0
  318. package/dist/esm/agent/search/lexical.d.ts +3 -0
  319. package/dist/esm/agent/search/lexical.d.ts.map +1 -0
  320. package/dist/esm/agent/search/lexical.js +25 -0
  321. package/dist/esm/agent/search/lexical.js.map +1 -0
  322. package/dist/esm/agent/search/normalize.d.ts +13 -0
  323. package/dist/esm/agent/search/normalize.d.ts.map +1 -0
  324. package/dist/esm/agent/search/normalize.js +12 -0
  325. package/dist/esm/agent/search/normalize.js.map +1 -0
  326. package/dist/esm/agent/search/search.d.ts +42 -0
  327. package/dist/esm/agent/search/search.d.ts.map +1 -0
  328. package/dist/esm/agent/search/search.js +119 -0
  329. package/dist/esm/agent/search/search.js.map +1 -0
  330. package/dist/esm/agent/search/searchIndex.d.ts +42 -0
  331. package/dist/esm/agent/search/searchIndex.d.ts.map +1 -0
  332. package/dist/esm/agent/search/searchIndex.js +114 -0
  333. package/dist/esm/agent/search/searchIndex.js.map +1 -0
  334. package/dist/esm/agent/search/types.d.ts +67 -0
  335. package/dist/esm/agent/search/types.d.ts.map +1 -0
  336. package/dist/esm/agent/search/types.js +7 -0
  337. package/dist/esm/agent/search/types.js.map +1 -0
  338. package/dist/esm/agent/search/weights.d.ts +22 -0
  339. package/dist/esm/agent/search/weights.d.ts.map +1 -0
  340. package/dist/esm/agent/search/weights.js +31 -0
  341. package/dist/esm/agent/search/weights.js.map +1 -0
  342. package/dist/esm/agent/search/wordvectors.json +1 -0
  343. package/dist/esm/agent/types.d.ts +1 -1
  344. package/dist/esm/agent/types.d.ts.map +1 -1
  345. package/dist/esm/components/catalog.d.ts +1 -1
  346. package/dist/esm/components/catalog.d.ts.map +1 -1
  347. package/dist/esm/components/catalog.js +18 -0
  348. package/dist/esm/components/catalog.js.map +1 -1
  349. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts +9 -0
  350. package/dist/esm/components/onboarding/animated-status/AnimatedStage.d.ts.map +1 -0
  351. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js +18 -0
  352. package/dist/esm/components/onboarding/animated-status/AnimatedStage.js.map +1 -0
  353. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts +31 -0
  354. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.d.ts.map +1 -0
  355. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js +3 -0
  356. package/dist/esm/components/onboarding/animated-status/AnimatedStage.types.js.map +1 -0
  357. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts +4 -0
  358. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.d.ts.map +1 -0
  359. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js +86 -0
  360. package/dist/esm/components/onboarding/animated-status/AnimatedStage.web.js.map +1 -0
  361. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts +32 -0
  362. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.d.ts.map +1 -0
  363. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js +59 -0
  364. package/dist/esm/components/onboarding/animated-status/AnimatedStatusView.js.map +1 -0
  365. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts +8 -0
  366. package/dist/esm/components/onboarding/animated-status/AnimatedStill.d.ts.map +1 -0
  367. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js +17 -0
  368. package/dist/esm/components/onboarding/animated-status/AnimatedStill.js.map +1 -0
  369. package/dist/esm/components/onboarding/animated-status/contract.d.ts +61 -0
  370. package/dist/esm/components/onboarding/animated-status/contract.d.ts.map +1 -0
  371. package/dist/esm/components/onboarding/animated-status/contract.js +78 -0
  372. package/dist/esm/components/onboarding/animated-status/contract.js.map +1 -0
  373. package/dist/esm/components/onboarding/animated-status/engine.d.ts +24 -0
  374. package/dist/esm/components/onboarding/animated-status/engine.d.ts.map +1 -0
  375. package/dist/esm/components/onboarding/animated-status/engine.js +32 -0
  376. package/dist/esm/components/onboarding/animated-status/engine.js.map +1 -0
  377. package/dist/esm/components/onboarding/animated-status/index.d.ts +5 -0
  378. package/dist/esm/components/onboarding/animated-status/index.d.ts.map +1 -0
  379. package/dist/esm/components/onboarding/animated-status/index.js +4 -0
  380. package/dist/esm/components/onboarding/animated-status/index.js.map +1 -0
  381. package/dist/esm/components/onboarding/animated-status/presets.json +126 -0
  382. package/dist/esm/components/onboarding/animated-status/riv.d.ts +3 -0
  383. package/dist/esm/components/onboarding/animated-status/riv.d.ts.map +1 -0
  384. package/dist/esm/components/onboarding/animated-status/riv.js +4 -0
  385. package/dist/esm/components/onboarding/animated-status/riv.js.map +1 -0
  386. package/dist/esm/components/onboarding/index.d.ts +2 -0
  387. package/dist/esm/components/onboarding/index.d.ts.map +1 -1
  388. package/dist/esm/components/onboarding/index.js +4 -0
  389. package/dist/esm/components/onboarding/index.js.map +1 -1
  390. package/dist/esm/components/onboarding/presets.d.ts.map +1 -1
  391. package/dist/esm/components/onboarding/presets.js +6 -0
  392. package/dist/esm/components/onboarding/presets.js.map +1 -1
  393. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts +4 -6
  394. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.d.ts.map +1 -1
  395. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js +42 -6
  396. package/dist/esm/components/onboarding/receipt-printer/ReceiptStage.js.map +1 -1
  397. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts +47 -0
  398. package/dist/esm/components/onboarding/send-completion/SendCompletionView.d.ts.map +1 -0
  399. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js +108 -0
  400. package/dist/esm/components/onboarding/send-completion/SendCompletionView.js.map +1 -0
  401. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts +9 -0
  402. package/dist/esm/components/onboarding/send-completion/SendStage.d.ts.map +1 -0
  403. package/dist/esm/components/onboarding/send-completion/SendStage.js +34 -0
  404. package/dist/esm/components/onboarding/send-completion/SendStage.js.map +1 -0
  405. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts +33 -0
  406. package/dist/esm/components/onboarding/send-completion/SendStage.types.d.ts.map +1 -0
  407. package/dist/esm/components/onboarding/send-completion/SendStage.types.js +3 -0
  408. package/dist/esm/components/onboarding/send-completion/SendStage.types.js.map +1 -0
  409. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts +4 -0
  410. package/dist/esm/components/onboarding/send-completion/SendStage.web.d.ts.map +1 -0
  411. package/dist/esm/components/onboarding/send-completion/SendStage.web.js +104 -0
  412. package/dist/esm/components/onboarding/send-completion/SendStage.web.js.map +1 -0
  413. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts +11 -0
  414. package/dist/esm/components/onboarding/send-completion/SendStill.d.ts.map +1 -0
  415. package/dist/esm/components/onboarding/send-completion/SendStill.js +14 -0
  416. package/dist/esm/components/onboarding/send-completion/SendStill.js.map +1 -0
  417. package/dist/esm/components/onboarding/send-completion/contract.d.ts +99 -0
  418. package/dist/esm/components/onboarding/send-completion/contract.d.ts.map +1 -0
  419. package/dist/esm/components/onboarding/send-completion/contract.js +76 -0
  420. package/dist/esm/components/onboarding/send-completion/contract.js.map +1 -0
  421. package/dist/esm/components/onboarding/send-completion/engine.d.ts +20 -0
  422. package/dist/esm/components/onboarding/send-completion/engine.d.ts.map +1 -0
  423. package/dist/esm/components/onboarding/send-completion/engine.js +28 -0
  424. package/dist/esm/components/onboarding/send-completion/engine.js.map +1 -0
  425. package/dist/esm/components/onboarding/send-completion/index.d.ts +6 -0
  426. package/dist/esm/components/onboarding/send-completion/index.d.ts.map +1 -0
  427. package/dist/esm/components/onboarding/send-completion/index.js +6 -0
  428. package/dist/esm/components/onboarding/send-completion/index.js.map +1 -0
  429. package/dist/esm/components/onboarding/send-completion/presets.json +132 -0
  430. package/dist/esm/components/onboarding/send-completion/riv.d.ts +3 -0
  431. package/dist/esm/components/onboarding/send-completion/riv.d.ts.map +1 -0
  432. package/dist/esm/components/onboarding/send-completion/riv.js +4 -0
  433. package/dist/esm/components/onboarding/send-completion/riv.js.map +1 -0
  434. package/dist/esm/components/onboarding/shared/actions-data.d.ts.map +1 -1
  435. package/dist/esm/components/onboarding/shared/actions-data.js +2 -0
  436. package/dist/esm/components/onboarding/shared/actions-data.js.map +1 -1
  437. package/dist/esm/components/onboarding/shared/configColor.d.ts +29 -0
  438. package/dist/esm/components/onboarding/shared/configColor.d.ts.map +1 -0
  439. package/dist/esm/components/onboarding/shared/configColor.js +69 -0
  440. package/dist/esm/components/onboarding/shared/configColor.js.map +1 -0
  441. package/dist/esm/components/onboarding/shared/contract.d.ts +1 -1
  442. package/dist/esm/components/onboarding/shared/contract.d.ts.map +1 -1
  443. package/dist/esm/components/onboarding/shared/contract.js +4 -0
  444. package/dist/esm/components/onboarding/shared/contract.js.map +1 -1
  445. package/dist/esm/components/onboarding/shared/describe.d.ts.map +1 -1
  446. package/dist/esm/components/onboarding/shared/describe.js +1 -1
  447. package/dist/esm/components/onboarding/shared/describe.js.map +1 -1
  448. package/dist/esm/components/onboarding/shared/mock.d.ts +2 -0
  449. package/dist/esm/components/onboarding/shared/mock.d.ts.map +1 -1
  450. package/dist/esm/components/onboarding/shared/mock.js +2 -0
  451. package/dist/esm/components/onboarding/shared/mock.js.map +1 -1
  452. package/dist/esm/components/onboarding/views.d.ts.map +1 -1
  453. package/dist/esm/components/onboarding/views.js +8 -0
  454. package/dist/esm/components/onboarding/views.js.map +1 -1
  455. package/dist/esm/index.js +1 -1
  456. package/dist/esm/index.js.map +1 -1
  457. package/dist/esm/motion/MotionPlayer.d.ts +22 -0
  458. package/dist/esm/motion/MotionPlayer.d.ts.map +1 -0
  459. package/dist/esm/motion/MotionPlayer.js +39 -0
  460. package/dist/esm/motion/MotionPlayer.js.map +1 -0
  461. package/dist/esm/motion/agent.d.ts +146 -0
  462. package/dist/esm/motion/agent.d.ts.map +1 -0
  463. package/dist/esm/motion/agent.js +278 -0
  464. package/dist/esm/motion/agent.js.map +1 -0
  465. package/dist/esm/motion/cat/Cat.d.ts +43 -0
  466. package/dist/esm/motion/cat/Cat.d.ts.map +1 -0
  467. package/dist/esm/motion/cat/Cat.js +74 -0
  468. package/dist/esm/motion/cat/Cat.js.map +1 -0
  469. package/dist/esm/motion/cat/animation.d.ts +86 -0
  470. package/dist/esm/motion/cat/animation.d.ts.map +1 -0
  471. package/dist/esm/motion/cat/animation.js +193 -0
  472. package/dist/esm/motion/cat/animation.js.map +1 -0
  473. package/dist/esm/motion/cat/art.generated.d.ts +53 -0
  474. package/dist/esm/motion/cat/art.generated.d.ts.map +1 -0
  475. package/dist/esm/motion/cat/art.generated.js +34 -0
  476. package/dist/esm/motion/cat/art.generated.js.map +1 -0
  477. package/dist/esm/motion/cat/config.d.ts +103 -0
  478. package/dist/esm/motion/cat/config.d.ts.map +1 -0
  479. package/dist/esm/motion/cat/config.js +129 -0
  480. package/dist/esm/motion/cat/config.js.map +1 -0
  481. package/dist/esm/motion/cat/index.d.ts +13 -0
  482. package/dist/esm/motion/cat/index.d.ts.map +1 -0
  483. package/dist/esm/motion/cat/index.js +13 -0
  484. package/dist/esm/motion/cat/index.js.map +1 -0
  485. package/dist/esm/motion/cat/rig.d.ts +44 -0
  486. package/dist/esm/motion/cat/rig.d.ts.map +1 -0
  487. package/dist/esm/motion/cat/rig.js +86 -0
  488. package/dist/esm/motion/cat/rig.js.map +1 -0
  489. package/dist/esm/motion/cat/scene.d.ts +66 -0
  490. package/dist/esm/motion/cat/scene.d.ts.map +1 -0
  491. package/dist/esm/motion/cat/scene.js +137 -0
  492. package/dist/esm/motion/cat/scene.js.map +1 -0
  493. package/dist/esm/motion/configurable/config.d.ts +80 -0
  494. package/dist/esm/motion/configurable/config.d.ts.map +1 -0
  495. package/dist/esm/motion/configurable/config.js +468 -0
  496. package/dist/esm/motion/configurable/config.js.map +1 -0
  497. package/dist/esm/motion/configurable/controls.d.ts +74 -0
  498. package/dist/esm/motion/configurable/controls.d.ts.map +1 -0
  499. package/dist/esm/motion/configurable/controls.js +38 -0
  500. package/dist/esm/motion/configurable/controls.js.map +1 -0
  501. package/dist/esm/motion/easing.d.ts +4 -0
  502. package/dist/esm/motion/easing.d.ts.map +1 -0
  503. package/dist/esm/motion/easing.js +58 -0
  504. package/dist/esm/motion/easing.js.map +1 -0
  505. package/dist/esm/motion/fit.d.ts +8 -0
  506. package/dist/esm/motion/fit.d.ts.map +1 -0
  507. package/dist/esm/motion/fit.js +8 -0
  508. package/dist/esm/motion/fit.js.map +1 -0
  509. package/dist/esm/motion/index.d.ts +27 -0
  510. package/dist/esm/motion/index.d.ts.map +1 -0
  511. package/dist/esm/motion/index.js +21 -0
  512. package/dist/esm/motion/index.js.map +1 -0
  513. package/dist/esm/motion/neon/GlowRenderer.d.ts +31 -0
  514. package/dist/esm/motion/neon/GlowRenderer.d.ts.map +1 -0
  515. package/dist/esm/motion/neon/GlowRenderer.js +14 -0
  516. package/dist/esm/motion/neon/GlowRenderer.js.map +1 -0
  517. package/dist/esm/motion/neon/NeonCanvas.d.ts +42 -0
  518. package/dist/esm/motion/neon/NeonCanvas.d.ts.map +1 -0
  519. package/dist/esm/motion/neon/NeonCanvas.js +92 -0
  520. package/dist/esm/motion/neon/NeonCanvas.js.map +1 -0
  521. package/dist/esm/motion/neon/NeonText.d.ts +26 -0
  522. package/dist/esm/motion/neon/NeonText.d.ts.map +1 -0
  523. package/dist/esm/motion/neon/NeonText.js +103 -0
  524. package/dist/esm/motion/neon/NeonText.js.map +1 -0
  525. package/dist/esm/motion/neon/NeonTextFrame.d.ts +29 -0
  526. package/dist/esm/motion/neon/NeonTextFrame.d.ts.map +1 -0
  527. package/dist/esm/motion/neon/NeonTextFrame.js +33 -0
  528. package/dist/esm/motion/neon/NeonTextFrame.js.map +1 -0
  529. package/dist/esm/motion/neon/artwork.d.ts +29 -0
  530. package/dist/esm/motion/neon/artwork.d.ts.map +1 -0
  531. package/dist/esm/motion/neon/artwork.js +98 -0
  532. package/dist/esm/motion/neon/artwork.js.map +1 -0
  533. package/dist/esm/motion/neon/audio.d.ts +49 -0
  534. package/dist/esm/motion/neon/audio.d.ts.map +1 -0
  535. package/dist/esm/motion/neon/audio.js +161 -0
  536. package/dist/esm/motion/neon/audio.js.map +1 -0
  537. package/dist/esm/motion/neon/config.d.ts +319 -0
  538. package/dist/esm/motion/neon/config.d.ts.map +1 -0
  539. package/dist/esm/motion/neon/config.js +319 -0
  540. package/dist/esm/motion/neon/config.js.map +1 -0
  541. package/dist/esm/motion/neon/flicker.d.ts +82 -0
  542. package/dist/esm/motion/neon/flicker.d.ts.map +1 -0
  543. package/dist/esm/motion/neon/flicker.js +187 -0
  544. package/dist/esm/motion/neon/flicker.js.map +1 -0
  545. package/dist/esm/motion/neon/fonts.d.ts +29 -0
  546. package/dist/esm/motion/neon/fonts.d.ts.map +1 -0
  547. package/dist/esm/motion/neon/fonts.js +47 -0
  548. package/dist/esm/motion/neon/fonts.js.map +1 -0
  549. package/dist/esm/motion/neon/frame.d.ts +22 -0
  550. package/dist/esm/motion/neon/frame.d.ts.map +1 -0
  551. package/dist/esm/motion/neon/frame.js +20 -0
  552. package/dist/esm/motion/neon/frame.js.map +1 -0
  553. package/dist/esm/motion/neon/glitch.d.ts +64 -0
  554. package/dist/esm/motion/neon/glitch.d.ts.map +1 -0
  555. package/dist/esm/motion/neon/glitch.js +108 -0
  556. package/dist/esm/motion/neon/glitch.js.map +1 -0
  557. package/dist/esm/motion/neon/index.d.ts +29 -0
  558. package/dist/esm/motion/neon/index.d.ts.map +1 -0
  559. package/dist/esm/motion/neon/index.js +28 -0
  560. package/dist/esm/motion/neon/index.js.map +1 -0
  561. package/dist/esm/motion/neon/layers.d.ts +56 -0
  562. package/dist/esm/motion/neon/layers.d.ts.map +1 -0
  563. package/dist/esm/motion/neon/layers.js +64 -0
  564. package/dist/esm/motion/neon/layers.js.map +1 -0
  565. package/dist/esm/motion/neon/material.d.ts +68 -0
  566. package/dist/esm/motion/neon/material.d.ts.map +1 -0
  567. package/dist/esm/motion/neon/material.js +51 -0
  568. package/dist/esm/motion/neon/material.js.map +1 -0
  569. package/dist/esm/motion/neon/random.d.ts +15 -0
  570. package/dist/esm/motion/neon/random.d.ts.map +1 -0
  571. package/dist/esm/motion/neon/random.js +37 -0
  572. package/dist/esm/motion/neon/random.js.map +1 -0
  573. package/dist/esm/motion/neon/scene.d.ts +255 -0
  574. package/dist/esm/motion/neon/scene.d.ts.map +1 -0
  575. package/dist/esm/motion/neon/scene.js +532 -0
  576. package/dist/esm/motion/neon/scene.js.map +1 -0
  577. package/dist/esm/motion/neon/synth.d.ts +18 -0
  578. package/dist/esm/motion/neon/synth.d.ts.map +1 -0
  579. package/dist/esm/motion/neon/synth.js +208 -0
  580. package/dist/esm/motion/neon/synth.js.map +1 -0
  581. package/dist/esm/motion/neon/typography.d.ts +53 -0
  582. package/dist/esm/motion/neon/typography.d.ts.map +1 -0
  583. package/dist/esm/motion/neon/typography.js +74 -0
  584. package/dist/esm/motion/neon/typography.js.map +1 -0
  585. package/dist/esm/motion/neon/wall.d.ts +62 -0
  586. package/dist/esm/motion/neon/wall.d.ts.map +1 -0
  587. package/dist/esm/motion/neon/wall.js +106 -0
  588. package/dist/esm/motion/neon/wall.js.map +1 -0
  589. package/dist/esm/motion/paperfold/PaperFold.d.ts +36 -0
  590. package/dist/esm/motion/paperfold/PaperFold.d.ts.map +1 -0
  591. package/dist/esm/motion/paperfold/PaperFold.js +37 -0
  592. package/dist/esm/motion/paperfold/PaperFold.js.map +1 -0
  593. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts +39 -0
  594. package/dist/esm/motion/paperfold/PaperFoldFrame.d.ts.map +1 -0
  595. package/dist/esm/motion/paperfold/PaperFoldFrame.js +283 -0
  596. package/dist/esm/motion/paperfold/PaperFoldFrame.js.map +1 -0
  597. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts +27 -0
  598. package/dist/esm/motion/paperfold/PaperFoldPlayer.d.ts.map +1 -0
  599. package/dist/esm/motion/paperfold/PaperFoldPlayer.js +56 -0
  600. package/dist/esm/motion/paperfold/PaperFoldPlayer.js.map +1 -0
  601. package/dist/esm/motion/paperfold/art.d.ts +148 -0
  602. package/dist/esm/motion/paperfold/art.d.ts.map +1 -0
  603. package/dist/esm/motion/paperfold/art.js +374 -0
  604. package/dist/esm/motion/paperfold/art.js.map +1 -0
  605. package/dist/esm/motion/paperfold/config.d.ts +47 -0
  606. package/dist/esm/motion/paperfold/config.d.ts.map +1 -0
  607. package/dist/esm/motion/paperfold/config.js +96 -0
  608. package/dist/esm/motion/paperfold/config.js.map +1 -0
  609. package/dist/esm/motion/paperfold/controls.d.ts +57 -0
  610. package/dist/esm/motion/paperfold/controls.d.ts.map +1 -0
  611. package/dist/esm/motion/paperfold/controls.js +506 -0
  612. package/dist/esm/motion/paperfold/controls.js.map +1 -0
  613. package/dist/esm/motion/paperfold/engine.d.ts +397 -0
  614. package/dist/esm/motion/paperfold/engine.d.ts.map +1 -0
  615. package/dist/esm/motion/paperfold/engine.js +699 -0
  616. package/dist/esm/motion/paperfold/engine.js.map +1 -0
  617. package/dist/esm/motion/paperfold/fonts.d.ts +3 -0
  618. package/dist/esm/motion/paperfold/fonts.d.ts.map +1 -0
  619. package/dist/esm/motion/paperfold/fonts.js +21 -0
  620. package/dist/esm/motion/paperfold/fonts.js.map +1 -0
  621. package/dist/esm/motion/paperfold/index.d.ts +17 -0
  622. package/dist/esm/motion/paperfold/index.d.ts.map +1 -0
  623. package/dist/esm/motion/paperfold/index.js +17 -0
  624. package/dist/esm/motion/paperfold/index.js.map +1 -0
  625. package/dist/esm/motion/paperfold/manipulate.d.ts +59 -0
  626. package/dist/esm/motion/paperfold/manipulate.d.ts.map +1 -0
  627. package/dist/esm/motion/paperfold/manipulate.js +161 -0
  628. package/dist/esm/motion/paperfold/manipulate.js.map +1 -0
  629. package/dist/esm/motion/paperfold/presets.d.ts +9 -0
  630. package/dist/esm/motion/paperfold/presets.d.ts.map +1 -0
  631. package/dist/esm/motion/paperfold/presets.js +115 -0
  632. package/dist/esm/motion/paperfold/presets.js.map +1 -0
  633. package/dist/esm/motion/paperfold/template.d.ts +3 -0
  634. package/dist/esm/motion/paperfold/template.d.ts.map +1 -0
  635. package/dist/esm/motion/paperfold/template.js +37 -0
  636. package/dist/esm/motion/paperfold/template.js.map +1 -0
  637. package/dist/esm/motion/player.d.ts +35 -0
  638. package/dist/esm/motion/player.d.ts.map +1 -0
  639. package/dist/esm/motion/player.js +197 -0
  640. package/dist/esm/motion/player.js.map +1 -0
  641. package/dist/esm/motion/promo/PromoFrame.d.ts +31 -0
  642. package/dist/esm/motion/promo/PromoFrame.d.ts.map +1 -0
  643. package/dist/esm/motion/promo/PromoFrame.js +288 -0
  644. package/dist/esm/motion/promo/PromoFrame.js.map +1 -0
  645. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts +25 -0
  646. package/dist/esm/motion/promo/PromoShowcasePlayer.d.ts.map +1 -0
  647. package/dist/esm/motion/promo/PromoShowcasePlayer.js +56 -0
  648. package/dist/esm/motion/promo/PromoShowcasePlayer.js.map +1 -0
  649. package/dist/esm/motion/promo/config.d.ts +91 -0
  650. package/dist/esm/motion/promo/config.d.ts.map +1 -0
  651. package/dist/esm/motion/promo/config.js +550 -0
  652. package/dist/esm/motion/promo/config.js.map +1 -0
  653. package/dist/esm/motion/promo/controls.d.ts +86 -0
  654. package/dist/esm/motion/promo/controls.d.ts.map +1 -0
  655. package/dist/esm/motion/promo/controls.js +567 -0
  656. package/dist/esm/motion/promo/controls.js.map +1 -0
  657. package/dist/esm/motion/promo/easing.d.ts +3 -0
  658. package/dist/esm/motion/promo/easing.d.ts.map +1 -0
  659. package/dist/esm/motion/promo/easing.js +32 -0
  660. package/dist/esm/motion/promo/easing.js.map +1 -0
  661. package/dist/esm/motion/promo/engine.d.ts +205 -0
  662. package/dist/esm/motion/promo/engine.d.ts.map +1 -0
  663. package/dist/esm/motion/promo/engine.js +551 -0
  664. package/dist/esm/motion/promo/engine.js.map +1 -0
  665. package/dist/esm/motion/promo/fonts.d.ts +7 -0
  666. package/dist/esm/motion/promo/fonts.d.ts.map +1 -0
  667. package/dist/esm/motion/promo/fonts.js +16 -0
  668. package/dist/esm/motion/promo/fonts.js.map +1 -0
  669. package/dist/esm/motion/promo/icons.d.ts +7 -0
  670. package/dist/esm/motion/promo/icons.d.ts.map +1 -0
  671. package/dist/esm/motion/promo/icons.js +26 -0
  672. package/dist/esm/motion/promo/icons.js.map +1 -0
  673. package/dist/esm/motion/promo/index.d.ts +15 -0
  674. package/dist/esm/motion/promo/index.d.ts.map +1 -0
  675. package/dist/esm/motion/promo/index.js +15 -0
  676. package/dist/esm/motion/promo/index.js.map +1 -0
  677. package/dist/esm/motion/promo/presets.d.ts +13 -0
  678. package/dist/esm/motion/promo/presets.d.ts.map +1 -0
  679. package/dist/esm/motion/promo/presets.js +40 -0
  680. package/dist/esm/motion/promo/presets.js.map +1 -0
  681. package/dist/esm/motion/promo/template.d.ts +8 -0
  682. package/dist/esm/motion/promo/template.d.ts.map +1 -0
  683. package/dist/esm/motion/promo/template.js +35 -0
  684. package/dist/esm/motion/promo/template.js.map +1 -0
  685. package/dist/esm/motion/replication2/Replication2Player.d.ts +26 -0
  686. package/dist/esm/motion/replication2/Replication2Player.d.ts.map +1 -0
  687. package/dist/esm/motion/replication2/Replication2Player.js +90 -0
  688. package/dist/esm/motion/replication2/Replication2Player.js.map +1 -0
  689. package/dist/esm/motion/replication2/config.d.ts +78 -0
  690. package/dist/esm/motion/replication2/config.d.ts.map +1 -0
  691. package/dist/esm/motion/replication2/config.js +341 -0
  692. package/dist/esm/motion/replication2/config.js.map +1 -0
  693. package/dist/esm/motion/replication2/controls.d.ts +70 -0
  694. package/dist/esm/motion/replication2/controls.d.ts.map +1 -0
  695. package/dist/esm/motion/replication2/controls.js +283 -0
  696. package/dist/esm/motion/replication2/controls.js.map +1 -0
  697. package/dist/esm/motion/replication2/driver.d.ts +23 -0
  698. package/dist/esm/motion/replication2/driver.d.ts.map +1 -0
  699. package/dist/esm/motion/replication2/driver.js +65 -0
  700. package/dist/esm/motion/replication2/driver.js.map +1 -0
  701. package/dist/esm/motion/replication2/easing.d.ts +19 -0
  702. package/dist/esm/motion/replication2/easing.d.ts.map +1 -0
  703. package/dist/esm/motion/replication2/easing.js +92 -0
  704. package/dist/esm/motion/replication2/easing.js.map +1 -0
  705. package/dist/esm/motion/replication2/engine.d.ts +236 -0
  706. package/dist/esm/motion/replication2/engine.d.ts.map +1 -0
  707. package/dist/esm/motion/replication2/engine.js +470 -0
  708. package/dist/esm/motion/replication2/engine.js.map +1 -0
  709. package/dist/esm/motion/replication2/html.d.ts +30 -0
  710. package/dist/esm/motion/replication2/html.d.ts.map +1 -0
  711. package/dist/esm/motion/replication2/html.js +83 -0
  712. package/dist/esm/motion/replication2/html.js.map +1 -0
  713. package/dist/esm/motion/replication2/index.d.ts +15 -0
  714. package/dist/esm/motion/replication2/index.d.ts.map +1 -0
  715. package/dist/esm/motion/replication2/index.js +15 -0
  716. package/dist/esm/motion/replication2/index.js.map +1 -0
  717. package/dist/esm/motion/replication2/measure.d.ts +3 -0
  718. package/dist/esm/motion/replication2/measure.d.ts.map +1 -0
  719. package/dist/esm/motion/replication2/measure.js +27 -0
  720. package/dist/esm/motion/replication2/measure.js.map +1 -0
  721. package/dist/esm/motion/replication2/metrics.d.ts +6 -0
  722. package/dist/esm/motion/replication2/metrics.d.ts.map +1 -0
  723. package/dist/esm/motion/replication2/metrics.js +7 -0
  724. package/dist/esm/motion/replication2/metrics.js.map +1 -0
  725. package/dist/esm/motion/replication2/presets.d.ts +13 -0
  726. package/dist/esm/motion/replication2/presets.d.ts.map +1 -0
  727. package/dist/esm/motion/replication2/presets.js +63 -0
  728. package/dist/esm/motion/replication2/presets.js.map +1 -0
  729. package/dist/esm/motion/replication2/riv.d.ts +3 -0
  730. package/dist/esm/motion/replication2/riv.d.ts.map +1 -0
  731. package/dist/esm/motion/replication2/riv.js +4 -0
  732. package/dist/esm/motion/replication2/riv.js.map +1 -0
  733. package/dist/esm/motion/replication2/rive-contract.d.ts +27 -0
  734. package/dist/esm/motion/replication2/rive-contract.d.ts.map +1 -0
  735. package/dist/esm/motion/replication2/rive-contract.js +153 -0
  736. package/dist/esm/motion/replication2/rive-contract.js.map +1 -0
  737. package/dist/esm/motion/replication2/template.d.ts +8 -0
  738. package/dist/esm/motion/replication2/template.d.ts.map +1 -0
  739. package/dist/esm/motion/replication2/template.js +32 -0
  740. package/dist/esm/motion/replication2/template.js.map +1 -0
  741. package/dist/esm/motion/sample.d.ts +61 -0
  742. package/dist/esm/motion/sample.d.ts.map +1 -0
  743. package/dist/esm/motion/sample.js +138 -0
  744. package/dist/esm/motion/sample.js.map +1 -0
  745. package/dist/esm/motion/templates/hey-template.d.ts +3 -0
  746. package/dist/esm/motion/templates/hey-template.d.ts.map +1 -0
  747. package/dist/esm/motion/templates/hey-template.js +1549 -0
  748. package/dist/esm/motion/templates/hey-template.js.map +1 -0
  749. package/dist/esm/motion/templates/index.d.ts +22 -0
  750. package/dist/esm/motion/templates/index.d.ts.map +1 -0
  751. package/dist/esm/motion/templates/index.js +15 -0
  752. package/dist/esm/motion/templates/index.js.map +1 -0
  753. package/dist/esm/motion/templates/word-motion.d.ts +3 -0
  754. package/dist/esm/motion/templates/word-motion.d.ts.map +1 -0
  755. package/dist/esm/motion/templates/word-motion.js +1162 -0
  756. package/dist/esm/motion/templates/word-motion.js.map +1 -0
  757. package/dist/esm/motion/types.d.ts +192 -0
  758. package/dist/esm/motion/types.d.ts.map +1 -0
  759. package/dist/esm/motion/types.js +2 -0
  760. package/dist/esm/motion/types.js.map +1 -0
  761. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts +22 -0
  762. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.d.ts.map +1 -0
  763. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js +58 -0
  764. package/dist/esm/motion/typesurface/TypeSurfaceCanvas.js.map +1 -0
  765. package/dist/esm/motion/typesurface/art.d.ts +21 -0
  766. package/dist/esm/motion/typesurface/art.d.ts.map +1 -0
  767. package/dist/esm/motion/typesurface/art.js +854 -0
  768. package/dist/esm/motion/typesurface/art.js.map +1 -0
  769. package/dist/esm/motion/typesurface/config.d.ts +273 -0
  770. package/dist/esm/motion/typesurface/config.d.ts.map +1 -0
  771. package/dist/esm/motion/typesurface/config.js +260 -0
  772. package/dist/esm/motion/typesurface/config.js.map +1 -0
  773. package/dist/esm/motion/typesurface/engine.d.ts +94 -0
  774. package/dist/esm/motion/typesurface/engine.d.ts.map +1 -0
  775. package/dist/esm/motion/typesurface/engine.js +603 -0
  776. package/dist/esm/motion/typesurface/engine.js.map +1 -0
  777. package/dist/esm/motion/typesurface/fonts.d.ts +25 -0
  778. package/dist/esm/motion/typesurface/fonts.d.ts.map +1 -0
  779. package/dist/esm/motion/typesurface/fonts.js +40 -0
  780. package/dist/esm/motion/typesurface/fonts.js.map +1 -0
  781. package/dist/esm/motion/typesurface/index.d.ts +17 -0
  782. package/dist/esm/motion/typesurface/index.d.ts.map +1 -0
  783. package/dist/esm/motion/typesurface/index.js +17 -0
  784. package/dist/esm/motion/typesurface/index.js.map +1 -0
  785. package/dist/esm/motion/typesurface/layout.d.ts +57 -0
  786. package/dist/esm/motion/typesurface/layout.d.ts.map +1 -0
  787. package/dist/esm/motion/typesurface/layout.js +122 -0
  788. package/dist/esm/motion/typesurface/layout.js.map +1 -0
  789. package/dist/esm/motion/typesurface/ops.d.ts +70 -0
  790. package/dist/esm/motion/typesurface/ops.d.ts.map +1 -0
  791. package/dist/esm/motion/typesurface/ops.js +164 -0
  792. package/dist/esm/motion/typesurface/ops.js.map +1 -0
  793. package/dist/esm/motion/typesurface/presets.d.ts +33 -0
  794. package/dist/esm/motion/typesurface/presets.d.ts.map +1 -0
  795. package/dist/esm/motion/typesurface/presets.js +185 -0
  796. package/dist/esm/motion/typesurface/presets.js.map +1 -0
  797. package/dist/esm/motion/typesurface/renderer.d.ts +78 -0
  798. package/dist/esm/motion/typesurface/renderer.d.ts.map +1 -0
  799. package/dist/esm/motion/typesurface/renderer.js +666 -0
  800. package/dist/esm/motion/typesurface/renderer.js.map +1 -0
  801. package/dist/esm/motion/typesurface/shaders.d.ts +17 -0
  802. package/dist/esm/motion/typesurface/shaders.d.ts.map +1 -0
  803. package/dist/esm/motion/typesurface/shaders.js +297 -0
  804. package/dist/esm/motion/typesurface/shaders.js.map +1 -0
  805. package/dist/esm/motion/typesurface/surfaces.d.ts +81 -0
  806. package/dist/esm/motion/typesurface/surfaces.d.ts.map +1 -0
  807. package/dist/esm/motion/typesurface/surfaces.js +149 -0
  808. package/dist/esm/motion/typesurface/surfaces.js.map +1 -0
  809. package/dist/esm/motion/typesurface/text.d.ts +17 -0
  810. package/dist/esm/motion/typesurface/text.d.ts.map +1 -0
  811. package/dist/esm/motion/typesurface/text.js +28 -0
  812. package/dist/esm/motion/typesurface/text.js.map +1 -0
  813. package/dist/esm/motion/typesurface/timeline.d.ts +15 -0
  814. package/dist/esm/motion/typesurface/timeline.d.ts.map +1 -0
  815. package/dist/esm/motion/typesurface/timeline.js +57 -0
  816. package/dist/esm/motion/typesurface/timeline.js.map +1 -0
  817. package/dist/esm/motion/validate.d.ts +22 -0
  818. package/dist/esm/motion/validate.d.ts.map +1 -0
  819. package/dist/esm/motion/validate.js +84 -0
  820. package/dist/esm/motion/validate.js.map +1 -0
  821. package/dist/esm/native/RiveReceiptStage.d.ts +25 -2
  822. package/dist/esm/native/RiveReceiptStage.d.ts.map +1 -1
  823. package/dist/esm/native/RiveReceiptStage.js +7 -148
  824. package/dist/esm/native/RiveReceiptStage.js.map +1 -1
  825. package/dist/esm/native/riveReceiptStageFactory.d.ts +26 -0
  826. package/dist/esm/native/riveReceiptStageFactory.d.ts.map +1 -0
  827. package/dist/esm/native/riveReceiptStageFactory.js +159 -0
  828. package/dist/esm/native/riveReceiptStageFactory.js.map +1 -0
  829. package/dist/esm/tokens/stage.d.ts +7 -0
  830. package/dist/esm/tokens/stage.d.ts.map +1 -0
  831. package/dist/esm/tokens/stage.js +7 -0
  832. package/dist/esm/tokens/stage.js.map +1 -0
  833. package/package.json +36 -1
  834. package/spec/examples/components/onboarding/animated-status/case1.json +42 -0
  835. package/spec/examples/components/onboarding/animated-status/case2.json +42 -0
  836. package/spec/examples/components/onboarding/animated-status/case3.json +42 -0
  837. package/spec/examples/components/onboarding/animated-status/case4.json +42 -0
  838. package/spec/examples/components/onboarding/animated-status/case5.json +42 -0
  839. package/spec/examples/components/onboarding/send-completion/case1.json +48 -0
  840. package/spec/examples/components/onboarding/send-completion/case2.json +48 -0
  841. package/spec/examples/components/onboarding/send-completion/case3.json +48 -0
  842. package/spec/examples/components/onboarding/send-completion/case4.json +48 -0
  843. package/spec/examples/components/onboarding/send-completion/case5.json +48 -0
  844. package/spec/families/onboarding.schema.json +610 -1
  845. package/src/agent/AgentComponent.tsx +1 -1
  846. package/src/agent/base.ts +17 -0
  847. package/src/agent/catalog.ts +0 -32
  848. package/src/agent/core.ts +6 -14
  849. package/src/agent/index.ts +6 -5
  850. package/src/agent/manifests.ts +83 -1
  851. package/src/agent/result.ts +6 -0
  852. package/src/agent/search/document.ts +46 -0
  853. package/src/agent/search/embedding.ts +95 -0
  854. package/src/agent/search/index.ts +20 -0
  855. package/src/agent/search/lexical.ts +25 -0
  856. package/src/agent/search/normalize.ts +17 -0
  857. package/src/agent/search/search.ts +148 -0
  858. package/src/agent/search/searchIndex.ts +107 -0
  859. package/src/agent/search/types.ts +68 -0
  860. package/src/agent/search/weights.ts +32 -0
  861. package/src/agent/types.ts +1 -1
  862. package/src/components/catalog.ts +21 -1
  863. package/src/components/onboarding/animated-status/AnimatedStage.tsx +18 -0
  864. package/src/components/onboarding/animated-status/AnimatedStage.types.ts +30 -0
  865. package/src/components/onboarding/animated-status/AnimatedStage.web.tsx +99 -0
  866. package/src/components/onboarding/animated-status/AnimatedStatusView.tsx +109 -0
  867. package/src/components/onboarding/animated-status/AnimatedStill.tsx +23 -0
  868. package/src/components/onboarding/animated-status/contract.ts +105 -0
  869. package/src/components/onboarding/animated-status/engine.ts +49 -0
  870. package/src/components/onboarding/animated-status/index.ts +8 -0
  871. package/src/components/onboarding/animated-status/presets.json +126 -0
  872. package/src/components/onboarding/animated-status/riv.ts +4 -0
  873. package/src/components/onboarding/index.ts +4 -0
  874. package/src/components/onboarding/presets.ts +6 -0
  875. package/src/components/onboarding/receipt-printer/ReceiptStage.tsx +46 -7
  876. package/src/components/onboarding/send-completion/SendCompletionView.tsx +164 -0
  877. package/src/components/onboarding/send-completion/SendStage.tsx +27 -0
  878. package/src/components/onboarding/send-completion/SendStage.types.ts +32 -0
  879. package/src/components/onboarding/send-completion/SendStage.web.tsx +116 -0
  880. package/src/components/onboarding/send-completion/SendStill.tsx +19 -0
  881. package/src/components/onboarding/send-completion/contract.ts +127 -0
  882. package/src/components/onboarding/send-completion/engine.ts +37 -0
  883. package/src/components/onboarding/send-completion/index.ts +10 -0
  884. package/src/components/onboarding/send-completion/presets.json +132 -0
  885. package/src/components/onboarding/send-completion/riv.ts +4 -0
  886. package/src/components/onboarding/shared/actions-data.ts +2 -0
  887. package/src/components/onboarding/shared/configColor.ts +72 -0
  888. package/src/components/onboarding/shared/contract.ts +4 -0
  889. package/src/components/onboarding/shared/describe.ts +1 -1
  890. package/src/components/onboarding/shared/mock.ts +2 -0
  891. package/src/components/onboarding/views.ts +8 -0
  892. package/src/index.ts +1 -1
  893. package/src/motion/MotionPlayer.tsx +62 -0
  894. package/src/motion/agent.ts +288 -0
  895. package/src/motion/cat/Cat.tsx +118 -0
  896. package/src/motion/cat/animation.ts +206 -0
  897. package/src/motion/cat/art.generated.ts +44 -0
  898. package/src/motion/cat/config.ts +186 -0
  899. package/src/motion/cat/index.ts +26 -0
  900. package/src/motion/cat/rig.ts +102 -0
  901. package/src/motion/cat/scene.ts +181 -0
  902. package/src/motion/configurable/config.ts +420 -0
  903. package/src/motion/configurable/controls.ts +93 -0
  904. package/src/motion/easing.ts +55 -0
  905. package/src/motion/fit.ts +8 -0
  906. package/src/motion/index.ts +29 -0
  907. package/src/motion/neon/GlowRenderer.tsx +83 -0
  908. package/src/motion/neon/NeonCanvas.tsx +175 -0
  909. package/src/motion/neon/NeonText.tsx +113 -0
  910. package/src/motion/neon/NeonTextFrame.tsx +67 -0
  911. package/src/motion/neon/artwork.ts +95 -0
  912. package/src/motion/neon/audio.ts +162 -0
  913. package/src/motion/neon/config.ts +484 -0
  914. package/src/motion/neon/flicker.ts +225 -0
  915. package/src/motion/neon/fonts.ts +76 -0
  916. package/src/motion/neon/frame.ts +34 -0
  917. package/src/motion/neon/glitch.ts +142 -0
  918. package/src/motion/neon/index.ts +41 -0
  919. package/src/motion/neon/layers.tsx +209 -0
  920. package/src/motion/neon/material.ts +88 -0
  921. package/src/motion/neon/random.ts +40 -0
  922. package/src/motion/neon/scene.ts +610 -0
  923. package/src/motion/neon/synth.ts +188 -0
  924. package/src/motion/neon/typography.ts +102 -0
  925. package/src/motion/neon/wall.ts +157 -0
  926. package/src/motion/paperfold/PaperFold.tsx +45 -0
  927. package/src/motion/paperfold/PaperFoldFrame.tsx +576 -0
  928. package/src/motion/paperfold/PaperFoldPlayer.tsx +80 -0
  929. package/src/motion/paperfold/art.ts +455 -0
  930. package/src/motion/paperfold/config.ts +98 -0
  931. package/src/motion/paperfold/controls.ts +557 -0
  932. package/src/motion/paperfold/engine.ts +852 -0
  933. package/src/motion/paperfold/fonts.ts +21 -0
  934. package/src/motion/paperfold/index.ts +30 -0
  935. package/src/motion/paperfold/manipulate.ts +188 -0
  936. package/src/motion/paperfold/presets.ts +117 -0
  937. package/src/motion/paperfold/template.ts +38 -0
  938. package/src/motion/player.ts +207 -0
  939. package/src/motion/promo/PromoFrame.tsx +501 -0
  940. package/src/motion/promo/PromoShowcasePlayer.tsx +78 -0
  941. package/src/motion/promo/config.ts +479 -0
  942. package/src/motion/promo/controls.ts +643 -0
  943. package/src/motion/promo/easing.ts +36 -0
  944. package/src/motion/promo/engine.ts +587 -0
  945. package/src/motion/promo/fonts.ts +16 -0
  946. package/src/motion/promo/icons.tsx +29 -0
  947. package/src/motion/promo/index.ts +24 -0
  948. package/src/motion/promo/presets.ts +40 -0
  949. package/src/motion/promo/template.ts +36 -0
  950. package/src/motion/replication2/Replication2Player.tsx +115 -0
  951. package/src/motion/replication2/config.ts +323 -0
  952. package/src/motion/replication2/controls.ts +336 -0
  953. package/src/motion/replication2/driver.ts +92 -0
  954. package/src/motion/replication2/easing.ts +88 -0
  955. package/src/motion/replication2/engine.ts +539 -0
  956. package/src/motion/replication2/html.ts +87 -0
  957. package/src/motion/replication2/index.ts +14 -0
  958. package/src/motion/replication2/measure.ts +28 -0
  959. package/src/motion/replication2/metrics.ts +7 -0
  960. package/src/motion/replication2/presets.ts +63 -0
  961. package/src/motion/replication2/riv.ts +4 -0
  962. package/src/motion/replication2/rive-contract.ts +165 -0
  963. package/src/motion/replication2/template.ts +33 -0
  964. package/src/motion/sample.ts +173 -0
  965. package/src/motion/templates/hey-template.ts +1553 -0
  966. package/src/motion/templates/index.ts +17 -0
  967. package/src/motion/templates/word-motion.ts +1166 -0
  968. package/src/motion/types.ts +162 -0
  969. package/src/motion/typesurface/TypeSurfaceCanvas.tsx +73 -0
  970. package/src/motion/typesurface/art.ts +639 -0
  971. package/src/motion/typesurface/config.ts +486 -0
  972. package/src/motion/typesurface/engine.ts +586 -0
  973. package/src/motion/typesurface/fonts.ts +63 -0
  974. package/src/motion/typesurface/index.ts +16 -0
  975. package/src/motion/typesurface/layout.ts +133 -0
  976. package/src/motion/typesurface/ops.ts +196 -0
  977. package/src/motion/typesurface/presets.ts +199 -0
  978. package/src/motion/typesurface/renderer.ts +579 -0
  979. package/src/motion/typesurface/shaders.ts +303 -0
  980. package/src/motion/typesurface/surfaces.ts +223 -0
  981. package/src/motion/typesurface/text.ts +35 -0
  982. package/src/motion/typesurface/timeline.ts +58 -0
  983. package/src/motion/validate.ts +101 -0
  984. package/src/native/RiveReceiptStage.tsx +8 -155
  985. package/src/native/riveReceiptStageFactory.tsx +175 -0
  986. package/src/tokens/stage.ts +6 -0
  987. package/tools/ask/dist/components.mjs +7221 -44
  988. package/tools/ask/mcp.mjs +80 -1
@@ -0,0 +1,576 @@
1
+ /* eslint-disable comppack/no-raw-colour -- a video frame, not site UI: every colour is config content; the few literals are fixed tints (white light, black shade) of the lighting model and the debug overlay's own colours (DECISIONS §27). */
2
+ import type { ComponentType, CSSProperties, ReactNode } from 'react';
3
+ import { getPath, type PaperFoldConfig } from './config';
4
+ import { PANELS, type PanelId } from './controls';
5
+ import { frameState, mixHex, rgba, type EdgeFx, type FrameState, type HandState, type StripState, type TextFit } from './engine';
6
+ import { bottomHand, sleevePath, topHand, type HandArt, type HandFill, type HandPart, type HandShape } from './art';
7
+
8
+ /**
9
+ * **The procedural renderer.** Draws one frame of paper-fold-promo from the engine's state with plain
10
+ * DOM and inline SVG. Each panel is its own box placed by the engine's `matrix3d` (true perspective
11
+ * about its crease), painted in the engine's explicit depth order; its copy is live text inside it.
12
+ * Hands are inline vector paths in two pieces (body behind the paper, gripping finger in front).
13
+ * No Remotion, no clock: the Remotion composition passes `useCurrentFrame()`, the web player a rAF
14
+ * clock, and both get the same pixels. Everything is laid out at the render size, so 4K is vector.
15
+ *
16
+ * `debug` (development only — never part of the config) overlays the creases, panel outlines and ids,
17
+ * fold pivots and angles, the hands' grip anchors, a normalized grid and the scene/frame.
18
+ */
19
+ export type ImageProps = { src: string; style?: CSSProperties; alt: string };
20
+ export type PaperFoldFrameProps = {
21
+ /** A validated, complete config (resolveConfig). */
22
+ config: PaperFoldConfig;
23
+ /** Authored motion frame (60 fps). */
24
+ frame: number;
25
+ width: number;
26
+ height: number;
27
+ /** Development overlay. Not part of the config, so it can never reach a production render through it. */
28
+ debug?: boolean;
29
+ resolveAsset?: (ref: string) => string;
30
+ ImageComponent?: ComponentType<ImageProps>;
31
+ };
32
+
33
+ const DefaultImage = ({ src, style, alt }: ImageProps) => <img src={src} style={style} alt={alt} />;
34
+ const defaultResolve = (ref: string) => (ref.startsWith('static:') ? `/${ref.slice(7)}` : ref);
35
+ export const FONT_STACK = (family: string) => `'${family}', 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif`;
36
+
37
+ type Ctx = { st: FrameState; n: (p: string) => number; s: (p: string) => string; b: (p: string) => boolean };
38
+ const full: CSSProperties = { position: 'absolute', inset: 0 };
39
+
40
+ export function PaperFoldFrame({ config, frame, width, height, debug = false, resolveAsset = defaultResolve, ImageComponent = DefaultImage }: PaperFoldFrameProps) {
41
+ const st = frameState(config, frame, width, height);
42
+ const n = (p: string) => getPath(config, p) as number;
43
+ const s = (p: string) => getPath(config, p) as string;
44
+ const b = (p: string) => getPath(config, p) as boolean;
45
+ const ctx: Ctx = { st, n, s, b };
46
+ return (
47
+ <div
48
+ data-paper-fold-frame={Math.round(st.frame * 100) / 100}
49
+ data-phase={st.phase.label}
50
+ style={{ position: 'relative', width, height, overflow: 'hidden', background: s('background.baseColor'), fontFamily: FONT_STACK('Inter') }}
51
+ >
52
+ <div style={{ ...full, transformOrigin: '0 0', transform: st.camera.backgroundTransform }}>
53
+ <Background ctx={ctx} />
54
+ </div>
55
+ {b('background.noise.enabled') && <Noise ctx={ctx} />}
56
+ <div data-layer="scene" style={{ ...full, transformOrigin: '0 0', transform: st.camera.transform }}>
57
+ {b('paper.shadow.enabled') && <SheetShadow ctx={ctx} />}
58
+ {st.strips.map((p) => <StripView key={p.index} ctx={ctx} strip={p} last={st.strips.length - 1} />)}
59
+ {st.hands.filter((h) => h.enabled).map((h) => <Hand key={h.id} ctx={ctx} h={h} />)}
60
+ </div>
61
+ {b('logo.enabled') && <Logo ctx={ctx} img={(src, style, alt) => <ImageComponent src={resolveAsset(src)} style={style} alt={alt} />} />}
62
+ {b('cta.enabled') && s('content.cta.text') !== '' && <Cta ctx={ctx} />}
63
+ {debug && <Debug ctx={ctx} />}
64
+ </div>
65
+ );
66
+ }
67
+
68
+ /* ─── background ──────────────────────────────────────────────────────────────────────────────── */
69
+ function Background({ ctx }: { ctx: Ctx }) {
70
+ const { st, n, s, b } = ctx;
71
+ const { width: W, height: H, unit: u } = st.size;
72
+ const stops = getPath(st.cfg, 'background.gradient.stops') as { offset: number; color: string }[];
73
+ const list = stops.map((x) => `${x.color} ${Math.round(x.offset * 1000) / 10}%`).join(', ');
74
+ const gradient = s('background.gradient.type') === 'radial' ? `radial-gradient(circle at 50% 45%, ${list})` : `linear-gradient(${n('background.gradient.angle')}deg, ${list})`;
75
+ const bt = 'background.backgroundTypography';
76
+ const size = n(`${bt}.fontSize`) * u * st.size.backgroundType.scale;
77
+ const word = Array.from({ length: st.background.typeRepeat }, () => s(`${bt}.text`)).join(' ');
78
+ const glowR = n('background.glow.radius') * Math.min(W, H);
79
+ return (
80
+ <>
81
+ {b('background.gradient.enabled') && <div style={{ ...full, background: gradient }} />}
82
+ {b(`${bt}.enabled`) && s(`${bt}.text`) !== '' && (
83
+ <div data-layer="background-type" style={{ ...full, transformOrigin: '50% 50%', transform: `rotate(${n(`${bt}.rotation`)}deg)`, opacity: n(`${bt}.opacity`) }}>
84
+ {st.background.typeRows.map((r, i) => (
85
+ <div
86
+ key={i}
87
+ style={{
88
+ position: 'absolute', left: r.x, top: r.y, whiteSpace: 'pre', lineHeight: 1, fontSize: size,
89
+ fontFamily: FONT_STACK(s(`${bt}.fontFamily`)), fontWeight: n(`${bt}.weight`), letterSpacing: `${n(`${bt}.tracking`)}em`, color: s(`${bt}.color`),
90
+ }}
91
+ >
92
+ {word}
93
+ </div>
94
+ ))}
95
+ </div>
96
+ )}
97
+ {b('background.glow.enabled') && (
98
+ <div
99
+ style={{
100
+ position: 'absolute', left: n('background.glow.x') * W - glowR, top: n('background.glow.y') * H - glowR, width: glowR * 2, height: glowR * 2, borderRadius: '50%',
101
+ background: `radial-gradient(circle, ${rgba(s('background.glow.color'), n('background.glow.opacity'))} 0%, ${rgba(s('background.glow.color'), 0)} 70%)`,
102
+ filter: n('background.glow.blur') > 0 ? `blur(${n('background.glow.blur') * u}px)` : undefined,
103
+ }}
104
+ />
105
+ )}
106
+ </>
107
+ );
108
+ }
109
+
110
+ function Noise({ ctx }: { ctx: Ctx }) {
111
+ const { st, n } = ctx;
112
+ const { width: W, height: H, unit: u } = st.size;
113
+ const id = `pf-noise-${n('background.noise.seed')}`;
114
+ return (
115
+ <svg width={W} height={H} style={{ ...full, opacity: n('background.noise.opacity'), mixBlendMode: 'overlay' }} aria-hidden="true">
116
+ <filter id={id} x="0" y="0" width="100%" height="100%">
117
+ <feTurbulence type="fractalNoise" baseFrequency={0.75 / (u * n('background.noise.scale'))} numOctaves={2} seed={n('background.noise.seed')} stitchTiles="stitch" />
118
+ <feColorMatrix type="saturate" values="0" />
119
+ </filter>
120
+ <rect width={W} height={H} filter={`url(#${id})`} />
121
+ </svg>
122
+ );
123
+ }
124
+
125
+ /* ─── the sheet ───────────────────────────────────────────────────────────────────────────────── */
126
+ function SheetShadow({ ctx }: { ctx: Ctx }) {
127
+ const { st, n, s } = ctx;
128
+ const u = st.size.unit;
129
+ const pts = (q: [number, number][]) => q.map(([x, y]) => `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`).join(' ');
130
+ return (
131
+ <div data-layer="sheet-shadow" style={{ ...full, zIndex: 10, opacity: n('paper.shadow.opacity'), filter: `blur(${n('paper.shadow.blur') * u}px)`, transform: `translate(${n('paper.shadow.offsetX') * u}px, ${n('paper.shadow.offsetY') * u}px)` }}>
132
+ <svg width={st.size.width} height={st.size.height} style={{ position: 'absolute', left: 0, top: 0, overflow: 'visible' }} aria-hidden="true">
133
+ {st.shadowQuads.map((q, i) => <polygon key={i} points={pts(q)} fill={s('paper.shadow.color')} stroke={s('paper.shadow.color')} strokeWidth={2} />)}
134
+ </svg>
135
+ </div>
136
+ );
137
+ }
138
+
139
+ function PrintedText({ ctx, fit, text }: { ctx: Ctx; fit: TextFit; text: string }) {
140
+ const { st, n, s } = ctx;
141
+ const T = `typography.${fit.slot}`;
142
+ const pu = st.size.pu;
143
+ const align = s(`${T}.alignment`) as 'left' | 'center' | 'right';
144
+ const shadow = n(`${T}.shadowOpacity`) > 0 ? `0 ${Math.max(1, n(`${T}.shadowBlur`) * pu * 0.3)}px ${n(`${T}.shadowBlur`) * pu}px ${rgba(s(`${T}.shadow`), n(`${T}.shadowOpacity`))}` : undefined;
145
+ const pill = fit.slot === 'bottomCta';
146
+ const box: CSSProperties = {
147
+ fontFamily: FONT_STACK(s(`${T}.fontFamily`)), fontWeight: n(`${T}.fontWeight`), fontStyle: s(`${T}.fontStyle`) as 'normal' | 'italic',
148
+ fontSize: fit.fontSize, lineHeight: n(`${T}.lineHeight`), letterSpacing: `${n(`${T}.letterSpacing`)}em`,
149
+ color: s(`${T}.color`), opacity: n(`${T}.opacity`), textAlign: align, whiteSpace: 'pre-line', overflowWrap: 'break-word', textShadow: shadow,
150
+ };
151
+ return (
152
+ <div
153
+ data-slot={fit.slot}
154
+ data-fit={fit.scale}
155
+ style={{
156
+ position: 'absolute', left: fit.x - fit.area.x, top: fit.y - fit.area.y, width: fit.width,
157
+ transformOrigin: `${align === 'left' ? 0 : align === 'center' ? 50 : 100}% 0%`,
158
+ transform: `rotate(${n(`${T}.rotation`)}deg) skewX(${n(`${T}.skew`)}deg) scale(${n(`${T}.scale`)})`,
159
+ ...(pill ? {} : box),
160
+ }}
161
+ >
162
+ {pill
163
+ ? <span style={{ ...box, display: 'inline-block', padding: '0.42em 0.95em', borderRadius: 999, background: s('cta.backgroundColor'), boxShadow: `0 ${0.12 * fit.fontSize}px ${0.4 * fit.fontSize}px ${rgba('#000000', 0.18)}` }}>{text}</span>
164
+ : text}
165
+ </div>
166
+ );
167
+ }
168
+
169
+ const PANEL_TEXT: Record<PanelId, string[]> = {
170
+ top: ['topLogo', 'topHeadline', 'topSubtitle'], middle: ['middleHeadline', 'middleBody'], bottom: ['bottomHeadline', 'bottomBody', 'bottomCta'],
171
+ };
172
+ const SLOT_PATH: Record<string, string> = {
173
+ topLogo: 'content.top.logo', topHeadline: 'content.top.headline', topSubtitle: 'content.top.subtitle', middleHeadline: 'content.middle.headline',
174
+ middleBody: 'content.middle.body', bottomHeadline: 'content.bottom.headline', bottomBody: 'content.bottom.body', bottomCta: 'content.bottom.cta',
175
+ };
176
+
177
+ /**
178
+ * The print of the whole sheet, in sheet coordinates (0‥width × 0‥height): the paper of each region,
179
+ * its grain, the crease effects and every word. Every strip draws this same print, offset to its own
180
+ * height and clipped to itself, so the sheet stays ONE surface — gradient, grain, creases and text run
181
+ * on across the strips, and each word turns with exactly the part of the sheet it is printed on.
182
+ * Only the regions that reach the strip are drawn. `face` picks the front or the back of the paper.
183
+ */
184
+ function SheetPrint({ ctx, face, y0, y1, brightness }: { ctx: Ctx; face: 'front' | 'back'; y0: number; y1: number; brightness: number }) {
185
+ const { st, n, s, b } = ctx;
186
+ const { width: PW, height: PH } = st.size.paper;
187
+ const pu = st.size.pu;
188
+ const reach = (a: number, c: number) => c >= y0 - 2 && a <= y1 + 2;
189
+ const mat = 'paperMaterial';
190
+ // Light: the paper takes the full shade, the print on it part of it (so white type stays crisp).
191
+ const textShade = brightness < 1 ? (1 - brightness) * 0.3 : 0;
192
+ const paperShade = brightness < 1 ? Math.min(0.92, 1 - brightness / (1 - textShade)) : 0;
193
+ const light = brightness > 1 ? Math.min(0.6, (brightness - 1) * 0.9) : 0;
194
+ const regions = PANELS.map((id) => ({ id, ...st.size.panels[id] })).filter((r) => reach(r.y0, r.y1));
195
+ const fill = (id: PanelId): CSSProperties => {
196
+ const P = `panels.${id}`;
197
+ if (face === 'back') return { backgroundColor: s(`${mat}.backColor`) };
198
+ const colour = s(`${P}.colorMode`) === 'own' ? s(`${P}.backgroundColor`) : s(`${mat}.baseColor`);
199
+ return b(`${mat}.gradientEnabled`) && b(`${P}.gradient`) && s(`${P}.colorMode`) !== 'own'
200
+ ? { backgroundColor: colour, backgroundImage: `linear-gradient(${n(`${mat}.gradientAngle`)}deg, ${colour}, ${s(`${mat}.secondaryColor`)})`, backgroundSize: `${PW}px ${PH}px`, backgroundPosition: `0px ${-st.size.panels[id].y0}px` }
201
+ : { backgroundColor: colour };
202
+ };
203
+ return (
204
+ <div data-print={face} style={{ position: 'absolute', left: 0, top: 0, width: PW, height: PH }}>
205
+ {regions.map((r) => (
206
+ <div key={r.id} data-region={r.id} style={{ position: 'absolute', left: 0, top: r.y0, width: PW, height: r.height, ...fill(r.id) }}>
207
+ <PaperGrain ctx={ctx} w={PW} h={r.height} y0={r.y0} k={n(`panels.${r.id}.textureOpacity`)} />
208
+ </div>
209
+ ))}
210
+ {paperShade > 0 && <div style={{ ...full, background: '#000000', opacity: paperShade }} />}
211
+ {light > 0 && <div style={{ ...full, background: '#ffffff', opacity: light }} />}
212
+ {st.panels.map((p) => p.edges.map((e) => {
213
+ const yc = st.size.creases[e.crease];
214
+ const span = Math.max(e.shadow.length + e.shadow.blur, e.valley.length, e.line.width) + 2;
215
+ return (face === 'front' || e.edge === 'bottom') && reach(yc - span, yc + span)
216
+ ? <CreaseEffects key={`${p.id}${e.edge}`} e={face === 'front' ? e : { ...e, valley: { ...e.valley, opacity: 0 }, shadow: { ...e.shadow, opacity: 0 } }} yc={yc} w={PW} pu={pu} tint={mixHex(e.line.color, '#000000', 0.55)} />
217
+ : null;
218
+ }))}
219
+ <OuterEdges ctx={ctx} w={PW} h={PH} />
220
+ {face === 'front' && regions.map((r) => <PanelContent key={r.id} ctx={ctx} id={r.id} />)}
221
+ {face === 'back' && s('content.back.text') !== '' && regions.some((r) => r.id === s('content.back.panel')) && <BackContent ctx={ctx} id={s('content.back.panel') as PanelId} />}
222
+ {textShade > 0 && <div style={{ ...full, background: '#000000', opacity: textShade }} />}
223
+ </div>
224
+ );
225
+ }
226
+
227
+ function PanelContent({ ctx, id }: { ctx: Ctx; id: PanelId }) {
228
+ const { st, n, s, b } = ctx;
229
+ const { y0, height: h } = st.size.panels[id];
230
+ const PW = st.size.paper.width, pu = st.size.pu;
231
+ const P = `panels.${id}`;
232
+ const fits = st.text.filter((t) => t.panel === id && PANEL_TEXT[id].includes(t.slot));
233
+ if (!fits.length) return null;
234
+ const area = fits[0]!.area;
235
+ const overflow = b(`${P}.overflow`);
236
+ return (
237
+ <div data-content={id} style={{ position: 'absolute', left: 0, top: y0, width: PW, height: h, overflow: overflow ? 'visible' : 'hidden' }}>
238
+ <div style={{ ...full, transformOrigin: '50% 50%', transform: `translate(${n(`${P}.contentOffsetX`) * pu}px, ${n(`${P}.contentOffsetY`) * pu}px) rotate(${n(`${P}.contentRotation`)}deg) scale(${n(`${P}.contentScale`)})` }}>
239
+ <div data-content-area={id} style={{ position: 'absolute', left: area.x, top: area.y, width: area.width, height: area.height, overflow: overflow ? 'visible' : 'hidden' }}>
240
+ {fits.map((f) => <PrintedText key={f.slot} ctx={ctx} fit={f} text={s(SLOT_PATH[f.slot]!)} />)}
241
+ </div>
242
+ </div>
243
+ </div>
244
+ );
245
+ }
246
+
247
+ /** Print on the back of a panel: laid out upside down, so it reads upright once the panel turns over. */
248
+ function BackContent({ ctx, id }: { ctx: Ctx; id: PanelId }) {
249
+ const { st, n, s } = ctx;
250
+ const { y0, height: h } = st.size.panels[id];
251
+ const PW = st.size.paper.width, pu = st.size.pu;
252
+ const T = 'typography.back';
253
+ const fit: TextFit = { slot: 'back', panel: id, x: n(`${T}.x`) * PW, y: n(`${T}.y`) * h, width: n(`${T}.maxWidth`) * PW, fontSize: n(`${T}.fontSize`) * pu, scale: 1, lines: 1, area: { x: 0, y: 0, width: PW, height: h } };
254
+ return (
255
+ <div data-content="back" style={{ position: 'absolute', left: 0, top: y0, width: PW, height: h, overflow: 'hidden', transform: 'scaleY(-1)' }}>
256
+ <PrintedText ctx={ctx} fit={fit} text={s('content.back.text')} />
257
+ </div>
258
+ );
259
+ }
260
+
261
+ /**
262
+ * One strip of the sheet — a panel's flat part or one step of a crease's bend — placed by its own
263
+ * matrix3d and painted at its explicit depth. It shows the front or the back of the one sheet print.
264
+ * Each strip reaches a hair under the next (at most 1.5 px) so no seam opens between them.
265
+ */
266
+ function StripView({ ctx, strip, last }: { ctx: Ctx; strip: StripState; last: number }) {
267
+ const { st, n, s } = ctx;
268
+ const PW = st.size.paper.width, pu = st.size.pu;
269
+ const h = strip.y1 - strip.y0;
270
+ const ov = strip.index < last ? Math.min(1.5, h * 0.5) : 0;
271
+ const radius = n('paper.cornerRadius') * pu;
272
+ const corners = strip.index === 0 ? `${radius}px ${radius}px 0 0` : strip.index === last ? `0 0 ${radius}px ${radius}px` : '0';
273
+ const edge = n('paper.thickness') * pu * strip.edgeOn;
274
+ return (
275
+ <div
276
+ data-strip={strip.index}
277
+ data-region={strip.region}
278
+ data-facing={strip.facing}
279
+ data-rank={strip.rank}
280
+ style={{ position: 'absolute', left: 0, top: 0, width: PW, height: h + ov, transformOrigin: '0 0', transform: strip.matrix, zIndex: strip.z, overflow: 'hidden', borderRadius: corners }}
281
+ >
282
+ <div style={{ position: 'absolute', left: 0, top: -strip.y0, width: PW, height: st.size.paper.height }}>
283
+ <SheetPrint ctx={ctx} face={strip.facing} y0={strip.y0} y1={strip.y1} brightness={strip.brightness} />
284
+ </div>
285
+ {strip.sheen > 0.002 && <div style={{ ...full, background: 'linear-gradient(160deg, rgba(255,255,255,0.9), rgba(255,255,255,0) 70%)', opacity: strip.sheen }} />}
286
+ {edge > 0.4 && (
287
+ // The paper's cut edge (its thickness) shows as the strip turns edge-on.
288
+ <>
289
+ <div style={{ position: 'absolute', left: 0, top: 0, width: edge, height: h + ov, background: s('paper.edgeColor') }} />
290
+ <div style={{ position: 'absolute', right: 0, top: 0, width: edge, height: h + ov, background: s('paper.edgeColor') }} />
291
+ </>
292
+ )}
293
+ </div>
294
+ );
295
+ }
296
+
297
+ function PaperGrain({ ctx, w, h, y0, k }: { ctx: Ctx; w: number; h: number; y0: number; k: number }) {
298
+ const { st, n, b } = ctx;
299
+ const tex = n('paperMaterial.textureOpacity') * k, grain = b('paperMaterial.grainEnabled') ? n('paperMaterial.grainOpacity') * k : 0;
300
+ if (tex <= 0 && grain <= 0) return null;
301
+ const seed = n('paperMaterial.grainSeed');
302
+ const pu = st.size.pu, gs = n('paperMaterial.grainScale');
303
+ // Sampled in sheet coordinates (the viewBox starts at the region's y), so fibres run on across the creases.
304
+ return (
305
+ <svg width={w} height={h} viewBox={`0 ${y0} ${w} ${h}`} style={{ ...full, mixBlendMode: 'soft-light' }} aria-hidden="true">
306
+ <filter id={`pf-fibre-${seed}`} x="0" y="0" width="100%" height="100%" filterUnits="userSpaceOnUse">
307
+ <feTurbulence type="fractalNoise" baseFrequency={`${0.9 / (pu * 60)} ${0.9 / (pu * 3)}`} numOctaves={3} seed={seed} />
308
+ <feColorMatrix type="saturate" values="0" />
309
+ </filter>
310
+ <filter id={`pf-grain-${seed}`} x="0" y="0" width="100%" height="100%" filterUnits="userSpaceOnUse">
311
+ <feTurbulence type="fractalNoise" baseFrequency={0.8 / Math.max(0.6, pu * gs)} numOctaves={1} seed={seed + 1} />
312
+ <feColorMatrix type="saturate" values="0" />
313
+ </filter>
314
+ {tex > 0 && <rect x={0} y={y0} width={w} height={h} filter={`url(#pf-fibre-${seed})`} opacity={Math.min(1, tex * 3)} />}
315
+ {grain > 0 && <rect x={0} y={y0} width={w} height={h} filter={`url(#pf-grain-${seed})`} opacity={Math.min(1, grain * 3)} />}
316
+ </svg>
317
+ );
318
+ }
319
+
320
+ /** A crease's line, ridge highlight, valley shading and the shadow of the panel closing over — at sheet height `yc`. */
321
+ function CreaseEffects({ e, yc, w, pu, tint }: { e: EdgeFx; yc: number; w: number; pu: number; tint: string }) {
322
+ // `edge` is the panel's side of the crease: 'bottom' = the panel above it (effects run upward), 'top' = below (downward).
323
+ const down = e.edge === 'top';
324
+ const band = (length: number): CSSProperties => ({ position: 'absolute', left: 0, width: w, height: length, top: down ? yc : yc - length });
325
+ const dir = down ? 'to bottom' : 'to top';
326
+ const half = e.line.width / 2;
327
+ return (
328
+ <div data-crease={e.crease} data-edge={e.edge}>
329
+ {e.shadow.opacity > 0.002 && e.shadow.length > 0 && (
330
+ <div style={{ ...band(e.shadow.length + e.shadow.blur), background: `linear-gradient(${dir}, ${rgba(tint, e.shadow.opacity)} 0px, ${rgba(tint, e.shadow.opacity * 0.85)} ${e.shadow.length * 0.8}px, ${rgba(tint, 0)} ${e.shadow.length + e.shadow.blur}px)` }} />
331
+ )}
332
+ {e.valley.opacity > 0.002 && <div style={{ ...band(e.valley.length), background: `linear-gradient(${dir}, ${rgba(tint, e.valley.opacity)}, ${rgba(tint, 0)})` }} />}
333
+ {e.highlight.opacity > 0.002 && (
334
+ <div style={{ position: 'absolute', left: 0, width: w, height: e.highlight.width, top: down ? yc + half : yc - half - e.highlight.width, background: rgba(e.highlight.color, e.highlight.opacity), filter: `blur(${Math.max(0.3, pu * 0.8)}px)` }} />
335
+ )}
336
+ {e.line.opacity > 0.002 && (
337
+ <div style={{ position: 'absolute', left: 0, width: w, height: Math.max(0.5, half), top: down ? yc : yc - half, background: rgba(e.line.color, e.line.opacity), filter: e.line.blur > 0.2 ? `blur(${e.line.blur}px)` : undefined }} />
338
+ )}
339
+ </div>
340
+ );
341
+ }
342
+
343
+ function OuterEdges({ ctx, w, h }: { ctx: Ctx; w: number; h: number }) {
344
+ const { st, n } = ctx;
345
+ const hi = n('paperMaterial.edgeHighlight'), sh = n('paperMaterial.edgeShadow');
346
+ if (hi <= 0 && sh <= 0) return null;
347
+ const t = Math.max(1, 2.2 * st.size.pu);
348
+ const light = rgba('#ffffff', hi), dark = rgba('#000000', sh);
349
+ return (
350
+ <>
351
+ <div style={{ position: 'absolute', left: 0, top: 0, width: t, height: h, background: light }} />
352
+ <div style={{ position: 'absolute', right: 0, top: 0, width: t, height: h, background: dark }} />
353
+ <div style={{ position: 'absolute', left: 0, top: 0, width: w, height: t, background: light }} />
354
+ <div style={{ position: 'absolute', left: 0, bottom: 0, width: w, height: t, background: dark }} />
355
+ </>
356
+ );
357
+ }
358
+
359
+ /* ─── hands ───────────────────────────────────────────────────────────────────────────────────── */
360
+ /** The hand's drawing, built from its skeleton with the current pose (the grip opening is animated). */
361
+ export function handArt(cfg: PaperFoldConfig, h: HandState): HandArt {
362
+ const n = (p: string) => getPath(cfg, p) as number;
363
+ const pose = { ...h.pose, armLength: n(`hands.${h.id}.armLength`) * 0.6, open: h.fingerAngle, nails: getPath(cfg, 'hands.nails.enabled') as boolean, nailScale: n('hands.nails.scale') };
364
+ return h.id === 'top' ? topHand(pose) : bottomHand(pose);
365
+ }
366
+ /** The SVG transform that places hand units on the canvas at the hand's grip anchor. */
367
+ export const handTransform = (h: HandState) =>
368
+ `translate(${h.x} ${h.y}) rotate(${h.rotation}) skewX(${h.skewX}) skewY(${h.skewY}) scale(${h.unitScale * h.scale}) translate(${h.offsetX} ${h.offsetY})`;
369
+
370
+ function Hand({ ctx, h }: { ctx: Ctx; h: HandState }) {
371
+ const { st, n, s, b } = ctx;
372
+ const art = handArt(st.cfg, h);
373
+ const S = 'hands.style';
374
+ const colours: Record<HandFill, string> = {
375
+ base: s(`${S}.baseColor`), midtone: s(`${S}.midtoneColor`), shadow: s(`${S}.shadowColor`),
376
+ highlight: s(`${S}.highlightColor`), nail: s(`${S}.nailColor`), sleeve: s(`${S}.sleeve.color`),
377
+ };
378
+ const ow = n(`${S}.outlineWidth`);
379
+ const shape = (part: HandPart, sh: HandShape, i: number) => {
380
+ const o = part.name === 'highlights' ? n(`${S}.highlightOpacity`) : part.name === 'fingerShadows' || part.name === 'palmShadow' ? n(`${S}.shadowOpacity`) : part.name === 'nails' ? n('hands.nails.opacity') : 1;
381
+ return <path key={i} d={sh.d} fill={colours[sh.fill]} fillOpacity={(sh.opacity ?? 1) * o} {...(sh.outline && ow > 0 ? { stroke: s(`${S}.outlineColor`), strokeWidth: ow * 0.6, strokeLinejoin: 'round' as const } : {})} />;
382
+ };
383
+ // Once the held panel has turned over, the digits holding it from behind are on its visible side:
384
+ // they show only where they lie on that panel (clipped to its outline), never past its edge.
385
+ const held = st.panels.find((p) => p.id === h.panel)!;
386
+ const clipId = `pf-held-${h.id}`;
387
+ const clipped = held.facing === 'back';
388
+ const group = (layer: 'behind' | 'front') => art.parts.filter((p) => p.layer === layer).map((p, i) => {
389
+ const g = (
390
+ <g key={`${p.name}${i}`} data-part={p.name} {...(p.grips ? { 'data-grips': 'true' } : {})}>
391
+ {p.shapes.map((sh, j) => shape(p, sh, j))}
392
+ {p.name === 'forearm' && b(`${S}.sleeve.enabled`) && <path data-part="sleeve" d={sleevePath(art, n(`${S}.sleeve.position`), n(`hands.${h.id}.armLength`) * 0.6)} fill={colours.sleeve} />}
393
+ </g>
394
+ );
395
+ return p.grips && clipped ? <g key={`c${p.name}${i}`} clipPath={`url(#${clipId})`}><g transform={handTransform(h)}>{g}</g></g> : <g key={`t${p.name}${i}`} transform={handTransform(h)}>{g}</g>;
396
+ });
397
+ const svg: CSSProperties = { position: 'absolute', left: 0, top: 0, overflow: 'visible', opacity: h.opacity, pointerEvents: 'none' };
398
+ const { width: W, height: H } = st.size;
399
+ const pu = st.size.pu;
400
+ // The gripping digits cast a small contact shadow on the paper.
401
+ const drop = n(`${S}.dropShadowOpacity`) > 0 ? `drop-shadow(${n(`${S}.dropShadowOffset`) * pu * 0.5}px ${n(`${S}.dropShadowOffset`) * pu}px ${n(`${S}.dropShadowBlur`) * pu}px ${rgba('#1a0526', n(`${S}.dropShadowOpacity`))})` : undefined;
402
+ return (
403
+ <>
404
+ <svg data-hand={h.id} data-piece="body" width={W} height={H} style={{ ...svg, zIndex: h.bodyZ }} aria-hidden="true">
405
+ {clipped && <defs><clipPath id={clipId} clipPathUnits="userSpaceOnUse"><polygon points={held.corners.map(([x, y]) => `${x},${y}`).join(' ')} /></clipPath></defs>}
406
+ {group('behind')}
407
+ </svg>
408
+ <svg data-hand={h.id} data-piece="finger" width={W} height={H} style={{ ...svg, zIndex: h.fingerZ, filter: drop }} aria-hidden="true">
409
+ {group('front')}
410
+ </svg>
411
+ </>
412
+ );
413
+ }
414
+
415
+ /* ─── logo and CTA ────────────────────────────────────────────────────────────────────────────── */
416
+ function Logo({ ctx, img }: { ctx: Ctx; img: (src: string, style: CSSProperties, alt: string) => ReactNode }) {
417
+ const { st, n, s, b } = ctx;
418
+ const u = st.size.unit;
419
+ const T = 'typography.logo';
420
+ const size = n(`${T}.fontSize`) * u;
421
+ const mark = n('logo.markSize') * size;
422
+ const shadow = n(`${T}.shadowOpacity`) > 0 ? `0 ${n(`${T}.shadowBlur`) * u * 0.3}px ${n(`${T}.shadowBlur`) * u}px ${rgba(s(`${T}.shadow`), n(`${T}.shadowOpacity`))}` : undefined;
423
+ const image = s('logo.image');
424
+ return (
425
+ <div
426
+ data-layer="logo"
427
+ style={{
428
+ position: 'absolute', left: st.logo.x, top: st.logo.y, zIndex: 900, opacity: st.logo.opacity, display: 'flex', alignItems: 'center', gap: n('logo.gap') * size, whiteSpace: 'nowrap',
429
+ transform: `translate(-50%, -50%) rotate(${n('logo.rotation')}deg) scale(${st.logo.scale})`,
430
+ }}
431
+ >
432
+ {image !== '' ? img(image, { height: n('logo.imageHeight') * u, width: 'auto', display: 'block' }, s('content.logo') || 'logo') : (
433
+ <>
434
+ {b('logo.showMark') && (
435
+ <div
436
+ data-part="logo-mark"
437
+ style={{
438
+ width: mark, height: mark, borderRadius: n('logo.markRadius') * mark, display: 'flex', alignItems: 'center', justifyContent: 'center',
439
+ background: `linear-gradient(135deg, ${s('logo.markColor')}, ${s('logo.markColorEnd')})`, color: s('logo.markTextColor'),
440
+ fontFamily: FONT_STACK(s(`${T}.fontFamily`)), fontWeight: 800, fontSize: mark * 0.72, lineHeight: 1,
441
+ }}
442
+ >
443
+ {s('logo.markText')}
444
+ </div>
445
+ )}
446
+ {s('content.logo') !== '' && (
447
+ <span
448
+ data-part="logo-word"
449
+ style={{
450
+ fontFamily: FONT_STACK(s(`${T}.fontFamily`)), fontWeight: n(`${T}.fontWeight`), fontStyle: s(`${T}.fontStyle`) as 'normal' | 'italic', fontSize: size, lineHeight: 1,
451
+ letterSpacing: `${n(`${T}.letterSpacing`)}em`, color: s(`${T}.color`), opacity: n(`${T}.opacity`), textShadow: shadow,
452
+ }}
453
+ >
454
+ {s('content.logo')}
455
+ </span>
456
+ )}
457
+ </>
458
+ )}
459
+ </div>
460
+ );
461
+ }
462
+
463
+ function Cta({ ctx }: { ctx: Ctx }) {
464
+ const { st, n, s } = ctx;
465
+ const u = st.size.unit;
466
+ const T = 'typography.cta';
467
+ const shadow = n('cta.shadowOpacity') > 0 ? `0 ${n('cta.shadowBlur') * u * 0.35}px ${n('cta.shadowBlur') * u}px ${rgba(s('cta.shadowColor'), n('cta.shadowOpacity'))}` : undefined;
468
+ return (
469
+ <div
470
+ data-layer="cta"
471
+ style={{
472
+ position: 'absolute', left: st.cta.x, top: st.cta.y, zIndex: 900, opacity: st.cta.opacity, whiteSpace: 'nowrap',
473
+ transform: `translate(-50%, -50%) rotate(${n('cta.rotation')}deg) scale(${st.cta.scale})`,
474
+ background: s('cta.backgroundColor'), border: n('cta.borderWidth') > 0 ? `${n('cta.borderWidth') * u}px solid ${s('cta.borderColor')}` : undefined,
475
+ borderRadius: n('cta.radius') * u, padding: `${n('cta.paddingY') * u}px ${n('cta.paddingX') * u}px`, boxShadow: shadow,
476
+ fontFamily: FONT_STACK(s(`${T}.fontFamily`)), fontWeight: n(`${T}.fontWeight`), fontStyle: s(`${T}.fontStyle`) as 'normal' | 'italic', fontSize: n(`${T}.fontSize`) * u, lineHeight: 1.2,
477
+ letterSpacing: `${n(`${T}.letterSpacing`)}em`, color: s(`${T}.color`),
478
+ textShadow: n(`${T}.shadowOpacity`) > 0 ? `0 0 ${n(`${T}.shadowBlur`) * u}px ${rgba(s(`${T}.shadow`), n(`${T}.shadowOpacity`))}` : undefined,
479
+ }}
480
+ >
481
+ <span style={{ opacity: n(`${T}.opacity`) }}>{s('content.cta.text')}</span>
482
+ </div>
483
+ );
484
+ }
485
+
486
+ /* ─── debug overlay (development only) ────────────────────────────────────────────────────────── */
487
+ function Debug({ ctx }: { ctx: Ctx }) {
488
+ const { st } = ctx;
489
+ const { width: W, height: H, unit: u } = st.size;
490
+ const fs = 14 * u;
491
+ const label = (x: number, y: number, lines: string[], colour = '#00ffd0') => (
492
+ <text x={x} y={y} fill={colour} fontSize={fs} fontFamily="ui-monospace, Menlo, monospace" stroke="#000000" strokeWidth={fs * 0.18} paintOrder="stroke">
493
+ {lines.map((l, i) => <tspan key={i} x={x} dy={i === 0 ? 0 : fs * 1.2}>{l}</tspan>)}
494
+ </text>
495
+ );
496
+ const pts = (q: [number, number][]) => q.map(([x, y]) => `${x},${y}`).join(' ');
497
+ const centre = (q: [number, number][]) => [q.reduce((a, p) => a + p[0], 0) / 4, q.reduce((a, p) => a + p[1], 0) / 4] as const;
498
+ // The grid and the read-out are fixed to the canvas; the geometry follows the camera so it sits on the drawing.
499
+ return (
500
+ <div data-layer="debug" style={{ ...full, zIndex: 2000, pointerEvents: 'none' }}>
501
+ <svg width={W} height={H} style={{ position: 'absolute', left: 0, top: 0 }} aria-hidden="true">
502
+ {Array.from({ length: 9 }, (_, i) => (i + 1) / 10).map((v) => (
503
+ <g key={v} opacity={0.35}>
504
+ <line x1={v * W} y1={0} x2={v * W} y2={H} stroke="#ffffff" strokeWidth={u} strokeDasharray={`${4 * u} ${6 * u}`} />
505
+ <line x1={0} y1={v * H} x2={W} y2={v * H} stroke="#ffffff" strokeWidth={u} strokeDasharray={`${4 * u} ${6 * u}`} />
506
+ {label(v * W + 3 * u, 16 * u, [v.toFixed(1)], '#ffffff')}
507
+ {label(3 * u, v * H - 4 * u, [v.toFixed(1)], '#ffffff')}
508
+ </g>
509
+ ))}
510
+ </svg>
511
+ <svg width={W} height={H} style={{ position: 'absolute', left: 0, top: 0, overflow: 'visible', transformOrigin: '0 0', transform: st.camera.transform }} aria-hidden="true">
512
+ <g>
513
+ {st.panels.map((p) => {
514
+ const [cx, cy] = centre(p.corners);
515
+ return (
516
+ <g key={p.id}>
517
+ <polygon points={pts(p.corners)} fill="none" stroke={p.facing === 'front' ? '#00ffd0' : '#ff9d00'} strokeWidth={2 * u} strokeDasharray={p.facing === 'front' ? undefined : `${8 * u} ${5 * u}`} />
518
+ {label(cx - 60 * u, cy, [`${p.id.toUpperCase()} PANEL`, `${p.facing} · rank ${p.rank} · z ${p.z}`, `light ${p.brightness.toFixed(2)}`])}
519
+ </g>
520
+ );
521
+ })}
522
+ {st.debug.creases.map((c, i) => {
523
+ const mx = (c.from[0] + c.to[0]) / 2, my = (c.from[1] + c.to[1]) / 2;
524
+ return (
525
+ <g key={c.id}>
526
+ <line x1={c.from[0]} y1={c.from[1]} x2={c.to[0]} y2={c.to[1]} stroke="#ff2d78" strokeWidth={3 * u} />
527
+ <circle cx={mx} cy={my} r={7 * u} fill="#ff2d78" stroke="#ffffff" strokeWidth={1.5 * u} />
528
+ {label(c.to[0] + 10 * u, c.to[1] + (i ? 18 : -8) * u, [`CREASE ${c.id.toUpperCase()} ${c.position.toFixed(3)}`, `ANGLE: ${c.angle.toFixed(1)}°`, `pivot (${(mx / W).toFixed(3)}, ${(my / H).toFixed(3)})`], '#ff2d78')}
529
+ </g>
530
+ );
531
+ })}
532
+ {/* Paper bounds: the outline of the one sheet, down its left edge and back up its right. */}
533
+ <polygon
534
+ points={[...st.strips.flatMap((p) => [p.corners[0]!, p.corners[3]!]), ...[...st.strips].reverse().flatMap((p) => [p.corners[2]!, p.corners[1]!])].map(([x, y]) => `${x},${y}`).join(' ')}
535
+ fill="none" stroke="#ffffff" strokeWidth={3 * u} strokeDasharray={`${2 * u} ${4 * u}`}
536
+ />
537
+ {st.strips.filter((p) => p.region.startsWith('crease')).map((p) => <polygon key={p.index} points={pts(p.corners)} fill="none" stroke="#ff2d78" strokeWidth={0.8 * u} opacity={0.6} />)}
538
+ {st.hands.map((h) => {
539
+ const art = handArt(st.cfg, h);
540
+ const k = h.unitScale * h.scale;
541
+ return (
542
+ <g key={`joints-${h.id}`} transform={handTransform(h)}>
543
+ {Object.entries(art.joints).map(([name, js]) => (
544
+ <g key={name}>
545
+ <polyline points={js.map(([x, y]) => `${x},${y}`).join(' ')} fill="none" stroke="#7df9ff" strokeWidth={1.5 * u / k} />
546
+ {js.map(([x, y], i) => <circle key={i} cx={x} cy={y} r={3.2 * u / k} fill={i === 0 ? '#ffffff' : '#7df9ff'} />)}
547
+ </g>
548
+ ))}
549
+ </g>
550
+ );
551
+ })}
552
+ {st.hands.map((h) => (
553
+ <g key={h.id}>
554
+ <circle cx={st.anchors[h.id].hand[0]} cy={st.anchors[h.id].hand[1]} r={10 * u} fill="none" stroke="#7df9ff" strokeWidth={2 * u} />
555
+ <line x1={h.gripX - 14 * u} y1={h.gripY} x2={h.gripX + 14 * u} y2={h.gripY} stroke="#ffe600" strokeWidth={2.5 * u} />
556
+ <line x1={h.gripX} y1={h.gripY - 14 * u} x2={h.gripX} y2={h.gripY + 14 * u} stroke="#ffe600" strokeWidth={2.5 * u} />
557
+ <circle cx={h.x} cy={h.y} r={6 * u} fill="none" stroke="#ffe600" strokeWidth={2 * u} />
558
+ {label(h.gripX + 16 * u, h.gripY - 10 * u, [`HAND ${h.id.toUpperCase()} → ${h.panel}`, `paper.${h.id}GripAnchor (${(h.gripX / W).toFixed(3)}, ${(h.gripY / H).toFixed(3)})`, `${h.id}Hand.gripAnchor Δ ${Math.hypot(st.anchors[h.id].hand[0] - h.gripX, st.anchors[h.id].hand[1] - h.gripY).toFixed(1)} px`, `z body ${h.bodyZ} · finger ${h.fingerZ}`], '#ffe600')}
559
+ </g>
560
+ ))}
561
+ </g>
562
+ </svg>
563
+ <svg width={W} height={H} style={{ position: 'absolute', left: 0, top: 0 }} aria-hidden="true">
564
+ <rect x={10 * u} y={24 * u} width={330 * u} height={7 * fs * 1.2 + 16 * u} fill="#000000" opacity={0.6} rx={6 * u} />
565
+ {label(20 * u, 24 * u + fs * 1.3, [
566
+ 'DEBUG',
567
+ `FRAME: ${st.frame.toFixed(1)} / ${st.timeline.end}`,
568
+ `SCENE: ${st.phase.label} ${(st.phase.progress * 100).toFixed(0)}%`,
569
+ ...st.folds.map((f) => `${f.id.toUpperCase()} FOLD ANGLE: ${f.angle.toFixed(1)}° (${f.phase})`),
570
+ `ANCHOR: ${st.anchor.toUpperCase()} PANEL · ZOOM ${st.camera.zoom.toFixed(3)}`,
571
+ `ORDER: ${[...st.panels].sort((a, c) => a.rank - c.rank).map((p) => p.id).join(' < ')} · ${st.strips.length} strips`,
572
+ ])}
573
+ </svg>
574
+ </div>
575
+ );
576
+ }