framefields 2.4.2 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) 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-DHuEMOtQ.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
  7. package/dist/{audio-DHuEMOtQ.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
  8. package/dist/{audio-Bb31xJuX.mjs → audio-CMHpfOoS.mjs} +4 -4
  9. package/dist/{audio-Bb31xJuX.mjs.map → audio-CMHpfOoS.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-CspOG4V1.mjs → dist-BBUrGwqd.mjs} +24 -3
  16. package/dist/{dist-CspOG4V1.mjs.map → dist-BBUrGwqd.mjs.map} +1 -1
  17. package/dist/{dist-SB9qfAko.mjs → dist-CQZ5_60A.mjs} +2 -2
  18. package/dist/{dist-SB9qfAko.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
  19. package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
  20. package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
  21. package/dist/{dist-ClyC_d66.mjs → dist-DFeF-ygz.mjs} +117 -40
  22. package/dist/dist-DFeF-ygz.mjs.map +1 -0
  23. package/dist/{dist-CxGfrigI.mjs → dist-QMVy31gR.mjs} +23 -4
  24. package/dist/dist-QMVy31gR.mjs.map +1 -0
  25. package/dist/effects/index.d.mts +5 -5
  26. package/dist/effects/index.mjs +36 -36
  27. package/dist/{effects-BOk_2kzM.mjs → effects-mRe-rLte.mjs} +71 -3
  28. package/dist/effects-mRe-rLte.mjs.map +1 -0
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +3 -3
  31. package/dist/{fonts-CsMDfqv9.mjs → fonts-wI3CUYHM.mjs} +2 -2
  32. package/dist/{fonts-CsMDfqv9.mjs.map → fonts-wI3CUYHM.mjs.map} +1 -1
  33. package/dist/{gpu-DtT5I4ME.mjs → gpu-I5fdrflL.mjs} +2 -2
  34. package/dist/{gpu-DtT5I4ME.mjs.map → gpu-I5fdrflL.mjs.map} +1 -1
  35. package/dist/{index-BTPLbjt4.d.mts → index-B-KVpJMb.d.mts} +2 -2
  36. package/dist/{index-BTPLbjt4.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
  37. package/dist/index-BJe_GEyj.d.mts +5968 -0
  38. package/dist/index-BJe_GEyj.d.mts.map +1 -0
  39. package/dist/{index-D-l-yCv6.d.mts → index-BpdVOlsV.d.mts} +3 -3
  40. package/dist/{index-D-l-yCv6.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
  41. package/dist/index-C2f4Hm-p.d.mts +89 -0
  42. package/dist/index-C2f4Hm-p.d.mts.map +1 -0
  43. package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
  44. package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
  45. package/dist/{index-B2Xesdug.d.mts → index-D6-lH1Mx.d.mts} +477 -327
  46. package/dist/index-D6-lH1Mx.d.mts.map +1 -0
  47. package/dist/{index-B3-gwjK6.d.mts → index-DNKM3to5.d.mts} +3 -3
  48. package/dist/{index-B3-gwjK6.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
  49. package/dist/{index-DujpgUUq.d.mts → index-fymoeGNW.d.mts} +245 -152
  50. package/dist/index-fymoeGNW.d.mts.map +1 -0
  51. package/dist/index.d.mts +13 -4593
  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-DyGw2b3_.mjs → preview--DEgW67P.mjs} +3 -3
  56. package/dist/{preview-DyGw2b3_.mjs.map → preview--DEgW67P.mjs.map} +1 -1
  57. package/dist/preview-engine/audio.mjs +1 -1
  58. package/dist/preview-engine/{chunk-FHKBALVI.mjs → chunk-24H3QVYB.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-SWXVITCQ.mjs → chunk-25T3M6MI.mjs} +1 -1
  60. package/dist/preview-engine/chunk-2AV7HRRL.mjs +174 -0
  61. package/dist/preview-engine/{chunk-HNNIVJ2K.mjs → chunk-4EOS6ZWW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-67SSYK7D.mjs → chunk-4UI3S3UG.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-LLDIDE5Q.mjs → chunk-5N3GW3NE.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-KAQUNOVB.mjs → chunk-5P764TTF.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-WJJIISQJ.mjs → chunk-7BUKVFWB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-HUKAC5MJ.mjs → chunk-7EHUT5A3.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-34ACEGNW.mjs → chunk-7HTTYP6T.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-6K7US2WD.mjs → chunk-7JYMNGNK.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-NRAZV5OA.mjs → chunk-A5OUYV3I.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-VONDRBA2.mjs → chunk-AJLPRIXB.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-HDGFNBYK.mjs → chunk-ANZDLSSM.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-FFMPC7QA.mjs → chunk-C2TA65CH.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-7QJUC6YY.mjs → chunk-CBQOJAIS.mjs} +14 -14
  74. package/dist/preview-engine/{chunk-GMGGDADT.mjs → chunk-CEIOI4HO.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-RHRMEBNK.mjs → chunk-DKXKOUQR.mjs} +1 -1
  76. package/dist/preview-engine/chunk-DPIED3EG.mjs +1 -0
  77. package/dist/preview-engine/{chunk-QJZKIY4H.mjs → chunk-ENS4KUJV.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-Z6UKUHPU.mjs → chunk-HXHP3UHZ.mjs} +1 -1
  79. package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
  80. package/dist/preview-engine/{chunk-2DDBSI75.mjs → chunk-ILKBHDFB.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-O6NRIXS5.mjs → chunk-JMOJKT5W.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-PZF6T7DM.mjs → chunk-KKBJ7X3T.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-NNQUIVTE.mjs → chunk-KRVXRP5F.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-FLPSWDX4.mjs → chunk-MJN3LOZ7.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-GQLZXCW3.mjs → chunk-MLW6Y4RN.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-KT35IPCF.mjs → chunk-MRDJNDYV.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-RKVB47IA.mjs → chunk-MZAAJXUL.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-FFGBUS76.mjs → chunk-NB55FW7D.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-JX22B2FS.mjs → chunk-NG5WSR3A.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-XOEEGC4Z.mjs → chunk-NVTPJUNG.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-ZKPQGQE3.mjs → chunk-NXKXOSE6.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-WCZ5DKZ4.mjs → chunk-NYEDWUFS.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-WACWOKEP.mjs → chunk-O6LGKH4S.mjs} +1 -1
  94. package/dist/preview-engine/chunk-OLLY3Q7M.mjs +1 -0
  95. package/dist/preview-engine/{chunk-A5OVKZ52.mjs → chunk-OOJAQBS3.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-PJN7DD55.mjs} +3 -3
  97. package/dist/preview-engine/{chunk-R26SY5D4.mjs → chunk-QCUGWPYP.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-LK3T65RB.mjs → chunk-QQJPPGH5.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-3ACCCPBN.mjs → chunk-QVUT3QNF.mjs} +1 -1
  100. package/dist/preview-engine/chunk-RNFYEZLL.mjs +1 -0
  101. package/dist/preview-engine/{chunk-GNG4YH2W.mjs → chunk-TA5OBYRR.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-NQZKBFC6.mjs → chunk-V6DAD4S4.mjs} +14 -14
  103. package/dist/preview-engine/{chunk-5RQHNB6Y.mjs → chunk-VRNN6H6Y.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-C6Z7H2RZ.mjs → chunk-VTE3IISK.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-RDP6QROU.mjs → chunk-VZGDX7II.mjs} +1 -1
  106. package/dist/preview-engine/{chunk-DOCSX45C.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-7LVOSEGN.mjs → chunk-XYRBFLFF.mjs} +1 -1
  108. package/dist/preview-engine/{chunk-LIQA5OOU.mjs → chunk-YMQMPBTL.mjs} +1 -1
  109. package/dist/preview-engine/{chunk-G4J662EL.mjs → chunk-Z4ZO4RVT.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-2GIWWDE4.mjs → chunk-ZFURUTVW.mjs} +1 -1
  111. package/dist/preview-engine/effects.mjs +1 -1
  112. package/dist/preview-engine/framefields.mjs +30 -28
  113. package/dist/preview-engine/player.mjs +5 -5
  114. package/dist/preview-engine/renderers-2CBJYNOC.mjs +1 -0
  115. package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
  116. package/dist/preview-engine/renderers-3AZ5PMGC.mjs +1 -0
  117. package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
  118. package/dist/preview-engine/renderers-3VXNHICC.mjs +1 -0
  119. package/dist/preview-engine/{renderers-BDWVXYTW.mjs → renderers-3ZYXHUSW.mjs} +1 -1
  120. package/dist/preview-engine/renderers-4FONYSBA.mjs +1 -0
  121. package/dist/preview-engine/renderers-54I5SFXR.mjs +1 -0
  122. package/dist/preview-engine/renderers-5LXALKB4.mjs +1 -0
  123. package/dist/preview-engine/renderers-5TICPV2K.mjs +1 -0
  124. package/dist/preview-engine/renderers-5YS5WHAV.mjs +1 -0
  125. package/dist/preview-engine/renderers-6UTRYW7Z.mjs +1 -0
  126. package/dist/preview-engine/{renderers-R4WMM6IX.mjs → renderers-6ZCFR7BL.mjs} +1 -1
  127. package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
  128. package/dist/preview-engine/{renderers-75TL7RLS.mjs → renderers-BOT4H6KJ.mjs} +1 -1
  129. package/dist/preview-engine/{renderers-NJLGPPX7.mjs → renderers-C44CEIYB.mjs} +1 -1
  130. package/dist/preview-engine/{renderers-UDOBX433.mjs → renderers-C4G7X7LD.mjs} +1 -1
  131. package/dist/preview-engine/renderers-CLCPP3TZ.mjs +1 -0
  132. package/dist/preview-engine/{renderers-RKZGYWDG.mjs → renderers-DBRC3SQE.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-HZHEGONW.mjs → renderers-DSICQMRF.mjs} +1 -1
  134. package/dist/preview-engine/renderers-DTZ2AER5.mjs +1 -0
  135. package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
  136. package/dist/preview-engine/{renderers-AZYJFJLO.mjs → renderers-EOIMH7UE.mjs} +1 -1
  137. package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
  138. package/dist/preview-engine/{renderers-CK3ZL3GM.mjs → renderers-GSRKNT75.mjs} +1 -1
  139. package/dist/preview-engine/renderers-GUJTPO37.mjs +1 -0
  140. package/dist/preview-engine/{renderers-TCNPEANL.mjs → renderers-HE42AT5T.mjs} +1 -1
  141. package/dist/preview-engine/{renderers-GUPEJK3O.mjs → renderers-JM7JEVBN.mjs} +1 -1
  142. package/dist/preview-engine/{renderers-FKH5S64C.mjs → renderers-JRU2GNPE.mjs} +1 -1
  143. package/dist/preview-engine/{renderers-IHRFEZNP.mjs → renderers-K6J77OI5.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-IJDQJEE5.mjs → renderers-L7EITUCD.mjs} +1 -1
  145. package/dist/preview-engine/renderers-LGUHDWWB.mjs +1 -0
  146. package/dist/preview-engine/renderers-LGXD24IJ.mjs +1 -0
  147. package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
  148. package/dist/preview-engine/renderers-OBXNUQMP.mjs +1 -0
  149. package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
  150. package/dist/preview-engine/{renderers-7CPYTCNW.mjs → renderers-PJGFJGJS.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-SW7FIEKO.mjs → renderers-PPGOYOID.mjs} +1 -1
  152. package/dist/preview-engine/renderers-PUJRHBUW.mjs +1 -0
  153. package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
  154. package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
  155. package/dist/preview-engine/{renderers-K7B5PQBT.mjs → renderers-QPHOG7QR.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-WR6MKT5S.mjs → renderers-RV62K5JC.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-UMPOVFRA.mjs → renderers-SBX64ERA.mjs} +1 -1
  158. package/dist/preview-engine/renderers-SCJTTOEJ.mjs +1 -0
  159. package/dist/preview-engine/{renderers-FM6A5YR4.mjs → renderers-SD35PBEM.mjs} +1 -1
  160. package/dist/preview-engine/{renderers-LVLVJHOL.mjs → renderers-SIHL5GLI.mjs} +1 -1
  161. package/dist/preview-engine/renderers-SNUVYUDE.mjs +1 -0
  162. package/dist/preview-engine/renderers-SPW4SWZ2.mjs +228 -0
  163. package/dist/preview-engine/renderers-SRKCF3LD.mjs +1 -0
  164. package/dist/preview-engine/{renderers-GAIUTII6.mjs → renderers-T3S7QVM4.mjs} +1 -1
  165. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
  166. package/dist/preview-engine/renderers-UN6YLFHW.mjs +1 -0
  167. package/dist/preview-engine/renderers-UTWKTBZI.mjs +1 -0
  168. package/dist/preview-engine/{renderers-6JZ4HYIU.mjs → renderers-V5MJJH33.mjs} +1 -1
  169. package/dist/preview-engine/{renderers-XKHNBARD.mjs → renderers-V67L3MCY.mjs} +1 -1
  170. package/dist/preview-engine/{renderers-FADYGSLK.mjs → renderers-VYK2BJID.mjs} +1 -1
  171. package/dist/preview-engine/renderers-W6762MNW.mjs +1 -0
  172. package/dist/preview-engine/renderers-W6ZTVA2I.mjs +1 -0
  173. package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
  174. package/dist/preview-engine/{renderers-MBSOKWKB.mjs → renderers-WPBTAU2E.mjs} +1 -1
  175. package/dist/preview-engine/renderers-XP7YFWBV.mjs +1 -0
  176. package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
  177. package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
  178. package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
  179. package/dist/preview-engine/{renderers-4AJWVIJG.mjs → renderers-ZAPIBQZC.mjs} +1 -1
  180. package/dist/preview-engine/renderers-ZRR4TUVQ.mjs +1 -0
  181. package/dist/preview-engine/{renderers-TY7DVI7E.mjs → renderers-ZVKXIQ3E.mjs} +1 -1
  182. package/dist/preview-engine/signals.mjs +1 -1
  183. package/dist/{program-C2cJayA1.mjs → program-CEHCeDpG.mjs} +204 -61
  184. package/dist/program-CEHCeDpG.mjs.map +1 -0
  185. package/dist/registry/annotate.json +30 -0
  186. package/dist/registry/app-frame.json +38 -0
  187. package/dist/registry/backdrop.json +37 -0
  188. package/dist/registry/before-after.json +33 -0
  189. package/dist/registry/callout.json +30 -0
  190. package/dist/registry/captions.json +37 -0
  191. package/dist/registry/card-stack.json +30 -0
  192. package/dist/registry/chat-thread.json +32 -0
  193. package/dist/registry/code-block.json +45 -0
  194. package/dist/registry/confetti.json +29 -0
  195. package/dist/registry/counter.json +36 -0
  196. package/dist/registry/device-frame.json +36 -0
  197. package/dist/registry/focus-zoom.json +32 -0
  198. package/dist/registry/index.json +408 -0
  199. package/dist/registry/logo-reveal.json +37 -0
  200. package/dist/registry/lower-third.json +34 -0
  201. package/dist/registry/meter.json +35 -0
  202. package/dist/registry/mouse-pointer.json +44 -0
  203. package/dist/registry/selection.json +31 -0
  204. package/dist/registry/spotlight.json +28 -0
  205. package/dist/registry/terminal.json +40 -0
  206. package/dist/registry/text-reveal.json +39 -0
  207. package/dist/registry/title-card.json +34 -0
  208. package/dist/registry/toasts.json +28 -0
  209. package/dist/registry/touch-point.json +33 -0
  210. package/dist/registry/waveform.json +29 -0
  211. package/dist/registry/word-cycle.json +32 -0
  212. package/dist/renderer/index.d.mts +2 -2
  213. package/dist/renderer/index.mjs +3 -3
  214. package/dist/{renderer-BMKFzfSQ.mjs → renderer--wMbTRFg.mjs} +4 -4
  215. package/dist/{renderer-BMKFzfSQ.mjs.map → renderer--wMbTRFg.mjs.map} +1 -1
  216. package/dist/{renderer-CDUxAtsk.mjs → renderer-3aLw-la1.mjs} +5 -5
  217. package/dist/{renderer-CDUxAtsk.mjs.map → renderer-3aLw-la1.mjs.map} +1 -1
  218. package/dist/renderer-7vCBWQVP.mjs +5 -0
  219. package/dist/{renderer-DILUmb-e.mjs → renderer-AkRxGnFU.mjs} +5 -5
  220. package/dist/{renderer-DILUmb-e.mjs.map → renderer-AkRxGnFU.mjs.map} +1 -1
  221. package/dist/renderer-B-XgGMCq.mjs +5 -0
  222. package/dist/renderer-B0yabPlf.mjs +5 -0
  223. package/dist/{renderer-CoWfz-9p.mjs → renderer-B1yPBJQc.mjs} +74 -74
  224. package/dist/{renderer-CoWfz-9p.mjs.map → renderer-B1yPBJQc.mjs.map} +1 -1
  225. package/dist/{renderer-BPixWnmY.mjs → renderer-B41jTHFs.mjs} +6 -6
  226. package/dist/{renderer-BPixWnmY.mjs.map → renderer-B41jTHFs.mjs.map} +1 -1
  227. package/dist/{renderer-BTd2sWDC.mjs → renderer-B5HG6Czb.mjs} +4 -4
  228. package/dist/{renderer-BTd2sWDC.mjs.map → renderer-B5HG6Czb.mjs.map} +1 -1
  229. package/dist/{renderer-gRMkQabv.mjs → renderer-B5oJN3A5.mjs} +5 -5
  230. package/dist/{renderer-gRMkQabv.mjs.map → renderer-B5oJN3A5.mjs.map} +1 -1
  231. package/dist/renderer-B9MYevrF.mjs +5 -0
  232. package/dist/renderer-BA2Ko4H1.mjs +3 -0
  233. package/dist/renderer-BCGosndi.mjs +5 -0
  234. package/dist/{renderer-CzRqzp8P.mjs → renderer-BEmDSqXg.mjs} +4 -4
  235. package/dist/{renderer-CzRqzp8P.mjs.map → renderer-BEmDSqXg.mjs.map} +1 -1
  236. package/dist/{renderer-Csss5GFQ.mjs → renderer-BG8jNTHr.mjs} +3 -3
  237. package/dist/{renderer-Csss5GFQ.mjs.map → renderer-BG8jNTHr.mjs.map} +1 -1
  238. package/dist/{renderer-BTigwMQp.mjs → renderer-BMnrBPh1.mjs} +4 -4
  239. package/dist/{renderer-BTigwMQp.mjs.map → renderer-BMnrBPh1.mjs.map} +1 -1
  240. package/dist/{renderer-yyUpCeWb.mjs → renderer-BORzpTQP.mjs} +3 -3
  241. package/dist/{renderer-yyUpCeWb.mjs.map → renderer-BORzpTQP.mjs.map} +1 -1
  242. package/dist/{renderer-RDCax5CK.mjs → renderer-BWtI3wKu.mjs} +4 -4
  243. package/dist/{renderer-RDCax5CK.mjs.map → renderer-BWtI3wKu.mjs.map} +1 -1
  244. package/dist/renderer-BXTHDEnd.mjs +5 -0
  245. package/dist/{renderer-G1pMJH5C.mjs → renderer-Baw30QRI.mjs} +3 -3
  246. package/dist/{renderer-G1pMJH5C.mjs.map → renderer-Baw30QRI.mjs.map} +1 -1
  247. package/dist/renderer-BbJoZ-zL.mjs +5 -0
  248. package/dist/{renderer-Dwu_zfdL.mjs → renderer-BbdgwkDB.mjs} +5 -5
  249. package/dist/{renderer-Dwu_zfdL.mjs.map → renderer-BbdgwkDB.mjs.map} +1 -1
  250. package/dist/{renderer-D6BXR7P4.mjs → renderer-BgOEqtZu.mjs} +3 -3
  251. package/dist/{renderer-D6BXR7P4.mjs.map → renderer-BgOEqtZu.mjs.map} +1 -1
  252. package/dist/{renderer-NizuhHsH.mjs → renderer-Bv0-WmP4.mjs} +4 -4
  253. package/dist/{renderer-NizuhHsH.mjs.map → renderer-Bv0-WmP4.mjs.map} +1 -1
  254. package/dist/renderer-BvcqncI2.mjs +3 -0
  255. package/dist/{renderer-BljMOvry.mjs → renderer-Bvhj-05p.mjs} +4 -4
  256. package/dist/{renderer-BljMOvry.mjs.map → renderer-Bvhj-05p.mjs.map} +1 -1
  257. package/dist/renderer-BxAZKOQy.mjs +5 -0
  258. package/dist/{renderer-92eLJg24.mjs → renderer-BxDhx8KM.mjs} +5 -5
  259. package/dist/{renderer-92eLJg24.mjs.map → renderer-BxDhx8KM.mjs.map} +1 -1
  260. package/dist/renderer-BxgkH__7.mjs +5 -0
  261. package/dist/{renderer-7y5Cj8rV.mjs → renderer-C1XZ0fQ-.mjs} +4 -4
  262. package/dist/{renderer-7y5Cj8rV.mjs.map → renderer-C1XZ0fQ-.mjs.map} +1 -1
  263. package/dist/{renderer-UcdqCarR.mjs → renderer-C8KEfda3.mjs} +4 -4
  264. package/dist/{renderer-UcdqCarR.mjs.map → renderer-C8KEfda3.mjs.map} +1 -1
  265. package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
  266. package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
  267. package/dist/{renderer-B3e4LSE6.mjs → renderer-CF25oNd3.mjs} +5 -5
  268. package/dist/{renderer-B3e4LSE6.mjs.map → renderer-CF25oNd3.mjs.map} +1 -1
  269. package/dist/renderer-CFEvikBH.mjs +5 -0
  270. package/dist/{renderer-DzSMeQBC.mjs → renderer-CHFUJyul.mjs} +5 -5
  271. package/dist/{renderer-DzSMeQBC.mjs.map → renderer-CHFUJyul.mjs.map} +1 -1
  272. package/dist/{renderer-ByCX4JYg.mjs → renderer-CKGOKBZi.mjs} +5 -5
  273. package/dist/{renderer-ByCX4JYg.mjs.map → renderer-CKGOKBZi.mjs.map} +1 -1
  274. package/dist/{renderer-If8JOkBi.mjs → renderer-CNs1vBUy.mjs} +4 -4
  275. package/dist/{renderer-If8JOkBi.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
  276. package/dist/{index-B1XcyMm8.d.mts → renderer-COXKPofU.d.mts} +18 -18
  277. package/dist/renderer-COXKPofU.d.mts.map +1 -0
  278. package/dist/{renderer-CNuVJ4nG.mjs → renderer-COZCwiIr.mjs} +3 -3
  279. package/dist/{renderer-CNuVJ4nG.mjs.map → renderer-COZCwiIr.mjs.map} +1 -1
  280. package/dist/{renderer-V5uEyDFz.mjs → renderer-CPmoA87K.mjs} +4 -4
  281. package/dist/{renderer-V5uEyDFz.mjs.map → renderer-CPmoA87K.mjs.map} +1 -1
  282. package/dist/{renderer-Cw6Sagih.mjs → renderer-CYZb9uoO.mjs} +4 -4
  283. package/dist/{renderer-Cw6Sagih.mjs.map → renderer-CYZb9uoO.mjs.map} +1 -1
  284. package/dist/renderer-C_u9B-_7.mjs +5 -0
  285. package/dist/{renderer-BwpgDLYO.mjs → renderer-CaUJlGoB.mjs} +5 -5
  286. package/dist/{renderer-BwpgDLYO.mjs.map → renderer-CaUJlGoB.mjs.map} +1 -1
  287. package/dist/{renderer-DjwITRvg.mjs → renderer-CcS3Zntx.mjs} +3 -3
  288. package/dist/{renderer-BDCy8NgT.mjs → renderer-CddpdCL3.mjs} +4 -4
  289. package/dist/{renderer-BDCy8NgT.mjs.map → renderer-CddpdCL3.mjs.map} +1 -1
  290. package/dist/{renderer-BV48PFjX.mjs → renderer-Cg-d78nf.mjs} +192 -27
  291. package/dist/renderer-Cg-d78nf.mjs.map +1 -0
  292. package/dist/renderer-Cgx_qzGT.mjs +5 -0
  293. package/dist/{renderer-DScyMHpJ.mjs → renderer-ChNCtBMR.mjs} +3 -3
  294. package/dist/{renderer-DScyMHpJ.mjs.map → renderer-ChNCtBMR.mjs.map} +1 -1
  295. package/dist/renderer-ClOkY1Ny.mjs +5 -0
  296. package/dist/{renderer-DyyIXLQK.mjs → renderer-CrU0kbiB.mjs} +5 -5
  297. package/dist/{renderer-DyyIXLQK.mjs.map → renderer-CrU0kbiB.mjs.map} +1 -1
  298. package/dist/renderer-CtDub_ig.mjs +5 -0
  299. package/dist/{renderer-ut1GqW89.mjs → renderer-CyhSWLKq.mjs} +4 -4
  300. package/dist/{renderer-ut1GqW89.mjs.map → renderer-CyhSWLKq.mjs.map} +1 -1
  301. package/dist/{renderer-DaSxr9fM.mjs → renderer-D-bmSKv4.mjs} +5 -5
  302. package/dist/{renderer-DaSxr9fM.mjs.map → renderer-D-bmSKv4.mjs.map} +1 -1
  303. package/dist/renderer-D0duAhCo.mjs +5 -0
  304. package/dist/{renderer-BBAbZfBl.mjs → renderer-D2tdNoM6.mjs} +6 -6
  305. package/dist/{renderer-BBAbZfBl.mjs.map → renderer-D2tdNoM6.mjs.map} +1 -1
  306. package/dist/renderer-D4wM1dqg.mjs +6 -0
  307. package/dist/renderer-D5U3d09T.mjs +5 -0
  308. package/dist/{renderer-B1QREs7J.mjs → renderer-D86Y5YYi.mjs} +5 -5
  309. package/dist/{renderer-B1QREs7J.mjs.map → renderer-D86Y5YYi.mjs.map} +1 -1
  310. package/dist/{renderer-Cbsnj9vV.mjs → renderer-D8D7dKxq.mjs} +4 -4
  311. package/dist/{renderer-Cbsnj9vV.mjs.map → renderer-D8D7dKxq.mjs.map} +1 -1
  312. package/dist/{renderer-D0vom99O.mjs → renderer-DATAjI6x.mjs} +3 -3
  313. package/dist/{renderer-D0vom99O.mjs.map → renderer-DATAjI6x.mjs.map} +1 -1
  314. package/dist/{renderer-X0eKSD7v.mjs → renderer-DGhCIVI4.mjs} +5 -5
  315. package/dist/{renderer-X0eKSD7v.mjs.map → renderer-DGhCIVI4.mjs.map} +1 -1
  316. package/dist/{renderer-CJ4bxCld.mjs → renderer-DILjs1tz.mjs} +3 -3
  317. package/dist/{renderer-DjBCWxYy.mjs → renderer-DIyzKouj.mjs} +4 -4
  318. package/dist/{renderer-DjBCWxYy.mjs.map → renderer-DIyzKouj.mjs.map} +1 -1
  319. package/dist/{renderer-BwwZB2mt.mjs → renderer-DJ78Bgv7.mjs} +5 -5
  320. package/dist/{renderer-BwwZB2mt.mjs.map → renderer-DJ78Bgv7.mjs.map} +1 -1
  321. package/dist/renderer-DKqFxYfP.mjs +5 -0
  322. package/dist/renderer-DQZNI1zf.mjs +5 -0
  323. package/dist/{renderer-B4RpSd4A.mjs → renderer-DVnrUnkh.mjs} +3 -3
  324. package/dist/{renderer-B4RpSd4A.mjs.map → renderer-DVnrUnkh.mjs.map} +1 -1
  325. package/dist/{renderer-C1E5Rt5q.mjs → renderer-DWtquP0s.mjs} +4 -4
  326. package/dist/{renderer-C1E5Rt5q.mjs.map → renderer-DWtquP0s.mjs.map} +1 -1
  327. package/dist/renderer-DXITcVbS.mjs +5 -0
  328. package/dist/renderer-DY1QgdDC.mjs +5 -0
  329. package/dist/renderer-DYEz06xn.mjs +5 -0
  330. package/dist/renderer-D_2OrSMc.mjs +5 -0
  331. package/dist/renderer-DcCl9CO6.mjs +5 -0
  332. package/dist/{renderer-rXgqgAjw.mjs → renderer-DetTl6bQ.mjs} +3 -3
  333. package/dist/{renderer-rXgqgAjw.mjs.map → renderer-DetTl6bQ.mjs.map} +1 -1
  334. package/dist/{renderer-BjCHW9Jp.mjs → renderer-DfxwJVjW.mjs} +3 -3
  335. package/dist/{renderer-Cv4lchUP.mjs → renderer-DhQZiRL3.mjs} +5 -5
  336. package/dist/{renderer-Cv4lchUP.mjs.map → renderer-DhQZiRL3.mjs.map} +1 -1
  337. package/dist/{renderer-EZp_IIPK.mjs → renderer-Djn4BYtz.mjs} +5 -5
  338. package/dist/{renderer-EZp_IIPK.mjs.map → renderer-Djn4BYtz.mjs.map} +1 -1
  339. package/dist/{renderer-Bkrk0M0r.mjs → renderer-DkS6cblv.mjs} +5 -5
  340. package/dist/{renderer-Bkrk0M0r.mjs.map → renderer-DkS6cblv.mjs.map} +1 -1
  341. package/dist/{renderer-DKfwlE4e.mjs → renderer-DkeJefRk.mjs} +5 -5
  342. package/dist/{renderer-DKfwlE4e.mjs.map → renderer-DkeJefRk.mjs.map} +1 -1
  343. package/dist/renderer-DotZXhrh.mjs +5 -0
  344. package/dist/renderer-DpYDVTzs.mjs +5 -0
  345. package/dist/renderer-DpZxLVQF.mjs +5 -0
  346. package/dist/{renderer-Za4D9hej.mjs → renderer-DqabtpGN.mjs} +5 -5
  347. package/dist/{renderer-Za4D9hej.mjs.map → renderer-DqabtpGN.mjs.map} +1 -1
  348. package/dist/{renderer-DaqWTx7s.mjs → renderer-DqdD8gzX.mjs} +5 -5
  349. package/dist/{renderer-DaqWTx7s.mjs.map → renderer-DqdD8gzX.mjs.map} +1 -1
  350. package/dist/{renderer-DZJJHCtm.mjs → renderer-DstROEvX.mjs} +4 -4
  351. package/dist/{renderer-DZJJHCtm.mjs.map → renderer-DstROEvX.mjs.map} +1 -1
  352. package/dist/{renderer-BjvNEbML.mjs → renderer-DuawUm8D.mjs} +3 -3
  353. package/dist/{renderer-BjvNEbML.mjs.map → renderer-DuawUm8D.mjs.map} +1 -1
  354. package/dist/{renderer-CDOobs18.mjs → renderer-DvIWhLnY.mjs} +5 -5
  355. package/dist/{renderer-CDOobs18.mjs.map → renderer-DvIWhLnY.mjs.map} +1 -1
  356. package/dist/renderer-DvJbouz0.mjs +5 -0
  357. package/dist/{renderer-apeDrNXM.mjs → renderer-Dw2ZFwDT.mjs} +5 -5
  358. package/dist/{renderer-apeDrNXM.mjs.map → renderer-Dw2ZFwDT.mjs.map} +1 -1
  359. package/dist/{renderer-CxqPeATd.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
  360. package/dist/{renderer-CxqPeATd.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
  361. package/dist/{renderer-CcoUNzlQ.mjs → renderer-DxLkZGUK.mjs} +4 -4
  362. package/dist/{renderer-CcoUNzlQ.mjs.map → renderer-DxLkZGUK.mjs.map} +1 -1
  363. package/dist/{renderer-CeiCJCg4.mjs → renderer-GY7D1oAn.mjs} +4 -4
  364. package/dist/{renderer-CeiCJCg4.mjs.map → renderer-GY7D1oAn.mjs.map} +1 -1
  365. package/dist/{renderer-D2-V9nQq.mjs → renderer-JaSEubRQ.mjs} +4 -4
  366. package/dist/{renderer-D2-V9nQq.mjs.map → renderer-JaSEubRQ.mjs.map} +1 -1
  367. package/dist/{renderer-CqtIbe5n.mjs → renderer-MrvH4L7b.mjs} +4 -4
  368. package/dist/{renderer-CqtIbe5n.mjs.map → renderer-MrvH4L7b.mjs.map} +1 -1
  369. package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
  370. package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
  371. package/dist/renderer-S305xm67.mjs +5 -0
  372. package/dist/renderer-TgUloP-y.mjs +5 -0
  373. package/dist/{renderer-DFJQ6v0F.mjs → renderer-VcPoZAM2.mjs} +3 -3
  374. package/dist/{renderer-DFJQ6v0F.mjs.map → renderer-VcPoZAM2.mjs.map} +1 -1
  375. package/dist/{renderer-DcBGYN3V.mjs → renderer-ZGJWn-_L.mjs} +4 -4
  376. package/dist/{renderer-DcBGYN3V.mjs.map → renderer-ZGJWn-_L.mjs.map} +1 -1
  377. package/dist/{renderer-DTw-W0Yz.mjs → renderer-aXwxbXcE.mjs} +5 -5
  378. package/dist/{renderer-DTw-W0Yz.mjs.map → renderer-aXwxbXcE.mjs.map} +1 -1
  379. package/dist/renderer-gZ5SMvbU.mjs +5 -0
  380. package/dist/{renderer-CCGzT6bX.mjs → renderer-gniIzAsk.mjs} +3 -3
  381. package/dist/renderer-kEpx7pUy.mjs +5 -0
  382. package/dist/{renderer-BkWd4-YO.mjs → renderer-mSlww_MA.mjs} +4 -4
  383. package/dist/{renderer-BkWd4-YO.mjs.map → renderer-mSlww_MA.mjs.map} +1 -1
  384. package/dist/{renderer-B0gPTXhe.mjs → renderer-mWfgWQy_.mjs} +5 -5
  385. package/dist/{renderer-B0gPTXhe.mjs.map → renderer-mWfgWQy_.mjs.map} +1 -1
  386. package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
  387. package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
  388. package/dist/renderer-oPWZmzua.mjs +5 -0
  389. package/dist/{renderer--ruTGlPo.mjs → renderer-pcpDwv3K.mjs} +4 -4
  390. package/dist/{renderer--ruTGlPo.mjs.map → renderer-pcpDwv3K.mjs.map} +1 -1
  391. package/dist/renderer-qCNOffLy.mjs +5 -0
  392. package/dist/{renderer-DwVOxdzC.mjs → renderer-vPJRRVNN.mjs} +5 -5
  393. package/dist/{renderer-DwVOxdzC.mjs.map → renderer-vPJRRVNN.mjs.map} +1 -1
  394. package/dist/{renderer-JvcR1vYI.mjs → renderer-vQrX7Qsw.mjs} +3 -3
  395. package/dist/{renderer-JvcR1vYI.mjs.map → renderer-vQrX7Qsw.mjs.map} +1 -1
  396. package/dist/{renderer-Bi6W4RSn.mjs → renderer-wld_ZR0-.mjs} +3 -3
  397. package/dist/{renderer-Bi6W4RSn.mjs.map → renderer-wld_ZR0-.mjs.map} +1 -1
  398. package/dist/renderer-xEVoeq12.mjs +5 -0
  399. package/dist/renderer-ypw8fzVD.mjs +5 -0
  400. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs → renderers-CP8CFWDs-DgKdGMvS.mjs} +4 -4
  401. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs.map → renderers-CP8CFWDs-DgKdGMvS.mjs.map} +1 -1
  402. package/dist/signals/index.d.mts +6 -6
  403. package/dist/signals/index.mjs +8 -8
  404. package/dist/{signals-C5nOrRmn.mjs → signals-Cf9mfNGE.mjs} +4 -4
  405. package/dist/{signals-C5nOrRmn.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
  406. package/dist/src-CU_7ui4I.mjs +8373 -0
  407. package/dist/src-CU_7ui4I.mjs.map +1 -0
  408. package/package.json +68 -58
  409. package/dist/dist-ClyC_d66.mjs.map +0 -1
  410. package/dist/dist-CxGfrigI.mjs.map +0 -1
  411. package/dist/effects-BOk_2kzM.mjs.map +0 -1
  412. package/dist/index-B1XcyMm8.d.mts.map +0 -1
  413. package/dist/index-B2Xesdug.d.mts.map +0 -1
  414. package/dist/index-DujpgUUq.d.mts.map +0 -1
  415. package/dist/index.d.mts.map +0 -1
  416. package/dist/index.mjs.map +0 -1
  417. package/dist/preview/index.d.mts.map +0 -1
  418. package/dist/preview-engine/chunk-AQNTIWTK.mjs +0 -1
  419. package/dist/preview-engine/chunk-CPFPY35C.mjs +0 -1
  420. package/dist/preview-engine/chunk-UZBVCYRY.mjs +0 -174
  421. package/dist/preview-engine/chunk-XDMZP3E2.mjs +0 -1
  422. package/dist/preview-engine/chunk-YKMBRUAE.mjs +0 -1
  423. package/dist/preview-engine/renderers-3CXFGRE7.mjs +0 -1
  424. package/dist/preview-engine/renderers-3FC3WCJN.mjs +0 -1
  425. package/dist/preview-engine/renderers-3S2FM33K.mjs +0 -1
  426. package/dist/preview-engine/renderers-53ZTBI3C.mjs +0 -1
  427. package/dist/preview-engine/renderers-5USBVCMQ.mjs +0 -1
  428. package/dist/preview-engine/renderers-65G6BLEA.mjs +0 -1
  429. package/dist/preview-engine/renderers-7XU7BXE7.mjs +0 -1
  430. package/dist/preview-engine/renderers-BFXM32BC.mjs +0 -1
  431. package/dist/preview-engine/renderers-CDXHCWWK.mjs +0 -1
  432. package/dist/preview-engine/renderers-CLUN7WU6.mjs +0 -1
  433. package/dist/preview-engine/renderers-DTB4HEXU.mjs +0 -1
  434. package/dist/preview-engine/renderers-EFKNRLYF.mjs +0 -1
  435. package/dist/preview-engine/renderers-EI6MQ2EL.mjs +0 -228
  436. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +0 -1
  437. package/dist/preview-engine/renderers-GTUO5LIV.mjs +0 -1
  438. package/dist/preview-engine/renderers-HSJIVP57.mjs +0 -1
  439. package/dist/preview-engine/renderers-IHACBWXI.mjs +0 -1
  440. package/dist/preview-engine/renderers-IO3BVVJ7.mjs +0 -1
  441. package/dist/preview-engine/renderers-IR772VSN.mjs +0 -1
  442. package/dist/preview-engine/renderers-L6TRJOXA.mjs +0 -1
  443. package/dist/preview-engine/renderers-N6H6RSF2.mjs +0 -1
  444. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +0 -1
  445. package/dist/preview-engine/renderers-O6V3OEKX.mjs +0 -1
  446. package/dist/preview-engine/renderers-OODA27UH.mjs +0 -1
  447. package/dist/preview-engine/renderers-RIGW33ZI.mjs +0 -1
  448. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +0 -1
  449. package/dist/preview-engine/renderers-SKB2GGKS.mjs +0 -1
  450. package/dist/preview-engine/renderers-T4D2TASM.mjs +0 -1
  451. package/dist/preview-engine/renderers-T74XV36Q.mjs +0 -1
  452. package/dist/preview-engine/renderers-TOPW2UM3.mjs +0 -1
  453. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +0 -1
  454. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +0 -1
  455. package/dist/preview-engine/renderers-UWKSTSTA.mjs +0 -1
  456. package/dist/preview-engine/renderers-VHPAOUTA.mjs +0 -1
  457. package/dist/preview-engine/renderers-YEQRQJFC.mjs +0 -1
  458. package/dist/preview-engine/renderers-YRZ3WODX.mjs +0 -1
  459. package/dist/preview-engine/renderers-YUTFGVRY.mjs +0 -1
  460. package/dist/preview-engine/renderers-YXOTRKPA.mjs +0 -1
  461. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +0 -1
  462. package/dist/preview-engine/renderers-ZW75LQTR.mjs +0 -1
  463. package/dist/program-C2cJayA1.mjs.map +0 -1
  464. package/dist/renderer-BAhZeUUn.mjs +0 -5
  465. package/dist/renderer-BHAE_dKq.mjs +0 -5
  466. package/dist/renderer-BNYZY3FE.mjs +0 -5
  467. package/dist/renderer-BSvubMvI.mjs +0 -5
  468. package/dist/renderer-BV48PFjX.mjs.map +0 -1
  469. package/dist/renderer-B_M_yhTc.mjs +0 -5
  470. package/dist/renderer-B_xSsTuy.mjs +0 -5
  471. package/dist/renderer-BePHurAU.mjs +0 -5
  472. package/dist/renderer-BfZquJrW.mjs +0 -5
  473. package/dist/renderer-BuY5ypB2.mjs +0 -5
  474. package/dist/renderer-BvOQgFHo.mjs +0 -5
  475. package/dist/renderer-C7NkSvUz.mjs +0 -5
  476. package/dist/renderer-CIuxV2q1.mjs +0 -5
  477. package/dist/renderer-CKp97tSQ.mjs +0 -5
  478. package/dist/renderer-CY89dTFR.mjs +0 -5
  479. package/dist/renderer-C_B_4Bl0.mjs +0 -5
  480. package/dist/renderer-Cd87JOjP.mjs +0 -5
  481. package/dist/renderer-Cev6orIK.mjs +0 -6
  482. package/dist/renderer-Cewf6UPh.mjs +0 -5
  483. package/dist/renderer-CnHsMLIv.mjs +0 -5
  484. package/dist/renderer-CoxuAr7b.mjs +0 -5
  485. package/dist/renderer-CrdG7trA.mjs +0 -5
  486. package/dist/renderer-Cu5MFgbk.mjs +0 -5
  487. package/dist/renderer-CuOjhtoo.mjs +0 -5
  488. package/dist/renderer-D2_0g6Oi.mjs +0 -5
  489. package/dist/renderer-D62FwolD.mjs +0 -5
  490. package/dist/renderer-DDNY9N7I.mjs +0 -5
  491. package/dist/renderer-DF_ONJ3v.mjs +0 -5
  492. package/dist/renderer-DbzrVHEE.mjs +0 -5
  493. package/dist/renderer-DlYchp1v.mjs +0 -5
  494. package/dist/renderer-DqcUNP8J.mjs +0 -5
  495. package/dist/renderer-DqvFhEQj.mjs +0 -5
  496. package/dist/renderer-DuuOlYIG.mjs +0 -3
  497. package/dist/renderer-DxBav2bE.mjs +0 -5
  498. package/dist/renderer-GvSRoQje.mjs +0 -5
  499. package/dist/renderer-KP7Ita9g.mjs +0 -5
  500. package/dist/renderer-Pc8dyNXt.mjs +0 -5
  501. package/dist/renderer-ezRCmU09.mjs +0 -3
  502. package/dist/renderer-h6ev1ogx.mjs +0 -5
  503. /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
  504. /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-Cbsnj9vV.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 2);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat,\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexEntryPoint: \"vs_main\",\n\t\t\tfragmentEntryPoint: \"fs_main\"\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !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 frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\tlet maskTex = null;\n\tif (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t\t},\n\t\texclude: [tmpSrcTex]\n\t}));\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else {\n\t\t\tconst rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? fallbackVal);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst signalContext = {\n\t\t\targs,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedSeconds,\n\t\t\tdurationSeconds\n\t\t};\n\t\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tdrawFullscreenPass(encoder, destinationTex.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\ttexBindGroup,\n\t\t\tsigBindGroup\n\t\t]);\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tdrawTextureToTarget(args, currentInputTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-i-B6z1sf.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-D8D7dKxq.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 2);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat,\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexEntryPoint: \"vs_main\",\n\t\t\tfragmentEntryPoint: \"fs_main\"\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !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 frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\tlet maskTex = null;\n\tif (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t\t},\n\t\texclude: [tmpSrcTex]\n\t}));\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else {\n\t\t\tconst rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? fallbackVal);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst signalContext = {\n\t\t\targs,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedSeconds,\n\t\t\tdurationSeconds\n\t\t};\n\t\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tdrawFullscreenPass(encoder, destinationTex.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\ttexBindGroup,\n\t\t\tsigBindGroup\n\t\t]);\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tdrawTextureToTarget(args, currentInputTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-i-B6z1sf.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DtT5I4ME.mjs";
1
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-I5fdrflL.mjs";
3
3
 
4
4
  //#region ../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs
5
5
  const easeIn = (t) => t * t;
@@ -261,4 +261,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer
261
261
 
262
262
  //#endregion
263
263
  export { renderers_default as t };
264
- //# sourceMappingURL=renderer-D0vom99O.mjs.map
264
+ //# sourceMappingURL=renderer-DATAjI6x.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-D0vom99O.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DATAjI6x.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.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-CspOG4V1.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-DtT5I4ME.mjs";
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
3
+ import "./dist-BBUrGwqd.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-I5fdrflL.mjs";
5
5
 
6
6
  //#region ../../nodes/node-gooey/dist/renderers-BPHsJJI8.mjs
7
7
  const OP = "Gooey";
@@ -328,4 +328,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: GooeyWebGPURenderer });
328
328
 
329
329
  //#endregion
330
330
  export { GooeyWebGPURenderer, renderers_default as default };
331
- //# sourceMappingURL=renderer-X0eKSD7v.mjs.map
331
+ //# sourceMappingURL=renderer-DGhCIVI4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-X0eKSD7v.mjs","names":[],"sources":["../../../nodes/node-gooey/dist/renderers-BPHsJJI8.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Gooey\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet R = res();\n\tlet rr = max(radius, 0.5);\n\tlet stepPx = max(1.0, rr / 16.0);\n\tlet sigma = rr * 0.5;\n\tvar acc = vec4<f32>(0.0);\n\tvar wsum = 0.0;\n\tfor (var k = -rr; k <= rr; k += stepPx) {\n\t\tlet w = exp(-(k * k) / (2.0 * sigma * sigma));\n\t\tacc += textureSampleLevel(prev, samp, in.uv + vec2<f32>(1.0, 0.0) * k / R, 0.0) * w;\n\t\twsum += w;\n\t}\n\treturn acc / wsum;\n}\n`,\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet R = res();\n\tlet rr = max(radius, 0.5);\n\tlet stepPx = max(1.0, rr / 16.0);\n\tlet sigma = rr * 0.5;\n\tvar acc = vec4<f32>(0.0);\n\tvar wsum = 0.0;\n\tfor (var k = -rr; k <= rr; k += stepPx) {\n\t\tlet w = exp(-(k * k) / (2.0 * sigma * sigma));\n\t\tacc += textureSampleLevel(prev, samp, in.uv + vec2<f32>(0.0, 1.0) * k / R, 0.0) * w;\n\t\twsum += w;\n\t}\n\treturn acc / wsum;\n}\n`,\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet b = textureSampleLevel(prev, samp, in.uv, 0.0);\n\tlet a = smoothstep(threshold - softness, threshold + softness, b.a);\n\tif (b.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(b.rgb / b.a * a, a);\n}\n`\n];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.radius, 12);\n\tdata[5] = num(raw.threshold, .5);\n\tdata[6] = num(raw.softness, .04);\n}\nconst GooeyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: GooeyWebGPURenderer });\n\n//#endregion\nexport { GooeyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BPHsJJI8.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DGhCIVI4.mjs","names":[],"sources":["../../../nodes/node-gooey/dist/renderers-BPHsJJI8.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Gooey\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet R = res();\n\tlet rr = max(radius, 0.5);\n\tlet stepPx = max(1.0, rr / 16.0);\n\tlet sigma = rr * 0.5;\n\tvar acc = vec4<f32>(0.0);\n\tvar wsum = 0.0;\n\tfor (var k = -rr; k <= rr; k += stepPx) {\n\t\tlet w = exp(-(k * k) / (2.0 * sigma * sigma));\n\t\tacc += textureSampleLevel(prev, samp, in.uv + vec2<f32>(1.0, 0.0) * k / R, 0.0) * w;\n\t\twsum += w;\n\t}\n\treturn acc / wsum;\n}\n`,\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet R = res();\n\tlet rr = max(radius, 0.5);\n\tlet stepPx = max(1.0, rr / 16.0);\n\tlet sigma = rr * 0.5;\n\tvar acc = vec4<f32>(0.0);\n\tvar wsum = 0.0;\n\tfor (var k = -rr; k <= rr; k += stepPx) {\n\t\tlet w = exp(-(k * k) / (2.0 * sigma * sigma));\n\t\tacc += textureSampleLevel(prev, samp, in.uv + vec2<f32>(0.0, 1.0) * k / R, 0.0) * w;\n\t\twsum += w;\n\t}\n\treturn acc / wsum;\n}\n`,\n\t`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet radius = u.v[1].x;\n\tlet threshold = u.v[1].y;\n\tlet softness = u.v[1].z;\n\n\tlet b = textureSampleLevel(prev, samp, in.uv, 0.0);\n\tlet a = smoothstep(threshold - softness, threshold + softness, b.a);\n\tif (b.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(b.rgb / b.a * a, a);\n}\n`\n];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.radius, 12);\n\tdata[5] = num(raw.threshold, .5);\n\tdata[6] = num(raw.softness, .04);\n}\nconst GooeyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: GooeyWebGPURenderer });\n\n//#endregion\nexport { GooeyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BPHsJJI8.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-CspOG4V1.mjs";
3
- import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-D6BXR7P4.mjs";
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-BBUrGwqd.mjs";
3
+ import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-BgOEqtZu.mjs";
4
4
 
5
5
  export { ColorBalanceWebGPURenderer, renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { Yt as resolveNumber, Zt as resolveString } from "./dist-ClyC_d66.mjs";
2
- import { n as defineRenderer, r as isHandleConnected } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-CspOG4V1.mjs";
1
+ import { cn as resolveNumber, un as resolveString } 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-BBUrGwqd.mjs";
4
4
 
5
5
  //#region ../../nodes/node-audio-parametric-eq/dist/renderers-Dt34aC_m.mjs
6
6
  const PARAM_ORDER = [
@@ -262,4 +262,4 @@ var renderers_default = defineRenderer({ audioProcessor: parametricEqAudioProces
262
262
 
263
263
  //#endregion
264
264
  export { renderers_default as t };
265
- //# sourceMappingURL=renderer-DjBCWxYy.mjs.map
265
+ //# sourceMappingURL=renderer-DIyzKouj.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DjBCWxYy.mjs","names":[],"sources":["../../../nodes/node-audio-parametric-eq/dist/renderers-Dt34aC_m.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"frequency\",\n\t\"gain\",\n\t\"q\"\n];\nconst PARAMETRIC_EQ_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n numBands : f32,\n frequency : f32,\n gain : f32,\n q : f32,\n bandType : f32,\n hasFrequencySig : f32,\n hasGainSig : f32,\n hasQSig : 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>;\n@group(0) @binding(4) var<storage, read> frequencySignal : array<f32>;\n@group(0) @binding(5) var<storage, read> gainSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> qSignal : array<f32>;\n\nconst PI: f32 = 3.141592653589793f;\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 sampleRate = u.sampleRate;\n let bandType = u.bandType; // 0=peak, 1=lowShelf, 2=highShelf, 3=lowPass, 4=highPass, 5=notch\n\n let biquadStateOffset = 4u;\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let offset = biquadStateOffset + c * 4u;\n var x1 = state[offset];\n var x2 = state[offset + 1u];\n var y1 = state[offset + 2u];\n var y2 = state[offset + 3u];\n\n if (is_nan_or_inf(x1)) { x1 = 0.0f; }\n if (is_nan_or_inf(x2)) { x2 = 0.0f; }\n if (is_nan_or_inf(y1)) { y1 = 0.0f; }\n if (is_nan_or_inf(y2)) { y2 = 0.0f; }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let sampleIndex = c * numSamples + index;\n var x = inputChannels[sampleIndex];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n\n // 1. Dynamic Parameter Signal Resolution & Clamping\n var effFreq = u.frequency;\n if (u.hasFrequencySig > 0.5f) {\n effFreq = frequencySignal[index];\n }\n effFreq = clamp(effFreq, 20.0f, sampleRate / 2.0f - 1.0f);\n\n var effQ = u.q;\n if (u.hasQSig > 0.5f) {\n effQ = qSignal[index];\n }\n effQ = clamp(effQ, 0.01f, 10.0f);\n\n var effGain = u.gain;\n if (u.hasGainSig > 0.5f) {\n effGain = gainSignal[index];\n }\n effGain = clamp(effGain, -24.0f, 24.0f);\n\n if (bandType == 0.0f && abs(effGain) < 1e-5f) {\n // Bypass filter if peak gain is zero\n outputChannels[sampleIndex] = x;\n continue;\n }\n\n // 2. Biquad Coefficients Calculation\n let w0 = (2.0f * PI * effFreq) / sampleRate;\n let cos_w0 = cos(w0);\n let sin_w0 = sin(w0);\n let A = clamp(pow(10.0f, effGain / 40.0f), 0.25f, 4.0f);\n let alpha = sin_w0 / (2.0f * effQ);\n\n var b0 = 0.0f; var b1 = 0.0f; var b2 = 0.0f;\n var a0 = 0.0f; var a1 = 0.0f; var a2 = 0.0f;\n\n if (bandType == 0.0f) { // peak\n b0 = 1.0f + alpha * A;\n b1 = -2.0f * cos_w0;\n b2 = 1.0f - alpha * A;\n a0 = 1.0f + alpha / A;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha / A;\n } else if (bandType == 1.0f) { // lowShelf\n let sqrtA = sqrt(A);\n let twoSqrtAAlpha = 2.0f * sqrtA * alpha;\n b0 = A * (A + 1.0f - (A - 1.0f) * cos_w0 + twoSqrtAAlpha);\n b1 = 2.0f * A * (A - 1.0f - (A + 1.0f) * cos_w0);\n b2 = A * (A + 1.0f - (A - 1.0f) * cos_w0 - twoSqrtAAlpha);\n a0 = A + 1.0f + (A - 1.0f) * cos_w0 + twoSqrtAAlpha;\n a1 = -2.0f * (A - 1.0f + (A + 1.0f) * cos_w0);\n a2 = A + 1.0f + (A - 1.0f) * cos_w0 - twoSqrtAAlpha;\n } else if (bandType == 2.0f) { // highShelf\n let sqrtA = sqrt(A);\n let twoSqrtAAlpha = 2.0f * sqrtA * alpha;\n b0 = A * (A + 1.0f + (A - 1.0f) * cos_w0 + twoSqrtAAlpha);\n b1 = -2.0f * A * (A - 1.0f + (A + 1.0f) * cos_w0);\n b2 = A * (A + 1.0f + (A - 1.0f) * cos_w0 - twoSqrtAAlpha);\n a0 = A + 1.0f - (A - 1.0f) * cos_w0 + twoSqrtAAlpha;\n a1 = 2.0f * (A - 1.0f - (A + 1.0f) * cos_w0);\n a2 = A + 1.0f - (A - 1.0f) * cos_w0 - twoSqrtAAlpha;\n } else if (bandType == 3.0f) { // lowPass\n b0 = (1.0f - cos_w0) / 2.0f;\n b1 = 1.0f - cos_w0;\n b2 = (1.0f - cos_w0) / 2.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n } else if (bandType == 4.0f) { // highPass\n b0 = (1.0f + cos_w0) / 2.0f;\n b1 = -(1.0f + cos_w0);\n b2 = (1.0f + cos_w0) / 2.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n } else if (bandType == 5.0f) { // notch\n b0 = 1.0f;\n b1 = -2.0f * cos_w0;\n b2 = 1.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n }\n\n if (abs(a0) < 1e-9f) {\n outputChannels[sampleIndex] = x;\n continue;\n }\n\n let b0_norm = b0 / a0;\n let b1_norm = b1 / a0;\n let b2_norm = b2 / a0;\n let a1_norm = a1 / a0;\n let a2_norm = a2 / a0;\n\n var y = b0_norm * x + b1_norm * x1 + b2_norm * x2 - a1_norm * y1 - a2_norm * y2;\n if (is_nan_or_inf(y)) { y = 0.0f; }\n\n // Biquad State History Update with Soft Anti-Explosion Clamping\n x2 = x1;\n x1 = x;\n y2 = clamp(y1, -4.0f, 4.0f);\n y1 = clamp(y, -4.0f, 4.0f);\n\n // Output Soft Clipping\n if (y > 1.0f) {\n y = 1.0f;\n } else if (y < -1.0f) {\n y = -1.0f;\n } else if (y > 0.9f) {\n y = 0.9f + 0.1f * tanh((y - 0.9f) / 0.1f);\n } else if (y < -0.9f) {\n y = -0.9f + 0.1f * tanh((y + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = y;\n }\n\n state[offset] = x1;\n state[offset + 1u] = x2;\n state[offset + 2u] = y1;\n state[offset + 3u] = y2;\n }\n}\n`;\nconst getBandTypeVal = (type) => {\n\tif (type === \"peak\") return 0;\n\tif (type === \"lowShelf\") return 1;\n\tif (type === \"highShelf\") return 2;\n\tif (type === \"lowPass\") return 3;\n\tif (type === \"highPass\") return 4;\n\tif (type === \"notch\") return 5;\n\treturn 0;\n};\nconst parametricEqAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Parametric EQ.\");\n\tconst op = virtualMedia.operation || {};\n\tconst rawType = resolveString(op.type, \"peak\");\n\tconst config = {\n\t\ttype: [\n\t\t\t\"lowShelf\",\n\t\t\t\"highShelf\",\n\t\t\t\"peak\",\n\t\t\t\"lowPass\",\n\t\t\t\"highPass\",\n\t\t\t\"notch\"\n\t\t].includes(rawType) ? rawType : \"peak\",\n\t\tfrequency: resolveNumber(op.frequency, 1e3),\n\t\tfrequencyHandleId: typeof op.frequencyHandleId === \"string\" ? op.frequencyHandleId : null,\n\t\tgain: resolveNumber(op.gain, 0),\n\t\tgainHandleId: typeof op.gainHandleId === \"string\" ? op.gainHandleId : null,\n\t\tq: resolveNumber(op.q, 1),\n\t\tqHandleId: typeof op.qHandleId === \"string\" ? op.qHandleId : null\n\t};\n\tconst hasFrequencySig = isHandleConnected(op, \"frequencyHandleId\") ? 1 : 0;\n\tconst hasGainSig = isHandleConnected(op, \"gainHandleId\") ? 1 : 0;\n\tconst hasQSig = isHandleConnected(op, \"qHandleId\") ? 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-parametric-eq\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 4 + numChannels * 4;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, PARAMETRIC_EQ_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\t1,\n\t\tconfig.frequency,\n\t\tconfig.gain,\n\t\tconfig.q,\n\t\tgetBandTypeVal(config.type),\n\t\thasFrequencySig,\n\t\thasGainSig,\n\t\thasQSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\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: parametricEqAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dt34aC_m.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;AACD,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+L5C,MAAM,kBAAkB,SAAS;AAChC,KAAI,SAAS,OAAQ,QAAO;AAC5B,KAAI,SAAS,WAAY,QAAO;AAChC,KAAI,SAAS,YAAa,QAAO;AACjC,KAAI,SAAS,UAAW,QAAO;AAC/B,KAAI,SAAS,WAAY,QAAO;AAChC,KAAI,SAAS,QAAS,QAAO;AAC7B,QAAO;;AAER,MAAM,6BAA6B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACrF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,kDAAkD;CACpF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,UAAU,cAAc,GAAG,MAAM,OAAO;CAC9C,MAAM,SAAS;EACd,MAAM;GACL;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,SAAS,QAAQ,GAAG,UAAU;EAChC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,mBAAmB,OAAO,GAAG,sBAAsB,WAAW,GAAG,oBAAoB;EACrF,MAAM,cAAc,GAAG,MAAM,EAAE;EAC/B,cAAc,OAAO,GAAG,iBAAiB,WAAW,GAAG,eAAe;EACtE,GAAG,cAAc,GAAG,GAAG,EAAE;EACzB,WAAW,OAAO,GAAG,cAAc,WAAW,GAAG,YAAY;EAC7D;CACD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,UAAU,kBAAkB,IAAI,YAAY,GAAG,IAAI;CACzD,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;CACvB,MAAM,kBAAkB,IAAI,cAAc;AAC1C,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,qCAAqC;EAC3I;EACA;EACA,OAAO;EACP,OAAO;EACP,OAAO;EACP,eAAe,OAAO,KAAK;EAC3B;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,4BAA4B,CAAC"}
1
+ {"version":3,"file":"renderer-DIyzKouj.mjs","names":[],"sources":["../../../nodes/node-audio-parametric-eq/dist/renderers-Dt34aC_m.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"frequency\",\n\t\"gain\",\n\t\"q\"\n];\nconst PARAMETRIC_EQ_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n numBands : f32,\n frequency : f32,\n gain : f32,\n q : f32,\n bandType : f32,\n hasFrequencySig : f32,\n hasGainSig : f32,\n hasQSig : 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>;\n@group(0) @binding(4) var<storage, read> frequencySignal : array<f32>;\n@group(0) @binding(5) var<storage, read> gainSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> qSignal : array<f32>;\n\nconst PI: f32 = 3.141592653589793f;\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 sampleRate = u.sampleRate;\n let bandType = u.bandType; // 0=peak, 1=lowShelf, 2=highShelf, 3=lowPass, 4=highPass, 5=notch\n\n let biquadStateOffset = 4u;\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let offset = biquadStateOffset + c * 4u;\n var x1 = state[offset];\n var x2 = state[offset + 1u];\n var y1 = state[offset + 2u];\n var y2 = state[offset + 3u];\n\n if (is_nan_or_inf(x1)) { x1 = 0.0f; }\n if (is_nan_or_inf(x2)) { x2 = 0.0f; }\n if (is_nan_or_inf(y1)) { y1 = 0.0f; }\n if (is_nan_or_inf(y2)) { y2 = 0.0f; }\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let sampleIndex = c * numSamples + index;\n var x = inputChannels[sampleIndex];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n\n // 1. Dynamic Parameter Signal Resolution & Clamping\n var effFreq = u.frequency;\n if (u.hasFrequencySig > 0.5f) {\n effFreq = frequencySignal[index];\n }\n effFreq = clamp(effFreq, 20.0f, sampleRate / 2.0f - 1.0f);\n\n var effQ = u.q;\n if (u.hasQSig > 0.5f) {\n effQ = qSignal[index];\n }\n effQ = clamp(effQ, 0.01f, 10.0f);\n\n var effGain = u.gain;\n if (u.hasGainSig > 0.5f) {\n effGain = gainSignal[index];\n }\n effGain = clamp(effGain, -24.0f, 24.0f);\n\n if (bandType == 0.0f && abs(effGain) < 1e-5f) {\n // Bypass filter if peak gain is zero\n outputChannels[sampleIndex] = x;\n continue;\n }\n\n // 2. Biquad Coefficients Calculation\n let w0 = (2.0f * PI * effFreq) / sampleRate;\n let cos_w0 = cos(w0);\n let sin_w0 = sin(w0);\n let A = clamp(pow(10.0f, effGain / 40.0f), 0.25f, 4.0f);\n let alpha = sin_w0 / (2.0f * effQ);\n\n var b0 = 0.0f; var b1 = 0.0f; var b2 = 0.0f;\n var a0 = 0.0f; var a1 = 0.0f; var a2 = 0.0f;\n\n if (bandType == 0.0f) { // peak\n b0 = 1.0f + alpha * A;\n b1 = -2.0f * cos_w0;\n b2 = 1.0f - alpha * A;\n a0 = 1.0f + alpha / A;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha / A;\n } else if (bandType == 1.0f) { // lowShelf\n let sqrtA = sqrt(A);\n let twoSqrtAAlpha = 2.0f * sqrtA * alpha;\n b0 = A * (A + 1.0f - (A - 1.0f) * cos_w0 + twoSqrtAAlpha);\n b1 = 2.0f * A * (A - 1.0f - (A + 1.0f) * cos_w0);\n b2 = A * (A + 1.0f - (A - 1.0f) * cos_w0 - twoSqrtAAlpha);\n a0 = A + 1.0f + (A - 1.0f) * cos_w0 + twoSqrtAAlpha;\n a1 = -2.0f * (A - 1.0f + (A + 1.0f) * cos_w0);\n a2 = A + 1.0f + (A - 1.0f) * cos_w0 - twoSqrtAAlpha;\n } else if (bandType == 2.0f) { // highShelf\n let sqrtA = sqrt(A);\n let twoSqrtAAlpha = 2.0f * sqrtA * alpha;\n b0 = A * (A + 1.0f + (A - 1.0f) * cos_w0 + twoSqrtAAlpha);\n b1 = -2.0f * A * (A - 1.0f + (A + 1.0f) * cos_w0);\n b2 = A * (A + 1.0f + (A - 1.0f) * cos_w0 - twoSqrtAAlpha);\n a0 = A + 1.0f - (A - 1.0f) * cos_w0 + twoSqrtAAlpha;\n a1 = 2.0f * (A - 1.0f - (A + 1.0f) * cos_w0);\n a2 = A + 1.0f - (A - 1.0f) * cos_w0 - twoSqrtAAlpha;\n } else if (bandType == 3.0f) { // lowPass\n b0 = (1.0f - cos_w0) / 2.0f;\n b1 = 1.0f - cos_w0;\n b2 = (1.0f - cos_w0) / 2.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n } else if (bandType == 4.0f) { // highPass\n b0 = (1.0f + cos_w0) / 2.0f;\n b1 = -(1.0f + cos_w0);\n b2 = (1.0f + cos_w0) / 2.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n } else if (bandType == 5.0f) { // notch\n b0 = 1.0f;\n b1 = -2.0f * cos_w0;\n b2 = 1.0f;\n a0 = 1.0f + alpha;\n a1 = -2.0f * cos_w0;\n a2 = 1.0f - alpha;\n }\n\n if (abs(a0) < 1e-9f) {\n outputChannels[sampleIndex] = x;\n continue;\n }\n\n let b0_norm = b0 / a0;\n let b1_norm = b1 / a0;\n let b2_norm = b2 / a0;\n let a1_norm = a1 / a0;\n let a2_norm = a2 / a0;\n\n var y = b0_norm * x + b1_norm * x1 + b2_norm * x2 - a1_norm * y1 - a2_norm * y2;\n if (is_nan_or_inf(y)) { y = 0.0f; }\n\n // Biquad State History Update with Soft Anti-Explosion Clamping\n x2 = x1;\n x1 = x;\n y2 = clamp(y1, -4.0f, 4.0f);\n y1 = clamp(y, -4.0f, 4.0f);\n\n // Output Soft Clipping\n if (y > 1.0f) {\n y = 1.0f;\n } else if (y < -1.0f) {\n y = -1.0f;\n } else if (y > 0.9f) {\n y = 0.9f + 0.1f * tanh((y - 0.9f) / 0.1f);\n } else if (y < -0.9f) {\n y = -0.9f + 0.1f * tanh((y + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = y;\n }\n\n state[offset] = x1;\n state[offset + 1u] = x2;\n state[offset + 2u] = y1;\n state[offset + 3u] = y2;\n }\n}\n`;\nconst getBandTypeVal = (type) => {\n\tif (type === \"peak\") return 0;\n\tif (type === \"lowShelf\") return 1;\n\tif (type === \"highShelf\") return 2;\n\tif (type === \"lowPass\") return 3;\n\tif (type === \"highPass\") return 4;\n\tif (type === \"notch\") return 5;\n\treturn 0;\n};\nconst parametricEqAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Parametric EQ.\");\n\tconst op = virtualMedia.operation || {};\n\tconst rawType = resolveString(op.type, \"peak\");\n\tconst config = {\n\t\ttype: [\n\t\t\t\"lowShelf\",\n\t\t\t\"highShelf\",\n\t\t\t\"peak\",\n\t\t\t\"lowPass\",\n\t\t\t\"highPass\",\n\t\t\t\"notch\"\n\t\t].includes(rawType) ? rawType : \"peak\",\n\t\tfrequency: resolveNumber(op.frequency, 1e3),\n\t\tfrequencyHandleId: typeof op.frequencyHandleId === \"string\" ? op.frequencyHandleId : null,\n\t\tgain: resolveNumber(op.gain, 0),\n\t\tgainHandleId: typeof op.gainHandleId === \"string\" ? op.gainHandleId : null,\n\t\tq: resolveNumber(op.q, 1),\n\t\tqHandleId: typeof op.qHandleId === \"string\" ? op.qHandleId : null\n\t};\n\tconst hasFrequencySig = isHandleConnected(op, \"frequencyHandleId\") ? 1 : 0;\n\tconst hasGainSig = isHandleConnected(op, \"gainHandleId\") ? 1 : 0;\n\tconst hasQSig = isHandleConnected(op, \"qHandleId\") ? 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-parametric-eq\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 4 + numChannels * 4;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, PARAMETRIC_EQ_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\t1,\n\t\tconfig.frequency,\n\t\tconfig.gain,\n\t\tconfig.q,\n\t\tgetBandTypeVal(config.type),\n\t\thasFrequencySig,\n\t\thasGainSig,\n\t\thasQSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0,\n\t\t0,\n\t\t0\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: parametricEqAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dt34aC_m.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;AACD,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+L5C,MAAM,kBAAkB,SAAS;AAChC,KAAI,SAAS,OAAQ,QAAO;AAC5B,KAAI,SAAS,WAAY,QAAO;AAChC,KAAI,SAAS,YAAa,QAAO;AACjC,KAAI,SAAS,UAAW,QAAO;AAC/B,KAAI,SAAS,WAAY,QAAO;AAChC,KAAI,SAAS,QAAS,QAAO;AAC7B,QAAO;;AAER,MAAM,6BAA6B,OAAO,UAAU,YAAY,cAAc,QAAQ;AACrF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,kDAAkD;CACpF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,UAAU,cAAc,GAAG,MAAM,OAAO;CAC9C,MAAM,SAAS;EACd,MAAM;GACL;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,SAAS,QAAQ,GAAG,UAAU;EAChC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,mBAAmB,OAAO,GAAG,sBAAsB,WAAW,GAAG,oBAAoB;EACrF,MAAM,cAAc,GAAG,MAAM,EAAE;EAC/B,cAAc,OAAO,GAAG,iBAAiB,WAAW,GAAG,eAAe;EACtE,GAAG,cAAc,GAAG,GAAG,EAAE;EACzB,WAAW,OAAO,GAAG,cAAc,WAAW,GAAG,YAAY;EAC7D;CACD,MAAM,kBAAkB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI;CACzE,MAAM,aAAa,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAC/D,MAAM,UAAU,kBAAkB,IAAI,YAAY,GAAG,IAAI;CACzD,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;CACvB,MAAM,kBAAkB,IAAI,cAAc;AAC1C,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,qCAAqC;EAC3I;EACA;EACA,OAAO;EACP,OAAO;EACP,OAAO;EACP,eAAe,OAAO,KAAK;EAC3B;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,4BAA4B,CAAC"}
@@ -1,7 +1,7 @@
1
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-SB9qfAko.mjs";
3
- import { Z as probeVideoSize } from "./dist-CspOG4V1.mjs";
4
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-DtT5I4ME.mjs";
1
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
+ import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-CQZ5_60A.mjs";
3
+ import { Z as probeVideoSize } from "./dist-BBUrGwqd.mjs";
4
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-I5fdrflL.mjs";
5
5
  import { z } from "zod";
6
6
 
7
7
  //#region ../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs
@@ -180,4 +180,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
180
180
 
181
181
  //#endregion
182
182
  export { renderers_default as t };
183
- //# sourceMappingURL=renderer-BwwZB2mt.mjs.map
183
+ //# sourceMappingURL=renderer-DJ78Bgv7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BwwZB2mt.mjs","names":[],"sources":["../../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { probeVideoSize } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst rotateConfig = configBuilder().field(\"angle\", z.number().default(90), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Angle Signal\",\n\tdescription: \"Rotation in degrees about the frame center, clockwise. Any value; 90 / 180 / 270 fix footage shot sideways or upside down.\"\n}).field(\"fit\", z.enum([\n\t\"cover\",\n\t\"contain\",\n\t\"fill\"\n]).default(\"cover\"), { description: \"How the rotated source sits in the output: cover fills it (cropping the overhang), contain shows all of it (transparent margins), fill keeps the unrotated source stretched to the output and only turns it.\" }).field(\"scale\", z.number().min(.01).max(20).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Scale Signal\",\n\tdescription: \"Extra zoom applied after the fit (1 = exactly fitted).\"\n}).build();\nconst RotateNodeConfigSchema = rotateConfig.schema;\nconst RotateResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ROTATE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n/**\n* Size (px) of the rotated source inside a `targetWidth × targetHeight` output.\n* `cover` is the smallest size whose rotated rectangle still covers the whole\n* output; `contain` the largest whose rotated bounding box fits inside it.\n*/\nfunction rotatedSourceSize(sourceWidth, sourceHeight, targetWidth, targetHeight, angleDeg, fit) {\n\tif (fit === \"fill\") return {\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t};\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst c = Math.abs(Math.cos(rad));\n\tconst s = Math.abs(Math.sin(rad));\n\tconst k = fit === \"cover\" ? Math.max((c * targetWidth + s * targetHeight) / sourceWidth, (s * targetWidth + c * targetHeight) / sourceHeight) : Math.min(targetWidth / (c * sourceWidth + s * sourceHeight), targetHeight / (s * sourceWidth + c * sourceHeight));\n\treturn {\n\t\twidth: sourceWidth * k,\n\t\theight: sourceHeight * k\n\t};\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_ROTATE_SHADER = `\nstruct RotateUniforms {\n\toutSize: vec2<f32>,\n\tsize : vec2<f32>,\n\tcs : vec2<f32>,\n\t_pad : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RotateUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = (in.uv - vec2<f32>(0.5)) * u.outSize;\n\t// Clockwise on screen (y down): undo it with the transpose.\n\tlet q = vec2<f32>(u.cs.x * p.x + u.cs.y * p.y, -u.cs.y * p.x + u.cs.x * p.y);\n\tlet uv = q / u.size + vec2<f32>(0.5);\n\t// Distance (output px) inside the source rectangle's nearest edge.\n\tlet edge = (vec2<f32>(0.5) - abs(uv - vec2<f32>(0.5))) * u.size;\n\tlet coverage = clamp(min(edge.x, edge.y) + 0.5, 0.0, 1.0);\n\tlet color = textureSampleLevel(tex, samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\t// Premultiplied: coverage scales every channel.\n\treturn color * coverage;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getRotateResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_ROTATE_SHADER }),\n\t\t\tlayouts: [uniformLayout, textureLayout],\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction resolveNumber(raw, fallback, frame, fps) {\n\tconst value = typeof raw === \"function\" ? raw(frame, fps) : raw !== null && typeof raw === \"object\" ? \"get\" in raw && typeof raw.get === \"function\" ? raw.get({\n\t\tframe,\n\t\tfps\n\t}) : \"value\" in raw ? raw.value : raw : raw;\n\tconst n = Number(value ?? fallback);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* The child's own size: the nearest stated metadata down the chain, else the\n* source file's display size. A layer built from a bare path states none, and\n* guessing the layer box would turn a 16:9 clip into a squeezed 9:16 one.\n*/\nasync function intrinsicSize(media) {\n\tfor (let node = media; node;) {\n\t\tconst { width, height } = node.metadata ?? {};\n\t\tif (width && height) return {\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tconst op = node.operation;\n\t\tif (op.op === \"source\") {\n\t\t\tconst url = typeof op.url === \"string\" ? op.url : op.source;\n\t\t\treturn typeof url === \"string\" ? probeVideoSize(url) : null;\n\t\t}\n\t\tnode = node.children?.[0];\n\t}\n\treturn null;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Rotate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intrinsic = await intrinsicSize(childMedia);\n\tconst sourceWidth = intrinsic?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = intrinsic?.height ?? props.containerHeight ?? height;\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst angle = resolveNumber(op.angle, 90, compositionFrame, fps);\n\tconst scale = Math.max(.01, resolveNumber(op.scale, 1, compositionFrame, fps));\n\tconst size = rotatedSourceSize(sourceWidth, sourceHeight, width, height, angle, op.fit ?? \"cover\");\n\tconst rad = angle * Math.PI / 180;\n\tuniformData[0] = width;\n\tuniformData[1] = height;\n\tuniformData[2] = size.width * scale;\n\tuniformData[3] = size.height * scale;\n\tuniformData[4] = Math.cos(rad);\n\tuniformData[5] = Math.sin(rad);\n\tconst { pipeline, uniformLayout, textureLayout } = getRotateResources(ctx.device, ctx.renderer.format);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: ctx.renderer.getTemporaryBuffer(uniformData) }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: ctx.renderer.samplerCache.getSampler(ctx.device)\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { rotateConfig as a, RotateResultSchema as i, ROTATE_OUTPUT_TYPE_MAP as n, rotatedSourceSize as o, RotateNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-D7DemTXH.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DJ78Bgv7.mjs","names":[],"sources":["../../../nodes/node-rotate/dist/renderers-D7DemTXH.mjs"],"sourcesContent":["import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { probeVideoSize } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst rotateConfig = configBuilder().field(\"angle\", z.number().default(90), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Angle Signal\",\n\tdescription: \"Rotation in degrees about the frame center, clockwise. Any value; 90 / 180 / 270 fix footage shot sideways or upside down.\"\n}).field(\"fit\", z.enum([\n\t\"cover\",\n\t\"contain\",\n\t\"fill\"\n]).default(\"cover\"), { description: \"How the rotated source sits in the output: cover fills it (cropping the overhang), contain shows all of it (transparent margins), fill keeps the unrotated source stretched to the output and only turns it.\" }).field(\"scale\", z.number().min(.01).max(20).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Scale Signal\",\n\tdescription: \"Extra zoom applied after the fit (1 = exactly fitted).\"\n}).build();\nconst RotateNodeConfigSchema = rotateConfig.schema;\nconst RotateResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ROTATE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n/**\n* Size (px) of the rotated source inside a `targetWidth × targetHeight` output.\n* `cover` is the smallest size whose rotated rectangle still covers the whole\n* output; `contain` the largest whose rotated bounding box fits inside it.\n*/\nfunction rotatedSourceSize(sourceWidth, sourceHeight, targetWidth, targetHeight, angleDeg, fit) {\n\tif (fit === \"fill\") return {\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t};\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst c = Math.abs(Math.cos(rad));\n\tconst s = Math.abs(Math.sin(rad));\n\tconst k = fit === \"cover\" ? Math.max((c * targetWidth + s * targetHeight) / sourceWidth, (s * targetWidth + c * targetHeight) / sourceHeight) : Math.min(targetWidth / (c * sourceWidth + s * sourceHeight), targetHeight / (s * sourceWidth + c * sourceHeight));\n\treturn {\n\t\twidth: sourceWidth * k,\n\t\theight: sourceHeight * k\n\t};\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_ROTATE_SHADER = `\nstruct RotateUniforms {\n\toutSize: vec2<f32>,\n\tsize : vec2<f32>,\n\tcs : vec2<f32>,\n\t_pad : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RotateUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = (in.uv - vec2<f32>(0.5)) * u.outSize;\n\t// Clockwise on screen (y down): undo it with the transpose.\n\tlet q = vec2<f32>(u.cs.x * p.x + u.cs.y * p.y, -u.cs.y * p.x + u.cs.x * p.y);\n\tlet uv = q / u.size + vec2<f32>(0.5);\n\t// Distance (output px) inside the source rectangle's nearest edge.\n\tlet edge = (vec2<f32>(0.5) - abs(uv - vec2<f32>(0.5))) * u.size;\n\tlet coverage = clamp(min(edge.x, edge.y) + 0.5, 0.0, 1.0);\n\tlet color = textureSampleLevel(tex, samp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\t// Premultiplied: coverage scales every channel.\n\treturn color * coverage;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getRotateResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_ROTATE_SHADER }),\n\t\t\tlayouts: [uniformLayout, textureLayout],\n\t\t\tformat: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction resolveNumber(raw, fallback, frame, fps) {\n\tconst value = typeof raw === \"function\" ? raw(frame, fps) : raw !== null && typeof raw === \"object\" ? \"get\" in raw && typeof raw.get === \"function\" ? raw.get({\n\t\tframe,\n\t\tfps\n\t}) : \"value\" in raw ? raw.value : raw : raw;\n\tconst n = Number(value ?? fallback);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* The child's own size: the nearest stated metadata down the chain, else the\n* source file's display size. A layer built from a bare path states none, and\n* guessing the layer box would turn a 16:9 clip into a squeezed 9:16 one.\n*/\nasync function intrinsicSize(media) {\n\tfor (let node = media; node;) {\n\t\tconst { width, height } = node.metadata ?? {};\n\t\tif (width && height) return {\n\t\t\twidth,\n\t\t\theight\n\t\t};\n\t\tconst op = node.operation;\n\t\tif (op.op === \"source\") {\n\t\t\tconst url = typeof op.url === \"string\" ? op.url : op.source;\n\t\t\treturn typeof url === \"string\" ? probeVideoSize(url) : null;\n\t\t}\n\t\tnode = node.children?.[0];\n\t}\n\treturn null;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Rotate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intrinsic = await intrinsicSize(childMedia);\n\tconst sourceWidth = intrinsic?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = intrinsic?.height ?? props.containerHeight ?? height;\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst angle = resolveNumber(op.angle, 90, compositionFrame, fps);\n\tconst scale = Math.max(.01, resolveNumber(op.scale, 1, compositionFrame, fps));\n\tconst size = rotatedSourceSize(sourceWidth, sourceHeight, width, height, angle, op.fit ?? \"cover\");\n\tconst rad = angle * Math.PI / 180;\n\tuniformData[0] = width;\n\tuniformData[1] = height;\n\tuniformData[2] = size.width * scale;\n\tuniformData[3] = size.height * scale;\n\tuniformData[4] = Math.cos(rad);\n\tuniformData[5] = Math.sin(rad);\n\tconst { pipeline, uniformLayout, textureLayout } = getRotateResources(ctx.device, ctx.renderer.format);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: ctx.renderer.getTemporaryBuffer(uniformData) }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: ctx.renderer.samplerCache.getSampler(ctx.device)\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { rotateConfig as a, RotateResultSchema as i, ROTATE_OUTPUT_TYPE_MAP as n, rotatedSourceSize as o, RotateNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-D7DemTXH.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-BBUrGwqd.mjs";
3
+ import { t as renderers_default } from "./renderer-JaSEubRQ.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-BBUrGwqd.mjs";
3
+ import { t as renderers_default } from "./renderer-DWtquP0s.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,5 +1,5 @@
1
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
2
- import { G as parseColor } from "./dist-CspOG4V1.mjs";
1
+ import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
+ import { G as parseColor } from "./dist-BBUrGwqd.mjs";
3
3
 
4
4
  //#region ../../nodes/node-paint/dist/renderers-Cp52luA9.mjs
5
5
  const PaintWebGPURenderer = async (args) => {
@@ -142,4 +142,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });
142
142
 
143
143
  //#endregion
144
144
  export { renderers_default as t };
145
- //# sourceMappingURL=renderer-B4RpSd4A.mjs.map
145
+ //# sourceMappingURL=renderer-DVnrUnkh.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-B4RpSd4A.mjs","names":[],"sources":["../../../nodes/node-paint/dist/renderers-Cp52luA9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst PaintWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tif (virtualMedia.operation?.op !== \"Paint\") return;\n\tconst childMedia = virtualMedia?.children?.[0];\n\tconst containerW = props.containerWidth ?? childMedia?.metadata?.width ?? targetWidth;\n\tconst containerH = props.containerHeight ?? childMedia?.metadata?.height ?? targetHeight;\n\tconst config = virtualMedia.operation;\n\tconst isMaskMode = config.mode === \"mask\";\n\tconst strokes = config.strokes ?? [];\n\tpass.end();\n\tctx.renderer.pushIdentity();\n\tconst baseTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [...props.excludeTextures || [], targetTexture]);\n\tconst baseView = baseTex.createView();\n\tif (isMaskMode) ctx.renderer.beginFrame(encoder, baseView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, containerW, containerH, \"clear\").end();\n\telse if (childMedia) await drawChild(childMedia, props, baseView, baseTex, containerW, containerH);\n\telse {\n\t\tconst basePass = ctx.renderer.beginFrame(encoder, baseView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\");\n\t\tif (config.backgroundColor) ctx.renderer.drawRect(basePass, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerW,\n\t\t\theight: containerH\n\t\t}, config.backgroundColor);\n\t\tbasePass.end();\n\t}\n\tlet finalTex = baseTex;\n\tif (strokes.length > 0) {\n\t\tconst origW = childMedia?.metadata?.width ?? containerW;\n\t\tconst origH = childMedia?.metadata?.height ?? containerH;\n\t\tconst scaleX = origW > 0 ? containerW / origW : 1;\n\t\tconst scaleY = origH > 0 ? containerH / origH : 1;\n\t\tlet scalePushed = false;\n\t\tif (scaleX !== 1 || scaleY !== 1) {\n\t\t\tctx.renderer.pushTransform(new DOMMatrix().scale(scaleX, scaleY));\n\t\t\tscalePushed = true;\n\t\t}\n\t\tconst paintTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\tbaseTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst paintView = paintTex.createView();\n\t\tctx.renderer.beginFrame(encoder, paintView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\").end();\n\t\tconst allStrokes = strokes;\n\t\tlet currentLayer = paintTex;\n\t\tlet currentPass = null;\n\t\tfor (const stroke of allStrokes) if (stroke.tool === \"brush\") {\n\t\t\tif (!currentPass) currentPass = ctx.renderer.beginFrame(encoder, currentLayer.createView(), {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"load\");\n\t\t\tconst parsedColor = parseColor(stroke.color);\n\t\t\tconst drawColor = isMaskMode ? {\n\t\t\t\tr: parsedColor.a,\n\t\t\t\tg: parsedColor.a,\n\t\t\t\tb: parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t} : {\n\t\t\t\tr: parsedColor.r * parsedColor.a,\n\t\t\t\tg: parsedColor.g * parsedColor.a,\n\t\t\t\tb: parsedColor.b * parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t};\n\t\t\tctx.renderer.drawPath(currentPass, stroke.path, drawColor, stroke.size, {\n\t\t\t\topacity: stroke.opacity ?? 1,\n\t\t\t\tblendMode: \"max\"\n\t\t\t});\n\t\t} else if (stroke.tool === \"eraser\") {\n\t\t\tif (currentPass) {\n\t\t\t\tcurrentPass.end();\n\t\t\t\tcurrentPass = null;\n\t\t\t}\n\t\t\tconst maskTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t\tconst maskView = maskTex.createView();\n\t\t\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"clear\");\n\t\t\tctx.renderer.drawPath(maskPass, stroke.path, \"#ffffff\", stroke.size, { blendMode: \"max\" });\n\t\t\tmaskPass.end();\n\t\t\tcurrentLayer = ctx.renderer.composite(encoder, currentLayer, maskTex, \"mask-out\", [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t}\n\t\tif (currentPass) currentPass.end();\n\t\tfinalTex = ctx.renderer.composite(encoder, baseTex, currentLayer, \"normal\", [\n\t\t\tbaseTex,\n\t\t\tcurrentLayer,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tif (scalePushed) ctx.renderer.popTransform();\n\t}\n\tctx.renderer.popTransform();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, finalTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerW,\n\t\theight: containerH\n\t});\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Cp52luA9.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-DVnrUnkh.mjs","names":[],"sources":["../../../nodes/node-paint/dist/renderers-Cp52luA9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst PaintWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tif (virtualMedia.operation?.op !== \"Paint\") return;\n\tconst childMedia = virtualMedia?.children?.[0];\n\tconst containerW = props.containerWidth ?? childMedia?.metadata?.width ?? targetWidth;\n\tconst containerH = props.containerHeight ?? childMedia?.metadata?.height ?? targetHeight;\n\tconst config = virtualMedia.operation;\n\tconst isMaskMode = config.mode === \"mask\";\n\tconst strokes = config.strokes ?? [];\n\tpass.end();\n\tctx.renderer.pushIdentity();\n\tconst baseTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [...props.excludeTextures || [], targetTexture]);\n\tconst baseView = baseTex.createView();\n\tif (isMaskMode) ctx.renderer.beginFrame(encoder, baseView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, containerW, containerH, \"clear\").end();\n\telse if (childMedia) await drawChild(childMedia, props, baseView, baseTex, containerW, containerH);\n\telse {\n\t\tconst basePass = ctx.renderer.beginFrame(encoder, baseView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\");\n\t\tif (config.backgroundColor) ctx.renderer.drawRect(basePass, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerW,\n\t\t\theight: containerH\n\t\t}, config.backgroundColor);\n\t\tbasePass.end();\n\t}\n\tlet finalTex = baseTex;\n\tif (strokes.length > 0) {\n\t\tconst origW = childMedia?.metadata?.width ?? containerW;\n\t\tconst origH = childMedia?.metadata?.height ?? containerH;\n\t\tconst scaleX = origW > 0 ? containerW / origW : 1;\n\t\tconst scaleY = origH > 0 ? containerH / origH : 1;\n\t\tlet scalePushed = false;\n\t\tif (scaleX !== 1 || scaleY !== 1) {\n\t\t\tctx.renderer.pushTransform(new DOMMatrix().scale(scaleX, scaleY));\n\t\t\tscalePushed = true;\n\t\t}\n\t\tconst paintTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\tbaseTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst paintView = paintTex.createView();\n\t\tctx.renderer.beginFrame(encoder, paintView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\").end();\n\t\tconst allStrokes = strokes;\n\t\tlet currentLayer = paintTex;\n\t\tlet currentPass = null;\n\t\tfor (const stroke of allStrokes) if (stroke.tool === \"brush\") {\n\t\t\tif (!currentPass) currentPass = ctx.renderer.beginFrame(encoder, currentLayer.createView(), {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"load\");\n\t\t\tconst parsedColor = parseColor(stroke.color);\n\t\t\tconst drawColor = isMaskMode ? {\n\t\t\t\tr: parsedColor.a,\n\t\t\t\tg: parsedColor.a,\n\t\t\t\tb: parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t} : {\n\t\t\t\tr: parsedColor.r * parsedColor.a,\n\t\t\t\tg: parsedColor.g * parsedColor.a,\n\t\t\t\tb: parsedColor.b * parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t};\n\t\t\tctx.renderer.drawPath(currentPass, stroke.path, drawColor, stroke.size, {\n\t\t\t\topacity: stroke.opacity ?? 1,\n\t\t\t\tblendMode: \"max\"\n\t\t\t});\n\t\t} else if (stroke.tool === \"eraser\") {\n\t\t\tif (currentPass) {\n\t\t\t\tcurrentPass.end();\n\t\t\t\tcurrentPass = null;\n\t\t\t}\n\t\t\tconst maskTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t\tconst maskView = maskTex.createView();\n\t\t\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"clear\");\n\t\t\tctx.renderer.drawPath(maskPass, stroke.path, \"#ffffff\", stroke.size, { blendMode: \"max\" });\n\t\t\tmaskPass.end();\n\t\t\tcurrentLayer = ctx.renderer.composite(encoder, currentLayer, maskTex, \"mask-out\", [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t}\n\t\tif (currentPass) currentPass.end();\n\t\tfinalTex = ctx.renderer.composite(encoder, baseTex, currentLayer, \"normal\", [\n\t\t\tbaseTex,\n\t\t\tcurrentLayer,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tif (scalePushed) ctx.renderer.popTransform();\n\t}\n\tctx.renderer.popTransform();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, finalTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerW,\n\t\theight: containerH\n\t});\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Cp52luA9.mjs.map"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { Pt as isSignal, Yt as resolveNumber } from "./dist-ClyC_d66.mjs";
2
- import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
3
- import { g as WebGPUAudioProcessor } from "./dist-CspOG4V1.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-BBUrGwqd.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-C1E5Rt5q.mjs.map
99
+ //# sourceMappingURL=renderer-DWtquP0s.mjs.map