framefields 2.5.3 → 2.5.5

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/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-2ew5y0Bl.d.mts → audio-B5mdR8vv.d.mts} +3 -3
  4. package/dist/{audio-2ew5y0Bl.d.mts.map → audio-B5mdR8vv.d.mts.map} +1 -1
  5. package/dist/{audio-DrUskzwZ.mjs → audio-C9euVW4K.mjs} +3 -3
  6. package/dist/{audio-DrUskzwZ.mjs.map → audio-C9euVW4K.mjs.map} +1 -1
  7. package/dist/components/index.d.mts +10 -10
  8. package/dist/components/index.mjs +44 -44
  9. package/dist/dist-BPOi5xb_.mjs.map +1 -1
  10. package/dist/{dist-Bf0H4lp1.mjs → dist-BuirkW-f.mjs} +11 -3
  11. package/dist/dist-BuirkW-f.mjs.map +1 -0
  12. package/dist/{dist-DG65RDhc.mjs → dist-DBdxM6xv.mjs} +5 -6
  13. package/dist/dist-DBdxM6xv.mjs.map +1 -0
  14. package/dist/effects/index.d.mts +4 -4
  15. package/dist/effects/index.mjs +35 -35
  16. package/dist/{effects-Z-brb-n7.mjs → effects-B263lgUi.mjs} +2 -2
  17. package/dist/{effects-Z-brb-n7.mjs.map → effects-B263lgUi.mjs.map} +1 -1
  18. package/dist/fonts/index.mjs +2 -2
  19. package/dist/{fonts-DqYgk_1a.mjs → fonts-DNx6ps2p.mjs} +2 -2
  20. package/dist/{fonts-DqYgk_1a.mjs.map → fonts-DNx6ps2p.mjs.map} +1 -1
  21. package/dist/{gpu-CevnCkZC.mjs → gpu-BRBIoxMC.mjs} +2 -2
  22. package/dist/{gpu-CevnCkZC.mjs.map → gpu-BRBIoxMC.mjs.map} +1 -1
  23. package/dist/{index-D1C735Wp.d.mts → index-3Vdef2KE.d.mts} +3 -3
  24. package/dist/{index-D1C735Wp.d.mts.map → index-3Vdef2KE.d.mts.map} +1 -1
  25. package/dist/{index-COQTaniR.d.mts → index-B4o6F1JC.d.mts} +2 -2
  26. package/dist/{index-COQTaniR.d.mts.map → index-B4o6F1JC.d.mts.map} +1 -1
  27. package/dist/{index-KqW22NHL.d.mts → index-BhzlG_1Q.d.mts} +2 -2
  28. package/dist/{index-KqW22NHL.d.mts.map → index-BhzlG_1Q.d.mts.map} +1 -1
  29. package/dist/{index-DSGFMpwL.d.mts → index-D-Gnyffj.d.mts} +4 -4
  30. package/dist/{index-DSGFMpwL.d.mts.map → index-D-Gnyffj.d.mts.map} +1 -1
  31. package/dist/{index-tCKz9Tku.d.mts → index-N1tMc5Z9.d.mts} +54 -54
  32. package/dist/index-N1tMc5Z9.d.mts.map +1 -0
  33. package/dist/{index-CfMylY3O.d.mts → index-o8LxWdwz.d.mts} +3 -3
  34. package/dist/{index-CfMylY3O.d.mts.map → index-o8LxWdwz.d.mts.map} +1 -1
  35. package/dist/{index-CZK6CFLy.d.mts → index-ocZc12ZS.d.mts} +17 -17
  36. package/dist/index-ocZc12ZS.d.mts.map +1 -0
  37. package/dist/index.d.mts +10 -10
  38. package/dist/index.mjs +51 -51
  39. package/dist/preview/index.d.mts +3 -3
  40. package/dist/preview/index.mjs +10 -10
  41. package/dist/{preview-DVw2jLDh.mjs → preview-ChR8Z8Fm.mjs} +2 -2
  42. package/dist/{preview-DVw2jLDh.mjs.map → preview-ChR8Z8Fm.mjs.map} +1 -1
  43. package/dist/preview-engine/audio.mjs +1 -1
  44. package/dist/preview-engine/{chunk-MCFYUKAJ.mjs → chunk-2LQCQ3OT.mjs} +8 -8
  45. package/dist/preview-engine/{chunk-PR37RCNO.mjs → chunk-2TCJSHFA.mjs} +1 -1
  46. package/dist/preview-engine/{chunk-JMOJKT5W.mjs → chunk-2YGR5YCN.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-LNJYHSYX.mjs → chunk-3KHD67Q3.mjs} +1 -1
  48. package/dist/preview-engine/chunk-3SR6BI4B.mjs +1 -0
  49. package/dist/preview-engine/{chunk-NXKXOSE6.mjs → chunk-4INGTMZ5.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-T4VP45AP.mjs → chunk-4JX5LBE2.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-7JYMNGNK.mjs → chunk-5NT7WWJR.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-NB55FW7D.mjs → chunk-6PMATELR.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-45XGWIOY.mjs → chunk-AKT4YQWL.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-RNFYEZLL.mjs → chunk-ALSOO22Q.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-3AYICEZ5.mjs → chunk-B7J72YSP.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-I3ZTDIVM.mjs → chunk-BBHRXV75.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-NHQR76WL.mjs → chunk-DDFWN7DI.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-ZVUTFXDR.mjs → chunk-DOCFOSA6.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-YJ24W73B.mjs → chunk-FZLKPBKS.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-EU7CFSB5.mjs → chunk-GQIRV466.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-DWHQSNSJ.mjs → chunk-IIOHF7MH.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-WUMVCQYI.mjs → chunk-J24VHZS6.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-2WOCQNZX.mjs → chunk-JD4TBC6Z.mjs} +8 -8
  64. package/dist/preview-engine/{chunk-X6BJLPW6.mjs → chunk-JTT3YX7W.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-XJ4CQIZZ.mjs → chunk-KWTTANYN.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-QCUGWPYP.mjs → chunk-LN3YAWUD.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-M6ZKK6ZU.mjs → chunk-LYSU6S4O.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-TE2QAKKF.mjs → chunk-MJCK5FLZ.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-24H3QVYB.mjs → chunk-MMVFX42U.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-25T3M6MI.mjs → chunk-MUOJMF7M.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-B555EGEU.mjs → chunk-NQZRPPUU.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-VTE3IISK.mjs → chunk-OXXRKNHW.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-DUEY7AXY.mjs → chunk-PJMX2GFY.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-MA4YVA2E.mjs → chunk-Q7JN4EHX.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-YSXMXD3F.mjs → chunk-Q7XC3FI7.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-UXCTWFKK.mjs → chunk-QPBTLJ5W.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-LQVACZDE.mjs → chunk-QRYCB6E3.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-2QQQTZHS.mjs → chunk-RDEQ4LQU.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-KKBJ7X3T.mjs → chunk-RF62TV3G.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-CE6CG5BH.mjs → chunk-RHXZXWJ4.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-BNO5JAEZ.mjs → chunk-RKNV5N7D.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-PXWCGXTF.mjs → chunk-SP22JWN2.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-NYEDWUFS.mjs → chunk-SQ52PBF3.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-QYIKOOFI.mjs → chunk-SVE3XWO7.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-QJYAIQYU.mjs → chunk-SXNCNG4L.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-VH5V54RA.mjs → chunk-TPFDAOW7.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-ENS4KUJV.mjs → chunk-UEQIO6AH.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-XYRBFLFF.mjs → chunk-ULPLHKM2.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-MCR7XMNQ.mjs → chunk-ULVX4VYT.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-ZAIVXGSS.mjs → chunk-UQD2UE6I.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-QP24X77K.mjs → chunk-VY6ST4QX.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-7BUKVFWB.mjs → chunk-W2EZFV4Q.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-P734GD7D.mjs → chunk-WDWHOXSA.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-2RZ6S4SW.mjs → chunk-YEPYVASB.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-5FTCPTOX.mjs → chunk-ZJLNXN7W.mjs} +8 -8
  96. package/dist/preview-engine/{chunk-FAEWI3LF.mjs → chunk-ZZAZF6VC.mjs} +1 -1
  97. package/dist/preview-engine/components.mjs +1 -1
  98. package/dist/preview-engine/effects.mjs +1 -1
  99. package/dist/preview-engine/fonts.mjs +1 -1
  100. package/dist/preview-engine/framefields.mjs +1 -1
  101. package/dist/preview-engine/player.mjs +1 -1
  102. package/dist/preview-engine/renderers-4CRXZJ5G.mjs +1 -0
  103. package/dist/preview-engine/{renderers-WPBTAU2E.mjs → renderers-4RVSLTCX.mjs} +1 -1
  104. package/dist/preview-engine/{renderers-W5CTR4B5.mjs → renderers-56TGEFDK.mjs} +1 -1
  105. package/dist/preview-engine/renderers-5QF4OLFQ.mjs +1 -0
  106. package/dist/preview-engine/renderers-5SOW6OVE.mjs +1 -0
  107. package/dist/preview-engine/renderers-6M2HPY2J.mjs +1 -0
  108. package/dist/preview-engine/{renderers-DZZFIYYA.mjs → renderers-7GMW52G3.mjs} +1 -1
  109. package/dist/preview-engine/renderers-7HT5NW7W.mjs +1 -0
  110. package/dist/preview-engine/{renderers-KV3TTCO6.mjs → renderers-7SW2AHM2.mjs} +1 -1
  111. package/dist/preview-engine/{renderers-BNXTSIXJ.mjs → renderers-ART3EGSZ.mjs} +1 -1
  112. package/dist/preview-engine/{renderers-6NFRKHNO.mjs → renderers-ATTGUTYY.mjs} +1 -1
  113. package/dist/preview-engine/renderers-AYWCRBQC.mjs +1 -0
  114. package/dist/preview-engine/renderers-BA6ZCPI5.mjs +1 -0
  115. package/dist/preview-engine/{renderers-AKZAAGR7.mjs → renderers-BAS7RXTC.mjs} +1 -1
  116. package/dist/preview-engine/{renderers-CLLR5MOQ.mjs → renderers-BWRNCXR6.mjs} +1 -1
  117. package/dist/preview-engine/{renderers-N7T34SCI.mjs → renderers-C3YXNKNM.mjs} +1 -1
  118. package/dist/preview-engine/renderers-CZTCW4FC.mjs +1 -0
  119. package/dist/preview-engine/{renderers-C7SJ3M6S.mjs → renderers-D2XEQ2YY.mjs} +1 -1
  120. package/dist/preview-engine/renderers-DFIJYBW2.mjs +1 -0
  121. package/dist/preview-engine/{renderers-DHKB5LI6.mjs → renderers-EJGF3PYQ.mjs} +1 -1
  122. package/dist/preview-engine/renderers-EJN6M6DO.mjs +1 -0
  123. package/dist/preview-engine/{renderers-MKEXNBCW.mjs → renderers-EK3HQUUF.mjs} +1 -1
  124. package/dist/preview-engine/{renderers-O56IOD7J.mjs → renderers-EQDINUMT.mjs} +1 -1
  125. package/dist/preview-engine/{renderers-VYK2BJID.mjs → renderers-FC7G7KU7.mjs} +1 -1
  126. package/dist/preview-engine/{renderers-BQLYS4TM.mjs → renderers-FD3ZT73R.mjs} +1 -1
  127. package/dist/preview-engine/{renderers-TASYN62K.mjs → renderers-FYI6QNUH.mjs} +1 -1
  128. package/dist/preview-engine/renderers-G34C5J27.mjs +1 -0
  129. package/dist/preview-engine/{renderers-ROSSJ7Y2.mjs → renderers-GHP7SL5M.mjs} +1 -1
  130. package/dist/preview-engine/renderers-GKVTNDVH.mjs +1 -0
  131. package/dist/preview-engine/{renderers-MPCYLXXU.mjs → renderers-GY4R467B.mjs} +1 -1
  132. package/dist/preview-engine/{renderers-TAMDNTEQ.mjs → renderers-H2UI7YEO.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-6PVGRTXV.mjs → renderers-HBIBRZD7.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-GF77N2KM.mjs → renderers-HMNCIEU3.mjs} +1 -1
  135. package/dist/preview-engine/{renderers-SIBP54WK.mjs → renderers-HZBYQKIQ.mjs} +1 -1
  136. package/dist/preview-engine/renderers-IK7ZJJKJ.mjs +1 -0
  137. package/dist/preview-engine/renderers-ISASPH6T.mjs +1 -0
  138. package/dist/preview-engine/renderers-IW5MWDBI.mjs +1 -0
  139. package/dist/preview-engine/renderers-K2PI4WJS.mjs +1 -0
  140. package/dist/preview-engine/renderers-KESHVFL2.mjs +1 -0
  141. package/dist/preview-engine/renderers-KTZZVAB2.mjs +1 -0
  142. package/dist/preview-engine/renderers-KY5CJEOV.mjs +1 -0
  143. package/dist/preview-engine/{renderers-MS4HG3M4.mjs → renderers-LTV5RFDJ.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-CEJP6Q7F.mjs → renderers-LV6LLULR.mjs} +1 -1
  145. package/dist/preview-engine/renderers-M5W6SUQD.mjs +1 -0
  146. package/dist/preview-engine/{renderers-H3ZM2TOA.mjs → renderers-MEM3REMI.mjs} +1 -1
  147. package/dist/preview-engine/{renderers-EJATUIUP.mjs → renderers-N36R42RL.mjs} +1 -1
  148. package/dist/preview-engine/{renderers-UVABXXQF.mjs → renderers-NTKSN32T.mjs} +1 -1
  149. package/dist/preview-engine/renderers-O5XMWFPY.mjs +1 -0
  150. package/dist/preview-engine/{renderers-QO2RHF7F.mjs → renderers-P2FTCDZ7.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-L7EITUCD.mjs → renderers-PYDOSDEY.mjs} +1 -1
  152. package/dist/preview-engine/renderers-QJA35PKC.mjs +1 -0
  153. package/dist/preview-engine/{renderers-TWZHTKW7.mjs → renderers-RDHHVXRE.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-RRJ2DX2W.mjs → renderers-SY435YU3.mjs} +1 -1
  155. package/dist/preview-engine/renderers-TJIFTQHV.mjs +1 -0
  156. package/dist/preview-engine/renderers-TN4XN436.mjs +1 -0
  157. package/dist/preview-engine/renderers-UDYLCYCB.mjs +1 -0
  158. package/dist/preview-engine/renderers-WZ7SFIBZ.mjs +1 -0
  159. package/dist/preview-engine/renderers-WZEV464O.mjs +228 -0
  160. package/dist/preview-engine/renderers-X6QNDC6R.mjs +1 -0
  161. package/dist/preview-engine/renderers-X6RNTJOV.mjs +1 -0
  162. package/dist/preview-engine/{renderers-QPFZBLDI.mjs → renderers-Y3N7236P.mjs} +1 -1
  163. package/dist/preview-engine/{renderers-XSPU2BIQ.mjs → renderers-YBTWN76S.mjs} +1 -1
  164. package/dist/preview-engine/{renderers-T62TXGVO.mjs → renderers-YK74777T.mjs} +1 -1
  165. package/dist/preview-engine/renderers-YP3ASXIJ.mjs +1 -0
  166. package/dist/preview-engine/renderers-YVJAG3PD.mjs +1 -0
  167. package/dist/preview-engine/{renderers-4RFB2LG2.mjs → renderers-ZAMSS7QN.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-FOHW7RWH.mjs → renderers-ZDMDDWLN.mjs} +1 -1
  169. package/dist/preview-engine/renderers-ZPPZNMKJ.mjs +1 -0
  170. package/dist/preview-engine/signals.mjs +1 -1
  171. package/dist/{program-4mAVgg3c.mjs → program-O2bWX0cs.mjs} +2 -2
  172. package/dist/{program-4mAVgg3c.mjs.map → program-O2bWX0cs.mjs.map} +1 -1
  173. package/dist/registry/card-stack.json +3 -2
  174. package/dist/registry/chat-thread.json +4 -3
  175. package/dist/registry/index.json +3 -2
  176. package/dist/renderer/index.d.mts +2 -2
  177. package/dist/renderer/index.mjs +2 -2
  178. package/dist/renderer-0441BN0U.mjs +5 -0
  179. package/dist/{renderer-RiWi7y5C.mjs → renderer-1NoJLLDa.mjs} +4 -4
  180. package/dist/{renderer-RiWi7y5C.mjs.map → renderer-1NoJLLDa.mjs.map} +1 -1
  181. package/dist/renderer-3qDgFc-W.mjs +5 -0
  182. package/dist/renderer-6AIqTN5Z.mjs +5 -0
  183. package/dist/{renderer-zdpn1Hkk.mjs → renderer-8_d6YNnE.mjs} +3 -3
  184. package/dist/{renderer-zdpn1Hkk.mjs.map → renderer-8_d6YNnE.mjs.map} +1 -1
  185. package/dist/{renderer-DTXAa2pL.mjs → renderer-B0IJirDs.mjs} +4 -4
  186. package/dist/{renderer-DTXAa2pL.mjs.map → renderer-B0IJirDs.mjs.map} +1 -1
  187. package/dist/{renderer-_vcT__tW.mjs → renderer-B2no_9zi.mjs} +4 -4
  188. package/dist/{renderer-_vcT__tW.mjs.map → renderer-B2no_9zi.mjs.map} +1 -1
  189. package/dist/{renderer-CkJXq4bD.mjs → renderer-B5ZdkcMi.mjs} +3 -3
  190. package/dist/{renderer-CkJXq4bD.mjs.map → renderer-B5ZdkcMi.mjs.map} +1 -1
  191. package/dist/renderer-B7MZ5R7u.mjs +5 -0
  192. package/dist/{renderer-Bh0dwc8n.mjs → renderer-B7vXnBUo.mjs} +4 -4
  193. package/dist/{renderer-Bh0dwc8n.mjs.map → renderer-B7vXnBUo.mjs.map} +1 -1
  194. package/dist/renderer-BE2rIA4B.mjs +5 -0
  195. package/dist/renderer-BIQ81ln4.mjs +5 -0
  196. package/dist/{renderer-BIYJKdwA.mjs → renderer-BKJ8cywK.mjs} +3 -3
  197. package/dist/{renderer-BIYJKdwA.mjs.map → renderer-BKJ8cywK.mjs.map} +1 -1
  198. package/dist/renderer-BKm3_Ob3.mjs +5 -0
  199. package/dist/{renderer-DPzair18.mjs → renderer-BMiZIGkZ.mjs} +2 -2
  200. package/dist/renderer-BNdT1Wwf.mjs +5 -0
  201. package/dist/{renderer-C1sFg34Y.mjs → renderer-BNs31kME.mjs} +4 -4
  202. package/dist/{renderer-C1sFg34Y.mjs.map → renderer-BNs31kME.mjs.map} +1 -1
  203. package/dist/renderer-BQycs1q_.mjs +5 -0
  204. package/dist/{renderer-Bt_j2Zi6.mjs → renderer-BStETpqC.mjs} +3 -3
  205. package/dist/{renderer-Bt_j2Zi6.mjs.map → renderer-BStETpqC.mjs.map} +1 -1
  206. package/dist/{renderer-CT_3Fegr.mjs → renderer-BWNQQZ12.mjs} +4 -4
  207. package/dist/{renderer-CT_3Fegr.mjs.map → renderer-BWNQQZ12.mjs.map} +1 -1
  208. package/dist/{renderer-C8-NmotX.mjs → renderer-BZ5uOfoX.mjs} +3 -3
  209. package/dist/{renderer-C8-NmotX.mjs.map → renderer-BZ5uOfoX.mjs.map} +1 -1
  210. package/dist/{renderer-Ddg3dJmu.mjs → renderer-Bag1LFos.mjs} +4 -4
  211. package/dist/{renderer-Ddg3dJmu.mjs.map → renderer-Bag1LFos.mjs.map} +1 -1
  212. package/dist/{renderer-CvYxxS_X.mjs → renderer-BfQdc3RM.mjs} +73 -73
  213. package/dist/{renderer-CvYxxS_X.mjs.map → renderer-BfQdc3RM.mjs.map} +1 -1
  214. package/dist/{renderer-C9r0-KY4.mjs → renderer-BgmO1Dzw.mjs} +11 -2
  215. package/dist/{renderer-C9r0-KY4.mjs.map → renderer-BgmO1Dzw.mjs.map} +1 -1
  216. package/dist/renderer-Bj7MxXfk.mjs +5 -0
  217. package/dist/renderer-BjRAGYYC.mjs +5 -0
  218. package/dist/{renderer-BIt-At3v.mjs → renderer-BlU3Sh_0.mjs} +4 -4
  219. package/dist/{renderer-BIt-At3v.mjs.map → renderer-BlU3Sh_0.mjs.map} +1 -1
  220. package/dist/renderer-BqE2BQ_X.mjs +5 -0
  221. package/dist/{renderer-CxkUI9s_.mjs → renderer-BrKgtYq4.mjs} +4 -4
  222. package/dist/{renderer-CxkUI9s_.mjs.map → renderer-BrKgtYq4.mjs.map} +1 -1
  223. package/dist/{renderer-NL2IZShC.mjs → renderer-Bs6BaMLf.mjs} +4 -4
  224. package/dist/{renderer-NL2IZShC.mjs.map → renderer-Bs6BaMLf.mjs.map} +1 -1
  225. package/dist/renderer-BsewLDHZ.mjs +3 -0
  226. package/dist/{renderer-Bk7vVfTu.mjs → renderer-BvA4sQz5.mjs} +3 -3
  227. package/dist/{renderer-Bk7vVfTu.mjs.map → renderer-BvA4sQz5.mjs.map} +1 -1
  228. package/dist/{renderer-BwRLXhxJ.mjs → renderer-Bvizxddu.mjs} +3 -3
  229. package/dist/{renderer-BwRLXhxJ.mjs.map → renderer-Bvizxddu.mjs.map} +1 -1
  230. package/dist/{renderer-D-FwaV1R.mjs → renderer-Bwxm-kWL.mjs} +2 -2
  231. package/dist/renderer-Bz5BMkOE.mjs +5 -0
  232. package/dist/{renderer-CE9N4EEI.d.mts → renderer-C-dcd14F.d.mts} +2 -2
  233. package/dist/{renderer-CE9N4EEI.d.mts.map → renderer-C-dcd14F.d.mts.map} +1 -1
  234. package/dist/{renderer-BcSSAzc4.mjs → renderer-C2MaJKfY.mjs} +4 -4
  235. package/dist/{renderer-BcSSAzc4.mjs.map → renderer-C2MaJKfY.mjs.map} +1 -1
  236. package/dist/{renderer-C4pS7aAI.mjs → renderer-C3tdjg8B.mjs} +4 -4
  237. package/dist/{renderer-C4pS7aAI.mjs.map → renderer-C3tdjg8B.mjs.map} +1 -1
  238. package/dist/{renderer-C4f_X1Qc.mjs → renderer-C5QYI1Wu.mjs} +3 -3
  239. package/dist/{renderer-C4f_X1Qc.mjs.map → renderer-C5QYI1Wu.mjs.map} +1 -1
  240. package/dist/{renderer-DPVEs5ME.mjs → renderer-C6n8y6Pw.mjs} +4 -4
  241. package/dist/{renderer-DPVEs5ME.mjs.map → renderer-C6n8y6Pw.mjs.map} +1 -1
  242. package/dist/{renderer-BKayVZhL.mjs → renderer-C8pJFxcL.mjs} +3 -3
  243. package/dist/{renderer-BKayVZhL.mjs.map → renderer-C8pJFxcL.mjs.map} +1 -1
  244. package/dist/{renderer-CTvPNRMH.mjs → renderer-CA_CwisV.mjs} +3 -3
  245. package/dist/{renderer-CTvPNRMH.mjs.map → renderer-CA_CwisV.mjs.map} +1 -1
  246. package/dist/renderer-CDOSfB9H.mjs +5 -0
  247. package/dist/{renderer-C0P8ZRiC.mjs → renderer-CEAmByVW.mjs} +3 -3
  248. package/dist/{renderer-C0P8ZRiC.mjs.map → renderer-CEAmByVW.mjs.map} +1 -1
  249. package/dist/{renderer-C7HIJcJK.mjs → renderer-CFCR_7bq.mjs} +4 -4
  250. package/dist/{renderer-C7HIJcJK.mjs.map → renderer-CFCR_7bq.mjs.map} +1 -1
  251. package/dist/{renderer-Y5JmTL8J.mjs → renderer-CFRTJ7cT.mjs} +3 -3
  252. package/dist/{renderer-Y5JmTL8J.mjs.map → renderer-CFRTJ7cT.mjs.map} +1 -1
  253. package/dist/{renderer-Cm9fEQsw.mjs → renderer-CPSg6eEQ.mjs} +3 -3
  254. package/dist/{renderer-Cm9fEQsw.mjs.map → renderer-CPSg6eEQ.mjs.map} +1 -1
  255. package/dist/renderer-CT26yQT-.mjs +5 -0
  256. package/dist/{renderer-B8PNlKEM.mjs → renderer-CTy0bSsl.mjs} +4 -4
  257. package/dist/{renderer-B8PNlKEM.mjs.map → renderer-CTy0bSsl.mjs.map} +1 -1
  258. package/dist/{renderer-Dkt1oh9H.mjs → renderer-CVbNiH03.mjs} +4 -4
  259. package/dist/{renderer-Dkt1oh9H.mjs.map → renderer-CVbNiH03.mjs.map} +1 -1
  260. package/dist/renderer-CZeAbz48.mjs +5 -0
  261. package/dist/{renderer-DYdll3xW.mjs → renderer-CbxfSmYE.mjs} +4 -4
  262. package/dist/{renderer-DYdll3xW.mjs.map → renderer-CbxfSmYE.mjs.map} +1 -1
  263. package/dist/{renderer-nLPfvY3-.mjs → renderer-CdxNwGeb.mjs} +2 -2
  264. package/dist/{renderer-nLPfvY3-.mjs.map → renderer-CdxNwGeb.mjs.map} +1 -1
  265. package/dist/{renderer-Cb5uDZm0.mjs → renderer-Cg2xS8h8.mjs} +3 -3
  266. package/dist/{renderer-Cb5uDZm0.mjs.map → renderer-Cg2xS8h8.mjs.map} +1 -1
  267. package/dist/{renderer-CJ2-jEy7.mjs → renderer-CnclEQdA.mjs} +3 -3
  268. package/dist/{renderer-CJ2-jEy7.mjs.map → renderer-CnclEQdA.mjs.map} +1 -1
  269. package/dist/{renderer-CgMnZYTM.mjs → renderer-CpDaUeCN.mjs} +4 -4
  270. package/dist/{renderer-CgMnZYTM.mjs.map → renderer-CpDaUeCN.mjs.map} +1 -1
  271. package/dist/{renderer-Du8z4UrN.mjs → renderer-CqJou_2L.mjs} +3 -3
  272. package/dist/{renderer-Du8z4UrN.mjs.map → renderer-CqJou_2L.mjs.map} +1 -1
  273. package/dist/{renderer-CxOaqnho.mjs → renderer-CrKYlipx.mjs} +3 -3
  274. package/dist/{renderer-CxOaqnho.mjs.map → renderer-CrKYlipx.mjs.map} +1 -1
  275. package/dist/{renderer-CPl1wOrj.mjs → renderer-D3FJcRA3.mjs} +3 -3
  276. package/dist/{renderer-CPl1wOrj.mjs.map → renderer-D3FJcRA3.mjs.map} +1 -1
  277. package/dist/renderer-D50b7kip.mjs +5 -0
  278. package/dist/renderer-D5LmrO96.mjs +5 -0
  279. package/dist/{renderer-vc8t_z-y.mjs → renderer-D8m3fuRp.mjs} +3 -3
  280. package/dist/{renderer-vc8t_z-y.mjs.map → renderer-D8m3fuRp.mjs.map} +1 -1
  281. package/dist/{renderer-BpBhvMi1.mjs → renderer-DADTT3ym.mjs} +2 -2
  282. package/dist/renderer-DCvqZ5o_.mjs +5 -0
  283. package/dist/{renderer-BBA-iCi-.mjs → renderer-DGOY-LBR.mjs} +34 -9
  284. package/dist/renderer-DGOY-LBR.mjs.map +1 -0
  285. package/dist/{renderer-Cz5SOnJr.mjs → renderer-DHdFVpdH.mjs} +3 -3
  286. package/dist/{renderer-Cz5SOnJr.mjs.map → renderer-DHdFVpdH.mjs.map} +1 -1
  287. package/dist/renderer-DJGJeGEn.mjs +5 -0
  288. package/dist/{renderer-BjxceNBj.mjs → renderer-DO1TeUqV.mjs} +4 -4
  289. package/dist/{renderer-BjxceNBj.mjs.map → renderer-DO1TeUqV.mjs.map} +1 -1
  290. package/dist/renderer-DONvNNXi.mjs +5 -0
  291. package/dist/renderer-DPaSo--Y.mjs +6 -0
  292. package/dist/{renderer-D0iSbNza.mjs → renderer-DTPmvL1i.mjs} +4 -4
  293. package/dist/{renderer-D0iSbNza.mjs.map → renderer-DTPmvL1i.mjs.map} +1 -1
  294. package/dist/{renderer-CWnhRMOq.mjs → renderer-DVGVcDvB.mjs} +4 -4
  295. package/dist/{renderer-CWnhRMOq.mjs.map → renderer-DVGVcDvB.mjs.map} +1 -1
  296. package/dist/{renderer-Cjw6lyaK.mjs → renderer-DW21AyEv.mjs} +4 -4
  297. package/dist/{renderer-Cjw6lyaK.mjs.map → renderer-DW21AyEv.mjs.map} +1 -1
  298. package/dist/{renderer-B9iVE2GG.mjs → renderer-DWG6EXGj.mjs} +4 -4
  299. package/dist/{renderer-B9iVE2GG.mjs.map → renderer-DWG6EXGj.mjs.map} +1 -1
  300. package/dist/{renderer-De7gno9X.mjs → renderer-Daqvhwjp.mjs} +4 -4
  301. package/dist/{renderer-De7gno9X.mjs.map → renderer-Daqvhwjp.mjs.map} +1 -1
  302. package/dist/{renderer-5-9DPis6.mjs → renderer-DcApNxER.mjs} +3 -3
  303. package/dist/{renderer-5-9DPis6.mjs.map → renderer-DcApNxER.mjs.map} +1 -1
  304. package/dist/{renderer-CGKKjJ5Q.mjs → renderer-DdkPY4hO.mjs} +3 -3
  305. package/dist/{renderer-CGKKjJ5Q.mjs.map → renderer-DdkPY4hO.mjs.map} +1 -1
  306. package/dist/renderer-DfYYokhr.mjs +5 -0
  307. package/dist/{renderer-C5h2TSjH.mjs → renderer-Dk0okoS3.mjs} +3 -3
  308. package/dist/{renderer-C5h2TSjH.mjs.map → renderer-Dk0okoS3.mjs.map} +1 -1
  309. package/dist/{renderer-B9m7xIPo.mjs → renderer-DkM6Ikdf.mjs} +4 -4
  310. package/dist/{renderer-B9m7xIPo.mjs.map → renderer-DkM6Ikdf.mjs.map} +1 -1
  311. package/dist/{renderer-T2dd9a2L.mjs → renderer-DkOxEQsg.mjs} +4 -4
  312. package/dist/{renderer-T2dd9a2L.mjs.map → renderer-DkOxEQsg.mjs.map} +1 -1
  313. package/dist/renderer-DlIJhdEM.mjs +5 -0
  314. package/dist/{renderer-BmX2CmyO.mjs → renderer-DmTxEeMh.mjs} +4 -4
  315. package/dist/{renderer-BmX2CmyO.mjs.map → renderer-DmTxEeMh.mjs.map} +1 -1
  316. package/dist/renderer-DqD3nMtv.mjs +5 -0
  317. package/dist/renderer-DrIl-uGt.mjs +5 -0
  318. package/dist/{renderer-khVVYoVF.mjs → renderer-DsnV8tpW.mjs} +4 -4
  319. package/dist/{renderer-khVVYoVF.mjs.map → renderer-DsnV8tpW.mjs.map} +1 -1
  320. package/dist/{renderer-wEXBnlr1.mjs → renderer-DtqiWq1m.mjs} +4 -4
  321. package/dist/{renderer-wEXBnlr1.mjs.map → renderer-DtqiWq1m.mjs.map} +1 -1
  322. package/dist/{renderer-wIsJb2eO.mjs → renderer-Duorbrb8.mjs} +2 -2
  323. package/dist/{renderer-wIsJb2eO.mjs.map → renderer-Duorbrb8.mjs.map} +1 -1
  324. package/dist/{renderer-CjcrhBB2.mjs → renderer-Dw3K8KT9.mjs} +3 -3
  325. package/dist/{renderer-CjcrhBB2.mjs.map → renderer-Dw3K8KT9.mjs.map} +1 -1
  326. package/dist/{renderer-4P-DCjk2.mjs → renderer-Dwh0jaor.mjs} +4 -4
  327. package/dist/{renderer-4P-DCjk2.mjs.map → renderer-Dwh0jaor.mjs.map} +1 -1
  328. package/dist/renderer-DyCB3Q1d.mjs +5 -0
  329. package/dist/renderer-DyJ-iSv6.mjs +5 -0
  330. package/dist/{renderer-DnT62IDK.mjs → renderer-Dz4muMyE.mjs} +3 -3
  331. package/dist/{renderer-DnT62IDK.mjs.map → renderer-Dz4muMyE.mjs.map} +1 -1
  332. package/dist/renderer-Dzs0jV0G.mjs +5 -0
  333. package/dist/{renderer-B9yv3R1y.mjs → renderer-H4-8sBjl.mjs} +3 -3
  334. package/dist/{renderer-B9yv3R1y.mjs.map → renderer-H4-8sBjl.mjs.map} +1 -1
  335. package/dist/renderer-HIKXw5-Y.mjs +5 -0
  336. package/dist/renderer-Jgt2g8Wp.mjs +5 -0
  337. package/dist/renderer-KnZWmT-M.mjs +5 -0
  338. package/dist/renderer-OMSXddG9.mjs +5 -0
  339. package/dist/renderer-P78xh6OV.mjs +5 -0
  340. package/dist/{renderer-BVtQzjgT.mjs → renderer-PhjHSS97.mjs} +3 -3
  341. package/dist/{renderer-BVtQzjgT.mjs.map → renderer-PhjHSS97.mjs.map} +1 -1
  342. package/dist/{renderer-9gjn790a.mjs → renderer-QQDU1b0Z.mjs} +4 -4
  343. package/dist/{renderer-9gjn790a.mjs.map → renderer-QQDU1b0Z.mjs.map} +1 -1
  344. package/dist/{renderer-BWqQxZNk.mjs → renderer-R5Lg65F8.mjs} +2 -2
  345. package/dist/{renderer-D22g6ION.mjs → renderer-RbMM6Njv.mjs} +4 -4
  346. package/dist/{renderer-D22g6ION.mjs.map → renderer-RbMM6Njv.mjs.map} +1 -1
  347. package/dist/{renderer-92IAZzBU.d.mts → renderer-WTvo3wo9.d.mts} +18 -4
  348. package/dist/renderer-WTvo3wo9.d.mts.map +1 -0
  349. package/dist/renderer-WyaqnVMz.mjs +3 -0
  350. package/dist/{renderer-B9AZ6R1U.mjs → renderer-YBwN9uyj.mjs} +172 -8
  351. package/dist/renderer-YBwN9uyj.mjs.map +1 -0
  352. package/dist/{renderer-CXa6SWXy.mjs → renderer-YFHESw3v.mjs} +4 -4
  353. package/dist/{renderer-CXa6SWXy.mjs.map → renderer-YFHESw3v.mjs.map} +1 -1
  354. package/dist/renderer-gaFP1Kak.mjs +5 -0
  355. package/dist/{renderer-PNIgmWft.mjs → renderer-kFtcuY9J.mjs} +2 -2
  356. package/dist/{renderer-PNIgmWft.mjs.map → renderer-kFtcuY9J.mjs.map} +1 -1
  357. package/dist/renderer-lQ8gH7Zd.mjs +5 -0
  358. package/dist/{renderer-MQPiZQXN.mjs → renderer-oR1LvHeO.mjs} +3 -3
  359. package/dist/{renderer-MQPiZQXN.mjs.map → renderer-oR1LvHeO.mjs.map} +1 -1
  360. package/dist/{renderer-CuwVuVKG.mjs → renderer-tcS585Iy.mjs} +3 -3
  361. package/dist/{renderer-CuwVuVKG.mjs.map → renderer-tcS585Iy.mjs.map} +1 -1
  362. package/dist/{renderer-Datqywo_.mjs → renderer-x1xlZaH_.mjs} +4 -4
  363. package/dist/{renderer-Datqywo_.mjs.map → renderer-x1xlZaH_.mjs.map} +1 -1
  364. package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs → renderers-CP8CFWDs-EZZPEbhW.mjs} +3 -3
  365. package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs.map → renderers-CP8CFWDs-EZZPEbhW.mjs.map} +1 -1
  366. package/dist/signals/index.d.mts +5 -5
  367. package/dist/signals/index.mjs +5 -5
  368. package/dist/{src-WAnxhDYD.mjs → src-r7Suenhp.mjs} +8 -8
  369. package/dist/{src-WAnxhDYD.mjs.map → src-r7Suenhp.mjs.map} +1 -1
  370. package/package.json +58 -58
  371. package/dist/dist-Bf0H4lp1.mjs.map +0 -1
  372. package/dist/dist-DG65RDhc.mjs.map +0 -1
  373. package/dist/index-CZK6CFLy.d.mts.map +0 -1
  374. package/dist/index-tCKz9Tku.d.mts.map +0 -1
  375. package/dist/preview-engine/chunk-I6E3AKLS.mjs +0 -1
  376. package/dist/preview-engine/renderers-2S5ZWL2J.mjs +0 -1
  377. package/dist/preview-engine/renderers-37CN7O4S.mjs +0 -1
  378. package/dist/preview-engine/renderers-3UGG2IMP.mjs +0 -1
  379. package/dist/preview-engine/renderers-7MPBAHYA.mjs +0 -1
  380. package/dist/preview-engine/renderers-AFTYMS3H.mjs +0 -1
  381. package/dist/preview-engine/renderers-AYEWAW7F.mjs +0 -1
  382. package/dist/preview-engine/renderers-BILNWTUC.mjs +0 -228
  383. package/dist/preview-engine/renderers-DUF2CTX6.mjs +0 -1
  384. package/dist/preview-engine/renderers-EIJFIY6L.mjs +0 -1
  385. package/dist/preview-engine/renderers-EOMMSENQ.mjs +0 -1
  386. package/dist/preview-engine/renderers-JXBZPQKP.mjs +0 -1
  387. package/dist/preview-engine/renderers-LD3COS4X.mjs +0 -1
  388. package/dist/preview-engine/renderers-MCTBJEL7.mjs +0 -1
  389. package/dist/preview-engine/renderers-OZGEXW2X.mjs +0 -1
  390. package/dist/preview-engine/renderers-PSEDMUBV.mjs +0 -1
  391. package/dist/preview-engine/renderers-PVUROEGR.mjs +0 -1
  392. package/dist/preview-engine/renderers-QBVVTQV6.mjs +0 -1
  393. package/dist/preview-engine/renderers-R4U2TK6P.mjs +0 -1
  394. package/dist/preview-engine/renderers-RBLNDAO4.mjs +0 -1
  395. package/dist/preview-engine/renderers-RM25AXWZ.mjs +0 -1
  396. package/dist/preview-engine/renderers-RYRFCEYT.mjs +0 -1
  397. package/dist/preview-engine/renderers-SKT7AGGE.mjs +0 -1
  398. package/dist/preview-engine/renderers-SRU6QXLN.mjs +0 -1
  399. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +0 -1
  400. package/dist/preview-engine/renderers-UQHKFGDX.mjs +0 -1
  401. package/dist/preview-engine/renderers-WDV7ENJA.mjs +0 -1
  402. package/dist/preview-engine/renderers-WNBDSSJ3.mjs +0 -1
  403. package/dist/preview-engine/renderers-WTC2RNGU.mjs +0 -1
  404. package/dist/preview-engine/renderers-XVUOO7B6.mjs +0 -1
  405. package/dist/preview-engine/renderers-YHOQUEHD.mjs +0 -1
  406. package/dist/preview-engine/renderers-YPFM5UJO.mjs +0 -1
  407. package/dist/preview-engine/renderers-YW3LBALW.mjs +0 -1
  408. package/dist/renderer-1ymN1FIT.mjs +0 -5
  409. package/dist/renderer-92IAZzBU.d.mts.map +0 -1
  410. package/dist/renderer-B-43EuKb.mjs +0 -5
  411. package/dist/renderer-B-v5ZboU.mjs +0 -5
  412. package/dist/renderer-B9AZ6R1U.mjs.map +0 -1
  413. package/dist/renderer-BBA-iCi-.mjs.map +0 -1
  414. package/dist/renderer-BKF8Sfbg.mjs +0 -3
  415. package/dist/renderer-BTB8ifgH.mjs +0 -5
  416. package/dist/renderer-BYxzR6Hp.mjs +0 -5
  417. package/dist/renderer-BcGhO_Mw.mjs +0 -5
  418. package/dist/renderer-Bk3RgiFg.mjs +0 -5
  419. package/dist/renderer-BvItCxkw.mjs +0 -5
  420. package/dist/renderer-BvcqncI2.mjs +0 -3
  421. package/dist/renderer-CCnfPHqk.mjs +0 -5
  422. package/dist/renderer-CIoWQNaA.mjs +0 -5
  423. package/dist/renderer-CMwQtIIq.mjs +0 -5
  424. package/dist/renderer-CN8kRB90.mjs +0 -6
  425. package/dist/renderer-CPKBDif1.mjs +0 -5
  426. package/dist/renderer-CamsHxEP.mjs +0 -5
  427. package/dist/renderer-CeQormOH.mjs +0 -5
  428. package/dist/renderer-Cex4eMtv.mjs +0 -5
  429. package/dist/renderer-CjyTrNlr.mjs +0 -5
  430. package/dist/renderer-Clv9TO6C.mjs +0 -5
  431. package/dist/renderer-D4LnJk-M.mjs +0 -5
  432. package/dist/renderer-D5OfQ8Ut.mjs +0 -5
  433. package/dist/renderer-DBYssktC.mjs +0 -5
  434. package/dist/renderer-DC-Aj3me.mjs +0 -5
  435. package/dist/renderer-DG97_Aoc.mjs +0 -5
  436. package/dist/renderer-DS4UGjcS.mjs +0 -5
  437. package/dist/renderer-DdG6ibtM.mjs +0 -5
  438. package/dist/renderer-DhZi4f3t.mjs +0 -5
  439. package/dist/renderer-MgLekf6d.mjs +0 -5
  440. package/dist/renderer-Qvs-1lWh.mjs +0 -5
  441. package/dist/renderer-bN7dOErt.mjs +0 -5
  442. package/dist/renderer-jWKVmReU.mjs +0 -5
  443. package/dist/renderer-lk-At57G.mjs +0 -5
  444. package/dist/renderer-qi8Slwfo.mjs +0 -5
  445. package/dist/renderer-qxOH4JH1.mjs +0 -5
  446. package/dist/renderer-t30NpmIl.mjs +0 -5
  447. package/dist/renderer-wKW4HWRx.mjs +0 -5
  448. package/dist/renderer-ydjPm8bp.mjs +0 -5
@@ -1,5 +1,5 @@
1
1
  import "./chunk-D7gtBK74.mjs";
2
- import "./dist-Bf0H4lp1.mjs";
3
- import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-Ddg3dJmu.mjs";
2
+ import "./dist-BuirkW-f.mjs";
3
+ import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-Bag1LFos.mjs";
4
4
 
5
5
  export { RefractionCaustics3DWebGPURenderer, renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { a as resolveFrameNumber, n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
- import { Fn as signalRegistry, K as parseColor } from "./dist-Bf0H4lp1.mjs";
3
- 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-CevnCkZC.mjs";
1
+ import { n as defineRenderer, o as resolveFrameNumber } from "./renderer-BgmO1Dzw.mjs";
2
+ import { In as signalRegistry, q as parseColor } from "./dist-BuirkW-f.mjs";
3
+ 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-BRBIoxMC.mjs";
4
4
 
5
5
  //#region ../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs
6
6
  const RELIGHT_SHADER = `
@@ -448,4 +448,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer
448
448
 
449
449
  //#endregion
450
450
  export { renderers_default as t };
451
- //# sourceMappingURL=renderer-D22g6ION.mjs.map
451
+ //# sourceMappingURL=renderer-RbMM6Njv.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-D22g6ION.mjs","names":[],"sources":["../../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RELIGHT_SHADER = `\nstruct RelightUniforms {\n // vec4 0\n lightType : f32, // 0=Point, 1=Spot, 2=Directional, 3=Rim\n intensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 1\n lightPosZ : f32,\n lightRadius : f32,\n spotConeAngle : f32, // in radians\n specularRoughness : f32,\n\n // vec4 2\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n volumetricDensity : f32,\n\n // vec4 3\n depthScale : f32,\n depthInvert : f32,\n hasDepthMap : f32,\n hasNormalMap : f32,\n\n // vec4 4: signal flags\n hasSigIntensity : f32,\n hasSigPosX : f32,\n hasSigPosY : f32,\n hasSigPosZ : f32,\n\n // vec4 5: signal flags\n hasSigRadius : f32,\n hasSigRoughness : f32,\n hasSigSpecular : f32,\n hasSigVolumetric : f32,\n\n // vec4 6 & 7: colors\n lightColor : vec4<f32>,\n ambientColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RelightUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var intensitySigTex : texture_2d<f32>;\n@group(3) @binding(1) var posXSigTex : texture_2d<f32>;\n@group(3) @binding(2) var posYSigTex : texture_2d<f32>;\n@group(3) @binding(3) var posZSigTex : texture_2d<f32>;\n@group(3) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var specularSigTex : texture_2d<f32>;\n@group(3) @binding(7) var volumetricSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return raw;\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\nfn computeNormal(uv: vec2<f32>, texelSize: vec2<f32>) -> vec3<f32> {\n if (u.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0).rgb;\n return normalize(rawNormal * 2.0 - 1.0);\n }\n let step = texelSize * 2.5;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n let dx = (dR - dL) * u.depthScale * 1.5;\n let dy = (dU - dD) * u.depthScale * 1.5;\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(srcTex, srcSamp, in.uv, 0.0);\n if (albedo.a <= 0.0) {\n return albedo;\n }\n\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = dims.x / dims.y;\n\n // Resolve signals\n var intensity = u.intensity;\n if (u.hasSigIntensity > 0.5) {\n intensity = textureSampleLevel(intensitySigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posX = u.lightPosX;\n if (u.hasSigPosX > 0.5) {\n posX = textureSampleLevel(posXSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posY = u.lightPosY;\n if (u.hasSigPosY > 0.5) {\n posY = textureSampleLevel(posYSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posZ = u.lightPosZ;\n if (u.hasSigPosZ > 0.5) {\n posZ = textureSampleLevel(posZSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var radius = u.lightRadius;\n if (u.hasSigRadius > 0.5) {\n radius = max(0.05, textureSampleLevel(radiusSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var roughness = u.specularRoughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.01, 1.0);\n }\n\n var specularStrength = u.specularStrength;\n if (u.hasSigSpecular > 0.5) {\n specularStrength = max(0.0, textureSampleLevel(specularSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var volumetricDensity = u.volumetricDensity;\n if (u.hasSigVolumetric > 0.5) {\n volumetricDensity = clamp(textureSampleLevel(volumetricSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n // Geometry & Surface Normals\n let depth = sampleSmoothDepth(in.uv, texelSize) * u.depthScale;\n let N = computeNormal(in.uv, texelSize);\n let V = vec3<f32>(0.0, 0.0, 1.0);\n\n // 3D coordinates (Aspect corrected for uniform radius)\n let pSurface = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, - (1.0 - depth) * 0.4);\n let pLight = vec3<f32>((posX - 0.5) * aspect, posY - 0.5, max(0.02, posZ));\n\n let toLight = pLight - pSurface;\n let dist3D = length(toLight);\n var L = normalize(toLight);\n\n // Attenuation\n var att = 1.0 / (1.0 + (dist3D / max(0.05, radius)) * (dist3D / max(0.05, radius)));\n var diffuse = max(dot(N, L), 0.0);\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n var specular = pow(NdotH, specPower) * specularStrength;\n\n let lightMode = u.lightType;\n\n if (lightMode > 0.5 && lightMode < 1.5) {\n // Spot Light\n let spotDir = normalize(vec3<f32>(0.0, 0.0, -1.0));\n let spotAngleCos = dot(-L, spotDir);\n let coneCos = cos(u.spotConeAngle);\n let spotAtt = smoothstep(coneCos, coneCos + 0.15, spotAngleCos);\n\n diffuse = diffuse * spotAtt;\n specular = specular * spotAtt;\n } else if (lightMode > 1.5 && lightMode < 2.5) {\n // Directional Light\n L = normalize(vec3<f32>(posX - 0.5, posY - 0.5, max(0.1, posZ)));\n att = 1.0;\n diffuse = max(dot(N, L), 0.0);\n let dirH = normalize(L + V);\n specular = pow(max(dot(N, dirH), 0.0), specPower) * specularStrength;\n } else if (lightMode > 2.5) {\n // Rim Light\n let rimTerm = 1.0 - max(dot(N, V), 0.0);\n let rim = pow(rimTerm, 2.5) * (0.5 + depth * 0.8) * 1.5;\n diffuse = max(dot(N, L), 0.0) * 0.2 + rim;\n }\n\n // Volumetric Atmospheric Light Scatter / Glow\n let dist2D = length(vec2<f32>((in.uv.x - posX) * aspect, in.uv.y - posY));\n let volGlow = volumetricDensity * (1.0 / (1.0 + (dist2D / (radius * 0.5)) * (dist2D / (radius * 0.5)))) * (1.0 - clamp(depth * 0.3, 0.0, 0.8));\n\n let lightCol = u.lightColor.rgb;\n let ambientCol = u.ambientColor.rgb;\n\n // Natural Relighting Energy Distribution\n let ambientLighting = ambientCol * clamp(u.ambientIntensity, 0.0, 1.5);\n let diffuseLighting = lightCol * (diffuse * att * intensity * 0.6);\n let specularLighting = mix(vec3<f32>(1.0), albedo.rgb, u.metallic) * (specular * att * intensity * 0.35);\n let volLighting = lightCol * (volGlow * intensity * 0.2);\n\n let litRgb = albedo.rgb * (ambientLighting + diffuseLighting) + specularLighting + volLighting;\n\n return vec4<f32>(clamp(litRgb, vec3<f32>(0.0), vec3<f32>(1.0)), albedo.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tdepthTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getRelightResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `relight_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `relight_${format}.wgsl`,\n\t\t\tcode: RELIGHT_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `RelightPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = resolveFrameNumber(signalInput.outputItem.data, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = resolveFrameNumber(op[fieldName], defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = resolveFrameNumber(sd.offset, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst Relight3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Relight3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst normalMedia = op.normalMedia ?? (op.inputs?.normalMap?.connectionValid ? op.inputs.normalMap.outputItem?.data : null);\n\tconst depthMedia = normalMedia ?? op.depthMedia;\n\tlet depthTex;\n\tlet hasDepthMap = false;\n\tconst hasNormalMap = Boolean(normalMedia);\n\tif (depthMedia) {\n\t\t({texture: depthTex} = await drawChildToTexture(args, depthMedia, {\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tvirtualMedia: depthMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height\n\t\t\t},\n\t\t\texclude: [srcTex]\n\t\t}));\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRelightResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : compositionFrame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", 1, 0, 10, compositionFrame, fps);\n\tconst posXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1, compositionFrame, fps);\n\tconst posYInfo = resolveSignalField(op, \"lightPosY\", .5, 0, 1, compositionFrame, fps);\n\tconst posZInfo = resolveSignalField(op, \"lightPosZ\", .3, -2, 2, compositionFrame, fps);\n\tconst radiusInfo = resolveSignalField(op, \"lightRadius\", .8, .05, 5, compositionFrame, fps);\n\tconst spotConeInfo = resolveSignalField(op, \"spotConeAngle\", 45, 5, 90, compositionFrame, fps);\n\tconst roughnessInfo = resolveSignalField(op, \"specularRoughness\", .35, .01, 1, compositionFrame, fps);\n\tconst specularInfo = resolveSignalField(op, \"specularStrength\", .7, 0, 3, compositionFrame, fps);\n\tconst metallicInfo = resolveSignalField(op, \"metallic\", 0, 0, 1, compositionFrame, fps);\n\tconst ambientInfo = resolveSignalField(op, \"ambientIntensity\", .4, 0, 2, compositionFrame, fps);\n\tconst volumetricInfo = resolveSignalField(op, \"volumetricDensity\", .2, 0, 1, compositionFrame, fps);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 10, compositionFrame, fps);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, compositionFrame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIntensityView = getSigTextureView(intensityInfo, \"relight_int_sig\");\n\tconst sigPosXView = getSigTextureView(posXInfo, \"relight_posx_sig\");\n\tconst sigPosYView = getSigTextureView(posYInfo, \"relight_posy_sig\");\n\tconst sigPosZView = getSigTextureView(posZInfo, \"relight_posz_sig\");\n\tconst sigRadiusView = getSigTextureView(radiusInfo, \"relight_rad_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"relight_rough_sig\");\n\tconst sigSpecularView = getSigTextureView(specularInfo, \"relight_spec_sig\");\n\tconst sigVolumetricView = getSigTextureView(volumetricInfo, \"relight_vol_sig\");\n\tconst uniformData = new Float32Array(32);\n\tconst lightColorParsed = parseColor(op.lightColor ?? \"#ffffff\");\n\tconst ambientColorParsed = parseColor(op.ambientColor ?? \"#ffffff\");\n\tuniformData[0] = op.lightType === \"Spot\" ? 1 : op.lightType === \"Directional\" ? 2 : op.lightType === \"Rim\" ? 3 : 0;\n\tuniformData[1] = intensityInfo.value;\n\tuniformData[2] = posXInfo.value;\n\tuniformData[3] = posYInfo.value;\n\tuniformData[4] = posZInfo.value;\n\tuniformData[5] = radiusInfo.value;\n\tuniformData[6] = spotConeInfo.value * Math.PI / 180;\n\tuniformData[7] = roughnessInfo.value;\n\tuniformData[8] = specularInfo.value;\n\tuniformData[9] = metallicInfo.value;\n\tuniformData[10] = ambientInfo.value;\n\tuniformData[11] = volumetricInfo.value;\n\tuniformData[12] = depthScaleInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = hasDepthMap || hasNormalMap ? 1 : 0;\n\tuniformData[15] = hasNormalMap ? 1 : 0;\n\tuniformData[16] = intensityInfo.hasSignal ? 1 : 0;\n\tuniformData[17] = posXInfo.hasSignal ? 1 : 0;\n\tuniformData[18] = posYInfo.hasSignal ? 1 : 0;\n\tuniformData[19] = posZInfo.hasSignal ? 1 : 0;\n\tuniformData[20] = radiusInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = specularInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = volumetricInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = lightColorParsed.r;\n\tuniformData[25] = lightColorParsed.g;\n\tuniformData[26] = lightColorParsed.b;\n\tuniformData[27] = lightColorParsed.a;\n\tuniformData[28] = ambientColorParsed.r;\n\tuniformData[29] = ambientColorParsed.g;\n\tuniformData[30] = ambientColorParsed.b;\n\tuniformData[31] = ambientColorParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: sigIntensityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigPosXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sigPosYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sigPosZView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: sigRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sigRoughnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sigSpecularView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: sigVolumetricView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CXgKN5yn.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-RbMM6Njv.mjs","names":[],"sources":["../../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RELIGHT_SHADER = `\nstruct RelightUniforms {\n // vec4 0\n lightType : f32, // 0=Point, 1=Spot, 2=Directional, 3=Rim\n intensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 1\n lightPosZ : f32,\n lightRadius : f32,\n spotConeAngle : f32, // in radians\n specularRoughness : f32,\n\n // vec4 2\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n volumetricDensity : f32,\n\n // vec4 3\n depthScale : f32,\n depthInvert : f32,\n hasDepthMap : f32,\n hasNormalMap : f32,\n\n // vec4 4: signal flags\n hasSigIntensity : f32,\n hasSigPosX : f32,\n hasSigPosY : f32,\n hasSigPosZ : f32,\n\n // vec4 5: signal flags\n hasSigRadius : f32,\n hasSigRoughness : f32,\n hasSigSpecular : f32,\n hasSigVolumetric : f32,\n\n // vec4 6 & 7: colors\n lightColor : vec4<f32>,\n ambientColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RelightUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var intensitySigTex : texture_2d<f32>;\n@group(3) @binding(1) var posXSigTex : texture_2d<f32>;\n@group(3) @binding(2) var posYSigTex : texture_2d<f32>;\n@group(3) @binding(3) var posZSigTex : texture_2d<f32>;\n@group(3) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var specularSigTex : texture_2d<f32>;\n@group(3) @binding(7) var volumetricSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return raw;\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\nfn computeNormal(uv: vec2<f32>, texelSize: vec2<f32>) -> vec3<f32> {\n if (u.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0).rgb;\n return normalize(rawNormal * 2.0 - 1.0);\n }\n let step = texelSize * 2.5;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n let dx = (dR - dL) * u.depthScale * 1.5;\n let dy = (dU - dD) * u.depthScale * 1.5;\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(srcTex, srcSamp, in.uv, 0.0);\n if (albedo.a <= 0.0) {\n return albedo;\n }\n\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = dims.x / dims.y;\n\n // Resolve signals\n var intensity = u.intensity;\n if (u.hasSigIntensity > 0.5) {\n intensity = textureSampleLevel(intensitySigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posX = u.lightPosX;\n if (u.hasSigPosX > 0.5) {\n posX = textureSampleLevel(posXSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posY = u.lightPosY;\n if (u.hasSigPosY > 0.5) {\n posY = textureSampleLevel(posYSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posZ = u.lightPosZ;\n if (u.hasSigPosZ > 0.5) {\n posZ = textureSampleLevel(posZSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var radius = u.lightRadius;\n if (u.hasSigRadius > 0.5) {\n radius = max(0.05, textureSampleLevel(radiusSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var roughness = u.specularRoughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.01, 1.0);\n }\n\n var specularStrength = u.specularStrength;\n if (u.hasSigSpecular > 0.5) {\n specularStrength = max(0.0, textureSampleLevel(specularSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var volumetricDensity = u.volumetricDensity;\n if (u.hasSigVolumetric > 0.5) {\n volumetricDensity = clamp(textureSampleLevel(volumetricSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n // Geometry & Surface Normals\n let depth = sampleSmoothDepth(in.uv, texelSize) * u.depthScale;\n let N = computeNormal(in.uv, texelSize);\n let V = vec3<f32>(0.0, 0.0, 1.0);\n\n // 3D coordinates (Aspect corrected for uniform radius)\n let pSurface = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, - (1.0 - depth) * 0.4);\n let pLight = vec3<f32>((posX - 0.5) * aspect, posY - 0.5, max(0.02, posZ));\n\n let toLight = pLight - pSurface;\n let dist3D = length(toLight);\n var L = normalize(toLight);\n\n // Attenuation\n var att = 1.0 / (1.0 + (dist3D / max(0.05, radius)) * (dist3D / max(0.05, radius)));\n var diffuse = max(dot(N, L), 0.0);\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n var specular = pow(NdotH, specPower) * specularStrength;\n\n let lightMode = u.lightType;\n\n if (lightMode > 0.5 && lightMode < 1.5) {\n // Spot Light\n let spotDir = normalize(vec3<f32>(0.0, 0.0, -1.0));\n let spotAngleCos = dot(-L, spotDir);\n let coneCos = cos(u.spotConeAngle);\n let spotAtt = smoothstep(coneCos, coneCos + 0.15, spotAngleCos);\n\n diffuse = diffuse * spotAtt;\n specular = specular * spotAtt;\n } else if (lightMode > 1.5 && lightMode < 2.5) {\n // Directional Light\n L = normalize(vec3<f32>(posX - 0.5, posY - 0.5, max(0.1, posZ)));\n att = 1.0;\n diffuse = max(dot(N, L), 0.0);\n let dirH = normalize(L + V);\n specular = pow(max(dot(N, dirH), 0.0), specPower) * specularStrength;\n } else if (lightMode > 2.5) {\n // Rim Light\n let rimTerm = 1.0 - max(dot(N, V), 0.0);\n let rim = pow(rimTerm, 2.5) * (0.5 + depth * 0.8) * 1.5;\n diffuse = max(dot(N, L), 0.0) * 0.2 + rim;\n }\n\n // Volumetric Atmospheric Light Scatter / Glow\n let dist2D = length(vec2<f32>((in.uv.x - posX) * aspect, in.uv.y - posY));\n let volGlow = volumetricDensity * (1.0 / (1.0 + (dist2D / (radius * 0.5)) * (dist2D / (radius * 0.5)))) * (1.0 - clamp(depth * 0.3, 0.0, 0.8));\n\n let lightCol = u.lightColor.rgb;\n let ambientCol = u.ambientColor.rgb;\n\n // Natural Relighting Energy Distribution\n let ambientLighting = ambientCol * clamp(u.ambientIntensity, 0.0, 1.5);\n let diffuseLighting = lightCol * (diffuse * att * intensity * 0.6);\n let specularLighting = mix(vec3<f32>(1.0), albedo.rgb, u.metallic) * (specular * att * intensity * 0.35);\n let volLighting = lightCol * (volGlow * intensity * 0.2);\n\n let litRgb = albedo.rgb * (ambientLighting + diffuseLighting) + specularLighting + volLighting;\n\n return vec4<f32>(clamp(litRgb, vec3<f32>(0.0), vec3<f32>(1.0)), albedo.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tdepthTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getRelightResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `relight_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `relight_${format}.wgsl`,\n\t\t\tcode: RELIGHT_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `RelightPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = resolveFrameNumber(signalInput.outputItem.data, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = resolveFrameNumber(op[fieldName], defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = resolveFrameNumber(sd.offset, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst Relight3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Relight3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst normalMedia = op.normalMedia ?? (op.inputs?.normalMap?.connectionValid ? op.inputs.normalMap.outputItem?.data : null);\n\tconst depthMedia = normalMedia ?? op.depthMedia;\n\tlet depthTex;\n\tlet hasDepthMap = false;\n\tconst hasNormalMap = Boolean(normalMedia);\n\tif (depthMedia) {\n\t\t({texture: depthTex} = await drawChildToTexture(args, depthMedia, {\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tvirtualMedia: depthMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height\n\t\t\t},\n\t\t\texclude: [srcTex]\n\t\t}));\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRelightResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : compositionFrame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", 1, 0, 10, compositionFrame, fps);\n\tconst posXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1, compositionFrame, fps);\n\tconst posYInfo = resolveSignalField(op, \"lightPosY\", .5, 0, 1, compositionFrame, fps);\n\tconst posZInfo = resolveSignalField(op, \"lightPosZ\", .3, -2, 2, compositionFrame, fps);\n\tconst radiusInfo = resolveSignalField(op, \"lightRadius\", .8, .05, 5, compositionFrame, fps);\n\tconst spotConeInfo = resolveSignalField(op, \"spotConeAngle\", 45, 5, 90, compositionFrame, fps);\n\tconst roughnessInfo = resolveSignalField(op, \"specularRoughness\", .35, .01, 1, compositionFrame, fps);\n\tconst specularInfo = resolveSignalField(op, \"specularStrength\", .7, 0, 3, compositionFrame, fps);\n\tconst metallicInfo = resolveSignalField(op, \"metallic\", 0, 0, 1, compositionFrame, fps);\n\tconst ambientInfo = resolveSignalField(op, \"ambientIntensity\", .4, 0, 2, compositionFrame, fps);\n\tconst volumetricInfo = resolveSignalField(op, \"volumetricDensity\", .2, 0, 1, compositionFrame, fps);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 10, compositionFrame, fps);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, compositionFrame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIntensityView = getSigTextureView(intensityInfo, \"relight_int_sig\");\n\tconst sigPosXView = getSigTextureView(posXInfo, \"relight_posx_sig\");\n\tconst sigPosYView = getSigTextureView(posYInfo, \"relight_posy_sig\");\n\tconst sigPosZView = getSigTextureView(posZInfo, \"relight_posz_sig\");\n\tconst sigRadiusView = getSigTextureView(radiusInfo, \"relight_rad_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"relight_rough_sig\");\n\tconst sigSpecularView = getSigTextureView(specularInfo, \"relight_spec_sig\");\n\tconst sigVolumetricView = getSigTextureView(volumetricInfo, \"relight_vol_sig\");\n\tconst uniformData = new Float32Array(32);\n\tconst lightColorParsed = parseColor(op.lightColor ?? \"#ffffff\");\n\tconst ambientColorParsed = parseColor(op.ambientColor ?? \"#ffffff\");\n\tuniformData[0] = op.lightType === \"Spot\" ? 1 : op.lightType === \"Directional\" ? 2 : op.lightType === \"Rim\" ? 3 : 0;\n\tuniformData[1] = intensityInfo.value;\n\tuniformData[2] = posXInfo.value;\n\tuniformData[3] = posYInfo.value;\n\tuniformData[4] = posZInfo.value;\n\tuniformData[5] = radiusInfo.value;\n\tuniformData[6] = spotConeInfo.value * Math.PI / 180;\n\tuniformData[7] = roughnessInfo.value;\n\tuniformData[8] = specularInfo.value;\n\tuniformData[9] = metallicInfo.value;\n\tuniformData[10] = ambientInfo.value;\n\tuniformData[11] = volumetricInfo.value;\n\tuniformData[12] = depthScaleInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = hasDepthMap || hasNormalMap ? 1 : 0;\n\tuniformData[15] = hasNormalMap ? 1 : 0;\n\tuniformData[16] = intensityInfo.hasSignal ? 1 : 0;\n\tuniformData[17] = posXInfo.hasSignal ? 1 : 0;\n\tuniformData[18] = posYInfo.hasSignal ? 1 : 0;\n\tuniformData[19] = posZInfo.hasSignal ? 1 : 0;\n\tuniformData[20] = radiusInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = specularInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = volumetricInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = lightColorParsed.r;\n\tuniformData[25] = lightColorParsed.g;\n\tuniformData[26] = lightColorParsed.b;\n\tuniformData[27] = lightColorParsed.a;\n\tuniformData[28] = ambientColorParsed.r;\n\tuniformData[29] = ambientColorParsed.g;\n\tuniformData[30] = ambientColorParsed.b;\n\tuniformData[31] = ambientColorParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: sigIntensityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigPosXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sigPosYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sigPosZView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: sigRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sigRoughnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sigSpecularView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: sigVolumetricView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CXgKN5yn.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { Ea as OutputItem, Yi as MediaOperation, ko as VirtualMediaData, x as RenderContextValue } from "./index-CZK6CFLy.mjs";
1
+ import { Ea as OutputItem, Yi as MediaOperation, ko as VirtualMediaData, x as RenderContextValue } from "./index-ocZc12ZS.mjs";
2
2
  import { z } from "zod";
3
3
 
4
- //#region ../node-sdk/dist/index-Dgzr2Wnb.d.mts
4
+ //#region ../node-sdk/dist/index-J6jlqDT9.d.mts
5
5
 
6
6
  //#endregion
7
7
  //#region renderer/index.d.ts
@@ -37,7 +37,21 @@ interface NodeRenderProps<TOperation extends MediaOperation = MediaOperation> {
37
37
  signals?: Record<string, unknown>;
38
38
  renderChild?: (child: VirtualMediaData, overrides?: Partial<NodeRenderProps>) => unknown;
39
39
  }
40
- type WebGPUNodeRenderer<TOperation extends MediaOperation = MediaOperation> = (args: {
40
+ /**
41
+ * How far an effect draws past the pixels it is given, px, for one of its
42
+ * operations; `null` when it isn't local (it reads or writes pixels anywhere,
43
+ * like a mirror or a portal) or can't tell (a size driven by a signal).
44
+ */
45
+ type EffectReach = (operation: Record<string, unknown>) => number | null;
46
+ /**
47
+ * A node's GPU renderer. An effect renderer may carry `reach`: a compositor
48
+ * then runs it over the layer's own region plus that margin instead of the
49
+ * whole target. Without it the effect always gets the whole target.
50
+ */
51
+ type WebGPUNodeRenderer<TOperation extends MediaOperation = MediaOperation> = WebGPUNodeRenderFn<TOperation> & {
52
+ reach?: EffectReach;
53
+ };
54
+ type WebGPUNodeRenderFn<TOperation extends MediaOperation> = (args: {
41
55
  ctx: RenderContextValue;
42
56
  encoder: GPUCommandEncoder$1;
43
57
  pass: GPURenderPassEncoder$1;
@@ -79,4 +93,4 @@ declare const SignalResultSchema: z.ZodObject<{
79
93
  }, z.core.$strip>;
80
94
  //#endregion
81
95
  export { NodeRendererPlugin as n, WebGPUNodeRenderer as r, SignalResultSchema as t };
82
- //# sourceMappingURL=renderer-92IAZzBU.d.mts.map
96
+ //# sourceMappingURL=renderer-WTvo3wo9.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-WTvo3wo9.d.mts","names":["MediaOperation","NodeInputConnection","NodeOperation","SignalData","VirtualMediaData","isSignal","resolveBoolean","resolveNumber","resolveParam","resolveString","RenderContextValue","WebGPUNodeRendererArgs","WebGPUNodeRenderer","Parameters","FULLSCREEN_QUAD_WGSL","PREMULTIPLIED_BLEND","GPUBlendState","STRAIGHT_ALPHA_BLEND","FragmentBinding","GPUBindGroupLayoutEntry","Omit","fragmentBindGroupLayout","GPUDevice","GPUBindGroupLayout","texturesLayout","perDevice","T","FullscreenPipelineOptions","GPUShaderModule","GPUPipelineLayout","GPUTextureFormat","createFullscreenPipeline","GPURenderPipeline","DrawChildToTextureOptions","NodeRenderProps","Partial","GPUTexture","drawChildToTexture","GPUTextureView","Promise","beginTargetPass","GPURenderPassEncoder","drawTextureToTarget","signalTiming","NodeSignalData","SignalTextureContext","signalTextureView","drawFullscreenPass","GPUCommandEncoder","GPUBindGroup","Point2D","solveHomography","GPUCommandEncoder$1","globalThis","GPURenderPassEncoder$1","GPUTextureView$1","GPUTexture$1","TOperation","Record","EffectReach","WebGPUNodeRenderFn","AudioProcessorContext","AudioProcessor","Float32Array","resolveFrameNumber","unwrapFrameParam","NodeOperationInputs","HandleParam","SD","resolveHandleParam","resolveSignalField","isHandleConnected","NodeRendererPlugin","defineRenderer","Readonly","WebGPURegistry","webgpuRegistry","registerWebGPURenderer","effectReach","TextureSourceOp","AudioProcessorRegistry","audioRegistry","$","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","U","V","W","X","Y","Z","_","a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","resolveString","C","registerWebGPURenderer","D","resolveNumber","E","resolveHandleParam","M","webgpuRegistry","N","Point2D","O","resolveParam","P","solveHomography","S","isSignal","T","resolveFrameNumber","U","WebGPUNodeRendererArgs","_","WebGPURegistry","a","GPURenderPassEncoder","b","effectReach","c","HandleParam","d","NodeOperation","f","NodeOperationInputs","g","WebGPUNodeRenderer","h","TextureSourceOp","i","GPUCommandEncoder","j","unwrapFrameParam","k","resolveSignalField","l","MediaOperation","m","NodeRendererPlugin","n","AudioProcessorContext","o","GPUTexture","p","NodeRenderProps","r","EffectReach","s","GPUTextureView","t","AudioProcessor","u","NodeInputConnection","v","audioRegistry","w","resolveBoolean","x","isHandleConnected","y","defineRenderer","_framefields_core0","FileDataSchema","MultiOutputGenericSchema","SingleOutputGenericSchema","VirtualMediaDataSchema","createOutputItemSchema","z","FieldMeta","FieldOptions","ConfigBuilder","TKey","TType","TShape","ZodRawShape","Record","ZodTypeAny","core","$strip","ZodObject","configBuilder","COMPOSITE_OPERATIONS","GlobalCompositeOperation","ZodEnum","ColorSchema","ZodString","ZodOptional","PercentageSchema","ZodNumber","DimensionSchema","AnimationSchema","ZodArray","StrokeSchema","ZodDefault","ImageResultSchema","ZodLiteral","OutputItem","$ZodTypeInternals","ZodType","ZodTuple","ImageResult","infer","VideoResultSchema","VideoResult","AudioResultSchema","AudioResult","TextResultSchema","TextResult","NumberResultSchema","NumberResult","SignalResultSchema","SignalResult","OperationInputsSchema","ZodBoolean","ZodUnknown","ZodNullable","ZodRecord"],"sources":["../../node-sdk/dist/index-J6jlqDT9.d.mts","../../node-sdk/dist/index.d.mts"],"sourcesContent":["import { MediaOperation, NodeInputConnection, NodeOperation, SignalData, VirtualMediaData, isSignal, resolveBoolean, resolveNumber, resolveParam, resolveString } from \"@framefields/core\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region renderer/gpu.d.ts\n/** The argument object every WebGPU node renderer receives. */\ntype WebGPUNodeRendererArgs = Parameters<WebGPUNodeRenderer>[0];\n/**\n * Full-screen quad vertex stage: a 4-vertex triangle strip (draw(4)) that\n * hands `in.uv` (0,0 top-left → 1,1 bottom-right) to an `fs` reading `VSOut`.\n */\ndeclare const FULLSCREEN_QUAD_WGSL = \"\\nstruct VSOut {\\n @builtin(position) pos : vec4<f32>,\\n @location(0) uv : vec2<f32>,\\n};\\n\\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\\n var pos = array<vec2<f32>, 4>(\\n vec2<f32>(-1.0, 1.0),\\n vec2<f32>(1.0, 1.0),\\n vec2<f32>(-1.0, -1.0),\\n vec2<f32>(1.0, -1.0)\\n );\\n var uv = array<vec2<f32>, 4>(\\n vec2<f32>(0.0, 0.0),\\n vec2<f32>(1.0, 0.0),\\n vec2<f32>(0.0, 1.0),\\n vec2<f32>(1.0, 1.0)\\n );\\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\\n}\\n\";\n/** Premultiplied-alpha \"over\" blending. */\ndeclare const PREMULTIPLIED_BLEND: GPUBlendState;\n/** Straight-alpha color over a premultiplied-alpha accumulation. */\ndeclare const STRAIGHT_ALPHA_BLEND: GPUBlendState;\n/**\n * One bind-group entry, visible to the fragment stage unless it says\n * otherwise: `\"uniform\"` buffer, `\"texture\"` (filterable float 2D) or\n * `\"sampler\"` (filtering), or any other entry minus its binding index.\n */\ntype FragmentBinding = \"uniform\" | \"texture\" | \"sampler\" | Omit<GPUBindGroupLayoutEntry, \"binding\" | \"visibility\"> | Omit<GPUBindGroupLayoutEntry, \"binding\">;\n/** A bind group layout whose entries are bound at 0, 1, 2… in order. */\ndeclare function fragmentBindGroupLayout(device: GPUDevice, bindings: FragmentBinding[], label?: string): GPUBindGroupLayout;\n/** `count` float textures followed by one filtering sampler. */\ndeclare function texturesLayout(device: GPUDevice, count: number): GPUBindGroupLayout;\n/** Memoizes `create` per GPUDevice (resources can't cross devices). */\ndeclare function perDevice<T>(create: (device: GPUDevice) => T): (device: GPUDevice) => T;\ninterface FullscreenPipelineOptions {\n label?: string;\n module: GPUShaderModule;\n layouts: GPUBindGroupLayout[] | GPUPipelineLayout;\n format: GPUTextureFormat;\n blend?: GPUBlendState;\n /** Defaults to \"vs\". */\n vertexEntryPoint?: string;\n /** Defaults to \"fs\". */\n fragmentEntryPoint?: string;\n}\n/** A triangle-strip pipeline drawing one full-screen quad (`draw(4)`). */\ndeclare function createFullscreenPipeline(device: GPUDevice, options: FullscreenPipelineOptions): GPURenderPipeline;\ninterface DrawChildToTextureOptions {\n /** Defaults to the target's size. */\n width?: number;\n height?: number;\n /** Props for the child; defaults to the node's props with the child as media. */\n props?: Partial<NodeRenderProps>;\n /** Textures still in use that the temporary texture must not alias. */\n exclude?: GPUTexture[];\n}\n/**\n * Renders `child` into a cleared temporary texture with an identity\n * transform and a full-size scissor, and returns that texture.\n */\ndeclare function drawChildToTexture(args: WebGPUNodeRendererArgs, child: VirtualMediaData, options?: DrawChildToTextureOptions): Promise<{\n texture: GPUTexture;\n view: GPUTextureView;\n}>;\n/**\n * Opens a \"load\" pass on the node's target and makes it the node's current\n * pass (the caller hands it back to the compositor).\n */\ndeclare function beginTargetPass(args: WebGPUNodeRendererArgs, width?: number, height?: number): GPURenderPassEncoder;\n/** Draws `texture` over the whole target at `opacity` (the node's output). */\ndeclare function drawTextureToTarget(args: WebGPUNodeRendererArgs, texture: GPUTexture, opacity?: number): void;\n/** Clock a signal texture is evaluated at, in seconds. */\ndeclare function signalTiming(props: NodeRenderProps, frame: number, fps: number, fallbackDurationSeconds?: number): {\n elapsedSeconds: number;\n durationSeconds: number;\n};\ntype NodeSignalData = SignalData & {\n nodeId?: string;\n};\ninterface SignalTextureContext {\n args: WebGPUNodeRendererArgs;\n width: number;\n height: number;\n frame: number;\n fps: number;\n elapsedSeconds: number;\n durationSeconds: number;\n}\n/**\n * The texture a bound parameter samples: its own GPU binding, the signal's\n * texture (cached under `sd.nodeId`, else `fallbackId`), or a 1×1 dummy.\n */\ndeclare function signalTextureView(sc: SignalTextureContext, param: {\n hasStaticSig: boolean;\n sd: NodeSignalData | null;\n gpuTextureView?: GPUTextureView;\n}, fallbackId: string): GPUTextureView;\n/** Clears `target` to transparent and draws one full-screen quad into it. */\ndeclare function drawFullscreenPass(encoder: GPUCommandEncoder, target: GPUTextureView, pipeline: GPURenderPipeline, bindGroups: GPUBindGroup[]): void;\n//#endregion\n//#region renderer/homography.d.ts\ninterface Point2D {\n x: number;\n y: number;\n}\n/**\n * Computes an 8-parameter 3x3 homography matrix mapping destination coordinates (quad)\n * to normalized source coordinates (unit square [0, 1]^2).\n *\n * The homography H maps destination (x, y) to source (u, v):\n * u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n * v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n *\n * Resulting array: [h00, h01, h02, h10, h11, h12, h20, h21, 1.0]\n */\ndeclare function solveHomography(dstPoints: Point2D[], srcPoints?: Point2D[]): number[];\n//#endregion\n//#region renderer/index.d.ts\ntype GPUCommandEncoder$1 = globalThis.GPUCommandEncoder;\ntype GPURenderPassEncoder$1 = globalThis.GPURenderPassEncoder;\ntype GPUTextureView$1 = globalThis.GPUTextureView;\ntype GPUTexture$1 = globalThis.GPUTexture;\ninterface NodeRenderProps<TOperation extends MediaOperation = MediaOperation> {\n renderId: string;\n virtualMedia: VirtualMediaData<TOperation>;\n volume?: number;\n playbackRateOverride?: number;\n trimStartOverride?: number;\n trimEndOverride?: number;\n containerWidth: number;\n containerHeight: number;\n opacity?: number;\n frame?: number;\n compositionFrame?: number;\n fps?: number;\n elapsedMs?: number;\n durationMs?: number;\n timestampSec?: number;\n renderingContext?: \"visual\" | \"audio\";\n inheritedSeekOffset?: number;\n inheritedClockOffset?: number;\n isHeadless?: boolean;\n forceWait?: boolean;\n isVideoMode?: boolean;\n isPlaying?: boolean;\n excludeTextures?: GPUTexture$1[];\n /** Signal values that override the node's own (text animators read them). */\n signals?: Record<string, unknown>;\n renderChild?: (child: VirtualMediaData, overrides?: Partial<NodeRenderProps>) => unknown;\n}\n/**\n * How far an effect draws past the pixels it is given, px, for one of its\n * operations; `null` when it isn't local (it reads or writes pixels anywhere,\n * like a mirror or a portal) or can't tell (a size driven by a signal).\n */\ntype EffectReach = (operation: Record<string, unknown>) => number | null;\n/**\n * A node's GPU renderer. An effect renderer may carry `reach`: a compositor\n * then runs it over the layer's own region plus that margin instead of the\n * whole target. Without it the effect always gets the whole target.\n */\ntype WebGPUNodeRenderer<TOperation extends MediaOperation = MediaOperation> = WebGPUNodeRenderFn<TOperation> & {\n reach?: EffectReach;\n};\ntype WebGPUNodeRenderFn<TOperation extends MediaOperation> = (args: {\n ctx: RenderContextValue;\n encoder: GPUCommandEncoder$1;\n pass: GPURenderPassEncoder$1;\n targetView: GPUTextureView$1;\n targetTexture: GPUTexture$1;\n targetWidth: number;\n targetHeight: number;\n props: NodeRenderProps<TOperation>;\n drawChild: (child: VirtualMediaData, overrides?: Partial<NodeRenderProps>, targetViewOverride?: GPUTextureView$1, targetTextureOverride?: GPUTexture$1, targetWidthOverride?: number, targetHeightOverride?: number) => Promise<void>;\n}) => Promise<void> | void;\ninterface AudioProcessorContext {\n device?: GPUDevice;\n frame?: number;\n compositionFrame?: number;\n fps?: number;\n elapsedMs?: number;\n durationMs?: number;\n renderId?: string;\n}\ntype AudioProcessor<TOperation extends MediaOperation = MediaOperation> = (channels: Float32Array[], sampleRate: number, virtualMedia: VirtualMediaData<TOperation>, ctx?: AudioProcessorContext) => void | Promise<void>;\n/**\n * A numeric node parameter at `frame`: a number, a signal-like `get(ctx)` or\n * `{ value }`, a `(ctx) => number` function, or anything `Number()` accepts;\n * `fallback` when none of those yields a finite number.\n */\ndeclare function resolveFrameNumber(val: unknown, fallback: number, frame: number, fps: number): number;\n/**\n * A static node parameter at `frame`: calls `get(ctx)` / `(frame, fps)`\n * functions and reads `{ value }` wrappers, keeping a signal's GPU texture\n * binding when it has one. Anything else is returned as-is.\n */\ndeclare function unwrapFrameParam(raw: unknown, frame: number, fps: number): {\n value: unknown;\n gpuTextureView?: GPUTextureView$1;\n};\n/** The `inputs` map node operations carry: one entry per connected handle. */\ntype NodeOperationInputs = Record<string, {\n connectionValid: boolean;\n outputItem: {\n type: string;\n data: unknown;\n } | null;\n}>;\ninterface HandleParam<SD> {\n val: number;\n /** The value comes from a signal (`sd`) sampled on the GPU. */\n hasStaticSig: boolean;\n sd: SD | null;\n handleId: string | null | undefined;\n}\n/**\n * A numeric parameter fed through `handleId`: a connected Number (clamped), a\n * connected Signal (sampled on the GPU, `val` stays `fallbackVal`), or else\n * `fallbackVal` clamped to [clampMin, clampMax].\n */\ndeclare function resolveHandleParam<SD>(inputs: NodeOperationInputs | undefined, handleId: string | null | undefined, fallbackVal: number, clampMin: number, clampMax: number): HandleParam<SD>;\n/**\n * A numeric field `fieldName` of a node operation, fed through its\n * `${fieldName}HandleId` input: a connected Signal/Numeric (`sd`, sampled on\n * the GPU; `value` is its offset), a connected Number, or the operation's own\n * value — each clamped to [minVal, maxVal].\n */\ndeclare function resolveSignalField<SD>(op: {\n inputs?: NodeOperationInputs;\n}, fieldName: string, defaultValue: number, minVal?: number, maxVal?: number): {\n hasSignal: boolean;\n sd: SD | null;\n value: number;\n};\n/**\n * Whether the handle whose id is stored at `op[handleIdKey]` has a valid\n * Signal or Number connection.\n */\ndeclare function isHandleConnected(op: Record<string, unknown>, handleIdKey: string): boolean;\ninterface NodeRendererPlugin {\n WebGPURenderer?: WebGPUNodeRenderer;\n audioProcessor?: AudioProcessor;\n}\ndeclare function defineRenderer(plugin: NodeRendererPlugin): Readonly<NodeRendererPlugin>;\ndeclare class WebGPURegistry {\n private renderers;\n register(op: string, renderer: WebGPUNodeRenderer): void;\n get(op: string): WebGPUNodeRenderer | undefined;\n has(op: string): boolean;\n}\ndeclare const webgpuRegistry: WebGPURegistry;\ndeclare function registerWebGPURenderer(op: string, renderer: WebGPUNodeRenderer): void;\n/**\n * How far an operation's effect draws past its pixels, from its registered\n * renderer; `null` when unknown: no renderer, no `reach`, or no answer.\n */\ndeclare function effectReach(operation: Record<string, unknown>): number | null;\ninterface TextureSourceOp {\n op: \"TextureSource\";\n sourceTexture: GPUTexture$1;\n opacity?: number;\n dataType?: \"Image\";\n}\ndeclare class AudioProcessorRegistry {\n private processors;\n register(opType: string, processor: AudioProcessor): void;\n get(opType: string): AudioProcessor | null;\n}\ndeclare const audioRegistry: AudioProcessorRegistry;\n//#endregion\nexport { texturesLayout as $, resolveString as A, PREMULTIPLIED_BLEND as B, registerWebGPURenderer as C, resolveNumber as D, resolveHandleParam as E, DrawChildToTextureOptions as F, createFullscreenPipeline as G, SignalTextureContext as H, FULLSCREEN_QUAD_WGSL as I, drawTextureToTarget as J, drawChildToTexture as K, FragmentBinding as L, webgpuRegistry as M, Point2D as N, resolveParam as O, solveHomography as P, signalTiming as Q, FullscreenPipelineOptions as R, isSignal as S, resolveFrameNumber as T, WebGPUNodeRendererArgs as U, STRAIGHT_ALPHA_BLEND as V, beginTargetPass as W, perDevice as X, fragmentBindGroupLayout as Y, signalTextureView as Z, WebGPURegistry as _, GPURenderPassEncoder$1 as a, effectReach as b, HandleParam as c, NodeOperation as d, NodeOperationInputs as f, WebGPUNodeRenderer as g, TextureSourceOp as h, GPUCommandEncoder$1 as i, unwrapFrameParam as j, resolveSignalField as k, MediaOperation as l, NodeRendererPlugin as m, AudioProcessorContext as n, GPUTexture$1 as o, NodeRenderProps as p, drawFullscreenPass as q, EffectReach as r, GPUTextureView$1 as s, AudioProcessor as t, NodeInputConnection as u, audioRegistry as v, resolveBoolean as w, isHandleConnected as x, defineRenderer as y, NodeSignalData as z };\n//# sourceMappingURL=index-J6jlqDT9.d.mts.map","import { A as resolveString, C as registerWebGPURenderer, D as resolveNumber, E as resolveHandleParam, M as webgpuRegistry, N as Point2D, O as resolveParam, P as solveHomography, S as isSignal, T as resolveFrameNumber, U as WebGPUNodeRendererArgs, _ as WebGPURegistry, a as GPURenderPassEncoder, b as effectReach, c as HandleParam, d as NodeOperation, f as NodeOperationInputs, g as WebGPUNodeRenderer, h as TextureSourceOp, i as GPUCommandEncoder, j as unwrapFrameParam, k as resolveSignalField, l as MediaOperation, m as NodeRendererPlugin, n as AudioProcessorContext, o as GPUTexture, p as NodeRenderProps, r as EffectReach, s as GPUTextureView, t as AudioProcessor, u as NodeInputConnection, v as audioRegistry, w as resolveBoolean, x as isHandleConnected, y as defineRenderer } from \"./index-J6jlqDT9.mjs\";\nimport * as _framefields_core0 from \"@framefields/core\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.d.ts\n\n/**\n * Per-field metadata, attached to the field's zod schema with `.meta()`.\n *\n * It is readable from the schema itself (`z.globalRegistry.get(schema)`) and\n * from `z.toJSONSchema(schema)`, which is what `scripts/generate-effects.mts`\n * uses to emit the authoring classes. Raw `z.object` configs can call\n * `.meta({...})` with these keys directly; `configBuilder().field()` is sugar\n * for the same thing. See `spec/sync-node.md` §5.2.\n */\ninterface FieldMeta {\n label?: string;\n description?: string;\n dataTypes?: string[];\n /** Editor: the node shows an input handle for this field. */\n bindable?: boolean;\n /**\n * Authoring: the prop is typed `EffectProp<T>` (value, signal or frame\n * function). Defaults to `bindable`. Set it explicitly where the two differ.\n */\n signal?: boolean;\n /** Editor wiring only. Excluded from the generated authoring surface. */\n editorOnly?: boolean;\n /** Escape hatch for a value zod cannot type, e.g. a GPU texture handle. */\n tsType?: {\n name: string;\n from: string;\n };\n}\n/** @deprecated Use {@link FieldMeta}. */\ntype FieldOptions = FieldMeta;\ndeclare class ConfigBuilder<TShape extends z.ZodRawShape = Record<string, never>> {\n private shape;\n private options;\n constructor(shape?: TShape, options?: {\n strict?: boolean;\n });\n field<TKey extends string, TType extends z.ZodTypeAny>(key: TKey, schema: TType, options?: FieldMeta): ConfigBuilder<TShape & { [K in TKey]: TType }>;\n build(): {\n schema: z.ZodObject<{ -readonly [P in keyof TShape]: TShape[P] }, z.core.$strip>;\n };\n}\ndeclare function configBuilder(options?: {\n strict?: boolean;\n}): ConfigBuilder<{}>;\n//#endregion\n//#region shared/schemas.d.ts\ndeclare const COMPOSITE_OPERATIONS: readonly [\"source-over\", \"source-in\", \"source-out\", \"source-atop\", \"destination-over\", \"destination-in\", \"destination-out\", \"destination-atop\", \"lighter\", \"copy\", \"xor\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\", \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"];\ndeclare const GlobalCompositeOperation: z.ZodEnum<{\n \"source-over\": \"source-over\";\n \"source-in\": \"source-in\";\n \"source-out\": \"source-out\";\n \"source-atop\": \"source-atop\";\n \"destination-over\": \"destination-over\";\n \"destination-in\": \"destination-in\";\n \"destination-out\": \"destination-out\";\n \"destination-atop\": \"destination-atop\";\n lighter: \"lighter\";\n copy: \"copy\";\n xor: \"xor\";\n multiply: \"multiply\";\n screen: \"screen\";\n overlay: \"overlay\";\n darken: \"darken\";\n lighten: \"lighten\";\n \"color-dodge\": \"color-dodge\";\n \"color-burn\": \"color-burn\";\n \"hard-light\": \"hard-light\";\n \"soft-light\": \"soft-light\";\n difference: \"difference\";\n exclusion: \"exclusion\";\n hue: \"hue\";\n saturation: \"saturation\";\n color: \"color\";\n luminosity: \"luminosity\";\n}>;\ndeclare const ColorSchema: z.ZodOptional<z.ZodString>;\ndeclare const PercentageSchema: z.ZodNumber;\ndeclare const DimensionSchema: z.ZodOptional<z.ZodNumber>;\ndeclare const AnimationSchema: z.ZodObject<{\n animations: z.ZodOptional<z.ZodArray<z.ZodObject<{\n id: z.ZodString;\n type: z.ZodEnum<{\n \"fade-in\": \"fade-in\";\n \"fade-out\": \"fade-out\";\n \"slide-in-left\": \"slide-in-left\";\n \"slide-in-right\": \"slide-in-right\";\n \"slide-in-top\": \"slide-in-top\";\n \"slide-in-bottom\": \"slide-in-bottom\";\n \"zoom-in\": \"zoom-in\";\n \"zoom-out\": \"zoom-out\";\n \"rotate-cw\": \"rotate-cw\";\n \"rotate-ccw\": \"rotate-ccw\";\n bounce: \"bounce\";\n shake: \"shake\";\n }>;\n value: z.ZodNumber;\n }, z.core.$strip>>>;\n}, z.core.$strip>;\ndeclare const StrokeSchema: z.ZodObject<{\n stroke: z.ZodOptional<z.ZodString>;\n strokeWidth: z.ZodOptional<z.ZodNumber>;\n strokeAlign: z.ZodDefault<z.ZodOptional<z.ZodEnum<{\n inside: \"inside\";\n center: \"center\";\n outside: \"outside\";\n }>>>;\n strokeRadius: z.ZodOptional<z.ZodNumber>;\n}, z.core.$strip>;\ndeclare const ImageResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Image\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Image\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype ImageResult = z.infer<typeof ImageResultSchema>;\ndeclare const VideoResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Video\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Video\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype VideoResult = z.infer<typeof VideoResultSchema>;\ndeclare const AudioResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Audio\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Audio\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype AudioResult = z.infer<typeof AudioResultSchema>;\ndeclare const TextResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Text\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Text\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype TextResult = z.infer<typeof TextResultSchema>;\ndeclare const NumberResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Number\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Number\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype NumberResult = z.infer<typeof NumberResultSchema>;\ndeclare const SignalResultSchema: z.ZodObject<{\n selectedOutputIndex: z.ZodLiteral<0>;\n outputs: z.ZodTuple<[z.ZodObject<{\n items: z.ZodTuple<[z.ZodType<_framefields_core0.OutputItem<\"Signal\">, unknown, z.core.$ZodTypeInternals<_framefields_core0.OutputItem<\"Signal\">, unknown>>], null>;\n }, z.core.$strip>], null>;\n}, z.core.$strip>;\ntype SignalResult = z.infer<typeof SignalResultSchema>;\n/** The `inputs` map an operation carries: one entry per connected handle. */\ndeclare const OperationInputsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{\n connectionValid: z.ZodBoolean;\n outputItem: z.ZodOptional<z.ZodNullable<z.ZodObject<{\n type: z.ZodString;\n data: z.ZodUnknown;\n }, z.core.$strip>>>;\n}, z.core.$strip>>;\n//#endregion\nexport { AnimationSchema, AudioProcessor, AudioProcessorContext, AudioResult, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, EffectReach, FieldMeta, FieldOptions, FileDataSchema, GPUCommandEncoder, GPURenderPassEncoder, GPUTexture, GPUTextureView, GlobalCompositeOperation, HandleParam, ImageResult, ImageResultSchema, MediaOperation, MultiOutputGenericSchema, NodeInputConnection, NodeOperation, NodeOperationInputs, NodeRenderProps, NodeRendererPlugin, NumberResult, NumberResultSchema, OperationInputsSchema, PercentageSchema, Point2D, SignalResult, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResult, TextResultSchema, TextureSourceOp, VideoResult, VideoResultSchema, VirtualMediaDataSchema, WebGPUNodeRenderer, WebGPUNodeRendererArgs, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, effectReach, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=index.d.mts.map"],"mappings":";;;;;;;KA+GKoD,mBAAAA,GAAsBC,UAAAA,CAAWL;KACjCM,sBAAAA,GAAyBD,UAAAA,CAAWZ;KACpCc,gBAAAA,GAAmBF,UAAAA,CAAWf;KAC9BkB,YAAAA,GAAeH,UAAAA,CAAWjB;UACrBF,mCAAmClC,iBAAiBA;;gBAE9CI,iBAAiBqD;;;;;;;;;;;;;;;;;;;;;oBAqBbD;;YAERE;wBACYtD,8BAA8B+B,QAAQD;;;;;;;KAOzDyB,WAAAA,eAA0BD;;;;;;KAM1B9C,sCAAsCZ,iBAAiBA,kBAAkB4D,mBAAmBH;UACvFE;;KAELC,sCAAsC5D;OACpCU;WACI0C;QACHE;cACMC;iBACGC;;;SAGRtB,gBAAgBuB;qBACJrD,8BAA8B+B,QAAQD,uCAAuCqB,0CAA0CC,8EAA8EjB;MACpNA;UACIsB,qBAAAA;WACCvC;;;;;;;;KAQNwC,kCAAkC9D,iBAAiBA,6BAA6B+D,kDAAkD3D,iBAAiBqD,mBAAmBI,iCAAiCtB;;;;;;;UAuDlMiC,kBAAAA;mBACS5D;mBACAkD;;;;;cCpFL+L,oBAAoB3C,CAAAA,CAAEY;uBACbZ,CAAAA,CAAE4B;WACd5B,CAAAA,CAAEgC,UAAUhC,CAAAA,CAAEY;WACdZ,CAAAA,CAAEgC,UAAUhC,CAAAA,CAAE+B,QAAQrC,+BAAkDM,CAAAA,CAAEU,IAAAA,CAAKoB,kBAAkBpC;KACvGM,CAAAA,CAAEU,IAAAA,CAAKC;GACTX,CAAAA,CAAEU,IAAAA,CAAKC"}
@@ -0,0 +1,3 @@
1
+ import { t as renderers_default } from "./renderer-Duorbrb8.mjs";
2
+
3
+ export { renderers_default as default };
@@ -1,14 +1,14 @@
1
1
  import "./chunk-D7gtBK74.mjs";
2
2
  import { Ot as getActiveMediaMetadata, an as reportRenderDiagnostic, cn as resolveNumber, on as resolveBoolean, p as DEFAULT_DURATION_MS } from "./dist-D021IFfp.mjs";
3
- import { a as resolveFrameNumber, c as solveHomography, n as defineRenderer, t as audioRegistry } from "./renderer-C9r0-KY4.mjs";
4
- import { K as parseColor, M as generateExtrudedTextGeometry, P as getPrimitiveGeometry, W as measureMaxCaptionHeight, Z as poseNodes, ct as Camera3D, d as ScreenSpaceRelightPipeline, dt as Light3D, et as resolveTextSpans, ht as Vector3Math, it as srtLoader, j as fitSpansToText, l as Renderer3D, n as AudioLatentTrackCache, p as SlugFontCache, pt as Matrix4Math, rt as spansText, st as resolveMediaSourceUrl, z as jointMatrices } from "./dist-Bf0H4lp1.mjs";
5
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CevnCkZC.mjs";
6
- import { a as resolveLayerDuration, f as measureText, n as decodeAudioSource } from "./dist-DG65RDhc.mjs";
3
+ import { l as solveHomography, n as defineRenderer, o as resolveFrameNumber, r as effectReach, t as audioRegistry } from "./renderer-BgmO1Dzw.mjs";
4
+ import { B as jointMatrices, F as getPrimitiveGeometry, G as measureMaxCaptionHeight, M as fitSpansToText, N as generateExtrudedTextGeometry, Q as poseNodes, at as srtLoader, ct as resolveMediaSourceUrl, d as ScreenSpaceRelightPipeline, ft as Light3D, gt as Vector3Math, it as spansText, l as Renderer3D, lt as Camera3D, mt as Matrix4Math, n as AudioLatentTrackCache, p as SlugFontCache, q as parseColor, tt as resolveTextSpans } from "./dist-BuirkW-f.mjs";
5
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-BRBIoxMC.mjs";
6
+ import { a as resolveLayerDuration, f as measureText, n as decodeAudioSource } from "./dist-DBdxM6xv.mjs";
7
7
  import { o as TemporalDeflickerPipeline } from "./dist-C_SMBmHr.mjs";
8
- import { B as evaluateTrackAtFrame, F as computeLayout, H as initLayout, M as collectNodeOps, z as evaluateKeyframes } from "./program-4mAVgg3c.mjs";
8
+ import { B as evaluateTrackAtFrame, F as computeLayout, H as initLayout, M as collectNodeOps, z as evaluateKeyframes } from "./program-O2bWX0cs.mjs";
9
9
  import gsapModule from "gsap";
10
10
 
11
- //#region ../../nodes/node-compositor/dist/renderers-BIFIE78c.mjs
11
+ //#region ../../nodes/node-compositor/dist/renderers-D7DbsafK.mjs
12
12
  /**
13
13
  * Solves a cubic bezier curve defined by control points (x1, y1) and (x2, y2)
14
14
  * for a given progress parameter t in [0, 1].
@@ -1283,6 +1283,94 @@ function computeContainerScissor(matrix, width, height) {
1283
1283
  height: Math.max(0, Math.round(maxY - minY))
1284
1284
  };
1285
1285
  }
1286
+ /**
1287
+ * How far a layer's effects draw past its pixels, px: the sum of what each
1288
+ * effect's renderer declares (`reach`), or null as soon as one doesn't
1289
+ * (it then runs over the whole target, as any effect may need to).
1290
+ */
1291
+ function effectsReach(effects) {
1292
+ let reach = 0;
1293
+ for (const e of effects) {
1294
+ const op = e && typeof e.toOperation === "function" ? e.toOperation() : e;
1295
+ const r = op ? effectReach(op) : null;
1296
+ if (r === null) return null;
1297
+ reach += r;
1298
+ }
1299
+ return reach;
1300
+ }
1301
+ function expandRect(r, by) {
1302
+ return {
1303
+ x: r.x - by,
1304
+ y: r.y - by,
1305
+ width: r.width + by * 2,
1306
+ height: r.height + by * 2
1307
+ };
1308
+ }
1309
+ /** `r` within a `width` × `height` target, in whole pixels; null when nothing is left. */
1310
+ function clampRect(r, width, height) {
1311
+ const x0 = Math.max(0, Math.floor(r.x));
1312
+ const y0 = Math.max(0, Math.floor(r.y));
1313
+ const x1 = Math.min(width, Math.ceil(r.x + r.width));
1314
+ const y1 = Math.min(height, Math.ceil(r.y + r.height));
1315
+ return x1 > x0 && y1 > y0 ? {
1316
+ x: x0,
1317
+ y: y0,
1318
+ width: x1 - x0,
1319
+ height: y1 - y0
1320
+ } : null;
1321
+ }
1322
+ /**
1323
+ * `applyLayerEffects` over `region` of a full-target texture only: the
1324
+ * region is cut out, its effects run at its size, and the result lands back
1325
+ * at its place in a full-target texture. Without a region (or when it is
1326
+ * most of the target) the effects run over the whole texture.
1327
+ */
1328
+ async function applyLayerEffectsInRegion(region, effects, sourceTex, width, height, ctx, encoder, props, drawChild, excludes, shiftedFrame, compositionFrame, fps, isVideoMode, layerId) {
1329
+ const run = (tex, w, h, ex) => applyLayerEffects(effects, tex, w, h, ctx, encoder, props, drawChild, ex, shiftedFrame, compositionFrame, fps, isVideoMode, layerId);
1330
+ if (!region || region.width * region.height > width * height * .6) return run(sourceTex, width, height, excludes);
1331
+ const blit = (dest, w, h, src, at) => {
1332
+ const pass = ctx.renderer.beginFrame(encoder, dest.createView(), {
1333
+ r: 0,
1334
+ g: 0,
1335
+ b: 0,
1336
+ a: 0
1337
+ }, w, h, "clear");
1338
+ ctx.renderer.pushScissor({
1339
+ x: 0,
1340
+ y: 0,
1341
+ width: w,
1342
+ height: h
1343
+ });
1344
+ ctx.renderer.pushIdentity();
1345
+ ctx.renderer.drawTexture(pass, src, at, { opacity: 1 });
1346
+ ctx.renderer.popTransform();
1347
+ ctx.renderer.popScissor();
1348
+ pass.end();
1349
+ };
1350
+ const cut = ctx.renderer.getTemporaryTexture(region.width, region.height, [sourceTex, ...excludes]);
1351
+ blit(cut, region.width, region.height, sourceTex, {
1352
+ x: -region.x,
1353
+ y: -region.y,
1354
+ width,
1355
+ height
1356
+ });
1357
+ const fx = await run(cut, region.width, region.height, [
1358
+ sourceTex,
1359
+ cut,
1360
+ ...excludes
1361
+ ]);
1362
+ const out = ctx.renderer.getTemporaryTexture(width, height, [
1363
+ fx.texture,
1364
+ sourceTex,
1365
+ cut,
1366
+ ...excludes
1367
+ ]);
1368
+ blit(out, width, height, fx.texture, region);
1369
+ return {
1370
+ texture: out,
1371
+ view: out.createView()
1372
+ };
1373
+ }
1286
1374
  async function applyLayerEffects(effects, sourceTex, width, height, ctx, encoder, props, drawChild, excludes, shiftedFrame, compositionFrame, fps, isVideoMode, layerId) {
1287
1375
  const remainingEffects = effects.filter((e) => {
1288
1376
  if (!e || typeof e !== "object") return false;
@@ -1759,6 +1847,30 @@ const CompositorWebGPURenderer = async (args) => {
1759
1847
  };
1760
1848
  };
1761
1849
  let nodeIndex = 0;
1850
+ /**
1851
+ * True when every child of a rounded box sits where the rounding can't
1852
+ * touch it (inside the inset at which the corner arcs meet 45°), as laid
1853
+ * out and moved this frame, untransformed and without effects of its own.
1854
+ */
1855
+ const childrenClearOfCorners = (children, box, radius) => {
1856
+ const k = radius * (1 - Math.SQRT1_2);
1857
+ for (const child of children) {
1858
+ const cop = child.operation;
1859
+ if (!cop) return false;
1860
+ const t = targetsById[cop.id || cop.inputHandleId];
1861
+ if (t?.hidden || cop.hidden) continue;
1862
+ const r = rects[cop.id];
1863
+ if (!r) return false;
1864
+ const v = (key, d) => t?.[key] ?? cop[key] ?? d;
1865
+ if (v("scale", 1) !== 1 || v("scaleX", 1) !== 1 || v("scaleY", 1) !== 1 || v("rotation", 0) !== 0 || v("rotateX", 0) !== 0 || v("rotateY", 0) !== 0) return false;
1866
+ if (Array.isArray(cop.effects) && cop.effects.length > 0) return false;
1867
+ if ((t?.animators ?? cop.animators)?.length) return false;
1868
+ const x = r.x - box.x + (v("x", 0) - (cop.x ?? 0));
1869
+ const y = r.y - box.y + (v("y", 0) - (cop.y ?? 0));
1870
+ if (x < k || y < k || x + r.width > box.width - k || y + r.height > box.height - k) return false;
1871
+ }
1872
+ return true;
1873
+ };
1762
1874
  const renderNodeTree = async (vms, initialTex, initialView, excludes, accumulatedOpacity = 1, parentMatrix = new DOMMatrix(), parentRect = null, targetW = nativeWidth, targetH = nativeHeight, parent3DMatrix = null, isRootScene = false) => {
1763
1875
  const sorted = [...vms].sort((a, b) => {
1764
1876
  return (a.operation?.zIndex ?? 0) - (b.operation?.zIndex ?? 0);
@@ -2615,6 +2727,57 @@ const CompositorWebGPURenderer = async (args) => {
2615
2727
  finalView: activeView
2616
2728
  };
2617
2729
  }
2730
+ if (nodeVM.children && nodeVM.children.length > 0 && (!Array.isArray(lop.effects) || lop.effects.length === 0) && layerOpacity === 1 && blendMode === "normal" && !(target?.motionBlurShutter ?? lop.motionBlurShutter) && (typeof lop.relighting !== "object" || !lop.relighting) && (typeof lop.relight !== "object" || !lop.relight) && (typeof target?.relighting !== "object" || !target?.relighting) && (typeof target?.relight !== "object" || !target?.relight) && (typeof lop.deflicker !== "object" || !lop.deflicker) && (typeof target?.deflicker !== "object" || !target?.deflicker) && (clipRadius <= 0 || childrenClearOfCorners(nodeVM.children, rect, clipRadius))) {
2731
+ const br$2 = Math.min(target?.borderRadius ?? lop.borderRadius ?? lop.strokeRadius ?? 0, layerW / 2, layerH / 2);
2732
+ if (shouldPaintContainerBackground(kind, lop.background)) {
2733
+ const bgPass = ctx.renderer.beginFrame(encoder, activeView, {
2734
+ r: 0,
2735
+ g: 0,
2736
+ b: 0,
2737
+ a: 0
2738
+ }, targetW, targetH, "load");
2739
+ ctx.renderer.pushTransform(layerMatrix);
2740
+ ctx.renderer.drawRect(bgPass, {
2741
+ x: 0,
2742
+ y: 0,
2743
+ width: layerW,
2744
+ height: layerH
2745
+ }, lop.background, br$2, { opacity: 1 });
2746
+ ctx.renderer.popTransform();
2747
+ bgPass.end();
2748
+ }
2749
+ if (scissorRect) ctx.renderer.pushScissorIntersect(scissorRect);
2750
+ const res = await renderNodeTree(nodeVM.children, activeTex, activeView, excludes, accumulatedOpacity, layerMatrix, rect, targetW, targetH, null, isRootScene);
2751
+ if (scissorRect) ctx.renderer.popScissor();
2752
+ activeTex = res.finalTex;
2753
+ activeView = res.finalView;
2754
+ const border = lop.borderWidth !== void 0 && lop.borderColor ? createBorderTexture(ctx, encoder, layerW, layerH, br$2, lop.borderWidth, lop.borderColor, lop.strokeAlign ?? "inside", [
2755
+ activeTex,
2756
+ targetTexture,
2757
+ ...excludes
2758
+ ]) : null;
2759
+ if (border) {
2760
+ const pass$1 = ctx.renderer.beginFrame(encoder, activeView, {
2761
+ r: 0,
2762
+ g: 0,
2763
+ b: 0,
2764
+ a: 0
2765
+ }, targetW, targetH, "load");
2766
+ ctx.renderer.pushTransform(layerMatrix);
2767
+ ctx.renderer.drawTexture(pass$1, border.borderTex, {
2768
+ x: border.ox,
2769
+ y: border.oy,
2770
+ width: border.ow,
2771
+ height: border.oh
2772
+ }, { opacity: 1 });
2773
+ ctx.renderer.popTransform();
2774
+ pass$1.end();
2775
+ }
2776
+ return {
2777
+ finalTex: activeTex,
2778
+ finalView: activeView
2779
+ };
2780
+ }
2618
2781
  const groupExcludes = [
2619
2782
  activeTex,
2620
2783
  targetTexture,
@@ -2756,7 +2919,8 @@ const CompositorWebGPURenderer = async (args) => {
2756
2919
  activeGroupView = relitView;
2757
2920
  }
2758
2921
  if (Array.isArray(lop.effects) && lop.effects.length > 0) {
2759
- const postEffects = await applyLayerEffects(lop.effects, activeGroupTex, targetW, targetH, ctx, encoder, props, drawChild, [
2922
+ const reach = shouldClip ? effectsReach(lop.effects) : null;
2923
+ const postEffects = await applyLayerEffectsInRegion(reach === null ? null : clampRect(expandRect(computeContainerScissor(layerMatrix, layerW, layerH), reach), targetW, targetH), lop.effects, activeGroupTex, targetW, targetH, ctx, encoder, props, drawChild, [
2760
2924
  activeTex,
2761
2925
  targetTexture,
2762
2926
  ...excludes
@@ -3573,4 +3737,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CompositorWebGPURendere
3573
3737
 
3574
3738
  //#endregion
3575
3739
  export { Transform3DMath, renderers_default as default, has3DTransform };
3576
- //# sourceMappingURL=renderer-B9AZ6R1U.mjs.map
3740
+ //# sourceMappingURL=renderer-YBwN9uyj.mjs.map