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,658 @@
1
+ import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
+
3
+ //#region ../../nodes/node-particles/dist/renderers-C4F7TVQQ.mjs
4
+ function isParticleProgram(value) {
5
+ return typeof value === "object" && value !== null && "particleStatic" in value && typeof value.particleFrame === "function";
6
+ }
7
+ const PARTICLE_BYTES = 32;
8
+ const PARAM_VEC4S = 32;
9
+ const MAX_ATTRACTORS = 8;
10
+ const MAX_COLORS = 8;
11
+ const SNAPSHOT_EVERY = 24;
12
+ const MAX_SNAPSHOTS = 64;
13
+ const WORKGROUP = 64;
14
+ const COMMON_WGSL = `
15
+ struct Particle {
16
+ pos : vec2<f32>,
17
+ vel : vec2<f32>,
18
+ age : f32,
19
+ life : f32,
20
+ jitter : f32,
21
+ _pad : f32,
22
+ };
23
+
24
+ struct Params { v : array<vec4<f32>, ${PARAM_VEC4S}> };
25
+ `;
26
+ const SIM_WGSL = `
27
+ ${COMMON_WGSL}
28
+ @group(0) @binding(0) var<uniform> P : Params;
29
+ @group(0) @binding(1) var<storage, read_write> particles : array<Particle>;
30
+ @group(0) @binding(2) var<storage, read> mask : array<f32>;
31
+
32
+ fn pcg(v : u32) -> u32 {
33
+ let state = v * 747796405u + 2891336453u;
34
+ let word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
35
+ return (word >> 22u) ^ word;
36
+ }
37
+ fn rnd(idx : u32, channel : u32, seed : u32) -> f32 {
38
+ return f32(pcg(idx * 16u + channel + pcg(seed))) / 4294967295.0;
39
+ }
40
+
41
+ fn hash2(p : vec2<f32>) -> f32 {
42
+ let q = fract(p * vec2<f32>(0.1031, 0.1030));
43
+ let r = q + dot(q, q.yx + 33.33);
44
+ return fract((r.x + r.y) * r.x);
45
+ }
46
+ fn vnoise(p : vec2<f32>) -> f32 {
47
+ let i = floor(p);
48
+ let f = fract(p);
49
+ let u = f * f * (3.0 - 2.0 * f);
50
+ let a = hash2(i);
51
+ let b = hash2(i + vec2<f32>(1.0, 0.0));
52
+ let c = hash2(i + vec2<f32>(0.0, 1.0));
53
+ let d = hash2(i + vec2<f32>(1.0, 1.0));
54
+ return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
55
+ }
56
+ fn fbm(p : vec2<f32>) -> f32 {
57
+ return vnoise(p) * 0.6 + vnoise(p * 2.03 + 17.0) * 0.3 + vnoise(p * 4.01 + 41.0) * 0.1;
58
+ }
59
+ // Divergence-free flow: the curl of a scalar noise field.
60
+ fn curl(p : vec2<f32>) -> vec2<f32> {
61
+ let e = 0.02;
62
+ let dx = fbm(p + vec2<f32>(e, 0.0)) - fbm(p - vec2<f32>(e, 0.0));
63
+ let dy = fbm(p + vec2<f32>(0.0, e)) - fbm(p - vec2<f32>(0.0, e));
64
+ return vec2<f32>(dy, -dx) / (2.0 * e);
65
+ }
66
+
67
+ fn maskAt(cell : vec2<f32>, offset : u32) -> f32 {
68
+ let w = i32(P.v[18].x);
69
+ let h = i32(P.v[18].y);
70
+ let c0 = vec2<i32>(floor(cell));
71
+ let t = cell - floor(cell);
72
+ var s = 0.0;
73
+ for (var k = 0; k < 4; k++) {
74
+ let o = vec2<i32>(k & 1, k >> 1);
75
+ let c = c0 + o;
76
+ var v = 0.0;
77
+ if (c.x >= 0 && c.y >= 0 && c.x < w && c.y < h) {
78
+ v = mask[offset + u32(c.y * w + c.x)];
79
+ }
80
+ let wx = select(1.0 - t.x, t.x, o.x == 1);
81
+ let wy = select(1.0 - t.y, t.y, o.y == 1);
82
+ s += v * wx * wy;
83
+ }
84
+ return s;
85
+ }
86
+
87
+ fn spawn(i : u32, idx : u32, birthFrac : f32) {
88
+ let birthAge = birthFrac * P.v[1].z;
89
+ let seed = u32(P.v[1].y);
90
+ let shape = u32(P.v[4].x);
91
+ let ex = P.v[4].y; let ey = P.v[4].z; let ew = P.v[4].w;
92
+ let eh = P.v[5].x; let er = P.v[5].y;
93
+ let r0 = rnd(idx, 0u, seed); let r1 = rnd(idx, 1u, seed);
94
+ var pos = vec2<f32>(ex, ey);
95
+ var center = vec2<f32>(ex, ey);
96
+ if (shape == 1u) { pos = vec2<f32>(ex + ew * r0, ey + eh * r0); center = vec2<f32>(ex + ew * 0.5, ey + eh * 0.5); }
97
+ else if (shape == 2u) { pos = vec2<f32>(ex + ew * r0, ey + eh * r1); center = vec2<f32>(ex + ew * 0.5, ey + eh * 0.5); }
98
+ else if (shape == 3u) {
99
+ let a = r0 * 6.2831853; let rr = er * sqrt(r1);
100
+ pos = vec2<f32>(ex + cos(a) * rr, ey + sin(a) * rr);
101
+ } else if (shape == 4u) {
102
+ let a = r0 * 6.2831853;
103
+ pos = vec2<f32>(ex + cos(a) * er, ey + sin(a) * er);
104
+ }
105
+ let radial = P.v[1].w > 0.5;
106
+ var dir = P.v[6].x + (rnd(idx, 2u, seed) - 0.5) * P.v[6].y;
107
+ if (radial) {
108
+ let d = pos - center;
109
+ if (dot(d, d) > 1e-6) { dir = atan2(d.y, d.x) + (rnd(idx, 2u, seed) - 0.5) * P.v[6].y; }
110
+ }
111
+ // A moving emitter: older births of the frame start nearer last frame's spot.
112
+ if (P.v[30].z > 0.5) { pos += (P.v[30].xy - vec2<f32>(ex, ey)) * birthFrac; }
113
+ let speed = mix(P.v[5].z, P.v[5].w, rnd(idx, 3u, seed));
114
+ let vel = vec2<f32>(cos(dir), sin(dir)) * speed;
115
+ var p : Particle;
116
+ p.vel = vel;
117
+ p.pos = pos + vel * birthAge;
118
+ p.age = birthAge;
119
+ p.life = mix(P.v[6].z, P.v[6].w, rnd(idx, 4u, seed));
120
+ p.jitter = 1.0 - P.v[16].w * rnd(idx, 5u, seed);
121
+ p._pad = 0.0;
122
+ particles[i] = p;
123
+ }
124
+
125
+ @compute @workgroup_size(${WORKGROUP})
126
+ fn simulate(@builtin(global_invocation_id) gid : vec3<u32>) {
127
+ let i = gid.x;
128
+ let maxN = u32(P.v[1].x);
129
+ if (i >= maxN) { return; }
130
+ let dt = P.v[0].x;
131
+ let time = P.v[0].y;
132
+ let emitStart = u32(P.v[0].z);
133
+ let emitCount = u32(P.v[0].w);
134
+ let frameDt = P.v[1].z;
135
+
136
+ if (emitCount > 0u) {
137
+ let k = (i + maxN - (emitStart % maxN)) % maxN;
138
+ if (k < emitCount) {
139
+ // Births spread over the frame, oldest first.
140
+ spawn(i, emitStart + k, 1.0 - (f32(k) + 0.5) / f32(emitCount));
141
+ return;
142
+ }
143
+ }
144
+
145
+ var p = particles[i];
146
+ if (p.life <= 0.0) { return; }
147
+ p.age += dt;
148
+ if (p.age >= p.life) { p.life = 0.0; particles[i] = p; return; }
149
+
150
+ var acc = vec2<f32>(P.v[2].z, P.v[2].w);
151
+ let ns = P.v[3].y;
152
+ if (ns != 0.0) {
153
+ let sc = max(P.v[3].z, 1.0);
154
+ acc += curl(p.pos / sc + vec2<f32>(time * P.v[3].w, time * P.v[3].w * 0.7)) * ns;
155
+ }
156
+ let nAttr = u32(P.v[7].w);
157
+ for (var a = 0u; a < nAttr; a++) {
158
+ let at = P.v[8u + a];
159
+ let d = at.xy - p.pos;
160
+ let dist = length(d) + 1e-3;
161
+ let fall = exp(-(dist * dist) / max(at.w * at.w, 1.0));
162
+ acc += d / dist * at.z * fall;
163
+ }
164
+ if (P.v[16].x > 0.5) {
165
+ // Silhouette push: out along the gradient, harder where it just arrived.
166
+ let comp = p.pos + P.v[18].zw;
167
+ let cell = (comp - P.v[17].xy) / P.v[17].zw - 0.5;
168
+ let cellCount = u32(P.v[18].x * P.v[18].y);
169
+ let a0 = maskAt(cell, 0u);
170
+ if (a0 > 0.02) {
171
+ let gx = maskAt(cell + vec2<f32>(1.0, 0.0), 0u) - maskAt(cell - vec2<f32>(1.0, 0.0), 0u);
172
+ let gy = maskAt(cell + vec2<f32>(0.0, 1.0), 0u) - maskAt(cell - vec2<f32>(0.0, 1.0), 0u);
173
+ let g = vec2<f32>(gx, gy);
174
+ let gl = length(g);
175
+ if (gl > 1e-5) {
176
+ let before = maskAt(cell, cellCount);
177
+ let k = a0 * P.v[16].y + max(0.0, a0 - before) * P.v[16].z;
178
+ acc -= g / gl * k;
179
+ }
180
+ }
181
+ }
182
+
183
+ p.vel += acc * dt;
184
+ p.vel *= exp(-P.v[3].x * dt);
185
+ p.pos += p.vel * dt;
186
+
187
+ let w = P.v[2].x; let h = P.v[2].y;
188
+ let floorY = P.v[7].y;
189
+ let bounce = P.v[7].z;
190
+ if (floorY >= 0.0 && p.pos.y > floorY) { p.pos.y = floorY; p.vel.y = -abs(p.vel.y) * bounce; p.vel.x *= 0.9; }
191
+ let mode = u32(P.v[7].x);
192
+ if (mode == 1u) {
193
+ if (p.pos.x < 0.0 || p.pos.y < 0.0 || p.pos.x > w || p.pos.y > h) { p.life = 0.0; }
194
+ } else if (mode == 2u) {
195
+ if (p.pos.x < 0.0) { p.pos.x = 0.0; p.vel.x = abs(p.vel.x) * bounce; }
196
+ if (p.pos.x > w) { p.pos.x = w; p.vel.x = -abs(p.vel.x) * bounce; }
197
+ if (p.pos.y < 0.0) { p.pos.y = 0.0; p.vel.y = abs(p.vel.y) * bounce; }
198
+ if (p.pos.y > h) { p.pos.y = h; p.vel.y = -abs(p.vel.y) * bounce; }
199
+ } else if (mode == 3u) {
200
+ p.pos = vec2<f32>(p.pos.x - floor(p.pos.x / w) * w, p.pos.y - floor(p.pos.y / h) * h);
201
+ }
202
+ particles[i] = p;
203
+ }
204
+ `;
205
+ const DRAW_WGSL = `
206
+ ${COMMON_WGSL}
207
+ @group(0) @binding(0) var<uniform> P : Params;
208
+ @group(0) @binding(1) var<storage, read> particles : array<Particle>;
209
+
210
+ struct VOut {
211
+ @builtin(position) pos : vec4<f32>,
212
+ @location(0) uv : vec2<f32>,
213
+ @location(1) color : vec4<f32>,
214
+ @location(2) aspect : f32,
215
+ };
216
+
217
+ fn gradient(t : f32) -> vec4<f32> {
218
+ let n = i32(P.v[21].x);
219
+ if (n <= 1) { return P.v[22]; }
220
+ let x = clamp(t, 0.0, 1.0) * f32(n - 1);
221
+ let i = min(i32(floor(x)), n - 2);
222
+ return mix(P.v[22 + i], P.v[23 + i], x - f32(i));
223
+ }
224
+
225
+ @vertex
226
+ fn vs(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> VOut {
227
+ var out : VOut;
228
+ let p = particles[ii];
229
+ if (p.life <= 0.0) {
230
+ out.pos = vec4<f32>(2.0, 2.0, 0.0, 1.0);
231
+ out.color = vec4<f32>(0.0);
232
+ return out;
233
+ }
234
+ let t = p.age / p.life;
235
+ let size = mix(P.v[19].x, P.v[19].y, t) * p.jitter;
236
+ var corner = vec2<f32>(0.0);
237
+ switch (vi) {
238
+ case 0u: { corner = vec2<f32>(-1.0, -1.0); }
239
+ case 1u: { corner = vec2<f32>(1.0, -1.0); }
240
+ case 2u: { corner = vec2<f32>(-1.0, 1.0); }
241
+ case 3u: { corner = vec2<f32>(-1.0, 1.0); }
242
+ case 4u: { corner = vec2<f32>(1.0, -1.0); }
243
+ default: { corner = vec2<f32>(1.0, 1.0); }
244
+ }
245
+ let speed = length(p.vel);
246
+ var axisX = vec2<f32>(1.0, 0.0);
247
+ var halfLen = size * 0.5;
248
+ let shape = u32(P.v[20].x);
249
+ if (shape == 3u && speed > 1e-3) {
250
+ axisX = p.vel / speed;
251
+ halfLen = size * 0.5 + speed * P.v[20].y * 0.5;
252
+ }
253
+ let axisY = vec2<f32>(-axisX.y, axisX.x);
254
+ let local = axisX * corner.x * halfLen + axisY * corner.y * size * 0.5;
255
+ let px = (p.pos + local) * P.v[21].yz;
256
+ let tsize = P.v[2].xy * P.v[21].yz;
257
+ out.pos = vec4<f32>(px.x / tsize.x * 2.0 - 1.0, 1.0 - px.y / tsize.y * 2.0, 0.0, 1.0);
258
+ out.uv = corner;
259
+ out.aspect = halfLen / max(size * 0.5, 1e-3);
260
+
261
+ var c = gradient(t);
262
+ if (P.v[20].z > 0.5) { c = gradient(speed / max(P.v[20].w, 1e-3)); }
263
+ let fadeIn = max(P.v[19].z, 1e-4);
264
+ let fadeOut = max(P.v[19].w, 1e-4);
265
+ let a = c.a * smoothstep(0.0, fadeIn, t) * (1.0 - smoothstep(1.0 - fadeOut, 1.0, t)) * P.v[21].w;
266
+ out.color = vec4<f32>(c.rgb * a, a);
267
+ return out;
268
+ }
269
+
270
+ @fragment
271
+ fn fs(in : VOut) -> @location(0) vec4<f32> {
272
+ let shape = u32(P.v[20].x);
273
+ var m = 1.0;
274
+ if (shape == 0u) {
275
+ let d = length(in.uv);
276
+ let e = max(fwidth(d), 1e-3);
277
+ m = 1.0 - smoothstep(1.0 - e, 1.0, d);
278
+ } else if (shape == 1u) {
279
+ let d = length(in.uv);
280
+ m = exp(-3.5 * d * d) * (1.0 - smoothstep(0.9, 1.0, d));
281
+ } else if (shape == 3u) {
282
+ // A capsule along the motion, soft at the sides.
283
+ let ax = abs(in.uv.x) * in.aspect;
284
+ let ex = max(ax - (in.aspect - 1.0), 0.0);
285
+ let d = length(vec2<f32>(ex, in.uv.y));
286
+ m = 1.0 - smoothstep(0.5, 1.0, d);
287
+ }
288
+ return in.color * m;
289
+ }
290
+ `;
291
+ const pipelines = /* @__PURE__ */ new WeakMap();
292
+ function getPipelines(device) {
293
+ let p = pipelines.get(device);
294
+ if (p) return p;
295
+ const simLayout = device.createBindGroupLayout({
296
+ label: "particles_sim_layout",
297
+ entries: [
298
+ {
299
+ binding: 0,
300
+ visibility: GPUShaderStage.COMPUTE,
301
+ buffer: { type: "uniform" }
302
+ },
303
+ {
304
+ binding: 1,
305
+ visibility: GPUShaderStage.COMPUTE,
306
+ buffer: { type: "storage" }
307
+ },
308
+ {
309
+ binding: 2,
310
+ visibility: GPUShaderStage.COMPUTE,
311
+ buffer: { type: "read-only-storage" }
312
+ }
313
+ ]
314
+ });
315
+ p = {
316
+ simLayout,
317
+ sim: device.createComputePipeline({
318
+ label: "particles_sim",
319
+ layout: device.createPipelineLayout({ bindGroupLayouts: [simLayout] }),
320
+ compute: {
321
+ module: device.createShaderModule({
322
+ label: "particles_sim.wgsl",
323
+ code: SIM_WGSL
324
+ }),
325
+ entryPoint: "simulate"
326
+ }
327
+ }),
328
+ drawLayout: device.createBindGroupLayout({
329
+ label: "particles_draw_layout",
330
+ entries: [{
331
+ binding: 0,
332
+ visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
333
+ buffer: { type: "uniform" }
334
+ }, {
335
+ binding: 1,
336
+ visibility: GPUShaderStage.VERTEX,
337
+ buffer: { type: "read-only-storage" }
338
+ }]
339
+ }),
340
+ draw: /* @__PURE__ */ new Map(),
341
+ drawModule: device.createShaderModule({
342
+ label: "particles_draw.wgsl",
343
+ code: DRAW_WGSL
344
+ })
345
+ };
346
+ pipelines.set(device, p);
347
+ return p;
348
+ }
349
+ const BLENDS = {
350
+ normal: {
351
+ color: {
352
+ srcFactor: "one",
353
+ dstFactor: "one-minus-src-alpha",
354
+ operation: "add"
355
+ },
356
+ alpha: {
357
+ srcFactor: "one",
358
+ dstFactor: "one-minus-src-alpha",
359
+ operation: "add"
360
+ }
361
+ },
362
+ add: {
363
+ color: {
364
+ srcFactor: "one",
365
+ dstFactor: "one",
366
+ operation: "add"
367
+ },
368
+ alpha: {
369
+ srcFactor: "one",
370
+ dstFactor: "one",
371
+ operation: "add"
372
+ }
373
+ },
374
+ screen: {
375
+ color: {
376
+ srcFactor: "one",
377
+ dstFactor: "one-minus-src",
378
+ operation: "add"
379
+ },
380
+ alpha: {
381
+ srcFactor: "one",
382
+ dstFactor: "one-minus-src-alpha",
383
+ operation: "add"
384
+ }
385
+ }
386
+ };
387
+ function drawPipeline(device, format, blend) {
388
+ const p = getPipelines(device);
389
+ const key = `${format}|${blend}`;
390
+ let pipe = p.draw.get(key);
391
+ if (!pipe) {
392
+ pipe = device.createRenderPipeline({
393
+ label: `particles_draw_${blend}`,
394
+ layout: device.createPipelineLayout({ bindGroupLayouts: [p.drawLayout] }),
395
+ vertex: {
396
+ module: p.drawModule,
397
+ entryPoint: "vs"
398
+ },
399
+ fragment: {
400
+ module: p.drawModule,
401
+ entryPoint: "fs",
402
+ targets: [{
403
+ format,
404
+ blend: BLENDS[blend]
405
+ }]
406
+ },
407
+ primitive: { topology: "triangle-list" }
408
+ });
409
+ p.draw.set(key, pipe);
410
+ }
411
+ return pipe;
412
+ }
413
+ const SHAPES = {
414
+ circle: 0,
415
+ soft: 1,
416
+ square: 2,
417
+ spark: 3
418
+ };
419
+ const EMITTERS = {
420
+ point: 0,
421
+ line: 1,
422
+ rect: 2,
423
+ circle: 3,
424
+ ring: 4
425
+ };
426
+ const BOUNDS = {
427
+ none: 0,
428
+ kill: 1,
429
+ bounce: 2,
430
+ wrap: 3
431
+ };
432
+ /** Packs static settings and one frame's inputs into the shared parameter block. */
433
+ function packParams(s, f, out, sim, view) {
434
+ out.fill(0);
435
+ const v = (i, a, b, c, d) => out.set([
436
+ a,
437
+ b,
438
+ c,
439
+ d
440
+ ], i * 4);
441
+ const deg = Math.PI / 180;
442
+ v(0, sim.dt, sim.time, sim.emitStart, sim.emitCount);
443
+ v(1, s.max, s.seed, sim.frameDt, s.emitter.radial ? 1 : 0);
444
+ v(2, s.layer.width, s.layer.height, f.gravity[0], f.gravity[1]);
445
+ v(3, f.drag, f.noise.strength, f.noise.scale, f.noise.speed);
446
+ const e = s.emitter;
447
+ const ex = f.emitter?.x ?? e.x;
448
+ const ey = f.emitter?.y ?? e.y;
449
+ v(4, EMITTERS[e.shape], ex, ey, e.width);
450
+ if (f.emitter) v(30, f.emitter.previousX, f.emitter.previousY, 1, 0);
451
+ v(5, e.height, e.radius, s.speed[0], s.speed[1]);
452
+ v(6, s.direction * deg, s.spread * deg, s.lifetime[0], s.lifetime[1]);
453
+ const attractors = f.attractors.slice(0, MAX_ATTRACTORS);
454
+ v(7, BOUNDS[s.bounds], s.floor ?? -1, s.bounce, attractors.length);
455
+ for (const [i, a] of attractors.entries()) v(8 + i, a.x, a.y, a.strength, a.radius);
456
+ const m = f.push?.mask;
457
+ v(16, m ? 1 : 0, f.push?.strength ?? 0, f.push?.sweep ?? 0, s.sizeJitter);
458
+ v(17, m?.originX ?? 0, m?.originY ?? 0, m?.scaleX ?? 1, m?.scaleY ?? 1);
459
+ v(18, m?.width ?? 0, m?.height ?? 0, s.layer.x, s.layer.y);
460
+ v(19, s.size[0], s.size[1], s.fade[0], s.fade[1]);
461
+ v(20, SHAPES[s.shape], s.stretch, s.colorBySpeed !== null ? 1 : 0, s.colorBySpeed ?? 1);
462
+ const colors = s.colors.slice(0, MAX_COLORS);
463
+ v(21, colors.length, view.scaleX, view.scaleY, s.opacity);
464
+ for (const [i, c] of colors.entries()) v(22 + i, c[0], c[1], c[2], c[3]);
465
+ }
466
+ function stateFor(program, device) {
467
+ const existing = program.particleState;
468
+ if (existing && existing.device === device) return existing;
469
+ const s = program.particleStatic;
470
+ const state = {
471
+ device,
472
+ particles: device.createBuffer({
473
+ label: "particles",
474
+ size: s.max * PARTICLE_BYTES,
475
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST
476
+ }),
477
+ frame: -1,
478
+ emitted: 0,
479
+ carry: 0,
480
+ snapshots: /* @__PURE__ */ new Map(),
481
+ maskBuffer: null,
482
+ maskSize: 0,
483
+ ubo: device.createBuffer({
484
+ label: "particles_params",
485
+ size: PARAM_VEC4S * 16,
486
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
487
+ })
488
+ };
489
+ program.particleState = state;
490
+ return state;
491
+ }
492
+ /** Uploads this frame's (and the previous frame's) silhouette; a 1-float buffer when there is none. */
493
+ function uploadMask(state, f) {
494
+ const m = f.push?.mask;
495
+ const cells = m ? m.width * m.height : 0;
496
+ const size = Math.max(16, cells * 2 * 4);
497
+ if (!state.maskBuffer || state.maskSize < size) {
498
+ state.maskBuffer?.destroy();
499
+ state.maskBuffer = state.device.createBuffer({
500
+ label: "particles_mask",
501
+ size,
502
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
503
+ });
504
+ state.maskSize = size;
505
+ }
506
+ if (m) {
507
+ const both = new Float32Array(cells * 2);
508
+ both.set(m.data.subarray(0, cells));
509
+ both.set((f.push?.previous ?? m).data.subarray(0, cells), cells);
510
+ state.device.queue.writeBuffer(state.maskBuffer, 0, both);
511
+ }
512
+ return state.maskBuffer;
513
+ }
514
+ /** Steps the system from the frame it holds to `frame` (layer-local), restoring a snapshot to go back. */
515
+ function advance(program, state, frame, compositionStart, fps) {
516
+ const { device } = state;
517
+ const s = program.particleStatic;
518
+ if (frame < state.frame || state.frame < 0) {
519
+ let best = -1;
520
+ for (const k of state.snapshots.keys()) if (k <= frame && k > best) best = k;
521
+ const encoder = device.createCommandEncoder({ label: "particles_restore" });
522
+ if (best >= 0) {
523
+ const snap = state.snapshots.get(best);
524
+ encoder.copyBufferToBuffer(snap.buffer, 0, state.particles, 0, s.max * PARTICLE_BYTES);
525
+ state.emitted = snap.emitted;
526
+ state.carry = snap.carry;
527
+ state.frame = best;
528
+ } else {
529
+ encoder.clearBuffer(state.particles);
530
+ state.emitted = 0;
531
+ state.carry = 0;
532
+ state.frame = -1;
533
+ }
534
+ device.queue.submit([encoder.finish()]);
535
+ }
536
+ const p = getPipelines(device);
537
+ const params = new Float32Array(PARAM_VEC4S * 4);
538
+ const substeps = Math.max(1, Math.round(s.substeps));
539
+ const frameDt = 1 / fps;
540
+ const prewarmFrames = Math.round(s.prewarm * fps);
541
+ for (let f = state.frame + 1; f <= frame; f++) {
542
+ const steps = f === 0 ? prewarmFrames + 1 : 1;
543
+ for (let w = 0; w < steps; w++) {
544
+ const simFrame = f === 0 ? w - prewarmFrames : f;
545
+ const inputs = program.particleFrame(compositionStart + Math.max(0, simFrame), fps);
546
+ state.carry += Math.max(0, inputs.rate) * frameDt;
547
+ let born = Math.floor(state.carry);
548
+ state.carry -= born;
549
+ born += Math.max(0, Math.round(inputs.burst));
550
+ born = Math.min(born, s.max);
551
+ const mask = uploadMask(state, inputs);
552
+ const bindGroup = device.createBindGroup({
553
+ layout: p.simLayout,
554
+ entries: [
555
+ {
556
+ binding: 0,
557
+ resource: { buffer: state.ubo }
558
+ },
559
+ {
560
+ binding: 1,
561
+ resource: { buffer: state.particles }
562
+ },
563
+ {
564
+ binding: 2,
565
+ resource: { buffer: mask }
566
+ }
567
+ ]
568
+ });
569
+ for (let k = 0; k < substeps; k++) {
570
+ packParams(s, inputs, params, {
571
+ dt: frameDt / substeps,
572
+ time: (simFrame + k / substeps) * frameDt,
573
+ emitStart: state.emitted,
574
+ emitCount: k === 0 ? born : 0,
575
+ frameDt
576
+ }, {
577
+ scaleX: 1,
578
+ scaleY: 1
579
+ });
580
+ device.queue.writeBuffer(state.ubo, 0, params);
581
+ const encoder = device.createCommandEncoder({ label: "particles_step" });
582
+ const pass = encoder.beginComputePass({ label: "particles_sim" });
583
+ pass.setPipeline(p.sim);
584
+ pass.setBindGroup(0, bindGroup);
585
+ pass.dispatchWorkgroups(Math.ceil(s.max / WORKGROUP));
586
+ pass.end();
587
+ device.queue.submit([encoder.finish()]);
588
+ }
589
+ state.emitted += born;
590
+ }
591
+ state.frame = f;
592
+ if (f % SNAPSHOT_EVERY === 0 && !state.snapshots.has(f) && state.snapshots.size < MAX_SNAPSHOTS) {
593
+ const buffer = device.createBuffer({
594
+ label: `particles_snapshot_${f}`,
595
+ size: s.max * PARTICLE_BYTES,
596
+ usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST
597
+ });
598
+ const encoder = device.createCommandEncoder({ label: "particles_snapshot" });
599
+ encoder.copyBufferToBuffer(state.particles, 0, buffer, 0, s.max * PARTICLE_BYTES);
600
+ device.queue.submit([encoder.finish()]);
601
+ state.snapshots.set(f, {
602
+ buffer,
603
+ emitted: state.emitted,
604
+ carry: state.carry
605
+ });
606
+ }
607
+ }
608
+ }
609
+ const ParticlesWebGPURenderer = async (args) => {
610
+ const { ctx, encoder, pass, targetView, targetWidth, targetHeight, props } = args;
611
+ const op = props.virtualMedia?.operation;
612
+ if (op?.op !== "Particles" || !isParticleProgram(op.effect)) return;
613
+ const program = op.effect;
614
+ const s = program.particleStatic;
615
+ const fps = props.fps || 30;
616
+ const local = Math.max(0, Math.round(props.frame ?? 0));
617
+ const compositionFrame = Math.round(props.compositionFrame ?? local);
618
+ const compositionStart = compositionFrame - local;
619
+ const state = stateFor(program, ctx.device);
620
+ advance(program, state, local, compositionStart, fps);
621
+ pass.end();
622
+ const params = new Float32Array(PARAM_VEC4S * 4);
623
+ packParams(s, program.particleFrame(compositionFrame, fps), params, {
624
+ dt: 0,
625
+ time: 0,
626
+ emitStart: 0,
627
+ emitCount: 0,
628
+ frameDt: 1 / fps
629
+ }, {
630
+ scaleX: targetWidth / s.layer.width,
631
+ scaleY: targetHeight / s.layer.height
632
+ });
633
+ const ubo = ctx.renderer.getTemporaryBuffer(params);
634
+ const draw = ctx.renderer.beginFrame(encoder, targetView, {
635
+ r: 0,
636
+ g: 0,
637
+ b: 0,
638
+ a: 0
639
+ }, targetWidth, targetHeight, "load");
640
+ draw.setPipeline(drawPipeline(ctx.device, ctx.renderer.format, s.blend));
641
+ draw.setBindGroup(0, ctx.device.createBindGroup({
642
+ layout: getPipelines(ctx.device).drawLayout,
643
+ entries: [{
644
+ binding: 0,
645
+ resource: { buffer: ubo }
646
+ }, {
647
+ binding: 1,
648
+ resource: { buffer: state.particles }
649
+ }]
650
+ }));
651
+ draw.draw(6, s.max);
652
+ draw.end();
653
+ };
654
+ var renderers_default = defineRenderer({ WebGPURenderer: ParticlesWebGPURenderer });
655
+
656
+ //#endregion
657
+ export { ParticlesWebGPURenderer, renderers_default as default };
658
+ //# sourceMappingURL=renderer-DO5r7ZV-.mjs.map