framefields 2.9.0 → 2.9.3

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 (328) hide show
  1. package/NOTICE.md +14 -0
  2. package/README.md +1 -5
  3. package/dist/audio/index.d.mts +5 -4
  4. package/dist/audio/index.mjs +13 -13
  5. package/dist/{audio-BfQg37MW.mjs → audio-B6RmYOPe.mjs} +4 -4
  6. package/dist/{audio-BfQg37MW.mjs.map → audio-B6RmYOPe.mjs.map} +1 -1
  7. package/dist/{audio-a0MFkK6J.mjs → audio-BlDbnteH.mjs} +1 -1
  8. package/dist/{audio-a0MFkK6J.mjs.map → audio-BlDbnteH.mjs.map} +1 -1
  9. package/dist/{audio-Ccpl9mjV.d.mts → audio-D6tBMbHh.d.mts} +4 -3
  10. package/dist/audio-D6tBMbHh.d.mts.map +1 -0
  11. package/dist/{check-result-C3jlgV2i.mjs → check-result-Bj7g62ka.mjs} +1 -1
  12. package/dist/{check-result-C3jlgV2i.mjs.map → check-result-Bj7g62ka.mjs.map} +1 -1
  13. package/dist/cli/check-worker.mjs +50 -50
  14. package/dist/cli.mjs +1 -1
  15. package/dist/components/index.d.mts +14 -11
  16. package/dist/components/index.mjs +47 -47
  17. package/dist/dist-BlulwErl.mjs +3 -0
  18. package/dist/{dist-BlIrsfcn.mjs → dist-ByxHoMQI.mjs} +1 -1
  19. package/dist/{dist-BlIrsfcn.mjs.map → dist-ByxHoMQI.mjs.map} +1 -1
  20. package/dist/{dist-Buaaj-Ul.mjs → dist-Cn8bDsQF.mjs} +1 -1
  21. package/dist/{dist-Buaaj-Ul.mjs.map → dist-Cn8bDsQF.mjs.map} +1 -1
  22. package/dist/{dist-C1cCW7Bt.mjs → dist-D12-a3-x.mjs} +3 -3
  23. package/dist/{dist-C1cCW7Bt.mjs.map → dist-D12-a3-x.mjs.map} +1 -1
  24. package/dist/{dist-C8Xq3zgx.mjs → dist-DEUU6sNe.mjs} +4 -4
  25. package/dist/{dist-C8Xq3zgx.mjs.map → dist-DEUU6sNe.mjs.map} +1 -1
  26. package/dist/{dist-DVMepKaO.mjs → dist-DL1GwJvs.mjs} +2 -2
  27. package/dist/{dist-DVMepKaO.mjs.map → dist-DL1GwJvs.mjs.map} +1 -1
  28. package/dist/dist-Dq5TkNDI.mjs +1434 -0
  29. package/dist/dist-Dq5TkNDI.mjs.map +1 -0
  30. package/dist/effects/index.d.mts +6 -4
  31. package/dist/effects/index.mjs +36 -36
  32. package/dist/{effects-CemgqEPv.mjs → effects-CViUoQSV.mjs} +3 -3
  33. package/dist/{effects-CemgqEPv.mjs.map → effects-CViUoQSV.mjs.map} +1 -1
  34. package/dist/fonts/index.d.mts +1 -1
  35. package/dist/fonts/index.mjs +3 -3
  36. package/dist/{fonts-BW0pPcvJ.mjs → fonts-B0U2KO5I.mjs} +2 -2
  37. package/dist/{fonts-BW0pPcvJ.mjs.map → fonts-B0U2KO5I.mjs.map} +1 -1
  38. package/dist/{gpu-CMaa63nz.mjs → gpu-zFNrvhV9.mjs} +2 -2
  39. package/dist/{gpu-CMaa63nz.mjs.map → gpu-zFNrvhV9.mjs.map} +1 -1
  40. package/dist/index-9_4X2ro1.d.mts +2402 -0
  41. package/dist/index-9_4X2ro1.d.mts.map +1 -0
  42. package/dist/{index-CZjrnylh.d.mts → index-B9Lm1x8i.d.mts} +662 -640
  43. package/dist/index-B9Lm1x8i.d.mts.map +1 -0
  44. package/dist/{index-BfDFmIBE.d.mts → index-BuYtrhzL.d.mts} +1 -1
  45. package/dist/{index-BfDFmIBE.d.mts.map → index-BuYtrhzL.d.mts.map} +1 -1
  46. package/dist/{index-D5UDyVMb.d.mts → index-Bzo1uj8h.d.mts} +4 -2401
  47. package/dist/index-Bzo1uj8h.d.mts.map +1 -0
  48. package/dist/{index-Du5YgdzM.d.mts → index-C6GcuYVA.d.mts} +6 -1151
  49. package/dist/index-C6GcuYVA.d.mts.map +1 -0
  50. package/dist/{index-BIjMAW1h.d.mts → index-CgGM31I9.d.mts} +2 -2
  51. package/dist/{index-BIjMAW1h.d.mts.map → index-CgGM31I9.d.mts.map} +1 -1
  52. package/dist/index-DBhswLMO.d.mts +330 -0
  53. package/dist/index-DBhswLMO.d.mts.map +1 -0
  54. package/dist/{index-CJL0JAU8.d.mts → index-V0ZQ4JN6.d.mts} +2 -2
  55. package/dist/{index-CJL0JAU8.d.mts.map → index-V0ZQ4JN6.d.mts.map} +1 -1
  56. package/dist/{index-7Z9_a_iB.d.mts → index-f4IF1vRH.d.mts} +3 -3
  57. package/dist/{index-7Z9_a_iB.d.mts.map → index-f4IF1vRH.d.mts.map} +1 -1
  58. package/dist/index-svAgwTY_.d.mts +1163 -0
  59. package/dist/index-svAgwTY_.d.mts.map +1 -0
  60. package/dist/{index-CFoAmh7q.d.mts → index-w28KUM9A.d.mts} +3 -3
  61. package/dist/{index-CFoAmh7q.d.mts.map → index-w28KUM9A.d.mts.map} +1 -1
  62. package/dist/index.d.mts +15 -12
  63. package/dist/index.mjs +58 -57
  64. package/dist/preview/index.d.mts +4 -3
  65. package/dist/preview/index.mjs +12 -12
  66. package/dist/{preview-BQVgn6Ho.mjs → preview-ZKJ_zTmd.mjs} +3 -3
  67. package/dist/{preview-BQVgn6Ho.mjs.map → preview-ZKJ_zTmd.mjs.map} +1 -1
  68. package/dist/preview-engine/{chunk-GEUUXTDL.mjs → chunk-D73ZKPFN.mjs} +4 -4
  69. package/dist/preview-engine/{chunk-UQKPDGEH.mjs → chunk-EJJITH6U.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-374QY63R.mjs → chunk-Q62GPWGD.mjs} +23 -23
  71. package/dist/preview-engine/chunk-XYGDTPO7.mjs +39 -0
  72. package/dist/preview-engine/components.mjs +1 -1
  73. package/dist/preview-engine/effects.mjs +1 -1
  74. package/dist/preview-engine/framefields.mjs +1 -1
  75. package/dist/preview-engine/player.mjs +1 -1
  76. package/dist/preview-engine/{renderers-O55BEDQZ.mjs → renderers-MDHPQY6D.mjs} +1 -1
  77. package/dist/preview-engine/src-4IUYUKIZ.mjs +8 -0
  78. package/dist/{program-CKpKkllV.mjs → program-xjIwjKb6.mjs} +4 -4
  79. package/dist/{program-CKpKkllV.mjs.map → program-xjIwjKb6.mjs.map} +1 -1
  80. package/dist/renderer/index.d.mts +3 -2
  81. package/dist/renderer/index.mjs +3 -3
  82. package/dist/renderer-129U3pc9.mjs +5 -0
  83. package/dist/renderer-2phFTFxQ.mjs +5 -0
  84. package/dist/{renderer-Bfk6A7UO.mjs → renderer-5qJPGvVL.mjs} +5 -5
  85. package/dist/{renderer-Bfk6A7UO.mjs.map → renderer-5qJPGvVL.mjs.map} +1 -1
  86. package/dist/renderer-9muKpDeE.mjs +5 -0
  87. package/dist/{renderer-B522Dkdk.mjs → renderer-AUK_ZS3p.mjs} +4 -4
  88. package/dist/{renderer-B522Dkdk.mjs.map → renderer-AUK_ZS3p.mjs.map} +1 -1
  89. package/dist/{renderer-DKgPVOLL.d.mts → renderer-B-inTgyb.d.mts} +2 -2
  90. package/dist/{renderer-DKgPVOLL.d.mts.map → renderer-B-inTgyb.d.mts.map} +1 -1
  91. package/dist/{renderer-BF0hx_iJ.mjs → renderer-B3IRvukr.mjs} +5 -5
  92. package/dist/{renderer-BF0hx_iJ.mjs.map → renderer-B3IRvukr.mjs.map} +1 -1
  93. package/dist/renderer-B5Dhv6j9.mjs +5 -0
  94. package/dist/{renderer-DO-KbpYZ.mjs → renderer-B6TjJi1g.mjs} +5 -5
  95. package/dist/{renderer-DO-KbpYZ.mjs.map → renderer-B6TjJi1g.mjs.map} +1 -1
  96. package/dist/{renderer-D61B9bXF.mjs → renderer-B78W9uad.mjs} +4 -4
  97. package/dist/{renderer-D61B9bXF.mjs.map → renderer-B78W9uad.mjs.map} +1 -1
  98. package/dist/{renderer-BPWDsufX.mjs → renderer-B7kOF_Az.mjs} +3 -3
  99. package/dist/{renderer-BPWDsufX.mjs.map → renderer-B7kOF_Az.mjs.map} +1 -1
  100. package/dist/renderer-BBUgCS3C.mjs +5 -0
  101. package/dist/{renderer-C7eFJf0_.mjs → renderer-BG6bkKtY.mjs} +5 -5
  102. package/dist/{renderer-C7eFJf0_.mjs.map → renderer-BG6bkKtY.mjs.map} +1 -1
  103. package/dist/{renderer-B39I6CQw.mjs → renderer-BJKzZwyn.mjs} +4 -4
  104. package/dist/{renderer-B39I6CQw.mjs.map → renderer-BJKzZwyn.mjs.map} +1 -1
  105. package/dist/{renderer-DqvoMLca.mjs → renderer-BJQt0RiZ.mjs} +5 -5
  106. package/dist/{renderer-DqvoMLca.mjs.map → renderer-BJQt0RiZ.mjs.map} +1 -1
  107. package/dist/renderer-BKXM28Mx.mjs +5 -0
  108. package/dist/renderer-BKqm6xdf.mjs +5 -0
  109. package/dist/{renderer-DiY70S8S.mjs → renderer-BMP_lYMk.mjs} +4 -4
  110. package/dist/{renderer-DiY70S8S.mjs.map → renderer-BMP_lYMk.mjs.map} +1 -1
  111. package/dist/renderer-BMfMMf0R.mjs +5 -0
  112. package/dist/{renderer-DkRSZg5g.mjs → renderer-BNbMi9CI.mjs} +5 -5
  113. package/dist/{renderer-DkRSZg5g.mjs.map → renderer-BNbMi9CI.mjs.map} +1 -1
  114. package/dist/{renderer-D7Al3_-5.mjs → renderer-BPYIqtNg.mjs} +5 -5
  115. package/dist/{renderer-D7Al3_-5.mjs.map → renderer-BPYIqtNg.mjs.map} +1 -1
  116. package/dist/renderer-BPsjEnnl.mjs +5 -0
  117. package/dist/{renderer-DDEkFbVI.mjs → renderer-BQOeeXTr.mjs} +5 -5
  118. package/dist/{renderer-DDEkFbVI.mjs.map → renderer-BQOeeXTr.mjs.map} +1 -1
  119. package/dist/{renderer-GBmWjBvy.mjs → renderer-BRWjLiHX.mjs} +3 -3
  120. package/dist/{renderer-GBmWjBvy.mjs.map → renderer-BRWjLiHX.mjs.map} +1 -1
  121. package/dist/{renderer-_iMAO698.mjs → renderer-BVql26Ay.mjs} +2 -2
  122. package/dist/{renderer-_iMAO698.mjs.map → renderer-BVql26Ay.mjs.map} +1 -1
  123. package/dist/{renderer-CHr7MiYW.mjs → renderer-BWMzjSgf.mjs} +5 -5
  124. package/dist/{renderer-CHr7MiYW.mjs.map → renderer-BWMzjSgf.mjs.map} +1 -1
  125. package/dist/{renderer-pHWEHDnM.mjs → renderer-BYqrtBvd.mjs} +5 -5
  126. package/dist/{renderer-pHWEHDnM.mjs.map → renderer-BYqrtBvd.mjs.map} +1 -1
  127. package/dist/{renderer-CwFqqpWY.mjs → renderer-BZmmekE8.mjs} +4 -4
  128. package/dist/{renderer-CwFqqpWY.mjs.map → renderer-BZmmekE8.mjs.map} +1 -1
  129. package/dist/{renderer-D47AEJE_.mjs → renderer-BcO7LUla.mjs} +3 -3
  130. package/dist/{renderer-D47AEJE_.mjs.map → renderer-BcO7LUla.mjs.map} +1 -1
  131. package/dist/{renderer-BlvGcyAN.mjs → renderer-BdbI_u9w.mjs} +3 -3
  132. package/dist/{renderer-BlvGcyAN.mjs.map → renderer-BdbI_u9w.mjs.map} +1 -1
  133. package/dist/{renderer-DsEyjwfT.mjs → renderer-Be5hfwSd.mjs} +74 -74
  134. package/dist/{renderer-DsEyjwfT.mjs.map → renderer-Be5hfwSd.mjs.map} +1 -1
  135. package/dist/{renderer-BAYTI6jj.mjs → renderer-BfbSvElt.mjs} +4 -4
  136. package/dist/{renderer-BAYTI6jj.mjs.map → renderer-BfbSvElt.mjs.map} +1 -1
  137. package/dist/{renderer-BpIF1QIE.mjs → renderer-BgDLCCuq.mjs} +5 -5
  138. package/dist/{renderer-BpIF1QIE.mjs.map → renderer-BgDLCCuq.mjs.map} +1 -1
  139. package/dist/renderer-Bofr6f88.mjs +6 -0
  140. package/dist/renderer-BqoGcujR.mjs +5 -0
  141. package/dist/renderer-BvuBt2aH.mjs +5 -0
  142. package/dist/renderer-BxTgXHu1.mjs +5 -0
  143. package/dist/renderer-Bz2Rrz60.mjs +5 -0
  144. package/dist/{renderer-g_vrrAQU.mjs → renderer-C06U4c9k.mjs} +3 -3
  145. package/dist/{renderer-g_vrrAQU.mjs.map → renderer-C06U4c9k.mjs.map} +1 -1
  146. package/dist/{renderer-D7r6onRT.mjs → renderer-C3Iev6zu.mjs} +4 -4
  147. package/dist/{renderer-D7r6onRT.mjs.map → renderer-C3Iev6zu.mjs.map} +1 -1
  148. package/dist/{renderer-CpUJBOfb.mjs → renderer-C3tVrzyT.mjs} +3 -3
  149. package/dist/{renderer-SWr3vbrV.mjs → renderer-C4yKI8MT.mjs} +3 -3
  150. package/dist/{renderer-SWr3vbrV.mjs.map → renderer-C4yKI8MT.mjs.map} +1 -1
  151. package/dist/{renderer-Xv6GfNUI.mjs → renderer-C6st34I6.mjs} +3 -3
  152. package/dist/{renderer-Xv6GfNUI.mjs.map → renderer-C6st34I6.mjs.map} +1 -1
  153. package/dist/{renderer-sCovEubT.mjs → renderer-C7MAqpIS.mjs} +4 -4
  154. package/dist/{renderer-sCovEubT.mjs.map → renderer-C7MAqpIS.mjs.map} +1 -1
  155. package/dist/renderer-CBjG8rjE.mjs +5 -0
  156. package/dist/{renderer-BAusZ6Vu.mjs → renderer-CCFHnafT.mjs} +4 -4
  157. package/dist/{renderer-BAusZ6Vu.mjs.map → renderer-CCFHnafT.mjs.map} +1 -1
  158. package/dist/{renderer-DVCJjVn7.mjs → renderer-CDVb4OfJ.mjs} +5 -5
  159. package/dist/{renderer-DVCJjVn7.mjs.map → renderer-CDVb4OfJ.mjs.map} +1 -1
  160. package/dist/{renderer-DpruWmZU.mjs → renderer-CEfVvcw-.mjs} +4 -4
  161. package/dist/{renderer-DpruWmZU.mjs.map → renderer-CEfVvcw-.mjs.map} +1 -1
  162. package/dist/{renderer-DbRZe0Re.mjs → renderer-CIB5L_C4.mjs} +5 -5
  163. package/dist/{renderer-DbRZe0Re.mjs.map → renderer-CIB5L_C4.mjs.map} +1 -1
  164. package/dist/{renderer-ktWXVYka.mjs → renderer-CPTXJs0n.mjs} +6 -6
  165. package/dist/{renderer-ktWXVYka.mjs.map → renderer-CPTXJs0n.mjs.map} +1 -1
  166. package/dist/renderer-CS2zyPyZ.mjs +5 -0
  167. package/dist/{renderer-CcvvoKiZ.mjs → renderer-CUBDxuxh.mjs} +5 -5
  168. package/dist/{renderer-CcvvoKiZ.mjs.map → renderer-CUBDxuxh.mjs.map} +1 -1
  169. package/dist/renderer-CWLF6cAz.mjs +1008 -0
  170. package/dist/renderer-CWLF6cAz.mjs.map +1 -0
  171. package/dist/{renderer-EaLUCobW.mjs → renderer-CXLugAe8.mjs} +4 -4
  172. package/dist/{renderer-EaLUCobW.mjs.map → renderer-CXLugAe8.mjs.map} +1 -1
  173. package/dist/renderer-CXnbl_jR.mjs +5 -0
  174. package/dist/{renderer-C7L8Ceqr.mjs → renderer-CYX9vKZ-.mjs} +4 -4
  175. package/dist/{renderer-C7L8Ceqr.mjs.map → renderer-CYX9vKZ-.mjs.map} +1 -1
  176. package/dist/{renderer-8QIwXh7O.mjs → renderer-C_2UDMEG.mjs} +6 -6
  177. package/dist/{renderer-8QIwXh7O.mjs.map → renderer-C_2UDMEG.mjs.map} +1 -1
  178. package/dist/renderer-CaF9vod_.mjs +5 -0
  179. package/dist/renderer-CbSBH3lp.mjs +5 -0
  180. package/dist/{renderer-B2jjxsjO.mjs → renderer-CbhnJi_8.mjs} +4 -4
  181. package/dist/{renderer-B2jjxsjO.mjs.map → renderer-CbhnJi_8.mjs.map} +1 -1
  182. package/dist/{renderer-BdyopiLC.mjs → renderer-CcJyD9Q5.mjs} +4 -4
  183. package/dist/{renderer-BdyopiLC.mjs.map → renderer-CcJyD9Q5.mjs.map} +1 -1
  184. package/dist/renderer-CdjuGRbO.mjs +5 -0
  185. package/dist/{renderer-DF-yvIrV.mjs → renderer-Cl8r1LJe.mjs} +4 -4
  186. package/dist/{renderer-DF-yvIrV.mjs.map → renderer-Cl8r1LJe.mjs.map} +1 -1
  187. package/dist/renderer-CoLbxC13.mjs +5 -0
  188. package/dist/{renderer-BgO6BA_z.mjs → renderer-CpedZNEG.mjs} +3 -3
  189. package/dist/{renderer-BgO6BA_z.mjs.map → renderer-CpedZNEG.mjs.map} +1 -1
  190. package/dist/renderer-Cr9G0dXB.mjs +5 -0
  191. package/dist/{renderer-bAKUeHF3.mjs → renderer-CwVbHki6.mjs} +5 -5
  192. package/dist/{renderer-bAKUeHF3.mjs.map → renderer-CwVbHki6.mjs.map} +1 -1
  193. package/dist/{renderer-DTqDy2m9.mjs → renderer-CyCtm0UV.mjs} +3 -3
  194. package/dist/{renderer-DTqDy2m9.mjs.map → renderer-CyCtm0UV.mjs.map} +1 -1
  195. package/dist/{renderer-CYC32bDW.mjs → renderer-D1VsqFf4.mjs} +5 -5
  196. package/dist/{renderer-CYC32bDW.mjs.map → renderer-D1VsqFf4.mjs.map} +1 -1
  197. package/dist/{renderer-CCycwCEB.mjs → renderer-D2TTDcgh.mjs} +3 -3
  198. package/dist/{renderer-CCycwCEB.mjs.map → renderer-D2TTDcgh.mjs.map} +1 -1
  199. package/dist/renderer-D63l6_UC.mjs +5 -0
  200. package/dist/renderer-DCJqnzER.mjs +5 -0
  201. package/dist/{renderer-cod5Ona9.mjs → renderer-DEQeONTd.mjs} +3 -3
  202. package/dist/renderer-DFBOR5J3.mjs +5 -0
  203. package/dist/renderer-DGAZSzw6.mjs +5 -0
  204. package/dist/{renderer-oKRF4A0M.mjs → renderer-DH7l5WFr.mjs} +4 -4
  205. package/dist/{renderer-oKRF4A0M.mjs.map → renderer-DH7l5WFr.mjs.map} +1 -1
  206. package/dist/{renderer-DNQvOrkY.mjs → renderer-DIEmK57T.mjs} +5 -5
  207. package/dist/{renderer-DNQvOrkY.mjs.map → renderer-DIEmK57T.mjs.map} +1 -1
  208. package/dist/{renderer-DEmYyaqj.mjs → renderer-DIqkhsLI.mjs} +4 -4
  209. package/dist/{renderer-DEmYyaqj.mjs.map → renderer-DIqkhsLI.mjs.map} +1 -1
  210. package/dist/{renderer-DX41niRU.mjs → renderer-DOKHd37M.mjs} +4 -4
  211. package/dist/{renderer-DX41niRU.mjs.map → renderer-DOKHd37M.mjs.map} +1 -1
  212. package/dist/renderer-DPLGk1Qk.mjs +5 -0
  213. package/dist/renderer-DTCUzByS.mjs +5 -0
  214. package/dist/{renderer-BXJXziIt.mjs → renderer-DW7hbluw.mjs} +3 -3
  215. package/dist/{renderer-BXJXziIt.mjs.map → renderer-DW7hbluw.mjs.map} +1 -1
  216. package/dist/{renderer--fkmiVjl.mjs → renderer-Dat8opUZ.mjs} +4 -4
  217. package/dist/{renderer--fkmiVjl.mjs.map → renderer-Dat8opUZ.mjs.map} +1 -1
  218. package/dist/renderer-DdGahYi1.mjs +5 -0
  219. package/dist/{renderer-DmkWrWAk.mjs → renderer-Dee8ksIV.mjs} +3 -3
  220. package/dist/{renderer-DmkWrWAk.mjs.map → renderer-Dee8ksIV.mjs.map} +1 -1
  221. package/dist/renderer-DhL4nNPk.mjs +5 -0
  222. package/dist/renderer-DkyTbiVz.mjs +3 -0
  223. package/dist/renderer-DnAZweRX.mjs +5 -0
  224. package/dist/{renderer-BX7jS14r.d.mts → renderer-DoPEPlbG.d.mts} +3 -2
  225. package/dist/{renderer-BX7jS14r.d.mts.map → renderer-DoPEPlbG.d.mts.map} +1 -1
  226. package/dist/renderer-DpisVnT2.mjs +5 -0
  227. package/dist/{renderer-mNSyac1V.mjs → renderer-DrWeb39d.mjs} +1 -1
  228. package/dist/{renderer-mNSyac1V.mjs.map → renderer-DrWeb39d.mjs.map} +1 -1
  229. package/dist/renderer-Ds7pAKnE.mjs +3 -0
  230. package/dist/{renderer-CiQhD8Gg.mjs → renderer-Dss7T71q.mjs} +5 -5
  231. package/dist/{renderer-CiQhD8Gg.mjs.map → renderer-Dss7T71q.mjs.map} +1 -1
  232. package/dist/{renderer-C41U1tK6.mjs → renderer-Du-GnKLb.mjs} +9 -9
  233. package/dist/{renderer-C41U1tK6.mjs.map → renderer-Du-GnKLb.mjs.map} +1 -1
  234. package/dist/renderer-DxZD5B54.mjs +5 -0
  235. package/dist/{renderer-WCZu2Rf5.mjs → renderer-ESkPj6pk.mjs} +4 -4
  236. package/dist/{renderer-WCZu2Rf5.mjs.map → renderer-ESkPj6pk.mjs.map} +1 -1
  237. package/dist/{renderer-DMvmf3T2.mjs → renderer-F1D9ZJ8I.mjs} +3 -3
  238. package/dist/{renderer-BlPqTEii.mjs → renderer-HnSiwSW8.mjs} +4 -4
  239. package/dist/{renderer-BlPqTEii.mjs.map → renderer-HnSiwSW8.mjs.map} +1 -1
  240. package/dist/{renderer-1r-Uq-Ae.mjs → renderer-IQ97z2rw.mjs} +3 -3
  241. package/dist/{renderer-1r-Uq-Ae.mjs.map → renderer-IQ97z2rw.mjs.map} +1 -1
  242. package/dist/{renderer-DFzI3yI_.mjs → renderer-NTCk1Srf.mjs} +3 -3
  243. package/dist/{renderer-DFzI3yI_.mjs.map → renderer-NTCk1Srf.mjs.map} +1 -1
  244. package/dist/{renderer-D8bBHrWC.mjs → renderer-OsQRvOle.mjs} +5 -5
  245. package/dist/{renderer-D8bBHrWC.mjs.map → renderer-OsQRvOle.mjs.map} +1 -1
  246. package/dist/renderer-PMHOnbnA.mjs +5 -0
  247. package/dist/renderer-STufNpMx.mjs +5 -0
  248. package/dist/renderer-SdrgfCxH.mjs +5 -0
  249. package/dist/{renderer-Lth37j17.mjs → renderer-US4GsamT.mjs} +3 -3
  250. package/dist/{renderer-zXPVLRlD.mjs → renderer-VhkubIx_.mjs} +5 -5
  251. package/dist/{renderer-zXPVLRlD.mjs.map → renderer-VhkubIx_.mjs.map} +1 -1
  252. package/dist/{renderer-DIw3UtEU.mjs → renderer-bbaMOD4I.mjs} +5 -5
  253. package/dist/{renderer-DIw3UtEU.mjs.map → renderer-bbaMOD4I.mjs.map} +1 -1
  254. package/dist/{renderer-hSCfnvaK.mjs → renderer-eT7Gp7FS.mjs} +5 -5
  255. package/dist/{renderer-hSCfnvaK.mjs.map → renderer-eT7Gp7FS.mjs.map} +1 -1
  256. package/dist/{renderer-CQvmbRQ5.mjs → renderer-g7fF2AYk.mjs} +5 -5
  257. package/dist/{renderer-CQvmbRQ5.mjs.map → renderer-g7fF2AYk.mjs.map} +1 -1
  258. package/dist/{renderer-B-ur0Ej8.mjs → renderer-mLlgfM7X.mjs} +4 -4
  259. package/dist/{renderer-B-ur0Ej8.mjs.map → renderer-mLlgfM7X.mjs.map} +1 -1
  260. package/dist/{renderer-SSBL4M1o.mjs → renderer-mQt-y49D.mjs} +5 -5
  261. package/dist/{renderer-SSBL4M1o.mjs.map → renderer-mQt-y49D.mjs.map} +1 -1
  262. package/dist/{renderer-BIGFP1cF.mjs → renderer-q4zMFfnY.mjs} +2 -2
  263. package/dist/{renderer-BIGFP1cF.mjs.map → renderer-q4zMFfnY.mjs.map} +1 -1
  264. package/dist/{renderer-DXEWbnRF.mjs → renderer-sPI7aY6c.mjs} +4 -4
  265. package/dist/{renderer-DXEWbnRF.mjs.map → renderer-sPI7aY6c.mjs.map} +1 -1
  266. package/dist/{renderer-sYSkIUfo.mjs → renderer-xDV2cCkX.mjs} +5 -5
  267. package/dist/{renderer-sYSkIUfo.mjs.map → renderer-xDV2cCkX.mjs.map} +1 -1
  268. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs → renderers-CP8CFWDs-BH1gUTYa.mjs} +4 -4
  269. package/dist/{renderers-CP8CFWDs-DH2oktaC.mjs.map → renderers-CP8CFWDs-BH1gUTYa.mjs.map} +1 -1
  270. package/dist/sam/index.d.mts +4 -0
  271. package/dist/sam/index.mjs +3 -0
  272. package/dist/signals/index.d.mts +7 -6
  273. package/dist/signals/index.mjs +8 -8
  274. package/dist/{signals-CXwgAUp-.mjs → signals-gOd0Ui9B.mjs} +4 -4
  275. package/dist/{signals-CXwgAUp-.mjs.map → signals-gOd0Ui9B.mjs.map} +1 -1
  276. package/dist/{src-CK5rGVbh.mjs → src-BU1VOWSk.mjs} +81 -39
  277. package/dist/src-BU1VOWSk.mjs.map +1 -0
  278. package/dist/{renderer-B0piZg9r.mjs → src-Bnr8DUC--DzkRGA62.mjs} +12 -993
  279. package/dist/src-Bnr8DUC--DzkRGA62.mjs.map +1 -0
  280. package/package.json +69 -69
  281. package/dist/audio-Ccpl9mjV.d.mts.map +0 -1
  282. package/dist/index-CZjrnylh.d.mts.map +0 -1
  283. package/dist/index-D5UDyVMb.d.mts.map +0 -1
  284. package/dist/index-Du5YgdzM.d.mts.map +0 -1
  285. package/dist/preview-engine/chunk-CCB3VTY2.mjs +0 -39
  286. package/dist/preview-engine/src-NGVAJYHC.mjs +0 -8
  287. package/dist/renderer--Ac-dg4A.mjs +0 -5
  288. package/dist/renderer--N7TMqzU.mjs +0 -5
  289. package/dist/renderer-2ecmdOae.mjs +0 -5
  290. package/dist/renderer-B0piZg9r.mjs.map +0 -1
  291. package/dist/renderer-B5RJp5g-.mjs +0 -5
  292. package/dist/renderer-B7xyT1Vb.mjs +0 -5
  293. package/dist/renderer-BBeArN_x.mjs +0 -5
  294. package/dist/renderer-BCAZDu-r.mjs +0 -5
  295. package/dist/renderer-BJnhik7Y.mjs +0 -5
  296. package/dist/renderer-BxRW8MZO.mjs +0 -5
  297. package/dist/renderer-C-lfsEAN.mjs +0 -5
  298. package/dist/renderer-C6nOFN4-.mjs +0 -5
  299. package/dist/renderer-C84TSQmS.mjs +0 -5
  300. package/dist/renderer-C8_6YofT.mjs +0 -5
  301. package/dist/renderer-COR66Sby.mjs +0 -3
  302. package/dist/renderer-COb3tOPG.mjs +0 -5
  303. package/dist/renderer-CSCIzaLy.mjs +0 -5
  304. package/dist/renderer-CmI4c8MS.mjs +0 -5
  305. package/dist/renderer-CqVltdX9.mjs +0 -5
  306. package/dist/renderer-D-FpMzLY.mjs +0 -5
  307. package/dist/renderer-D-Oyn9mG.mjs +0 -5
  308. package/dist/renderer-D2QrkA8_.mjs +0 -5
  309. package/dist/renderer-D64r4iN-.mjs +0 -5
  310. package/dist/renderer-DCq6YkgP.mjs +0 -5
  311. package/dist/renderer-DDHG3GdR.mjs +0 -5
  312. package/dist/renderer-DMdNfcud.mjs +0 -6
  313. package/dist/renderer-DZQXZ4lK.mjs +0 -5
  314. package/dist/renderer-DczJJLA1.mjs +0 -5
  315. package/dist/renderer-DfqJj9oe.mjs +0 -5
  316. package/dist/renderer-DgO9ihVJ.mjs +0 -5
  317. package/dist/renderer-DhgnQZYb.mjs +0 -5
  318. package/dist/renderer-DjxKjHMf.mjs +0 -5
  319. package/dist/renderer-DnRDW2Oz.mjs +0 -3
  320. package/dist/renderer-DqLA5cdR.mjs +0 -5
  321. package/dist/renderer-Dudp6ZlH.mjs +0 -5
  322. package/dist/renderer-_jC5KIT1.mjs +0 -5
  323. package/dist/renderer-cTgAuVmJ.mjs +0 -5
  324. package/dist/renderer-nVKDvDLO.mjs +0 -5
  325. package/dist/renderer-pZ6_pUo1.mjs +0 -5
  326. package/dist/src-CK5rGVbh.mjs.map +0 -1
  327. /package/dist/{chunk-BcJoO4Nm.mjs → chunk-D8S17ehY.mjs} +0 -0
  328. /package/dist/{renderer-COqFNSfV.mjs → renderer-Cputd36d.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DbRZe0Re.mjs","names":[],"sources":["../../../nodes/node-procedural-vfx/dist/renderers-DiW7Lt7Y.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst VFX_SHADER = `\nstruct VFXUniforms {\n effectType : f32,\n outputType : f32,\n time : f32,\n _pad0 : f32,\n\n density : f32,\n scale : f32,\n speed : f32,\n intensity : f32,\n\n seed : f32,\n hasSigDensity : f32,\n hasSigScale : f32,\n hasSigSpeed : f32,\n\n hasSigIntensity : f32,\n hasSigSeed : f32,\n _pad1 : f32,\n _pad2 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : VFXUniforms;\n\n@group(1) @binding(0) var densityTex : texture_2d<f32>;\n@group(1) @binding(1) var scaleTex : texture_2d<f32>;\n@group(1) @binding(2) var speedTex : texture_2d<f32>;\n@group(1) @binding(3) var intensityTex : texture_2d<f32>;\n@group(1) @binding(4) var seedTex : texture_2d<f32>;\n@group(1) @binding(5) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// ---- hashing & noise primitives -------------------------------------------\nfn hash21(p: vec2<f32>) -> vec2<f32> {\n let p3 = fract(vec3<f32>(p.xyx) * vec3<f32>(0.1031, 0.1030, 0.0973));\n let p4 = p3 + dot(p3, p3.yzx + 33.33);\n return fract((p4.xx + p4.yz) * p4.zy);\n}\n\nfn hash1(n: f32) -> f32 {\n return fract(sin(n) * 43758.5453);\n}\n\nfn valueNoise(p: vec2<f32>) -> f32 {\n let i = floor(p);\n let f = fract(p);\n let u = f * f * (3.0 - 2.0 * f);\n let a = hash1(dot(i, vec2<f32>(127.1, 311.7)));\n let b = hash1(dot(i + vec2<f32>(1.0, 0.0), vec2<f32>(127.1, 311.7)));\n let c = hash1(dot(i + vec2<f32>(0.0, 1.0), vec2<f32>(127.1, 311.7)));\n let d = hash1(dot(i + vec2<f32>(1.0, 1.0), vec2<f32>(127.1, 311.7)));\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n}\n\nfn fbm(p: vec2<f32>, octaves: i32) -> f32 {\n var value = 0.0;\n var amp = 0.5;\n var freq = 1.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * valueNoise(p * freq);\n freq *= 2.0;\n amp *= 0.5;\n }\n return value;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n return val;\n}\n\n// ---- effect synthesizers (return straight-alpha RGBA) ----------------------\nfn fxSmoke(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let sp = p * scl;\n // Domain-warped FBM gives structured puffs instead of a solid fill.\n let q = vec2<f32>(fbm(sp + time * 0.10, 4), fbm(sp + vec2<f32>(5.2, 1.3) + time * 0.08, 4));\n let f = fbm(sp + 4.0 * q + vec2<f32>(1.7, 9.2) + time * 0.05, 4); // ~[0, 0.94]\n // Billowing plume: denser at the base (bottom, p.y=0), dissipating toward the top.\n let vgrad = 1.0 - smoothstep(0.45, 0.9, p.y);\n let n = f * 2.0 - 1.0; // remap to [-1, 1]\n // Thresholded so only bright fbm patches are opaque -> reads as puffs, not solid.\n let cov = smoothstep(0.28, 0.6, n) * dens * (0.25 + 0.75 * vgrad);\n let alpha = cov * inten;\n let col = mix(cB * 0.35, cA, clamp(f + vgrad * 0.5, 0.0, 1.0));\n return vec4<f32>(col, clamp(alpha, 0.0, 1.0));\n}\n\nfn fxFire(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let pn = vec2<f32>(p.x * 1.5, p.y) * scl;\n let n = fbm(pn * 6.0 + vec2<f32>(time * 2.0, time * 3.0), 4);\n // Heat concentrated near base, flickering upward\n let heat = n * smoothstep(1.0, 0.0 + (1.0 - dens) * 0.3, p.y);\n // Channeled vertical columns\n let columns = smoothstep(0.45, 0.9, n + 0.4 * sin(p.x * (20.0 + 40.0 * dens) * scl + time * 8.0));\n let d = clamp(heat * inten + columns * 0.3 * inten, 0.0, 1.0);\n // Fire color ramp mapped dynamically to cA and cB\n let dark = cB * 0.15;\n let orange = cB;\n let yellow = mix(cB, cA, 0.5);\n let white = cA;\n var col = mix(dark, orange, smoothstep(0.0, 0.4, d));\n col = mix(col, yellow, smoothstep(0.4, 0.75, d));\n col = mix(col, white, smoothstep(0.75, 1.0, d));\n let alpha = smoothstep(0.0, 0.3, d) * inten;\n return vec4<f32>(col, clamp(alpha, 0.0, 1.0));\n}\n\nfn fxRain(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (60.0 * dens + 4.0) * scl;\n let gx = floor(p.x * n);\n let h = hash1(gx);\n let speed = 0.8 + h;\n let yFrac = fract(p.y * 8.0 - time * speed);\n let dropY = abs(yFrac - 0.5);\n let reveal = step(0.35, yFrac);\n let st = smoothstep(0.18, 0.02, dropY);\n let d = st * reveal;\n let g = smoothstep(0.18, 0.02, abs(fract(p.x * n) + h * 0.2 - 0.5));\n let a = d * g * inten;\n let col = mix(cA, cB, h);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxSnow(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (50.0 * dens + 6.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let center = vec2<f32>(0.5, 0.5) + 0.3 * hash21(cell + 7.0);\n let sway = 0.1 * sin(time * 1.2 + cell.y * 3.0);\n // Fall downward (toward p.y=0, the bottom): subtract an advancing phase.\n let fall = fract(time * (0.25 + 0.45 * h.y) + h.x);\n let pos = vec2<f32>(f.x - center.x - sway, f.y - center.y) - vec2<f32>(0.0, fall);\n let d = length(pos);\n let size = 0.05 + 0.07 * h.x;\n let a = smoothstep(size, size * 0.4, d) * inten;\n let col = mix(cA, cB, h.x);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxDust(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (90.0 * dens + 6.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let center = h;\n let drift = fract(time * 0.05 * (0.5 + h.y) + cell.x * 0.01);\n let pos = vec2<f32>(f.x - center.x, f.y - center.y) + vec2<f32>((drift - 0.5) * 0.03, 0.0);\n let d = length(pos);\n let a = smoothstep(0.12, 0.0, d) * smoothstep(0.0, 0.3, dens) * inten * 0.6;\n let col = mix(cA, cB, h.y);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxEmbers(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (50.0 * dens + 4.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let sway = 0.12 * sin(time * 2.0 + cell.y * 2.0);\n let rise = fract(time * 0.18 * (0.7 + h.y) + cell.y * 0.12);\n // Rising: as rise grows, move toward p.y=1 (top).\n let pos = vec2<f32>(f.x - 0.5 - sway, f.y + rise * 1.2);\n let d = length(pos);\n let a = smoothstep(0.12, 0.0, d) * (1.0 - rise) * inten;\n let col = mix(cA, cB, clamp(rise, 0.0, 1.0));\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxSparks(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Burst radiating from a low-center source; travel grows over time so it expands outward.\n let src = vec2<f32>(0.5, 0.15);\n let dir = p - src;\n let dist = length(dir);\n let ang = atan2(dir.y, dir.x);\n let n = (20.0 * dens + 5.0) * scl;\n let seg = floor(ang * n);\n let tFrame = floor(time * 3.0);\n let timeVal = tFrame - 10000.0 * floor(tFrame / 10000.0);\n let h = hash1(seg + timeVal * 97.0);\n let launch = fract(0.5 + h + time * 0.5);\n let travel = launch * 0.8;\n let trail = smoothstep(0.9, 0.4, dist - travel);\n let w = 0.02 + 0.02 * h;\n let blast = smoothstep(0.0, w * 2.0, dist - travel) * trail;\n let streak = smoothstep(w, 0.0, abs(dist - travel)) * trail;\n let a = clamp(max(streak, blast * 0.4), 0.0, 1.0) * inten;\n let col = mix(cA, cB, clamp(h, 0.0, 1.0));\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxMagic(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let center = vec2<f32>(0.5, 0.5);\n let dv = p - center;\n let r = length(dv);\n let ang = atan2(dv.y, dv.x);\n let swirl = fbm(vec2<f32>(r * 8.0 * scl + time * 0.5, ang * 3.0 + time * 0.8), 4);\n let halo = smoothstep(0.5, 0.1, r) * 0.4 * dens;\n let wisp = smoothstep(1.0 - dens * 0.8, 1.5 - dens * 0.8, swirl) * (0.5 + 0.5 * sin(r * 20.0 * scl - time * 3.0));\n let a = clamp((halo + wisp * 0.8) * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(swirl, 0.0, 1.0));\n return vec4<f32>(col * 0.8 + vec3<f32>(1.0) * halo * 0.4, a);\n}\n\nfn fxLensFlare(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let center = vec2<f32>(0.5, 0.5);\n let dv = p - center;\n let r = length(dv) * scl;\n let ang = atan2(dv.y, dv.x);\n // Radial streak\n let streakCount = 2.0 * floor(1.0 + dens * 3.0);\n let streak = smoothstep(0.35, 0.6, fract(ang / 3.14159 * streakCount + 0.5)) * pow(1.0 - r, 3.0);\n // Concentric halos / chromatic rings\n let rings = (0.5 + 0.5 * sin(r * 40.0 - time * 2.0)) * dens;\n let core = smoothstep(0.25, 0.0, r);\n let chroma = mix(cA, cB, 0.5 + 0.5 * cos(ang * 3.0 + r * 30.0));\n let a = clamp((core * 0.9 + streak * 0.5 * dens + rings * 0.15 * (1.0 - r)) * inten, 0.0, 1.0);\n return vec4<f32>(chroma, a);\n}\n\nfn fxLightning(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Periodic bolt striking vertically, flickering briefly\n let period = mix(4.0, 0.6, clamp(dens, 0.0, 1.0));\n let cycle = fract(time / period);\n let flashWindow = mix(0.05, 0.35, clamp(dens, 0.0, 1.0));\n let flash = smoothstep(flashWindow, 0.0, cycle);\n \n let tFlicker = floor(time * 60.0);\n let flickerVal = tFlicker - 10000.0 * floor(tFlicker / 10000.0);\n let flicker = step(hash1(flickerVal * 1.7), 0.8); // rapid on/off shimmer\n\n // Jitter a vertical bolt with per-row hashes and interpolate between rows\n let rows = 18.0 * scl;\n let rg = p.y * rows;\n let row = floor(rg);\n let fr = fract(rg);\n \n let tLightning = floor(time * 24.0);\n let lightningVal = tLightning - 10000.0 * floor(tLightning / 10000.0);\n let x0 = 0.3 + 0.4 * hash1(row * 13.7 + lightningVal * 3.1);\n let x1 = 0.3 + 0.4 * hash1((row + 1.0) * 13.7 + lightningVal * 3.1);\n let boltX = mix(x0, x1, fr);\n\n // Secondary tiny forks\n let forkDrift = (hash1(row * 7.3) - 0.5) * 0.12 * smoothstep(0.0, 0.6, 1.0 - p.y);\n let boltDist = abs(p.x - (boltX + forkDrift)) * scl;\n let core = smoothstep(0.012, 0.0, boltDist);\n let glow = smoothstep(0.07, 0.0, boltDist) * 0.5;\n let a = clamp((core + glow) * flash * flicker * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(boltDist * 8.0, 0.0, 1.0) + 0.3 * flash);\n // Soft ambient flash behind the bolt\n let amb = smoothstep(0.35, 0.0, length(p - vec2<f32>(boltX, p.y)) * scl) * flash * 0.15;\n return vec4<f32>(col * (1.0 + amb), clamp(a + amb, 0.0, 1.0));\n}\n\nfn fxEnergyBeam(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let src = vec2<f32>(0.15, 0.5);\n let dirv = vec2<f32>(1.0, 0.0);\n let w = p - src;\n let along = dot(w, dirv) * scl;\n let perp = dot(w, vec2<f32>(-dirv.y, dirv.x)) * scl;\n let beamWidth = 0.01 + 0.03 * dens;\n let glowWidth = 0.05 + 0.1 * dens;\n let core = smoothstep(beamWidth, 0.0, abs(perp));\n let glow = smoothstep(glowWidth, 0.0, abs(perp)) * 0.4 * dens;\n let falloff = smoothstep(0.0, 1.0, along);\n let pulse = 0.7 + 0.3 * sin(along * 30.0 - time * 10.0);\n let a = clamp((core + glow) * falloff * pulse * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(along, 0.0, 1.0));\n return vec4<f32>(col * (1.0 + glow * 2.0), a);\n}\n\nfn fxAurora(p: vec2<f32>, seedOff: f32, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Northern lights: curtains hanging from a wavy band across the upper sky,\n // rippling sideways, with fine vertical rays. cA at the base, cB at the top.\n var acc = vec3<f32>(0.0);\n var keep = 1.0;\n for (var k = 0; k < 3; k++) {\n let fk = f32(k);\n let x = p.x * (1.0 + fk * 0.35) * scl * 1.5 + seedOff * 13.0 + fk * 3.1;\n // Curtain base line, a slow wave across the frame.\n let base = 0.42 + fk * 0.06 + 0.12 * (fbm(vec2<f32>(x * 1.3, time * 0.05 + fk), 3) - 0.5)\n + 0.05 * sin(x * 4.0 + time * 0.3 + fk);\n let h = 0.38 + 0.2 * fbm(vec2<f32>(x * 2.0 + 7.0, time * 0.04), 3);\n let d = base - p.y; // 0 at the base, rising upward\n let body = smoothstep(-0.06, 0.035, d) * pow(1.0 - smoothstep(0.0, h, d), 1.5);\n // Vertical rays drifting sideways.\n let rn = fbm(vec2<f32>(x * 40.0 + time * 0.3, d * 2.0 - time * 0.1), 3);\n let rays = 0.25 + 1.2 * rn * rn;\n let fold = 0.6 + 0.4 * sin(x * 9.0 + time * 0.5 + fbm(vec2<f32>(x * 3.0, time * 0.1), 2) * 6.0);\n let a = body * rays * fold * (1.0 - fk * 0.25);\n let col = mix(cA, cB, clamp(d / max(h, 1e-3), 0.0, 1.0));\n acc += col * a;\n keep *= 1.0 - clamp(a, 0.0, 1.0);\n }\n let alpha = 1.0 - keep;\n let a = clamp(alpha * (0.35 + 0.65 * dens) * inten * 1.4, 0.0, 1.0);\n return vec4<f32>(acc / max(alpha, 1e-3) * min(alpha * 2.0, 1.0), a);\n}\n\n// ---- main dispatch ---------------------------------------------------------\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let density = get_field(u.density, u.hasSigDensity, densityTex, signalSamp);\n let scale = get_field(u.scale, u.hasSigScale, scaleTex, signalSamp);\n let speed = get_field(u.speed, u.hasSigSpeed, speedTex, signalSamp);\n let intensity = get_field(u.intensity, u.hasSigIntensity, intensityTex, signalSamp);\n let seed = get_field(u.seed, u.hasSigSeed, seedTex, signalSamp);\n\n let isVideo = u.outputType > 0.5;\n let time = select(0.0, u.time * max(speed, 1e-4), isVideo);\n let seedOff = fract(seed * 1.618033);\n\n // Aspect correction\n let uv = in.uv;\n let p = vec2<f32>(uv.x, uv.y);\n\n // Move to a seed-scrambled space so different seeds look different\n let sp = p + vec2<f32>(seedOff * 17.0, seedOff * 31.0);\n\n var eff = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n let cA = u.colorStart.rgb;\n let cB = u.colorEnd.rgb;\n let scl = max(scale, 1e-4);\n let factor = scl * 100.0;\n\n if (u.effectType < 0.5) {\n eff = fxSmoke(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 1.5) {\n eff = fxFire(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 2.5) {\n eff = fxRain(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 3.5) {\n eff = fxSparks(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 4.5) {\n eff = fxSnow(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 5.5) {\n eff = fxDust(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 6.5) {\n eff = fxLightning(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 7.5) {\n eff = fxMagic(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 8.5) {\n eff = fxLensFlare(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 9.5) {\n eff = fxEmbers(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 10.5) {\n eff = fxEnergyBeam(sp, time, factor, density, intensity, cA, cB);\n } else {\n eff = fxAurora(p, seedOff, time, factor, density, intensity, cA, cB);\n }\n\n // Straight alpha is fine for compositing onto a transparent canvas.\n let a = clamp(eff.a, 0.0, 1.0);\n return vec4<f32>(clamp(eff.rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * a, a);\n}\n`;\nconst vfxUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getVFXResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `procedural_vfx_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vfxModule = device.createShaderModule({\n\t\t\tlabel: `procedural_vfx_${format}.wgsl`,\n\t\t\tcode: VFX_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ProceduralVFXPipeline_${format}`,\n\t\t\tmodule: vfxModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tvfxPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst VFX_EFFECT_INDEX = {\n\tSmoke: 0,\n\tFire: 1,\n\tRain: 2,\n\tSparks: 3,\n\tSnow: 4,\n\tDust: 5,\n\tLightning: 6,\n\tMagic: 7,\n\tLensFlare: 8,\n\tEmbers: 9,\n\tEnergyBeam: 10,\n\tAurora: 11\n};\nconst ProceduralVFXWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ProceduralVFX\" || !op) return;\n\tconst { vfxPipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getVFXResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst densityInfo = resolveSignalField(op, \"density\", .6);\n\tconst scaleInfo = resolveSignalField(op, \"scale\", .01);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", .8);\n\tconst seedInfo = resolveSignalField(op, \"seed\", 1234);\n\tconst effectIndex = VFX_EFFECT_INDEX[op.effectType ?? \"Smoke\"] ?? 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#ffffff\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ff5500\");\n\tvfxUniformData[0] = effectIndex;\n\tvfxUniformData[1] = outputTypeVal;\n\tvfxUniformData[2] = elapsedSeconds;\n\tvfxUniformData[3] = 0;\n\tvfxUniformData[4] = densityInfo.value;\n\tvfxUniformData[5] = scaleInfo.value;\n\tvfxUniformData[6] = speedInfo.value;\n\tvfxUniformData[7] = intensityInfo.value;\n\tvfxUniformData[8] = seedInfo.value;\n\tvfxUniformData[9] = densityInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[10] = scaleInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[11] = speedInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[12] = intensityInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[13] = seedInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[14] = 0;\n\tvfxUniformData[15] = 0;\n\tvfxUniformData[16] = colorStartVal[0];\n\tvfxUniformData[17] = colorStartVal[1];\n\tvfxUniformData[18] = colorStartVal[2];\n\tvfxUniformData[19] = colorStartVal[3];\n\tvfxUniformData[20] = colorEndVal[0];\n\tvfxUniformData[21] = colorEndVal[1];\n\tvfxUniformData[22] = colorEndVal[2];\n\tvfxUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vfxUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"density\",\n\t\t\tinfo: densityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t},\n\t\t{\n\t\t\tname: \"intensity\",\n\t\t\tinfo: intensityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"seed\",\n\t\t\tinfo: seedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `procedural_vfx_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ProceduralVFXWebGPURenderer });\n\n//#endregion\nexport { ProceduralVFXWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DiW7Lt7Y.mjs.map"],"mappings":";;;;;;AAMA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCjB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyUvB,MAAM,iBAAiB,IAAI,aAAa,GAAG;AAC3C,MAAM,mBAAmB,WAAW,YAAY;CAC/C,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC3D,eAAe,eAAe,QAAQ,EAAE;CACxC,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,gBAAgB,QAAQ,QAAQ;CACxC,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,kBAAkB;CACnC,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,YAAY,OAAO,mBAAmB;GAC3C,OAAO,kBAAkB,OAAO;GAChC,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,yBAAyB;GAChC,QAAQ;GACR,SAAS,CAAC,QAAQ,eAAe,QAAQ,cAAc;GACvD;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,aAAa;EACb,eAAe,QAAQ;EACvB,eAAe,QAAQ;EACvB;;AAEF,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,QAAQ,KAAK,GAAG;AAC5B,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAChF,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,IAAI,IAAI;AACR,KAAI,EAAE,WAAW,EAAG,KAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN;EACA;EACA;EACA;EACA;;AAEF,MAAM,mBAAmB;CACxB,OAAO;CACP,MAAM;CACN,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACN,WAAW;CACX,OAAO;CACP,WAAW;CACX,QAAQ;CACR,YAAY;CACZ,QAAQ;CACR;AACD,MAAM,8BAA8B,OAAO,SAAS;CACnD,MAAM,EAAE,KAAK,SAAS,MAAM,aAAa,cAAc,UAAU;CACjE,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,mBAAmB,CAAC,GAAI;CACvC,MAAM,EAAE,aAAa,UAAU,eAAe,SAAS,eAAe,cAAc,gBAAgB,IAAI,QAAQ,IAAI,SAAS,OAAO;CACpI,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,cAAc,mBAAmB,IAAI,WAAW,GAAG;CACzD,MAAM,YAAY,mBAAmB,IAAI,SAAS,IAAI;CACtD,MAAM,YAAY,mBAAmB,IAAI,SAAS,EAAE;CACpD,MAAM,gBAAgB,mBAAmB,IAAI,aAAa,GAAG;CAC7D,MAAM,WAAW,mBAAmB,IAAI,QAAQ,KAAK;CACrD,MAAM,cAAc,iBAAiB,GAAG,cAAc,YAAY;CAClE,MAAM,gBAAgB,GAAG,eAAe,UAAU,IAAI;CACtD,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;CAC3E,MAAM,gBAAgB,UAAU,GAAG,cAAc,UAAU;CAC3D,MAAM,cAAc,UAAU,GAAG,YAAY,UAAU;AACvD,gBAAe,KAAK;AACpB,gBAAe,KAAK;AACpB,gBAAe,KAAK;AACpB,gBAAe,KAAK;AACpB,gBAAe,KAAK,YAAY;AAChC,gBAAe,KAAK,UAAU;AAC9B,gBAAe,KAAK,UAAU;AAC9B,gBAAe,KAAK,cAAc;AAClC,gBAAe,KAAK,SAAS;AAC7B,gBAAe,KAAK,YAAY,YAAY,IAAI;AAChD,gBAAe,MAAM,UAAU,YAAY,IAAI;AAC/C,gBAAe,MAAM,UAAU,YAAY,IAAI;AAC/C,gBAAe,MAAM,cAAc,YAAY,IAAI;AACnD,gBAAe,MAAM,SAAS,YAAY,IAAI;AAC9C,gBAAe,MAAM;AACrB,gBAAe,MAAM;AACrB,gBAAe,MAAM,cAAc;AACnC,gBAAe,MAAM,cAAc;AACnC,gBAAe,MAAM,cAAc;AACnC,gBAAe,MAAM,cAAc;AACnC,gBAAe,MAAM,YAAY;AACjC,gBAAe,MAAM,YAAY;AACjC,gBAAe,MAAM,YAAY;AACjC,gBAAe,MAAM,YAAY;CACjC,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,eAAe;CACrE,MAAM,eAAe;EACpB;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;CACD,MAAM,cAAc,EAAE;CACtB,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;AAChE,MAAK,MAAM,KAAK,aAAc,KAAI,CAAC,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK;EACpE,MAAM,OAAO,eAAe,yBAAyB,IAAI,QAAQ,SAAS,EAAE,KAAK,IAAI,UAAU,kBAAkB,EAAE,KAAK,OAAO,gBAAgB,iBAAiB,EAAE,KAAK,IAAI,aAAa,cAAc,MAAM,UAAU,OAAO,IAAI;AACjO,cAAY,KAAK,KAAK;OAChB,aAAY,KAAK,eAAe,uBAAuB,IAAI,OAAO,CAAC;AAC1E,MAAK,YAAY,SAAS;AAC1B,MAAK,aAAa,GAAG,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC,CAAC;AACH,MAAK,aAAa,GAAG,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC,CAAC;AACH,MAAK,KAAK,EAAE;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"renderer-CIB5L_C4.mjs","names":[],"sources":["../../../nodes/node-procedural-vfx/dist/renderers-DiW7Lt7Y.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst VFX_SHADER = `\nstruct VFXUniforms {\n effectType : f32,\n outputType : f32,\n time : f32,\n _pad0 : f32,\n\n density : f32,\n scale : f32,\n speed : f32,\n intensity : f32,\n\n seed : f32,\n hasSigDensity : f32,\n hasSigScale : f32,\n hasSigSpeed : f32,\n\n hasSigIntensity : f32,\n hasSigSeed : f32,\n _pad1 : f32,\n _pad2 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : VFXUniforms;\n\n@group(1) @binding(0) var densityTex : texture_2d<f32>;\n@group(1) @binding(1) var scaleTex : texture_2d<f32>;\n@group(1) @binding(2) var speedTex : texture_2d<f32>;\n@group(1) @binding(3) var intensityTex : texture_2d<f32>;\n@group(1) @binding(4) var seedTex : texture_2d<f32>;\n@group(1) @binding(5) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// ---- hashing & noise primitives -------------------------------------------\nfn hash21(p: vec2<f32>) -> vec2<f32> {\n let p3 = fract(vec3<f32>(p.xyx) * vec3<f32>(0.1031, 0.1030, 0.0973));\n let p4 = p3 + dot(p3, p3.yzx + 33.33);\n return fract((p4.xx + p4.yz) * p4.zy);\n}\n\nfn hash1(n: f32) -> f32 {\n return fract(sin(n) * 43758.5453);\n}\n\nfn valueNoise(p: vec2<f32>) -> f32 {\n let i = floor(p);\n let f = fract(p);\n let u = f * f * (3.0 - 2.0 * f);\n let a = hash1(dot(i, vec2<f32>(127.1, 311.7)));\n let b = hash1(dot(i + vec2<f32>(1.0, 0.0), vec2<f32>(127.1, 311.7)));\n let c = hash1(dot(i + vec2<f32>(0.0, 1.0), vec2<f32>(127.1, 311.7)));\n let d = hash1(dot(i + vec2<f32>(1.0, 1.0), vec2<f32>(127.1, 311.7)));\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n}\n\nfn fbm(p: vec2<f32>, octaves: i32) -> f32 {\n var value = 0.0;\n var amp = 0.5;\n var freq = 1.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * valueNoise(p * freq);\n freq *= 2.0;\n amp *= 0.5;\n }\n return value;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n return val;\n}\n\n// ---- effect synthesizers (return straight-alpha RGBA) ----------------------\nfn fxSmoke(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let sp = p * scl;\n // Domain-warped FBM gives structured puffs instead of a solid fill.\n let q = vec2<f32>(fbm(sp + time * 0.10, 4), fbm(sp + vec2<f32>(5.2, 1.3) + time * 0.08, 4));\n let f = fbm(sp + 4.0 * q + vec2<f32>(1.7, 9.2) + time * 0.05, 4); // ~[0, 0.94]\n // Billowing plume: denser at the base (bottom, p.y=0), dissipating toward the top.\n let vgrad = 1.0 - smoothstep(0.45, 0.9, p.y);\n let n = f * 2.0 - 1.0; // remap to [-1, 1]\n // Thresholded so only bright fbm patches are opaque -> reads as puffs, not solid.\n let cov = smoothstep(0.28, 0.6, n) * dens * (0.25 + 0.75 * vgrad);\n let alpha = cov * inten;\n let col = mix(cB * 0.35, cA, clamp(f + vgrad * 0.5, 0.0, 1.0));\n return vec4<f32>(col, clamp(alpha, 0.0, 1.0));\n}\n\nfn fxFire(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let pn = vec2<f32>(p.x * 1.5, p.y) * scl;\n let n = fbm(pn * 6.0 + vec2<f32>(time * 2.0, time * 3.0), 4);\n // Heat concentrated near base, flickering upward\n let heat = n * smoothstep(1.0, 0.0 + (1.0 - dens) * 0.3, p.y);\n // Channeled vertical columns\n let columns = smoothstep(0.45, 0.9, n + 0.4 * sin(p.x * (20.0 + 40.0 * dens) * scl + time * 8.0));\n let d = clamp(heat * inten + columns * 0.3 * inten, 0.0, 1.0);\n // Fire color ramp mapped dynamically to cA and cB\n let dark = cB * 0.15;\n let orange = cB;\n let yellow = mix(cB, cA, 0.5);\n let white = cA;\n var col = mix(dark, orange, smoothstep(0.0, 0.4, d));\n col = mix(col, yellow, smoothstep(0.4, 0.75, d));\n col = mix(col, white, smoothstep(0.75, 1.0, d));\n let alpha = smoothstep(0.0, 0.3, d) * inten;\n return vec4<f32>(col, clamp(alpha, 0.0, 1.0));\n}\n\nfn fxRain(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (60.0 * dens + 4.0) * scl;\n let gx = floor(p.x * n);\n let h = hash1(gx);\n let speed = 0.8 + h;\n let yFrac = fract(p.y * 8.0 - time * speed);\n let dropY = abs(yFrac - 0.5);\n let reveal = step(0.35, yFrac);\n let st = smoothstep(0.18, 0.02, dropY);\n let d = st * reveal;\n let g = smoothstep(0.18, 0.02, abs(fract(p.x * n) + h * 0.2 - 0.5));\n let a = d * g * inten;\n let col = mix(cA, cB, h);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxSnow(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (50.0 * dens + 6.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let center = vec2<f32>(0.5, 0.5) + 0.3 * hash21(cell + 7.0);\n let sway = 0.1 * sin(time * 1.2 + cell.y * 3.0);\n // Fall downward (toward p.y=0, the bottom): subtract an advancing phase.\n let fall = fract(time * (0.25 + 0.45 * h.y) + h.x);\n let pos = vec2<f32>(f.x - center.x - sway, f.y - center.y) - vec2<f32>(0.0, fall);\n let d = length(pos);\n let size = 0.05 + 0.07 * h.x;\n let a = smoothstep(size, size * 0.4, d) * inten;\n let col = mix(cA, cB, h.x);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxDust(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (90.0 * dens + 6.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let center = h;\n let drift = fract(time * 0.05 * (0.5 + h.y) + cell.x * 0.01);\n let pos = vec2<f32>(f.x - center.x, f.y - center.y) + vec2<f32>((drift - 0.5) * 0.03, 0.0);\n let d = length(pos);\n let a = smoothstep(0.12, 0.0, d) * smoothstep(0.0, 0.3, dens) * inten * 0.6;\n let col = mix(cA, cB, h.y);\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxEmbers(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let n = (50.0 * dens + 4.0) * scl;\n let cell = floor(p * n);\n let f = fract(p * n);\n let h = hash21(cell);\n let sway = 0.12 * sin(time * 2.0 + cell.y * 2.0);\n let rise = fract(time * 0.18 * (0.7 + h.y) + cell.y * 0.12);\n // Rising: as rise grows, move toward p.y=1 (top).\n let pos = vec2<f32>(f.x - 0.5 - sway, f.y + rise * 1.2);\n let d = length(pos);\n let a = smoothstep(0.12, 0.0, d) * (1.0 - rise) * inten;\n let col = mix(cA, cB, clamp(rise, 0.0, 1.0));\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxSparks(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Burst radiating from a low-center source; travel grows over time so it expands outward.\n let src = vec2<f32>(0.5, 0.15);\n let dir = p - src;\n let dist = length(dir);\n let ang = atan2(dir.y, dir.x);\n let n = (20.0 * dens + 5.0) * scl;\n let seg = floor(ang * n);\n let tFrame = floor(time * 3.0);\n let timeVal = tFrame - 10000.0 * floor(tFrame / 10000.0);\n let h = hash1(seg + timeVal * 97.0);\n let launch = fract(0.5 + h + time * 0.5);\n let travel = launch * 0.8;\n let trail = smoothstep(0.9, 0.4, dist - travel);\n let w = 0.02 + 0.02 * h;\n let blast = smoothstep(0.0, w * 2.0, dist - travel) * trail;\n let streak = smoothstep(w, 0.0, abs(dist - travel)) * trail;\n let a = clamp(max(streak, blast * 0.4), 0.0, 1.0) * inten;\n let col = mix(cA, cB, clamp(h, 0.0, 1.0));\n return vec4<f32>(col, clamp(a, 0.0, 1.0));\n}\n\nfn fxMagic(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let center = vec2<f32>(0.5, 0.5);\n let dv = p - center;\n let r = length(dv);\n let ang = atan2(dv.y, dv.x);\n let swirl = fbm(vec2<f32>(r * 8.0 * scl + time * 0.5, ang * 3.0 + time * 0.8), 4);\n let halo = smoothstep(0.5, 0.1, r) * 0.4 * dens;\n let wisp = smoothstep(1.0 - dens * 0.8, 1.5 - dens * 0.8, swirl) * (0.5 + 0.5 * sin(r * 20.0 * scl - time * 3.0));\n let a = clamp((halo + wisp * 0.8) * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(swirl, 0.0, 1.0));\n return vec4<f32>(col * 0.8 + vec3<f32>(1.0) * halo * 0.4, a);\n}\n\nfn fxLensFlare(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let center = vec2<f32>(0.5, 0.5);\n let dv = p - center;\n let r = length(dv) * scl;\n let ang = atan2(dv.y, dv.x);\n // Radial streak\n let streakCount = 2.0 * floor(1.0 + dens * 3.0);\n let streak = smoothstep(0.35, 0.6, fract(ang / 3.14159 * streakCount + 0.5)) * pow(1.0 - r, 3.0);\n // Concentric halos / chromatic rings\n let rings = (0.5 + 0.5 * sin(r * 40.0 - time * 2.0)) * dens;\n let core = smoothstep(0.25, 0.0, r);\n let chroma = mix(cA, cB, 0.5 + 0.5 * cos(ang * 3.0 + r * 30.0));\n let a = clamp((core * 0.9 + streak * 0.5 * dens + rings * 0.15 * (1.0 - r)) * inten, 0.0, 1.0);\n return vec4<f32>(chroma, a);\n}\n\nfn fxLightning(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Periodic bolt striking vertically, flickering briefly\n let period = mix(4.0, 0.6, clamp(dens, 0.0, 1.0));\n let cycle = fract(time / period);\n let flashWindow = mix(0.05, 0.35, clamp(dens, 0.0, 1.0));\n let flash = smoothstep(flashWindow, 0.0, cycle);\n \n let tFlicker = floor(time * 60.0);\n let flickerVal = tFlicker - 10000.0 * floor(tFlicker / 10000.0);\n let flicker = step(hash1(flickerVal * 1.7), 0.8); // rapid on/off shimmer\n\n // Jitter a vertical bolt with per-row hashes and interpolate between rows\n let rows = 18.0 * scl;\n let rg = p.y * rows;\n let row = floor(rg);\n let fr = fract(rg);\n \n let tLightning = floor(time * 24.0);\n let lightningVal = tLightning - 10000.0 * floor(tLightning / 10000.0);\n let x0 = 0.3 + 0.4 * hash1(row * 13.7 + lightningVal * 3.1);\n let x1 = 0.3 + 0.4 * hash1((row + 1.0) * 13.7 + lightningVal * 3.1);\n let boltX = mix(x0, x1, fr);\n\n // Secondary tiny forks\n let forkDrift = (hash1(row * 7.3) - 0.5) * 0.12 * smoothstep(0.0, 0.6, 1.0 - p.y);\n let boltDist = abs(p.x - (boltX + forkDrift)) * scl;\n let core = smoothstep(0.012, 0.0, boltDist);\n let glow = smoothstep(0.07, 0.0, boltDist) * 0.5;\n let a = clamp((core + glow) * flash * flicker * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(boltDist * 8.0, 0.0, 1.0) + 0.3 * flash);\n // Soft ambient flash behind the bolt\n let amb = smoothstep(0.35, 0.0, length(p - vec2<f32>(boltX, p.y)) * scl) * flash * 0.15;\n return vec4<f32>(col * (1.0 + amb), clamp(a + amb, 0.0, 1.0));\n}\n\nfn fxEnergyBeam(p: vec2<f32>, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n let src = vec2<f32>(0.15, 0.5);\n let dirv = vec2<f32>(1.0, 0.0);\n let w = p - src;\n let along = dot(w, dirv) * scl;\n let perp = dot(w, vec2<f32>(-dirv.y, dirv.x)) * scl;\n let beamWidth = 0.01 + 0.03 * dens;\n let glowWidth = 0.05 + 0.1 * dens;\n let core = smoothstep(beamWidth, 0.0, abs(perp));\n let glow = smoothstep(glowWidth, 0.0, abs(perp)) * 0.4 * dens;\n let falloff = smoothstep(0.0, 1.0, along);\n let pulse = 0.7 + 0.3 * sin(along * 30.0 - time * 10.0);\n let a = clamp((core + glow) * falloff * pulse * inten, 0.0, 1.0);\n let col = mix(cA, cB, clamp(along, 0.0, 1.0));\n return vec4<f32>(col * (1.0 + glow * 2.0), a);\n}\n\nfn fxAurora(p: vec2<f32>, seedOff: f32, time: f32, scl: f32, dens: f32, inten: f32, cA: vec3<f32>, cB: vec3<f32>) -> vec4<f32> {\n // Northern lights: curtains hanging from a wavy band across the upper sky,\n // rippling sideways, with fine vertical rays. cA at the base, cB at the top.\n var acc = vec3<f32>(0.0);\n var keep = 1.0;\n for (var k = 0; k < 3; k++) {\n let fk = f32(k);\n let x = p.x * (1.0 + fk * 0.35) * scl * 1.5 + seedOff * 13.0 + fk * 3.1;\n // Curtain base line, a slow wave across the frame.\n let base = 0.42 + fk * 0.06 + 0.12 * (fbm(vec2<f32>(x * 1.3, time * 0.05 + fk), 3) - 0.5)\n + 0.05 * sin(x * 4.0 + time * 0.3 + fk);\n let h = 0.38 + 0.2 * fbm(vec2<f32>(x * 2.0 + 7.0, time * 0.04), 3);\n let d = base - p.y; // 0 at the base, rising upward\n let body = smoothstep(-0.06, 0.035, d) * pow(1.0 - smoothstep(0.0, h, d), 1.5);\n // Vertical rays drifting sideways.\n let rn = fbm(vec2<f32>(x * 40.0 + time * 0.3, d * 2.0 - time * 0.1), 3);\n let rays = 0.25 + 1.2 * rn * rn;\n let fold = 0.6 + 0.4 * sin(x * 9.0 + time * 0.5 + fbm(vec2<f32>(x * 3.0, time * 0.1), 2) * 6.0);\n let a = body * rays * fold * (1.0 - fk * 0.25);\n let col = mix(cA, cB, clamp(d / max(h, 1e-3), 0.0, 1.0));\n acc += col * a;\n keep *= 1.0 - clamp(a, 0.0, 1.0);\n }\n let alpha = 1.0 - keep;\n let a = clamp(alpha * (0.35 + 0.65 * dens) * inten * 1.4, 0.0, 1.0);\n return vec4<f32>(acc / max(alpha, 1e-3) * min(alpha * 2.0, 1.0), a);\n}\n\n// ---- main dispatch ---------------------------------------------------------\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let density = get_field(u.density, u.hasSigDensity, densityTex, signalSamp);\n let scale = get_field(u.scale, u.hasSigScale, scaleTex, signalSamp);\n let speed = get_field(u.speed, u.hasSigSpeed, speedTex, signalSamp);\n let intensity = get_field(u.intensity, u.hasSigIntensity, intensityTex, signalSamp);\n let seed = get_field(u.seed, u.hasSigSeed, seedTex, signalSamp);\n\n let isVideo = u.outputType > 0.5;\n let time = select(0.0, u.time * max(speed, 1e-4), isVideo);\n let seedOff = fract(seed * 1.618033);\n\n // Aspect correction\n let uv = in.uv;\n let p = vec2<f32>(uv.x, uv.y);\n\n // Move to a seed-scrambled space so different seeds look different\n let sp = p + vec2<f32>(seedOff * 17.0, seedOff * 31.0);\n\n var eff = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n let cA = u.colorStart.rgb;\n let cB = u.colorEnd.rgb;\n let scl = max(scale, 1e-4);\n let factor = scl * 100.0;\n\n if (u.effectType < 0.5) {\n eff = fxSmoke(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 1.5) {\n eff = fxFire(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 2.5) {\n eff = fxRain(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 3.5) {\n eff = fxSparks(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 4.5) {\n eff = fxSnow(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 5.5) {\n eff = fxDust(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 6.5) {\n eff = fxLightning(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 7.5) {\n eff = fxMagic(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 8.5) {\n eff = fxLensFlare(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 9.5) {\n eff = fxEmbers(sp, time, factor, density, intensity, cA, cB);\n } else if (u.effectType < 10.5) {\n eff = fxEnergyBeam(sp, time, factor, density, intensity, cA, cB);\n } else {\n eff = fxAurora(p, seedOff, time, factor, density, intensity, cA, cB);\n }\n\n // Straight alpha is fine for compositing onto a transparent canvas.\n let a = clamp(eff.a, 0.0, 1.0);\n return vec4<f32>(clamp(eff.rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * a, a);\n}\n`;\nconst vfxUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getVFXResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `procedural_vfx_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vfxModule = device.createShaderModule({\n\t\t\tlabel: `procedural_vfx_${format}.wgsl`,\n\t\t\tcode: VFX_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ProceduralVFXPipeline_${format}`,\n\t\t\tmodule: vfxModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tvfxPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst VFX_EFFECT_INDEX = {\n\tSmoke: 0,\n\tFire: 1,\n\tRain: 2,\n\tSparks: 3,\n\tSnow: 4,\n\tDust: 5,\n\tLightning: 6,\n\tMagic: 7,\n\tLensFlare: 8,\n\tEmbers: 9,\n\tEnergyBeam: 10,\n\tAurora: 11\n};\nconst ProceduralVFXWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ProceduralVFX\" || !op) return;\n\tconst { vfxPipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getVFXResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst densityInfo = resolveSignalField(op, \"density\", .6);\n\tconst scaleInfo = resolveSignalField(op, \"scale\", .01);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", .8);\n\tconst seedInfo = resolveSignalField(op, \"seed\", 1234);\n\tconst effectIndex = VFX_EFFECT_INDEX[op.effectType ?? \"Smoke\"] ?? 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#ffffff\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ff5500\");\n\tvfxUniformData[0] = effectIndex;\n\tvfxUniformData[1] = outputTypeVal;\n\tvfxUniformData[2] = elapsedSeconds;\n\tvfxUniformData[3] = 0;\n\tvfxUniformData[4] = densityInfo.value;\n\tvfxUniformData[5] = scaleInfo.value;\n\tvfxUniformData[6] = speedInfo.value;\n\tvfxUniformData[7] = intensityInfo.value;\n\tvfxUniformData[8] = seedInfo.value;\n\tvfxUniformData[9] = densityInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[10] = scaleInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[11] = speedInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[12] = intensityInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[13] = seedInfo.hasSignal ? 1 : 0;\n\tvfxUniformData[14] = 0;\n\tvfxUniformData[15] = 0;\n\tvfxUniformData[16] = colorStartVal[0];\n\tvfxUniformData[17] = colorStartVal[1];\n\tvfxUniformData[18] = colorStartVal[2];\n\tvfxUniformData[19] = colorStartVal[3];\n\tvfxUniformData[20] = colorEndVal[0];\n\tvfxUniformData[21] = colorEndVal[1];\n\tvfxUniformData[22] = colorEndVal[2];\n\tvfxUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vfxUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"density\",\n\t\t\tinfo: densityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t},\n\t\t{\n\t\t\tname: \"intensity\",\n\t\t\tinfo: intensityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"seed\",\n\t\t\tinfo: seedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `procedural_vfx_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ProceduralVFXWebGPURenderer });\n\n//#endregion\nexport { ProceduralVFXWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DiW7Lt7Y.mjs.map"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import "./chunk-BcJoO4Nm.mjs";
2
- import { It as getActiveMediaMetadata } from "./dist-BlIrsfcn.mjs";
3
- import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
4
- import "./dist-C1cCW7Bt.mjs";
5
- import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
1
+ import "./chunk-D8S17ehY.mjs";
2
+ import { It as getActiveMediaMetadata } from "./dist-ByxHoMQI.mjs";
3
+ import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
4
+ import "./dist-D12-a3-x.mjs";
5
+ import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-zFNrvhV9.mjs";
6
6
 
7
7
  //#region ../../nodes/node-resizer-scaler/dist/renderers-4yv_5K2l.mjs
8
8
  const RESIZER_SCALER_SHADER = `
@@ -251,4 +251,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURend
251
251
 
252
252
  //#endregion
253
253
  export { renderers_default as default };
254
- //# sourceMappingURL=renderer-ktWXVYka.mjs.map
254
+ //# sourceMappingURL=renderer-CPTXJs0n.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-ktWXVYka.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-4yv_5K2l.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tmodule: scalerModule,\n\t\t\tlayouts: [layouts.scalerUniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst { view: tmpView } = await drawChildToTexture(args, childMedia, {\n\t\twidth: srcWidth,\n\t\theight: srcHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: childMedia,\n\t\t\tcontainerWidth: srcWidth,\n\t\t\tcontainerHeight: srcHeight\n\t\t}\n\t});\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tdrawFullscreenPass(encoder, targetView, pipeline, [ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t})]);\n\tbeginTargetPass(args);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-4yv_5K2l.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-CPTXJs0n.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-4yv_5K2l.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]);\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tmodule: scalerModule,\n\t\t\tlayouts: [layouts.scalerUniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst { view: tmpView } = await drawChildToTexture(args, childMedia, {\n\t\twidth: srcWidth,\n\t\theight: srcHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: childMedia,\n\t\t\tcontainerWidth: srcWidth,\n\t\t\tcontainerHeight: srcHeight\n\t\t}\n\t});\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tdrawFullscreenPass(encoder, targetView, pipeline, [ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t})]);\n\tbeginTargetPass(args);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-4yv_5K2l.mjs.map"],"mappings":";;;;;;;AAKA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAkB5B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;CAChB,MAAM,sBAAsB,wBAAwB,QAAQ;EAC3D;EACA;EACA;EACA,CAAC;AACF,OAAM;EACL;EACA,sBAAsB;EACtB,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,mBAAmB,QAAQ,QAAQ;CAC3C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,UAAU;CAC3B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO,UAAU,OAAO;GACxB,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,yBAAyB;GAChC,QAAQ;GACR,SAAS,CAAC,QAAQ,oBAAoB;GACtC;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,gBAAgB;EAChB,qBAAqB,QAAQ;EAC7B;;AAEF,SAAS,eAAe,KAAK;CAC5B,MAAM,WAAW,IAAI,QAAQ,KAAK,GAAG;AACrC,QAAO;EACN,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,WAAW,IAAI,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG,MAAM;EACvE;;AAEF,MAAM,aAAa,IAAI,aAAa,GAAG;AACvC,MAAM,8BAA8B,OAAO,SAAS;CACnD,MAAM,EAAE,KAAK,SAAS,MAAM,YAAY,aAAa,cAAc,UAAU;CAC7E,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,mBAAmB,CAAC,GAAI;CACvC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,YAAY,uBAAuB,WAAW;CACpD,MAAM,WAAW,WAAW,SAAS,eAAe;CACpD,MAAM,YAAY,WAAW,UAAU,gBAAgB;CACvD,MAAM,EAAE,MAAM,YAAY,MAAM,mBAAmB,MAAM,YAAY;EACpE,OAAO;EACP,QAAQ;EACR,OAAO;GACN,GAAG;GACH,cAAc;GACd,gBAAgB;GAChB,iBAAiB;GACjB;EACD,CAAC;CACF,MAAM,EAAE,gBAAgB,UAAU,qBAAqB,YAAY,mBAAmB,IAAI,QAAQ,IAAI,SAAS,OAAO;AACtH,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;EACf,OAAO;EACP,SAAS;EACT,SAAS;EACT,QAAQ;EACR,CAAC,GAAG,WAAW,cAAc;AAC9B,YAAW,KAAK;EACf,OAAO;EACP,SAAS;EACT,UAAU;EACV,aAAa;EACb,CAAC,GAAG,kBAAkB,YAAY;AACnC,YAAW,KAAK;AAChB,YAAW,KAAK;CAChB,MAAM,UAAU,eAAe,GAAG,mBAAmB,YAAY;AACjE,YAAW,KAAK,QAAQ;AACxB,YAAW,KAAK,QAAQ;AACxB,YAAW,MAAM,QAAQ;AACzB,YAAW,MAAM,QAAQ;CACzB,MAAM,WAAW,eAAe,GAAG,oBAAoB,YAAY;AACnE,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,OAAO,GAAG,cAAc,GAAG;AAC5C,YAAW,MAAM,OAAO,GAAG,wBAAwB,GAAG;AACtD,YAAW,MAAM,OAAO,GAAG,QAAQ,IAAI;AACvC,YAAW,MAAM;AACjB,YAAW,MAAM,OAAO,GAAG,WAAW,EAAE;AACxC,YAAW,MAAM,OAAO,GAAG,WAAW,EAAE;CACxC,MAAM,aAAa;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP;CACD,MAAM,aAAa;EAClB,KAAK;EACL,QAAQ;EACR,QAAQ;EACR;AACD,YAAW,MAAM,WAAW,GAAG,WAAW,aAAa;AACvD,YAAW,MAAM,WAAW,GAAG,WAAW,aAAa;CACvD,MAAM,UAAU,IAAI,SAAS,mBAAmB,WAAW;CAC3D,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;AAChE,oBAAmB,SAAS,YAAY,UAAU,CAAC,IAAI,OAAO,gBAAgB;EAC7E,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU,EAAE,QAAQ,SAAS;IAC7B;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC,CAAC,CAAC;AACJ,iBAAgB,KAAK;;AAKtB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D8S17ehY.mjs";
2
+ import "./dist-D12-a3-x.mjs";
3
+ import { t as renderers_default } from "./renderer-CbhnJi_8.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,7 +1,7 @@
1
- import "./chunk-BcJoO4Nm.mjs";
2
- import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
3
- import "./dist-C1cCW7Bt.mjs";
4
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CMaa63nz.mjs";
1
+ import "./chunk-D8S17ehY.mjs";
2
+ import { n as defineRenderer } from "./renderer-DrWeb39d.mjs";
3
+ import "./dist-D12-a3-x.mjs";
4
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zFNrvhV9.mjs";
5
5
 
6
6
  //#region ../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs
7
7
  const CANVAS_SHADER = `
@@ -127,4 +127,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURe
127
127
 
128
128
  //#endregion
129
129
  export { CanvasGeneratorWebGPURenderer, renderers_default as default };
130
- //# sourceMappingURL=renderer-CcvvoKiZ.mjs.map
130
+ //# sourceMappingURL=renderer-CUBDxuxh.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-CcvvoKiZ.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-CUBDxuxh.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":"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"}