framefields 2.4.3 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/README.md +26 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-DJeVoE8b.mjs → audio-BluXgSeG.mjs} +1 -1
  5. package/dist/{audio-DJeVoE8b.mjs.map → audio-BluXgSeG.mjs.map} +1 -1
  6. package/dist/{audio-BymXfAvH.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
  7. package/dist/{audio-BymXfAvH.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
  8. package/dist/{audio-BzHHpImj.mjs → audio-CZwVENqB.mjs} +4 -4
  9. package/dist/{audio-BzHHpImj.mjs.map → audio-CZwVENqB.mjs.map} +1 -1
  10. package/dist/cli.d.mts +1 -0
  11. package/dist/cli.mjs +221 -0
  12. package/dist/cli.mjs.map +1 -0
  13. package/dist/components/index.d.mts +12 -0
  14. package/dist/components/index.mjs +49 -0
  15. package/dist/{dist-Bo2_zeCn.mjs → dist-CQZ5_60A.mjs} +2 -2
  16. package/dist/{dist-Bo2_zeCn.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
  17. package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
  18. package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
  19. package/dist/{dist-hmWTJPik.mjs → dist-DBWkkSvJ.mjs} +113 -68
  20. package/dist/dist-DBWkkSvJ.mjs.map +1 -0
  21. package/dist/{dist-TrtLGPvc.mjs → dist-DFeF-ygz.mjs} +1 -1
  22. package/dist/{dist-TrtLGPvc.mjs.map → dist-DFeF-ygz.mjs.map} +1 -1
  23. package/dist/{dist-DMa2BbYs.mjs → dist-DHQVWaV2.mjs} +53 -21
  24. package/dist/dist-DHQVWaV2.mjs.map +1 -0
  25. package/dist/effects/index.d.mts +4 -4
  26. package/dist/effects/index.mjs +36 -36
  27. package/dist/{effects-CiZjSwIh.mjs → effects-DZvq-nWT.mjs} +3 -3
  28. package/dist/{effects-CiZjSwIh.mjs.map → effects-DZvq-nWT.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +3 -3
  31. package/dist/{fonts-Da1JDKpc.mjs → fonts-DcsxFpyU.mjs} +3 -2
  32. package/dist/fonts-DcsxFpyU.mjs.map +1 -0
  33. package/dist/{gpu-CHIgM_YH.mjs → gpu-Dq_uI_00.mjs} +2 -2
  34. package/dist/{gpu-CHIgM_YH.mjs.map → gpu-Dq_uI_00.mjs.map} +1 -1
  35. package/dist/{index-DIvWBm-q.d.mts → index-B-KVpJMb.d.mts} +2 -2
  36. package/dist/{index-DIvWBm-q.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
  37. package/dist/{index-WMofVN02.d.mts → index-BpdVOlsV.d.mts} +3 -3
  38. package/dist/{index-WMofVN02.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
  39. package/dist/index-C2f4Hm-p.d.mts +89 -0
  40. package/dist/index-C2f4Hm-p.d.mts.map +1 -0
  41. package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
  42. package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
  43. package/dist/{index-CJkihekp.d.mts → index-D6-lH1Mx.d.mts} +189 -189
  44. package/dist/index-D6-lH1Mx.d.mts.map +1 -0
  45. package/dist/index-DKssQ_wn.d.mts +5968 -0
  46. package/dist/index-DKssQ_wn.d.mts.map +1 -0
  47. package/dist/{index-Dwf76Qep.d.mts → index-DNKM3to5.d.mts} +3 -3
  48. package/dist/{index-Dwf76Qep.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
  49. package/dist/{index-DGe83M-p.d.mts → index-fymoeGNW.d.mts} +6 -1
  50. package/dist/index-fymoeGNW.d.mts.map +1 -0
  51. package/dist/index.d.mts +13 -4659
  52. package/dist/index.mjs +59 -6654
  53. package/dist/preview/index.d.mts +4 -90
  54. package/dist/preview/index.mjs +12 -12
  55. package/dist/{preview-5E4B96RD.mjs → preview-CYI4i4m3.mjs} +5 -4
  56. package/dist/preview-CYI4i4m3.mjs.map +1 -0
  57. package/dist/preview-engine/audio.mjs +1 -1
  58. package/dist/preview-engine/{chunk-TFFG5YFI.mjs → chunk-24H3QVYB.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-7J4OK4VE.mjs → chunk-25T3M6MI.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-O3NOB5IB.mjs → chunk-2QQQTZHS.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-XTPEGKOZ.mjs → chunk-2RZ6S4SW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-37P2KIFE.mjs → chunk-3AYICEZ5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-JTUK7ZXK.mjs → chunk-3I6B3YPF.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-LQBDZSQD.mjs → chunk-6GMEF2QB.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-5CWQHYQP.mjs → chunk-7BUKVFWB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-AWX4YGC5.mjs → chunk-7JYMNGNK.mjs} +1 -1
  67. package/dist/preview-engine/chunk-AB5VITYM.mjs +1974 -0
  68. package/dist/preview-engine/{chunk-LSBCFJZM.mjs → chunk-BNO5JAEZ.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-6WKWYUOM.mjs → chunk-CE6CG5BH.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-LQENNFBA.mjs → chunk-CT2WFPYG.mjs} +11 -11
  71. package/dist/preview-engine/{chunk-5JSSXOBB.mjs → chunk-DUEY7AXY.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-UDDK5QZF.mjs → chunk-DWHQSNSJ.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-AY2ZIXST.mjs → chunk-ENS4KUJV.mjs} +1 -1
  74. package/dist/preview-engine/chunk-EU7CFSB5.mjs +1 -0
  75. package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
  76. package/dist/preview-engine/{chunk-7QE6II7R.mjs → chunk-JMOJKT5W.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-NIRW77QA.mjs → chunk-KJGNTREI.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-ILBZQLUF.mjs → chunk-KKBJ7X3T.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-GQN35VLT.mjs → chunk-LNJYHSYX.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-6TGNQ5FD.mjs → chunk-LQVACZDE.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-YQYLBXOX.mjs → chunk-M6ZKK6ZU.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-EEOUHDUD.mjs → chunk-MA4YVA2E.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-JAJOZG5P.mjs → chunk-MBJXS3D7.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-BIS3W4Z5.mjs → chunk-MCR7XMNQ.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-C45ROXI6.mjs → chunk-NAISBHLR.mjs} +11 -11
  86. package/dist/preview-engine/{chunk-AKYUVDKM.mjs → chunk-NB55FW7D.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-3SOD7OTO.mjs → chunk-NHQR76WL.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-MJN3LOZ7.mjs → chunk-NKGXINCU.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-FDNR4PRC.mjs → chunk-NXKXOSE6.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-N3PRZLZJ.mjs → chunk-NYEDWUFS.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-W3QGP5XF.mjs → chunk-P734GD7D.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-YJ6GWVL4.mjs → chunk-PDM3TJ45.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-KJ2DTA77.mjs → chunk-PXWCGXTF.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-V6LCSK6Q.mjs → chunk-QCUGWPYP.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-JJYNYYPA.mjs → chunk-QJYAIQYU.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-VUFDQJ2B.mjs → chunk-QKQYHPBK.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-NVTPJUNG.mjs → chunk-QVW5METG.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-UMF7NNUA.mjs → chunk-QYIKOOFI.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-FSAELHVT.mjs → chunk-RNFYEZLL.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-CEIOI4HO.mjs → chunk-SIXIF5QZ.mjs} +1 -1
  101. package/dist/preview-engine/chunk-SNASF7OM.mjs +3 -0
  102. package/dist/preview-engine/{chunk-A2775RSO.mjs → chunk-T4VP45AP.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-5EVEGKWT.mjs → chunk-TE2QAKKF.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-6MBYREBG.mjs → chunk-UXCTWFKK.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-V6DAD4S4.mjs → chunk-V3FODTPI.mjs} +2 -2
  106. package/dist/preview-engine/{chunk-JJA4G3OU.mjs → chunk-VH5V54RA.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-GIH5QURF.mjs → chunk-VTE3IISK.mjs} +1 -1
  108. package/dist/preview-engine/chunk-W4HIVUUA.mjs +4 -0
  109. package/dist/preview-engine/{chunk-O5LA63CK.mjs → chunk-WUMVCQYI.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-U4SQUTDV.mjs → chunk-X6BJLPW6.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-54HE34HO.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-XUPZBI3Y.mjs} +6 -6
  113. package/dist/preview-engine/{chunk-LMZHCWXP.mjs → chunk-XYRBFLFF.mjs} +1 -1
  114. package/dist/preview-engine/{chunk-S7NG26UG.mjs → chunk-YJ24W73B.mjs} +1 -1
  115. package/dist/preview-engine/{chunk-5SVJIGPK.mjs → chunk-Z4TKEI3I.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-UVWGZUKZ.mjs → chunk-ZAIVXGSS.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-OZDZQMTB.mjs → chunk-ZVUTFXDR.mjs} +1 -1
  118. package/dist/preview-engine/components.mjs +1 -0
  119. package/dist/preview-engine/effects.mjs +1 -1
  120. package/dist/preview-engine/fonts.mjs +1 -1
  121. package/dist/preview-engine/framefields.mjs +1 -1971
  122. package/dist/preview-engine/player.mjs +5 -5
  123. package/dist/preview-engine/renderers-2S5ZWL2J.mjs +1 -0
  124. package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
  125. package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
  126. package/dist/preview-engine/{renderers-2A7YDJMJ.mjs → renderers-4RFB2LG2.mjs} +1 -1
  127. package/dist/preview-engine/renderers-6NFRKHNO.mjs +1 -0
  128. package/dist/preview-engine/{renderers-QJNGN722.mjs → renderers-6PVGRTXV.mjs} +1 -1
  129. package/dist/preview-engine/renderers-7MPBAHYA.mjs +1 -0
  130. package/dist/preview-engine/renderers-AFTYMS3H.mjs +1 -0
  131. package/dist/preview-engine/renderers-AKZAAGR7.mjs +1 -0
  132. package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
  133. package/dist/preview-engine/{renderers-5OGAF66H.mjs → renderers-BNXTSIXJ.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-XPO2WQNF.mjs → renderers-BQLYS4TM.mjs} +1 -1
  135. package/dist/preview-engine/renderers-C7SJ3M6S.mjs +1 -0
  136. package/dist/preview-engine/{renderers-VD5GHHK6.mjs → renderers-CEJP6Q7F.mjs} +1 -1
  137. package/dist/preview-engine/{renderers-KW75FYFG.mjs → renderers-CLLR5MOQ.mjs} +1 -1
  138. package/dist/preview-engine/{renderers-PM4Q5QOW.mjs → renderers-DHKB5LI6.mjs} +1 -1
  139. package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
  140. package/dist/preview-engine/{renderers-XTRFEQO4.mjs → renderers-DZZFIYYA.mjs} +1 -1
  141. package/dist/preview-engine/renderers-EIJFIY6L.mjs +1 -0
  142. package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
  143. package/dist/preview-engine/{renderers-NJAKGI25.mjs → renderers-FOHW7RWH.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-K23EAM2J.mjs → renderers-GF77N2KM.mjs} +1 -1
  145. package/dist/preview-engine/renderers-H3ZM2TOA.mjs +1 -0
  146. package/dist/preview-engine/{renderers-NPKRNXAT.mjs → renderers-HJ6NO5ZD.mjs} +1 -1
  147. package/dist/preview-engine/renderers-JXBZPQKP.mjs +1 -0
  148. package/dist/preview-engine/renderers-KSQM7EM5.mjs +1 -0
  149. package/dist/preview-engine/{renderers-WNMRLGZS.mjs → renderers-KV3TTCO6.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-U2ZWRL25.mjs → renderers-L7EITUCD.mjs} +1 -1
  151. package/dist/preview-engine/renderers-LD3COS4X.mjs +1 -0
  152. package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
  153. package/dist/preview-engine/renderers-MKEXNBCW.mjs +1 -0
  154. package/dist/preview-engine/{renderers-ZRR7BLB7.mjs → renderers-MPCYLXXU.mjs} +1 -1
  155. package/dist/preview-engine/{renderers-DKOWLKDE.mjs → renderers-MS4HG3M4.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-MHDLRY3S.mjs → renderers-N7T34SCI.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-2GE5HE56.mjs → renderers-O56IOD7J.mjs} +1 -1
  158. package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
  159. package/dist/preview-engine/renderers-PSEDMUBV.mjs +1 -0
  160. package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
  161. package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
  162. package/dist/preview-engine/{renderers-7M3YOI7E.mjs → renderers-QO2RHF7F.mjs} +1 -1
  163. package/dist/preview-engine/renderers-QPFZBLDI.mjs +1 -0
  164. package/dist/preview-engine/renderers-R4U2TK6P.mjs +1 -0
  165. package/dist/preview-engine/renderers-RBLNDAO4.mjs +1 -0
  166. package/dist/preview-engine/renderers-RM25AXWZ.mjs +1 -0
  167. package/dist/preview-engine/{renderers-DFJDEPCU.mjs → renderers-ROSSJ7Y2.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-4H34AFW2.mjs → renderers-RRJ2DX2W.mjs} +1 -1
  169. package/dist/preview-engine/renderers-RYRFCEYT.mjs +1 -0
  170. package/dist/preview-engine/renderers-SIBP54WK.mjs +1 -0
  171. package/dist/preview-engine/renderers-SRU6QXLN.mjs +1 -0
  172. package/dist/preview-engine/{renderers-TFEDHXPY.mjs → renderers-T62TXGVO.mjs} +1 -1
  173. package/dist/preview-engine/{renderers-6GYRMHGQ.mjs → renderers-TAMDNTEQ.mjs} +1 -1
  174. package/dist/preview-engine/{renderers-LF6W5P2I.mjs → renderers-TASYN62K.mjs} +1 -1
  175. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
  176. package/dist/preview-engine/{renderers-FNPXT2EH.mjs → renderers-TWZHTKW7.mjs} +1 -1
  177. package/dist/preview-engine/renderers-UQHKFGDX.mjs +1 -0
  178. package/dist/preview-engine/{renderers-35G4KCQ2.mjs → renderers-UVABXXQF.mjs} +1 -1
  179. package/dist/preview-engine/{renderers-XTCBHTHC.mjs → renderers-VYK2BJID.mjs} +1 -1
  180. package/dist/preview-engine/{renderers-Q6AO5M54.mjs → renderers-W5CTR4B5.mjs} +1 -1
  181. package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
  182. package/dist/preview-engine/renderers-WNBDSSJ3.mjs +1 -0
  183. package/dist/preview-engine/{renderers-ATL5ARUV.mjs → renderers-WPBTAU2E.mjs} +1 -1
  184. package/dist/preview-engine/renderers-WTC2RNGU.mjs +1 -0
  185. package/dist/preview-engine/renderers-XLBHSQZJ.mjs +228 -0
  186. package/dist/preview-engine/{renderers-WOLTH5VI.mjs → renderers-XSPU2BIQ.mjs} +1 -1
  187. package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
  188. package/dist/preview-engine/renderers-YHOQUEHD.mjs +1 -0
  189. package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
  190. package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
  191. package/dist/preview-engine/signals.mjs +1 -1
  192. package/dist/{program-KwDdbC0-.mjs → program-BdPDtfVv.mjs} +133 -30
  193. package/dist/program-BdPDtfVv.mjs.map +1 -0
  194. package/dist/registry/annotate.json +30 -0
  195. package/dist/registry/app-frame.json +38 -0
  196. package/dist/registry/backdrop.json +37 -0
  197. package/dist/registry/before-after.json +33 -0
  198. package/dist/registry/callout.json +30 -0
  199. package/dist/registry/captions.json +37 -0
  200. package/dist/registry/card-stack.json +30 -0
  201. package/dist/registry/chat-thread.json +32 -0
  202. package/dist/registry/code-block.json +45 -0
  203. package/dist/registry/confetti.json +29 -0
  204. package/dist/registry/counter.json +36 -0
  205. package/dist/registry/device-frame.json +36 -0
  206. package/dist/registry/focus-zoom.json +32 -0
  207. package/dist/registry/index.json +408 -0
  208. package/dist/registry/logo-reveal.json +37 -0
  209. package/dist/registry/lower-third.json +34 -0
  210. package/dist/registry/meter.json +35 -0
  211. package/dist/registry/mouse-pointer.json +44 -0
  212. package/dist/registry/selection.json +31 -0
  213. package/dist/registry/spotlight.json +28 -0
  214. package/dist/registry/terminal.json +40 -0
  215. package/dist/registry/text-reveal.json +39 -0
  216. package/dist/registry/title-card.json +34 -0
  217. package/dist/registry/toasts.json +28 -0
  218. package/dist/registry/touch-point.json +33 -0
  219. package/dist/registry/waveform.json +29 -0
  220. package/dist/registry/word-cycle.json +32 -0
  221. package/dist/renderer/index.d.mts +2 -2
  222. package/dist/renderer/index.mjs +3 -3
  223. package/dist/{renderer-Bhfl-WFX.mjs → renderer-0cHsK6xR.mjs} +5 -5
  224. package/dist/{renderer-Bhfl-WFX.mjs.map → renderer-0cHsK6xR.mjs.map} +1 -1
  225. package/dist/{renderer-D4No_jA4.mjs → renderer-1VKN5j2C.mjs} +4 -4
  226. package/dist/{renderer-D4No_jA4.mjs.map → renderer-1VKN5j2C.mjs.map} +1 -1
  227. package/dist/{renderer-qYhNf6iB.mjs → renderer-2bipMLqz.mjs} +3 -3
  228. package/dist/{renderer-qYhNf6iB.mjs.map → renderer-2bipMLqz.mjs.map} +1 -1
  229. package/dist/{renderer-DK9etIAz.mjs → renderer-7DyjqxEj.mjs} +5 -5
  230. package/dist/{renderer-DK9etIAz.mjs.map → renderer-7DyjqxEj.mjs.map} +1 -1
  231. package/dist/renderer-B-D_VZg3.mjs +5 -0
  232. package/dist/{renderer-Ci6YMa4u.mjs → renderer-B31zMDE8.mjs} +5 -5
  233. package/dist/{renderer-Ci6YMa4u.mjs.map → renderer-B31zMDE8.mjs.map} +1 -1
  234. package/dist/{renderer-DP_In2uT.mjs → renderer-B4blg067.mjs} +4 -4
  235. package/dist/{renderer-DP_In2uT.mjs.map → renderer-B4blg067.mjs.map} +1 -1
  236. package/dist/{renderer-kNjMhwiZ.mjs → renderer-B5YYBBDq.mjs} +3 -3
  237. package/dist/{renderer-kNjMhwiZ.mjs.map → renderer-B5YYBBDq.mjs.map} +1 -1
  238. package/dist/renderer-B64dhpDX.mjs +5 -0
  239. package/dist/{renderer-mqUBkx-a.mjs → renderer-B8LXXvHi.mjs} +4 -4
  240. package/dist/{renderer-mqUBkx-a.mjs.map → renderer-B8LXXvHi.mjs.map} +1 -1
  241. package/dist/renderer-BA2Ko4H1.mjs +3 -0
  242. package/dist/{renderer-B4ydDdo6.mjs → renderer-BAkPq8qo.mjs} +3 -3
  243. package/dist/{renderer-B4ydDdo6.mjs.map → renderer-BAkPq8qo.mjs.map} +1 -1
  244. package/dist/{renderer-OEpwc9Zk.mjs → renderer-BBTdHKH7.mjs} +5 -5
  245. package/dist/{renderer-OEpwc9Zk.mjs.map → renderer-BBTdHKH7.mjs.map} +1 -1
  246. package/dist/{renderer-DGT141pN.mjs → renderer-BBTkfhL8.mjs} +5 -5
  247. package/dist/{renderer-DGT141pN.mjs.map → renderer-BBTkfhL8.mjs.map} +1 -1
  248. package/dist/renderer-BDL4jyrb.mjs +5 -0
  249. package/dist/{renderer-BtWWpFvl.mjs → renderer-BGNdwdCR.mjs} +4 -4
  250. package/dist/{renderer-BtWWpFvl.mjs.map → renderer-BGNdwdCR.mjs.map} +1 -1
  251. package/dist/{renderer-DXSIstnn.mjs → renderer-BJwOM1Dq.mjs} +4 -4
  252. package/dist/{renderer-DXSIstnn.mjs.map → renderer-BJwOM1Dq.mjs.map} +1 -1
  253. package/dist/renderer-BKCZGKkl.mjs +5 -0
  254. package/dist/renderer-BKs3jI7-.mjs +5 -0
  255. package/dist/{renderer-C5WkQZGR.mjs → renderer-BN_n6O6P.mjs} +5 -5
  256. package/dist/{renderer-C5WkQZGR.mjs.map → renderer-BN_n6O6P.mjs.map} +1 -1
  257. package/dist/renderer-BW74Zf-u.mjs +5 -0
  258. package/dist/{renderer-C1U85w9f.mjs → renderer-BWa3CLK7.mjs} +3 -3
  259. package/dist/{renderer-C1U85w9f.mjs.map → renderer-BWa3CLK7.mjs.map} +1 -1
  260. package/dist/{renderer-plx7_lUQ.mjs → renderer-BWnFh7NO.mjs} +5 -5
  261. package/dist/{renderer-plx7_lUQ.mjs.map → renderer-BWnFh7NO.mjs.map} +1 -1
  262. package/dist/renderer-BXuQN61O.mjs +5 -0
  263. package/dist/renderer-BY1pPvzx.mjs +6 -0
  264. package/dist/{renderer-CwO8T8l8.mjs → renderer-BYJS2lhn.mjs} +4 -4
  265. package/dist/{renderer-CwO8T8l8.mjs.map → renderer-BYJS2lhn.mjs.map} +1 -1
  266. package/dist/renderer-Bahthqvq.mjs +5 -0
  267. package/dist/renderer-BbaiQG8h.mjs +5 -0
  268. package/dist/{renderer-gm0zoV4t.mjs → renderer-BfrzKmRh.mjs} +3 -3
  269. package/dist/{renderer-gm0zoV4t.mjs.map → renderer-BfrzKmRh.mjs.map} +1 -1
  270. package/dist/renderer-BhHF-08y.mjs +5 -0
  271. package/dist/{renderer-DQeUc1yY.mjs → renderer-BhhweLr_.mjs} +4 -4
  272. package/dist/{renderer-DQeUc1yY.mjs.map → renderer-BhhweLr_.mjs.map} +1 -1
  273. package/dist/{renderer-OsA-Lg4d.mjs → renderer-Bmj7AyJP.mjs} +3 -3
  274. package/dist/{renderer-OsA-Lg4d.mjs.map → renderer-Bmj7AyJP.mjs.map} +1 -1
  275. package/dist/{renderer-DZhIe8Gj.mjs → renderer-BmoQJUJO.mjs} +4 -4
  276. package/dist/{renderer-DZhIe8Gj.mjs.map → renderer-BmoQJUJO.mjs.map} +1 -1
  277. package/dist/renderer-BnrMcw6C.mjs +5 -0
  278. package/dist/{renderer-Blm4Dv_h.mjs → renderer-Bo1PY0zW.mjs} +3 -3
  279. package/dist/{renderer-DcOT5c0t.mjs → renderer-Bo_d7h86.mjs} +4 -4
  280. package/dist/{renderer-DcOT5c0t.mjs.map → renderer-Bo_d7h86.mjs.map} +1 -1
  281. package/dist/renderer-BsS61z5l.mjs +5 -0
  282. package/dist/renderer-Btuq2Eq8.mjs +5 -0
  283. package/dist/renderer-BvcqncI2.mjs +3 -0
  284. package/dist/{renderer-C4xvz_Ft.mjs → renderer-Bw5YP2Db.mjs} +4 -4
  285. package/dist/{renderer-C4xvz_Ft.mjs.map → renderer-Bw5YP2Db.mjs.map} +1 -1
  286. package/dist/renderer-BxmsEl2x.mjs +5 -0
  287. package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
  288. package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
  289. package/dist/{renderer-B4jxP8vF.mjs → renderer-CDX2f82b.mjs} +5 -5
  290. package/dist/{renderer-B4jxP8vF.mjs.map → renderer-CDX2f82b.mjs.map} +1 -1
  291. package/dist/renderer-CGOyHdKs.mjs +5 -0
  292. package/dist/renderer-CJjmpmpu.mjs +5 -0
  293. package/dist/{renderer-P4OPsD82.mjs → renderer-CJoa4H2G.mjs} +3 -3
  294. package/dist/{renderer-P4OPsD82.mjs.map → renderer-CJoa4H2G.mjs.map} +1 -1
  295. package/dist/{renderer-1P3yS8YM.mjs → renderer-CLO8QHWE.mjs} +4 -4
  296. package/dist/{renderer-1P3yS8YM.mjs.map → renderer-CLO8QHWE.mjs.map} +1 -1
  297. package/dist/{renderer-CjQAYeYz.mjs → renderer-CMEqUhrW.mjs} +5 -5
  298. package/dist/{renderer-CjQAYeYz.mjs.map → renderer-CMEqUhrW.mjs.map} +1 -1
  299. package/dist/{renderer-CzgDJcot.mjs → renderer-CNs1vBUy.mjs} +4 -4
  300. package/dist/{renderer-CzgDJcot.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
  301. package/dist/{index-B0BZMhtw.d.mts → renderer-COXKPofU.d.mts} +13 -13
  302. package/dist/renderer-COXKPofU.d.mts.map +1 -0
  303. package/dist/{renderer-CrwYWVsV.mjs → renderer-COtZ315B.mjs} +3 -3
  304. package/dist/renderer-CQvDDAIu.mjs +5 -0
  305. package/dist/{renderer-DOvzHN60.mjs → renderer-CWSM0IGG.mjs} +4 -4
  306. package/dist/{renderer-DOvzHN60.mjs.map → renderer-CWSM0IGG.mjs.map} +1 -1
  307. package/dist/{renderer-DVFFVy9v.mjs → renderer-CXbXF7Dh.mjs} +5 -5
  308. package/dist/{renderer-DVFFVy9v.mjs.map → renderer-CXbXF7Dh.mjs.map} +1 -1
  309. package/dist/renderer-CYxigw7S.mjs +5 -0
  310. package/dist/{renderer-DOxmmN6Q.mjs → renderer-CdUf7ZDJ.mjs} +5 -5
  311. package/dist/{renderer-DOxmmN6Q.mjs.map → renderer-CdUf7ZDJ.mjs.map} +1 -1
  312. package/dist/renderer-CgDofO5z.mjs +5 -0
  313. package/dist/renderer-CgmQchab.mjs +5 -0
  314. package/dist/{renderer-CS8VMTp1.mjs → renderer-Ch7qwjH9.mjs} +5 -5
  315. package/dist/{renderer-CS8VMTp1.mjs.map → renderer-Ch7qwjH9.mjs.map} +1 -1
  316. package/dist/{renderer-PuN2_AL_.mjs → renderer-ChCUad83.mjs} +5 -5
  317. package/dist/{renderer-PuN2_AL_.mjs.map → renderer-ChCUad83.mjs.map} +1 -1
  318. package/dist/{renderer-BaJQx0Bp.mjs → renderer-ChjkppUz.mjs} +5 -5
  319. package/dist/{renderer-BaJQx0Bp.mjs.map → renderer-ChjkppUz.mjs.map} +1 -1
  320. package/dist/{renderer-CTYKUnDq.mjs → renderer-Cj1giMd0.mjs} +3 -3
  321. package/dist/{renderer-CTYKUnDq.mjs.map → renderer-Cj1giMd0.mjs.map} +1 -1
  322. package/dist/{renderer-DWG4Podv.mjs → renderer-Cjs1OeBu.mjs} +6 -6
  323. package/dist/{renderer-DWG4Podv.mjs.map → renderer-Cjs1OeBu.mjs.map} +1 -1
  324. package/dist/renderer-CjzrLwW_.mjs +5 -0
  325. package/dist/renderer-ClnYWADT.mjs +5 -0
  326. package/dist/{renderer-B9ssmkbx.mjs → renderer-CmKdr2nA.mjs} +5 -5
  327. package/dist/{renderer-B9ssmkbx.mjs.map → renderer-CmKdr2nA.mjs.map} +1 -1
  328. package/dist/renderer-CwAd71C6.mjs +5 -0
  329. package/dist/{renderer-BT0x6KPK.mjs → renderer-D0X7Eh-T.mjs} +4 -4
  330. package/dist/{renderer-BT0x6KPK.mjs.map → renderer-D0X7Eh-T.mjs.map} +1 -1
  331. package/dist/{renderer-DYbgd6Ye.mjs → renderer-D2ru2Afi.mjs} +4 -4
  332. package/dist/{renderer-DYbgd6Ye.mjs.map → renderer-D2ru2Afi.mjs.map} +1 -1
  333. package/dist/renderer-D3Z9t-xT.mjs +5 -0
  334. package/dist/{renderer-CLxQ4rU6.mjs → renderer-D5u3GVtD.mjs} +74 -74
  335. package/dist/{renderer-CLxQ4rU6.mjs.map → renderer-D5u3GVtD.mjs.map} +1 -1
  336. package/dist/{renderer-DCsTCvdo.mjs → renderer-D6p8b6ql.mjs} +4 -4
  337. package/dist/{renderer-DCsTCvdo.mjs.map → renderer-D6p8b6ql.mjs.map} +1 -1
  338. package/dist/{renderer-Bkq1PT0g.mjs → renderer-DBjV6C2u.mjs} +3 -3
  339. package/dist/{renderer-BAoKytKL.mjs → renderer-DHqicGgT.mjs} +4 -4
  340. package/dist/{renderer-BAoKytKL.mjs.map → renderer-DHqicGgT.mjs.map} +1 -1
  341. package/dist/{renderer-B_b8-ztW.mjs → renderer-DK34NH92.mjs} +5 -5
  342. package/dist/{renderer-B_b8-ztW.mjs.map → renderer-DK34NH92.mjs.map} +1 -1
  343. package/dist/renderer-DKH1oSlW.mjs +5 -0
  344. package/dist/{renderer-I3Wxk1tL.mjs → renderer-DP41Fokp.mjs} +4 -4
  345. package/dist/{renderer-I3Wxk1tL.mjs.map → renderer-DP41Fokp.mjs.map} +1 -1
  346. package/dist/{renderer-CPLfsRe1.mjs → renderer-DQuKNgIx.mjs} +6 -6
  347. package/dist/{renderer-CPLfsRe1.mjs.map → renderer-DQuKNgIx.mjs.map} +1 -1
  348. package/dist/renderer-DTkf_hwG.mjs +5 -0
  349. package/dist/renderer-DU0bmOS7.mjs +5 -0
  350. package/dist/{renderer-GapR_An3.mjs → renderer-DWaqF7-6.mjs} +4 -4
  351. package/dist/{renderer-GapR_An3.mjs.map → renderer-DWaqF7-6.mjs.map} +1 -1
  352. package/dist/renderer-D_vJHQt5.mjs +5 -0
  353. package/dist/{renderer-GbVNyv-E.mjs → renderer-Db_wphHH.mjs} +192 -27
  354. package/dist/renderer-Db_wphHH.mjs.map +1 -0
  355. package/dist/renderer-Dc5n0M6P.mjs +5 -0
  356. package/dist/renderer-Ddfn0Dha.mjs +5 -0
  357. package/dist/renderer-DeSoNQeG.mjs +5 -0
  358. package/dist/{renderer-C0ds-UfM.mjs → renderer-DkPDYtD3.mjs} +5 -5
  359. package/dist/{renderer-C0ds-UfM.mjs.map → renderer-DkPDYtD3.mjs.map} +1 -1
  360. package/dist/{renderer-BCLmYH4S.mjs → renderer-DqO9gBAi.mjs} +4 -4
  361. package/dist/{renderer-BCLmYH4S.mjs.map → renderer-DqO9gBAi.mjs.map} +1 -1
  362. package/dist/{renderer-BUwHWIf7.mjs → renderer-DuQMzR3v.mjs} +4 -4
  363. package/dist/{renderer-BUwHWIf7.mjs.map → renderer-DuQMzR3v.mjs.map} +1 -1
  364. package/dist/{renderer-DBtt-7wt.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
  365. package/dist/{renderer-DBtt-7wt.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
  366. package/dist/{renderer-f7A01ArI.mjs → renderer-DyMEAZIm.mjs} +5 -5
  367. package/dist/{renderer-f7A01ArI.mjs.map → renderer-DyMEAZIm.mjs.map} +1 -1
  368. package/dist/renderer-Dzca9Qba.mjs +5 -0
  369. package/dist/{renderer-DBKyuPl1.mjs → renderer-FCqOfN6n.mjs} +5 -5
  370. package/dist/{renderer-DBKyuPl1.mjs.map → renderer-FCqOfN6n.mjs.map} +1 -1
  371. package/dist/{renderer-D96Pu8yX.mjs → renderer-Fsdod0yZ.mjs} +5 -5
  372. package/dist/{renderer-D96Pu8yX.mjs.map → renderer-Fsdod0yZ.mjs.map} +1 -1
  373. package/dist/{renderer-Du8eOWWU.mjs → renderer-G3px5ODP.mjs} +4 -4
  374. package/dist/{renderer-Du8eOWWU.mjs.map → renderer-G3px5ODP.mjs.map} +1 -1
  375. package/dist/renderer-HRVvtc9c.mjs +5 -0
  376. package/dist/{renderer-CUPWHfEY.mjs → renderer-IMg0dK6K.mjs} +5 -5
  377. package/dist/{renderer-CUPWHfEY.mjs.map → renderer-IMg0dK6K.mjs.map} +1 -1
  378. package/dist/renderer-M3Qs4f1K.mjs +5 -0
  379. package/dist/renderer-NDHJt_Ae.mjs +5 -0
  380. package/dist/{renderer-y6k54AM6.mjs → renderer-PLoGrFGz.mjs} +4 -4
  381. package/dist/{renderer-y6k54AM6.mjs.map → renderer-PLoGrFGz.mjs.map} +1 -1
  382. package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
  383. package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
  384. package/dist/{renderer-CDky5Gva.mjs → renderer-VdTs-dqH.mjs} +4 -4
  385. package/dist/{renderer-CDky5Gva.mjs.map → renderer-VdTs-dqH.mjs.map} +1 -1
  386. package/dist/{renderer-QaN-aejD.mjs → renderer-VxVi_0c7.mjs} +3 -3
  387. package/dist/{renderer-QaN-aejD.mjs.map → renderer-VxVi_0c7.mjs.map} +1 -1
  388. package/dist/{renderer-BMLJgnbU.mjs → renderer-WVrUeiLZ.mjs} +3 -3
  389. package/dist/{renderer-BHLYKy8b.mjs → renderer-Z39F9QK5.mjs} +5 -5
  390. package/dist/{renderer-BHLYKy8b.mjs.map → renderer-Z39F9QK5.mjs.map} +1 -1
  391. package/dist/{renderer-DSbRWfgl.mjs → renderer-ZjSP5jw6.mjs} +3 -3
  392. package/dist/{renderer-DSbRWfgl.mjs.map → renderer-ZjSP5jw6.mjs.map} +1 -1
  393. package/dist/{renderer-CE83KHgr.mjs → renderer-fH9SCJC2.mjs} +3 -3
  394. package/dist/{renderer-CE83KHgr.mjs.map → renderer-fH9SCJC2.mjs.map} +1 -1
  395. package/dist/{renderer-Cy4a31rZ.mjs → renderer-gjT5v76-.mjs} +3 -3
  396. package/dist/{renderer-Cy4a31rZ.mjs.map → renderer-gjT5v76-.mjs.map} +1 -1
  397. package/dist/{renderer-C-z6bxj9.mjs → renderer-kP5Y282J.mjs} +5 -5
  398. package/dist/{renderer-C-z6bxj9.mjs.map → renderer-kP5Y282J.mjs.map} +1 -1
  399. package/dist/{renderer-BI8QhEj9.mjs → renderer-kkDfQ56G.mjs} +5 -5
  400. package/dist/{renderer-BI8QhEj9.mjs.map → renderer-kkDfQ56G.mjs.map} +1 -1
  401. package/dist/{renderer-DHUlVqST.mjs → renderer-l_U6kA8K.mjs} +3 -3
  402. package/dist/{renderer-DHUlVqST.mjs.map → renderer-l_U6kA8K.mjs.map} +1 -1
  403. package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
  404. package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
  405. package/dist/{renderer-C4vHq0X8.mjs → renderer-o_JK4YfO.mjs} +5 -5
  406. package/dist/{renderer-C4vHq0X8.mjs.map → renderer-o_JK4YfO.mjs.map} +1 -1
  407. package/dist/{renderer-CAi-lhR2.mjs → renderer-vwoyR8pW.mjs} +4 -4
  408. package/dist/{renderer-CAi-lhR2.mjs.map → renderer-vwoyR8pW.mjs.map} +1 -1
  409. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs → renderers-CP8CFWDs-DiX2Y4Qp.mjs} +4 -4
  410. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs.map → renderers-CP8CFWDs-DiX2Y4Qp.mjs.map} +1 -1
  411. package/dist/signals/index.d.mts +6 -6
  412. package/dist/signals/index.mjs +8 -8
  413. package/dist/{signals-BwdVfK3p.mjs → signals-Cf9mfNGE.mjs} +4 -4
  414. package/dist/{signals-BwdVfK3p.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
  415. package/dist/src-Ds9IAk5S.mjs +8373 -0
  416. package/dist/src-Ds9IAk5S.mjs.map +1 -0
  417. package/package.json +68 -58
  418. package/dist/dist-DMa2BbYs.mjs.map +0 -1
  419. package/dist/dist-hmWTJPik.mjs.map +0 -1
  420. package/dist/fonts-Da1JDKpc.mjs.map +0 -1
  421. package/dist/index-B0BZMhtw.d.mts.map +0 -1
  422. package/dist/index-CJkihekp.d.mts.map +0 -1
  423. package/dist/index-DGe83M-p.d.mts.map +0 -1
  424. package/dist/index.d.mts.map +0 -1
  425. package/dist/index.mjs.map +0 -1
  426. package/dist/preview/index.d.mts.map +0 -1
  427. package/dist/preview-5E4B96RD.mjs.map +0 -1
  428. package/dist/preview-engine/chunk-3T4LB4ZH.mjs +0 -3
  429. package/dist/preview-engine/chunk-E7DH7EPX.mjs +0 -1
  430. package/dist/preview-engine/chunk-PCWWKYFO.mjs +0 -1
  431. package/dist/preview-engine/chunk-RQLMW6MA.mjs +0 -4
  432. package/dist/preview-engine/chunk-XN56POGE.mjs +0 -1
  433. package/dist/preview-engine/renderers-2AD6AHAO.mjs +0 -1
  434. package/dist/preview-engine/renderers-37UYW266.mjs +0 -1
  435. package/dist/preview-engine/renderers-3YHETAPE.mjs +0 -1
  436. package/dist/preview-engine/renderers-43LBWRY2.mjs +0 -1
  437. package/dist/preview-engine/renderers-4I4UDLDR.mjs +0 -1
  438. package/dist/preview-engine/renderers-5EITT2FW.mjs +0 -1
  439. package/dist/preview-engine/renderers-7UKFQ75V.mjs +0 -1
  440. package/dist/preview-engine/renderers-AIRDDXRB.mjs +0 -1
  441. package/dist/preview-engine/renderers-BUOGMWAA.mjs +0 -1
  442. package/dist/preview-engine/renderers-C4XIAG3F.mjs +0 -1
  443. package/dist/preview-engine/renderers-ELARGDRC.mjs +0 -1
  444. package/dist/preview-engine/renderers-EU5VM2S2.mjs +0 -1
  445. package/dist/preview-engine/renderers-GEPP3YKK.mjs +0 -1
  446. package/dist/preview-engine/renderers-IQNZQWYU.mjs +0 -1
  447. package/dist/preview-engine/renderers-J6DEIWTU.mjs +0 -1
  448. package/dist/preview-engine/renderers-JQ7AI473.mjs +0 -228
  449. package/dist/preview-engine/renderers-JTVCE5PV.mjs +0 -1
  450. package/dist/preview-engine/renderers-KCNUETAD.mjs +0 -1
  451. package/dist/preview-engine/renderers-KKBHXAWS.mjs +0 -1
  452. package/dist/preview-engine/renderers-LER7SUT2.mjs +0 -1
  453. package/dist/preview-engine/renderers-MOERLDWF.mjs +0 -1
  454. package/dist/preview-engine/renderers-O57YIIAO.mjs +0 -1
  455. package/dist/preview-engine/renderers-OPUIAD7I.mjs +0 -1
  456. package/dist/preview-engine/renderers-PENUAXDD.mjs +0 -1
  457. package/dist/preview-engine/renderers-PFCI7ZFW.mjs +0 -1
  458. package/dist/preview-engine/renderers-Q4HDP2IE.mjs +0 -1
  459. package/dist/preview-engine/renderers-QMHUOKMM.mjs +0 -1
  460. package/dist/preview-engine/renderers-R26YPECG.mjs +0 -1
  461. package/dist/preview-engine/renderers-TAFDMFEA.mjs +0 -1
  462. package/dist/preview-engine/renderers-TMZLWQP2.mjs +0 -1
  463. package/dist/preview-engine/renderers-TP6ZMGU4.mjs +0 -1
  464. package/dist/preview-engine/renderers-TY63VTZB.mjs +0 -1
  465. package/dist/preview-engine/renderers-UBO4ZNE6.mjs +0 -1
  466. package/dist/preview-engine/renderers-UCNQ536S.mjs +0 -1
  467. package/dist/preview-engine/renderers-WOZQDE4A.mjs +0 -1
  468. package/dist/preview-engine/renderers-X2XGDF3R.mjs +0 -1
  469. package/dist/preview-engine/renderers-XG3BDROH.mjs +0 -1
  470. package/dist/preview-engine/renderers-XS4CFZWR.mjs +0 -1
  471. package/dist/preview-engine/renderers-ZQDMRWN7.mjs +0 -1
  472. package/dist/program-KwDdbC0-.mjs.map +0 -1
  473. package/dist/renderer-5C41E6gT.mjs +0 -5
  474. package/dist/renderer-6SXF9Ykm.mjs +0 -5
  475. package/dist/renderer-B2C2w3Wr.mjs +0 -5
  476. package/dist/renderer-B2QSfPYZ.mjs +0 -5
  477. package/dist/renderer-B5cQcMl1.mjs +0 -5
  478. package/dist/renderer-BDhD8Yab.mjs +0 -3
  479. package/dist/renderer-BSDdTHDh.mjs +0 -5
  480. package/dist/renderer-BTUjk8uY.mjs +0 -5
  481. package/dist/renderer-Bcey5Gvk.mjs +0 -5
  482. package/dist/renderer-Bd2MuOeJ.mjs +0 -5
  483. package/dist/renderer-Bd5A0zer.mjs +0 -5
  484. package/dist/renderer-CC-WlYa2.mjs +0 -5
  485. package/dist/renderer-Cb0qf1UG.mjs +0 -5
  486. package/dist/renderer-CfX13dgQ.mjs +0 -5
  487. package/dist/renderer-ChFkRLrv.mjs +0 -5
  488. package/dist/renderer-CjkfJj5R.mjs +0 -5
  489. package/dist/renderer-Ck7Lu6c9.mjs +0 -5
  490. package/dist/renderer-CuquqG_c.mjs +0 -5
  491. package/dist/renderer-Cwz2E4QD.mjs +0 -5
  492. package/dist/renderer-Czkt9YYp.mjs +0 -5
  493. package/dist/renderer-DFTIhSdJ.mjs +0 -5
  494. package/dist/renderer-DFaa-Ats.mjs +0 -5
  495. package/dist/renderer-DIHXKvPl.mjs +0 -5
  496. package/dist/renderer-DMzOqVM3.mjs +0 -5
  497. package/dist/renderer-DOId5U8x.mjs +0 -5
  498. package/dist/renderer-DQXFOup8.mjs +0 -5
  499. package/dist/renderer-DRt3BSTj.mjs +0 -5
  500. package/dist/renderer-Di_5vQ81.mjs +0 -6
  501. package/dist/renderer-DkmpsPIa.mjs +0 -5
  502. package/dist/renderer-Ds6wd9Gk.mjs +0 -5
  503. package/dist/renderer-DuuOlYIG.mjs +0 -3
  504. package/dist/renderer-Dv4p0lp9.mjs +0 -5
  505. package/dist/renderer-DzWoOlVc.mjs +0 -5
  506. package/dist/renderer-GbVNyv-E.mjs.map +0 -1
  507. package/dist/renderer-IOz63OWg.mjs +0 -5
  508. package/dist/renderer-JkSrsUa5.mjs +0 -5
  509. package/dist/renderer-Ocs1Djwu.mjs +0 -5
  510. package/dist/renderer-Wdn7m_uN.mjs +0 -5
  511. package/dist/renderer-mKpjaoE3.mjs +0 -5
  512. /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
  513. /package/dist/preview-engine/{chunk-Q4Z54DQ7.mjs → chunk-LXHECDOB.mjs} +0 -0
  514. /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DcOT5c0t.mjs","names":[],"sources":["../../../nodes/node-audio-compressor/dist/renderers-BorUA3F3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"ratio\",\n\t\"attack\",\n\t\"release\",\n\t\"knee\",\n\t\"makeupGain\"\n];\nconst COMPRESSOR_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n ratio : f32,\n attack : f32,\n release : f32,\n knee : f32,\n makeupGain : f32,\n hasThresholdSig : f32,\n hasRatioSig : f32,\n hasAttackSig : f32,\n hasReleaseSig : f32,\n hasKneeSig : f32,\n hasMakeupGainSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = envelope\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> ratioSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> kneeSignal : array<f32>;\n@group(0) @binding(9) var<storage, read> makeupGainSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n var envelope = state[0];\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effRatio = u.ratio;\n if (u.hasRatioSig > 0.5f) {\n effRatio = ratioSignal[index];\n }\n effRatio = clamp(effRatio, 1.0f, 100.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.001f, 10.0f);\n\n var effKnee = u.knee;\n if (u.hasKneeSig > 0.5f) {\n effKnee = kneeSignal[index];\n }\n effKnee = clamp(effKnee, 0.0f, 40.0f);\n\n var effMakeupGain = u.makeupGain;\n if (u.hasMakeupGainSig > 0.5f) {\n effMakeupGain = makeupGainSignal[index];\n }\n effMakeupGain = clamp(effMakeupGain, -60.0f, 36.0f);\n\n // 2. Safe Attack / Release Coefficients\n let attackCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effAttack)), 0.00001f, 1.0f);\n let releaseCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effRelease)), 0.00001f, 1.0f);\n\n // 3. Peak Detection with NaN / Inf sanitization\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) {\n val = 0.0f;\n }\n if (val > peak) {\n peak = val;\n }\n }\n \n // 4. Convert Peak to dBFS\n let dB = 20.0f * log10(max(peak, 1e-9f));\n\n // 5. Compute target reduction (soft-knee & ratio)\n var targetReductiondB = 0.0f;\n if (effKnee > 0.0f) {\n let x = dB - effThreshold;\n if (x <= -effKnee / 2.0f) {\n targetReductiondB = 0.0f;\n } else if (x >= effKnee / 2.0f) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n } else {\n let kneeTerm = x + effKnee / 2.0f;\n targetReductiondB = ((kneeTerm * kneeTerm) / (2.0f * effKnee)) * (1.0f - 1.0f / effRatio);\n }\n } else {\n if (dB > effThreshold) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n }\n }\n\n targetReductiondB = clamp(targetReductiondB, 0.0f, 120.0f);\n\n // 6. Envelope Smoothing\n let targetGaindB = -targetReductiondB;\n if (targetGaindB < envelope) {\n envelope += (targetGaindB - envelope) * attackCoeff;\n } else {\n envelope += (targetGaindB - envelope) * releaseCoeff;\n }\n\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n envelope = clamp(envelope, -120.0f, 0.0f);\n\n // 7. Apply linear gain and soft clipping\n let totalGaindB = clamp(envelope + effMakeupGain, -120.0f, 36.0f);\n let gainLinear = clamp(pow(10.0f, totalGaindB / 20.0f), 0.0f, 63.1f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gainLinear;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n \n // Soft clipping at ±1.0 with smooth tanh transition starting at ±0.9\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n \n outputChannels[sampleIndex] = outVal;\n }\n }\n\n if (is_nan_or_inf(envelope)) {\n state[0] = 0.0f;\n } else {\n state[0] = clamp(envelope, -120.0f, 0.0f);\n }\n}\n`;\nconst compressorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Dynamics Compressor.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -24);\n\tconst ratio = resolveNumber(op.ratio, 4);\n\tconst attack = resolveNumber(op.attack, .003);\n\tconst release = resolveNumber(op.release, .25);\n\tconst knee = resolveNumber(op.knee, 6);\n\tconst makeupGain = resolveNumber(op.makeupGain, 0);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasRatioSig = isHandleConnected(op, \"ratioHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasKneeSig = isHandleConnected(op, \"kneeHandleId\") ? 1 : 0;\n\tconst hasMakeupGainSig = isHandleConnected(op, \"makeupGainHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst nodeId = op.id || \"audio-compressor\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, COMPRESSOR_SHADER_TEMPLATE, (t) => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tratio,\n\t\tattack,\n\t\trelease,\n\t\tknee,\n\t\tmakeupGain,\n\t\thasThresholdSig,\n\t\thasRatioSig,\n\t\thasAttackSig,\n\t\thasReleaseSig,\n\t\thasKneeSig,\n\t\thasMakeupGainSig,\n\t\tt,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\n\t], 20, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: compressorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BorUA3F3.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4LzC,MAAM,2BAA2B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACnF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,wDAAwD;CAC1F,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,QAAQ,cAAc,GAAG,OAAO,EAAE;CACxC,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,UAAU,cAAc,GAAG,SAAS,IAAI;CAC9C,MAAM,OAAO,cAAc,GAAG,MAAM,EAAE;CACtC,MAAM,aAAa,cAAc,GAAG,YAAY,EAAE;CAClD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,mBAAmB,kBAAkB,IAAI,qBAAqB,GAAG,IAAI;CAC3E,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,6BAA6B,MAAM;EACzI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,0BAA0B,CAAC"}
1
+ {"version":3,"file":"renderer-Bo_d7h86.mjs","names":[],"sources":["../../../nodes/node-audio-compressor/dist/renderers-BorUA3F3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"ratio\",\n\t\"attack\",\n\t\"release\",\n\t\"knee\",\n\t\"makeupGain\"\n];\nconst COMPRESSOR_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n ratio : f32,\n attack : f32,\n release : f32,\n knee : f32,\n makeupGain : f32,\n hasThresholdSig : f32,\n hasRatioSig : f32,\n hasAttackSig : f32,\n hasReleaseSig : f32,\n hasKneeSig : f32,\n hasMakeupGainSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = envelope\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> ratioSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> kneeSignal : array<f32>;\n@group(0) @binding(9) var<storage, read> makeupGainSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n var envelope = state[0];\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effRatio = u.ratio;\n if (u.hasRatioSig > 0.5f) {\n effRatio = ratioSignal[index];\n }\n effRatio = clamp(effRatio, 1.0f, 100.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.001f, 10.0f);\n\n var effKnee = u.knee;\n if (u.hasKneeSig > 0.5f) {\n effKnee = kneeSignal[index];\n }\n effKnee = clamp(effKnee, 0.0f, 40.0f);\n\n var effMakeupGain = u.makeupGain;\n if (u.hasMakeupGainSig > 0.5f) {\n effMakeupGain = makeupGainSignal[index];\n }\n effMakeupGain = clamp(effMakeupGain, -60.0f, 36.0f);\n\n // 2. Safe Attack / Release Coefficients\n let attackCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effAttack)), 0.00001f, 1.0f);\n let releaseCoeff = clamp(1.0f - exp(-1.0f / (u.sampleRate * effRelease)), 0.00001f, 1.0f);\n\n // 3. Peak Detection with NaN / Inf sanitization\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) {\n val = 0.0f;\n }\n if (val > peak) {\n peak = val;\n }\n }\n \n // 4. Convert Peak to dBFS\n let dB = 20.0f * log10(max(peak, 1e-9f));\n\n // 5. Compute target reduction (soft-knee & ratio)\n var targetReductiondB = 0.0f;\n if (effKnee > 0.0f) {\n let x = dB - effThreshold;\n if (x <= -effKnee / 2.0f) {\n targetReductiondB = 0.0f;\n } else if (x >= effKnee / 2.0f) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n } else {\n let kneeTerm = x + effKnee / 2.0f;\n targetReductiondB = ((kneeTerm * kneeTerm) / (2.0f * effKnee)) * (1.0f - 1.0f / effRatio);\n }\n } else {\n if (dB > effThreshold) {\n targetReductiondB = (dB - effThreshold) * (1.0f - 1.0f / effRatio);\n }\n }\n\n targetReductiondB = clamp(targetReductiondB, 0.0f, 120.0f);\n\n // 6. Envelope Smoothing\n let targetGaindB = -targetReductiondB;\n if (targetGaindB < envelope) {\n envelope += (targetGaindB - envelope) * attackCoeff;\n } else {\n envelope += (targetGaindB - envelope) * releaseCoeff;\n }\n\n if (is_nan_or_inf(envelope)) {\n envelope = 0.0f;\n }\n envelope = clamp(envelope, -120.0f, 0.0f);\n\n // 7. Apply linear gain and soft clipping\n let totalGaindB = clamp(envelope + effMakeupGain, -120.0f, 36.0f);\n let gainLinear = clamp(pow(10.0f, totalGaindB / 20.0f), 0.0f, 63.1f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gainLinear;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n \n // Soft clipping at ±1.0 with smooth tanh transition starting at ±0.9\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n \n outputChannels[sampleIndex] = outVal;\n }\n }\n\n if (is_nan_or_inf(envelope)) {\n state[0] = 0.0f;\n } else {\n state[0] = clamp(envelope, -120.0f, 0.0f);\n }\n}\n`;\nconst compressorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Dynamics Compressor.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -24);\n\tconst ratio = resolveNumber(op.ratio, 4);\n\tconst attack = resolveNumber(op.attack, .003);\n\tconst release = resolveNumber(op.release, .25);\n\tconst knee = resolveNumber(op.knee, 6);\n\tconst makeupGain = resolveNumber(op.makeupGain, 0);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasRatioSig = isHandleConnected(op, \"ratioHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasKneeSig = isHandleConnected(op, \"kneeHandleId\") ? 1 : 0;\n\tconst hasMakeupGainSig = isHandleConnected(op, \"makeupGainHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst nodeId = op.id || \"audio-compressor\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, COMPRESSOR_SHADER_TEMPLATE, (t) => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tratio,\n\t\tattack,\n\t\trelease,\n\t\tknee,\n\t\tmakeupGain,\n\t\thasThresholdSig,\n\t\thasRatioSig,\n\t\thasAttackSig,\n\t\thasReleaseSig,\n\t\thasKneeSig,\n\t\thasMakeupGainSig,\n\t\tt,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\n\t], 20, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: compressorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BorUA3F3.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4LzC,MAAM,2BAA2B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACnF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,wDAAwD;CAC1F,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,QAAQ,cAAc,GAAG,OAAO,EAAE;CACxC,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,UAAU,cAAc,GAAG,SAAS,IAAI;CAC9C,MAAM,OAAO,cAAc,GAAG,MAAM,EAAE;CACtC,MAAM,aAAa,cAAc,GAAG,YAAY,EAAE;CAClD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,mBAAmB,kBAAkB,IAAI,qBAAqB,GAAG,IAAI;CAC3E,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,6BAA6B,MAAM;EACzI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-DBWkkSvJ.mjs";
3
+ import { t as renderers_default } from "./renderer-D2ru2Afi.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-DBWkkSvJ.mjs";
3
+ import { t as renderers_default } from "./renderer-B31zMDE8.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,3 @@
1
+ import { t as renderers_default } from "./renderer-nLPfvY3-.mjs";
2
+
3
+ export { renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { cn as resolveNumber } from "./dist-TrtLGPvc.mjs";
2
- import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-hmWTJPik.mjs";
1
+ import { cn as resolveNumber } from "./dist-DFeF-ygz.mjs";
2
+ import { n as defineRenderer, r as isHandleConnected } from "./renderer-C9r0-KY4.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-DBWkkSvJ.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs
6
6
  const PARAM_ORDER = [
@@ -279,4 +279,4 @@ var renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor
279
279
 
280
280
  //#endregion
281
281
  export { renderers_default as t };
282
- //# sourceMappingURL=renderer-C4xvz_Ft.mjs.map
282
+ //# sourceMappingURL=renderer-Bw5YP2Db.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-C4xvz_Ft.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(op, \"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(op, \"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-AuTJmGew.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
1
+ {"version":3,"file":"renderer-Bw5YP2Db.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-AuTJmGew.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst hasThresholdSig = isHandleConnected(op, \"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(op, \"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(op, \"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(op, \"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(op, \"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-AuTJmGew.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,eAAe,kBAAkB,IAAI,iBAAiB,GAAG,IAAI;CACnE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,gBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;CACrE,MAAM,cAAc,kBAAkB,IAAI,gBAAgB,GAAG,IAAI;CACjE,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-DBWkkSvJ.mjs";
3
+ import { t as renderers_default } from "./renderer-kP5Y282J.mjs";
4
+
5
+ export { renderers_default as default };
@@ -247,6 +247,15 @@ const webgpuRegistry = (() => {
247
247
  function registerWebGPURenderer(op, renderer) {
248
248
  webgpuRegistry.register(op, renderer);
249
249
  }
250
+ registerWebGPURenderer("TextureSource", (args) => {
251
+ const op = args.props.virtualMedia.operation;
252
+ if (op?.sourceTexture) args.ctx.renderer.drawTexture(args.pass, op.sourceTexture, {
253
+ x: 0,
254
+ y: 0,
255
+ width: args.targetWidth,
256
+ height: args.targetHeight
257
+ }, { opacity: Number(op.opacity ?? 1) });
258
+ });
250
259
  var AudioProcessorRegistry = class {
251
260
  processors = /* @__PURE__ */ new Map();
252
261
  register(opType, processor) {
@@ -265,4 +274,4 @@ const audioRegistry = (() => {
265
274
 
266
275
  //#endregion
267
276
  export { resolveFrameNumber as a, solveHomography as c, registerWebGPURenderer as i, unwrapFrameParam as l, defineRenderer as n, resolveHandleParam as o, isHandleConnected as r, resolveSignalField as s, audioRegistry as t, webgpuRegistry as u };
268
- //# sourceMappingURL=renderer-BSitV56h.mjs.map
277
+ //# sourceMappingURL=renderer-C9r0-KY4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BSitV56h.mjs","names":[],"sources":["../../node-sdk/dist/renderer.mjs"],"sourcesContent":["import { isSignal, resolveBoolean, resolveNumber, resolveParam, resolveString } from \"@framefields/core\";\n\n//#region renderer/homography.ts\n/**\n* Computes an 8-parameter 3x3 homography matrix mapping destination coordinates (quad)\n* to normalized source coordinates (unit square [0, 1]^2).\n*\n* The homography H maps destination (x, y) to source (u, v):\n* u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n* v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n*\n* Resulting array: [h00, h01, h02, h10, h11, h12, h20, h21, 1.0]\n*/\nfunction solveHomography(dstPoints, srcPoints = [\n\t{\n\t\tx: 0,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 0,\n\t\ty: 1\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 1\n\t}\n]) {\n\tconst A = [];\n\tconst B = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tconst xi = dstPoints[i]?.x ?? 0;\n\t\tconst yi = dstPoints[i]?.y ?? 0;\n\t\tconst ui = srcPoints[i]?.x ?? 0;\n\t\tconst vi = srcPoints[i]?.y ?? 0;\n\t\tA.push([\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-xi * ui,\n\t\t\t-yi * ui\n\t\t]);\n\t\tB.push(ui);\n\t\tA.push([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t-xi * vi,\n\t\t\t-yi * vi\n\t\t]);\n\t\tB.push(vi);\n\t}\n\tconst n = 8;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxRow = i;\n\t\tlet maxVal = Math.abs(A[i][i]);\n\t\tfor (let k = i + 1; k < n; k++) if (Math.abs(A[k][i]) > maxVal) {\n\t\t\tmaxVal = Math.abs(A[k][i]);\n\t\t\tmaxRow = k;\n\t\t}\n\t\tconst tempRow = A[i];\n\t\tA[i] = A[maxRow];\n\t\tA[maxRow] = tempRow;\n\t\tconst tempB = B[i];\n\t\tB[i] = B[maxRow];\n\t\tB[maxRow] = tempB;\n\t\tconst pivot = A[i][i];\n\t\tif (Math.abs(pivot) < 1e-12) A[i][i] = pivot < 0 ? -1e-12 : 1e-12;\n\t\tfor (let k = i + 1; k < n; k++) {\n\t\t\tconst factor = A[k][i] / A[i][i];\n\t\t\tfor (let j = i; j < n; j++) A[k][j] -= factor * A[i][j];\n\t\t\tB[k] -= factor * B[i];\n\t\t}\n\t}\n\tconst h = new Array(8).fill(0);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i][j] * h[j];\n\t\th[i] = sum / A[i][i];\n\t}\n\treturn [\n\t\th[0],\n\t\th[1],\n\t\th[2],\n\t\th[3],\n\t\th[4],\n\t\th[5],\n\t\th[6],\n\t\th[7],\n\t\t1\n\t];\n}\n\n//#endregion\n//#region renderer/index.ts\n/**\n* A numeric node parameter at `frame`: a number, a signal-like `get(ctx)` or\n* `{ value }`, a `(ctx) => number` function, or anything `Number()` accepts;\n* `fallback` when none of those yields a finite number.\n*/\nfunction resolveFrameNumber(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* A static node parameter at `frame`: calls `get(ctx)` / `(frame, fps)`\n* functions and reads `{ value }` wrappers, keeping a signal's GPU texture\n* binding when it has one. Anything else is returned as-is.\n*/\nfunction unwrapFrameParam(raw, frame, fps) {\n\tif (raw === void 0 || raw === null) return { value: raw };\n\tif (typeof raw === \"function\") return { value: raw(frame, fps) };\n\tif (typeof raw !== \"object\") return { value: raw };\n\tconst obj = raw;\n\tif (typeof obj.get === \"function\") return { value: obj.get({\n\t\tframe,\n\t\tfps\n\t}) };\n\tif (\"value\" in obj) {\n\t\tconst sig = raw;\n\t\treturn {\n\t\t\tvalue: sig.value,\n\t\t\tgpuTextureView: sig.gpuBinding?.textureView\n\t\t};\n\t}\n\treturn { value: raw };\n}\n/**\n* A numeric parameter fed through `handleId`: a connected Number (clamped), a\n* connected Signal (sampled on the GPU, `val` stays `fallbackVal`), or else\n* `fallbackVal` clamped to [clampMin, clampMax].\n*/\nfunction resolveHandleParam(inputs, handleId, fallbackVal, clampMin, clampMax) {\n\tconst clamp = (v) => Math.max(clampMin, Math.min(clampMax, v));\n\tconst input = handleId ? inputs?.[handleId] : void 0;\n\tif (input?.connectionValid) {\n\t\tconst outputItem = input.outputItem;\n\t\tif (outputItem?.type === \"Number\") return {\n\t\t\tval: clamp(typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\tval: fallbackVal,\n\t\t\thasStaticSig: true,\n\t\t\tsd: outputItem.data,\n\t\t\thandleId\n\t\t};\n\t}\n\treturn {\n\t\tval: clamp(fallbackVal),\n\t\thasStaticSig: false,\n\t\tsd: null,\n\t\thandleId\n\t};\n}\n/**\n* A numeric field `fieldName` of a node operation, fed through its\n* `${fieldName}HandleId` input: a connected Signal/Numeric (`sd`, sampled on\n* the GPU; `value` is its offset), a connected Number, or the operation's own\n* value — each clamped to [minVal, maxVal].\n*/\nfunction resolveSignalField(op, fieldName, defaultValue, minVal = Number.NEGATIVE_INFINITY, maxVal = Number.POSITIVE_INFINITY) {\n\tconst clamp = (v) => Math.max(minVal, Math.min(maxVal, v));\n\tconst fields = op;\n\tconst handleId = fields[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst outputType = signalInput?.connectionValid ? signalInput.outputItem?.type : void 0;\n\tconst hasSignal = outputType === \"Signal\" || outputType === \"Numeric\";\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) {\n\t\tconst raw = outputType === \"Number\" ? signalInput?.outputItem?.data : fields[fieldName];\n\t\tvalue = clamp(Number(raw ?? defaultValue));\n\t} else if (sd) value = clamp(Number(sd.offset ?? defaultValue));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\n/**\n* Whether the handle whose id is stored at `op[handleIdKey]` has a valid\n* Signal or Number connection.\n*/\nfunction isHandleConnected(op, handleIdKey) {\n\tconst handleId = op[handleIdKey];\n\tif (typeof handleId !== \"string\" || !handleId) return false;\n\tconst input = op.inputs?.[handleId];\n\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n}\nfunction defineRenderer(plugin) {\n\treturn Object.freeze(plugin);\n}\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"framefields.webgpuRegistry\");\nvar WebGPURegistry = class {\n\trenderers = /* @__PURE__ */ new Map();\n\tregister(op, renderer) {\n\t\tthis.renderers.set(op, renderer);\n\t}\n\tget(op) {\n\t\treturn this.renderers.get(op);\n\t}\n\thas(op) {\n\t\treturn this.renderers.has(op);\n\t}\n};\nconst webgpuRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_WEBGPU_REGISTRY_KEY]) g[GLOBAL_WEBGPU_REGISTRY_KEY] = new WebGPURegistry();\n\treturn g[GLOBAL_WEBGPU_REGISTRY_KEY];\n})();\nfunction registerWebGPURenderer(op, renderer) {\n\twebgpuRegistry.register(op, renderer);\n}\nvar AudioProcessorRegistry = class {\n\tprocessors = /* @__PURE__ */ new Map();\n\tregister(opType, processor) {\n\t\tthis.processors.set(opType, processor);\n\t}\n\tget(opType) {\n\t\treturn this.processors.get(opType) || null;\n\t}\n};\nconst GLOBAL_AUDIO_KEY = Symbol.for(\"framefields.audioRegistry\");\nconst audioRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_AUDIO_KEY]) g[GLOBAL_AUDIO_KEY] = new AudioProcessorRegistry();\n\treturn g[GLOBAL_AUDIO_KEY];\n})();\n\n//#endregion\nexport { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=renderer.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-C9r0-KY4.mjs","names":[],"sources":["../../node-sdk/dist/renderer.mjs"],"sourcesContent":["import { isSignal, resolveBoolean, resolveNumber, resolveParam, resolveString } from \"@framefields/core\";\n\n//#region renderer/homography.ts\n/**\n* Computes an 8-parameter 3x3 homography matrix mapping destination coordinates (quad)\n* to normalized source coordinates (unit square [0, 1]^2).\n*\n* The homography H maps destination (x, y) to source (u, v):\n* u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n* v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n*\n* Resulting array: [h00, h01, h02, h10, h11, h12, h20, h21, 1.0]\n*/\nfunction solveHomography(dstPoints, srcPoints = [\n\t{\n\t\tx: 0,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 0,\n\t\ty: 1\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 1\n\t}\n]) {\n\tconst A = [];\n\tconst B = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tconst xi = dstPoints[i]?.x ?? 0;\n\t\tconst yi = dstPoints[i]?.y ?? 0;\n\t\tconst ui = srcPoints[i]?.x ?? 0;\n\t\tconst vi = srcPoints[i]?.y ?? 0;\n\t\tA.push([\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-xi * ui,\n\t\t\t-yi * ui\n\t\t]);\n\t\tB.push(ui);\n\t\tA.push([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t-xi * vi,\n\t\t\t-yi * vi\n\t\t]);\n\t\tB.push(vi);\n\t}\n\tconst n = 8;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxRow = i;\n\t\tlet maxVal = Math.abs(A[i][i]);\n\t\tfor (let k = i + 1; k < n; k++) if (Math.abs(A[k][i]) > maxVal) {\n\t\t\tmaxVal = Math.abs(A[k][i]);\n\t\t\tmaxRow = k;\n\t\t}\n\t\tconst tempRow = A[i];\n\t\tA[i] = A[maxRow];\n\t\tA[maxRow] = tempRow;\n\t\tconst tempB = B[i];\n\t\tB[i] = B[maxRow];\n\t\tB[maxRow] = tempB;\n\t\tconst pivot = A[i][i];\n\t\tif (Math.abs(pivot) < 1e-12) A[i][i] = pivot < 0 ? -1e-12 : 1e-12;\n\t\tfor (let k = i + 1; k < n; k++) {\n\t\t\tconst factor = A[k][i] / A[i][i];\n\t\t\tfor (let j = i; j < n; j++) A[k][j] -= factor * A[i][j];\n\t\t\tB[k] -= factor * B[i];\n\t\t}\n\t}\n\tconst h = new Array(8).fill(0);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i][j] * h[j];\n\t\th[i] = sum / A[i][i];\n\t}\n\treturn [\n\t\th[0],\n\t\th[1],\n\t\th[2],\n\t\th[3],\n\t\th[4],\n\t\th[5],\n\t\th[6],\n\t\th[7],\n\t\t1\n\t];\n}\n\n//#endregion\n//#region renderer/index.ts\n/**\n* A numeric node parameter at `frame`: a number, a signal-like `get(ctx)` or\n* `{ value }`, a `(ctx) => number` function, or anything `Number()` accepts;\n* `fallback` when none of those yields a finite number.\n*/\nfunction resolveFrameNumber(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* A static node parameter at `frame`: calls `get(ctx)` / `(frame, fps)`\n* functions and reads `{ value }` wrappers, keeping a signal's GPU texture\n* binding when it has one. Anything else is returned as-is.\n*/\nfunction unwrapFrameParam(raw, frame, fps) {\n\tif (raw === void 0 || raw === null) return { value: raw };\n\tif (typeof raw === \"function\") return { value: raw(frame, fps) };\n\tif (typeof raw !== \"object\") return { value: raw };\n\tconst obj = raw;\n\tif (typeof obj.get === \"function\") return { value: obj.get({\n\t\tframe,\n\t\tfps\n\t}) };\n\tif (\"value\" in obj) {\n\t\tconst sig = raw;\n\t\treturn {\n\t\t\tvalue: sig.value,\n\t\t\tgpuTextureView: sig.gpuBinding?.textureView\n\t\t};\n\t}\n\treturn { value: raw };\n}\n/**\n* A numeric parameter fed through `handleId`: a connected Number (clamped), a\n* connected Signal (sampled on the GPU, `val` stays `fallbackVal`), or else\n* `fallbackVal` clamped to [clampMin, clampMax].\n*/\nfunction resolveHandleParam(inputs, handleId, fallbackVal, clampMin, clampMax) {\n\tconst clamp = (v) => Math.max(clampMin, Math.min(clampMax, v));\n\tconst input = handleId ? inputs?.[handleId] : void 0;\n\tif (input?.connectionValid) {\n\t\tconst outputItem = input.outputItem;\n\t\tif (outputItem?.type === \"Number\") return {\n\t\t\tval: clamp(typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\tval: fallbackVal,\n\t\t\thasStaticSig: true,\n\t\t\tsd: outputItem.data,\n\t\t\thandleId\n\t\t};\n\t}\n\treturn {\n\t\tval: clamp(fallbackVal),\n\t\thasStaticSig: false,\n\t\tsd: null,\n\t\thandleId\n\t};\n}\n/**\n* A numeric field `fieldName` of a node operation, fed through its\n* `${fieldName}HandleId` input: a connected Signal/Numeric (`sd`, sampled on\n* the GPU; `value` is its offset), a connected Number, or the operation's own\n* value — each clamped to [minVal, maxVal].\n*/\nfunction resolveSignalField(op, fieldName, defaultValue, minVal = Number.NEGATIVE_INFINITY, maxVal = Number.POSITIVE_INFINITY) {\n\tconst clamp = (v) => Math.max(minVal, Math.min(maxVal, v));\n\tconst fields = op;\n\tconst handleId = fields[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst outputType = signalInput?.connectionValid ? signalInput.outputItem?.type : void 0;\n\tconst hasSignal = outputType === \"Signal\" || outputType === \"Numeric\";\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) {\n\t\tconst raw = outputType === \"Number\" ? signalInput?.outputItem?.data : fields[fieldName];\n\t\tvalue = clamp(Number(raw ?? defaultValue));\n\t} else if (sd) value = clamp(Number(sd.offset ?? defaultValue));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\n/**\n* Whether the handle whose id is stored at `op[handleIdKey]` has a valid\n* Signal or Number connection.\n*/\nfunction isHandleConnected(op, handleIdKey) {\n\tconst handleId = op[handleIdKey];\n\tif (typeof handleId !== \"string\" || !handleId) return false;\n\tconst input = op.inputs?.[handleId];\n\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n}\nfunction defineRenderer(plugin) {\n\treturn Object.freeze(plugin);\n}\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"framefields.webgpuRegistry\");\nvar WebGPURegistry = class {\n\trenderers = /* @__PURE__ */ new Map();\n\tregister(op, renderer) {\n\t\tthis.renderers.set(op, renderer);\n\t}\n\tget(op) {\n\t\treturn this.renderers.get(op);\n\t}\n\thas(op) {\n\t\treturn this.renderers.has(op);\n\t}\n};\nconst webgpuRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_WEBGPU_REGISTRY_KEY]) g[GLOBAL_WEBGPU_REGISTRY_KEY] = new WebGPURegistry();\n\treturn g[GLOBAL_WEBGPU_REGISTRY_KEY];\n})();\nfunction registerWebGPURenderer(op, renderer) {\n\twebgpuRegistry.register(op, renderer);\n}\nregisterWebGPURenderer(\"TextureSource\", (args) => {\n\tconst op = args.props.virtualMedia.operation;\n\tif (op?.sourceTexture) args.ctx.renderer.drawTexture(args.pass, op.sourceTexture, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: args.targetWidth,\n\t\theight: args.targetHeight\n\t}, { opacity: Number(op.opacity ?? 1) });\n});\nvar AudioProcessorRegistry = class {\n\tprocessors = /* @__PURE__ */ new Map();\n\tregister(opType, processor) {\n\t\tthis.processors.set(opType, processor);\n\t}\n\tget(opType) {\n\t\treturn this.processors.get(opType) || null;\n\t}\n};\nconst GLOBAL_AUDIO_KEY = Symbol.for(\"framefields.audioRegistry\");\nconst audioRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_AUDIO_KEY]) g[GLOBAL_AUDIO_KEY] = new AudioProcessorRegistry();\n\treturn g[GLOBAL_AUDIO_KEY];\n})();\n\n//#endregion\nexport { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=renderer.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import "./dist-hmWTJPik.mjs";
4
- import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CHIgM_YH.mjs";
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
3
+ import "./dist-DBWkkSvJ.mjs";
4
+ import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Dq_uI_00.mjs";
5
5
 
6
6
  //#region ../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs
7
7
  const COLOR_SPACE_MAP = {
@@ -203,4 +203,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURe
203
203
 
204
204
  //#endregion
205
205
  export { ChannelSplitterWebGPURenderer, renderers_default as default };
206
- //# sourceMappingURL=renderer-B4jxP8vF.mjs.map
206
+ //# sourceMappingURL=renderer-CDX2f82b.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-B4jxP8vF.mjs","names":[],"sources":["../../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_SPLITTER = `\nstruct SplitterUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\tchannelIndex : f32, // 0=Ch1, 1=Ch2, 2=Ch3, 3=Ch4\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SplitterUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn srgb2lin(v: f32) -> f32 {\n\tlet cv = clamp(v, 0.0, 1.0);\n\treturn select(cv / 12.92, pow((cv + 0.055) / 1.055, 2.4), cv > 0.04045);\n}\n\nfn lab_f(t: f32) -> f32 {\n\treturn select(pow(t, 1.0 / 3.0), (7.787 * t) + (16.0 / 116.0), t <= 0.008856);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(srcTex, srcSamp, in.uv);\n\tlet cs = u32(u.colorSpace + 0.5);\n\tlet idx = u32(u.channelIndex + 0.5);\n\n\tvar val: f32 = 0.0;\n\n\tif (cs == 0u) { // RGBA\n\t\tif (idx == 0u) { val = c.r; }\n\t\telse if (idx == 1u) { val = c.g; }\n\t\telse if (idx == 2u) { val = c.b; }\n\t\telse { val = c.a; }\n\t} else if (cs == 1u) { // HSLA\n\t\tlet maxV = max(c.r, max(c.g, c.b));\n\t\tlet minV = min(c.r, min(c.g, c.b));\n\t\tlet d = maxV - minV;\n\t\tlet L = (maxV + minV) * 0.5;\n\t\tlet S = select(select(d / (2.0 - maxV - minV), d / (maxV + minV), L < 0.5), 0.0, d < 0.00001);\n\t\tvar H: f32 = 0.0;\n\t\tif (d > 0.00001) {\n\t\t\tif (maxV == c.r) {\n\t\t\t\tH = ((c.g - c.b) / d + select(0.0, 6.0, c.g < c.b)) / 6.0;\n\t\t\t} else if (maxV == c.g) {\n\t\t\t\tH = ((c.b - c.r) / d + 2.0) / 6.0;\n\t\t\t} else {\n\t\t\t\tH = ((c.r - c.g) / d + 4.0) / 6.0;\n\t\t\t}\n\t\t}\n\t\tif (idx == 0u) { val = H; }\n\t\telse if (idx == 1u) { val = S; }\n\t\telse if (idx == 2u) { val = L; }\n\t\telse { val = c.a; }\n\t} else if (cs == 2u) { // CMYK\n\t\tlet K = 1.0 - max(c.r, max(c.g, c.b));\n\t\tif (K >= 1.0 - 0.00001) {\n\t\t\tval = select(0.0, 1.0, idx == 3u);\n\t\t} else {\n\t\t\tlet denom = 1.0 - K;\n\t\t\tif (idx == 0u) { val = (1.0 - c.r - K) / denom; }\n\t\t\telse if (idx == 1u) { val = (1.0 - c.g - K) / denom; }\n\t\t\telse if (idx == 2u) { val = (1.0 - c.b - K) / denom; }\n\t\t\telse { val = K; }\n\t\t}\n\t} else { // LAB\n\t\tlet lr = srgb2lin(c.r);\n\t\tlet lg = srgb2lin(c.g);\n\t\tlet lb = srgb2lin(c.b);\n\n\t\tlet X = lr * 0.4124564 + lg * 0.3575761 + lb * 0.1804375;\n\t\tlet Y = lr * 0.2126729 + lg * 0.7151522 + lb * 0.0721750;\n\t\tlet Z = lr * 0.0193339 + lg * 0.1191920 + lb * 0.9503041;\n\n\t\tlet x = X / 0.95047;\n\t\tlet y = Y / 1.00000;\n\t\tlet z = Z / 1.08883;\n\n\t\tlet fx = lab_f(x);\n\t\tlet fy = lab_f(y);\n\t\tlet fz = lab_f(z);\n\n\t\tlet L_star = 116.0 * fy - 16.0;\n\t\tlet a_star = 500.0 * (fx - fy);\n\t\tlet b_star = 200.0 * (fy - fz);\n\n\t\tlet L_norm = clamp(L_star / 100.0, 0.0, 1.0);\n\t\tlet a_norm = clamp((a_star + 128.0) / 255.0, 0.0, 1.0);\n\t\tlet b_norm = clamp((b_star + 128.0) / 255.0, 0.0, 1.0);\n\n\t\tif (idx == 0u) { val = L_norm; }\n\t\telse if (idx == 1u) { val = a_norm; }\n\t\telse if (idx == 2u) { val = b_norm; }\n\t\telse { val = c.a; }\n\t}\n\n\tval = clamp(val, 0.0, 1.0);\n\treturn vec4<f32>(val, val, val, 1.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `splitter_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelSplitterShader\",\n\t\t\tcode: WGSL_CHANNEL_SPLITTER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelSplitterPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelSplitterWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetTexture, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelSplitter\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst { view: srcView } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\targs.pass.end();\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst channelIndex = op.channelIndex ?? 0;\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = channelIndex;\n\tuniformData[2] = 0;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: srcView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURenderer });\n\n//#endregion\nexport { ChannelSplitterWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CBDMTYgr.mjs.map"],"mappings":";;;;;;AAIA,MAAM,kBAAkB;CACvB,MAAM;CACN,MAAM;CACN,MAAM;CACN,KAAK;CACL;AACD,MAAM,wBAAwB;;;;;;;;;;;EAW5B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,cAAc,IAAI,aAAa,EAAE;AACvC,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;AAChB,OAAM;EACL,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;EAC3D,eAAe,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;EACtE,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,YAAY,QAAQ,QAAQ;CACpC,MAAM,YAAY,iBAAiB,OAAO;CAC1C,MAAM,MAAM,YAAY;CACxB,IAAI,WAAW,UAAU,cAAc,IAAI,IAAI;AAC/C,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;EACF,MAAM,SAAS,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,UAAU,eAAe,UAAU,cAAc,EAAE,CAAC;AACpH,aAAW,OAAO,qBAAqB;GACtC,OAAO;GACP;GACA,QAAQ;IACP;IACA,YAAY;IACZ;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,YAAU,cAAc,IAAI,KAAK,SAAS;;AAE3C,QAAO;EACN;EACA;EACA;;AAEF,MAAM,gCAAgC,OAAO,SAAS;CACrD,MAAM,EAAE,KAAK,MAAM,eAAe,UAAU;CAC5C,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,qBAAqB,CAAC,GAAI;CACzC,MAAM,cAAc,MAAM,aAAa,WAAW;AAClD,KAAI,CAAC,YAAa;AAClB,MAAK,KAAK;CACV,MAAM,EAAE,MAAM,YAAY,MAAM,mBAAmB,MAAM,aAAa,EAAE,OAAO;EAC9E,GAAG;EACH,cAAc;EACd,UAAU,GAAG,MAAM,SAAS;EAC5B,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,aAAa,GAAG,cAAc;CACpC,MAAM,eAAe,GAAG,gBAAgB;AACxC,aAAY,KAAK,gBAAgB,eAAe;AAChD,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;CACjB,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,EAAE,UAAU,cAAc,YAAY,IAAI,QAAQ,cAAc,OAAO;CAC7E,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS,CAAC;GACT,SAAS;GACT,UAAU;GACV,EAAE;GACF,SAAS;GACT,UAAU;GACV,CAAC;EACF,CAAC;CACF,MAAM,YAAY,gBAAgB,KAAK;AACvC,WAAU,YAAY,SAAS;AAC/B,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,KAAK,GAAG,GAAG,GAAG,EAAE;;AAK3B,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,+BAA+B,CAAC"}
1
+ {"version":3,"file":"renderer-CDX2f82b.mjs","names":[],"sources":["../../../nodes/node-channel-splitter/dist/renderers-CBDMTYgr.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_SPLITTER = `\nstruct SplitterUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\tchannelIndex : f32, // 0=Ch1, 1=Ch2, 2=Ch3, 3=Ch4\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SplitterUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn srgb2lin(v: f32) -> f32 {\n\tlet cv = clamp(v, 0.0, 1.0);\n\treturn select(cv / 12.92, pow((cv + 0.055) / 1.055, 2.4), cv > 0.04045);\n}\n\nfn lab_f(t: f32) -> f32 {\n\treturn select(pow(t, 1.0 / 3.0), (7.787 * t) + (16.0 / 116.0), t <= 0.008856);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSample(srcTex, srcSamp, in.uv);\n\tlet cs = u32(u.colorSpace + 0.5);\n\tlet idx = u32(u.channelIndex + 0.5);\n\n\tvar val: f32 = 0.0;\n\n\tif (cs == 0u) { // RGBA\n\t\tif (idx == 0u) { val = c.r; }\n\t\telse if (idx == 1u) { val = c.g; }\n\t\telse if (idx == 2u) { val = c.b; }\n\t\telse { val = c.a; }\n\t} else if (cs == 1u) { // HSLA\n\t\tlet maxV = max(c.r, max(c.g, c.b));\n\t\tlet minV = min(c.r, min(c.g, c.b));\n\t\tlet d = maxV - minV;\n\t\tlet L = (maxV + minV) * 0.5;\n\t\tlet S = select(select(d / (2.0 - maxV - minV), d / (maxV + minV), L < 0.5), 0.0, d < 0.00001);\n\t\tvar H: f32 = 0.0;\n\t\tif (d > 0.00001) {\n\t\t\tif (maxV == c.r) {\n\t\t\t\tH = ((c.g - c.b) / d + select(0.0, 6.0, c.g < c.b)) / 6.0;\n\t\t\t} else if (maxV == c.g) {\n\t\t\t\tH = ((c.b - c.r) / d + 2.0) / 6.0;\n\t\t\t} else {\n\t\t\t\tH = ((c.r - c.g) / d + 4.0) / 6.0;\n\t\t\t}\n\t\t}\n\t\tif (idx == 0u) { val = H; }\n\t\telse if (idx == 1u) { val = S; }\n\t\telse if (idx == 2u) { val = L; }\n\t\telse { val = c.a; }\n\t} else if (cs == 2u) { // CMYK\n\t\tlet K = 1.0 - max(c.r, max(c.g, c.b));\n\t\tif (K >= 1.0 - 0.00001) {\n\t\t\tval = select(0.0, 1.0, idx == 3u);\n\t\t} else {\n\t\t\tlet denom = 1.0 - K;\n\t\t\tif (idx == 0u) { val = (1.0 - c.r - K) / denom; }\n\t\t\telse if (idx == 1u) { val = (1.0 - c.g - K) / denom; }\n\t\t\telse if (idx == 2u) { val = (1.0 - c.b - K) / denom; }\n\t\t\telse { val = K; }\n\t\t}\n\t} else { // LAB\n\t\tlet lr = srgb2lin(c.r);\n\t\tlet lg = srgb2lin(c.g);\n\t\tlet lb = srgb2lin(c.b);\n\n\t\tlet X = lr * 0.4124564 + lg * 0.3575761 + lb * 0.1804375;\n\t\tlet Y = lr * 0.2126729 + lg * 0.7151522 + lb * 0.0721750;\n\t\tlet Z = lr * 0.0193339 + lg * 0.1191920 + lb * 0.9503041;\n\n\t\tlet x = X / 0.95047;\n\t\tlet y = Y / 1.00000;\n\t\tlet z = Z / 1.08883;\n\n\t\tlet fx = lab_f(x);\n\t\tlet fy = lab_f(y);\n\t\tlet fz = lab_f(z);\n\n\t\tlet L_star = 116.0 * fy - 16.0;\n\t\tlet a_star = 500.0 * (fx - fy);\n\t\tlet b_star = 200.0 * (fy - fz);\n\n\t\tlet L_norm = clamp(L_star / 100.0, 0.0, 1.0);\n\t\tlet a_norm = clamp((a_star + 128.0) / 255.0, 0.0, 1.0);\n\t\tlet b_norm = clamp((b_star + 128.0) / 255.0, 0.0, 1.0);\n\n\t\tif (idx == 0u) { val = L_norm; }\n\t\telse if (idx == 1u) { val = a_norm; }\n\t\telse if (idx == 2u) { val = b_norm; }\n\t\telse { val = c.a; }\n\t}\n\n\tval = clamp(val, 0.0, 1.0);\n\treturn vec4<f32>(val, val, val, 1.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `splitter_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelSplitterShader\",\n\t\t\tcode: WGSL_CHANNEL_SPLITTER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelSplitterPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelSplitterWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetTexture, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelSplitter\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst { view: srcView } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\targs.pass.end();\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst channelIndex = op.channelIndex ?? 0;\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = channelIndex;\n\tuniformData[2] = 0;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: srcView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelSplitterWebGPURenderer });\n\n//#endregion\nexport { ChannelSplitterWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CBDMTYgr.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-DBWkkSvJ.mjs";
3
+ import { n as renderers_default, t as WebGPURenderer } from "./renderer-DqO9gBAi.mjs";
4
+
5
+ export { WebGPURenderer, renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-DBWkkSvJ.mjs";
3
+ import { t as renderers_default } from "./renderer-CLO8QHWE.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CHIgM_YH.mjs";
1
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
+ import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Dq_uI_00.mjs";
3
3
 
4
4
  //#region ../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs
5
5
  const MAX_OPERATIONS = 1024;
@@ -184,4 +184,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer }
184
184
 
185
185
  //#endregion
186
186
  export { renderers_default as n, LiquifyWebGPURenderer as t };
187
- //# sourceMappingURL=renderer-P4OPsD82.mjs.map
187
+ //# sourceMappingURL=renderer-CJoa4H2G.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-P4OPsD82.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-CJoa4H2G.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { Ht as isSignal, cn as resolveNumber } from "./dist-TrtLGPvc.mjs";
2
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-hmWTJPik.mjs";
1
+ import { Ht as isSignal, cn as resolveNumber } from "./dist-DFeF-ygz.mjs";
2
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
3
+ import { g as WebGPUAudioProcessor } from "./dist-DBWkkSvJ.mjs";
4
4
 
5
5
  //#region ../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs
6
6
  const PARAM_ORDER = ["pan"];
@@ -96,4 +96,4 @@ var renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProce
96
96
 
97
97
  //#endregion
98
98
  export { renderers_default as t };
99
- //# sourceMappingURL=renderer-1P3yS8YM.mjs.map
99
+ //# sourceMappingURL=renderer-CLO8QHWE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-1P3yS8YM.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
1
+ {"version":3,"file":"renderer-CLO8QHWE.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
@@ -1,7 +1,7 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import { At as getFingerprint } from "./dist-TrtLGPvc.mjs";
3
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
4
- import { H as lutStore } from "./dist-hmWTJPik.mjs";
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import { At as getFingerprint } from "./dist-DFeF-ygz.mjs";
3
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
4
+ import { U as lutStore } from "./dist-DBWkkSvJ.mjs";
5
5
 
6
6
  //#region ../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs
7
7
  const extractionCache = /* @__PURE__ */ new Map();
@@ -979,4 +979,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURendere
979
979
 
980
980
  //#endregion
981
981
  export { renderers_default as default };
982
- //# sourceMappingURL=renderer-CjQAYeYz.mjs.map
982
+ //# sourceMappingURL=renderer-CMEqUhrW.mjs.map