framefields 2.4.1 → 2.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +11 -33
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DHuEMOtQ.d.mts → audio-BymXfAvH.d.mts} +3 -3
  5. package/dist/{audio-DHuEMOtQ.d.mts.map → audio-BymXfAvH.d.mts.map} +1 -1
  6. package/dist/{audio-CPApYcWF.mjs → audio-BzHHpImj.mjs} +4 -4
  7. package/dist/{audio-CPApYcWF.mjs.map → audio-BzHHpImj.mjs.map} +1 -1
  8. package/dist/{dist-SB9qfAko.mjs → dist-Bo2_zeCn.mjs} +2 -2
  9. package/dist/{dist-SB9qfAko.mjs.map → dist-Bo2_zeCn.mjs.map} +1 -1
  10. package/dist/{dist-CrK3rmyN.mjs → dist-DMa2BbYs.mjs} +45 -5
  11. package/dist/{dist-CrK3rmyN.mjs.map → dist-DMa2BbYs.mjs.map} +1 -1
  12. package/dist/{dist-ClyC_d66.mjs → dist-TrtLGPvc.mjs} +117 -40
  13. package/dist/dist-TrtLGPvc.mjs.map +1 -0
  14. package/dist/{dist-CspOG4V1.mjs → dist-hmWTJPik.mjs} +2 -2
  15. package/dist/{dist-CspOG4V1.mjs.map → dist-hmWTJPik.mjs.map} +1 -1
  16. package/dist/effects/index.d.mts +5 -5
  17. package/dist/effects/index.mjs +35 -35
  18. package/dist/{effects-DxylPSuI.mjs → effects-CiZjSwIh.mjs} +71 -3
  19. package/dist/effects-CiZjSwIh.mjs.map +1 -0
  20. package/dist/fonts/index.mjs +2 -2
  21. package/dist/{fonts-CsMDfqv9.mjs → fonts-Da1JDKpc.mjs} +2 -2
  22. package/dist/{fonts-CsMDfqv9.mjs.map → fonts-Da1JDKpc.mjs.map} +1 -1
  23. package/dist/{gpu-DtT5I4ME.mjs → gpu-CHIgM_YH.mjs} +2 -2
  24. package/dist/{gpu-DtT5I4ME.mjs.map → gpu-CHIgM_YH.mjs.map} +1 -1
  25. package/dist/{index-B1XcyMm8.d.mts → index-B0BZMhtw.d.mts} +7 -7
  26. package/dist/index-B0BZMhtw.d.mts.map +1 -0
  27. package/dist/{index-B2Xesdug.d.mts → index-CJkihekp.d.mts} +293 -143
  28. package/dist/index-CJkihekp.d.mts.map +1 -0
  29. package/dist/{index-DujpgUUq.d.mts → index-DGe83M-p.d.mts} +240 -152
  30. package/dist/index-DGe83M-p.d.mts.map +1 -0
  31. package/dist/{index-BxARm93R.d.mts → index-DIvWBm-q.d.mts} +41 -12
  32. package/dist/index-DIvWBm-q.d.mts.map +1 -0
  33. package/dist/{index-C0o3lLyA.d.mts → index-Dwf76Qep.d.mts} +16 -4
  34. package/dist/index-Dwf76Qep.d.mts.map +1 -0
  35. package/dist/{index-D-l-yCv6.d.mts → index-WMofVN02.d.mts} +3 -3
  36. package/dist/{index-D-l-yCv6.d.mts.map → index-WMofVN02.d.mts.map} +1 -1
  37. package/dist/index.d.mts +143 -73
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +165 -165
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/preview/index.d.mts +2 -2
  42. package/dist/preview/index.mjs +10 -10
  43. package/dist/{preview-D2dMmokw.mjs → preview-5E4B96RD.mjs} +2 -2
  44. package/dist/{preview-D2dMmokw.mjs.map → preview-5E4B96RD.mjs.map} +1 -1
  45. package/dist/preview-engine/audio.mjs +1 -1
  46. package/dist/preview-engine/{chunk-3ACCCPBN.mjs → chunk-37P2KIFE.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-GNG4YH2W.mjs → chunk-3SOD7OTO.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-DOCSX45C.mjs → chunk-54HE34HO.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-WJJIISQJ.mjs → chunk-5CWQHYQP.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-Z6UKUHPU.mjs → chunk-5EVEGKWT.mjs} +1 -1
  51. package/dist/preview-engine/chunk-5JSSXOBB.mjs +1 -0
  52. package/dist/preview-engine/chunk-5SVJIGPK.mjs +1 -0
  53. package/dist/preview-engine/{chunk-5RQHNB6Y.mjs → chunk-6MBYREBG.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-WACWOKEP.mjs → chunk-6TGNQ5FD.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-HUKAC5MJ.mjs → chunk-6WKWYUOM.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-SWXVITCQ.mjs → chunk-7J4OK4VE.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-O6NRIXS5.mjs → chunk-7QE6II7R.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-34ACEGNW.mjs → chunk-A2775RSO.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-FFGBUS76.mjs → chunk-AKYUVDKM.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-6K7US2WD.mjs → chunk-AWX4YGC5.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-QJZKIY4H.mjs → chunk-AY2ZIXST.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-LK3T65RB.mjs → chunk-BIS3W4Z5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-7QJUC6YY.mjs → chunk-C45ROXI6.mjs} +14 -14
  64. package/dist/preview-engine/{chunk-GMGGDADT.mjs → chunk-CEIOI4HO.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-5E5J4KT4.mjs → chunk-E7DH7EPX.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-NNQUIVTE.mjs → chunk-EEOUHDUD.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-ZKPQGQE3.mjs → chunk-FDNR4PRC.mjs} +1 -1
  68. package/dist/preview-engine/chunk-FSAELHVT.mjs +1 -0
  69. package/dist/preview-engine/{chunk-C6Z7H2RZ.mjs → chunk-GIH5QURF.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-RDP6QROU.mjs → chunk-GQN35VLT.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-PZF6T7DM.mjs → chunk-ILBZQLUF.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-2DDBSI75.mjs → chunk-JJA4G3OU.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-KAQUNOVB.mjs → chunk-JJYNYYPA.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-NRAZV5OA.mjs → chunk-JTUK7ZXK.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-HDGFNBYK.mjs → chunk-KJ2DTA77.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-7LVOSEGN.mjs → chunk-LMZHCWXP.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-A5OVKZ52.mjs → chunk-LSBCFJZM.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-FLPSWDX4.mjs → chunk-MJN3LOZ7.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-WCZ5DKZ4.mjs → chunk-N3PRZLZJ.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-XOEEGC4Z.mjs → chunk-NVTPJUNG.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-67SSYK7D.mjs → chunk-O3NOB5IB.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-LIQA5OOU.mjs → chunk-O5LA63CK.mjs} +1 -1
  83. package/dist/preview-engine/chunk-OLLY3Q7M.mjs +1 -0
  84. package/dist/preview-engine/{chunk-FFMPC7QA.mjs → chunk-OZDZQMTB.mjs} +1 -1
  85. package/dist/preview-engine/chunk-PCWWKYFO.mjs +1 -0
  86. package/dist/preview-engine/{chunk-G4J662EL.mjs → chunk-S7NG26UG.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-FHKBALVI.mjs → chunk-TFFG5YFI.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-HNNIVJ2K.mjs → chunk-U4SQUTDV.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-JX22B2FS.mjs → chunk-UDDK5QZF.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-KT35IPCF.mjs → chunk-UMF7NNUA.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-GQLZXCW3.mjs → chunk-UVWGZUKZ.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-NQZKBFC6.mjs → chunk-V6DAD4S4.mjs} +14 -14
  93. package/dist/preview-engine/{chunk-R26SY5D4.mjs → chunk-V6LCSK6Q.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-2GIWWDE4.mjs → chunk-W3QGP5XF.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-RKVB47IA.mjs → chunk-XTPEGKOZ.mjs} +1 -1
  96. package/dist/preview-engine/chunk-YJ6GWVL4.mjs +174 -0
  97. package/dist/preview-engine/{chunk-LLDIDE5Q.mjs → chunk-YQYLBXOX.mjs} +1 -1
  98. package/dist/preview-engine/effects.mjs +1 -1
  99. package/dist/preview-engine/framefields.mjs +17 -17
  100. package/dist/preview-engine/player.mjs +1 -1
  101. package/dist/preview-engine/{renderers-WR6MKT5S.mjs → renderers-2A7YDJMJ.mjs} +1 -1
  102. package/dist/preview-engine/renderers-2AD6AHAO.mjs +1 -0
  103. package/dist/preview-engine/{renderers-K7B5PQBT.mjs → renderers-2GE5HE56.mjs} +1 -1
  104. package/dist/preview-engine/{renderers-SW7FIEKO.mjs → renderers-35G4KCQ2.mjs} +1 -1
  105. package/dist/preview-engine/renderers-37UYW266.mjs +1 -0
  106. package/dist/preview-engine/renderers-3YHETAPE.mjs +1 -0
  107. package/dist/preview-engine/renderers-43LBWRY2.mjs +1 -0
  108. package/dist/preview-engine/{renderers-TY7DVI7E.mjs → renderers-4H34AFW2.mjs} +1 -1
  109. package/dist/preview-engine/renderers-4I4UDLDR.mjs +1 -0
  110. package/dist/preview-engine/renderers-5EITT2FW.mjs +1 -0
  111. package/dist/preview-engine/{renderers-AZYJFJLO.mjs → renderers-5OGAF66H.mjs} +1 -1
  112. package/dist/preview-engine/{renderers-UMPOVFRA.mjs → renderers-6GYRMHGQ.mjs} +1 -1
  113. package/dist/preview-engine/{renderers-RKZGYWDG.mjs → renderers-7M3YOI7E.mjs} +1 -1
  114. package/dist/preview-engine/renderers-7UKFQ75V.mjs +1 -0
  115. package/dist/preview-engine/renderers-AIRDDXRB.mjs +1 -0
  116. package/dist/preview-engine/{renderers-MBSOKWKB.mjs → renderers-ATL5ARUV.mjs} +1 -1
  117. package/dist/preview-engine/renderers-BUOGMWAA.mjs +1 -0
  118. package/dist/preview-engine/renderers-C4XIAG3F.mjs +1 -0
  119. package/dist/preview-engine/{renderers-4AJWVIJG.mjs → renderers-DFJDEPCU.mjs} +1 -1
  120. package/dist/preview-engine/{renderers-6JZ4HYIU.mjs → renderers-DKOWLKDE.mjs} +1 -1
  121. package/dist/preview-engine/renderers-ELARGDRC.mjs +1 -0
  122. package/dist/preview-engine/renderers-EU5VM2S2.mjs +1 -0
  123. package/dist/preview-engine/{renderers-NJLGPPX7.mjs → renderers-FNPXT2EH.mjs} +1 -1
  124. package/dist/preview-engine/renderers-GEPP3YKK.mjs +1 -0
  125. package/dist/preview-engine/renderers-IQNZQWYU.mjs +1 -0
  126. package/dist/preview-engine/renderers-J6DEIWTU.mjs +1 -0
  127. package/dist/preview-engine/{renderers-U55KRIOV.mjs → renderers-JQ7AI473.mjs} +1 -1
  128. package/dist/preview-engine/renderers-JTVCE5PV.mjs +1 -0
  129. package/dist/preview-engine/{renderers-CK3ZL3GM.mjs → renderers-K23EAM2J.mjs} +1 -1
  130. package/dist/preview-engine/renderers-KCNUETAD.mjs +1 -0
  131. package/dist/preview-engine/renderers-KKBHXAWS.mjs +1 -0
  132. package/dist/preview-engine/{renderers-UDOBX433.mjs → renderers-KW75FYFG.mjs} +1 -1
  133. package/dist/preview-engine/renderers-LER7SUT2.mjs +1 -0
  134. package/dist/preview-engine/{renderers-GAIUTII6.mjs → renderers-LF6W5P2I.mjs} +1 -1
  135. package/dist/preview-engine/{renderers-FM6A5YR4.mjs → renderers-MHDLRY3S.mjs} +1 -1
  136. package/dist/preview-engine/renderers-MOERLDWF.mjs +1 -0
  137. package/dist/preview-engine/{renderers-XKHNBARD.mjs → renderers-NJAKGI25.mjs} +1 -1
  138. package/dist/preview-engine/renderers-NPKRNXAT.mjs +1 -0
  139. package/dist/preview-engine/renderers-O57YIIAO.mjs +1 -0
  140. package/dist/preview-engine/renderers-OPUIAD7I.mjs +1 -0
  141. package/dist/preview-engine/renderers-PENUAXDD.mjs +1 -0
  142. package/dist/preview-engine/renderers-PFCI7ZFW.mjs +1 -0
  143. package/dist/preview-engine/{renderers-HZHEGONW.mjs → renderers-PM4Q5QOW.mjs} +1 -1
  144. package/dist/preview-engine/renderers-Q4HDP2IE.mjs +1 -0
  145. package/dist/preview-engine/{renderers-GUPEJK3O.mjs → renderers-Q6AO5M54.mjs} +1 -1
  146. package/dist/preview-engine/{renderers-75TL7RLS.mjs → renderers-QJNGN722.mjs} +1 -1
  147. package/dist/preview-engine/renderers-QMHUOKMM.mjs +1 -0
  148. package/dist/preview-engine/renderers-R26YPECG.mjs +1 -0
  149. package/dist/preview-engine/renderers-TAFDMFEA.mjs +1 -0
  150. package/dist/preview-engine/{renderers-IHRFEZNP.mjs → renderers-TFEDHXPY.mjs} +1 -1
  151. package/dist/preview-engine/renderers-TMZLWQP2.mjs +1 -0
  152. package/dist/preview-engine/renderers-TP6ZMGU4.mjs +1 -0
  153. package/dist/preview-engine/renderers-TY63VTZB.mjs +1 -0
  154. package/dist/preview-engine/{renderers-IJDQJEE5.mjs → renderers-U2ZWRL25.mjs} +1 -1
  155. package/dist/preview-engine/renderers-UBO4ZNE6.mjs +1 -0
  156. package/dist/preview-engine/renderers-UCNQ536S.mjs +1 -0
  157. package/dist/preview-engine/{renderers-TCNPEANL.mjs → renderers-VD5GHHK6.mjs} +1 -1
  158. package/dist/preview-engine/{renderers-BDWVXYTW.mjs → renderers-WNMRLGZS.mjs} +1 -1
  159. package/dist/preview-engine/{renderers-FKH5S64C.mjs → renderers-WOLTH5VI.mjs} +1 -1
  160. package/dist/preview-engine/renderers-WOZQDE4A.mjs +1 -0
  161. package/dist/preview-engine/renderers-X2XGDF3R.mjs +1 -0
  162. package/dist/preview-engine/renderers-XG3BDROH.mjs +1 -0
  163. package/dist/preview-engine/{renderers-R4WMM6IX.mjs → renderers-XPO2WQNF.mjs} +1 -1
  164. package/dist/preview-engine/renderers-XS4CFZWR.mjs +1 -0
  165. package/dist/preview-engine/{renderers-FADYGSLK.mjs → renderers-XTCBHTHC.mjs} +1 -1
  166. package/dist/preview-engine/{renderers-LVLVJHOL.mjs → renderers-XTRFEQO4.mjs} +1 -1
  167. package/dist/preview-engine/renderers-ZQDMRWN7.mjs +1 -0
  168. package/dist/preview-engine/{renderers-7CPYTCNW.mjs → renderers-ZRR7BLB7.mjs} +1 -1
  169. package/dist/preview-engine/signals.mjs +1 -1
  170. package/dist/{program-C2cJayA1.mjs → program-KwDdbC0-.mjs} +78 -38
  171. package/dist/program-KwDdbC0-.mjs.map +1 -0
  172. package/dist/renderer/index.d.mts +2 -2
  173. package/dist/renderer/index.mjs +2 -2
  174. package/dist/{renderer-C1E5Rt5q.mjs → renderer-1P3yS8YM.mjs} +3 -3
  175. package/dist/{renderer-C1E5Rt5q.mjs.map → renderer-1P3yS8YM.mjs.map} +1 -1
  176. package/dist/renderer-5C41E6gT.mjs +5 -0
  177. package/dist/renderer-6SXF9Ykm.mjs +5 -0
  178. package/dist/renderer-B2C2w3Wr.mjs +5 -0
  179. package/dist/renderer-B2QSfPYZ.mjs +5 -0
  180. package/dist/{renderer-Bkrk0M0r.mjs → renderer-B4jxP8vF.mjs} +3 -3
  181. package/dist/{renderer-Bkrk0M0r.mjs.map → renderer-B4jxP8vF.mjs.map} +1 -1
  182. package/dist/{renderer-Csss5GFQ.mjs → renderer-B4ydDdo6.mjs} +2 -2
  183. package/dist/{renderer-Csss5GFQ.mjs.map → renderer-B4ydDdo6.mjs.map} +1 -1
  184. package/dist/renderer-B5cQcMl1.mjs +5 -0
  185. package/dist/{renderer-B3e4LSE6.mjs → renderer-B9ssmkbx.mjs} +3 -3
  186. package/dist/{renderer-B3e4LSE6.mjs.map → renderer-B9ssmkbx.mjs.map} +1 -1
  187. package/dist/{renderer-UcdqCarR.mjs → renderer-BAoKytKL.mjs} +3 -3
  188. package/dist/{renderer-UcdqCarR.mjs.map → renderer-BAoKytKL.mjs.map} +1 -1
  189. package/dist/{renderer-Cw6Sagih.mjs → renderer-BCLmYH4S.mjs} +3 -3
  190. package/dist/{renderer-Cw6Sagih.mjs.map → renderer-BCLmYH4S.mjs.map} +1 -1
  191. package/dist/renderer-BDhD8Yab.mjs +3 -0
  192. package/dist/{renderer-Za4D9hej.mjs → renderer-BHLYKy8b.mjs} +3 -3
  193. package/dist/{renderer-Za4D9hej.mjs.map → renderer-BHLYKy8b.mjs.map} +1 -1
  194. package/dist/{renderer-apeDrNXM.mjs → renderer-BI8QhEj9.mjs} +3 -3
  195. package/dist/{renderer-apeDrNXM.mjs.map → renderer-BI8QhEj9.mjs.map} +1 -1
  196. package/dist/{renderer-CCGzT6bX.mjs → renderer-BMLJgnbU.mjs} +2 -2
  197. package/dist/renderer-BSDdTHDh.mjs +5 -0
  198. package/dist/{renderer-CcoUNzlQ.mjs → renderer-BT0x6KPK.mjs} +3 -3
  199. package/dist/{renderer-CcoUNzlQ.mjs.map → renderer-BT0x6KPK.mjs.map} +1 -1
  200. package/dist/renderer-BTUjk8uY.mjs +5 -0
  201. package/dist/{renderer-RDCax5CK.mjs → renderer-BUwHWIf7.mjs} +3 -3
  202. package/dist/{renderer-RDCax5CK.mjs.map → renderer-BUwHWIf7.mjs.map} +1 -1
  203. package/dist/{renderer-DTw-W0Yz.mjs → renderer-B_b8-ztW.mjs} +3 -3
  204. package/dist/{renderer-DTw-W0Yz.mjs.map → renderer-B_b8-ztW.mjs.map} +1 -1
  205. package/dist/{renderer-DwVOxdzC.mjs → renderer-BaJQx0Bp.mjs} +3 -3
  206. package/dist/{renderer-DwVOxdzC.mjs.map → renderer-BaJQx0Bp.mjs.map} +1 -1
  207. package/dist/renderer-Bcey5Gvk.mjs +5 -0
  208. package/dist/renderer-Bd2MuOeJ.mjs +5 -0
  209. package/dist/renderer-Bd5A0zer.mjs +5 -0
  210. package/dist/{renderer-Dwu_zfdL.mjs → renderer-Bhfl-WFX.mjs} +3 -3
  211. package/dist/{renderer-Dwu_zfdL.mjs.map → renderer-Bhfl-WFX.mjs.map} +1 -1
  212. package/dist/{renderer-BjCHW9Jp.mjs → renderer-Bkq1PT0g.mjs} +2 -2
  213. package/dist/{renderer-DjwITRvg.mjs → renderer-Blm4Dv_h.mjs} +2 -2
  214. package/dist/{renderer-BTd2sWDC.mjs → renderer-BtWWpFvl.mjs} +3 -3
  215. package/dist/{renderer-BTd2sWDC.mjs.map → renderer-BtWWpFvl.mjs.map} +1 -1
  216. package/dist/{renderer-92eLJg24.mjs → renderer-C-z6bxj9.mjs} +4 -4
  217. package/dist/{renderer-92eLJg24.mjs.map → renderer-C-z6bxj9.mjs.map} +1 -1
  218. package/dist/{renderer-EZp_IIPK.mjs → renderer-C0ds-UfM.mjs} +3 -3
  219. package/dist/{renderer-EZp_IIPK.mjs.map → renderer-C0ds-UfM.mjs.map} +1 -1
  220. package/dist/{renderer-B4RpSd4A.mjs → renderer-C1U85w9f.mjs} +2 -2
  221. package/dist/{renderer-B4RpSd4A.mjs.map → renderer-C1U85w9f.mjs.map} +1 -1
  222. package/dist/{renderer-X0eKSD7v.mjs → renderer-C4vHq0X8.mjs} +3 -3
  223. package/dist/{renderer-X0eKSD7v.mjs.map → renderer-C4vHq0X8.mjs.map} +1 -1
  224. package/dist/{renderer--ruTGlPo.mjs → renderer-C4xvz_Ft.mjs} +3 -3
  225. package/dist/{renderer--ruTGlPo.mjs.map → renderer-C4xvz_Ft.mjs.map} +1 -1
  226. package/dist/{renderer-ByCX4JYg.mjs → renderer-C5WkQZGR.mjs} +3 -3
  227. package/dist/{renderer-ByCX4JYg.mjs.map → renderer-C5WkQZGR.mjs.map} +1 -1
  228. package/dist/{renderer-CqtIbe5n.mjs → renderer-CAi-lhR2.mjs} +2 -2
  229. package/dist/{renderer-CqtIbe5n.mjs.map → renderer-CAi-lhR2.mjs.map} +1 -1
  230. package/dist/renderer-CC-WlYa2.mjs +5 -0
  231. package/dist/{renderer-DZJJHCtm.mjs → renderer-CDky5Gva.mjs} +3 -3
  232. package/dist/{renderer-DZJJHCtm.mjs.map → renderer-CDky5Gva.mjs.map} +1 -1
  233. package/dist/{renderer-yyUpCeWb.mjs → renderer-CE83KHgr.mjs} +2 -2
  234. package/dist/{renderer-yyUpCeWb.mjs.map → renderer-CE83KHgr.mjs.map} +1 -1
  235. package/dist/{renderer-CNb-DG00.mjs → renderer-CLxQ4rU6.mjs} +441 -177
  236. package/dist/renderer-CLxQ4rU6.mjs.map +1 -0
  237. package/dist/{renderer-BBAbZfBl.mjs → renderer-CPLfsRe1.mjs} +4 -4
  238. package/dist/{renderer-BBAbZfBl.mjs.map → renderer-CPLfsRe1.mjs.map} +1 -1
  239. package/dist/{renderer-CDOobs18.mjs → renderer-CS8VMTp1.mjs} +3 -3
  240. package/dist/{renderer-CDOobs18.mjs.map → renderer-CS8VMTp1.mjs.map} +1 -1
  241. package/dist/{renderer-D0vom99O.mjs → renderer-CTYKUnDq.mjs} +2 -2
  242. package/dist/{renderer-D0vom99O.mjs.map → renderer-CTYKUnDq.mjs.map} +1 -1
  243. package/dist/{renderer-DILUmb-e.mjs → renderer-CUPWHfEY.mjs} +3 -3
  244. package/dist/{renderer-DILUmb-e.mjs.map → renderer-CUPWHfEY.mjs.map} +1 -1
  245. package/dist/renderer-Cb0qf1UG.mjs +5 -0
  246. package/dist/renderer-CfX13dgQ.mjs +5 -0
  247. package/dist/renderer-ChFkRLrv.mjs +5 -0
  248. package/dist/{renderer-CDUxAtsk.mjs → renderer-Ci6YMa4u.mjs} +4 -4
  249. package/dist/{renderer-CDUxAtsk.mjs.map → renderer-Ci6YMa4u.mjs.map} +1 -1
  250. package/dist/{renderer-DKfwlE4e.mjs → renderer-CjQAYeYz.mjs} +3 -3
  251. package/dist/{renderer-DKfwlE4e.mjs.map → renderer-CjQAYeYz.mjs.map} +1 -1
  252. package/dist/renderer-CjkfJj5R.mjs +5 -0
  253. package/dist/renderer-Ck7Lu6c9.mjs +5 -0
  254. package/dist/{renderer-CJ4bxCld.mjs → renderer-CrwYWVsV.mjs} +2 -2
  255. package/dist/renderer-CuquqG_c.mjs +5 -0
  256. package/dist/{renderer-CzRqzp8P.mjs → renderer-CwO8T8l8.mjs} +3 -3
  257. package/dist/{renderer-CzRqzp8P.mjs.map → renderer-CwO8T8l8.mjs.map} +1 -1
  258. package/dist/renderer-Cwz2E4QD.mjs +5 -0
  259. package/dist/{renderer-BjvNEbML.mjs → renderer-Cy4a31rZ.mjs} +2 -2
  260. package/dist/{renderer-BjvNEbML.mjs.map → renderer-Cy4a31rZ.mjs.map} +1 -1
  261. package/dist/{renderer-If8JOkBi.mjs → renderer-CzgDJcot.mjs} +2 -2
  262. package/dist/{renderer-If8JOkBi.mjs.map → renderer-CzgDJcot.mjs.map} +1 -1
  263. package/dist/renderer-Czkt9YYp.mjs +5 -0
  264. package/dist/{renderer-D2-V9nQq.mjs → renderer-D4No_jA4.mjs} +3 -3
  265. package/dist/{renderer-D2-V9nQq.mjs.map → renderer-D4No_jA4.mjs.map} +1 -1
  266. package/dist/{renderer-DaSxr9fM.mjs → renderer-D96Pu8yX.mjs} +3 -3
  267. package/dist/{renderer-DaSxr9fM.mjs.map → renderer-D96Pu8yX.mjs.map} +1 -1
  268. package/dist/{renderer-B0gPTXhe.mjs → renderer-DBKyuPl1.mjs} +3 -3
  269. package/dist/{renderer-B0gPTXhe.mjs.map → renderer-DBKyuPl1.mjs.map} +1 -1
  270. package/dist/{renderer-CxqPeATd.d.mts → renderer-DBtt-7wt.d.mts} +2 -2
  271. package/dist/{renderer-CxqPeATd.d.mts.map → renderer-DBtt-7wt.d.mts.map} +1 -1
  272. package/dist/{renderer-DcBGYN3V.mjs → renderer-DCsTCvdo.mjs} +3 -3
  273. package/dist/{renderer-DcBGYN3V.mjs.map → renderer-DCsTCvdo.mjs.map} +1 -1
  274. package/dist/renderer-DFTIhSdJ.mjs +5 -0
  275. package/dist/renderer-DFaa-Ats.mjs +5 -0
  276. package/dist/{renderer-DzSMeQBC.mjs → renderer-DGT141pN.mjs} +3 -3
  277. package/dist/{renderer-DzSMeQBC.mjs.map → renderer-DGT141pN.mjs.map} +1 -1
  278. package/dist/{renderer-JvcR1vYI.mjs → renderer-DHUlVqST.mjs} +2 -2
  279. package/dist/{renderer-JvcR1vYI.mjs.map → renderer-DHUlVqST.mjs.map} +1 -1
  280. package/dist/renderer-DIHXKvPl.mjs +5 -0
  281. package/dist/{renderer-Cv4lchUP.mjs → renderer-DK9etIAz.mjs} +3 -3
  282. package/dist/{renderer-Cv4lchUP.mjs.map → renderer-DK9etIAz.mjs.map} +1 -1
  283. package/dist/renderer-DMzOqVM3.mjs +5 -0
  284. package/dist/renderer-DOId5U8x.mjs +5 -0
  285. package/dist/{renderer-BkWd4-YO.mjs → renderer-DOvzHN60.mjs} +2 -2
  286. package/dist/{renderer-BkWd4-YO.mjs.map → renderer-DOvzHN60.mjs.map} +1 -1
  287. package/dist/{renderer-B1QREs7J.mjs → renderer-DOxmmN6Q.mjs} +3 -3
  288. package/dist/{renderer-B1QREs7J.mjs.map → renderer-DOxmmN6Q.mjs.map} +1 -1
  289. package/dist/{renderer-V5uEyDFz.mjs → renderer-DP_In2uT.mjs} +3 -3
  290. package/dist/{renderer-V5uEyDFz.mjs.map → renderer-DP_In2uT.mjs.map} +1 -1
  291. package/dist/renderer-DQXFOup8.mjs +5 -0
  292. package/dist/{renderer-ut1GqW89.mjs → renderer-DQeUc1yY.mjs} +3 -3
  293. package/dist/{renderer-ut1GqW89.mjs.map → renderer-DQeUc1yY.mjs.map} +1 -1
  294. package/dist/renderer-DRt3BSTj.mjs +5 -0
  295. package/dist/{renderer-DFJQ6v0F.mjs → renderer-DSbRWfgl.mjs} +2 -2
  296. package/dist/{renderer-DFJQ6v0F.mjs.map → renderer-DSbRWfgl.mjs.map} +1 -1
  297. package/dist/{renderer-DaqWTx7s.mjs → renderer-DVFFVy9v.mjs} +3 -3
  298. package/dist/{renderer-DaqWTx7s.mjs.map → renderer-DVFFVy9v.mjs.map} +1 -1
  299. package/dist/{renderer-BPixWnmY.mjs → renderer-DWG4Podv.mjs} +3 -3
  300. package/dist/{renderer-BPixWnmY.mjs.map → renderer-DWG4Podv.mjs.map} +1 -1
  301. package/dist/{renderer-BljMOvry.mjs → renderer-DXSIstnn.mjs} +3 -3
  302. package/dist/{renderer-BljMOvry.mjs.map → renderer-DXSIstnn.mjs.map} +1 -1
  303. package/dist/{renderer-DjBCWxYy.mjs → renderer-DYbgd6Ye.mjs} +3 -3
  304. package/dist/{renderer-DjBCWxYy.mjs.map → renderer-DYbgd6Ye.mjs.map} +1 -1
  305. package/dist/{renderer-BDCy8NgT.mjs → renderer-DZhIe8Gj.mjs} +3 -3
  306. package/dist/{renderer-BDCy8NgT.mjs.map → renderer-DZhIe8Gj.mjs.map} +1 -1
  307. package/dist/{renderer-BMKFzfSQ.mjs → renderer-DcOT5c0t.mjs} +3 -3
  308. package/dist/{renderer-BMKFzfSQ.mjs.map → renderer-DcOT5c0t.mjs.map} +1 -1
  309. package/dist/renderer-Di_5vQ81.mjs +6 -0
  310. package/dist/renderer-DkmpsPIa.mjs +5 -0
  311. package/dist/renderer-Ds6wd9Gk.mjs +5 -0
  312. package/dist/{renderer-BTigwMQp.mjs → renderer-Du8eOWWU.mjs} +3 -3
  313. package/dist/{renderer-BTigwMQp.mjs.map → renderer-Du8eOWWU.mjs.map} +1 -1
  314. package/dist/renderer-Dv4p0lp9.mjs +5 -0
  315. package/dist/renderer-DzWoOlVc.mjs +5 -0
  316. package/dist/{renderer-7y5Cj8rV.mjs → renderer-GapR_An3.mjs} +3 -3
  317. package/dist/{renderer-7y5Cj8rV.mjs.map → renderer-GapR_An3.mjs.map} +1 -1
  318. package/dist/{renderer-Czxgaygb.mjs → renderer-GbVNyv-E.mjs} +6 -6
  319. package/dist/{renderer-Czxgaygb.mjs.map → renderer-GbVNyv-E.mjs.map} +1 -1
  320. package/dist/{renderer-NizuhHsH.mjs → renderer-I3Wxk1tL.mjs} +3 -3
  321. package/dist/{renderer-NizuhHsH.mjs.map → renderer-I3Wxk1tL.mjs.map} +1 -1
  322. package/dist/renderer-IOz63OWg.mjs +5 -0
  323. package/dist/renderer-JkSrsUa5.mjs +5 -0
  324. package/dist/{renderer-gRMkQabv.mjs → renderer-OEpwc9Zk.mjs} +3 -3
  325. package/dist/{renderer-gRMkQabv.mjs.map → renderer-OEpwc9Zk.mjs.map} +1 -1
  326. package/dist/renderer-Ocs1Djwu.mjs +5 -0
  327. package/dist/{renderer-rXgqgAjw.mjs → renderer-OsA-Lg4d.mjs} +3 -3
  328. package/dist/{renderer-rXgqgAjw.mjs.map → renderer-OsA-Lg4d.mjs.map} +1 -1
  329. package/dist/{renderer-Bi6W4RSn.mjs → renderer-P4OPsD82.mjs} +2 -2
  330. package/dist/{renderer-Bi6W4RSn.mjs.map → renderer-P4OPsD82.mjs.map} +1 -1
  331. package/dist/{renderer-BwpgDLYO.mjs → renderer-PuN2_AL_.mjs} +3 -3
  332. package/dist/{renderer-BwpgDLYO.mjs.map → renderer-PuN2_AL_.mjs.map} +1 -1
  333. package/dist/{renderer-CNuVJ4nG.mjs → renderer-QaN-aejD.mjs} +2 -2
  334. package/dist/{renderer-CNuVJ4nG.mjs.map → renderer-QaN-aejD.mjs.map} +1 -1
  335. package/dist/renderer-Wdn7m_uN.mjs +5 -0
  336. package/dist/{renderer-BwwZB2mt.mjs → renderer-f7A01ArI.mjs} +4 -4
  337. package/dist/{renderer-BwwZB2mt.mjs.map → renderer-f7A01ArI.mjs.map} +1 -1
  338. package/dist/{renderer-G1pMJH5C.mjs → renderer-gm0zoV4t.mjs} +2 -2
  339. package/dist/{renderer-G1pMJH5C.mjs.map → renderer-gm0zoV4t.mjs.map} +1 -1
  340. package/dist/{renderer-DScyMHpJ.mjs → renderer-kNjMhwiZ.mjs} +2 -2
  341. package/dist/{renderer-DScyMHpJ.mjs.map → renderer-kNjMhwiZ.mjs.map} +1 -1
  342. package/dist/renderer-mKpjaoE3.mjs +5 -0
  343. package/dist/{renderer-Cbsnj9vV.mjs → renderer-mqUBkx-a.mjs} +3 -3
  344. package/dist/{renderer-Cbsnj9vV.mjs.map → renderer-mqUBkx-a.mjs.map} +1 -1
  345. package/dist/{renderer-DyyIXLQK.mjs → renderer-plx7_lUQ.mjs} +3 -3
  346. package/dist/{renderer-DyyIXLQK.mjs.map → renderer-plx7_lUQ.mjs.map} +1 -1
  347. package/dist/{renderer-D6BXR7P4.mjs → renderer-qYhNf6iB.mjs} +2 -2
  348. package/dist/{renderer-D6BXR7P4.mjs.map → renderer-qYhNf6iB.mjs.map} +1 -1
  349. package/dist/{renderer-CeiCJCg4.mjs → renderer-y6k54AM6.mjs} +3 -3
  350. package/dist/{renderer-CeiCJCg4.mjs.map → renderer-y6k54AM6.mjs.map} +1 -1
  351. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs → renderers-CP8CFWDs-D1FHpA7I.mjs} +3 -3
  352. package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs.map → renderers-CP8CFWDs-D1FHpA7I.mjs.map} +1 -1
  353. package/dist/signals/index.d.mts +5 -5
  354. package/dist/signals/index.mjs +6 -6
  355. package/dist/{signals-C5nOrRmn.mjs → signals-BwdVfK3p.mjs} +3 -3
  356. package/dist/{signals-C5nOrRmn.mjs.map → signals-BwdVfK3p.mjs.map} +1 -1
  357. package/package.json +57 -57
  358. package/dist/dist-ClyC_d66.mjs.map +0 -1
  359. package/dist/effects-DxylPSuI.mjs.map +0 -1
  360. package/dist/index-B1XcyMm8.d.mts.map +0 -1
  361. package/dist/index-B2Xesdug.d.mts.map +0 -1
  362. package/dist/index-BxARm93R.d.mts.map +0 -1
  363. package/dist/index-C0o3lLyA.d.mts.map +0 -1
  364. package/dist/index-DujpgUUq.d.mts.map +0 -1
  365. package/dist/preview-engine/chunk-266DECPQ.mjs +0 -1
  366. package/dist/preview-engine/chunk-CPFPY35C.mjs +0 -1
  367. package/dist/preview-engine/chunk-NTVDL3RS.mjs +0 -1
  368. package/dist/preview-engine/chunk-UZBVCYRY.mjs +0 -174
  369. package/dist/preview-engine/chunk-XDMZP3E2.mjs +0 -1
  370. package/dist/preview-engine/chunk-YKMBRUAE.mjs +0 -1
  371. package/dist/preview-engine/renderers-3CXFGRE7.mjs +0 -1
  372. package/dist/preview-engine/renderers-3FC3WCJN.mjs +0 -1
  373. package/dist/preview-engine/renderers-3S2FM33K.mjs +0 -1
  374. package/dist/preview-engine/renderers-53ZTBI3C.mjs +0 -1
  375. package/dist/preview-engine/renderers-5USBVCMQ.mjs +0 -1
  376. package/dist/preview-engine/renderers-65G6BLEA.mjs +0 -1
  377. package/dist/preview-engine/renderers-7XU7BXE7.mjs +0 -1
  378. package/dist/preview-engine/renderers-BFXM32BC.mjs +0 -1
  379. package/dist/preview-engine/renderers-CDXHCWWK.mjs +0 -1
  380. package/dist/preview-engine/renderers-CLUN7WU6.mjs +0 -1
  381. package/dist/preview-engine/renderers-DTB4HEXU.mjs +0 -1
  382. package/dist/preview-engine/renderers-EFKNRLYF.mjs +0 -1
  383. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +0 -1
  384. package/dist/preview-engine/renderers-GTUO5LIV.mjs +0 -1
  385. package/dist/preview-engine/renderers-HSJIVP57.mjs +0 -1
  386. package/dist/preview-engine/renderers-IHACBWXI.mjs +0 -1
  387. package/dist/preview-engine/renderers-IO3BVVJ7.mjs +0 -1
  388. package/dist/preview-engine/renderers-IR772VSN.mjs +0 -1
  389. package/dist/preview-engine/renderers-L6TRJOXA.mjs +0 -1
  390. package/dist/preview-engine/renderers-N6H6RSF2.mjs +0 -1
  391. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +0 -1
  392. package/dist/preview-engine/renderers-O6V3OEKX.mjs +0 -1
  393. package/dist/preview-engine/renderers-OODA27UH.mjs +0 -1
  394. package/dist/preview-engine/renderers-RIGW33ZI.mjs +0 -1
  395. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +0 -1
  396. package/dist/preview-engine/renderers-SKB2GGKS.mjs +0 -1
  397. package/dist/preview-engine/renderers-T4D2TASM.mjs +0 -1
  398. package/dist/preview-engine/renderers-T74XV36Q.mjs +0 -1
  399. package/dist/preview-engine/renderers-TOPW2UM3.mjs +0 -1
  400. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +0 -1
  401. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +0 -1
  402. package/dist/preview-engine/renderers-UWKSTSTA.mjs +0 -1
  403. package/dist/preview-engine/renderers-VHPAOUTA.mjs +0 -1
  404. package/dist/preview-engine/renderers-YEQRQJFC.mjs +0 -1
  405. package/dist/preview-engine/renderers-YRZ3WODX.mjs +0 -1
  406. package/dist/preview-engine/renderers-YUTFGVRY.mjs +0 -1
  407. package/dist/preview-engine/renderers-YXOTRKPA.mjs +0 -1
  408. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +0 -1
  409. package/dist/preview-engine/renderers-ZW75LQTR.mjs +0 -1
  410. package/dist/program-C2cJayA1.mjs.map +0 -1
  411. package/dist/renderer-BAhZeUUn.mjs +0 -5
  412. package/dist/renderer-BHAE_dKq.mjs +0 -5
  413. package/dist/renderer-BNYZY3FE.mjs +0 -5
  414. package/dist/renderer-BSvubMvI.mjs +0 -5
  415. package/dist/renderer-B_M_yhTc.mjs +0 -5
  416. package/dist/renderer-B_xSsTuy.mjs +0 -5
  417. package/dist/renderer-BePHurAU.mjs +0 -5
  418. package/dist/renderer-BfZquJrW.mjs +0 -5
  419. package/dist/renderer-BuY5ypB2.mjs +0 -5
  420. package/dist/renderer-BvOQgFHo.mjs +0 -5
  421. package/dist/renderer-C7NkSvUz.mjs +0 -5
  422. package/dist/renderer-CIuxV2q1.mjs +0 -5
  423. package/dist/renderer-CKp97tSQ.mjs +0 -5
  424. package/dist/renderer-CNb-DG00.mjs.map +0 -1
  425. package/dist/renderer-CY89dTFR.mjs +0 -5
  426. package/dist/renderer-C_B_4Bl0.mjs +0 -5
  427. package/dist/renderer-Cd87JOjP.mjs +0 -5
  428. package/dist/renderer-Cev6orIK.mjs +0 -6
  429. package/dist/renderer-Cewf6UPh.mjs +0 -5
  430. package/dist/renderer-CnHsMLIv.mjs +0 -5
  431. package/dist/renderer-CoxuAr7b.mjs +0 -5
  432. package/dist/renderer-CrdG7trA.mjs +0 -5
  433. package/dist/renderer-Cu5MFgbk.mjs +0 -5
  434. package/dist/renderer-CuOjhtoo.mjs +0 -5
  435. package/dist/renderer-D2_0g6Oi.mjs +0 -5
  436. package/dist/renderer-D62FwolD.mjs +0 -5
  437. package/dist/renderer-DDNY9N7I.mjs +0 -5
  438. package/dist/renderer-DF_ONJ3v.mjs +0 -5
  439. package/dist/renderer-DbzrVHEE.mjs +0 -5
  440. package/dist/renderer-DlYchp1v.mjs +0 -5
  441. package/dist/renderer-DqcUNP8J.mjs +0 -5
  442. package/dist/renderer-DqvFhEQj.mjs +0 -5
  443. package/dist/renderer-DxBav2bE.mjs +0 -5
  444. package/dist/renderer-GvSRoQje.mjs +0 -5
  445. package/dist/renderer-KP7Ita9g.mjs +0 -5
  446. package/dist/renderer-Pc8dyNXt.mjs +0 -5
  447. package/dist/renderer-ezRCmU09.mjs +0 -3
  448. package/dist/renderer-h6ev1ogx.mjs +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-RDCax5CK.mjs","names":[],"sources":["../../../nodes/node-layer-style/dist/renderers-Ch81UvXn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, PREMULTIPLIED_BLEND, createFullscreenPipeline, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { ColorSchema, ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst LAYER_STYLE_BLEND_MODES = [\n\t{\n\t\tvalue: \"normal\",\n\t\tlabel: \"Normal\"\n\t},\n\t{\n\t\tvalue: \"multiply\",\n\t\tlabel: \"Multiply\"\n\t},\n\t{\n\t\tvalue: \"screen\",\n\t\tlabel: \"Screen\"\n\t},\n\t{\n\t\tvalue: \"overlay\",\n\t\tlabel: \"Overlay\"\n\t},\n\t{\n\t\tvalue: \"darken\",\n\t\tlabel: \"Darken\"\n\t},\n\t{\n\t\tvalue: \"lighten\",\n\t\tlabel: \"Lighten\"\n\t},\n\t{\n\t\tvalue: \"color-dodge\",\n\t\tlabel: \"Color Dodge\"\n\t},\n\t{\n\t\tvalue: \"color-burn\",\n\t\tlabel: \"Color Burn\"\n\t},\n\t{\n\t\tvalue: \"hard-light\",\n\t\tlabel: \"Hard Light\"\n\t},\n\t{\n\t\tvalue: \"soft-light\",\n\t\tlabel: \"Soft Light\"\n\t},\n\t{\n\t\tvalue: \"difference\",\n\t\tlabel: \"Difference\"\n\t},\n\t{\n\t\tvalue: \"exclusion\",\n\t\tlabel: \"Exclusion\"\n\t},\n\t{\n\t\tvalue: \"hue\",\n\t\tlabel: \"Hue\"\n\t},\n\t{\n\t\tvalue: \"saturation\",\n\t\tlabel: \"Saturation\"\n\t},\n\t{\n\t\tvalue: \"color\",\n\t\tlabel: \"Color\"\n\t},\n\t{\n\t\tvalue: \"luminosity\",\n\t\tlabel: \"Luminosity\"\n\t},\n\t{\n\t\tvalue: \"lighter\",\n\t\tlabel: \"Lighter (Add)\"\n\t},\n\t{\n\t\tvalue: \"copy\",\n\t\tlabel: \"Copy\"\n\t},\n\t{\n\t\tvalue: \"xor\",\n\t\tlabel: \"XOR\"\n\t},\n\t{\n\t\tvalue: \"source-over\",\n\t\tlabel: \"Source Over\"\n\t},\n\t{\n\t\tvalue: \"source-in\",\n\t\tlabel: \"Source In\"\n\t},\n\t{\n\t\tvalue: \"source-out\",\n\t\tlabel: \"Source Out\"\n\t},\n\t{\n\t\tvalue: \"source-atop\",\n\t\tlabel: \"Source Atop\"\n\t},\n\t{\n\t\tvalue: \"destination-over\",\n\t\tlabel: \"Destination Over\"\n\t},\n\t{\n\t\tvalue: \"destination-in\",\n\t\tlabel: \"Destination In\"\n\t},\n\t{\n\t\tvalue: \"destination-out\",\n\t\tlabel: \"Destination Out\"\n\t},\n\t{\n\t\tvalue: \"destination-atop\",\n\t\tlabel: \"Destination Atop\"\n\t}\n];\nconst DropShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(10),\n\tspread: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(10),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst InnerShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(5),\n\tchoke: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(5),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst StrokeStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tsize: z.number().min(0).max(100).default(2),\n\tposition: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).default(\"outside\"),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst GlowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tsize: z.number().min(0).max(250).default(15),\n\tspread: z.number().min(0).max(100).default(0),\n\tblendMode: z.string().default(\"screen\")\n});\nconst BevelEmbossStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tstyle: z.enum([\n\t\t\"InnerBevel\",\n\t\t\"OuterBevel\",\n\t\t\"Emboss\",\n\t\t\"PillowEmboss\"\n\t]).default(\"InnerBevel\"),\n\ttechnique: z.enum([\n\t\t\"Smooth\",\n\t\t\"ChiselHard\",\n\t\t\"ChiselSoft\"\n\t]).default(\"Smooth\"),\n\tdepth: z.number().min(1).max(1e3).default(100),\n\tdirection: z.enum([\"Up\", \"Down\"]).default(\"Up\"),\n\tsize: z.number().min(0).max(250).default(5),\n\tsoften: z.number().min(0).max(50).default(0),\n\tangle: z.number().min(0).max(360).default(120),\n\taltitude: z.number().min(0).max(90).default(30),\n\thighlightColor: ColorSchema.default(\"#ffffff\"),\n\thighlightOpacity: z.number().min(0).max(1).default(.75),\n\tshadowColor: ColorSchema.default(\"#000000\"),\n\tshadowOpacity: z.number().min(0).max(1).default(.75)\n});\nconst ColorOverlayStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ff0000\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst DEFAULT_DROP_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 10,\n\tspread: 0,\n\tsize: 10,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_INNER_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 5,\n\tchoke: 0,\n\tsize: 5,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_GLOW = {\n\tenabled: false,\n\tcolor: \"#ffffff\",\n\topacity: .75,\n\tsize: 15,\n\tspread: 0,\n\tblendMode: \"screen\"\n};\nconst DEFAULT_STROKE = {\n\tenabled: false,\n\tsize: 2,\n\tposition: \"outside\",\n\tcolor: \"#ffffff\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst DEFAULT_BEVEL_EMBOSS = {\n\tenabled: false,\n\tstyle: \"InnerBevel\",\n\ttechnique: \"Smooth\",\n\tdepth: 100,\n\tdirection: \"Up\",\n\tsize: 5,\n\tsoften: 0,\n\tangle: 120,\n\taltitude: 30,\n\thighlightColor: \"#ffffff\",\n\thighlightOpacity: .75,\n\tshadowColor: \"#000000\",\n\tshadowOpacity: .75\n};\nconst DEFAULT_COLOR_OVERLAY = {\n\tenabled: false,\n\tcolor: \"#ff0000\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst LayerStyleNodeConfigSchema = z.object({\n\tdropShadow: DropShadowStyleSchema.default(DEFAULT_DROP_SHADOW),\n\tinnerShadow: InnerShadowStyleSchema.default(DEFAULT_INNER_SHADOW),\n\touterGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tinnerGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tstroke: StrokeStyleSchema.default(DEFAULT_STROKE),\n\tbevelEmboss: BevelEmbossStyleSchema.default(DEFAULT_BEVEL_EMBOSS),\n\tcolorOverlay: ColorOverlayStyleSchema.default(DEFAULT_COLOR_OVERLAY),\n\tdropShadowAngleHandleId: z.string().nullable().optional(),\n\tdropShadowDistanceHandleId: z.string().nullable().optional(),\n\tdropShadowSpreadHandleId: z.string().nullable().optional(),\n\tdropShadowSizeHandleId: z.string().nullable().optional(),\n\tdropShadowOpacityHandleId: z.string().nullable().optional(),\n\tinnerShadowAngleHandleId: z.string().nullable().optional(),\n\tinnerShadowDistanceHandleId: z.string().nullable().optional(),\n\tinnerShadowChokeHandleId: z.string().nullable().optional(),\n\tinnerShadowSizeHandleId: z.string().nullable().optional(),\n\tinnerShadowOpacityHandleId: z.string().nullable().optional(),\n\touterGlowSizeHandleId: z.string().nullable().optional(),\n\touterGlowSpreadHandleId: z.string().nullable().optional(),\n\touterGlowOpacityHandleId: z.string().nullable().optional(),\n\tinnerGlowSizeHandleId: z.string().nullable().optional(),\n\tinnerGlowSpreadHandleId: z.string().nullable().optional(),\n\tinnerGlowOpacityHandleId: z.string().nullable().optional(),\n\tstrokeSizeHandleId: z.string().nullable().optional(),\n\tstrokeOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossDepthHandleId: z.string().nullable().optional(),\n\tbevelEmbossSizeHandleId: z.string().nullable().optional(),\n\tbevelEmbossSoftenHandleId: z.string().nullable().optional(),\n\tbevelEmbossAngleHandleId: z.string().nullable().optional(),\n\tbevelEmbossAltitudeHandleId: z.string().nullable().optional(),\n\tbevelEmbossHighlightOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossShadowOpacityHandleId: z.string().nullable().optional(),\n\tcolorOverlayOpacityHandleId: z.string().nullable().optional()\n});\nfunction computeLayerStylePadding(config) {\n\tlet padX = 0;\n\tlet padY = 0;\n\tif (config.dropShadow?.enabled) {\n\t\tconst angleRad = (config.dropShadow.angle ?? 120) * Math.PI / 180;\n\t\tconst dist = config.dropShadow.distance ?? 0;\n\t\tconst dx = Math.ceil(Math.abs(Math.cos(angleRad)) * dist);\n\t\tconst dy = Math.ceil(Math.abs(Math.sin(angleRad)) * dist);\n\t\tpadX = Math.max(padX, dx);\n\t\tpadY = Math.max(padY, dy);\n\t}\n\tif (config.stroke?.enabled && config.stroke.position !== \"inside\") {\n\t\tconst strokePad = config.stroke.position === \"outside\" ? Math.ceil(config.stroke.size ?? 2) : Math.ceil((config.stroke.size ?? 2) * .5);\n\t\tpadX = Math.max(padX, strokePad);\n\t\tpadY = Math.max(padY, strokePad);\n\t}\n\treturn {\n\t\tpadX,\n\t\tpadY\n\t};\n}\nconst LAYER_STYLE_CONFIG_HANDLES = [\n\t{\n\t\tconfigKey: \"dropShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Angle Signal\",\n\t\tdescription: \"Light angle for drop shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Spread Signal\",\n\t\tdescription: \"Edge expansion/sharpness percentage for drop shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for drop shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Angle Signal\",\n\t\tdescription: \"Light angle for inner shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowChoke\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Choke Signal\",\n\t\tdescription: \"Choke sharpness percentage for inner shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Size Signal\",\n\t\tdescription: \"Glow radius for outer glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for outer glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for outer glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Size Signal\",\n\t\tdescription: \"Glow radius for inner glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for inner glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"strokeSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Width Signal\",\n\t\tdescription: \"Stroke line width in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"strokeOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for stroke (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossDepth\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Depth Signal\",\n\t\tdescription: \"Bevel depth / extrusion percentage (1–1000%).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Size Signal\",\n\t\tdescription: \"Bevel beveling size in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSoften\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Soften Signal\",\n\t\tdescription: \"Edge softening blur radius in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Angle Signal\",\n\t\tdescription: \"Azimuth light direction in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAltitude\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Altitude Signal\",\n\t\tdescription: \"Elevation light altitude in degrees (0–90°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossHighlightOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Highlight Opacity Signal\",\n\t\tdescription: \"Highlight specular intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Shadow Opacity Signal\",\n\t\tdescription: \"Shadow diffuse intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"colorOverlayOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Color Overlay Opacity Signal\",\n\t\tdescription: \"Color overlay blend opacity (0–1).\"\n\t}\n];\nconst LayerStyleResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LAYER_STYLE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\nconst LAYER_STYLE_PRESETS = [\n\t{\n\t\tid: \"subtle-drop-shadow\",\n\t\tname: \"Subtle Drop Shadow\",\n\t\tdescription: \"Clean modern floating shadow for UI and graphics\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .35,\n\t\t\t\tdistance: 8,\n\t\t\t\tsize: 16\n\t\t\t},\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"sticker-outline-shadow\",\n\t\tname: \"Sticker Border & Shadow\",\n\t\tdescription: \"Crisp white die-cut sticker border with contact shadow\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .4,\n\t\t\t\tdistance: 6\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"neon-cyber-glow\",\n\t\tname: \"Neon Glow\",\n\t\tdescription: \"Vibrant outer and inner luminescence with soft cyan radiation\",\n\t\tconfig: {\n\t\t\tdropShadow: { ...DEFAULT_DROP_SHADOW },\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tsize: 28,\n\t\t\t\tspread: 12\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .8,\n\t\t\t\tsize: 10,\n\t\t\t\tspread: 5\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tposition: \"center\",\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"glass-emboss\",\n\t\tname: \"Glass & Emboss\",\n\t\tdescription: \"Pristine glass beveling with specular highlights and depth\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .25,\n\t\t\t\tdistance: 6,\n\t\t\t\tsize: 12\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .3,\n\t\t\t\tdistance: 4,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .6,\n\t\t\t\tsize: 8\n\t\t\t},\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\tdepth: 180,\n\t\t\t\tsize: 8,\n\t\t\t\tsoften: 2,\n\t\t\t\taltitude: 35,\n\t\t\t\thighlightOpacity: .9,\n\t\t\t\tshadowOpacity: .5\n\t\t\t},\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"letterpress-carved\",\n\t\tname: \"Letterpress / Carved\",\n\t\tdescription: \"Debossed letterpress engraving into paper surface\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .85,\n\t\t\t\tangle: 300,\n\t\t\t\tdistance: 2,\n\t\t\t\tsize: 1,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .7,\n\t\t\t\tdistance: 3,\n\t\t\t\tchoke: 10,\n\t\t\t\tsize: 4\n\t\t\t},\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 150,\n\t\t\t\tdirection: \"Down\",\n\t\t\t\tsize: 3,\n\t\t\t\thighlightOpacity: .6,\n\t\t\t\tshadowOpacity: .8\n\t\t\t},\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"gold-bevel\",\n\t\tname: \"Metallic Gold Bevel\",\n\t\tdescription: \"High-specular chisel gold badge with deep relief\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .6,\n\t\t\t\tdistance: 8,\n\t\t\t\tspread: 5,\n\t\t\t\tsize: 12\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#573a08\",\n\t\t\t\topacity: .5,\n\t\t\t\tdistance: 3\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffc83b\",\n\t\t\t\topacity: .4,\n\t\t\t\tsize: 20,\n\t\t\t\tspread: 5\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#fff7d1\",\n\t\t\t\topacity: .5,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#b38728\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 350,\n\t\t\t\tsize: 10,\n\t\t\t\tsoften: 1,\n\t\t\t\taltitude: 40,\n\t\t\t\thighlightColor: \"#fff4cc\",\n\t\t\t\thighlightOpacity: .95,\n\t\t\t\tshadowColor: \"#422b00\",\n\t\t\t\tshadowOpacity: .85\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\t...DEFAULT_COLOR_OVERLAY,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#f5b324\",\n\t\t\t\topacity: .35,\n\t\t\t\tblendMode: \"overlay\"\n\t\t\t}\n\t\t}\n\t}\n];\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nfunction hexToRgba(hex) {\n\tif (!hex) return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tlet cleaned = hex.trim().replace(/^#/, \"\");\n\tif (cleaned.length === 3) cleaned = cleaned.split(\"\").map((c) => c + c).join(\"\") + \"ff\";\n\telse if (cleaned.length === 6) cleaned = cleaned + \"ff\";\n\telse if (cleaned.length === 8) {} else return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst r = parseInt(cleaned.slice(0, 2), 16) / 255;\n\tconst g = parseInt(cleaned.slice(2, 4), 16) / 255;\n\tconst b = parseInt(cleaned.slice(4, 6), 16) / 255;\n\tconst a = parseInt(cleaned.slice(6, 8), 16) / 255;\n\treturn [\n\t\tNumber.isFinite(r) ? r : 1,\n\t\tNumber.isFinite(g) ? g : 1,\n\t\tNumber.isFinite(b) ? b : 1,\n\t\tNumber.isFinite(a) ? a : 1\n\t];\n}\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25\n};\nconst BEVEL_STYLE_MAP = {\n\tInnerBevel: 0,\n\tOuterBevel: 1,\n\tEmboss: 2,\n\tPillowEmboss: 3\n};\nconst BEVEL_TECHNIQUE_MAP = {\n\tSmooth: 0,\n\tChiselHard: 1,\n\tChiselSoft: 2\n};\nconst STROKE_POS_MAP = {\n\toutside: 0,\n\tcenter: 1,\n\tinside: 2\n};\nconst WGSL_LAYER_STYLE_SHADER = `\nstruct LayerStyleUniforms {\n\t// Drop Shadow (vec4 x 3)\n\tdropShadowColor : vec4<f32>,\n\tdropShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tdropShadowParams2 : vec4<f32>, // x: spread, y: size, z: blendMode, w: pad\n\n\t// Inner Shadow (vec4 x 3)\n\tinnerShadowColor : vec4<f32>,\n\tinnerShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tinnerShadowParams2 : vec4<f32>, // x: choke, y: size, z: blendMode, w: pad\n\n\t// Outer Glow (vec4 x 3)\n\touterGlowColor : vec4<f32>,\n\touterGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\touterGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Inner Glow (vec4 x 3)\n\tinnerGlowColor : vec4<f32>,\n\tinnerGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\tinnerGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Stroke (vec4 x 3)\n\tstrokeColor : vec4<f32>,\n\tstrokeParams : vec4<f32>, // x: enabled, y: size, z: position(0:out,1:center,2:in), w: opacity\n\tstrokeParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Bevel & Emboss (vec4 x 5)\n\tbevelHighlightColor : vec4<f32>,\n\tbevelShadowColor : vec4<f32>,\n\tbevelParams1 : vec4<f32>, // x: enabled, y: style, z: technique, w: depth\n\tbevelParams2 : vec4<f32>, // x: direction(1:up, -1:down), y: size, z: soften, w: angle(rad)\n\tbevelParams3 : vec4<f32>, // x: altitude(rad), y: hlOpacity, z: shOpacity, w: pad\n\n\t// Color Overlay (vec4 x 2)\n\tcolorOverlayColor : vec4<f32>,\n\tcolorOverlayParams : vec4<f32>, // x: enabled, y: opacity, z: blendMode, w: pad\n};\n\n@group(0) @binding(0) var<uniform> u : LayerStyleUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleAlpha(uv: vec2<f32>) -> f32 {\n\tif (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n\t\treturn 0.0;\n\t}\n\treturn textureSampleLevel(tex, samp, uv, 0.0).a;\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / max(l - n, 1e-5));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / max(x - l, 1e-5));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / max(c_max - c_min, 1e-5);\n}\n\nfn blendRgb(d_rgb: vec3<f32>, s_rgb: vec3<f32>, mode: u32) -> vec3<f32> {\n\tswitch (mode) {\n\t\tcase 1u: { // multiply\n\t\t\treturn d_rgb * s_rgb;\n\t\t}\n\t\tcase 2u: { // screen\n\t\t\treturn d_rgb + s_rgb - d_rgb * s_rgb;\n\t\t}\n\t\tcase 3u: { // overlay\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\td_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 4u: { // darken\n\t\t\treturn min(d_rgb, s_rgb);\n\t\t}\n\t\tcase 5u: { // lighten\n\t\t\treturn max(d_rgb, s_rgb);\n\t\t}\n\t\tcase 6u: { // color-dodge\n\t\t\treturn select(min(d_rgb / max(1.0 - s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb >= vec3<f32>(0.999));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\treturn select(1.0 - min((1.0 - d_rgb) / max(s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb <= vec3<f32>(0.001));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\ts_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\treturn select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { // difference\n\t\t\treturn abs(d_rgb - s_rgb);\n\t\t}\n\t\tcase 11u: { // exclusion\n\t\t\treturn d_rgb + s_rgb - 2.0 * d_rgb * s_rgb;\n\t\t}\n\t\tcase 12u: { // hue\n\t\t\treturn set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 13u: { // saturation\n\t\t\treturn set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 14u: { // color\n\t\t\treturn set_lum(s_rgb, lum(d_rgb));\n\t\t}\n\t\tcase 15u: { // luminosity\n\t\t\treturn set_lum(d_rgb, lum(s_rgb));\n\t\t}\n\t\tdefault: { // normal / source-over\n\t\t\treturn s_rgb;\n\t\t}\n\t}\n}\n\nfn compositeLayer(dst: vec4<f32>, src: vec4<f32>, blendMode: u32) -> vec4<f32> {\n\tlet sa = clamp(src.a, 0.0, 1.0);\n\tif (sa <= 0.0001) {\n\t\treturn dst;\n\t}\n\tlet da = clamp(dst.a, 0.0, 1.0);\n\tif (da <= 0.0001) {\n\t\treturn src;\n\t}\n\n\tswitch (blendMode) {\n\t\tcase 16u: { return dst * sa; } // mask-in / destination-in\n\t\tcase 17u: { return dst * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return src * da; } // source-in\n\t\tcase 19u: { return src * (1.0 - da); } // source-out\n\t\tcase 20u: { return src * da + dst * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return dst + src * (1.0 - da); } // destination-over\n\t\tcase 22u: { return dst * sa + src * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return src + dst; } // lighter / add\n\t\tcase 24u: { return src; } // copy\n\t\tcase 25u: { return src * (1.0 - da) + dst * (1.0 - sa); } // xor\n\t\tdefault: {}\n\t}\n\n\tlet b_rgb = blendRgb(dst.rgb, src.rgb, blendMode);\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = select(\n\t\t((1.0 - da) * src.rgb + (1.0 - sa) * dst.rgb + sa * da * b_rgb) / max(out_a, 1e-5),\n\t\tb_rgb,\n\t\tout_a <= 1e-4\n\t);\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\tlet origColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tlet origA = origColor.a;\n\n\tvar result = vec4<f32>(0.0);\n\n\t// =========================================================================\n\t// 1. DROP SHADOW (Bottom Layer)\n\t// =========================================================================\n\tif (u.dropShadowParams.x > 0.5) {\n\t\tlet opacity = u.dropShadowParams.y;\n\t\tlet angle = u.dropShadowParams.z;\n\t\tlet distance = u.dropShadowParams.w;\n\t\tlet spread = u.dropShadowParams2.x;\n\t\tlet size = u.dropShadowParams2.y;\n\t\tlet blendMode = u32(u.dropShadowParams2.z);\n\n\t\tlet shadowOffset = vec2<f32>(-cos(angle), sin(angle)) * distance * texelSize;\n\t\tlet shadowCenterUv = in.uv - shadowOffset;\n\n\t\tvar shadowAccum = 0.0;\n\t\tvar shadowWeightSum = 0.0;\n\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tshadowAccum = sampleAlpha(shadowCenterUv);\n\t\t\tshadowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tshadowAccum += sampleAlpha(shadowCenterUv + offset) * weight;\n\t\t\t\t\tshadowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredShadow = shadowAccum / max(shadowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet finalShadowAlpha = clamp(blurredShadow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * opacity;\n\n\t\tif (finalShadowAlpha > 0.001) {\n\t\t\tlet shadowCol = vec4<f32>(u.dropShadowColor.rgb, finalShadowAlpha);\n\t\t\tresult = compositeLayer(result, shadowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 2. OUTER GLOW\n\t// =========================================================================\n\tif (u.outerGlowParams.x > 0.5) {\n\t\tlet opacity = u.outerGlowParams.y;\n\t\tlet size = u.outerGlowParams.z;\n\t\tlet spread = u.outerGlowParams.w;\n\t\tlet blendMode = u32(u.outerGlowParams2.x);\n\n\t\tvar glowAccum = 0.0;\n\t\tvar glowWeightSum = 0.0;\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tglowAccum = origA;\n\t\t\tglowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tglowAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tglowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredGlow = glowAccum / max(glowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet spreadGlow = clamp(blurredGlow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0);\n\t\tlet finalGlowAlpha = max(0.0, spreadGlow - origA) * opacity;\n\n\t\tif (finalGlowAlpha > 0.001) {\n\t\t\tlet glowCol = vec4<f32>(u.outerGlowColor.rgb, finalGlowAlpha);\n\t\t\tresult = compositeLayer(result, glowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 3. OUTSIDE STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z < 0.5) { // position == 0: outside\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\tlet sizeSq = size * size;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet strokeAlpha = clamp(maxAlpha - origA, 0.0, 1.0) * opacity;\n\t\tif (strokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, strokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 4. BASE IMAGE LAYER (with Color Overlay, Bevel & Emboss, Inner Glow/Shadow)\n\t// =========================================================================\n\tif (origA > 0.001) {\n\t\tvar baseRgb = origColor.rgb;\n\n\t\t// Color Overlay\n\t\tif (u.colorOverlayParams.x > 0.5) {\n\t\t\tlet overlayOpacity = u.colorOverlayParams.y;\n\t\t\tlet overlayBlendMode = u32(u.colorOverlayParams.z);\n\t\t\tlet blendedOverlay = blendRgb(baseRgb, u.colorOverlayColor.rgb, overlayBlendMode);\n\t\t\tbaseRgb = mix(baseRgb, blendedOverlay, overlayOpacity);\n\t\t}\n\n\t\t// Bevel & Emboss\n\t\tif (u.bevelParams1.x > 0.5) {\n\t\t\tlet style = u.bevelParams1.y;\n\t\t\tlet technique = u.bevelParams1.z;\n\t\t\tlet depth = u.bevelParams1.w / 100.0;\n\t\t\tlet direction = u.bevelParams2.x;\n\t\t\tlet bevelSize = max(0.5, u.bevelParams2.y);\n\t\t\tlet soften = u.bevelParams2.z;\n\t\t\tlet lightAngle = u.bevelParams2.w;\n\t\t\tlet lightAltitude = u.bevelParams3.x;\n\t\t\tlet hlOpacity = u.bevelParams3.y;\n\t\t\tlet shOpacity = u.bevelParams3.z;\n\n\t\t\tlet lightDir = normalize(vec3<f32>(\n\t\t\t\t-cos(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAltitude)\n\t\t\t));\n\n\t\t\tlet stepSize = max(1.0, bevelSize * 0.5 + soften) * texelSize;\n\t\t\tlet aL = sampleAlpha(in.uv - vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aR = sampleAlpha(in.uv + vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aT = sampleAlpha(in.uv - vec2<f32>(0.0, stepSize.y));\n\t\t\tlet aB = sampleAlpha(in.uv + vec2<f32>(0.0, stepSize.y));\n\n\t\t\tvar dx = (aR - aL) * depth * direction;\n\t\t\tvar dy = (aB - aT) * depth * direction;\n\n\t\t\tif (technique > 0.5) { // ChiselHard or ChiselSoft\n\t\t\t\tlet rampFactor = select(2.0, 1.5, technique > 1.5);\n\t\t\t\tdx = clamp(dx * rampFactor, -1.0, 1.0);\n\t\t\t\tdy = clamp(dy * rampFactor, -1.0, 1.0);\n\t\t\t}\n\n\t\t\tlet normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n\t\t\tlet nDotL = dot(normal, lightDir);\n\n\t\t\tlet highlightAmount = max(0.0, nDotL) * hlOpacity;\n\t\t\tlet shadowAmount = max(0.0, -nDotL) * shOpacity;\n\n\t\t\tlet hlColor = mix(baseRgb, u.bevelHighlightColor.rgb + baseRgb, highlightAmount);\n\t\t\tlet shColor = mix(baseRgb, baseRgb * (1.0 - shadowAmount) + u.bevelShadowColor.rgb * shadowAmount, shadowAmount);\n\t\t\tbaseRgb = mix(shColor, hlColor, clamp(nDotL * 0.5 + 0.5, 0.0, 1.0));\n\t\t}\n\n\t\t// Inner Glow\n\t\tif (u.innerGlowParams.x > 0.5) {\n\t\t\tlet igOpacity = u.innerGlowParams.y;\n\t\t\tlet igSize = u.innerGlowParams.z;\n\t\t\tlet igSpread = u.innerGlowParams.w;\n\t\t\tlet igBlendMode = u32(u.innerGlowParams2.x);\n\n\t\t\tvar innerAccum = 0.0;\n\t\t\tvar innerWeight = 0.0;\n\t\t\tlet sigma = max(0.5, igSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(igSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tinnerAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tinnerWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredInner = innerAccum / max(innerWeight, 1e-4);\n\t\t\tlet innerGlowMask = max(0.0, origA - blurredInner);\n\t\t\tlet spreadFactor = igSpread / 100.0;\n\t\t\tlet finalInnerGlowAlpha = clamp(innerGlowMask / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * igOpacity;\n\n\t\t\tif (finalInnerGlowAlpha > 0.001) {\n\t\t\t\tlet igBlended = blendRgb(baseRgb, u.innerGlowColor.rgb, igBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, igBlended, finalInnerGlowAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inner Shadow\n\t\tif (u.innerShadowParams.x > 0.5) {\n\t\t\tlet isOpacity = u.innerShadowParams.y;\n\t\t\tlet isAngle = u.innerShadowParams.z;\n\t\t\tlet isDistance = u.innerShadowParams.w;\n\t\t\tlet isChoke = u.innerShadowParams2.x;\n\t\t\tlet isSize = u.innerShadowParams2.y;\n\t\t\tlet isBlendMode = u32(u.innerShadowParams2.z);\n\n\t\t\tlet isOffset = vec2<f32>(-cos(isAngle), sin(isAngle)) * isDistance * texelSize;\n\t\t\tlet shiftedA = sampleAlpha(in.uv + isOffset);\n\n\t\t\tvar isAccum = 0.0;\n\t\t\tvar isWeight = 0.0;\n\t\t\tlet sigma = max(0.5, isSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(isSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tlet sShifted = sampleAlpha(in.uv + isOffset + offset);\n\t\t\t\t\tlet sOrig = sampleAlpha(in.uv + offset);\n\t\t\t\t\tisAccum += max(0.0, sOrig - sShifted) * weight;\n\t\t\t\t\tisWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredIS = isAccum / max(isWeight, 1e-4);\n\t\t\tlet chokeFactor = isChoke / 100.0;\n\t\t\tlet finalISAlpha = clamp(blurredIS / max(1.0 - chokeFactor * 0.95, 0.01), 0.0, 1.0) * isOpacity;\n\n\t\t\tif (finalISAlpha > 0.001) {\n\t\t\t\tlet isBlended = blendRgb(baseRgb, u.innerShadowColor.rgb, isBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, isBlended, finalISAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inside Stroke\n\t\tif (u.strokeParams.x > 0.5 && u.strokeParams.z > 1.5) { // position == 2: inside\n\t\t\tlet size = u.strokeParams.y;\n\t\t\tlet opacity = u.strokeParams.w;\n\t\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\t\tvar minAlpha = 1.0;\n\t\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\t\tlet sizeSq = size * size;\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet insideStrokeAlpha = clamp(origA - minAlpha, 0.0, 1.0) * opacity;\n\t\t\tif (insideStrokeAlpha > 0.001) {\n\t\t\t\tlet sBlended = blendRgb(baseRgb, u.strokeColor.rgb, blendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, sBlended, insideStrokeAlpha);\n\t\t\t}\n\t\t}\n\n\t\tlet baseLayer = vec4<f32>(baseRgb, origA);\n\t\tresult = compositeLayer(result, baseLayer, 0u);\n\t}\n\n\t// =========================================================================\n\t// 5. CENTER STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z >= 0.5 && u.strokeParams.z <= 1.5) { // position == 1: center\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tvar minAlpha = 1.0;\n\t\tlet halfSize = max(0.5, size * 0.5);\n\t\tlet sampleRadius = min(i32(ceil(halfSize)), 24);\n\t\tlet halfSizeSq = halfSize * halfSize;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= halfSizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet centerStrokeAlpha = clamp(maxAlpha - minAlpha, 0.0, 1.0) * opacity;\n\t\tif (centerStrokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, centerStrokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// Output premultiplied alpha for QuadPipeline / WebGPU rendering\n\treturn vec4<f32>(result.rgb * result.a, result.a);\n}\n`;\nconst resourcesCache = /* @__PURE__ */ new WeakMap();\nfunction getLayerStyleResources(device, format) {\n\tlet res = resourcesCache.get(device);\n\tif (res) return res;\n\tconst module = device.createShaderModule({ code: WGSL_LAYER_STYLE_SHADER });\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule,\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] }),\n\t\t\tformat,\n\t\t\tblend: PREMULTIPLIED_BLEND\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout\n\t};\n\tresourcesCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(88);\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"LayerStyle\" || !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 elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : (props.frame ?? 0) / (props.fps || 30);\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (!outputItem) return Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t\t\tif (outputItem.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, numVal));\n\t\t\t}\n\t\t\tif (outputItem.type === \"Signal\") {\n\t\t\t\tconst data = outputItem.data;\n\t\t\t\tif (typeof data === \"number\") return Math.max(clampMin, Math.min(clampMax, data));\n\t\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\t\tif (typeof data.value === \"number\") return Math.max(clampMin, Math.min(clampMax, data.value));\n\t\t\t\t\tconst amp = typeof data.amplitude === \"number\" ? data.amplitude : 1;\n\t\t\t\t\tconst freq = typeof data.frequency === \"number\" ? data.frequency : 1;\n\t\t\t\t\tconst phase = typeof data.phase === \"number\" ? data.phase : 0;\n\t\t\t\t\tconst offset = typeof data.offset === \"number\" ? data.offset : fallbackVal;\n\t\t\t\t\tconst t = elapsedSeconds;\n\t\t\t\t\tconst computed = offset + amp * Math.sin(2 * Math.PI * freq * t + phase);\n\t\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, computed));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t};\n\tconst padding = computeLayerStylePadding(op);\n\tconst padX = padding.padX;\n\tconst padY = padding.padY;\n\tconst childW = Math.max(1, width - padX * 2);\n\tconst childH = Math.max(1, height - padY * 2);\n\tconst childTex = ctx.renderer.getTemporaryTexture(childW, childH, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, childW, childH, \"clear\").end();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: childW,\n\t\tcontainerHeight: childH\n\t}, childView, childTex, childW, childH);\n\tconst inputTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst inputView = inputTex.createView();\n\tconst inputPass = ctx.renderer.beginFrame(encoder, inputView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\");\n\tctx.renderer.drawTexture(inputPass, childTex, {\n\t\tx: padX,\n\t\ty: padY,\n\t\twidth: childW,\n\t\theight: childH\n\t}, { opacity: 1 });\n\tinputPass.end();\n\tconst { pipeline, uniformLayout, textureLayout } = getLayerStyleResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst ds = op.dropShadow ?? {};\n\tconst is = op.innerShadow ?? {};\n\tconst og = op.outerGlow ?? {};\n\tconst ig = op.innerGlow ?? {};\n\tconst st = op.stroke ?? {};\n\tconst be = op.bevelEmboss ?? {};\n\tconst co = op.colorOverlay ?? {};\n\tconst dsCol = hexToRgba(ds.color ?? \"#000000\");\n\tconst dsOpacity = resolveField(op.dropShadowOpacityHandleId, ds.opacity ?? .75, 0, 1);\n\tconst dsAngle = resolveField(op.dropShadowAngleHandleId, ds.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst dsDist = resolveField(op.dropShadowDistanceHandleId, ds.distance ?? 10, 0, 500);\n\tconst dsSpread = resolveField(op.dropShadowSpreadHandleId, ds.spread ?? 0, 0, 100);\n\tconst dsSize = resolveField(op.dropShadowSizeHandleId, ds.size ?? 10, 0, 250);\n\tconst dsBlend = BLEND_MODE_MAP[ds.blendMode ?? \"multiply\"] ?? 1;\n\tconst isCol = hexToRgba(is.color ?? \"#000000\");\n\tconst isOpacity = resolveField(op.innerShadowOpacityHandleId, is.opacity ?? .75, 0, 1);\n\tconst isAngle = resolveField(op.innerShadowAngleHandleId, is.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst isDist = resolveField(op.innerShadowDistanceHandleId, is.distance ?? 5, 0, 500);\n\tconst isChoke = resolveField(op.innerShadowChokeHandleId, is.choke ?? 0, 0, 100);\n\tconst isSize = resolveField(op.innerShadowSizeHandleId, is.size ?? 5, 0, 250);\n\tconst isBlend = BLEND_MODE_MAP[is.blendMode ?? \"multiply\"] ?? 1;\n\tconst ogCol = hexToRgba(og.color ?? \"#ffffff\");\n\tconst ogOpacity = resolveField(op.outerGlowOpacityHandleId, og.opacity ?? .75, 0, 1);\n\tconst ogSize = resolveField(op.outerGlowSizeHandleId, og.size ?? 15, 0, 250);\n\tconst ogSpread = resolveField(op.outerGlowSpreadHandleId, og.spread ?? 0, 0, 100);\n\tconst ogBlend = BLEND_MODE_MAP[og.blendMode ?? \"screen\"] ?? 2;\n\tconst igCol = hexToRgba(ig.color ?? \"#ffffff\");\n\tconst igOpacity = resolveField(op.innerGlowOpacityHandleId, ig.opacity ?? .75, 0, 1);\n\tconst igSize = resolveField(op.innerGlowSizeHandleId, ig.size ?? 15, 0, 250);\n\tconst igSpread = resolveField(op.innerGlowSpreadHandleId, ig.spread ?? 0, 0, 100);\n\tconst igBlend = BLEND_MODE_MAP[ig.blendMode ?? \"screen\"] ?? 2;\n\tconst stCol = hexToRgba(st.color ?? \"#ffffff\");\n\tconst stSize = resolveField(op.strokeSizeHandleId, st.size ?? 2, 0, 100);\n\tconst stPos = STROKE_POS_MAP[st.position ?? \"outside\"] ?? 0;\n\tconst stOpacity = resolveField(op.strokeOpacityHandleId, st.opacity ?? 1, 0, 1);\n\tconst stBlend = BLEND_MODE_MAP[st.blendMode ?? \"normal\"] ?? 0;\n\tconst beHlCol = hexToRgba(be.highlightColor ?? \"#ffffff\");\n\tconst beShCol = hexToRgba(be.shadowColor ?? \"#000000\");\n\tconst beStyle = BEVEL_STYLE_MAP[be.style ?? \"InnerBevel\"] ?? 0;\n\tconst beTech = BEVEL_TECHNIQUE_MAP[be.technique ?? \"Smooth\"] ?? 0;\n\tconst beDepth = resolveField(op.bevelEmbossDepthHandleId, be.depth ?? 100, 1, 1e3);\n\tconst beDir = be.direction === \"Down\" ? -1 : 1;\n\tconst beSize = resolveField(op.bevelEmbossSizeHandleId, be.size ?? 5, 0, 250);\n\tconst beSoften = resolveField(op.bevelEmbossSoftenHandleId, be.soften ?? 0, 0, 50);\n\tconst beAngle = resolveField(op.bevelEmbossAngleHandleId, be.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst beAltitude = resolveField(op.bevelEmbossAltitudeHandleId, be.altitude ?? 30, 0, 90) * Math.PI / 180;\n\tconst beHlOpacity = resolveField(op.bevelEmbossHighlightOpacityHandleId, be.highlightOpacity ?? .75, 0, 1);\n\tconst beShOpacity = resolveField(op.bevelEmbossShadowOpacityHandleId, be.shadowOpacity ?? .75, 0, 1);\n\tconst coCol = hexToRgba(co.color ?? \"#ff0000\");\n\tconst coOpacity = resolveField(op.colorOverlayOpacityHandleId, co.opacity ?? 1, 0, 1);\n\tconst coBlend = BLEND_MODE_MAP[co.blendMode ?? \"normal\"] ?? 0;\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = dsCol[0];\n\tuniformBufferData[1] = dsCol[1];\n\tuniformBufferData[2] = dsCol[2];\n\tuniformBufferData[3] = dsCol[3];\n\tuniformBufferData[4] = ds.enabled ? 1 : 0;\n\tuniformBufferData[5] = dsOpacity;\n\tuniformBufferData[6] = dsAngle;\n\tuniformBufferData[7] = dsDist;\n\tuniformBufferData[8] = dsSpread;\n\tuniformBufferData[9] = dsSize;\n\tuniformBufferData[10] = dsBlend;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = isCol[0];\n\tuniformBufferData[13] = isCol[1];\n\tuniformBufferData[14] = isCol[2];\n\tuniformBufferData[15] = isCol[3];\n\tuniformBufferData[16] = is.enabled ? 1 : 0;\n\tuniformBufferData[17] = isOpacity;\n\tuniformBufferData[18] = isAngle;\n\tuniformBufferData[19] = isDist;\n\tuniformBufferData[20] = isChoke;\n\tuniformBufferData[21] = isSize;\n\tuniformBufferData[22] = isBlend;\n\tuniformBufferData[23] = 0;\n\tuniformBufferData[24] = ogCol[0];\n\tuniformBufferData[25] = ogCol[1];\n\tuniformBufferData[26] = ogCol[2];\n\tuniformBufferData[27] = ogCol[3];\n\tuniformBufferData[28] = og.enabled ? 1 : 0;\n\tuniformBufferData[29] = ogOpacity;\n\tuniformBufferData[30] = ogSize;\n\tuniformBufferData[31] = ogSpread;\n\tuniformBufferData[32] = ogBlend;\n\tuniformBufferData[33] = 0;\n\tuniformBufferData[34] = 0;\n\tuniformBufferData[35] = 0;\n\tuniformBufferData[36] = igCol[0];\n\tuniformBufferData[37] = igCol[1];\n\tuniformBufferData[38] = igCol[2];\n\tuniformBufferData[39] = igCol[3];\n\tuniformBufferData[40] = ig.enabled ? 1 : 0;\n\tuniformBufferData[41] = igOpacity;\n\tuniformBufferData[42] = igSize;\n\tuniformBufferData[43] = igSpread;\n\tuniformBufferData[44] = igBlend;\n\tuniformBufferData[45] = 0;\n\tuniformBufferData[46] = 0;\n\tuniformBufferData[47] = 0;\n\tuniformBufferData[48] = stCol[0];\n\tuniformBufferData[49] = stCol[1];\n\tuniformBufferData[50] = stCol[2];\n\tuniformBufferData[51] = stCol[3];\n\tuniformBufferData[52] = st.enabled ? 1 : 0;\n\tuniformBufferData[53] = stSize;\n\tuniformBufferData[54] = stPos;\n\tuniformBufferData[55] = stOpacity;\n\tuniformBufferData[56] = stBlend;\n\tuniformBufferData[57] = 0;\n\tuniformBufferData[58] = 0;\n\tuniformBufferData[59] = 0;\n\tuniformBufferData[60] = beHlCol[0];\n\tuniformBufferData[61] = beHlCol[1];\n\tuniformBufferData[62] = beHlCol[2];\n\tuniformBufferData[63] = beHlCol[3];\n\tuniformBufferData[64] = beShCol[0];\n\tuniformBufferData[65] = beShCol[1];\n\tuniformBufferData[66] = beShCol[2];\n\tuniformBufferData[67] = beShCol[3];\n\tuniformBufferData[68] = be.enabled ? 1 : 0;\n\tuniformBufferData[69] = beStyle;\n\tuniformBufferData[70] = beTech;\n\tuniformBufferData[71] = beDepth;\n\tuniformBufferData[72] = beDir;\n\tuniformBufferData[73] = beSize;\n\tuniformBufferData[74] = beSoften;\n\tuniformBufferData[75] = beAngle;\n\tuniformBufferData[76] = beAltitude;\n\tuniformBufferData[77] = beHlOpacity;\n\tuniformBufferData[78] = beShOpacity;\n\tuniformBufferData[79] = 0;\n\tuniformBufferData[80] = coCol[0];\n\tuniformBufferData[81] = coCol[1];\n\tuniformBufferData[82] = coCol[2];\n\tuniformBufferData[83] = coCol[3];\n\tuniformBufferData[84] = co.enabled ? 1 : 0;\n\tuniformBufferData[85] = coOpacity;\n\tuniformBufferData[86] = coBlend;\n\tuniformBufferData[87] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\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: inputView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tinputTex,\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 { LayerStyleNodeConfigSchema as _, DEFAULT_COLOR_OVERLAY as a, computeLayerStylePadding as b, DEFAULT_INNER_SHADOW as c, GlowStyleSchema as d, InnerShadowStyleSchema as f, LAYER_STYLE_PRESETS as g, LAYER_STYLE_OUTPUT_TYPE_MAP as h, DEFAULT_BEVEL_EMBOSS as i, DEFAULT_STROKE as l, LAYER_STYLE_CONFIG_HANDLES as m, BevelEmbossStyleSchema as n, DEFAULT_DROP_SHADOW as o, LAYER_STYLE_BLEND_MODES as p, ColorOverlayStyleSchema as r, DEFAULT_GLOW as s, renderers_default as t, DropShadowStyleSchema as u, LayerStyleResultSchema as v, StrokeStyleSchema as y };\n//# sourceMappingURL=renderers-Ch81UvXn.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BUwHWIf7.mjs","names":[],"sources":["../../../nodes/node-layer-style/dist/renderers-Ch81UvXn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, PREMULTIPLIED_BLEND, createFullscreenPipeline, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { ColorSchema, ImageResultSchema, VideoResultSchema } from \"@framefields/node-sdk\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst LAYER_STYLE_BLEND_MODES = [\n\t{\n\t\tvalue: \"normal\",\n\t\tlabel: \"Normal\"\n\t},\n\t{\n\t\tvalue: \"multiply\",\n\t\tlabel: \"Multiply\"\n\t},\n\t{\n\t\tvalue: \"screen\",\n\t\tlabel: \"Screen\"\n\t},\n\t{\n\t\tvalue: \"overlay\",\n\t\tlabel: \"Overlay\"\n\t},\n\t{\n\t\tvalue: \"darken\",\n\t\tlabel: \"Darken\"\n\t},\n\t{\n\t\tvalue: \"lighten\",\n\t\tlabel: \"Lighten\"\n\t},\n\t{\n\t\tvalue: \"color-dodge\",\n\t\tlabel: \"Color Dodge\"\n\t},\n\t{\n\t\tvalue: \"color-burn\",\n\t\tlabel: \"Color Burn\"\n\t},\n\t{\n\t\tvalue: \"hard-light\",\n\t\tlabel: \"Hard Light\"\n\t},\n\t{\n\t\tvalue: \"soft-light\",\n\t\tlabel: \"Soft Light\"\n\t},\n\t{\n\t\tvalue: \"difference\",\n\t\tlabel: \"Difference\"\n\t},\n\t{\n\t\tvalue: \"exclusion\",\n\t\tlabel: \"Exclusion\"\n\t},\n\t{\n\t\tvalue: \"hue\",\n\t\tlabel: \"Hue\"\n\t},\n\t{\n\t\tvalue: \"saturation\",\n\t\tlabel: \"Saturation\"\n\t},\n\t{\n\t\tvalue: \"color\",\n\t\tlabel: \"Color\"\n\t},\n\t{\n\t\tvalue: \"luminosity\",\n\t\tlabel: \"Luminosity\"\n\t},\n\t{\n\t\tvalue: \"lighter\",\n\t\tlabel: \"Lighter (Add)\"\n\t},\n\t{\n\t\tvalue: \"copy\",\n\t\tlabel: \"Copy\"\n\t},\n\t{\n\t\tvalue: \"xor\",\n\t\tlabel: \"XOR\"\n\t},\n\t{\n\t\tvalue: \"source-over\",\n\t\tlabel: \"Source Over\"\n\t},\n\t{\n\t\tvalue: \"source-in\",\n\t\tlabel: \"Source In\"\n\t},\n\t{\n\t\tvalue: \"source-out\",\n\t\tlabel: \"Source Out\"\n\t},\n\t{\n\t\tvalue: \"source-atop\",\n\t\tlabel: \"Source Atop\"\n\t},\n\t{\n\t\tvalue: \"destination-over\",\n\t\tlabel: \"Destination Over\"\n\t},\n\t{\n\t\tvalue: \"destination-in\",\n\t\tlabel: \"Destination In\"\n\t},\n\t{\n\t\tvalue: \"destination-out\",\n\t\tlabel: \"Destination Out\"\n\t},\n\t{\n\t\tvalue: \"destination-atop\",\n\t\tlabel: \"Destination Atop\"\n\t}\n];\nconst DropShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(10),\n\tspread: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(10),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst InnerShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(5),\n\tchoke: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(5),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst StrokeStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tsize: z.number().min(0).max(100).default(2),\n\tposition: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).default(\"outside\"),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst GlowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tsize: z.number().min(0).max(250).default(15),\n\tspread: z.number().min(0).max(100).default(0),\n\tblendMode: z.string().default(\"screen\")\n});\nconst BevelEmbossStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tstyle: z.enum([\n\t\t\"InnerBevel\",\n\t\t\"OuterBevel\",\n\t\t\"Emboss\",\n\t\t\"PillowEmboss\"\n\t]).default(\"InnerBevel\"),\n\ttechnique: z.enum([\n\t\t\"Smooth\",\n\t\t\"ChiselHard\",\n\t\t\"ChiselSoft\"\n\t]).default(\"Smooth\"),\n\tdepth: z.number().min(1).max(1e3).default(100),\n\tdirection: z.enum([\"Up\", \"Down\"]).default(\"Up\"),\n\tsize: z.number().min(0).max(250).default(5),\n\tsoften: z.number().min(0).max(50).default(0),\n\tangle: z.number().min(0).max(360).default(120),\n\taltitude: z.number().min(0).max(90).default(30),\n\thighlightColor: ColorSchema.default(\"#ffffff\"),\n\thighlightOpacity: z.number().min(0).max(1).default(.75),\n\tshadowColor: ColorSchema.default(\"#000000\"),\n\tshadowOpacity: z.number().min(0).max(1).default(.75)\n});\nconst ColorOverlayStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ff0000\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst DEFAULT_DROP_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 10,\n\tspread: 0,\n\tsize: 10,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_INNER_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 5,\n\tchoke: 0,\n\tsize: 5,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_GLOW = {\n\tenabled: false,\n\tcolor: \"#ffffff\",\n\topacity: .75,\n\tsize: 15,\n\tspread: 0,\n\tblendMode: \"screen\"\n};\nconst DEFAULT_STROKE = {\n\tenabled: false,\n\tsize: 2,\n\tposition: \"outside\",\n\tcolor: \"#ffffff\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst DEFAULT_BEVEL_EMBOSS = {\n\tenabled: false,\n\tstyle: \"InnerBevel\",\n\ttechnique: \"Smooth\",\n\tdepth: 100,\n\tdirection: \"Up\",\n\tsize: 5,\n\tsoften: 0,\n\tangle: 120,\n\taltitude: 30,\n\thighlightColor: \"#ffffff\",\n\thighlightOpacity: .75,\n\tshadowColor: \"#000000\",\n\tshadowOpacity: .75\n};\nconst DEFAULT_COLOR_OVERLAY = {\n\tenabled: false,\n\tcolor: \"#ff0000\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst LayerStyleNodeConfigSchema = z.object({\n\tdropShadow: DropShadowStyleSchema.default(DEFAULT_DROP_SHADOW),\n\tinnerShadow: InnerShadowStyleSchema.default(DEFAULT_INNER_SHADOW),\n\touterGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tinnerGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tstroke: StrokeStyleSchema.default(DEFAULT_STROKE),\n\tbevelEmboss: BevelEmbossStyleSchema.default(DEFAULT_BEVEL_EMBOSS),\n\tcolorOverlay: ColorOverlayStyleSchema.default(DEFAULT_COLOR_OVERLAY),\n\tdropShadowAngleHandleId: z.string().nullable().optional(),\n\tdropShadowDistanceHandleId: z.string().nullable().optional(),\n\tdropShadowSpreadHandleId: z.string().nullable().optional(),\n\tdropShadowSizeHandleId: z.string().nullable().optional(),\n\tdropShadowOpacityHandleId: z.string().nullable().optional(),\n\tinnerShadowAngleHandleId: z.string().nullable().optional(),\n\tinnerShadowDistanceHandleId: z.string().nullable().optional(),\n\tinnerShadowChokeHandleId: z.string().nullable().optional(),\n\tinnerShadowSizeHandleId: z.string().nullable().optional(),\n\tinnerShadowOpacityHandleId: z.string().nullable().optional(),\n\touterGlowSizeHandleId: z.string().nullable().optional(),\n\touterGlowSpreadHandleId: z.string().nullable().optional(),\n\touterGlowOpacityHandleId: z.string().nullable().optional(),\n\tinnerGlowSizeHandleId: z.string().nullable().optional(),\n\tinnerGlowSpreadHandleId: z.string().nullable().optional(),\n\tinnerGlowOpacityHandleId: z.string().nullable().optional(),\n\tstrokeSizeHandleId: z.string().nullable().optional(),\n\tstrokeOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossDepthHandleId: z.string().nullable().optional(),\n\tbevelEmbossSizeHandleId: z.string().nullable().optional(),\n\tbevelEmbossSoftenHandleId: z.string().nullable().optional(),\n\tbevelEmbossAngleHandleId: z.string().nullable().optional(),\n\tbevelEmbossAltitudeHandleId: z.string().nullable().optional(),\n\tbevelEmbossHighlightOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossShadowOpacityHandleId: z.string().nullable().optional(),\n\tcolorOverlayOpacityHandleId: z.string().nullable().optional()\n});\nfunction computeLayerStylePadding(config) {\n\tlet padX = 0;\n\tlet padY = 0;\n\tif (config.dropShadow?.enabled) {\n\t\tconst angleRad = (config.dropShadow.angle ?? 120) * Math.PI / 180;\n\t\tconst dist = config.dropShadow.distance ?? 0;\n\t\tconst dx = Math.ceil(Math.abs(Math.cos(angleRad)) * dist);\n\t\tconst dy = Math.ceil(Math.abs(Math.sin(angleRad)) * dist);\n\t\tpadX = Math.max(padX, dx);\n\t\tpadY = Math.max(padY, dy);\n\t}\n\tif (config.stroke?.enabled && config.stroke.position !== \"inside\") {\n\t\tconst strokePad = config.stroke.position === \"outside\" ? Math.ceil(config.stroke.size ?? 2) : Math.ceil((config.stroke.size ?? 2) * .5);\n\t\tpadX = Math.max(padX, strokePad);\n\t\tpadY = Math.max(padY, strokePad);\n\t}\n\treturn {\n\t\tpadX,\n\t\tpadY\n\t};\n}\nconst LAYER_STYLE_CONFIG_HANDLES = [\n\t{\n\t\tconfigKey: \"dropShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Angle Signal\",\n\t\tdescription: \"Light angle for drop shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Spread Signal\",\n\t\tdescription: \"Edge expansion/sharpness percentage for drop shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for drop shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Angle Signal\",\n\t\tdescription: \"Light angle for inner shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowChoke\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Choke Signal\",\n\t\tdescription: \"Choke sharpness percentage for inner shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Size Signal\",\n\t\tdescription: \"Glow radius for outer glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for outer glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for outer glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Size Signal\",\n\t\tdescription: \"Glow radius for inner glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for inner glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"strokeSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Width Signal\",\n\t\tdescription: \"Stroke line width in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"strokeOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for stroke (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossDepth\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Depth Signal\",\n\t\tdescription: \"Bevel depth / extrusion percentage (1–1000%).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Size Signal\",\n\t\tdescription: \"Bevel beveling size in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSoften\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Soften Signal\",\n\t\tdescription: \"Edge softening blur radius in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Angle Signal\",\n\t\tdescription: \"Azimuth light direction in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAltitude\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Altitude Signal\",\n\t\tdescription: \"Elevation light altitude in degrees (0–90°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossHighlightOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Highlight Opacity Signal\",\n\t\tdescription: \"Highlight specular intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Shadow Opacity Signal\",\n\t\tdescription: \"Shadow diffuse intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"colorOverlayOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Color Overlay Opacity Signal\",\n\t\tdescription: \"Color overlay blend opacity (0–1).\"\n\t}\n];\nconst LayerStyleResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LAYER_STYLE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\nconst LAYER_STYLE_PRESETS = [\n\t{\n\t\tid: \"subtle-drop-shadow\",\n\t\tname: \"Subtle Drop Shadow\",\n\t\tdescription: \"Clean modern floating shadow for UI and graphics\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .35,\n\t\t\t\tdistance: 8,\n\t\t\t\tsize: 16\n\t\t\t},\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"sticker-outline-shadow\",\n\t\tname: \"Sticker Border & Shadow\",\n\t\tdescription: \"Crisp white die-cut sticker border with contact shadow\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .4,\n\t\t\t\tdistance: 6\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"neon-cyber-glow\",\n\t\tname: \"Neon Glow\",\n\t\tdescription: \"Vibrant outer and inner luminescence with soft cyan radiation\",\n\t\tconfig: {\n\t\t\tdropShadow: { ...DEFAULT_DROP_SHADOW },\n\t\t\tinnerShadow: { ...DEFAULT_INNER_SHADOW },\n\t\t\touterGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tsize: 28,\n\t\t\t\tspread: 12\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .8,\n\t\t\t\tsize: 10,\n\t\t\t\tspread: 5\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tposition: \"center\",\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tbevelEmboss: { ...DEFAULT_BEVEL_EMBOSS },\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"glass-emboss\",\n\t\tname: \"Glass & Emboss\",\n\t\tdescription: \"Pristine glass beveling with specular highlights and depth\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .25,\n\t\t\t\tdistance: 6,\n\t\t\t\tsize: 12\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .3,\n\t\t\t\tdistance: 4,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .6,\n\t\t\t\tsize: 8\n\t\t\t},\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\tdepth: 180,\n\t\t\t\tsize: 8,\n\t\t\t\tsoften: 2,\n\t\t\t\taltitude: 35,\n\t\t\t\thighlightOpacity: .9,\n\t\t\t\tshadowOpacity: .5\n\t\t\t},\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"letterpress-carved\",\n\t\tname: \"Letterpress / Carved\",\n\t\tdescription: \"Debossed letterpress engraving into paper surface\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .85,\n\t\t\t\tangle: 300,\n\t\t\t\tdistance: 2,\n\t\t\t\tsize: 1,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .7,\n\t\t\t\tdistance: 3,\n\t\t\t\tchoke: 10,\n\t\t\t\tsize: 4\n\t\t\t},\n\t\t\touterGlow: { ...DEFAULT_GLOW },\n\t\t\tinnerGlow: { ...DEFAULT_GLOW },\n\t\t\tstroke: { ...DEFAULT_STROKE },\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 150,\n\t\t\t\tdirection: \"Down\",\n\t\t\t\tsize: 3,\n\t\t\t\thighlightOpacity: .6,\n\t\t\t\tshadowOpacity: .8\n\t\t\t},\n\t\t\tcolorOverlay: { ...DEFAULT_COLOR_OVERLAY }\n\t\t}\n\t},\n\t{\n\t\tid: \"gold-bevel\",\n\t\tname: \"Metallic Gold Bevel\",\n\t\tdescription: \"High-specular chisel gold badge with deep relief\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\t...DEFAULT_DROP_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\topacity: .6,\n\t\t\t\tdistance: 8,\n\t\t\t\tspread: 5,\n\t\t\t\tsize: 12\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\t...DEFAULT_INNER_SHADOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#573a08\",\n\t\t\t\topacity: .5,\n\t\t\t\tdistance: 3\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffc83b\",\n\t\t\t\topacity: .4,\n\t\t\t\tsize: 20,\n\t\t\t\tspread: 5\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\t...DEFAULT_GLOW,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#fff7d1\",\n\t\t\t\topacity: .5,\n\t\t\t\tsize: 6\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\t...DEFAULT_STROKE,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#b38728\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\t...DEFAULT_BEVEL_EMBOSS,\n\t\t\t\tenabled: true,\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 350,\n\t\t\t\tsize: 10,\n\t\t\t\tsoften: 1,\n\t\t\t\taltitude: 40,\n\t\t\t\thighlightColor: \"#fff4cc\",\n\t\t\t\thighlightOpacity: .95,\n\t\t\t\tshadowColor: \"#422b00\",\n\t\t\t\tshadowOpacity: .85\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\t...DEFAULT_COLOR_OVERLAY,\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#f5b324\",\n\t\t\t\topacity: .35,\n\t\t\t\tblendMode: \"overlay\"\n\t\t\t}\n\t\t}\n\t}\n];\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nfunction hexToRgba(hex) {\n\tif (!hex) return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tlet cleaned = hex.trim().replace(/^#/, \"\");\n\tif (cleaned.length === 3) cleaned = cleaned.split(\"\").map((c) => c + c).join(\"\") + \"ff\";\n\telse if (cleaned.length === 6) cleaned = cleaned + \"ff\";\n\telse if (cleaned.length === 8) {} else return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst r = parseInt(cleaned.slice(0, 2), 16) / 255;\n\tconst g = parseInt(cleaned.slice(2, 4), 16) / 255;\n\tconst b = parseInt(cleaned.slice(4, 6), 16) / 255;\n\tconst a = parseInt(cleaned.slice(6, 8), 16) / 255;\n\treturn [\n\t\tNumber.isFinite(r) ? r : 1,\n\t\tNumber.isFinite(g) ? g : 1,\n\t\tNumber.isFinite(b) ? b : 1,\n\t\tNumber.isFinite(a) ? a : 1\n\t];\n}\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25\n};\nconst BEVEL_STYLE_MAP = {\n\tInnerBevel: 0,\n\tOuterBevel: 1,\n\tEmboss: 2,\n\tPillowEmboss: 3\n};\nconst BEVEL_TECHNIQUE_MAP = {\n\tSmooth: 0,\n\tChiselHard: 1,\n\tChiselSoft: 2\n};\nconst STROKE_POS_MAP = {\n\toutside: 0,\n\tcenter: 1,\n\tinside: 2\n};\nconst WGSL_LAYER_STYLE_SHADER = `\nstruct LayerStyleUniforms {\n\t// Drop Shadow (vec4 x 3)\n\tdropShadowColor : vec4<f32>,\n\tdropShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tdropShadowParams2 : vec4<f32>, // x: spread, y: size, z: blendMode, w: pad\n\n\t// Inner Shadow (vec4 x 3)\n\tinnerShadowColor : vec4<f32>,\n\tinnerShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tinnerShadowParams2 : vec4<f32>, // x: choke, y: size, z: blendMode, w: pad\n\n\t// Outer Glow (vec4 x 3)\n\touterGlowColor : vec4<f32>,\n\touterGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\touterGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Inner Glow (vec4 x 3)\n\tinnerGlowColor : vec4<f32>,\n\tinnerGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\tinnerGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Stroke (vec4 x 3)\n\tstrokeColor : vec4<f32>,\n\tstrokeParams : vec4<f32>, // x: enabled, y: size, z: position(0:out,1:center,2:in), w: opacity\n\tstrokeParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Bevel & Emboss (vec4 x 5)\n\tbevelHighlightColor : vec4<f32>,\n\tbevelShadowColor : vec4<f32>,\n\tbevelParams1 : vec4<f32>, // x: enabled, y: style, z: technique, w: depth\n\tbevelParams2 : vec4<f32>, // x: direction(1:up, -1:down), y: size, z: soften, w: angle(rad)\n\tbevelParams3 : vec4<f32>, // x: altitude(rad), y: hlOpacity, z: shOpacity, w: pad\n\n\t// Color Overlay (vec4 x 2)\n\tcolorOverlayColor : vec4<f32>,\n\tcolorOverlayParams : vec4<f32>, // x: enabled, y: opacity, z: blendMode, w: pad\n};\n\n@group(0) @binding(0) var<uniform> u : LayerStyleUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleAlpha(uv: vec2<f32>) -> f32 {\n\tif (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n\t\treturn 0.0;\n\t}\n\treturn textureSampleLevel(tex, samp, uv, 0.0).a;\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / max(l - n, 1e-5));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / max(x - l, 1e-5));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / max(c_max - c_min, 1e-5);\n}\n\nfn blendRgb(d_rgb: vec3<f32>, s_rgb: vec3<f32>, mode: u32) -> vec3<f32> {\n\tswitch (mode) {\n\t\tcase 1u: { // multiply\n\t\t\treturn d_rgb * s_rgb;\n\t\t}\n\t\tcase 2u: { // screen\n\t\t\treturn d_rgb + s_rgb - d_rgb * s_rgb;\n\t\t}\n\t\tcase 3u: { // overlay\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\td_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 4u: { // darken\n\t\t\treturn min(d_rgb, s_rgb);\n\t\t}\n\t\tcase 5u: { // lighten\n\t\t\treturn max(d_rgb, s_rgb);\n\t\t}\n\t\tcase 6u: { // color-dodge\n\t\t\treturn select(min(d_rgb / max(1.0 - s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb >= vec3<f32>(0.999));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\treturn select(1.0 - min((1.0 - d_rgb) / max(s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb <= vec3<f32>(0.001));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\ts_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\treturn select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { // difference\n\t\t\treturn abs(d_rgb - s_rgb);\n\t\t}\n\t\tcase 11u: { // exclusion\n\t\t\treturn d_rgb + s_rgb - 2.0 * d_rgb * s_rgb;\n\t\t}\n\t\tcase 12u: { // hue\n\t\t\treturn set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 13u: { // saturation\n\t\t\treturn set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 14u: { // color\n\t\t\treturn set_lum(s_rgb, lum(d_rgb));\n\t\t}\n\t\tcase 15u: { // luminosity\n\t\t\treturn set_lum(d_rgb, lum(s_rgb));\n\t\t}\n\t\tdefault: { // normal / source-over\n\t\t\treturn s_rgb;\n\t\t}\n\t}\n}\n\nfn compositeLayer(dst: vec4<f32>, src: vec4<f32>, blendMode: u32) -> vec4<f32> {\n\tlet sa = clamp(src.a, 0.0, 1.0);\n\tif (sa <= 0.0001) {\n\t\treturn dst;\n\t}\n\tlet da = clamp(dst.a, 0.0, 1.0);\n\tif (da <= 0.0001) {\n\t\treturn src;\n\t}\n\n\tswitch (blendMode) {\n\t\tcase 16u: { return dst * sa; } // mask-in / destination-in\n\t\tcase 17u: { return dst * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return src * da; } // source-in\n\t\tcase 19u: { return src * (1.0 - da); } // source-out\n\t\tcase 20u: { return src * da + dst * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return dst + src * (1.0 - da); } // destination-over\n\t\tcase 22u: { return dst * sa + src * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return src + dst; } // lighter / add\n\t\tcase 24u: { return src; } // copy\n\t\tcase 25u: { return src * (1.0 - da) + dst * (1.0 - sa); } // xor\n\t\tdefault: {}\n\t}\n\n\tlet b_rgb = blendRgb(dst.rgb, src.rgb, blendMode);\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = select(\n\t\t((1.0 - da) * src.rgb + (1.0 - sa) * dst.rgb + sa * da * b_rgb) / max(out_a, 1e-5),\n\t\tb_rgb,\n\t\tout_a <= 1e-4\n\t);\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\tlet origColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tlet origA = origColor.a;\n\n\tvar result = vec4<f32>(0.0);\n\n\t// =========================================================================\n\t// 1. DROP SHADOW (Bottom Layer)\n\t// =========================================================================\n\tif (u.dropShadowParams.x > 0.5) {\n\t\tlet opacity = u.dropShadowParams.y;\n\t\tlet angle = u.dropShadowParams.z;\n\t\tlet distance = u.dropShadowParams.w;\n\t\tlet spread = u.dropShadowParams2.x;\n\t\tlet size = u.dropShadowParams2.y;\n\t\tlet blendMode = u32(u.dropShadowParams2.z);\n\n\t\tlet shadowOffset = vec2<f32>(-cos(angle), sin(angle)) * distance * texelSize;\n\t\tlet shadowCenterUv = in.uv - shadowOffset;\n\n\t\tvar shadowAccum = 0.0;\n\t\tvar shadowWeightSum = 0.0;\n\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tshadowAccum = sampleAlpha(shadowCenterUv);\n\t\t\tshadowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tshadowAccum += sampleAlpha(shadowCenterUv + offset) * weight;\n\t\t\t\t\tshadowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredShadow = shadowAccum / max(shadowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet finalShadowAlpha = clamp(blurredShadow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * opacity;\n\n\t\tif (finalShadowAlpha > 0.001) {\n\t\t\tlet shadowCol = vec4<f32>(u.dropShadowColor.rgb, finalShadowAlpha);\n\t\t\tresult = compositeLayer(result, shadowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 2. OUTER GLOW\n\t// =========================================================================\n\tif (u.outerGlowParams.x > 0.5) {\n\t\tlet opacity = u.outerGlowParams.y;\n\t\tlet size = u.outerGlowParams.z;\n\t\tlet spread = u.outerGlowParams.w;\n\t\tlet blendMode = u32(u.outerGlowParams2.x);\n\n\t\tvar glowAccum = 0.0;\n\t\tvar glowWeightSum = 0.0;\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tglowAccum = origA;\n\t\t\tglowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tglowAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tglowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredGlow = glowAccum / max(glowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet spreadGlow = clamp(blurredGlow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0);\n\t\tlet finalGlowAlpha = max(0.0, spreadGlow - origA) * opacity;\n\n\t\tif (finalGlowAlpha > 0.001) {\n\t\t\tlet glowCol = vec4<f32>(u.outerGlowColor.rgb, finalGlowAlpha);\n\t\t\tresult = compositeLayer(result, glowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 3. OUTSIDE STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z < 0.5) { // position == 0: outside\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\tlet sizeSq = size * size;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet strokeAlpha = clamp(maxAlpha - origA, 0.0, 1.0) * opacity;\n\t\tif (strokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, strokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 4. BASE IMAGE LAYER (with Color Overlay, Bevel & Emboss, Inner Glow/Shadow)\n\t// =========================================================================\n\tif (origA > 0.001) {\n\t\tvar baseRgb = origColor.rgb;\n\n\t\t// Color Overlay\n\t\tif (u.colorOverlayParams.x > 0.5) {\n\t\t\tlet overlayOpacity = u.colorOverlayParams.y;\n\t\t\tlet overlayBlendMode = u32(u.colorOverlayParams.z);\n\t\t\tlet blendedOverlay = blendRgb(baseRgb, u.colorOverlayColor.rgb, overlayBlendMode);\n\t\t\tbaseRgb = mix(baseRgb, blendedOverlay, overlayOpacity);\n\t\t}\n\n\t\t// Bevel & Emboss\n\t\tif (u.bevelParams1.x > 0.5) {\n\t\t\tlet style = u.bevelParams1.y;\n\t\t\tlet technique = u.bevelParams1.z;\n\t\t\tlet depth = u.bevelParams1.w / 100.0;\n\t\t\tlet direction = u.bevelParams2.x;\n\t\t\tlet bevelSize = max(0.5, u.bevelParams2.y);\n\t\t\tlet soften = u.bevelParams2.z;\n\t\t\tlet lightAngle = u.bevelParams2.w;\n\t\t\tlet lightAltitude = u.bevelParams3.x;\n\t\t\tlet hlOpacity = u.bevelParams3.y;\n\t\t\tlet shOpacity = u.bevelParams3.z;\n\n\t\t\tlet lightDir = normalize(vec3<f32>(\n\t\t\t\t-cos(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAltitude)\n\t\t\t));\n\n\t\t\tlet stepSize = max(1.0, bevelSize * 0.5 + soften) * texelSize;\n\t\t\tlet aL = sampleAlpha(in.uv - vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aR = sampleAlpha(in.uv + vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aT = sampleAlpha(in.uv - vec2<f32>(0.0, stepSize.y));\n\t\t\tlet aB = sampleAlpha(in.uv + vec2<f32>(0.0, stepSize.y));\n\n\t\t\tvar dx = (aR - aL) * depth * direction;\n\t\t\tvar dy = (aB - aT) * depth * direction;\n\n\t\t\tif (technique > 0.5) { // ChiselHard or ChiselSoft\n\t\t\t\tlet rampFactor = select(2.0, 1.5, technique > 1.5);\n\t\t\t\tdx = clamp(dx * rampFactor, -1.0, 1.0);\n\t\t\t\tdy = clamp(dy * rampFactor, -1.0, 1.0);\n\t\t\t}\n\n\t\t\tlet normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n\t\t\tlet nDotL = dot(normal, lightDir);\n\n\t\t\tlet highlightAmount = max(0.0, nDotL) * hlOpacity;\n\t\t\tlet shadowAmount = max(0.0, -nDotL) * shOpacity;\n\n\t\t\tlet hlColor = mix(baseRgb, u.bevelHighlightColor.rgb + baseRgb, highlightAmount);\n\t\t\tlet shColor = mix(baseRgb, baseRgb * (1.0 - shadowAmount) + u.bevelShadowColor.rgb * shadowAmount, shadowAmount);\n\t\t\tbaseRgb = mix(shColor, hlColor, clamp(nDotL * 0.5 + 0.5, 0.0, 1.0));\n\t\t}\n\n\t\t// Inner Glow\n\t\tif (u.innerGlowParams.x > 0.5) {\n\t\t\tlet igOpacity = u.innerGlowParams.y;\n\t\t\tlet igSize = u.innerGlowParams.z;\n\t\t\tlet igSpread = u.innerGlowParams.w;\n\t\t\tlet igBlendMode = u32(u.innerGlowParams2.x);\n\n\t\t\tvar innerAccum = 0.0;\n\t\t\tvar innerWeight = 0.0;\n\t\t\tlet sigma = max(0.5, igSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(igSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tinnerAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tinnerWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredInner = innerAccum / max(innerWeight, 1e-4);\n\t\t\tlet innerGlowMask = max(0.0, origA - blurredInner);\n\t\t\tlet spreadFactor = igSpread / 100.0;\n\t\t\tlet finalInnerGlowAlpha = clamp(innerGlowMask / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * igOpacity;\n\n\t\t\tif (finalInnerGlowAlpha > 0.001) {\n\t\t\t\tlet igBlended = blendRgb(baseRgb, u.innerGlowColor.rgb, igBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, igBlended, finalInnerGlowAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inner Shadow\n\t\tif (u.innerShadowParams.x > 0.5) {\n\t\t\tlet isOpacity = u.innerShadowParams.y;\n\t\t\tlet isAngle = u.innerShadowParams.z;\n\t\t\tlet isDistance = u.innerShadowParams.w;\n\t\t\tlet isChoke = u.innerShadowParams2.x;\n\t\t\tlet isSize = u.innerShadowParams2.y;\n\t\t\tlet isBlendMode = u32(u.innerShadowParams2.z);\n\n\t\t\tlet isOffset = vec2<f32>(-cos(isAngle), sin(isAngle)) * isDistance * texelSize;\n\t\t\tlet shiftedA = sampleAlpha(in.uv + isOffset);\n\n\t\t\tvar isAccum = 0.0;\n\t\t\tvar isWeight = 0.0;\n\t\t\tlet sigma = max(0.5, isSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(isSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tlet sShifted = sampleAlpha(in.uv + isOffset + offset);\n\t\t\t\t\tlet sOrig = sampleAlpha(in.uv + offset);\n\t\t\t\t\tisAccum += max(0.0, sOrig - sShifted) * weight;\n\t\t\t\t\tisWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredIS = isAccum / max(isWeight, 1e-4);\n\t\t\tlet chokeFactor = isChoke / 100.0;\n\t\t\tlet finalISAlpha = clamp(blurredIS / max(1.0 - chokeFactor * 0.95, 0.01), 0.0, 1.0) * isOpacity;\n\n\t\t\tif (finalISAlpha > 0.001) {\n\t\t\t\tlet isBlended = blendRgb(baseRgb, u.innerShadowColor.rgb, isBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, isBlended, finalISAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inside Stroke\n\t\tif (u.strokeParams.x > 0.5 && u.strokeParams.z > 1.5) { // position == 2: inside\n\t\t\tlet size = u.strokeParams.y;\n\t\t\tlet opacity = u.strokeParams.w;\n\t\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\t\tvar minAlpha = 1.0;\n\t\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\t\tlet sizeSq = size * size;\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet insideStrokeAlpha = clamp(origA - minAlpha, 0.0, 1.0) * opacity;\n\t\t\tif (insideStrokeAlpha > 0.001) {\n\t\t\t\tlet sBlended = blendRgb(baseRgb, u.strokeColor.rgb, blendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, sBlended, insideStrokeAlpha);\n\t\t\t}\n\t\t}\n\n\t\tlet baseLayer = vec4<f32>(baseRgb, origA);\n\t\tresult = compositeLayer(result, baseLayer, 0u);\n\t}\n\n\t// =========================================================================\n\t// 5. CENTER STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z >= 0.5 && u.strokeParams.z <= 1.5) { // position == 1: center\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tvar minAlpha = 1.0;\n\t\tlet halfSize = max(0.5, size * 0.5);\n\t\tlet sampleRadius = min(i32(ceil(halfSize)), 24);\n\t\tlet halfSizeSq = halfSize * halfSize;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= halfSizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet centerStrokeAlpha = clamp(maxAlpha - minAlpha, 0.0, 1.0) * opacity;\n\t\tif (centerStrokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, centerStrokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// Output premultiplied alpha for QuadPipeline / WebGPU rendering\n\treturn vec4<f32>(result.rgb * result.a, result.a);\n}\n`;\nconst resourcesCache = /* @__PURE__ */ new WeakMap();\nfunction getLayerStyleResources(device, format) {\n\tlet res = resourcesCache.get(device);\n\tif (res) return res;\n\tconst module = device.createShaderModule({ code: WGSL_LAYER_STYLE_SHADER });\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule,\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] }),\n\t\t\tformat,\n\t\t\tblend: PREMULTIPLIED_BLEND\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout\n\t};\n\tresourcesCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(88);\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"LayerStyle\" || !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 elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : (props.frame ?? 0) / (props.fps || 30);\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (!outputItem) return Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t\t\tif (outputItem.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, numVal));\n\t\t\t}\n\t\t\tif (outputItem.type === \"Signal\") {\n\t\t\t\tconst data = outputItem.data;\n\t\t\t\tif (typeof data === \"number\") return Math.max(clampMin, Math.min(clampMax, data));\n\t\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\t\tif (typeof data.value === \"number\") return Math.max(clampMin, Math.min(clampMax, data.value));\n\t\t\t\t\tconst amp = typeof data.amplitude === \"number\" ? data.amplitude : 1;\n\t\t\t\t\tconst freq = typeof data.frequency === \"number\" ? data.frequency : 1;\n\t\t\t\t\tconst phase = typeof data.phase === \"number\" ? data.phase : 0;\n\t\t\t\t\tconst offset = typeof data.offset === \"number\" ? data.offset : fallbackVal;\n\t\t\t\t\tconst t = elapsedSeconds;\n\t\t\t\t\tconst computed = offset + amp * Math.sin(2 * Math.PI * freq * t + phase);\n\t\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, computed));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t};\n\tconst padding = computeLayerStylePadding(op);\n\tconst padX = padding.padX;\n\tconst padY = padding.padY;\n\tconst childW = Math.max(1, width - padX * 2);\n\tconst childH = Math.max(1, height - padY * 2);\n\tconst childTex = ctx.renderer.getTemporaryTexture(childW, childH, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, childW, childH, \"clear\").end();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: childW,\n\t\tcontainerHeight: childH\n\t}, childView, childTex, childW, childH);\n\tconst inputTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst inputView = inputTex.createView();\n\tconst inputPass = ctx.renderer.beginFrame(encoder, inputView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\");\n\tctx.renderer.drawTexture(inputPass, childTex, {\n\t\tx: padX,\n\t\ty: padY,\n\t\twidth: childW,\n\t\theight: childH\n\t}, { opacity: 1 });\n\tinputPass.end();\n\tconst { pipeline, uniformLayout, textureLayout } = getLayerStyleResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst ds = op.dropShadow ?? {};\n\tconst is = op.innerShadow ?? {};\n\tconst og = op.outerGlow ?? {};\n\tconst ig = op.innerGlow ?? {};\n\tconst st = op.stroke ?? {};\n\tconst be = op.bevelEmboss ?? {};\n\tconst co = op.colorOverlay ?? {};\n\tconst dsCol = hexToRgba(ds.color ?? \"#000000\");\n\tconst dsOpacity = resolveField(op.dropShadowOpacityHandleId, ds.opacity ?? .75, 0, 1);\n\tconst dsAngle = resolveField(op.dropShadowAngleHandleId, ds.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst dsDist = resolveField(op.dropShadowDistanceHandleId, ds.distance ?? 10, 0, 500);\n\tconst dsSpread = resolveField(op.dropShadowSpreadHandleId, ds.spread ?? 0, 0, 100);\n\tconst dsSize = resolveField(op.dropShadowSizeHandleId, ds.size ?? 10, 0, 250);\n\tconst dsBlend = BLEND_MODE_MAP[ds.blendMode ?? \"multiply\"] ?? 1;\n\tconst isCol = hexToRgba(is.color ?? \"#000000\");\n\tconst isOpacity = resolveField(op.innerShadowOpacityHandleId, is.opacity ?? .75, 0, 1);\n\tconst isAngle = resolveField(op.innerShadowAngleHandleId, is.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst isDist = resolveField(op.innerShadowDistanceHandleId, is.distance ?? 5, 0, 500);\n\tconst isChoke = resolveField(op.innerShadowChokeHandleId, is.choke ?? 0, 0, 100);\n\tconst isSize = resolveField(op.innerShadowSizeHandleId, is.size ?? 5, 0, 250);\n\tconst isBlend = BLEND_MODE_MAP[is.blendMode ?? \"multiply\"] ?? 1;\n\tconst ogCol = hexToRgba(og.color ?? \"#ffffff\");\n\tconst ogOpacity = resolveField(op.outerGlowOpacityHandleId, og.opacity ?? .75, 0, 1);\n\tconst ogSize = resolveField(op.outerGlowSizeHandleId, og.size ?? 15, 0, 250);\n\tconst ogSpread = resolveField(op.outerGlowSpreadHandleId, og.spread ?? 0, 0, 100);\n\tconst ogBlend = BLEND_MODE_MAP[og.blendMode ?? \"screen\"] ?? 2;\n\tconst igCol = hexToRgba(ig.color ?? \"#ffffff\");\n\tconst igOpacity = resolveField(op.innerGlowOpacityHandleId, ig.opacity ?? .75, 0, 1);\n\tconst igSize = resolveField(op.innerGlowSizeHandleId, ig.size ?? 15, 0, 250);\n\tconst igSpread = resolveField(op.innerGlowSpreadHandleId, ig.spread ?? 0, 0, 100);\n\tconst igBlend = BLEND_MODE_MAP[ig.blendMode ?? \"screen\"] ?? 2;\n\tconst stCol = hexToRgba(st.color ?? \"#ffffff\");\n\tconst stSize = resolveField(op.strokeSizeHandleId, st.size ?? 2, 0, 100);\n\tconst stPos = STROKE_POS_MAP[st.position ?? \"outside\"] ?? 0;\n\tconst stOpacity = resolveField(op.strokeOpacityHandleId, st.opacity ?? 1, 0, 1);\n\tconst stBlend = BLEND_MODE_MAP[st.blendMode ?? \"normal\"] ?? 0;\n\tconst beHlCol = hexToRgba(be.highlightColor ?? \"#ffffff\");\n\tconst beShCol = hexToRgba(be.shadowColor ?? \"#000000\");\n\tconst beStyle = BEVEL_STYLE_MAP[be.style ?? \"InnerBevel\"] ?? 0;\n\tconst beTech = BEVEL_TECHNIQUE_MAP[be.technique ?? \"Smooth\"] ?? 0;\n\tconst beDepth = resolveField(op.bevelEmbossDepthHandleId, be.depth ?? 100, 1, 1e3);\n\tconst beDir = be.direction === \"Down\" ? -1 : 1;\n\tconst beSize = resolveField(op.bevelEmbossSizeHandleId, be.size ?? 5, 0, 250);\n\tconst beSoften = resolveField(op.bevelEmbossSoftenHandleId, be.soften ?? 0, 0, 50);\n\tconst beAngle = resolveField(op.bevelEmbossAngleHandleId, be.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst beAltitude = resolveField(op.bevelEmbossAltitudeHandleId, be.altitude ?? 30, 0, 90) * Math.PI / 180;\n\tconst beHlOpacity = resolveField(op.bevelEmbossHighlightOpacityHandleId, be.highlightOpacity ?? .75, 0, 1);\n\tconst beShOpacity = resolveField(op.bevelEmbossShadowOpacityHandleId, be.shadowOpacity ?? .75, 0, 1);\n\tconst coCol = hexToRgba(co.color ?? \"#ff0000\");\n\tconst coOpacity = resolveField(op.colorOverlayOpacityHandleId, co.opacity ?? 1, 0, 1);\n\tconst coBlend = BLEND_MODE_MAP[co.blendMode ?? \"normal\"] ?? 0;\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = dsCol[0];\n\tuniformBufferData[1] = dsCol[1];\n\tuniformBufferData[2] = dsCol[2];\n\tuniformBufferData[3] = dsCol[3];\n\tuniformBufferData[4] = ds.enabled ? 1 : 0;\n\tuniformBufferData[5] = dsOpacity;\n\tuniformBufferData[6] = dsAngle;\n\tuniformBufferData[7] = dsDist;\n\tuniformBufferData[8] = dsSpread;\n\tuniformBufferData[9] = dsSize;\n\tuniformBufferData[10] = dsBlend;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = isCol[0];\n\tuniformBufferData[13] = isCol[1];\n\tuniformBufferData[14] = isCol[2];\n\tuniformBufferData[15] = isCol[3];\n\tuniformBufferData[16] = is.enabled ? 1 : 0;\n\tuniformBufferData[17] = isOpacity;\n\tuniformBufferData[18] = isAngle;\n\tuniformBufferData[19] = isDist;\n\tuniformBufferData[20] = isChoke;\n\tuniformBufferData[21] = isSize;\n\tuniformBufferData[22] = isBlend;\n\tuniformBufferData[23] = 0;\n\tuniformBufferData[24] = ogCol[0];\n\tuniformBufferData[25] = ogCol[1];\n\tuniformBufferData[26] = ogCol[2];\n\tuniformBufferData[27] = ogCol[3];\n\tuniformBufferData[28] = og.enabled ? 1 : 0;\n\tuniformBufferData[29] = ogOpacity;\n\tuniformBufferData[30] = ogSize;\n\tuniformBufferData[31] = ogSpread;\n\tuniformBufferData[32] = ogBlend;\n\tuniformBufferData[33] = 0;\n\tuniformBufferData[34] = 0;\n\tuniformBufferData[35] = 0;\n\tuniformBufferData[36] = igCol[0];\n\tuniformBufferData[37] = igCol[1];\n\tuniformBufferData[38] = igCol[2];\n\tuniformBufferData[39] = igCol[3];\n\tuniformBufferData[40] = ig.enabled ? 1 : 0;\n\tuniformBufferData[41] = igOpacity;\n\tuniformBufferData[42] = igSize;\n\tuniformBufferData[43] = igSpread;\n\tuniformBufferData[44] = igBlend;\n\tuniformBufferData[45] = 0;\n\tuniformBufferData[46] = 0;\n\tuniformBufferData[47] = 0;\n\tuniformBufferData[48] = stCol[0];\n\tuniformBufferData[49] = stCol[1];\n\tuniformBufferData[50] = stCol[2];\n\tuniformBufferData[51] = stCol[3];\n\tuniformBufferData[52] = st.enabled ? 1 : 0;\n\tuniformBufferData[53] = stSize;\n\tuniformBufferData[54] = stPos;\n\tuniformBufferData[55] = stOpacity;\n\tuniformBufferData[56] = stBlend;\n\tuniformBufferData[57] = 0;\n\tuniformBufferData[58] = 0;\n\tuniformBufferData[59] = 0;\n\tuniformBufferData[60] = beHlCol[0];\n\tuniformBufferData[61] = beHlCol[1];\n\tuniformBufferData[62] = beHlCol[2];\n\tuniformBufferData[63] = beHlCol[3];\n\tuniformBufferData[64] = beShCol[0];\n\tuniformBufferData[65] = beShCol[1];\n\tuniformBufferData[66] = beShCol[2];\n\tuniformBufferData[67] = beShCol[3];\n\tuniformBufferData[68] = be.enabled ? 1 : 0;\n\tuniformBufferData[69] = beStyle;\n\tuniformBufferData[70] = beTech;\n\tuniformBufferData[71] = beDepth;\n\tuniformBufferData[72] = beDir;\n\tuniformBufferData[73] = beSize;\n\tuniformBufferData[74] = beSoften;\n\tuniformBufferData[75] = beAngle;\n\tuniformBufferData[76] = beAltitude;\n\tuniformBufferData[77] = beHlOpacity;\n\tuniformBufferData[78] = beShOpacity;\n\tuniformBufferData[79] = 0;\n\tuniformBufferData[80] = coCol[0];\n\tuniformBufferData[81] = coCol[1];\n\tuniformBufferData[82] = coCol[2];\n\tuniformBufferData[83] = coCol[3];\n\tuniformBufferData[84] = co.enabled ? 1 : 0;\n\tuniformBufferData[85] = coOpacity;\n\tuniformBufferData[86] = coBlend;\n\tuniformBufferData[87] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\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: inputView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tinputTex,\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 { LayerStyleNodeConfigSchema as _, DEFAULT_COLOR_OVERLAY as a, computeLayerStylePadding as b, DEFAULT_INNER_SHADOW as c, GlowStyleSchema as d, InnerShadowStyleSchema as f, LAYER_STYLE_PRESETS as g, LAYER_STYLE_OUTPUT_TYPE_MAP as h, DEFAULT_BEVEL_EMBOSS as i, DEFAULT_STROKE as l, LAYER_STYLE_CONFIG_HANDLES as m, BevelEmbossStyleSchema as n, DEFAULT_DROP_SHADOW as o, LAYER_STYLE_BLEND_MODES as p, ColorOverlayStyleSchema as r, DEFAULT_GLOW as s, renderers_default as t, DropShadowStyleSchema as u, LayerStyleResultSchema as v, StrokeStyleSchema as y };\n//# sourceMappingURL=renderers-Ch81UvXn.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
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";
3
+ import "./dist-hmWTJPik.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-CHIgM_YH.mjs";
5
5
 
6
6
  //#region ../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs
7
7
  const OP = "Posterize";
@@ -305,4 +305,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer
305
305
 
306
306
  //#endregion
307
307
  export { PosterizeWebGPURenderer, renderers_default as default };
308
- //# sourceMappingURL=renderer-DTw-W0Yz.mjs.map
308
+ //# sourceMappingURL=renderer-B_b8-ztW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DTw-W0Yz.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.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 = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\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); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\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 levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\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}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\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.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = 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: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-B_b8-ztW.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.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 = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\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); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\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 levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\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}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\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.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = 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: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer, s as resolveSignalField } from "./renderer-BSitV56h.mjs";
3
- import { Nn as signalRegistry } from "./dist-CspOG4V1.mjs";
4
- import { a as createFullscreenPipeline, f as signalTiming, l as fragmentBindGroupLayout, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-DtT5I4ME.mjs";
3
+ import { Nn as signalRegistry } from "./dist-hmWTJPik.mjs";
4
+ import { a as createFullscreenPipeline, f as signalTiming, l as fragmentBindGroupLayout, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CHIgM_YH.mjs";
5
5
 
6
6
  //#region ../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs
7
7
  const NOISE_SHADER = `
@@ -392,4 +392,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });
392
392
 
393
393
  //#endregion
394
394
  export { NoiseWebGPURenderer, renderers_default as default };
395
- //# sourceMappingURL=renderer-DwVOxdzC.mjs.map
395
+ //# sourceMappingURL=renderer-BaJQx0Bp.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-DwVOxdzC.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst noiseUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tmodule: noiseModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveSignalField(op, \"scale\", 10);\n\tconst octavesInfo = resolveSignalField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveSignalField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveSignalField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DdsDStam.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BaJQx0Bp.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-DdsDStam.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveSignalField } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst noiseUniformData = new Float32Array(24);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsignalsLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tmodule: noiseModule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.signalsLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveSignalField(op, \"scale\", 10);\n\tconst octavesInfo = resolveSignalField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveSignalField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveSignalField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveSignalField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd?.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DdsDStam.mjs.map"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-hmWTJPik.mjs";
3
+ import { t as renderers_default } from "./renderer-I3Wxk1tL.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-hmWTJPik.mjs";
3
+ import { t as renderers_default } from "./renderer-CE83KHgr.mjs";
4
+
5
+ export { renderers_default as default };
@@ -0,0 +1,5 @@
1
+ import "./chunk-GBe2k3y8.mjs";
2
+ import "./dist-hmWTJPik.mjs";
3
+ import { t as renderers_default } from "./renderer-BUwHWIf7.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-GBe2k3y8.mjs";
2
2
  import { n as defineRenderer, s as resolveSignalField } from "./renderer-BSitV56h.mjs";
3
- import { Nn as signalRegistry } from "./dist-CspOG4V1.mjs";
4
- import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-DtT5I4ME.mjs";
3
+ import { Nn as signalRegistry } from "./dist-hmWTJPik.mjs";
4
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CHIgM_YH.mjs";
5
5
 
6
6
  //#region ../../nodes/node-camera-parallax-3d/dist/renderers-3w0EgvnV.mjs
7
7
  const CAMERA_PARALLAX_SHADER = `
@@ -470,4 +470,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CameraParallax3DWebGPUR
470
470
 
471
471
  //#endregion
472
472
  export { renderers_default as default };
473
- //# sourceMappingURL=renderer-Dwu_zfdL.mjs.map
473
+ //# sourceMappingURL=renderer-Bhfl-WFX.mjs.map