framefields 2.2.0-beta.4 → 2.3.0

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 (322) hide show
  1. package/README.md +11 -2
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
  5. package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
  6. package/dist/{audio-DMUr01vS.mjs → audio-ChRqnFwB.mjs} +3 -3
  7. package/dist/{audio-DMUr01vS.mjs.map → audio-ChRqnFwB.mjs.map} +1 -1
  8. package/dist/{dist-cjxDXQdx.mjs → dist-PwT_Vmax.mjs} +102 -6
  9. package/dist/{dist-cjxDXQdx.mjs.map → dist-PwT_Vmax.mjs.map} +1 -1
  10. package/dist/{dist-CT___nEU.mjs → dist-t-NLlnhM.mjs} +7 -5
  11. package/dist/dist-t-NLlnhM.mjs.map +1 -0
  12. package/dist/effects/index.d.mts +5 -5
  13. package/dist/effects/index.mjs +36 -36
  14. package/dist/{effects-C06-AOge.mjs → effects-Duoqc_Oa.mjs} +532 -4
  15. package/dist/effects-Duoqc_Oa.mjs.map +1 -0
  16. package/dist/fonts/index.d.mts +1 -1
  17. package/dist/fonts/index.mjs +2 -2
  18. package/dist/{fonts-C0UuLQvr.mjs → fonts-CgNmeFXh.mjs} +2 -2
  19. package/dist/{fonts-C0UuLQvr.mjs.map → fonts-CgNmeFXh.mjs.map} +1 -1
  20. package/dist/{gpu-Du7GpVFW.mjs → gpu-1ZpAuQOR.mjs} +2 -2
  21. package/dist/{gpu-Du7GpVFW.mjs.map → gpu-1ZpAuQOR.mjs.map} +1 -1
  22. package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
  23. package/dist/index-AdrZIWT0.d.mts.map +1 -0
  24. package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
  25. package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
  26. package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
  27. package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
  28. package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
  29. package/dist/index-BU51pxZO.d.mts.map +1 -0
  30. package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
  31. package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
  32. package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
  33. package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
  34. package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
  35. package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
  36. package/dist/index.d.mts +1438 -66
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +3122 -83
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/preview/index.d.mts +2 -2
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-M0TsUzC6.mjs → preview-CArsjmkd.mjs} +2 -2
  43. package/dist/{preview-M0TsUzC6.mjs.map → preview-CArsjmkd.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
  46. package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
  47. package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
  48. package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
  49. package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
  50. package/dist/preview-engine/chunk-DLAHSLNX.mjs +1522 -0
  51. package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
  52. package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
  53. package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
  54. package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
  55. package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
  56. package/dist/preview-engine/effects.mjs +1 -1
  57. package/dist/preview-engine/framefields.mjs +26 -26
  58. package/dist/preview-engine/player.mjs +5 -5
  59. package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
  60. package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
  61. package/dist/preview-engine/renderers-527ONFIA.mjs +228 -0
  62. package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
  63. package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
  64. package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
  65. package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
  66. package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
  67. package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
  68. package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
  69. package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
  70. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
  71. package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
  72. package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
  73. package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
  74. package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
  75. package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
  76. package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
  77. package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
  78. package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
  79. package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
  80. package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
  81. package/dist/preview-engine/signals.mjs +1 -1
  82. package/dist/{program-DzknMiY0.mjs → program-Dd9tJFkY.mjs} +346 -13
  83. package/dist/program-Dd9tJFkY.mjs.map +1 -0
  84. package/dist/renderer/index.d.mts +2 -2
  85. package/dist/renderer/index.mjs +2 -2
  86. package/dist/{renderer-C8uKdelk.mjs → renderer-0L9MEb3A.mjs} +2 -2
  87. package/dist/{renderer-C8uKdelk.mjs.map → renderer-0L9MEb3A.mjs.map} +1 -1
  88. package/dist/renderer-0lp9ClNc.mjs +5 -0
  89. package/dist/{renderer-BbdZ0YHR.mjs → renderer-257LxOyx.mjs} +3 -3
  90. package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-257LxOyx.mjs.map} +1 -1
  91. package/dist/renderer-2BnBo6CX.mjs +219 -0
  92. package/dist/renderer-2BnBo6CX.mjs.map +1 -0
  93. package/dist/renderer-4g_BfiKp.mjs +5 -0
  94. package/dist/renderer-72A4SvOE.mjs +220 -0
  95. package/dist/renderer-72A4SvOE.mjs.map +1 -0
  96. package/dist/renderer-7Aw6AHqW.mjs +5 -0
  97. package/dist/{renderer-PKQNH21k.mjs → renderer-7OvgLE8w.mjs} +2 -2
  98. package/dist/{renderer-BerD3T-X.mjs → renderer-94byj7Mk.mjs} +2 -2
  99. package/dist/{renderer-BerD3T-X.mjs.map → renderer-94byj7Mk.mjs.map} +1 -1
  100. package/dist/{renderer-D-vRKssW.mjs → renderer-B2aXfdW_.mjs} +2 -2
  101. package/dist/{renderer-D-vRKssW.mjs.map → renderer-B2aXfdW_.mjs.map} +1 -1
  102. package/dist/{renderer-DD8napek.mjs → renderer-B3c-j-e5.mjs} +2 -2
  103. package/dist/{renderer-DD8napek.mjs.map → renderer-B3c-j-e5.mjs.map} +1 -1
  104. package/dist/renderer-B3ypX3MH.mjs +308 -0
  105. package/dist/renderer-B3ypX3MH.mjs.map +1 -0
  106. package/dist/renderer-B82v8PyC.mjs +5 -0
  107. package/dist/renderer-B8BDMJNz.mjs +5 -0
  108. package/dist/renderer-BARst3ZD.mjs +3 -0
  109. package/dist/renderer-BCPRrhP8.mjs +5 -0
  110. package/dist/{renderer-CMT4QcpV.mjs → renderer-BEdc-7JW.mjs} +3 -3
  111. package/dist/{renderer-CMT4QcpV.mjs.map → renderer-BEdc-7JW.mjs.map} +1 -1
  112. package/dist/renderer-BEpANdcO.mjs +204 -0
  113. package/dist/renderer-BEpANdcO.mjs.map +1 -0
  114. package/dist/renderer-BFhzO6En.mjs +5 -0
  115. package/dist/renderer-BH0KF-y-.mjs +6 -0
  116. package/dist/renderer-BHrqEgIA.mjs +541 -0
  117. package/dist/renderer-BHrqEgIA.mjs.map +1 -0
  118. package/dist/{renderer-DpW_LxLO.mjs → renderer-BId5hBLb.mjs} +3 -3
  119. package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BId5hBLb.mjs.map} +1 -1
  120. package/dist/renderer-BK32cV7E.mjs +203 -0
  121. package/dist/renderer-BK32cV7E.mjs.map +1 -0
  122. package/dist/renderer-BTI5ybyH.mjs +5 -0
  123. package/dist/{renderer-0gY4IQhM.mjs → renderer-BVR0mEIT.mjs} +2 -2
  124. package/dist/{renderer-0gY4IQhM.mjs.map → renderer-BVR0mEIT.mjs.map} +1 -1
  125. package/dist/{renderer-CebB0v1y.mjs → renderer-BY08hHFS.mjs} +2 -2
  126. package/dist/{renderer-CebB0v1y.mjs.map → renderer-BY08hHFS.mjs.map} +1 -1
  127. package/dist/renderer-Ba7LH8U2.mjs +5 -0
  128. package/dist/renderer-BcQBlfhC.mjs +5 -0
  129. package/dist/renderer-BdMJzCTz.mjs +5 -0
  130. package/dist/{renderer-D1Cm21eq.mjs → renderer-BmQbSQHf.mjs} +2 -2
  131. package/dist/{renderer-D1Cm21eq.mjs.map → renderer-BmQbSQHf.mjs.map} +1 -1
  132. package/dist/{renderer-DqdhsSwS.mjs → renderer-BmTDXIUI.mjs} +2 -2
  133. package/dist/{renderer-DqdhsSwS.mjs.map → renderer-BmTDXIUI.mjs.map} +1 -1
  134. package/dist/renderer-BpdzhZE7.mjs +224 -0
  135. package/dist/renderer-BpdzhZE7.mjs.map +1 -0
  136. package/dist/renderer-Bxi2j-tG.mjs +5 -0
  137. package/dist/{renderer-D8thCpS7.mjs → renderer-C-Qj0BnT.mjs} +3 -3
  138. package/dist/{renderer-D8thCpS7.mjs.map → renderer-C-Qj0BnT.mjs.map} +1 -1
  139. package/dist/{renderer-BiwIh_w4.mjs → renderer-C4tUATd_.mjs} +3 -3
  140. package/dist/{renderer-BiwIh_w4.mjs.map → renderer-C4tUATd_.mjs.map} +1 -1
  141. package/dist/{renderer-1vhaKMeg.mjs → renderer-CC72sZ8l.mjs} +141 -56
  142. package/dist/renderer-CC72sZ8l.mjs.map +1 -0
  143. package/dist/renderer-CCn5ISVM.mjs +5 -0
  144. package/dist/renderer-CDRsdhg9.mjs +5 -0
  145. package/dist/{renderer-BC8XOVl5.mjs → renderer-CI9Pq77W.mjs} +3 -3
  146. package/dist/{renderer-BC8XOVl5.mjs.map → renderer-CI9Pq77W.mjs.map} +1 -1
  147. package/dist/{renderer-CrABA3lB.mjs → renderer-CIMI33Yd.mjs} +2 -2
  148. package/dist/{renderer-CrABA3lB.mjs.map → renderer-CIMI33Yd.mjs.map} +1 -1
  149. package/dist/renderer-CKSdl0Xf.mjs +331 -0
  150. package/dist/renderer-CKSdl0Xf.mjs.map +1 -0
  151. package/dist/{renderer-Cce2fgpX.mjs → renderer-CKpwEo1w.mjs} +3 -3
  152. package/dist/{renderer-Cce2fgpX.mjs.map → renderer-CKpwEo1w.mjs.map} +1 -1
  153. package/dist/{renderer-CursFKUf.mjs → renderer-CLUyYFqS.mjs} +2 -2
  154. package/dist/{renderer-CursFKUf.mjs.map → renderer-CLUyYFqS.mjs.map} +1 -1
  155. package/dist/{renderer-Br6KyRO_.mjs → renderer-CS-goRD3.mjs} +3 -3
  156. package/dist/{renderer-Br6KyRO_.mjs.map → renderer-CS-goRD3.mjs.map} +1 -1
  157. package/dist/{renderer-DtgMsjyL.mjs → renderer-CSPpKLi3.mjs} +2 -2
  158. package/dist/{renderer-DtgMsjyL.mjs.map → renderer-CSPpKLi3.mjs.map} +1 -1
  159. package/dist/{renderer-CuVPo-wP.mjs → renderer-CWQ-Bct7.mjs} +2 -2
  160. package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CWQ-Bct7.mjs.map} +1 -1
  161. package/dist/{renderer-DHGTzype.mjs → renderer-ChoYV7Ko.mjs} +2 -2
  162. package/dist/{renderer-DHGTzype.mjs.map → renderer-ChoYV7Ko.mjs.map} +1 -1
  163. package/dist/renderer-CiCK8ZG_.mjs +5 -0
  164. package/dist/{renderer-CJB9nU1x.mjs → renderer-Ck2pRec0.mjs} +3 -3
  165. package/dist/{renderer-CJB9nU1x.mjs.map → renderer-Ck2pRec0.mjs.map} +1 -1
  166. package/dist/{renderer-BzDjy1_x.mjs → renderer-CrUudSLP.mjs} +2 -2
  167. package/dist/{renderer-BzDjy1_x.mjs.map → renderer-CrUudSLP.mjs.map} +1 -1
  168. package/dist/{renderer-DupsdRIw.mjs → renderer-CraudZUC.mjs} +3 -3
  169. package/dist/{renderer-DupsdRIw.mjs.map → renderer-CraudZUC.mjs.map} +1 -1
  170. package/dist/renderer-CsEk9TFz.mjs +5 -0
  171. package/dist/renderer-CvOzuDX3.mjs +215 -0
  172. package/dist/renderer-CvOzuDX3.mjs.map +1 -0
  173. package/dist/{renderer-DJfFc-XW.mjs → renderer-Cvysm2Jg.mjs} +3 -3
  174. package/dist/{renderer-DJfFc-XW.mjs.map → renderer-Cvysm2Jg.mjs.map} +1 -1
  175. package/dist/{renderer-Bn2eQE-t.mjs → renderer-CwwmwM7J.mjs} +3 -3
  176. package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-CwwmwM7J.mjs.map} +1 -1
  177. package/dist/{renderer-KnCcN_Nz.mjs → renderer-CxP2e6Ov.mjs} +2 -2
  178. package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-CxP2e6Ov.mjs.map} +1 -1
  179. package/dist/{renderer-BteUC_7n.mjs → renderer-D-yNHLG7.mjs} +3 -3
  180. package/dist/{renderer-BteUC_7n.mjs.map → renderer-D-yNHLG7.mjs.map} +1 -1
  181. package/dist/renderer-D0xLIq1r.mjs +203 -0
  182. package/dist/renderer-D0xLIq1r.mjs.map +1 -0
  183. package/dist/{renderer-id8TbKBY.mjs → renderer-D1MOTlWS.mjs} +2 -2
  184. package/dist/{renderer-id8TbKBY.mjs.map → renderer-D1MOTlWS.mjs.map} +1 -1
  185. package/dist/renderer-D1T7A3NF.mjs +233 -0
  186. package/dist/renderer-D1T7A3NF.mjs.map +1 -0
  187. package/dist/renderer-D1gx_-hi.mjs +5 -0
  188. package/dist/renderer-D5MCGNAF.mjs +5 -0
  189. package/dist/{renderer-Db3JIF1K.mjs → renderer-D6YcQTLI.mjs} +3 -3
  190. package/dist/{renderer-Db3JIF1K.mjs.map → renderer-D6YcQTLI.mjs.map} +1 -1
  191. package/dist/{renderer-BNqwn0gZ.mjs → renderer-D8_UYdDb.mjs} +2 -2
  192. package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-D8_UYdDb.mjs.map} +1 -1
  193. package/dist/renderer-DD_MzvM-.mjs +5 -0
  194. package/dist/{renderer-BHskWZNG.mjs → renderer-DIqwz7dV.mjs} +2 -2
  195. package/dist/{renderer-57ATc_mQ.mjs → renderer-DJQD7tai.mjs} +2 -2
  196. package/dist/{renderer-57ATc_mQ.mjs.map → renderer-DJQD7tai.mjs.map} +1 -1
  197. package/dist/{renderer-CWBHVCvA.mjs → renderer-DKXK5hDm.mjs} +2 -2
  198. package/dist/{renderer-CWBHVCvA.mjs.map → renderer-DKXK5hDm.mjs.map} +1 -1
  199. package/dist/{renderer-p_C_T9Kn.mjs → renderer-DNYSf2Fl.mjs} +2 -2
  200. package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-DNYSf2Fl.mjs.map} +1 -1
  201. package/dist/{renderer-DXqIslFk.mjs → renderer-DNaHFctD.mjs} +2 -2
  202. package/dist/{renderer-DXqIslFk.mjs.map → renderer-DNaHFctD.mjs.map} +1 -1
  203. package/dist/renderer-DO5r7ZV-.mjs +658 -0
  204. package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
  205. package/dist/renderer-DP7YoZ0K.mjs +5 -0
  206. package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
  207. package/dist/renderer-DQtk282o.mjs.map +1 -0
  208. package/dist/{renderer-u8ynJtAC.mjs → renderer-DWcbrx2M.mjs} +2 -2
  209. package/dist/{renderer-u8ynJtAC.mjs.map → renderer-DWcbrx2M.mjs.map} +1 -1
  210. package/dist/renderer-DXiWvKij.mjs +5 -0
  211. package/dist/renderer-DZnUiiBp.mjs +222 -0
  212. package/dist/renderer-DZnUiiBp.mjs.map +1 -0
  213. package/dist/renderer-Dc6fW-o1.mjs +5 -0
  214. package/dist/renderer-DiurlsNT.mjs +5 -0
  215. package/dist/{renderer-BmGPTWwV.mjs → renderer-Dju3SEAJ.mjs} +3 -3
  216. package/dist/{renderer-BmGPTWwV.mjs.map → renderer-Dju3SEAJ.mjs.map} +1 -1
  217. package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
  218. package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
  219. package/dist/{renderer-aArb4RwJ.mjs → renderer-DpQaiH6C.mjs} +2 -2
  220. package/dist/{renderer-aArb4RwJ.mjs.map → renderer-DpQaiH6C.mjs.map} +1 -1
  221. package/dist/{renderer-CeyAgJnw.mjs → renderer-DuxzqfoE.mjs} +2 -2
  222. package/dist/renderer-DvCUdgVz.mjs +5 -0
  223. package/dist/{renderer-AF884a7T.mjs → renderer-Dvg5nbgU.mjs} +3 -3
  224. package/dist/{renderer-AF884a7T.mjs.map → renderer-Dvg5nbgU.mjs.map} +1 -1
  225. package/dist/{renderer-DvFaC_-7.mjs → renderer-Dvq11SEA.mjs} +2 -2
  226. package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dvq11SEA.mjs.map} +1 -1
  227. package/dist/renderer-DyPgVl1l.mjs +223 -0
  228. package/dist/renderer-DyPgVl1l.mjs.map +1 -0
  229. package/dist/{renderer-DEuIwr-t.mjs → renderer-DzOzVxNS.mjs} +2 -2
  230. package/dist/{renderer-DEuIwr-t.mjs.map → renderer-DzOzVxNS.mjs.map} +1 -1
  231. package/dist/renderer-EhCkD11e.mjs +208 -0
  232. package/dist/renderer-EhCkD11e.mjs.map +1 -0
  233. package/dist/renderer-IiwAh9-K.mjs +5 -0
  234. package/dist/{renderer-jqByPgkD.mjs → renderer-JiEpssIz.mjs} +2 -2
  235. package/dist/{renderer-jqByPgkD.mjs.map → renderer-JiEpssIz.mjs.map} +1 -1
  236. package/dist/renderer-JlGXqH0E.mjs +5 -0
  237. package/dist/{renderer-Beg7FLt2.mjs → renderer-OxafT7Xm.mjs} +75 -27
  238. package/dist/renderer-OxafT7Xm.mjs.map +1 -0
  239. package/dist/renderer-TZFKKgL1.mjs +5 -0
  240. package/dist/renderer-UT0CcmMZ.mjs +191 -0
  241. package/dist/renderer-UT0CcmMZ.mjs.map +1 -0
  242. package/dist/{renderer-YbaCzPcG.mjs → renderer-YyEBKPcE.mjs} +2 -2
  243. package/dist/{renderer-jYxN4mHn.mjs → renderer-_AuL8mAi.mjs} +3 -3
  244. package/dist/{renderer-jYxN4mHn.mjs.map → renderer-_AuL8mAi.mjs.map} +1 -1
  245. package/dist/{renderer-C6md3msE.mjs → renderer-aCDIEYb3.mjs} +2 -2
  246. package/dist/{renderer-C6md3msE.mjs.map → renderer-aCDIEYb3.mjs.map} +1 -1
  247. package/dist/renderer-aEecoNPX.mjs +5 -0
  248. package/dist/{renderer-BeIUgp1r.mjs → renderer-aN60v8jR.mjs} +2 -2
  249. package/dist/{renderer-BeIUgp1r.mjs.map → renderer-aN60v8jR.mjs.map} +1 -1
  250. package/dist/renderer-ewhliYYP.mjs +5 -0
  251. package/dist/renderer-hQc6GgTi.mjs +5 -0
  252. package/dist/renderer-iuX0RZIi.mjs +5 -0
  253. package/dist/renderer-j4vkTzHa.mjs +5 -0
  254. package/dist/{renderer-EemDpvv3.mjs → renderer-mpInX4Iy.mjs} +3 -3
  255. package/dist/{renderer-EemDpvv3.mjs.map → renderer-mpInX4Iy.mjs.map} +1 -1
  256. package/dist/renderer-msPjwx_9.mjs +5 -0
  257. package/dist/renderer-pI2ndu-b.mjs +5 -0
  258. package/dist/renderer-x1OGMhsC.mjs +5 -0
  259. package/dist/{renderer-DZXbgVMK.mjs → renderer-xezE7IZX.mjs} +3 -3
  260. package/dist/{renderer-DZXbgVMK.mjs.map → renderer-xezE7IZX.mjs.map} +1 -1
  261. package/dist/renderer-yGAk7J9P.mjs +222 -0
  262. package/dist/renderer-yGAk7J9P.mjs.map +1 -0
  263. package/dist/{renderer-Bvx56GR6.mjs → renderer-zQIB2VZZ.mjs} +2 -2
  264. package/dist/{renderer-Bvx56GR6.mjs.map → renderer-zQIB2VZZ.mjs.map} +1 -1
  265. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-i6u_rhCX.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-i6u_rhCX.mjs.map} +1 -1
  267. package/dist/signals/index.d.mts +5 -5
  268. package/dist/signals/index.mjs +4 -4
  269. package/package.json +58 -55
  270. package/dist/dist-CT___nEU.mjs.map +0 -1
  271. package/dist/effects-C06-AOge.mjs.map +0 -1
  272. package/dist/index-B-oUlLoO.d.mts.map +0 -1
  273. package/dist/index-CwbszPDG.d.mts.map +0 -1
  274. package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
  275. package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
  276. package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
  277. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
  278. package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
  279. package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
  280. package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
  281. package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
  282. package/dist/program-DzknMiY0.mjs.map +0 -1
  283. package/dist/renderer--IDyGdqT.mjs +0 -5
  284. package/dist/renderer-17K4tjid.mjs +0 -5
  285. package/dist/renderer-1vhaKMeg.mjs.map +0 -1
  286. package/dist/renderer-Ab9Ttn_m.mjs +0 -5
  287. package/dist/renderer-B-roDBBo.mjs +0 -5
  288. package/dist/renderer-B03uwoUX.mjs +0 -5
  289. package/dist/renderer-B3BI_7YJ.mjs +0 -5
  290. package/dist/renderer-BGD4lQ74.mjs +0 -5
  291. package/dist/renderer-BHXhYfeC.mjs +0 -5
  292. package/dist/renderer-BRsTIMFa.mjs +0 -5
  293. package/dist/renderer-Beg7FLt2.mjs.map +0 -1
  294. package/dist/renderer-BjMTtYZw.mjs +0 -5
  295. package/dist/renderer-BoCh3Yts.mjs +0 -5
  296. package/dist/renderer-BqPbR8c4.mjs +0 -5
  297. package/dist/renderer-Bxa4SDm9.mjs +0 -3
  298. package/dist/renderer-C4Da2I1-.mjs +0 -5
  299. package/dist/renderer-C93X6dgl.mjs +0 -5
  300. package/dist/renderer-CE7fwGgw.mjs.map +0 -1
  301. package/dist/renderer-CMAwFfGx.mjs +0 -6
  302. package/dist/renderer-CRXeSuX2.mjs +0 -5
  303. package/dist/renderer-CSp6WYBN.mjs +0 -5
  304. package/dist/renderer-CUXX7HTL.mjs +0 -5
  305. package/dist/renderer-CUgThpka.mjs +0 -5
  306. package/dist/renderer-CeVtufiT.mjs +0 -5
  307. package/dist/renderer-CespkZUk.mjs +0 -5
  308. package/dist/renderer-D1l47xhL.mjs +0 -5
  309. package/dist/renderer-DDuG18J8.mjs +0 -5
  310. package/dist/renderer-DFhrFSMn.mjs +0 -5
  311. package/dist/renderer-DO48vQ7Y.mjs +0 -5
  312. package/dist/renderer-DTC39B_n.mjs +0 -5
  313. package/dist/renderer-DbyU3hNF.mjs +0 -5
  314. package/dist/renderer-DftVpmfu.mjs +0 -5
  315. package/dist/renderer-Dj5jm63K.mjs +0 -5
  316. package/dist/renderer-Dju57ZaF.mjs +0 -5
  317. package/dist/renderer-Dn8TQCw7.mjs +0 -5
  318. package/dist/renderer-ETF46K0D.mjs +0 -5
  319. package/dist/renderer-azYzWGC3.mjs +0 -5
  320. package/dist/renderer-dxNoRW59.mjs +0 -5
  321. package/dist/renderer-fdfelx_I.mjs +0 -5
  322. package/dist/renderer-snwEKwMw.mjs +0 -5
@@ -0,0 +1,84 @@
1
+ import{a as S,d as U,f as R,h as T,j as G,m as k}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as u}from"./chunk-BVF64D6H.mjs";u();u();var p="Posterize",N=76,_=[`struct U { v : array<vec4<f32>, 19> };
2
+ @group(0) @binding(0) var<uniform> u : U;
3
+ @group(0) @binding(1) var src : texture_2d<f32>;
4
+ @group(0) @binding(2) var prev : texture_2d<f32>;
5
+ @group(0) @binding(3) var samp : sampler;
6
+ ${S}
7
+
8
+ fn straight(c : vec4<f32>) -> vec4<f32> {
9
+ if (c.a <= 0.0001) { return vec4<f32>(0.0); }
10
+ return vec4<f32>(c.rgb / c.a, c.a);
11
+ }
12
+ fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
13
+ fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
14
+ /** Straight-alpha color of the layer at a uv (filtered). */
15
+ fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
16
+ /** Premultiplied color of the layer at a uv (filtered). */
17
+ fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
18
+ /** Straight-alpha color of the layer's texel at a pixel position (nearest). */
19
+ fn texelS(p : vec2<f32>) -> vec4<f32> {
20
+ let d = vec2<i32>(textureDimensions(src));
21
+ let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
22
+ return straight(textureLoad(src, q, 0));
23
+ }
24
+ fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
25
+ fn hash12(p : vec2<f32>) -> f32 {
26
+ var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
27
+ p3 += dot(p3, p3.yzx + 33.33);
28
+ return fract((p3.x + p3.y) * p3.z);
29
+ }
30
+ fn vnoise(p : vec2<f32>) -> f32 {
31
+ let i = floor(p);
32
+ let f = fract(p);
33
+ let u = f * f * (3.0 - 2.0 * f);
34
+ return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
35
+ mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
36
+ }
37
+ /** 8x8 ordered-dither threshold, 0..1. */
38
+ fn bayer8(p : vec2<f32>) -> f32 {
39
+ let x = u32(p.x) & 7u;
40
+ let y = u32(p.y) & 7u;
41
+ var v = 0u;
42
+ for (var k = 0u; k < 3u; k++) {
43
+ let bx = (x >> k) & 1u;
44
+ let by = (y >> k) & 1u;
45
+ let m = ((bx ^ by) << 1u) | by;
46
+ v += m * (1u << (2u * (2u - k)));
47
+ }
48
+ return (f32(v) + 0.5) / 64.0;
49
+ }
50
+ fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
51
+ fn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }
52
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
53
+ let time = u.v[0].x;
54
+ let frame = u.v[0].y;
55
+ let levels = u.v[1].x;
56
+ let palette = u32(u.v[1].y + 0.5);
57
+ let dither = u.v[1].z;
58
+ let pixelSize = u.v[1].w;
59
+ let paletteCount = u.v[2].x;
60
+
61
+ let R = res();
62
+ let ps = max(pixelSize, 1.0);
63
+ let cellp = floor(in.uv * R / ps);
64
+ let c = texelS(cellp * ps + ps * 0.5);
65
+ let t = bayer8(cellp) - 0.5;
66
+ var rgb = c.rgb;
67
+ if (paletteCount > 0.5) {
68
+ rgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));
69
+ var best = paletteColor(0u);
70
+ var bestD = 1e9;
71
+ for (var i = 0u; i < u32(paletteCount); i++) {
72
+ let pc = paletteColor(i);
73
+ let d = rgb - pc;
74
+ let dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));
75
+ if (dd < bestD) { bestD = dd; best = pc; }
76
+ }
77
+ rgb = best;
78
+ } else {
79
+ let n = max(levels - 1.0, 1.0);
80
+ rgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));
81
+ }
82
+ return premul(vec4<f32>(rgb, c.a));
83
+ }
84
+ `],W={gameboy:["#0f380f","#306230","#8bac0f","#9bbc0f"],teletext:["#000000","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff"],cga:["#000000","#55ffff","#ff55ff","#ffffff"],pico8:["#000000","#1d2b53","#7e2553","#008751","#ab5236","#5f574f","#c2c3c7","#fff1e8","#ff004d","#ffa300","#ffec27","#00e436","#29adff","#83769c","#ff77a8","#ffccaa"],c64:["#000000","#ffffff","#880000","#aaffee","#cc44cc","#00cc55","#0000aa","#eeee77","#dd8855","#664400","#ff7777","#333333","#777777","#aaff66","#0088ff","#bbbbbb"],grayscale:["#000000","#555555","#aaaaaa","#ffffff"],sepia:["#2b1d0e","#6b4a2b","#b08a5a","#efe0c0"]},F=R(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${p}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function A(r,e){let t=F(r),n=t.pipelines.get(e);return n||(n=_.map((a,o)=>{let i=r.createShaderModule({code:a,label:`${p}_${o}.wgsl`});return r.createRenderPipeline({label:`${p}_${o}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function b(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function E(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function $(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=b(r.levels,6),e[5]=Math.max(0,["none","gameboy","teletext","cga","pico8","c64","grayscale","sepia","custom"].indexOf(String(r.palette??"none"))),e[6]=b(r.dither,0),e[7]=b(r.pixelSize,1);let a=String(r.palette??"none"),o=a==="custom"?r.colors??[]:W[a]??[];e[8]=Math.min(o.length,16),o.slice(0,16).forEach((i,f)=>{e.set(E(i),12+f*4)})}var w=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:a,targetWidth:o,targetHeight:i,props:f}=r,c=f.virtualMedia?.operation;if(c?.op!==p)return;let g=f.virtualMedia?.children?.[0];if(!g)return;n.end();let d=f.fps||30,l=Math.round(f.compositionFrame??f.frame??0),L=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:l,fps:d,time:l/d}):c,x=new Float32Array(N);$(L,x,l/d,l);let{texture:m}=await T(r,g),v=e.device,h=F(v),M=A(v,e.renderer.format),z=e.renderer.getTemporaryBuffer(x),s=m;for(let D of M){let y=e.renderer.getTemporaryTexture(o,i,[m,s,a,...f.excludeTextures||[]]);k(t,y.createView(),D,[v.createBindGroup({layout:h.layout,entries:[{binding:0,resource:{buffer:z}},{binding:1,resource:m.createView()},{binding:2,resource:s.createView()},{binding:3,resource:h.sampler}]})]),s=y}G(r,s)};var j=P({WebGPURenderer:w});export{w as PosterizeWebGPURenderer,j as default};
@@ -1 +1 @@
1
- import{a as l,b as m,c as n,d as o}from"./chunk-GMGGDADT.mjs";import"./chunk-7J2FWGVD.mjs";import{a as p}from"./chunk-7B5S5D4N.mjs";import{a as k}from"./chunk-PFA427ZC.mjs";import"./chunk-FLPSWDX4.mjs";import"./chunk-NQZKBFC6.mjs";import"./chunk-ENKKLU7B.mjs";import"./chunk-VUFDQJ2B.mjs";import"./chunk-PR2BUYCL.mjs";import"./chunk-G4K6TLNA.mjs";import"./chunk-37EFVZWT.mjs";import"./chunk-2SJ4BBMT.mjs";import"./chunk-24P6DAB3.mjs";import"./chunk-NIRW77QA.mjs";import"./chunk-Q4Z54DQ7.mjs";import{a as g,b as h,c as i,d as j}from"./chunk-6YJP57MZ.mjs";import{i as a,j as b,p as c,q as d,r as e,s as f}from"./chunk-63SFBHEH.mjs";import"./chunk-BVF64D6H.mjs";export{p as AudioSignal,g as AudioSignalComputePipeline,l as AudioSignalExtractorNode,f as Signal,n as SignalGateNode,o as SignalMathNode,m as SignalNode,i as SignalRegistry,h as buildWGSLSignalFn,b as computed,e as cosineSignal,k as modulateRenderer,a as signal,c as signalBuilder,j as signalRegistry,d as sineSignal};
1
+ import{a as l,b as m,c as n,d as o}from"./chunk-GMGGDADT.mjs";import"./chunk-7J2FWGVD.mjs";import{a as p}from"./chunk-TPAEN6VV.mjs";import{a as k}from"./chunk-PFA427ZC.mjs";import"./chunk-FLPSWDX4.mjs";import"./chunk-NQZKBFC6.mjs";import"./chunk-ENKKLU7B.mjs";import"./chunk-VUFDQJ2B.mjs";import"./chunk-PR2BUYCL.mjs";import"./chunk-BVA5NGSH.mjs";import"./chunk-37EFVZWT.mjs";import"./chunk-2SJ4BBMT.mjs";import"./chunk-24P6DAB3.mjs";import"./chunk-NIRW77QA.mjs";import"./chunk-Q4Z54DQ7.mjs";import{a as g,b as h,c as i,d as j}from"./chunk-6YJP57MZ.mjs";import{i as a,j as b,p as c,q as d,r as e,s as f}from"./chunk-63SFBHEH.mjs";import"./chunk-BVF64D6H.mjs";export{p as AudioSignal,g as AudioSignalComputePipeline,l as AudioSignalExtractorNode,f as Signal,n as SignalGateNode,o as SignalMathNode,m as SignalNode,i as SignalRegistry,h as buildWGSLSignalFn,b as computed,e as cosineSignal,k as modulateRenderer,a as signal,c as signalBuilder,j as signalRegistry,d as sineSignal};
@@ -1,6 +1,6 @@
1
1
  import { Bt as parseCssColor, Lt as mixColors, Vt as parseCssGradient, ht as createVirtualMedia, l as Color, wt as getActiveMediaMetadata } from "./dist-fjKpBYkc.mjs";
2
2
  import { t as ColorSchema } from "./dist-BY0bIWgr.mjs";
3
- import { At as KineticMarqueeConfigSchema, en as TypewriterAnimatorSchema, gt as AdvancedTextAnimatorSchema, jn as signalRegistry, mt as AETextAnimatorSchema, qt as TextPathOptionsSchema } from "./dist-cjxDXQdx.mjs";
3
+ import { Mt as KineticMarqueeConfigSchema, Nn as signalRegistry, Yt as TextPathOptionsSchema, gt as AETextAnimatorSchema, nn as TypewriterAnimatorSchema, vt as AdvancedTextAnimatorSchema } from "./dist-PwT_Vmax.mjs";
4
4
  import { z } from "zod";
5
5
  import { loadYoga } from "yoga-layout/load";
6
6
 
@@ -77,15 +77,15 @@ function containerStyle(node) {
77
77
  }
78
78
  let justify = "start";
79
79
  if (node.kind === "flex") justify = node.justify ?? "start";
80
- let align = "start";
81
- if (node.kind === "flex" || node.kind === "block") align = node.align ?? "start";
80
+ let align$1 = "start";
81
+ if (node.kind === "flex" || node.kind === "block") align$1 = node.align ?? "start";
82
82
  let wrap = false;
83
83
  if (node.kind === "flex") wrap = typeof node.wrap === "boolean" ? node.wrap : false;
84
84
  return {
85
85
  gap,
86
86
  padding,
87
87
  justify,
88
- align,
88
+ align: align$1,
89
89
  wrap
90
90
  };
91
91
  }
@@ -510,12 +510,28 @@ function parseEase(ease) {
510
510
  */
511
511
  var LayerAnimation = class LayerAnimation$1 {
512
512
  tracks = [];
513
+ /** Hold each value for this many frames (see {@link LayerAnimation.stepped}). */
514
+ frameStep;
513
515
  constructor(tracks = []) {
514
516
  this.tracks = [...tracks];
515
517
  }
516
518
  static create() {
517
519
  return new LayerAnimation$1();
518
520
  }
521
+ /**
522
+ * Stepped timing for the whole layer: every animated value is held for
523
+ * `frames` frames ("on twos" = 2, "on threes" = 3), the choppy, hand-made
524
+ * look of stop motion and cel animation. Applies to all of the layer's
525
+ * tracks, including ones added by other `.animate()` calls.
526
+ */
527
+ static stepped(frames = 2) {
528
+ return new LayerAnimation$1().stepped(frames);
529
+ }
530
+ /** See {@link LayerAnimation.stepped}. */
531
+ stepped(frames = 2) {
532
+ this.frameStep = Math.max(1, Math.min(24, Math.round(frames)));
533
+ return this;
534
+ }
519
535
  static fromTo(prop, fromValue, toValue, options = {}) {
520
536
  return new LayerAnimation$1().fromTo(prop, fromValue, toValue, options);
521
537
  }
@@ -828,8 +844,8 @@ var LayerAnimation = class LayerAnimation$1 {
828
844
  const source = {
829
845
  type: "signal",
830
846
  inputHandleId: handleId,
831
- multiplier: 1,
832
- offset: 0,
847
+ multiplier: options.multiplier ?? 1,
848
+ offset: options.offset ?? 0,
833
849
  smoothingWindowFrames: options.smoothing ?? 0,
834
850
  colorMode: options.colorMode ?? "interpolate",
835
851
  colorA: options.colorA,
@@ -1166,6 +1182,315 @@ var CameraAnimation = class CameraAnimation$1 extends LayerAnimation {
1166
1182
  return this;
1167
1183
  }
1168
1184
  };
1185
+ const SAMPLES = 128;
1186
+ const CURVE_STEPS = 16;
1187
+ const NUM_RE = /-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/gi;
1188
+ const CMD_RE = /([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g;
1189
+ /** Flattens an SVG path into polylines, one per subpath. */
1190
+ function flattenPath(d) {
1191
+ const subs = [];
1192
+ let cur = [];
1193
+ let x = 0;
1194
+ let y = 0;
1195
+ let sx = 0;
1196
+ let sy = 0;
1197
+ let cx = 0;
1198
+ let cy = 0;
1199
+ let prev = "";
1200
+ const end = (closed) => {
1201
+ if (cur.length > 1) subs.push({
1202
+ pts: cur,
1203
+ closed
1204
+ });
1205
+ cur = [];
1206
+ };
1207
+ for (const m of d.matchAll(CMD_RE)) {
1208
+ const cmd = m[1];
1209
+ const nums = (m[2].match(NUM_RE) ?? []).map(Number);
1210
+ const rel = cmd === cmd.toLowerCase();
1211
+ const C = cmd.toUpperCase();
1212
+ let i = 0;
1213
+ const take = (n) => {
1214
+ const v = nums.slice(i, i + n);
1215
+ i += n;
1216
+ return v;
1217
+ };
1218
+ const has = (n) => i + n <= nums.length;
1219
+ if (C === "Z") {
1220
+ x = sx;
1221
+ y = sy;
1222
+ end(true);
1223
+ cur = [[x, y]];
1224
+ prev = C;
1225
+ continue;
1226
+ }
1227
+ let first = true;
1228
+ while (has(C === "H" || C === "V" ? 1 : C === "A" ? 7 : C === "C" ? 6 : C === "S" || C === "Q" ? 4 : 2)) {
1229
+ if (C === "M") {
1230
+ const [a, b] = take(2);
1231
+ x = rel ? x + a : a;
1232
+ y = rel ? y + b : b;
1233
+ if (first) {
1234
+ end(false);
1235
+ sx = x;
1236
+ sy = y;
1237
+ cur = [[x, y]];
1238
+ } else cur.push([x, y]);
1239
+ } else if (C === "L" || C === "T") {
1240
+ const [a, b] = take(2);
1241
+ const nx = rel ? x + a : a;
1242
+ const ny = rel ? y + b : b;
1243
+ if (C === "T") {
1244
+ const qx = prev === "Q" || prev === "T" ? 2 * x - cx : x;
1245
+ const qy = prev === "Q" || prev === "T" ? 2 * y - cy : y;
1246
+ quad(cur, x, y, qx, qy, nx, ny);
1247
+ cx = qx;
1248
+ cy = qy;
1249
+ } else cur.push([nx, ny]);
1250
+ x = nx;
1251
+ y = ny;
1252
+ } else if (C === "H") {
1253
+ const [a] = take(1);
1254
+ x = rel ? x + a : a;
1255
+ cur.push([x, y]);
1256
+ } else if (C === "V") {
1257
+ const [a] = take(1);
1258
+ y = rel ? y + a : a;
1259
+ cur.push([x, y]);
1260
+ } else if (C === "C" || C === "S") {
1261
+ let x1;
1262
+ let y1;
1263
+ if (C === "C") {
1264
+ const [a, b] = take(2);
1265
+ x1 = rel ? x + a : a;
1266
+ y1 = rel ? y + b : b;
1267
+ } else {
1268
+ x1 = prev === "C" || prev === "S" ? 2 * x - cx : x;
1269
+ y1 = prev === "C" || prev === "S" ? 2 * y - cy : y;
1270
+ }
1271
+ const [c, e, f, g] = take(4);
1272
+ const x2 = rel ? x + c : c;
1273
+ const y2 = rel ? y + e : e;
1274
+ const nx = rel ? x + f : f;
1275
+ const ny = rel ? y + g : g;
1276
+ for (let k = 1; k <= CURVE_STEPS; k++) {
1277
+ const t = k / CURVE_STEPS;
1278
+ const u = 1 - t;
1279
+ cur.push([u * u * u * x + 3 * u * u * t * x1 + 3 * u * t * t * x2 + t * t * t * nx, u * u * u * y + 3 * u * u * t * y1 + 3 * u * t * t * y2 + t * t * t * ny]);
1280
+ }
1281
+ cx = x2;
1282
+ cy = y2;
1283
+ x = nx;
1284
+ y = ny;
1285
+ } else if (C === "Q") {
1286
+ const [a, b, c, e] = take(4);
1287
+ const qx = rel ? x + a : a;
1288
+ const qy = rel ? y + b : b;
1289
+ const nx = rel ? x + c : c;
1290
+ const ny = rel ? y + e : e;
1291
+ quad(cur, x, y, qx, qy, nx, ny);
1292
+ cx = qx;
1293
+ cy = qy;
1294
+ x = nx;
1295
+ y = ny;
1296
+ } else if (C === "A") {
1297
+ const [rx, ry, rot, large, sweep, a, b] = take(7);
1298
+ const nx = rel ? x + a : a;
1299
+ const ny = rel ? y + b : b;
1300
+ arc(cur, x, y, rx, ry, rot, large !== 0, sweep !== 0, nx, ny);
1301
+ x = nx;
1302
+ y = ny;
1303
+ }
1304
+ first = false;
1305
+ prev = C;
1306
+ if (C === "M") prev = "L";
1307
+ }
1308
+ prev = C;
1309
+ }
1310
+ end(false);
1311
+ return subs;
1312
+ }
1313
+ function quad(out, x0, y0, qx, qy, x1, y1) {
1314
+ for (let k = 1; k <= CURVE_STEPS; k++) {
1315
+ const t = k / CURVE_STEPS;
1316
+ const u = 1 - t;
1317
+ out.push([u * u * x0 + 2 * u * t * qx + t * t * x1, u * u * y0 + 2 * u * t * qy + t * t * y1]);
1318
+ }
1319
+ }
1320
+ /** SVG endpoint arc → points (spec F.6.5). */
1321
+ function arc(out, x1, y1, rxIn, ryIn, rotDeg, large, sweep, x2, y2) {
1322
+ let rx = Math.abs(rxIn);
1323
+ let ry = Math.abs(ryIn);
1324
+ if (rx === 0 || ry === 0) {
1325
+ out.push([x2, y2]);
1326
+ return;
1327
+ }
1328
+ const phi = rotDeg * Math.PI / 180;
1329
+ const cos = Math.cos(phi);
1330
+ const sin = Math.sin(phi);
1331
+ const dx = (x1 - x2) / 2;
1332
+ const dy = (y1 - y2) / 2;
1333
+ const xp = cos * dx + sin * dy;
1334
+ const yp = -sin * dx + cos * dy;
1335
+ const lam = xp * xp / (rx * rx) + yp * yp / (ry * ry);
1336
+ if (lam > 1) {
1337
+ rx *= Math.sqrt(lam);
1338
+ ry *= Math.sqrt(lam);
1339
+ }
1340
+ const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;
1341
+ const den = rx * rx * yp * yp + ry * ry * xp * xp;
1342
+ let co = Math.sqrt(Math.max(0, num / den));
1343
+ if (large === sweep) co = -co;
1344
+ const cxp = co * rx * yp / ry;
1345
+ const cyp = -co * ry * xp / rx;
1346
+ const ccx = cos * cxp - sin * cyp + (x1 + x2) / 2;
1347
+ const ccy = sin * cxp + cos * cyp + (y1 + y2) / 2;
1348
+ const ang = (ux, uy, vx, vy) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);
1349
+ const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);
1350
+ let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);
1351
+ if (!sweep && dt > 0) dt -= 2 * Math.PI;
1352
+ if (sweep && dt < 0) dt += 2 * Math.PI;
1353
+ const steps = Math.max(4, Math.ceil(Math.abs(dt) / (Math.PI / 2) * CURVE_STEPS));
1354
+ for (let k = 1; k <= steps; k++) {
1355
+ const t = t1 + dt * k / steps;
1356
+ const ex = rx * Math.cos(t);
1357
+ const ey = ry * Math.sin(t);
1358
+ out.push([cos * ex - sin * ey + ccx, sin * ex + cos * ey + ccy]);
1359
+ }
1360
+ }
1361
+ /** `n` points evenly spaced along a polyline (closed: around the loop). */
1362
+ function resample(sub, n) {
1363
+ const pts = sub.closed ? [...sub.pts, sub.pts[0]] : sub.pts;
1364
+ const cum = [0];
1365
+ for (let i = 1; i < pts.length; i++) cum.push(cum[i - 1] + Math.hypot(pts[i][0] - pts[i - 1][0], pts[i][1] - pts[i - 1][1]));
1366
+ const total = cum[cum.length - 1];
1367
+ const out = [];
1368
+ if (total <= 0) {
1369
+ for (let i = 0; i < n; i++) out.push([pts[0][0], pts[0][1]]);
1370
+ return out;
1371
+ }
1372
+ const count = sub.closed ? n : n - 1;
1373
+ let j = 0;
1374
+ for (let i = 0; i < n; i++) {
1375
+ const s = total * i / count;
1376
+ while (j < cum.length - 2 && cum[j + 1] < s) j++;
1377
+ const seg = cum[j + 1] - cum[j];
1378
+ const t = seg > 0 ? (s - cum[j]) / seg : 0;
1379
+ out.push([pts[j][0] + (pts[j + 1][0] - pts[j][0]) * t, pts[j][1] + (pts[j + 1][1] - pts[j][1]) * t]);
1380
+ }
1381
+ return out;
1382
+ }
1383
+ function area(p) {
1384
+ let a = 0;
1385
+ for (let i = 0; i < p.length; i++) {
1386
+ const q = p[(i + 1) % p.length];
1387
+ a += p[i][0] * q[1] - q[0] * p[i][1];
1388
+ }
1389
+ return a / 2;
1390
+ }
1391
+ function centroid(p) {
1392
+ let x = 0;
1393
+ let y = 0;
1394
+ for (const q of p) {
1395
+ x += q[0];
1396
+ y += q[1];
1397
+ }
1398
+ return [x / p.length, y / p.length];
1399
+ }
1400
+ /** Rotates (and maybe reverses) `b` so its points line up with `a`'s. */
1401
+ function align(a, b, closed) {
1402
+ if (!closed) {
1403
+ const d0 = Math.hypot(a[0][0] - b[0][0], a[0][1] - b[0][1]);
1404
+ return Math.hypot(a[0][0] - b[b.length - 1][0], a[0][1] - b[b.length - 1][1]) < d0 ? [...b].reverse() : b;
1405
+ }
1406
+ const bb = Math.sign(area(a)) !== Math.sign(area(b)) ? [...b].reverse() : b;
1407
+ const n = a.length;
1408
+ let best = 0;
1409
+ let bestD = Number.POSITIVE_INFINITY;
1410
+ const score = (k) => {
1411
+ let s = 0;
1412
+ for (let i = 0; i < n; i += 2) {
1413
+ const q = bb[(i + k) % n];
1414
+ s += (a[i][0] - q[0]) ** 2 + (a[i][1] - q[1]) ** 2;
1415
+ }
1416
+ return s;
1417
+ };
1418
+ for (let k = 0; k < n; k += 4) {
1419
+ const s = score(k);
1420
+ if (s < bestD) {
1421
+ bestD = s;
1422
+ best = k;
1423
+ }
1424
+ }
1425
+ for (let k = best - 3; k <= best + 3; k++) {
1426
+ const kk = (k + n) % n;
1427
+ const s = score(kk);
1428
+ if (s < bestD) {
1429
+ bestD = s;
1430
+ best = kk;
1431
+ }
1432
+ }
1433
+ return a.map((_, i) => bb[(i + best) % n]);
1434
+ }
1435
+ const memo = /* @__PURE__ */ new Map();
1436
+ function prepare(from, to) {
1437
+ const key = `${from}\u0000${to}`;
1438
+ const hit = memo.get(key);
1439
+ if (hit) return hit;
1440
+ const sa = flattenPath(from);
1441
+ const sb = flattenPath(to);
1442
+ const n = Math.max(sa.length, sb.length);
1443
+ const out = {
1444
+ a: [],
1445
+ b: [],
1446
+ closed: []
1447
+ };
1448
+ for (let i = 0; i < n; i++) {
1449
+ const A = sa[i];
1450
+ const B = sb[i];
1451
+ const closed = (A?.closed ?? true) && (B?.closed ?? true);
1452
+ let pa = A ? resample(A, SAMPLES) : void 0;
1453
+ let pb = B ? resample(B, SAMPLES) : void 0;
1454
+ if (!pa && pb) {
1455
+ const c = centroid(pb);
1456
+ pa = pb.map(() => [c[0], c[1]]);
1457
+ }
1458
+ if (!pb && pa) {
1459
+ const c = centroid(pa);
1460
+ pb = pa.map(() => [c[0], c[1]]);
1461
+ }
1462
+ if (!pa || !pb) continue;
1463
+ out.a.push(pa);
1464
+ out.b.push(align(pa, pb, closed));
1465
+ out.closed.push(closed);
1466
+ }
1467
+ if (memo.size > 256) memo.clear();
1468
+ memo.set(key, out);
1469
+ return out;
1470
+ }
1471
+ const fmt = (v) => (Math.round(v * 100) / 100).toString();
1472
+ /**
1473
+ * The path `t` of the way from `from` to `to` (0 = `from`, 1 = `to`; `t`
1474
+ * may overshoot for back / elastic eases).
1475
+ */
1476
+ function morphPath(from, to, t) {
1477
+ if (t <= 0) return from;
1478
+ if (t === 1) return to;
1479
+ const p = prepare(from, to);
1480
+ const parts = [];
1481
+ for (let s = 0; s < p.a.length; s++) {
1482
+ const A = p.a[s];
1483
+ const B = p.b[s];
1484
+ let d = "";
1485
+ for (let i = 0; i < A.length; i++) {
1486
+ const x = A[i][0] + (B[i][0] - A[i][0]) * t;
1487
+ const y = A[i][1] + (B[i][1] - A[i][1]) * t;
1488
+ d += `${i === 0 ? "M" : "L"}${fmt(x)} ${fmt(y)}`;
1489
+ }
1490
+ parts.push(p.closed[s] ? `${d}Z` : d);
1491
+ }
1492
+ return parts.join("");
1493
+ }
1169
1494
  function hash1D(n, seed) {
1170
1495
  let x = Math.floor(n) ^ seed * 1013 | 0;
1171
1496
  x = Math.imul(x ^ x >>> 15, x | 1);
@@ -1577,7 +1902,7 @@ const COLOR_PROPS$1 = new Set([
1577
1902
  /**
1578
1903
  * Standard keyframe track evaluation.
1579
1904
  */
1580
- function evaluateKeyframes(track, localFrame) {
1905
+ function evaluateKeyframes(track, localFrame, ease) {
1581
1906
  const keyframes = track.keyframes ?? [];
1582
1907
  if (keyframes.length === 0) return 0;
1583
1908
  if (keyframes.length === 1) return keyframes[0].value;
@@ -1588,9 +1913,13 @@ function evaluateKeyframes(track, localFrame) {
1588
1913
  const kf1 = keyframes[i + 1];
1589
1914
  if (localFrame >= kf0.frame && localFrame <= kf1.frame) {
1590
1915
  const delta = kf1.frame - kf0.frame;
1591
- const t = delta > 0 ? (localFrame - kf0.frame) / delta : 0;
1592
- if (typeof kf0.value === "boolean") return t >= 1 ? kf1.value : kf0.value;
1593
- if (typeof kf0.value === "string" && typeof kf1.value === "string") return lerpColor(kf0.value, kf1.value, t);
1916
+ const linear = delta > 0 ? (localFrame - kf0.frame) / delta : 0;
1917
+ const t = ease ? ease(kf1.ease ?? kf0.ease, delta, linear) : linear;
1918
+ if (typeof kf0.value === "boolean") return linear >= 1 ? kf1.value : kf0.value;
1919
+ if (typeof kf0.value === "string" && typeof kf1.value === "string") {
1920
+ if (track.prop === "d") return morphPath(kf0.value, kf1.value, t);
1921
+ return lerpColor(kf0.value, kf1.value, t);
1922
+ }
1594
1923
  return lerp(Number(kf0.value) || 0, Number(kf1.value) || 0, t);
1595
1924
  }
1596
1925
  }
@@ -1852,6 +2181,7 @@ const AnimatablePropSchema = z.enum([
1852
2181
  "fill",
1853
2182
  "color",
1854
2183
  "letterSpacing",
2184
+ "d",
1855
2185
  "trimStart",
1856
2186
  "trimEnd",
1857
2187
  "trimOffset",
@@ -2173,7 +2503,10 @@ const AnimationTrackSchema = z.object({
2173
2503
  yoyo: z.boolean().optional(),
2174
2504
  durationFrames: z.number().int().min(1).optional()
2175
2505
  }).strict();
2176
- const LayerAnimationSchema = z.object({ tracks: z.array(AnimationTrackSchema).max(24) }).strict().superRefine(animationInvariants);
2506
+ const LayerAnimationSchema = z.object({
2507
+ tracks: z.array(AnimationTrackSchema).max(24),
2508
+ frameStep: z.number().int().min(1).max(24).optional()
2509
+ }).strict().superRefine(animationInvariants);
2177
2510
  const BaseNodeFields = {
2178
2511
  id: z.string().min(1),
2179
2512
  inputHandleId: z.string().optional(),
@@ -3200,5 +3533,5 @@ function collectNodeOps(nodes) {
3200
3533
  }
3201
3534
 
3202
3535
  //#endregion
3203
- export { applyStaggerToChildren as A, hoistMattes as B, ShapeNodeSchema as C, TextSpanMarkSchema as D, TextNodeSchema as E, computeLayout as F, lintComposition as H, computeLayoutSync as I, computeStaggerDelay as L, collectNodeOps as M, compositorToProgram as N, TextSpanSchema as O, computeCarrierContinuity as P, evaluateAnimationAtFrame as R, Sequence as S, TextAnimatorSchema as T, mergeAnimationTracks as U, initLayout as V, MediaNodeSchema as _, CarrierHandoffConfigSchema as a, SceneDefinitionSchema as b, EnvironmentFogSchema as c, LayerAnimation as d, LayoutNodeSchema as f, MatteModeSchema as g, MaterialTypeSchema as h, CameraNodeSchema as i, calculateSequenceTimeline as j, ToneMappingSchema as k, EnvironmentPresetSchema as l, LightTypeSchema as m, BoxNodeSchema as n, ColorStopSchema as o, LightNodeSchema as p, CameraAnimation as r, CompositorProgramSchema as s, BloomConfigSchema as t, FlexNodeSchema as u, Model3DNodeSchema as v, TextAnimator as w, SceneTransitionTypeSchema as x, Scene as y, evaluateTrackAtFrame as z };
3204
- //# sourceMappingURL=program-DzknMiY0.mjs.map
3536
+ export { applyStaggerToChildren as A, evaluateTrackAtFrame as B, ShapeNodeSchema as C, TextSpanMarkSchema as D, TextNodeSchema as E, computeLayout as F, initLayout as H, computeLayoutSync as I, computeStaggerDelay as L, collectNodeOps as M, compositorToProgram as N, TextSpanSchema as O, computeCarrierContinuity as P, evaluateAnimationAtFrame as R, Sequence as S, TextAnimatorSchema as T, lintComposition as U, hoistMattes as V, mergeAnimationTracks as W, MediaNodeSchema as _, CarrierHandoffConfigSchema as a, SceneDefinitionSchema as b, EnvironmentFogSchema as c, LayerAnimation as d, LayoutNodeSchema as f, MatteModeSchema as g, MaterialTypeSchema as h, CameraNodeSchema as i, calculateSequenceTimeline as j, ToneMappingSchema as k, EnvironmentPresetSchema as l, LightTypeSchema as m, BoxNodeSchema as n, ColorStopSchema as o, LightNodeSchema as p, CameraAnimation as r, CompositorProgramSchema as s, BloomConfigSchema as t, FlexNodeSchema as u, Model3DNodeSchema as v, TextAnimator as w, SceneTransitionTypeSchema as x, Scene as y, evaluateKeyframes as z };
3537
+ //# sourceMappingURL=program-Dd9tJFkY.mjs.map