framefields 2.5.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/README.md +11 -0
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-2ew5y0Bl.d.mts → audio-B5mdR8vv.d.mts} +3 -3
  5. package/dist/{audio-2ew5y0Bl.d.mts.map → audio-B5mdR8vv.d.mts.map} +1 -1
  6. package/dist/{audio-DrUskzwZ.mjs → audio-QBA2VogL.mjs} +3 -3
  7. package/dist/{audio-DrUskzwZ.mjs.map → audio-QBA2VogL.mjs.map} +1 -1
  8. package/dist/cli.mjs +866 -16
  9. package/dist/cli.mjs.map +1 -1
  10. package/dist/components/index.d.mts +11 -11
  11. package/dist/components/index.mjs +45 -45
  12. package/dist/dist-BPOi5xb_.mjs.map +1 -1
  13. package/dist/{dist-Bf0H4lp1.mjs → dist-CDwWQYg3.mjs} +12 -4
  14. package/dist/dist-CDwWQYg3.mjs.map +1 -0
  15. package/dist/{dist-DG65RDhc.mjs → dist-nHCqVk-e.mjs} +6 -7
  16. package/dist/dist-nHCqVk-e.mjs.map +1 -0
  17. package/dist/effects/index.d.mts +4 -4
  18. package/dist/effects/index.mjs +35 -35
  19. package/dist/{effects-Z-brb-n7.mjs → effects-C-6I4iYW.mjs} +2 -2
  20. package/dist/{effects-Z-brb-n7.mjs.map → effects-C-6I4iYW.mjs.map} +1 -1
  21. package/dist/fonts/index.d.mts +1 -1
  22. package/dist/fonts/index.mjs +2 -2
  23. package/dist/{fonts-DqYgk_1a.mjs → fonts-BieW3VWV.mjs} +7 -3
  24. package/dist/fonts-BieW3VWV.mjs.map +1 -0
  25. package/dist/{gpu-CevnCkZC.mjs → gpu-Bb4WmYYH.mjs} +2 -2
  26. package/dist/{gpu-CevnCkZC.mjs.map → gpu-Bb4WmYYH.mjs.map} +1 -1
  27. package/dist/{index-D1C735Wp.d.mts → index-3Vdef2KE.d.mts} +3 -3
  28. package/dist/{index-D1C735Wp.d.mts.map → index-3Vdef2KE.d.mts.map} +1 -1
  29. package/dist/{index-COQTaniR.d.mts → index-B4o6F1JC.d.mts} +2 -2
  30. package/dist/{index-COQTaniR.d.mts.map → index-B4o6F1JC.d.mts.map} +1 -1
  31. package/dist/{index-KqW22NHL.d.mts → index-BhzlG_1Q.d.mts} +2 -2
  32. package/dist/{index-KqW22NHL.d.mts.map → index-BhzlG_1Q.d.mts.map} +1 -1
  33. package/dist/{index-DSGFMpwL.d.mts → index-D-Gnyffj.d.mts} +4 -4
  34. package/dist/{index-DSGFMpwL.d.mts.map → index-D-Gnyffj.d.mts.map} +1 -1
  35. package/dist/{index-tCKz9Tku.d.mts → index-E1IrPAm4.d.mts} +825 -399
  36. package/dist/index-E1IrPAm4.d.mts.map +1 -0
  37. package/dist/{index-CalU-mpZ.d.mts → index-j5LGVVbm.d.mts} +3 -1
  38. package/dist/index-j5LGVVbm.d.mts.map +1 -0
  39. package/dist/{index-CfMylY3O.d.mts → index-o8LxWdwz.d.mts} +3 -3
  40. package/dist/{index-CfMylY3O.d.mts.map → index-o8LxWdwz.d.mts.map} +1 -1
  41. package/dist/{index-CZK6CFLy.d.mts → index-ocZc12ZS.d.mts} +17 -17
  42. package/dist/index-ocZc12ZS.d.mts.map +1 -0
  43. package/dist/index.d.mts +12 -12
  44. package/dist/index.mjs +52 -52
  45. package/dist/preview/index.d.mts +3 -3
  46. package/dist/preview/index.mjs +10 -10
  47. package/dist/{preview-DVw2jLDh.mjs → preview-D6jS38Di.mjs} +2 -2
  48. package/dist/{preview-DVw2jLDh.mjs.map → preview-D6jS38Di.mjs.map} +1 -1
  49. package/dist/preview-engine/audio.mjs +1 -1
  50. package/dist/preview-engine/{chunk-MCFYUKAJ.mjs → chunk-2LQCQ3OT.mjs} +8 -8
  51. package/dist/preview-engine/{chunk-JMOJKT5W.mjs → chunk-2YGR5YCN.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-LNJYHSYX.mjs → chunk-3KHD67Q3.mjs} +1 -1
  53. package/dist/preview-engine/chunk-3SR6BI4B.mjs +1 -0
  54. package/dist/preview-engine/{chunk-NXKXOSE6.mjs → chunk-4INGTMZ5.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-T4VP45AP.mjs → chunk-4JX5LBE2.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-7JYMNGNK.mjs → chunk-5NT7WWJR.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-NB55FW7D.mjs → chunk-6PMATELR.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-45XGWIOY.mjs → chunk-AKT4YQWL.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-RNFYEZLL.mjs → chunk-ALSOO22Q.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-5FTCPTOX.mjs → chunk-AYTP6OGO.mjs} +8 -8
  61. package/dist/preview-engine/{chunk-3AYICEZ5.mjs → chunk-B7J72YSP.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-I3ZTDIVM.mjs → chunk-BBHRXV75.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-NHQR76WL.mjs → chunk-DDFWN7DI.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-ZVUTFXDR.mjs → chunk-DOCFOSA6.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-YJ24W73B.mjs → chunk-FZLKPBKS.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-EU7CFSB5.mjs → chunk-GQIRV466.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-DWHQSNSJ.mjs → chunk-IIOHF7MH.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-WUMVCQYI.mjs → chunk-J24VHZS6.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-2WOCQNZX.mjs → chunk-JD4TBC6Z.mjs} +8 -8
  70. package/dist/preview-engine/{chunk-X6BJLPW6.mjs → chunk-JTT3YX7W.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-XJ4CQIZZ.mjs → chunk-KWTTANYN.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-QCUGWPYP.mjs → chunk-LN3YAWUD.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-M6ZKK6ZU.mjs → chunk-LYSU6S4O.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-TE2QAKKF.mjs → chunk-MJCK5FLZ.mjs} +1 -1
  75. package/dist/preview-engine/chunk-MLAIEIUF.mjs +1974 -0
  76. package/dist/preview-engine/{chunk-24H3QVYB.mjs → chunk-MMVFX42U.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-25T3M6MI.mjs → chunk-MUOJMF7M.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-B555EGEU.mjs → chunk-NQZRPPUU.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-VTE3IISK.mjs → chunk-OXXRKNHW.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-DUEY7AXY.mjs → chunk-PJMX2GFY.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-MA4YVA2E.mjs → chunk-Q7JN4EHX.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-UXCTWFKK.mjs → chunk-QPBTLJ5W.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-LQVACZDE.mjs → chunk-QRYCB6E3.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-2QQQTZHS.mjs → chunk-RDEQ4LQU.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-KKBJ7X3T.mjs → chunk-RF62TV3G.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-CE6CG5BH.mjs → chunk-RHXZXWJ4.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-BNO5JAEZ.mjs → chunk-RKNV5N7D.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-PXWCGXTF.mjs → chunk-SP22JWN2.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-NYEDWUFS.mjs → chunk-SQ52PBF3.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-QYIKOOFI.mjs → chunk-SVE3XWO7.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-QJYAIQYU.mjs → chunk-SXNCNG4L.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-VH5V54RA.mjs → chunk-TPFDAOW7.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-ENS4KUJV.mjs → chunk-UEQIO6AH.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-XYRBFLFF.mjs → chunk-ULPLHKM2.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-MCR7XMNQ.mjs → chunk-ULVX4VYT.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-ZAIVXGSS.mjs → chunk-UQD2UE6I.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-QP24X77K.mjs → chunk-VY6ST4QX.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-7BUKVFWB.mjs → chunk-W2EZFV4Q.mjs} +1 -1
  99. package/dist/preview-engine/chunk-W3I7LKDV.mjs +5 -0
  100. package/dist/preview-engine/{chunk-P734GD7D.mjs → chunk-WDWHOXSA.mjs} +1 -1
  101. package/dist/preview-engine/{chunk-2RZ6S4SW.mjs → chunk-YEPYVASB.mjs} +1 -1
  102. package/dist/preview-engine/chunk-ZMMNN77R.mjs +3 -0
  103. package/dist/preview-engine/components.mjs +1 -1
  104. package/dist/preview-engine/effects.mjs +1 -1
  105. package/dist/preview-engine/fonts.mjs +1 -1
  106. package/dist/preview-engine/framefields.mjs +1 -1
  107. package/dist/preview-engine/player.mjs +1 -1
  108. package/dist/preview-engine/renderers-4CRXZJ5G.mjs +1 -0
  109. package/dist/preview-engine/renderers-4G3UOPA7.mjs +228 -0
  110. package/dist/preview-engine/{renderers-WPBTAU2E.mjs → renderers-4RVSLTCX.mjs} +1 -1
  111. package/dist/preview-engine/{renderers-W5CTR4B5.mjs → renderers-56TGEFDK.mjs} +1 -1
  112. package/dist/preview-engine/renderers-5QF4OLFQ.mjs +1 -0
  113. package/dist/preview-engine/renderers-5SOW6OVE.mjs +1 -0
  114. package/dist/preview-engine/renderers-6M2HPY2J.mjs +1 -0
  115. package/dist/preview-engine/{renderers-DZZFIYYA.mjs → renderers-7GMW52G3.mjs} +1 -1
  116. package/dist/preview-engine/renderers-7HT5NW7W.mjs +1 -0
  117. package/dist/preview-engine/{renderers-KV3TTCO6.mjs → renderers-7SW2AHM2.mjs} +1 -1
  118. package/dist/preview-engine/{renderers-BNXTSIXJ.mjs → renderers-ART3EGSZ.mjs} +1 -1
  119. package/dist/preview-engine/{renderers-6NFRKHNO.mjs → renderers-ATTGUTYY.mjs} +1 -1
  120. package/dist/preview-engine/renderers-AYWCRBQC.mjs +1 -0
  121. package/dist/preview-engine/renderers-BA6ZCPI5.mjs +1 -0
  122. package/dist/preview-engine/{renderers-AKZAAGR7.mjs → renderers-BAS7RXTC.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-CLLR5MOQ.mjs → renderers-BWRNCXR6.mjs} +1 -1
  124. package/dist/preview-engine/{renderers-N7T34SCI.mjs → renderers-C3YXNKNM.mjs} +1 -1
  125. package/dist/preview-engine/renderers-CZTCW4FC.mjs +1 -0
  126. package/dist/preview-engine/{renderers-C7SJ3M6S.mjs → renderers-D2XEQ2YY.mjs} +1 -1
  127. package/dist/preview-engine/renderers-DFIJYBW2.mjs +1 -0
  128. package/dist/preview-engine/{renderers-DHKB5LI6.mjs → renderers-EJGF3PYQ.mjs} +1 -1
  129. package/dist/preview-engine/renderers-EJN6M6DO.mjs +1 -0
  130. package/dist/preview-engine/{renderers-MKEXNBCW.mjs → renderers-EK3HQUUF.mjs} +1 -1
  131. package/dist/preview-engine/{renderers-O56IOD7J.mjs → renderers-EQDINUMT.mjs} +1 -1
  132. package/dist/preview-engine/{renderers-VYK2BJID.mjs → renderers-FC7G7KU7.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-BQLYS4TM.mjs → renderers-FD3ZT73R.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-TASYN62K.mjs → renderers-FYI6QNUH.mjs} +1 -1
  135. package/dist/preview-engine/renderers-G34C5J27.mjs +1 -0
  136. package/dist/preview-engine/{renderers-ROSSJ7Y2.mjs → renderers-GHP7SL5M.mjs} +1 -1
  137. package/dist/preview-engine/renderers-GKVTNDVH.mjs +1 -0
  138. package/dist/preview-engine/{renderers-MPCYLXXU.mjs → renderers-GY4R467B.mjs} +1 -1
  139. package/dist/preview-engine/{renderers-TAMDNTEQ.mjs → renderers-H2UI7YEO.mjs} +1 -1
  140. package/dist/preview-engine/{renderers-6PVGRTXV.mjs → renderers-HBIBRZD7.mjs} +1 -1
  141. package/dist/preview-engine/{renderers-GF77N2KM.mjs → renderers-HMNCIEU3.mjs} +1 -1
  142. package/dist/preview-engine/{renderers-SIBP54WK.mjs → renderers-HZBYQKIQ.mjs} +1 -1
  143. package/dist/preview-engine/renderers-IK7ZJJKJ.mjs +1 -0
  144. package/dist/preview-engine/renderers-ISASPH6T.mjs +1 -0
  145. package/dist/preview-engine/renderers-IW5MWDBI.mjs +1 -0
  146. package/dist/preview-engine/renderers-K2PI4WJS.mjs +1 -0
  147. package/dist/preview-engine/renderers-KESHVFL2.mjs +1 -0
  148. package/dist/preview-engine/renderers-KTZZVAB2.mjs +1 -0
  149. package/dist/preview-engine/renderers-KY5CJEOV.mjs +1 -0
  150. package/dist/preview-engine/{renderers-MS4HG3M4.mjs → renderers-LTV5RFDJ.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-CEJP6Q7F.mjs → renderers-LV6LLULR.mjs} +1 -1
  152. package/dist/preview-engine/renderers-M5W6SUQD.mjs +1 -0
  153. package/dist/preview-engine/{renderers-H3ZM2TOA.mjs → renderers-MEM3REMI.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-EJATUIUP.mjs → renderers-N36R42RL.mjs} +1 -1
  155. package/dist/preview-engine/{renderers-UVABXXQF.mjs → renderers-NTKSN32T.mjs} +1 -1
  156. package/dist/preview-engine/renderers-O5XMWFPY.mjs +1 -0
  157. package/dist/preview-engine/{renderers-QO2RHF7F.mjs → renderers-P2FTCDZ7.mjs} +1 -1
  158. package/dist/preview-engine/{renderers-L7EITUCD.mjs → renderers-PYDOSDEY.mjs} +1 -1
  159. package/dist/preview-engine/renderers-QJA35PKC.mjs +1 -0
  160. package/dist/preview-engine/{renderers-TWZHTKW7.mjs → renderers-RDHHVXRE.mjs} +1 -1
  161. package/dist/preview-engine/{renderers-RRJ2DX2W.mjs → renderers-SY435YU3.mjs} +1 -1
  162. package/dist/preview-engine/renderers-TJIFTQHV.mjs +1 -0
  163. package/dist/preview-engine/renderers-TN4XN436.mjs +1 -0
  164. package/dist/preview-engine/renderers-UDYLCYCB.mjs +1 -0
  165. package/dist/preview-engine/renderers-WZ7SFIBZ.mjs +1 -0
  166. package/dist/preview-engine/renderers-X6QNDC6R.mjs +1 -0
  167. package/dist/preview-engine/renderers-X6RNTJOV.mjs +1 -0
  168. package/dist/preview-engine/{renderers-QPFZBLDI.mjs → renderers-Y3N7236P.mjs} +1 -1
  169. package/dist/preview-engine/{renderers-XSPU2BIQ.mjs → renderers-YBTWN76S.mjs} +1 -1
  170. package/dist/preview-engine/{renderers-T62TXGVO.mjs → renderers-YK74777T.mjs} +1 -1
  171. package/dist/preview-engine/renderers-YP3ASXIJ.mjs +1 -0
  172. package/dist/preview-engine/renderers-YVJAG3PD.mjs +1 -0
  173. package/dist/preview-engine/{renderers-4RFB2LG2.mjs → renderers-ZAMSS7QN.mjs} +1 -1
  174. package/dist/preview-engine/{renderers-FOHW7RWH.mjs → renderers-ZDMDDWLN.mjs} +1 -1
  175. package/dist/preview-engine/renderers-ZPPZNMKJ.mjs +1 -0
  176. package/dist/preview-engine/signals.mjs +1 -1
  177. package/dist/{program-4mAVgg3c.mjs → program-Bf4yHbHC.mjs} +19 -3
  178. package/dist/program-Bf4yHbHC.mjs.map +1 -0
  179. package/dist/registry/annotate.json +1 -1
  180. package/dist/registry/app-frame.json +1 -1
  181. package/dist/registry/backdrop.json +3 -3
  182. package/dist/registry/before-after.json +1 -1
  183. package/dist/registry/callout.json +1 -1
  184. package/dist/registry/captions.json +7 -1
  185. package/dist/registry/card-stack.json +5 -4
  186. package/dist/registry/chat-thread.json +10 -3
  187. package/dist/registry/code-block.json +8 -2
  188. package/dist/registry/confetti.json +1 -1
  189. package/dist/registry/device-frame.json +2 -1
  190. package/dist/registry/focus-zoom.json +1 -1
  191. package/dist/registry/index.json +3 -2
  192. package/dist/registry/logo-reveal.json +1 -1
  193. package/dist/registry/lower-third.json +1 -1
  194. package/dist/registry/meter.json +1 -1
  195. package/dist/registry/mouse-pointer.json +1 -1
  196. package/dist/registry/selection.json +3 -3
  197. package/dist/registry/spotlight.json +1 -1
  198. package/dist/registry/terminal.json +7 -1
  199. package/dist/registry/text-reveal.json +2 -1
  200. package/dist/registry/title-card.json +1 -1
  201. package/dist/registry/toasts.json +1 -1
  202. package/dist/registry/touch-point.json +4 -4
  203. package/dist/registry/waveform.json +3 -3
  204. package/dist/registry/word-cycle.json +2 -2
  205. package/dist/renderer/index.d.mts +2 -2
  206. package/dist/renderer/index.mjs +2 -2
  207. package/dist/renderer-4FQmduPw.mjs +5 -0
  208. package/dist/{renderer-Cjw6lyaK.mjs → renderer-4v6XYAiX.mjs} +4 -4
  209. package/dist/{renderer-Cjw6lyaK.mjs.map → renderer-4v6XYAiX.mjs.map} +1 -1
  210. package/dist/{renderer-CXa6SWXy.mjs → renderer-79mO0b9Y.mjs} +4 -4
  211. package/dist/{renderer-CXa6SWXy.mjs.map → renderer-79mO0b9Y.mjs.map} +1 -1
  212. package/dist/{renderer-wEXBnlr1.mjs → renderer-AOZWHGT3.mjs} +4 -4
  213. package/dist/{renderer-wEXBnlr1.mjs.map → renderer-AOZWHGT3.mjs.map} +1 -1
  214. package/dist/{renderer-CjcrhBB2.mjs → renderer-B1Ox12RF.mjs} +3 -3
  215. package/dist/{renderer-CjcrhBB2.mjs.map → renderer-B1Ox12RF.mjs.map} +1 -1
  216. package/dist/{renderer-B9m7xIPo.mjs → renderer-B6vr-B0t.mjs} +4 -4
  217. package/dist/{renderer-B9m7xIPo.mjs.map → renderer-B6vr-B0t.mjs.map} +1 -1
  218. package/dist/renderer-BBCpRuYU.mjs +5 -0
  219. package/dist/renderer-BBTo_jLO.mjs +5 -0
  220. package/dist/{renderer-CgMnZYTM.mjs → renderer-BDCS7k5X.mjs} +4 -4
  221. package/dist/{renderer-CgMnZYTM.mjs.map → renderer-BDCS7k5X.mjs.map} +1 -1
  222. package/dist/{renderer-BjxceNBj.mjs → renderer-BFdgbqgW.mjs} +4 -4
  223. package/dist/{renderer-BjxceNBj.mjs.map → renderer-BFdgbqgW.mjs.map} +1 -1
  224. package/dist/{renderer-C0P8ZRiC.mjs → renderer-BHgYRSu8.mjs} +3 -3
  225. package/dist/{renderer-C0P8ZRiC.mjs.map → renderer-BHgYRSu8.mjs.map} +1 -1
  226. package/dist/{renderer-CTvPNRMH.mjs → renderer-BKssznKn.mjs} +3 -3
  227. package/dist/{renderer-CTvPNRMH.mjs.map → renderer-BKssznKn.mjs.map} +1 -1
  228. package/dist/{renderer-B9iVE2GG.mjs → renderer-BL9vkn6m.mjs} +4 -4
  229. package/dist/{renderer-B9iVE2GG.mjs.map → renderer-BL9vkn6m.mjs.map} +1 -1
  230. package/dist/renderer-BLg66ZgG.mjs +5 -0
  231. package/dist/{renderer-D22g6ION.mjs → renderer-BQFxoNzi.mjs} +4 -4
  232. package/dist/{renderer-D22g6ION.mjs.map → renderer-BQFxoNzi.mjs.map} +1 -1
  233. package/dist/{renderer-Datqywo_.mjs → renderer-BQdn_qGp.mjs} +4 -4
  234. package/dist/{renderer-Datqywo_.mjs.map → renderer-BQdn_qGp.mjs.map} +1 -1
  235. package/dist/{renderer-T2dd9a2L.mjs → renderer-BR35Xp9n.mjs} +4 -4
  236. package/dist/{renderer-T2dd9a2L.mjs.map → renderer-BR35Xp9n.mjs.map} +1 -1
  237. package/dist/renderer-BScS8AzG.mjs +5 -0
  238. package/dist/{renderer-BcSSAzc4.mjs → renderer-BTjveb1Y.mjs} +4 -4
  239. package/dist/{renderer-BcSSAzc4.mjs.map → renderer-BTjveb1Y.mjs.map} +1 -1
  240. package/dist/renderer-Bb1cS5mJ.mjs +5 -0
  241. package/dist/{renderer-4P-DCjk2.mjs → renderer-Bbkf5EIi.mjs} +4 -4
  242. package/dist/{renderer-4P-DCjk2.mjs.map → renderer-Bbkf5EIi.mjs.map} +1 -1
  243. package/dist/{renderer-C9r0-KY4.mjs → renderer-BgmO1Dzw.mjs} +11 -2
  244. package/dist/{renderer-C9r0-KY4.mjs.map → renderer-BgmO1Dzw.mjs.map} +1 -1
  245. package/dist/{renderer-khVVYoVF.mjs → renderer-BmgyvIC3.mjs} +4 -4
  246. package/dist/{renderer-khVVYoVF.mjs.map → renderer-BmgyvIC3.mjs.map} +1 -1
  247. package/dist/{renderer-CvYxxS_X.mjs → renderer-Bpve7M6S.mjs} +73 -73
  248. package/dist/{renderer-CvYxxS_X.mjs.map → renderer-Bpve7M6S.mjs.map} +1 -1
  249. package/dist/renderer-Bpwd9zEY.mjs +5 -0
  250. package/dist/renderer-BsewLDHZ.mjs +3 -0
  251. package/dist/{renderer-C4f_X1Qc.mjs → renderer-BsnhAgrB.mjs} +3 -3
  252. package/dist/{renderer-C4f_X1Qc.mjs.map → renderer-BsnhAgrB.mjs.map} +1 -1
  253. package/dist/{renderer-BIt-At3v.mjs → renderer-By5xTRqB.mjs} +4 -4
  254. package/dist/{renderer-BIt-At3v.mjs.map → renderer-By5xTRqB.mjs.map} +1 -1
  255. package/dist/{renderer-vc8t_z-y.mjs → renderer-BzEQXAdl.mjs} +3 -3
  256. package/dist/{renderer-vc8t_z-y.mjs.map → renderer-BzEQXAdl.mjs.map} +1 -1
  257. package/dist/renderer-Bzyd9xi5.mjs +5 -0
  258. package/dist/{renderer-CE9N4EEI.d.mts → renderer-C-dcd14F.d.mts} +2 -2
  259. package/dist/{renderer-CE9N4EEI.d.mts.map → renderer-C-dcd14F.d.mts.map} +1 -1
  260. package/dist/{renderer-RiWi7y5C.mjs → renderer-C64g87yU.mjs} +4 -4
  261. package/dist/{renderer-RiWi7y5C.mjs.map → renderer-C64g87yU.mjs.map} +1 -1
  262. package/dist/{renderer-De7gno9X.mjs → renderer-C6Wb1TZT.mjs} +4 -4
  263. package/dist/{renderer-De7gno9X.mjs.map → renderer-C6Wb1TZT.mjs.map} +1 -1
  264. package/dist/{renderer-CT_3Fegr.mjs → renderer-CHPLHbAs.mjs} +4 -4
  265. package/dist/{renderer-CT_3Fegr.mjs.map → renderer-CHPLHbAs.mjs.map} +1 -1
  266. package/dist/{renderer-CkJXq4bD.mjs → renderer-CJRu7lLH.mjs} +3 -3
  267. package/dist/{renderer-CkJXq4bD.mjs.map → renderer-CJRu7lLH.mjs.map} +1 -1
  268. package/dist/{renderer-BwRLXhxJ.mjs → renderer-CMWUtfwn.mjs} +3 -3
  269. package/dist/{renderer-BwRLXhxJ.mjs.map → renderer-CMWUtfwn.mjs.map} +1 -1
  270. package/dist/{renderer-C4pS7aAI.mjs → renderer-CRkgyk08.mjs} +4 -4
  271. package/dist/{renderer-C4pS7aAI.mjs.map → renderer-CRkgyk08.mjs.map} +1 -1
  272. package/dist/renderer-CXVssx1k.mjs +5 -0
  273. package/dist/{renderer-5-9DPis6.mjs → renderer-CY0BT6ok.mjs} +3 -3
  274. package/dist/{renderer-5-9DPis6.mjs.map → renderer-CY0BT6ok.mjs.map} +1 -1
  275. package/dist/renderer-CYFiGLls.mjs +5 -0
  276. package/dist/{renderer-BVtQzjgT.mjs → renderer-CYLP8sD6.mjs} +3 -3
  277. package/dist/{renderer-BVtQzjgT.mjs.map → renderer-CYLP8sD6.mjs.map} +1 -1
  278. package/dist/{renderer-DPVEs5ME.mjs → renderer-CY_1u6zi.mjs} +4 -4
  279. package/dist/{renderer-DPVEs5ME.mjs.map → renderer-CY_1u6zi.mjs.map} +1 -1
  280. package/dist/renderer-C__BvvtP.mjs +5 -0
  281. package/dist/renderer-Ca3YZsoT.mjs +5 -0
  282. package/dist/{renderer-BpBhvMi1.mjs → renderer-CcSBjtRa.mjs} +2 -2
  283. package/dist/{renderer-nLPfvY3-.mjs → renderer-CdxNwGeb.mjs} +2 -2
  284. package/dist/{renderer-nLPfvY3-.mjs.map → renderer-CdxNwGeb.mjs.map} +1 -1
  285. package/dist/{renderer-CJ2-jEy7.mjs → renderer-CgdplRri.mjs} +3 -3
  286. package/dist/{renderer-CJ2-jEy7.mjs.map → renderer-CgdplRri.mjs.map} +1 -1
  287. package/dist/{renderer-MQPiZQXN.mjs → renderer-Cn9tU_s5.mjs} +3 -3
  288. package/dist/{renderer-MQPiZQXN.mjs.map → renderer-Cn9tU_s5.mjs.map} +1 -1
  289. package/dist/renderer-CnM5iFj9.mjs +5 -0
  290. package/dist/{renderer-Cz5SOnJr.mjs → renderer-Cqp_TUl_.mjs} +3 -3
  291. package/dist/{renderer-Cz5SOnJr.mjs.map → renderer-Cqp_TUl_.mjs.map} +1 -1
  292. package/dist/{renderer-BKayVZhL.mjs → renderer-CsOLHKFx.mjs} +3 -3
  293. package/dist/{renderer-BKayVZhL.mjs.map → renderer-CsOLHKFx.mjs.map} +1 -1
  294. package/dist/{renderer-BWqQxZNk.mjs → renderer-D01RT3Ov.mjs} +2 -2
  295. package/dist/renderer-D1nZrvQx.mjs +5 -0
  296. package/dist/renderer-D6XjVQME.mjs +5 -0
  297. package/dist/{renderer-9gjn790a.mjs → renderer-DAONCf_3.mjs} +4 -4
  298. package/dist/{renderer-9gjn790a.mjs.map → renderer-DAONCf_3.mjs.map} +1 -1
  299. package/dist/{renderer-D0iSbNza.mjs → renderer-DAfWLGfy.mjs} +4 -4
  300. package/dist/{renderer-D0iSbNza.mjs.map → renderer-DAfWLGfy.mjs.map} +1 -1
  301. package/dist/{renderer-Bk7vVfTu.mjs → renderer-DEeKkljI.mjs} +3 -3
  302. package/dist/{renderer-Bk7vVfTu.mjs.map → renderer-DEeKkljI.mjs.map} +1 -1
  303. package/dist/{renderer-B9AZ6R1U.mjs → renderer-DFYXjAIT.mjs} +172 -8
  304. package/dist/renderer-DFYXjAIT.mjs.map +1 -0
  305. package/dist/renderer-DIuMnMF0.mjs +5 -0
  306. package/dist/{renderer-DnT62IDK.mjs → renderer-DJHuPNJx.mjs} +3 -3
  307. package/dist/{renderer-DnT62IDK.mjs.map → renderer-DJHuPNJx.mjs.map} +1 -1
  308. package/dist/{renderer-B9yv3R1y.mjs → renderer-DJTXhVNh.mjs} +3 -3
  309. package/dist/{renderer-B9yv3R1y.mjs.map → renderer-DJTXhVNh.mjs.map} +1 -1
  310. package/dist/{renderer-DPzair18.mjs → renderer-DNEFYrQ5.mjs} +2 -2
  311. package/dist/renderer-DUvvM8EF.mjs +5 -0
  312. package/dist/renderer-DWogyuMO.mjs +5 -0
  313. package/dist/renderer-DWsj_LJR.mjs +5 -0
  314. package/dist/{renderer-BBA-iCi-.mjs → renderer-DYJHFHF4.mjs} +34 -9
  315. package/dist/renderer-DYJHFHF4.mjs.map +1 -0
  316. package/dist/{renderer-Dkt1oh9H.mjs → renderer-DYR4gFEM.mjs} +4 -4
  317. package/dist/{renderer-Dkt1oh9H.mjs.map → renderer-DYR4gFEM.mjs.map} +1 -1
  318. package/dist/renderer-DYun0DJl.mjs +5 -0
  319. package/dist/renderer-D_6YqD-Z.mjs +5 -0
  320. package/dist/{renderer-DTXAa2pL.mjs → renderer-D_UPFbei.mjs} +4 -4
  321. package/dist/{renderer-DTXAa2pL.mjs.map → renderer-D_UPFbei.mjs.map} +1 -1
  322. package/dist/renderer-Db9LP86x.mjs +5 -0
  323. package/dist/{renderer-Y5JmTL8J.mjs → renderer-DgRJG_l-.mjs} +3 -3
  324. package/dist/{renderer-Y5JmTL8J.mjs.map → renderer-DgRJG_l-.mjs.map} +1 -1
  325. package/dist/renderer-DhHiC87m.mjs +5 -0
  326. package/dist/{renderer-C8-NmotX.mjs → renderer-DiD3r9tx.mjs} +3 -3
  327. package/dist/{renderer-C8-NmotX.mjs.map → renderer-DiD3r9tx.mjs.map} +1 -1
  328. package/dist/{renderer-_vcT__tW.mjs → renderer-Dj-y-BtT.mjs} +4 -4
  329. package/dist/{renderer-_vcT__tW.mjs.map → renderer-Dj-y-BtT.mjs.map} +1 -1
  330. package/dist/renderer-Dj5jGAkR.mjs +5 -0
  331. package/dist/{renderer-NL2IZShC.mjs → renderer-DlA7kzIs.mjs} +4 -4
  332. package/dist/{renderer-NL2IZShC.mjs.map → renderer-DlA7kzIs.mjs.map} +1 -1
  333. package/dist/renderer-DlPUQ7RF.mjs +5 -0
  334. package/dist/renderer-DpIPdgn8.mjs +5 -0
  335. package/dist/{renderer-wIsJb2eO.mjs → renderer-Duorbrb8.mjs} +2 -2
  336. package/dist/{renderer-wIsJb2eO.mjs.map → renderer-Duorbrb8.mjs.map} +1 -1
  337. package/dist/renderer-Dv0C9CEt.mjs +6 -0
  338. package/dist/{renderer-C7HIJcJK.mjs → renderer-EwSSuJXj.mjs} +4 -4
  339. package/dist/{renderer-C7HIJcJK.mjs.map → renderer-EwSSuJXj.mjs.map} +1 -1
  340. package/dist/renderer-Iw8fDL-p.mjs +5 -0
  341. package/dist/{renderer-CuwVuVKG.mjs → renderer-JJibsJfb.mjs} +3 -3
  342. package/dist/{renderer-CuwVuVKG.mjs.map → renderer-JJibsJfb.mjs.map} +1 -1
  343. package/dist/{renderer-B8PNlKEM.mjs → renderer-KppAWfmJ.mjs} +4 -4
  344. package/dist/{renderer-B8PNlKEM.mjs.map → renderer-KppAWfmJ.mjs.map} +1 -1
  345. package/dist/{renderer-Cm9fEQsw.mjs → renderer-LW8MfGjd.mjs} +3 -3
  346. package/dist/{renderer-Cm9fEQsw.mjs.map → renderer-LW8MfGjd.mjs.map} +1 -1
  347. package/dist/{renderer-Cb5uDZm0.mjs → renderer-PMjV8x65.mjs} +3 -3
  348. package/dist/{renderer-Cb5uDZm0.mjs.map → renderer-PMjV8x65.mjs.map} +1 -1
  349. package/dist/renderer-SLI69Mju.mjs +5 -0
  350. package/dist/{renderer-CGKKjJ5Q.mjs → renderer-UArFa4y9.mjs} +3 -3
  351. package/dist/{renderer-CGKKjJ5Q.mjs.map → renderer-UArFa4y9.mjs.map} +1 -1
  352. package/dist/{renderer-Bh0dwc8n.mjs → renderer-VwKmjuc6.mjs} +4 -4
  353. package/dist/{renderer-Bh0dwc8n.mjs.map → renderer-VwKmjuc6.mjs.map} +1 -1
  354. package/dist/{renderer-92IAZzBU.d.mts → renderer-WTvo3wo9.d.mts} +18 -4
  355. package/dist/renderer-WTvo3wo9.d.mts.map +1 -0
  356. package/dist/renderer-WyaqnVMz.mjs +3 -0
  357. package/dist/renderer-ZVtbb3-P.mjs +5 -0
  358. package/dist/{renderer-C5h2TSjH.mjs → renderer-bb3puodg.mjs} +3 -3
  359. package/dist/{renderer-C5h2TSjH.mjs.map → renderer-bb3puodg.mjs.map} +1 -1
  360. package/dist/{renderer-CWnhRMOq.mjs → renderer-eyvY4Lq4.mjs} +4 -4
  361. package/dist/{renderer-CWnhRMOq.mjs.map → renderer-eyvY4Lq4.mjs.map} +1 -1
  362. package/dist/renderer-gHNCu7H5.mjs +5 -0
  363. package/dist/renderer-gxDNmbtU.mjs +5 -0
  364. package/dist/renderer-hkK4DNRX.mjs +5 -0
  365. package/dist/{renderer-CxOaqnho.mjs → renderer-ij448rvt.mjs} +3 -3
  366. package/dist/{renderer-CxOaqnho.mjs.map → renderer-ij448rvt.mjs.map} +1 -1
  367. package/dist/{renderer-CxkUI9s_.mjs → renderer-j7aUfyeR.mjs} +4 -4
  368. package/dist/{renderer-CxkUI9s_.mjs.map → renderer-j7aUfyeR.mjs.map} +1 -1
  369. package/dist/{renderer-PNIgmWft.mjs → renderer-kFtcuY9J.mjs} +2 -2
  370. package/dist/{renderer-PNIgmWft.mjs.map → renderer-kFtcuY9J.mjs.map} +1 -1
  371. package/dist/{renderer-zdpn1Hkk.mjs → renderer-kOlfYLtu.mjs} +3 -3
  372. package/dist/{renderer-zdpn1Hkk.mjs.map → renderer-kOlfYLtu.mjs.map} +1 -1
  373. package/dist/{renderer-CPl1wOrj.mjs → renderer-l1qJE4z-.mjs} +3 -3
  374. package/dist/{renderer-CPl1wOrj.mjs.map → renderer-l1qJE4z-.mjs.map} +1 -1
  375. package/dist/{renderer-BIYJKdwA.mjs → renderer-ml2LHmRb.mjs} +3 -3
  376. package/dist/{renderer-BIYJKdwA.mjs.map → renderer-ml2LHmRb.mjs.map} +1 -1
  377. package/dist/{renderer-BmX2CmyO.mjs → renderer-mu2mYo5w.mjs} +4 -4
  378. package/dist/{renderer-BmX2CmyO.mjs.map → renderer-mu2mYo5w.mjs.map} +1 -1
  379. package/dist/{renderer-D-FwaV1R.mjs → renderer-ovkctV5a.mjs} +2 -2
  380. package/dist/renderer-oy6SGDRz.mjs +5 -0
  381. package/dist/{renderer-Du8z4UrN.mjs → renderer-qQmoO5Hk.mjs} +3 -3
  382. package/dist/{renderer-Du8z4UrN.mjs.map → renderer-qQmoO5Hk.mjs.map} +1 -1
  383. package/dist/renderer-rq7UIcuH.mjs +5 -0
  384. package/dist/{renderer-Bt_j2Zi6.mjs → renderer-rv-AKqCl.mjs} +3 -3
  385. package/dist/{renderer-Bt_j2Zi6.mjs.map → renderer-rv-AKqCl.mjs.map} +1 -1
  386. package/dist/renderer-xkEJahws.mjs +5 -0
  387. package/dist/{renderer-C1sFg34Y.mjs → renderer-yF40Pb-n.mjs} +4 -4
  388. package/dist/{renderer-C1sFg34Y.mjs.map → renderer-yF40Pb-n.mjs.map} +1 -1
  389. package/dist/{renderer-Ddg3dJmu.mjs → renderer-yFHP9Zj2.mjs} +4 -4
  390. package/dist/{renderer-Ddg3dJmu.mjs.map → renderer-yFHP9Zj2.mjs.map} +1 -1
  391. package/dist/{renderer-DYdll3xW.mjs → renderer-zOK5DYYn.mjs} +4 -4
  392. package/dist/{renderer-DYdll3xW.mjs.map → renderer-zOK5DYYn.mjs.map} +1 -1
  393. package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs → renderers-CP8CFWDs-DPLX5EJs.mjs} +3 -3
  394. package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs.map → renderers-CP8CFWDs-DPLX5EJs.mjs.map} +1 -1
  395. package/dist/signals/index.d.mts +5 -5
  396. package/dist/signals/index.mjs +5 -5
  397. package/dist/{src-WAnxhDYD.mjs → src-BnkrNj2W.mjs} +613 -118
  398. package/dist/src-BnkrNj2W.mjs.map +1 -0
  399. package/package.json +59 -58
  400. package/dist/dist-Bf0H4lp1.mjs.map +0 -1
  401. package/dist/dist-DG65RDhc.mjs.map +0 -1
  402. package/dist/fonts-DqYgk_1a.mjs.map +0 -1
  403. package/dist/index-CZK6CFLy.d.mts.map +0 -1
  404. package/dist/index-CalU-mpZ.d.mts.map +0 -1
  405. package/dist/index-tCKz9Tku.d.mts.map +0 -1
  406. package/dist/preview-engine/chunk-FAEWI3LF.mjs +0 -5
  407. package/dist/preview-engine/chunk-I6E3AKLS.mjs +0 -1
  408. package/dist/preview-engine/chunk-PR37RCNO.mjs +0 -1974
  409. package/dist/preview-engine/chunk-YSXMXD3F.mjs +0 -3
  410. package/dist/preview-engine/renderers-2S5ZWL2J.mjs +0 -1
  411. package/dist/preview-engine/renderers-37CN7O4S.mjs +0 -1
  412. package/dist/preview-engine/renderers-3UGG2IMP.mjs +0 -1
  413. package/dist/preview-engine/renderers-7MPBAHYA.mjs +0 -1
  414. package/dist/preview-engine/renderers-AFTYMS3H.mjs +0 -1
  415. package/dist/preview-engine/renderers-AYEWAW7F.mjs +0 -1
  416. package/dist/preview-engine/renderers-BILNWTUC.mjs +0 -228
  417. package/dist/preview-engine/renderers-DUF2CTX6.mjs +0 -1
  418. package/dist/preview-engine/renderers-EIJFIY6L.mjs +0 -1
  419. package/dist/preview-engine/renderers-EOMMSENQ.mjs +0 -1
  420. package/dist/preview-engine/renderers-JXBZPQKP.mjs +0 -1
  421. package/dist/preview-engine/renderers-LD3COS4X.mjs +0 -1
  422. package/dist/preview-engine/renderers-MCTBJEL7.mjs +0 -1
  423. package/dist/preview-engine/renderers-OZGEXW2X.mjs +0 -1
  424. package/dist/preview-engine/renderers-PSEDMUBV.mjs +0 -1
  425. package/dist/preview-engine/renderers-PVUROEGR.mjs +0 -1
  426. package/dist/preview-engine/renderers-QBVVTQV6.mjs +0 -1
  427. package/dist/preview-engine/renderers-R4U2TK6P.mjs +0 -1
  428. package/dist/preview-engine/renderers-RBLNDAO4.mjs +0 -1
  429. package/dist/preview-engine/renderers-RM25AXWZ.mjs +0 -1
  430. package/dist/preview-engine/renderers-RYRFCEYT.mjs +0 -1
  431. package/dist/preview-engine/renderers-SKT7AGGE.mjs +0 -1
  432. package/dist/preview-engine/renderers-SRU6QXLN.mjs +0 -1
  433. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +0 -1
  434. package/dist/preview-engine/renderers-UQHKFGDX.mjs +0 -1
  435. package/dist/preview-engine/renderers-WDV7ENJA.mjs +0 -1
  436. package/dist/preview-engine/renderers-WNBDSSJ3.mjs +0 -1
  437. package/dist/preview-engine/renderers-WTC2RNGU.mjs +0 -1
  438. package/dist/preview-engine/renderers-XVUOO7B6.mjs +0 -1
  439. package/dist/preview-engine/renderers-YHOQUEHD.mjs +0 -1
  440. package/dist/preview-engine/renderers-YPFM5UJO.mjs +0 -1
  441. package/dist/preview-engine/renderers-YW3LBALW.mjs +0 -1
  442. package/dist/program-4mAVgg3c.mjs.map +0 -1
  443. package/dist/renderer-1ymN1FIT.mjs +0 -5
  444. package/dist/renderer-92IAZzBU.d.mts.map +0 -1
  445. package/dist/renderer-B-43EuKb.mjs +0 -5
  446. package/dist/renderer-B-v5ZboU.mjs +0 -5
  447. package/dist/renderer-B9AZ6R1U.mjs.map +0 -1
  448. package/dist/renderer-BBA-iCi-.mjs.map +0 -1
  449. package/dist/renderer-BKF8Sfbg.mjs +0 -3
  450. package/dist/renderer-BTB8ifgH.mjs +0 -5
  451. package/dist/renderer-BYxzR6Hp.mjs +0 -5
  452. package/dist/renderer-BcGhO_Mw.mjs +0 -5
  453. package/dist/renderer-Bk3RgiFg.mjs +0 -5
  454. package/dist/renderer-BvItCxkw.mjs +0 -5
  455. package/dist/renderer-BvcqncI2.mjs +0 -3
  456. package/dist/renderer-CCnfPHqk.mjs +0 -5
  457. package/dist/renderer-CIoWQNaA.mjs +0 -5
  458. package/dist/renderer-CMwQtIIq.mjs +0 -5
  459. package/dist/renderer-CN8kRB90.mjs +0 -6
  460. package/dist/renderer-CPKBDif1.mjs +0 -5
  461. package/dist/renderer-CamsHxEP.mjs +0 -5
  462. package/dist/renderer-CeQormOH.mjs +0 -5
  463. package/dist/renderer-Cex4eMtv.mjs +0 -5
  464. package/dist/renderer-CjyTrNlr.mjs +0 -5
  465. package/dist/renderer-Clv9TO6C.mjs +0 -5
  466. package/dist/renderer-D4LnJk-M.mjs +0 -5
  467. package/dist/renderer-D5OfQ8Ut.mjs +0 -5
  468. package/dist/renderer-DBYssktC.mjs +0 -5
  469. package/dist/renderer-DC-Aj3me.mjs +0 -5
  470. package/dist/renderer-DG97_Aoc.mjs +0 -5
  471. package/dist/renderer-DS4UGjcS.mjs +0 -5
  472. package/dist/renderer-DdG6ibtM.mjs +0 -5
  473. package/dist/renderer-DhZi4f3t.mjs +0 -5
  474. package/dist/renderer-MgLekf6d.mjs +0 -5
  475. package/dist/renderer-Qvs-1lWh.mjs +0 -5
  476. package/dist/renderer-bN7dOErt.mjs +0 -5
  477. package/dist/renderer-jWKVmReU.mjs +0 -5
  478. package/dist/renderer-lk-At57G.mjs +0 -5
  479. package/dist/renderer-qi8Slwfo.mjs +0 -5
  480. package/dist/renderer-qxOH4JH1.mjs +0 -5
  481. package/dist/renderer-t30NpmIl.mjs +0 -5
  482. package/dist/renderer-wKW4HWRx.mjs +0 -5
  483. package/dist/renderer-ydjPm8bp.mjs +0 -5
  484. package/dist/src-WAnxhDYD.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import "./chunk-D7gtBK74.mjs";
2
- import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
3
- import "./dist-Bf0H4lp1.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CevnCkZC.mjs";
2
+ import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
3
+ import "./dist-CDwWQYg3.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bb4WmYYH.mjs";
5
5
 
6
6
  //#region ../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs
7
7
  const OP = "Posterize";
@@ -305,4 +305,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer
305
305
 
306
306
  //#endregion
307
307
  export { PosterizeWebGPURenderer, renderers_default as default };
308
- //# sourceMappingURL=renderer-BcSSAzc4.mjs.map
308
+ //# sourceMappingURL=renderer-BTjveb1Y.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-BcSSAzc4.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\n};\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BTjveb1Y.mjs","names":[],"sources":["../../../nodes/node-posterize/dist/renderers-BFugxgzZ.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Posterize\";\nconst UNIFORM_FLOATS = 76;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 19> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\nfn paletteColor(i : u32) -> vec3<f32> { return u.v[3u + i].rgb; }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet levels = u.v[1].x;\n\tlet palette = u32(u.v[1].y + 0.5);\n\tlet dither = u.v[1].z;\n\tlet pixelSize = u.v[1].w;\n\tlet paletteCount = u.v[2].x;\n\n\tlet R = res();\n\tlet ps = max(pixelSize, 1.0);\n\tlet cellp = floor(in.uv * R / ps);\n\tlet c = texelS(cellp * ps + ps * 0.5);\n\tlet t = bayer8(cellp) - 0.5;\n\tvar rgb = c.rgb;\n\tif (paletteCount > 0.5) {\n\t\trgb = clamp(rgb + t * dither * 0.35, vec3<f32>(0.0), vec3<f32>(1.0));\n\t\tvar best = paletteColor(0u);\n\t\tvar bestD = 1e9;\n\t\tfor (var i = 0u; i < u32(paletteCount); i++) {\n\t\t\tlet pc = paletteColor(i);\n\t\t\tlet d = rgb - pc;\n\t\t\tlet dd = dot(d * d, vec3<f32>(0.3, 0.59, 0.11));\n\t\t\tif (dd < bestD) { bestD = dd; best = pc; }\n\t\t}\n\t\trgb = best;\n\t} else {\n\t\tlet n = max(levels - 1.0, 1.0);\n\t\trgb = clamp(floor(rgb * n + 0.5 + t * dither) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst PALETTES = {\n\tgameboy: [\n\t\t\"#0f380f\",\n\t\t\"#306230\",\n\t\t\"#8bac0f\",\n\t\t\"#9bbc0f\"\n\t],\n\tteletext: [\n\t\t\"#000000\",\n\t\t\"#ff0000\",\n\t\t\"#00ff00\",\n\t\t\"#ffff00\",\n\t\t\"#0000ff\",\n\t\t\"#ff00ff\",\n\t\t\"#00ffff\",\n\t\t\"#ffffff\"\n\t],\n\tcga: [\n\t\t\"#000000\",\n\t\t\"#55ffff\",\n\t\t\"#ff55ff\",\n\t\t\"#ffffff\"\n\t],\n\tpico8: [\n\t\t\"#000000\",\n\t\t\"#1d2b53\",\n\t\t\"#7e2553\",\n\t\t\"#008751\",\n\t\t\"#ab5236\",\n\t\t\"#5f574f\",\n\t\t\"#c2c3c7\",\n\t\t\"#fff1e8\",\n\t\t\"#ff004d\",\n\t\t\"#ffa300\",\n\t\t\"#ffec27\",\n\t\t\"#00e436\",\n\t\t\"#29adff\",\n\t\t\"#83769c\",\n\t\t\"#ff77a8\",\n\t\t\"#ffccaa\"\n\t],\n\tc64: [\n\t\t\"#000000\",\n\t\t\"#ffffff\",\n\t\t\"#880000\",\n\t\t\"#aaffee\",\n\t\t\"#cc44cc\",\n\t\t\"#00cc55\",\n\t\t\"#0000aa\",\n\t\t\"#eeee77\",\n\t\t\"#dd8855\",\n\t\t\"#664400\",\n\t\t\"#ff7777\",\n\t\t\"#333333\",\n\t\t\"#777777\",\n\t\t\"#aaff66\",\n\t\t\"#0088ff\",\n\t\t\"#bbbbbb\"\n\t],\n\tgrayscale: [\n\t\t\"#000000\",\n\t\t\"#555555\",\n\t\t\"#aaaaaa\",\n\t\t\"#ffffff\"\n\t],\n\tsepia: [\n\t\t\"#2b1d0e\",\n\t\t\"#6b4a2b\",\n\t\t\"#b08a5a\",\n\t\t\"#efe0c0\"\n\t]\n};\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.levels, 6);\n\tdata[5] = Math.max(0, [\n\t\t\"none\",\n\t\t\"gameboy\",\n\t\t\"teletext\",\n\t\t\"cga\",\n\t\t\"pico8\",\n\t\t\"c64\",\n\t\t\"grayscale\",\n\t\t\"sepia\",\n\t\t\"custom\"\n\t].indexOf(String(raw.palette ?? \"none\")));\n\tdata[6] = num(raw.dither, 0);\n\tdata[7] = num(raw.pixelSize, 1);\n\tconst paletteName = String(raw.palette ?? \"none\");\n\tconst palette = paletteName === \"custom\" ? raw.colors ?? [] : PALETTES[paletteName] ?? [];\n\tdata[8] = Math.min(palette.length, 16);\n\tpalette.slice(0, 16).forEach((c, i) => {\n\t\tdata.set(hexToRgba(c), 12 + i * 4);\n\t});\n}\nconst PosterizeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PosterizeWebGPURenderer });\n\n//#endregion\nexport { PosterizeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BFugxgzZ.mjs.map"],"mappings":";;;;;;AAIA,MAAM,KAAK;AACX,MAAM,iBAAiB;;AAEvB,MAAM,SAAS,CAAC;;;;;EAKd,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8ErB;AACF,MAAM,WAAW;CAChB,SAAS;EACR;EACA;EACA;EACA;EACA;CACD,UAAU;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,KAAK;EACJ;EACA;EACA;EACA;EACA;CACD,OAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,KAAK;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,WAAW;EACV;EACA;EACA;EACA;EACA;CACD,OAAO;EACN;EACA;EACA;EACA;EACA;CACD;AACD,MAAM,YAAY,WAAW,YAAY;CACxC,QAAQ,wBAAwB,QAAQ;EACvC;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,SAAS;CAClB,2BAA2B,IAAI,KAAK;CACpC,SAAS,OAAO,cAAc;EAC7B,WAAW;EACX,WAAW;EACX,cAAc;EACd,cAAc;EACd,CAAC;CACF,EAAE;AACH,SAAS,aAAa,QAAQ,QAAQ;CACrC,MAAM,IAAI,UAAU,OAAO;CAC3B,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO;AAClC,KAAI,CAAC,MAAM;AACV,SAAO,OAAO,KAAK,MAAM,MAAM;GAC9B,MAAM,SAAS,OAAO,mBAAmB;IACxC;IACA,OAAO,GAAG,GAAG,GAAG,EAAE;IAClB,CAAC;AACF,UAAO,OAAO,qBAAqB;IAClC,OAAO,GAAG,GAAG,GAAG;IAChB,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;IACrE,QAAQ;KACP;KACA,YAAY;KACZ;IACD,UAAU;KACT;KACA,YAAY;KACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE,UAAU,kBAAkB;IACzC,CAAC;IACD;AACF,IAAE,UAAU,IAAI,QAAQ,KAAK;;AAE9B,QAAO;;AAER,SAAS,IAAI,GAAG,UAAU;CACzB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,EAAE;AAC/C,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;AAEjC,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG;AACnC,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAC3E,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG;EACvB;;;AAGF,SAAS,KAAK,KAAK,MAAM,MAAM,OAAO;AACrC,MAAK,KAAK,EAAE;AACZ,MAAK,KAAK;AACV,MAAK,KAAK;AACV,MAAK,KAAK,IAAI,IAAI,QAAQ,EAAE;AAC5B,MAAK,KAAK,KAAK,IAAI,GAAG;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,QAAQ,OAAO,IAAI,WAAW,OAAO,CAAC,CAAC;AACzC,MAAK,KAAK,IAAI,IAAI,QAAQ,EAAE;AAC5B,MAAK,KAAK,IAAI,IAAI,WAAW,EAAE;CAC/B,MAAM,cAAc,OAAO,IAAI,WAAW,OAAO;CACjD,MAAM,UAAU,gBAAgB,WAAW,IAAI,UAAU,EAAE,GAAG,SAAS,gBAAgB,EAAE;AACzF,MAAK,KAAK,KAAK,IAAI,QAAQ,QAAQ,GAAG;AACtC,SAAQ,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,MAAM;AACtC,OAAK,IAAI,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE;GACjC;;AAEH,MAAM,0BAA0B,OAAO,SAAS;CAC/C,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,GAAI;CACnB,MAAM,QAAQ,MAAM,cAAc,WAAW;AAC7C,KAAI,CAAC,MAAO;AACZ,MAAK,KAAK;CACV,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ,KAAK,MAAM,MAAM,oBAAoB,MAAM,SAAS,EAAE;CACpE,MAAM,MAAM,GAAG,QAAQ,kBAAkB,GAAG,OAAO,gBAAgB;EAClE;EACA;EACA,MAAM,QAAQ;EACd,CAAC,GAAG;CACL,MAAM,OAAO,IAAI,aAAa,eAAe;AAC7C,MAAK,KAAK,MAAM,QAAQ,KAAK,MAAM;CACnC,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,MAAM;CACnE,MAAM,SAAS,IAAI;CACnB,MAAM,IAAI,UAAU,OAAO;CAC3B,MAAM,YAAY,aAAa,QAAQ,IAAI,SAAS,OAAO;CAC3D,MAAM,MAAM,IAAI,SAAS,mBAAmB,KAAK;CACjD,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;EACjC,MAAM,MAAM,IAAI,SAAS,oBAAoB,aAAa,cAAc;GACvE;GACA;GACA;GACA,GAAG,MAAM,mBAAmB,EAAE;GAC9B,CAAC;AACF,qBAAmB,SAAS,IAAI,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB;GAC/E,QAAQ,EAAE;GACV,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK;KACzB;IACD;KACC,SAAS;KACT,UAAU,SAAS,YAAY;KAC/B;IACD;KACC,SAAS;KACT,UAAU,KAAK,YAAY;KAC3B;IACD;KACC,SAAS;KACT,UAAU,EAAE;KACZ;IACD;GACD,CAAC,CAAC,CAAC;AACJ,SAAO;;AAER,qBAAoB,MAAM,KAAK;;AAKhC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./chunk-D7gtBK74.mjs";
2
+ import "./dist-CDwWQYg3.mjs";
3
+ import { t as renderers_default } from "./renderer-Cqp_TUl_.mjs";
4
+
5
+ export { renderers_default as default };
@@ -1,6 +1,6 @@
1
- import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
2
- import { Fn as signalRegistry } from "./dist-Bf0H4lp1.mjs";
3
- import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, 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 } from "./renderer-BgmO1Dzw.mjs";
2
+ import { In as signalRegistry } from "./dist-CDwWQYg3.mjs";
3
+ import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bb4WmYYH.mjs";
4
4
 
5
5
  //#region ../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs
6
6
  const STRENGTH_MIN = 0;
@@ -249,4 +249,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURe
249
249
 
250
250
  //#endregion
251
251
  export { renderers_default as t };
252
- //# sourceMappingURL=renderer-4P-DCjk2.mjs.map
252
+ //# sourceMappingURL=renderer-Bbkf5EIi.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-4P-DCjk2.mjs","names":[],"sources":["../../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst STRENGTH_MIN = 0;\nconst STRENGTH_MAX = 500;\nfunction clamp(value, min, max) {\n\treturn Math.min(max, Math.max(min, value));\n}\nconst DISPLACEMENT_MAP_SHADER = `\nstruct DisplacementUniforms {\n strengthX : f32,\n strengthY : f32,\n xChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n yChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n\n wrapMode : f32, // 0=Clamp, 1=Repeat, 2=Mirror\n hasSignalX : f32,\n hasSignalY : f32,\n _pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : DisplacementUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n@group(2) @binding(0) var mapTex : texture_2d<f32>;\n@group(2) @binding(1) var mapSamp : sampler;\n@group(3) @binding(0) var sigXTex : texture_2d<f32>;\n@group(3) @binding(1) var sigYTex : texture_2d<f32>;\n@group(3) @binding(2) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color: vec4<f32>, channel: f32) -> f32 {\n if (channel < 0.5) { return color.r; }\n if (channel < 1.5) { return color.g; }\n if (channel < 2.5) { return color.b; }\n if (channel < 3.5) { return color.a; }\n // Luminance\n return dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn applyWrap(coord: f32, mode: f32) -> f32 {\n if (mode < 0.5) {\n // Clamp\n return clamp(coord, 0.0, 1.0);\n }\n if (mode < 1.5) {\n // Repeat\n return fract(coord);\n }\n // Mirror\n let t = fract(coord * 0.5) * 2.0;\n if (t > 1.0) {\n return 2.0 - t;\n }\n return t;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let mapColor = textureSampleLevel(mapTex, mapSamp, in.uv, 0.0);\n\n // Extract displacement values from chosen channels, centered around 0.5 and gated by alpha\n // NOTE (P3, not changed here): this yields a max offset of strength/2 px at\n // either extreme (peak-to-peak swing == strength). Confirm with design whether\n // \"strength in pixels\" should mean peak amplitude instead — see review doc.\n let dispX = (extractChannel(mapColor, u.xChannel) - 0.5) * mapColor.a;\n let dispY = (extractChannel(mapColor, u.yChannel) - 0.5) * mapColor.a;\n\n // Get strength, potentially from signal textures\n var sX = u.strengthX;\n var sY = u.strengthY;\n if (u.hasSignalX > 0.5) {\n sX = textureSampleLevel(sigXTex, sigSamp, in.uv, 0.0).r;\n }\n if (u.hasSignalY > 0.5) {\n sY = textureSampleLevel(sigYTex, sigSamp, in.uv, 0.0).r;\n }\n\n // Compute displacement in UV space (strength is in pixels, convert to UV)\n let srcDims = vec2<f32>(textureDimensions(srcTex));\n let offset = vec2<f32>(\n dispX * sX / srcDims.x,\n dispY * sY / srcDims.y,\n );\n\n let displaced = vec2<f32>(\n applyWrap(in.uv.x + offset.x, u.wrapMode),\n applyWrap(in.uv.y + offset.y, u.wrapMode),\n );\n\n return textureSampleLevel(srcTex, srcSamp, displaced, 0.0);\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmapTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getDisplacementResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `displacement_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `displacement_${format}.wgsl`,\n\t\t\tcode: DISPLACEMENT_MAP_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `DisplacementMapPipeline_${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.mapTextureLayout,\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\tmapTextureLayout: layouts.mapTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction channelToFloat(ch) {\n\tswitch (ch) {\n\t\tcase \"Green\": return 1;\n\t\tcase \"Blue\": return 2;\n\t\tcase \"Alpha\": return 3;\n\t\tcase \"Luminance\": return 4;\n\t\tdefault: return 0;\n\t}\n}\nfunction wrapModeToFloat(mode) {\n\tswitch (mode) {\n\t\tcase \"Repeat\": return 1;\n\t\tcase \"Mirror\": return 2;\n\t\tdefault: return 0;\n\t}\n}\nfunction resolveSignalField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = clamp(Number(signalInput.outputItem.data ?? defaultValue), STRENGTH_MIN, STRENGTH_MAX);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst DisplacementMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"DisplacementMap\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tconst mapMedia = op.mapMedia;\n\tif (!sourceMedia || !mapMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst strengthXInfo = resolveSignalField(op, \"strengthX\", 50);\n\tconst strengthYInfo = resolveSignalField(op, \"strengthY\", 50);\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-c0`\n\t} });\n\targs.pass.end();\n\tconst { texture: mapTex } = await drawChildToTexture(args, mapMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: mapMedia,\n\t\t\trenderId: `${props.renderId}-c1`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], srcTex]\n\t\t},\n\t\texclude: [srcTex]\n\t});\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, mapTextureLayout: mapLayout, signalTextureLayout: sigLayout } = getDisplacementResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet sigXView;\n\tlet sigYView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (strengthXInfo.hasSignal && strengthXInfo.sd) sigXView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthXInfo.sd.nodeId ?? \"displace_sx_sig\", elapsedSeconds, durationSeconds, strengthXInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigXView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tif (strengthYInfo.hasSignal && strengthYInfo.sd) sigYView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthYInfo.sd.nodeId ?? \"displace_sy_sig\", elapsedSeconds, durationSeconds, strengthYInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigYView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformData[0] = strengthXInfo.value;\n\tuniformData[1] = strengthYInfo.value;\n\tuniformData[2] = channelToFloat(op.xChannel);\n\tuniformData[3] = channelToFloat(op.yChannel);\n\tuniformData[4] = wrapModeToFloat(op.wrapMode);\n\tuniformData[5] = strengthXInfo.hasSignal ? 1 : 0;\n\tuniformData[6] = strengthYInfo.hasSignal ? 1 : 0;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tmapTex,\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, mapLayout, mapTex, 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: sigXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DzMCAYTg.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-Bbkf5EIi.mjs","names":[],"sources":["../../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst STRENGTH_MIN = 0;\nconst STRENGTH_MAX = 500;\nfunction clamp(value, min, max) {\n\treturn Math.min(max, Math.max(min, value));\n}\nconst DISPLACEMENT_MAP_SHADER = `\nstruct DisplacementUniforms {\n strengthX : f32,\n strengthY : f32,\n xChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n yChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n\n wrapMode : f32, // 0=Clamp, 1=Repeat, 2=Mirror\n hasSignalX : f32,\n hasSignalY : f32,\n _pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : DisplacementUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n@group(2) @binding(0) var mapTex : texture_2d<f32>;\n@group(2) @binding(1) var mapSamp : sampler;\n@group(3) @binding(0) var sigXTex : texture_2d<f32>;\n@group(3) @binding(1) var sigYTex : texture_2d<f32>;\n@group(3) @binding(2) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color: vec4<f32>, channel: f32) -> f32 {\n if (channel < 0.5) { return color.r; }\n if (channel < 1.5) { return color.g; }\n if (channel < 2.5) { return color.b; }\n if (channel < 3.5) { return color.a; }\n // Luminance\n return dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn applyWrap(coord: f32, mode: f32) -> f32 {\n if (mode < 0.5) {\n // Clamp\n return clamp(coord, 0.0, 1.0);\n }\n if (mode < 1.5) {\n // Repeat\n return fract(coord);\n }\n // Mirror\n let t = fract(coord * 0.5) * 2.0;\n if (t > 1.0) {\n return 2.0 - t;\n }\n return t;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let mapColor = textureSampleLevel(mapTex, mapSamp, in.uv, 0.0);\n\n // Extract displacement values from chosen channels, centered around 0.5 and gated by alpha\n // NOTE (P3, not changed here): this yields a max offset of strength/2 px at\n // either extreme (peak-to-peak swing == strength). Confirm with design whether\n // \"strength in pixels\" should mean peak amplitude instead — see review doc.\n let dispX = (extractChannel(mapColor, u.xChannel) - 0.5) * mapColor.a;\n let dispY = (extractChannel(mapColor, u.yChannel) - 0.5) * mapColor.a;\n\n // Get strength, potentially from signal textures\n var sX = u.strengthX;\n var sY = u.strengthY;\n if (u.hasSignalX > 0.5) {\n sX = textureSampleLevel(sigXTex, sigSamp, in.uv, 0.0).r;\n }\n if (u.hasSignalY > 0.5) {\n sY = textureSampleLevel(sigYTex, sigSamp, in.uv, 0.0).r;\n }\n\n // Compute displacement in UV space (strength is in pixels, convert to UV)\n let srcDims = vec2<f32>(textureDimensions(srcTex));\n let offset = vec2<f32>(\n dispX * sX / srcDims.x,\n dispY * sY / srcDims.y,\n );\n\n let displaced = vec2<f32>(\n applyWrap(in.uv.x + offset.x, u.wrapMode),\n applyWrap(in.uv.y + offset.y, u.wrapMode),\n );\n\n return textureSampleLevel(srcTex, srcSamp, displaced, 0.0);\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmapTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getDisplacementResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `displacement_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `displacement_${format}.wgsl`,\n\t\t\tcode: DISPLACEMENT_MAP_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `DisplacementMapPipeline_${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.mapTextureLayout,\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\tmapTextureLayout: layouts.mapTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction channelToFloat(ch) {\n\tswitch (ch) {\n\t\tcase \"Green\": return 1;\n\t\tcase \"Blue\": return 2;\n\t\tcase \"Alpha\": return 3;\n\t\tcase \"Luminance\": return 4;\n\t\tdefault: return 0;\n\t}\n}\nfunction wrapModeToFloat(mode) {\n\tswitch (mode) {\n\t\tcase \"Repeat\": return 1;\n\t\tcase \"Mirror\": return 2;\n\t\tdefault: return 0;\n\t}\n}\nfunction resolveSignalField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = clamp(Number(signalInput.outputItem.data ?? defaultValue), STRENGTH_MIN, STRENGTH_MAX);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst DisplacementMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"DisplacementMap\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tconst mapMedia = op.mapMedia;\n\tif (!sourceMedia || !mapMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst strengthXInfo = resolveSignalField(op, \"strengthX\", 50);\n\tconst strengthYInfo = resolveSignalField(op, \"strengthY\", 50);\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-c0`\n\t} });\n\targs.pass.end();\n\tconst { texture: mapTex } = await drawChildToTexture(args, mapMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: mapMedia,\n\t\t\trenderId: `${props.renderId}-c1`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], srcTex]\n\t\t},\n\t\texclude: [srcTex]\n\t});\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, mapTextureLayout: mapLayout, signalTextureLayout: sigLayout } = getDisplacementResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet sigXView;\n\tlet sigYView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (strengthXInfo.hasSignal && strengthXInfo.sd) sigXView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthXInfo.sd.nodeId ?? \"displace_sx_sig\", elapsedSeconds, durationSeconds, strengthXInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigXView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tif (strengthYInfo.hasSignal && strengthYInfo.sd) sigYView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthYInfo.sd.nodeId ?? \"displace_sy_sig\", elapsedSeconds, durationSeconds, strengthYInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigYView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformData[0] = strengthXInfo.value;\n\tuniformData[1] = strengthYInfo.value;\n\tuniformData[2] = channelToFloat(op.xChannel);\n\tuniformData[3] = channelToFloat(op.yChannel);\n\tuniformData[4] = wrapModeToFloat(op.wrapMode);\n\tuniformData[5] = strengthXInfo.hasSignal ? 1 : 0;\n\tuniformData[6] = strengthYInfo.hasSignal ? 1 : 0;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tmapTex,\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, mapLayout, mapTex, 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: sigXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DzMCAYTg.mjs.map"],"mappings":"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"}
@@ -247,6 +247,15 @@ const webgpuRegistry = (() => {
247
247
  function registerWebGPURenderer(op, renderer) {
248
248
  webgpuRegistry.register(op, renderer);
249
249
  }
250
+ /**
251
+ * How far an operation's effect draws past its pixels, from its registered
252
+ * renderer; `null` when unknown: no renderer, no `reach`, or no answer.
253
+ */
254
+ function effectReach(operation) {
255
+ const op = operation.op;
256
+ if (typeof op !== "string") return null;
257
+ return webgpuRegistry.get(op)?.reach?.(operation) ?? null;
258
+ }
250
259
  registerWebGPURenderer("TextureSource", (args) => {
251
260
  const op = args.props.virtualMedia.operation;
252
261
  if (op?.sourceTexture) args.ctx.renderer.drawTexture(args.pass, op.sourceTexture, {
@@ -273,5 +282,5 @@ const audioRegistry = (() => {
273
282
  })();
274
283
 
275
284
  //#endregion
276
- export { resolveFrameNumber as a, solveHomography as c, registerWebGPURenderer as i, unwrapFrameParam as l, defineRenderer as n, resolveHandleParam as o, isHandleConnected as r, resolveSignalField as s, audioRegistry as t, webgpuRegistry as u };
277
- //# sourceMappingURL=renderer-C9r0-KY4.mjs.map
285
+ export { registerWebGPURenderer as a, resolveSignalField as c, webgpuRegistry as d, isHandleConnected as i, solveHomography as l, defineRenderer as n, resolveFrameNumber as o, effectReach as r, resolveHandleParam as s, audioRegistry as t, unwrapFrameParam as u };
286
+ //# sourceMappingURL=renderer-BgmO1Dzw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-C9r0-KY4.mjs","names":[],"sources":["../../node-sdk/dist/renderer.mjs"],"sourcesContent":["import { isSignal, resolveBoolean, resolveNumber, resolveParam, resolveString } from \"@framefields/core\";\n\n//#region renderer/homography.ts\n/**\n* Computes an 8-parameter 3x3 homography matrix mapping destination coordinates (quad)\n* to normalized source coordinates (unit square [0, 1]^2).\n*\n* The homography H maps destination (x, y) to source (u, v):\n* u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n* v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n*\n* Resulting array: [h00, h01, h02, h10, h11, h12, h20, h21, 1.0]\n*/\nfunction solveHomography(dstPoints, srcPoints = [\n\t{\n\t\tx: 0,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 0,\n\t\ty: 1\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 1\n\t}\n]) {\n\tconst A = [];\n\tconst B = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tconst xi = dstPoints[i]?.x ?? 0;\n\t\tconst yi = dstPoints[i]?.y ?? 0;\n\t\tconst ui = srcPoints[i]?.x ?? 0;\n\t\tconst vi = srcPoints[i]?.y ?? 0;\n\t\tA.push([\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-xi * ui,\n\t\t\t-yi * ui\n\t\t]);\n\t\tB.push(ui);\n\t\tA.push([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t-xi * vi,\n\t\t\t-yi * vi\n\t\t]);\n\t\tB.push(vi);\n\t}\n\tconst n = 8;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxRow = i;\n\t\tlet maxVal = Math.abs(A[i][i]);\n\t\tfor (let k = i + 1; k < n; k++) if (Math.abs(A[k][i]) > maxVal) {\n\t\t\tmaxVal = Math.abs(A[k][i]);\n\t\t\tmaxRow = k;\n\t\t}\n\t\tconst tempRow = A[i];\n\t\tA[i] = A[maxRow];\n\t\tA[maxRow] = tempRow;\n\t\tconst tempB = B[i];\n\t\tB[i] = B[maxRow];\n\t\tB[maxRow] = tempB;\n\t\tconst pivot = A[i][i];\n\t\tif (Math.abs(pivot) < 1e-12) A[i][i] = pivot < 0 ? -1e-12 : 1e-12;\n\t\tfor (let k = i + 1; k < n; k++) {\n\t\t\tconst factor = A[k][i] / A[i][i];\n\t\t\tfor (let j = i; j < n; j++) A[k][j] -= factor * A[i][j];\n\t\t\tB[k] -= factor * B[i];\n\t\t}\n\t}\n\tconst h = new Array(8).fill(0);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i][j] * h[j];\n\t\th[i] = sum / A[i][i];\n\t}\n\treturn [\n\t\th[0],\n\t\th[1],\n\t\th[2],\n\t\th[3],\n\t\th[4],\n\t\th[5],\n\t\th[6],\n\t\th[7],\n\t\t1\n\t];\n}\n\n//#endregion\n//#region renderer/index.ts\n/**\n* A numeric node parameter at `frame`: a number, a signal-like `get(ctx)` or\n* `{ value }`, a `(ctx) => number` function, or anything `Number()` accepts;\n* `fallback` when none of those yields a finite number.\n*/\nfunction resolveFrameNumber(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* A static node parameter at `frame`: calls `get(ctx)` / `(frame, fps)`\n* functions and reads `{ value }` wrappers, keeping a signal's GPU texture\n* binding when it has one. Anything else is returned as-is.\n*/\nfunction unwrapFrameParam(raw, frame, fps) {\n\tif (raw === void 0 || raw === null) return { value: raw };\n\tif (typeof raw === \"function\") return { value: raw(frame, fps) };\n\tif (typeof raw !== \"object\") return { value: raw };\n\tconst obj = raw;\n\tif (typeof obj.get === \"function\") return { value: obj.get({\n\t\tframe,\n\t\tfps\n\t}) };\n\tif (\"value\" in obj) {\n\t\tconst sig = raw;\n\t\treturn {\n\t\t\tvalue: sig.value,\n\t\t\tgpuTextureView: sig.gpuBinding?.textureView\n\t\t};\n\t}\n\treturn { value: raw };\n}\n/**\n* A numeric parameter fed through `handleId`: a connected Number (clamped), a\n* connected Signal (sampled on the GPU, `val` stays `fallbackVal`), or else\n* `fallbackVal` clamped to [clampMin, clampMax].\n*/\nfunction resolveHandleParam(inputs, handleId, fallbackVal, clampMin, clampMax) {\n\tconst clamp = (v) => Math.max(clampMin, Math.min(clampMax, v));\n\tconst input = handleId ? inputs?.[handleId] : void 0;\n\tif (input?.connectionValid) {\n\t\tconst outputItem = input.outputItem;\n\t\tif (outputItem?.type === \"Number\") return {\n\t\t\tval: clamp(typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\tval: fallbackVal,\n\t\t\thasStaticSig: true,\n\t\t\tsd: outputItem.data,\n\t\t\thandleId\n\t\t};\n\t}\n\treturn {\n\t\tval: clamp(fallbackVal),\n\t\thasStaticSig: false,\n\t\tsd: null,\n\t\thandleId\n\t};\n}\n/**\n* A numeric field `fieldName` of a node operation, fed through its\n* `${fieldName}HandleId` input: a connected Signal/Numeric (`sd`, sampled on\n* the GPU; `value` is its offset), a connected Number, or the operation's own\n* value — each clamped to [minVal, maxVal].\n*/\nfunction resolveSignalField(op, fieldName, defaultValue, minVal = Number.NEGATIVE_INFINITY, maxVal = Number.POSITIVE_INFINITY) {\n\tconst clamp = (v) => Math.max(minVal, Math.min(maxVal, v));\n\tconst fields = op;\n\tconst handleId = fields[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst outputType = signalInput?.connectionValid ? signalInput.outputItem?.type : void 0;\n\tconst hasSignal = outputType === \"Signal\" || outputType === \"Numeric\";\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) {\n\t\tconst raw = outputType === \"Number\" ? signalInput?.outputItem?.data : fields[fieldName];\n\t\tvalue = clamp(Number(raw ?? defaultValue));\n\t} else if (sd) value = clamp(Number(sd.offset ?? defaultValue));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\n/**\n* Whether the handle whose id is stored at `op[handleIdKey]` has a valid\n* Signal or Number connection.\n*/\nfunction isHandleConnected(op, handleIdKey) {\n\tconst handleId = op[handleIdKey];\n\tif (typeof handleId !== \"string\" || !handleId) return false;\n\tconst input = op.inputs?.[handleId];\n\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n}\nfunction defineRenderer(plugin) {\n\treturn Object.freeze(plugin);\n}\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"framefields.webgpuRegistry\");\nvar WebGPURegistry = class {\n\trenderers = /* @__PURE__ */ new Map();\n\tregister(op, renderer) {\n\t\tthis.renderers.set(op, renderer);\n\t}\n\tget(op) {\n\t\treturn this.renderers.get(op);\n\t}\n\thas(op) {\n\t\treturn this.renderers.has(op);\n\t}\n};\nconst webgpuRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_WEBGPU_REGISTRY_KEY]) g[GLOBAL_WEBGPU_REGISTRY_KEY] = new WebGPURegistry();\n\treturn g[GLOBAL_WEBGPU_REGISTRY_KEY];\n})();\nfunction registerWebGPURenderer(op, renderer) {\n\twebgpuRegistry.register(op, renderer);\n}\nregisterWebGPURenderer(\"TextureSource\", (args) => {\n\tconst op = args.props.virtualMedia.operation;\n\tif (op?.sourceTexture) args.ctx.renderer.drawTexture(args.pass, op.sourceTexture, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: args.targetWidth,\n\t\theight: args.targetHeight\n\t}, { opacity: Number(op.opacity ?? 1) });\n});\nvar AudioProcessorRegistry = class {\n\tprocessors = /* @__PURE__ */ new Map();\n\tregister(opType, processor) {\n\t\tthis.processors.set(opType, processor);\n\t}\n\tget(opType) {\n\t\treturn this.processors.get(opType) || null;\n\t}\n};\nconst GLOBAL_AUDIO_KEY = Symbol.for(\"framefields.audioRegistry\");\nconst audioRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_AUDIO_KEY]) g[GLOBAL_AUDIO_KEY] = new AudioProcessorRegistry();\n\treturn g[GLOBAL_AUDIO_KEY];\n})();\n\n//#endregion\nexport { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=renderer.mjs.map"],"mappings":";;;;;;;;;;;AAaA,SAAS,gBAAgB,WAAW,YAAY;CAC/C;EACC,GAAG;EACH,GAAG;EACH;CACD;EACC,GAAG;EACH,GAAG;EACH;CACD;EACC,GAAG;EACH,GAAG;EACH;CACD;EACC,GAAG;EACH,GAAG;EACH;CACD,EAAE;CACF,MAAM,IAAI,EAAE;CACZ,MAAM,IAAI,EAAE;AACZ,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,MAAM,KAAK,UAAU,IAAI,KAAK;EAC9B,MAAM,KAAK,UAAU,IAAI,KAAK;EAC9B,MAAM,KAAK,UAAU,IAAI,KAAK;EAC9B,MAAM,KAAK,UAAU,IAAI,KAAK;AAC9B,IAAE,KAAK;GACN;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,KAAK;GACN,CAAC,KAAK;GACN,CAAC;AACF,IAAE,KAAK,GAAG;AACV,IAAE,KAAK;GACN;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,KAAK;GACN,CAAC,KAAK;GACN,CAAC;AACF,IAAE,KAAK,GAAG;;CAEX,MAAM,IAAI;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC3B,IAAI,SAAS;EACb,IAAI,SAAS,KAAK,IAAI,EAAE,GAAG,GAAG;AAC9B,OAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAK,KAAI,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,QAAQ;AAC/D,YAAS,KAAK,IAAI,EAAE,GAAG,GAAG;AAC1B,YAAS;;EAEV,MAAM,UAAU,EAAE;AAClB,IAAE,KAAK,EAAE;AACT,IAAE,UAAU;EACZ,MAAM,QAAQ,EAAE;AAChB,IAAE,KAAK,EAAE;AACT,IAAE,UAAU;EACZ,MAAM,QAAQ,EAAE,GAAG;AACnB,MAAI,KAAK,IAAI,MAAM,GAAG,MAAO,GAAE,GAAG,KAAK,QAAQ,IAAI,SAAS;AAC5D,OAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC/B,MAAM,SAAS,EAAE,GAAG,KAAK,EAAE,GAAG;AAC9B,QAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAK,GAAE,GAAG,MAAM,SAAS,EAAE,GAAG;AACrD,KAAE,MAAM,SAAS,EAAE;;;CAGrB,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,KAAK,EAAE;AAC9B,MAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAChC,IAAI,MAAM,EAAE;AACZ,OAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAK,QAAO,EAAE,GAAG,KAAK,EAAE;AACnD,IAAE,KAAK,MAAM,EAAE,GAAG;;AAEnB,QAAO;EACN,EAAE;EACF,EAAE;EACF,EAAE;EACF,EAAE;EACF,EAAE;EACF,EAAE;EACF,EAAE;EACF,EAAE;EACF;EACA;;;;;;;AAUF,SAAS,mBAAmB,KAAK,UAAU,OAAO,KAAK;AACtD,KAAI,QAAQ,KAAK,KAAK,QAAQ,KAAM,QAAO;AAC3C,KAAI,OAAO,QAAQ,SAAU,QAAO,OAAO,SAAS,IAAI,GAAG,MAAM;AACjE,KAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC5C,MAAI,SAAS,OAAO,OAAO,IAAI,QAAQ,WAAY,KAAI;GACtD,MAAM,MAAM,IAAI,IAAI;IACnB;IACA;IACA,MAAM,MAAM,IAAI,QAAQ,MAAM;IAC9B,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW,MAAM,IAAI,IAAI,MAAM;IAC/B,CAAC;GACF,MAAM,MAAM,OAAO,IAAI;AACvB,OAAI,OAAO,SAAS,IAAI,CAAE,QAAO;UAC1B;AACR,MAAI,WAAW,KAAK;GACnB,MAAM,MAAM,OAAO,IAAI,MAAM;AAC7B,OAAI,OAAO,SAAS,IAAI,CAAE,QAAO;;;AAGnC,KAAI,OAAO,QAAQ,WAAY,KAAI;EAClC,MAAM,MAAM,OAAO,IAAI;GACtB;GACA;GACA,MAAM,MAAM,IAAI,QAAQ,MAAM;GAC9B,CAAC,CAAC;AACH,MAAI,OAAO,SAAS,IAAI,CAAE,QAAO;SAC1B;CACR,MAAM,IAAI,OAAO,IAAI;AACrB,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;;;;;;AAOjC,SAAS,iBAAiB,KAAK,OAAO,KAAK;AAC1C,KAAI,QAAQ,KAAK,KAAK,QAAQ,KAAM,QAAO,EAAE,OAAO,KAAK;AACzD,KAAI,OAAO,QAAQ,WAAY,QAAO,EAAE,OAAO,IAAI,OAAO,IAAI,EAAE;AAChE,KAAI,OAAO,QAAQ,SAAU,QAAO,EAAE,OAAO,KAAK;CAClD,MAAM,MAAM;AACZ,KAAI,OAAO,IAAI,QAAQ,WAAY,QAAO,EAAE,OAAO,IAAI,IAAI;EAC1D;EACA;EACA,CAAC,EAAE;AACJ,KAAI,WAAW,KAAK;EACnB,MAAM,MAAM;AACZ,SAAO;GACN,OAAO,IAAI;GACX,gBAAgB,IAAI,YAAY;GAChC;;AAEF,QAAO,EAAE,OAAO,KAAK;;;;;;;AAOtB,SAAS,mBAAmB,QAAQ,UAAU,aAAa,UAAU,UAAU;CAC9E,MAAM,SAAS,MAAM,KAAK,IAAI,UAAU,KAAK,IAAI,UAAU,EAAE,CAAC;CAC9D,MAAM,QAAQ,WAAW,SAAS,YAAY,KAAK;AACnD,KAAI,OAAO,iBAAiB;EAC3B,MAAM,aAAa,MAAM;AACzB,MAAI,YAAY,SAAS,SAAU,QAAO;GACzC,KAAK,MAAM,OAAO,WAAW,SAAS,WAAW,WAAW,OAAO,WAAW,MAAM,SAAS,YAAY;GACzG,cAAc;GACd,IAAI;GACJ;GACA;AACD,MAAI,YAAY,SAAS,YAAY,WAAW,KAAM,QAAO;GAC5D,KAAK;GACL,cAAc;GACd,IAAI,WAAW;GACf;GACA;;AAEF,QAAO;EACN,KAAK,MAAM,YAAY;EACvB,cAAc;EACd,IAAI;EACJ;EACA;;;;;;;;AAQF,SAAS,mBAAmB,IAAI,WAAW,cAAc,SAAS,OAAO,mBAAmB,SAAS,OAAO,mBAAmB;CAC9H,MAAM,SAAS,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,EAAE,CAAC;CAC1D,MAAM,SAAS;CACf,MAAM,WAAW,OAAO,GAAG,UAAU;CACrC,MAAM,cAAc,WAAW,GAAG,SAAS,YAAY;CACvD,MAAM,aAAa,aAAa,kBAAkB,YAAY,YAAY,OAAO,KAAK;CACtF,MAAM,YAAY,eAAe,YAAY,eAAe;CAC5D,MAAM,KAAK,aAAa,aAAa,YAAY,OAAO,YAAY,WAAW,OAAO;CACtF,IAAI,QAAQ;AACZ,KAAI,CAAC,WAAW;EACf,MAAM,MAAM,eAAe,WAAW,aAAa,YAAY,OAAO,OAAO;AAC7E,UAAQ,MAAM,OAAO,OAAO,aAAa,CAAC;YAChC,GAAI,SAAQ,MAAM,OAAO,GAAG,UAAU,aAAa,CAAC;AAC/D,QAAO;EACN;EACA;EACA;EACA;;;;;;AAMF,SAAS,kBAAkB,IAAI,aAAa;CAC3C,MAAM,WAAW,GAAG;AACpB,KAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;CACtD,MAAM,QAAQ,GAAG,SAAS;AAC1B,QAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;AAEzI,SAAS,eAAe,QAAQ;AAC/B,QAAO,OAAO,OAAO,OAAO;;AAE7B,MAAM,6BAA6B,OAAO,IAAI,6BAA6B;AAC3E,IAAI,iBAAiB,MAAM;CAC1B,4BAA4B,IAAI,KAAK;CACrC,SAAS,IAAI,UAAU;AACtB,OAAK,UAAU,IAAI,IAAI,SAAS;;CAEjC,IAAI,IAAI;AACP,SAAO,KAAK,UAAU,IAAI,GAAG;;CAE9B,IAAI,IAAI;AACP,SAAO,KAAK,UAAU,IAAI,GAAG;;;AAG/B,MAAM,wBAAwB;CAC7B,MAAM,IAAI;AACV,KAAI,CAAC,EAAE,4BAA6B,GAAE,8BAA8B,IAAI,gBAAgB;AACxF,QAAO,EAAE;IACN;AACJ,SAAS,uBAAuB,IAAI,UAAU;AAC7C,gBAAe,SAAS,IAAI,SAAS;;AAEtC,uBAAuB,kBAAkB,SAAS;CACjD,MAAM,KAAK,KAAK,MAAM,aAAa;AACnC,KAAI,IAAI,cAAe,MAAK,IAAI,SAAS,YAAY,KAAK,MAAM,GAAG,eAAe;EACjF,GAAG;EACH,GAAG;EACH,OAAO,KAAK;EACZ,QAAQ,KAAK;EACb,EAAE,EAAE,SAAS,OAAO,GAAG,WAAW,EAAE,EAAE,CAAC;EACvC;AACF,IAAI,yBAAyB,MAAM;CAClC,6BAA6B,IAAI,KAAK;CACtC,SAAS,QAAQ,WAAW;AAC3B,OAAK,WAAW,IAAI,QAAQ,UAAU;;CAEvC,IAAI,QAAQ;AACX,SAAO,KAAK,WAAW,IAAI,OAAO,IAAI;;;AAGxC,MAAM,mBAAmB,OAAO,IAAI,4BAA4B;AAChE,MAAM,uBAAuB;CAC5B,MAAM,IAAI;AACV,KAAI,CAAC,EAAE,kBAAmB,GAAE,oBAAoB,IAAI,wBAAwB;AAC5E,QAAO,EAAE;IACN"}
1
+ {"version":3,"file":"renderer-BgmO1Dzw.mjs","names":[],"sources":["../../node-sdk/dist/renderer.mjs"],"sourcesContent":["import { isSignal, resolveBoolean, resolveNumber, resolveParam, resolveString } from \"@framefields/core\";\n\n//#region renderer/homography.ts\n/**\n* Computes an 8-parameter 3x3 homography matrix mapping destination coordinates (quad)\n* to normalized source coordinates (unit square [0, 1]^2).\n*\n* The homography H maps destination (x, y) to source (u, v):\n* u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n* v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n*\n* Resulting array: [h00, h01, h02, h10, h11, h12, h20, h21, 1.0]\n*/\nfunction solveHomography(dstPoints, srcPoints = [\n\t{\n\t\tx: 0,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 0\n\t},\n\t{\n\t\tx: 0,\n\t\ty: 1\n\t},\n\t{\n\t\tx: 1,\n\t\ty: 1\n\t}\n]) {\n\tconst A = [];\n\tconst B = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tconst xi = dstPoints[i]?.x ?? 0;\n\t\tconst yi = dstPoints[i]?.y ?? 0;\n\t\tconst ui = srcPoints[i]?.x ?? 0;\n\t\tconst vi = srcPoints[i]?.y ?? 0;\n\t\tA.push([\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-xi * ui,\n\t\t\t-yi * ui\n\t\t]);\n\t\tB.push(ui);\n\t\tA.push([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t-xi * vi,\n\t\t\t-yi * vi\n\t\t]);\n\t\tB.push(vi);\n\t}\n\tconst n = 8;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxRow = i;\n\t\tlet maxVal = Math.abs(A[i][i]);\n\t\tfor (let k = i + 1; k < n; k++) if (Math.abs(A[k][i]) > maxVal) {\n\t\t\tmaxVal = Math.abs(A[k][i]);\n\t\t\tmaxRow = k;\n\t\t}\n\t\tconst tempRow = A[i];\n\t\tA[i] = A[maxRow];\n\t\tA[maxRow] = tempRow;\n\t\tconst tempB = B[i];\n\t\tB[i] = B[maxRow];\n\t\tB[maxRow] = tempB;\n\t\tconst pivot = A[i][i];\n\t\tif (Math.abs(pivot) < 1e-12) A[i][i] = pivot < 0 ? -1e-12 : 1e-12;\n\t\tfor (let k = i + 1; k < n; k++) {\n\t\t\tconst factor = A[k][i] / A[i][i];\n\t\t\tfor (let j = i; j < n; j++) A[k][j] -= factor * A[i][j];\n\t\t\tB[k] -= factor * B[i];\n\t\t}\n\t}\n\tconst h = new Array(8).fill(0);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i][j] * h[j];\n\t\th[i] = sum / A[i][i];\n\t}\n\treturn [\n\t\th[0],\n\t\th[1],\n\t\th[2],\n\t\th[3],\n\t\th[4],\n\t\th[5],\n\t\th[6],\n\t\th[7],\n\t\t1\n\t];\n}\n\n//#endregion\n//#region renderer/index.ts\n/**\n* A numeric node parameter at `frame`: a number, a signal-like `get(ctx)` or\n* `{ value }`, a `(ctx) => number` function, or anything `Number()` accepts;\n* `fallback` when none of those yields a finite number.\n*/\nfunction resolveFrameNumber(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/**\n* A static node parameter at `frame`: calls `get(ctx)` / `(frame, fps)`\n* functions and reads `{ value }` wrappers, keeping a signal's GPU texture\n* binding when it has one. Anything else is returned as-is.\n*/\nfunction unwrapFrameParam(raw, frame, fps) {\n\tif (raw === void 0 || raw === null) return { value: raw };\n\tif (typeof raw === \"function\") return { value: raw(frame, fps) };\n\tif (typeof raw !== \"object\") return { value: raw };\n\tconst obj = raw;\n\tif (typeof obj.get === \"function\") return { value: obj.get({\n\t\tframe,\n\t\tfps\n\t}) };\n\tif (\"value\" in obj) {\n\t\tconst sig = raw;\n\t\treturn {\n\t\t\tvalue: sig.value,\n\t\t\tgpuTextureView: sig.gpuBinding?.textureView\n\t\t};\n\t}\n\treturn { value: raw };\n}\n/**\n* A numeric parameter fed through `handleId`: a connected Number (clamped), a\n* connected Signal (sampled on the GPU, `val` stays `fallbackVal`), or else\n* `fallbackVal` clamped to [clampMin, clampMax].\n*/\nfunction resolveHandleParam(inputs, handleId, fallbackVal, clampMin, clampMax) {\n\tconst clamp = (v) => Math.max(clampMin, Math.min(clampMax, v));\n\tconst input = handleId ? inputs?.[handleId] : void 0;\n\tif (input?.connectionValid) {\n\t\tconst outputItem = input.outputItem;\n\t\tif (outputItem?.type === \"Number\") return {\n\t\t\tval: clamp(typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\tval: fallbackVal,\n\t\t\thasStaticSig: true,\n\t\t\tsd: outputItem.data,\n\t\t\thandleId\n\t\t};\n\t}\n\treturn {\n\t\tval: clamp(fallbackVal),\n\t\thasStaticSig: false,\n\t\tsd: null,\n\t\thandleId\n\t};\n}\n/**\n* A numeric field `fieldName` of a node operation, fed through its\n* `${fieldName}HandleId` input: a connected Signal/Numeric (`sd`, sampled on\n* the GPU; `value` is its offset), a connected Number, or the operation's own\n* value — each clamped to [minVal, maxVal].\n*/\nfunction resolveSignalField(op, fieldName, defaultValue, minVal = Number.NEGATIVE_INFINITY, maxVal = Number.POSITIVE_INFINITY) {\n\tconst clamp = (v) => Math.max(minVal, Math.min(maxVal, v));\n\tconst fields = op;\n\tconst handleId = fields[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst outputType = signalInput?.connectionValid ? signalInput.outputItem?.type : void 0;\n\tconst hasSignal = outputType === \"Signal\" || outputType === \"Numeric\";\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) {\n\t\tconst raw = outputType === \"Number\" ? signalInput?.outputItem?.data : fields[fieldName];\n\t\tvalue = clamp(Number(raw ?? defaultValue));\n\t} else if (sd) value = clamp(Number(sd.offset ?? defaultValue));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\n/**\n* Whether the handle whose id is stored at `op[handleIdKey]` has a valid\n* Signal or Number connection.\n*/\nfunction isHandleConnected(op, handleIdKey) {\n\tconst handleId = op[handleIdKey];\n\tif (typeof handleId !== \"string\" || !handleId) return false;\n\tconst input = op.inputs?.[handleId];\n\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n}\nfunction defineRenderer(plugin) {\n\treturn Object.freeze(plugin);\n}\nconst GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for(\"framefields.webgpuRegistry\");\nvar WebGPURegistry = class {\n\trenderers = /* @__PURE__ */ new Map();\n\tregister(op, renderer) {\n\t\tthis.renderers.set(op, renderer);\n\t}\n\tget(op) {\n\t\treturn this.renderers.get(op);\n\t}\n\thas(op) {\n\t\treturn this.renderers.has(op);\n\t}\n};\nconst webgpuRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_WEBGPU_REGISTRY_KEY]) g[GLOBAL_WEBGPU_REGISTRY_KEY] = new WebGPURegistry();\n\treturn g[GLOBAL_WEBGPU_REGISTRY_KEY];\n})();\nfunction registerWebGPURenderer(op, renderer) {\n\twebgpuRegistry.register(op, renderer);\n}\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*/\nfunction effectReach(operation) {\n\tconst op = operation.op;\n\tif (typeof op !== \"string\") return null;\n\treturn webgpuRegistry.get(op)?.reach?.(operation) ?? null;\n}\nregisterWebGPURenderer(\"TextureSource\", (args) => {\n\tconst op = args.props.virtualMedia.operation;\n\tif (op?.sourceTexture) args.ctx.renderer.drawTexture(args.pass, op.sourceTexture, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: args.targetWidth,\n\t\theight: args.targetHeight\n\t}, { opacity: Number(op.opacity ?? 1) });\n});\nvar AudioProcessorRegistry = class {\n\tprocessors = /* @__PURE__ */ new Map();\n\tregister(opType, processor) {\n\t\tthis.processors.set(opType, processor);\n\t}\n\tget(opType) {\n\t\treturn this.processors.get(opType) || null;\n\t}\n};\nconst GLOBAL_AUDIO_KEY = Symbol.for(\"framefields.audioRegistry\");\nconst audioRegistry = (() => {\n\tconst g = globalThis;\n\tif (!g[GLOBAL_AUDIO_KEY]) g[GLOBAL_AUDIO_KEY] = new AudioProcessorRegistry();\n\treturn g[GLOBAL_AUDIO_KEY];\n})();\n\n//#endregion\nexport { WebGPURegistry, audioRegistry, defineRenderer, effectReach, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=renderer.mjs.map"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import "./chunk-D7gtBK74.mjs";
2
- import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
3
- import "./dist-Bf0H4lp1.mjs";
4
- import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CevnCkZC.mjs";
2
+ import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
3
+ import "./dist-CDwWQYg3.mjs";
4
+ import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bb4WmYYH.mjs";
5
5
 
6
6
  //#region ../../nodes/node-kaleidoscope/dist/renderers-D5lECrP_.mjs
7
7
  const OP = "Kaleidoscope";
@@ -200,4 +200,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KaleidoscopeWebGPURende
200
200
 
201
201
  //#endregion
202
202
  export { KaleidoscopeWebGPURenderer, renderers_default as default };
203
- //# sourceMappingURL=renderer-khVVYoVF.mjs.map
203
+ //# sourceMappingURL=renderer-BmgyvIC3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-khVVYoVF.mjs","names":[],"sources":["../../../nodes/node-kaleidoscope/dist/renderers-D5lECrP_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Kaleidoscope\";\nconst UNIFORM_FLOATS = 12;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 3> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet segments = u.v[1].x;\n\tlet rotation = u.v[1].y;\n\tlet centerX = u.v[1].z;\n\tlet centerY = u.v[1].w;\n\tlet zoom = u.v[2].x;\n\n\tlet R = res();\n\tlet aspect = R.x / R.y;\n\tlet center = vec2<f32>(centerX, centerY);\n\tvar p = in.uv - center;\n\tp.x *= aspect;\n\tlet rad = length(p) / zoom;\n\tlet rot = radians(rotation);\n\tlet seg = 6.2831853 / segments;\n\tvar a = atan2(p.y, p.x) - rot;\n\ta = a - seg * floor(a / seg);\n\ta = min(a, seg - a);\n\tvar q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;\n\tq.x /= aspect;\n\tlet uv = q + center;\n\tlet m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));\n\treturn sampleP(m);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.segments, 6);\n\tdata[5] = num(raw.rotation, 0);\n\tdata[6] = num(raw.centerX, .5);\n\tdata[7] = num(raw.centerY, .5);\n\tdata[8] = num(raw.zoom, 1);\n}\nconst KaleidoscopeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KaleidoscopeWebGPURenderer });\n\n//#endregion\nexport { KaleidoscopeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D5lECrP_.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"renderer-BmgyvIC3.mjs","names":[],"sources":["../../../nodes/node-kaleidoscope/dist/renderers-D5lECrP_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Kaleidoscope\";\nconst UNIFORM_FLOATS = 12;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 3> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet segments = u.v[1].x;\n\tlet rotation = u.v[1].y;\n\tlet centerX = u.v[1].z;\n\tlet centerY = u.v[1].w;\n\tlet zoom = u.v[2].x;\n\n\tlet R = res();\n\tlet aspect = R.x / R.y;\n\tlet center = vec2<f32>(centerX, centerY);\n\tvar p = in.uv - center;\n\tp.x *= aspect;\n\tlet rad = length(p) / zoom;\n\tlet rot = radians(rotation);\n\tlet seg = 6.2831853 / segments;\n\tvar a = atan2(p.y, p.x) - rot;\n\ta = a - seg * floor(a / seg);\n\ta = min(a, seg - a);\n\tvar q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;\n\tq.x /= aspect;\n\tlet uv = q + center;\n\tlet m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));\n\treturn sampleP(m);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.segments, 6);\n\tdata[5] = num(raw.rotation, 0);\n\tdata[6] = num(raw.centerX, .5);\n\tdata[7] = num(raw.centerY, .5);\n\tdata[8] = num(raw.zoom, 1);\n}\nconst KaleidoscopeWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KaleidoscopeWebGPURenderer });\n\n//#endregion\nexport { KaleidoscopeWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D5lECrP_.mjs.map"],"mappings":"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"}