framefields 2.0.11 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -5
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +13 -12
- package/dist/{audio-BHanw8Jb.d.mts → audio-CfBpzxn9.d.mts} +3 -3
- package/dist/{audio-BHanw8Jb.d.mts.map → audio-CfBpzxn9.d.mts.map} +1 -1
- package/dist/{audio-TAvPwzLR.mjs → audio-DJeVoE8b.mjs} +1 -1
- package/dist/{audio-TAvPwzLR.mjs.map → audio-DJeVoE8b.mjs.map} +1 -1
- package/dist/{audio-COOMNwL5.mjs → audio-GGuQ_JI0.mjs} +4 -4
- package/dist/{audio-COOMNwL5.mjs.map → audio-GGuQ_JI0.mjs.map} +1 -1
- package/dist/{chunk-GMkBE123.mjs → chunk-GBe2k3y8.mjs} +1 -4
- package/dist/{dist-C_hjvkdN.mjs → dist-0QGroRYZ.mjs} +1 -1
- package/dist/{dist-C_hjvkdN.mjs.map → dist-0QGroRYZ.mjs.map} +1 -1
- package/dist/{dist-BYqNNwsl.mjs → dist-BY0bIWgr.mjs} +10 -2
- package/dist/dist-BY0bIWgr.mjs.map +1 -0
- package/dist/{dist-BAVZdFEJ.mjs → dist-Bb8BoMiw.mjs} +76 -626
- package/dist/dist-Bb8BoMiw.mjs.map +1 -0
- package/dist/{dist-Cxi68OuY.mjs → dist-DkuDAIrG.mjs} +26862 -25638
- package/dist/dist-DkuDAIrG.mjs.map +1 -0
- package/dist/{dist-CbG3QxDw.mjs → dist-fjKpBYkc.mjs} +12 -27
- package/dist/dist-fjKpBYkc.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +36 -34
- package/dist/{effects-DzbjFhyA.mjs → effects-D6wFg2FR.mjs} +3 -3
- package/dist/{effects-DzbjFhyA.mjs.map → effects-D6wFg2FR.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -1
- package/dist/{fonts-C0W6TgJk.mjs → fonts-CZMYtbP7.mjs} +24 -11
- package/dist/fonts-CZMYtbP7.mjs.map +1 -0
- package/dist/gpu-DG3gI88-.mjs +215 -0
- package/dist/gpu-DG3gI88-.mjs.map +1 -0
- package/dist/{index-DRZu3ezy.d.mts → index--0vVZDPM.d.mts} +3 -3
- package/dist/{index-DRZu3ezy.d.mts.map → index--0vVZDPM.d.mts.map} +1 -1
- package/dist/{index-DnWsbbuZ.d.mts → index-BcA8rep0.d.mts} +7 -2
- package/dist/index-BcA8rep0.d.mts.map +1 -0
- package/dist/{index-DGJp1d30.d.mts → index-BzQc812z.d.mts} +3 -3
- package/dist/{index-DGJp1d30.d.mts.map → index-BzQc812z.d.mts.map} +1 -1
- package/dist/{index-DDEPvMww.d.mts → index-Cpkzy5XR.d.mts} +3452 -1675
- package/dist/index-Cpkzy5XR.d.mts.map +1 -0
- package/dist/{index-CDoTrMs1.d.mts → index-D__HdInU.d.mts} +8 -8
- package/dist/{index-CDoTrMs1.d.mts.map → index-D__HdInU.d.mts.map} +1 -1
- package/dist/{index-CYGpSVsf.d.mts → index-DpWia6iH.d.mts} +4 -11
- package/dist/index-DpWia6iH.d.mts.map +1 -0
- package/dist/{index-9B8CJowc.d.mts → index-Fciq8bcC.d.mts} +10 -2
- package/dist/index-Fciq8bcC.d.mts.map +1 -0
- package/dist/index.d.mts +29 -1842
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +79 -66
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +12 -13
- package/dist/{preview-BV2C4Fk6.mjs → preview--rOXbBxl.mjs} +3 -4
- package/dist/preview--rOXbBxl.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/chunk-2MZXSWVT.mjs +118 -0
- package/dist/preview-engine/{chunk-Y6HWYPKX.mjs → chunk-3GNP7TJH.mjs} +3 -3
- package/dist/preview-engine/chunk-3UPI4EPV.mjs +69 -0
- package/dist/preview-engine/{chunk-6JW37VJA.mjs → chunk-5AUB4Y3L.mjs} +3 -23
- package/dist/preview-engine/chunk-5DOD2NVY.mjs +26 -0
- package/dist/preview-engine/chunk-5FC7GOWW.mjs +474 -0
- package/dist/preview-engine/chunk-5W4AFQP7.mjs +97 -0
- package/dist/preview-engine/chunk-63SFBHEH.mjs +1 -0
- package/dist/preview-engine/{chunk-25IW7NYO.mjs → chunk-7EPDVSCL.mjs} +1 -1
- package/dist/preview-engine/chunk-7EPIRODI.mjs +91 -0
- package/dist/preview-engine/chunk-7J2FWGVD.mjs +1 -0
- package/dist/preview-engine/chunk-AXHB4J37.mjs +147 -0
- package/dist/preview-engine/chunk-AXQZX3TC.mjs +450 -0
- package/dist/preview-engine/chunk-B43Z3J7J.mjs +5 -0
- package/dist/preview-engine/chunk-BWJS6G7R.mjs +314 -0
- package/dist/preview-engine/{chunk-ECPP3UG6.mjs → chunk-E3HC4GRQ.mjs} +3 -23
- package/dist/preview-engine/{chunk-AEK5BO3J.mjs → chunk-E4RAFHZM.mjs} +1 -1
- package/dist/preview-engine/chunk-ENKKLU7B.mjs +22 -0
- package/dist/preview-engine/{chunk-IYVN2QEL.mjs → chunk-FLPSWDX4.mjs} +1 -1
- package/dist/preview-engine/{chunk-24DXIKXL.mjs → chunk-FPRXK2WD.mjs} +2 -2
- package/dist/preview-engine/chunk-FU7AIAMM.mjs +88 -0
- package/dist/preview-engine/{chunk-CBM7B7EW.mjs → chunk-GMGGDADT.mjs} +1 -1
- package/dist/preview-engine/chunk-GSFN4WCH.mjs +62 -0
- package/dist/preview-engine/chunk-IQC2I5A5.mjs +1 -0
- package/dist/preview-engine/chunk-IUPDOATX.mjs +114 -0
- package/dist/preview-engine/{chunk-GHMCGTJ2.mjs → chunk-J2R5R7YY.mjs} +3 -23
- package/dist/preview-engine/chunk-JAJOZG5P.mjs +1 -0
- package/dist/preview-engine/{chunk-XLFYM7KH.mjs → chunk-K773AOF3.mjs} +2 -2
- package/dist/preview-engine/{chunk-RJUAM52F.mjs → chunk-L3CHEZMZ.mjs} +3 -23
- package/dist/preview-engine/chunk-LBRVQ4GE.mjs +84 -0
- package/dist/preview-engine/chunk-LGVEFPOG.mjs +3 -0
- package/dist/preview-engine/{chunk-AMBSW6OA.mjs → chunk-NEE3KQTX.mjs} +2 -2
- package/dist/preview-engine/chunk-NPD6W3RP.mjs +1 -0
- package/dist/preview-engine/{chunk-V6VU46ZG.mjs → chunk-O2RNIQXT.mjs} +1 -1
- package/dist/preview-engine/{server-utils-2FAIV45N.mjs → chunk-OCX5AD23.mjs} +1 -1
- package/dist/preview-engine/chunk-OJ2PKBXE.mjs +40 -0
- package/dist/preview-engine/chunk-OKH2VU2U.mjs +97 -0
- package/dist/preview-engine/chunk-PAQNDZQB.mjs +83 -0
- package/dist/preview-engine/chunk-PEWYB6WP.mjs +43 -0
- package/dist/preview-engine/{chunk-MDDF2GCF.mjs → chunk-PFA427ZC.mjs} +3 -23
- package/dist/preview-engine/chunk-PL4IH5V4.mjs +89 -0
- package/dist/preview-engine/chunk-PNB3ERR3.mjs +1 -0
- package/dist/preview-engine/{chunk-PQD5UPHG.mjs → chunk-PR2BUYCL.mjs} +1 -1
- package/dist/preview-engine/{chunk-QYRDQMNB.mjs → chunk-PXT52LEH.mjs} +3 -23
- package/dist/preview-engine/{chunk-ZSIJB76A.mjs → chunk-Q2DPNVIA.mjs} +2 -2
- package/dist/preview-engine/chunk-Q4Z54DQ7.mjs +1 -0
- package/dist/preview-engine/{chunk-6256GQFP.mjs → chunk-QY7MHWZW.mjs} +1 -1
- package/dist/preview-engine/chunk-RQLMW6MA.mjs +4 -0
- package/dist/preview-engine/chunk-RSMO7NPN.mjs +1 -0
- package/dist/preview-engine/chunk-RW2F3XLQ.mjs +90 -0
- package/dist/preview-engine/chunk-SGPRLTNF.mjs +52 -0
- package/dist/preview-engine/{chunk-Y6FEU4TV.mjs → chunk-SZW5J72T.mjs} +3 -23
- package/dist/preview-engine/{chunk-LIHUEYI5.mjs → chunk-VO2R3DWV.mjs} +2 -2
- package/dist/preview-engine/{chunk-BJKH76OM.mjs → chunk-VXS5SIEC.mjs} +3 -23
- package/dist/preview-engine/chunk-WFGJXCZT.mjs +53 -0
- package/dist/preview-engine/chunk-WH5Q2NFN.mjs +32 -0
- package/dist/preview-engine/chunk-WSIURGP2.mjs +121 -0
- package/dist/preview-engine/{chunk-AWTH2WZO.mjs → chunk-WUKH7BD7.mjs} +1 -1
- package/dist/preview-engine/chunk-XC5WZNOY.mjs +1448 -0
- package/dist/preview-engine/chunk-YQZOGEPZ.mjs +186 -0
- package/dist/preview-engine/{chunk-D3TETPLI.mjs → chunk-ZH5MZQTZ.mjs} +1 -1
- package/dist/preview-engine/chunk-ZIIFTWDH.mjs +58 -0
- package/dist/preview-engine/{chunk-EQ4QZRXB.mjs → chunk-ZNL4W4DK.mjs} +2 -2
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +127 -130
- package/dist/preview-engine/player.mjs +6 -6
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -0
- package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -0
- package/dist/preview-engine/renderers-2SVWAB42.mjs +1 -0
- package/dist/preview-engine/renderers-3RC5FDWX.mjs +1 -0
- package/dist/preview-engine/renderers-3T7Q4SPP.mjs +1 -0
- package/dist/preview-engine/renderers-4DV4REGM.mjs +1 -0
- package/dist/preview-engine/renderers-57WDL6XN.mjs +1 -0
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -0
- package/dist/preview-engine/renderers-7JTNJE7M.mjs +1 -0
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -0
- package/dist/preview-engine/{renderers-WLH4HRUE.mjs → renderers-A7VH3ON5.mjs} +1 -1
- package/dist/preview-engine/renderers-CQXQHOW2.mjs +1 -0
- package/dist/preview-engine/{renderers-2US2NIUG.mjs → renderers-D2EJULOJ.mjs} +3 -23
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -0
- package/dist/preview-engine/{renderers-W5CVDJVH.mjs → renderers-F55XFVMP.mjs} +1 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -0
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -0
- package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -0
- package/dist/preview-engine/renderers-IXGM55XK.mjs +1 -0
- package/dist/preview-engine/renderers-KVHUVWSN.mjs +1 -0
- package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -0
- package/dist/preview-engine/renderers-LVDUZZ75.mjs +1 -0
- package/dist/preview-engine/renderers-M7R2ZJUP.mjs +1 -0
- package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -0
- package/dist/preview-engine/{renderers-CAUWP4XH.mjs → renderers-O2DZPBOJ.mjs} +3 -23
- package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -0
- package/dist/preview-engine/renderers-P4S7GL64.mjs +104 -0
- package/dist/preview-engine/renderers-PMOO7DLX.mjs +1 -0
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -0
- package/dist/preview-engine/renderers-QCCPCH73.mjs +1 -0
- package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -0
- package/dist/preview-engine/renderers-RRXFJRGI.mjs +1 -0
- package/dist/preview-engine/renderers-SCJ6OKTB.mjs +1 -0
- package/dist/preview-engine/renderers-T4JMJXWL.mjs +1 -0
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -0
- package/dist/preview-engine/{renderers-JQHUBWLL.mjs → renderers-TFZST6WW.mjs} +3 -23
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -0
- package/dist/preview-engine/renderers-UPKB5OLS.mjs +100 -0
- package/dist/preview-engine/renderers-UPTJJE5F.mjs +1 -0
- package/dist/preview-engine/renderers-VLMQR3DW.mjs +1 -0
- package/dist/preview-engine/renderers-WVTTRCVI.mjs +1 -0
- package/dist/preview-engine/renderers-X5PUIPU5.mjs +1 -0
- package/dist/preview-engine/renderers-XCMVZ2XG.mjs +35 -0
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -0
- package/dist/preview-engine/renderers-YDCDY3BR.mjs +1 -0
- package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -0
- package/dist/preview-engine/renderers-YJNQ4B7B.mjs +1 -0
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -0
- package/dist/preview-engine/renderers-YZEVPHPQ.mjs +228 -0
- package/dist/preview-engine/renderers-Z7YQUFAY.mjs +1 -0
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -0
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/skia-canvas-QBXAOGPB.mjs +1 -0
- package/dist/{program-BmNKgzja.mjs → program-Cc5AsBHz.mjs} +93 -2335
- package/dist/program-Cc5AsBHz.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +3 -4
- package/dist/renderer-1VSi7Vum.mjs +5 -0
- package/dist/renderer-4BlpUHQT.mjs +5 -0
- package/dist/{renderer-Bv21DbWy.mjs → renderer-9L0p8IT3.mjs} +3 -1
- package/dist/renderer-AzSX2-mZ.mjs +5 -0
- package/dist/renderer-B-cxK24t.mjs +5 -0
- package/dist/{renderer-DxTs4Iyi.mjs → renderer-B1Zn91xt.mjs} +40 -142
- package/dist/renderer-B1Zn91xt.mjs.map +1 -0
- package/dist/renderer-B5d5oM_D.mjs +5 -0
- package/dist/renderer-B8BdNjaN.mjs +5 -0
- package/dist/{renderer-Bhdf90Zq.mjs → renderer-BI5rvAyo.mjs} +51 -163
- package/dist/renderer-BI5rvAyo.mjs.map +1 -0
- package/dist/renderer-BKEfeg-4.mjs +5 -0
- package/dist/{renderer-CI7sG_cv.mjs → renderer-BKf1qDwL.mjs} +83 -266
- package/dist/renderer-BKf1qDwL.mjs.map +1 -0
- package/dist/renderer-BLLOkeFB.mjs +5 -0
- package/dist/renderer-BSitV56h.mjs +268 -0
- package/dist/renderer-BSitV56h.mjs.map +1 -0
- package/dist/renderer-BTvov1NH.mjs +5 -0
- package/dist/renderer-BVun05IK.mjs +5 -0
- package/dist/{renderer-B2ieylQ3.mjs → renderer-BWVsBB3t.mjs} +56 -167
- package/dist/renderer-BWVsBB3t.mjs.map +1 -0
- package/dist/{renderer-ChdLYS-G.mjs → renderer-BXQQxeNC.mjs} +20 -87
- package/dist/renderer-BXQQxeNC.mjs.map +1 -0
- package/dist/renderer-B_3h5nhy.mjs +5 -0
- package/dist/renderer-BaZjoFYK.mjs +5 -0
- package/dist/{renderer-CfC_aiew.mjs → renderer-BaaOR3Ao.mjs} +57 -192
- package/dist/renderer-BaaOR3Ao.mjs.map +1 -0
- package/dist/{renderer-bZU_ndxf.mjs → renderer-BajIOuZH.mjs} +2 -2
- package/dist/{renderer-bZU_ndxf.mjs.map → renderer-BajIOuZH.mjs.map} +1 -1
- package/dist/{renderer-CWTpc4ff.mjs → renderer-Bb8T5eRX.mjs} +76 -210
- package/dist/renderer-Bb8T5eRX.mjs.map +1 -0
- package/dist/{renderer-D2nCGcjv.mjs → renderer-Bc6J0iVG.mjs} +3 -3
- package/dist/{renderer-D2nCGcjv.mjs.map → renderer-Bc6J0iVG.mjs.map} +1 -1
- package/dist/renderer-BcApaCVe.mjs +5 -0
- package/dist/{renderer-D_1oDOCP.mjs → renderer-Bg7647VN.mjs} +14 -69
- package/dist/renderer-Bg7647VN.mjs.map +1 -0
- package/dist/{renderer-ho_jXJ0H.mjs → renderer-BhKIZDsm.mjs} +23 -117
- package/dist/renderer-BhKIZDsm.mjs.map +1 -0
- package/dist/{renderer-dncoIVdd.mjs → renderer-BhhSyHKF.mjs} +3 -1
- package/dist/{renderer-CXn5HAnK.mjs → renderer-Br9BOkQs.mjs} +10 -16
- package/dist/renderer-Br9BOkQs.mjs.map +1 -0
- package/dist/{renderer-BTdOMMEx.d.mts → renderer-Bs_f_App.d.mts} +2 -2
- package/dist/{renderer-BTdOMMEx.d.mts.map → renderer-Bs_f_App.d.mts.map} +1 -1
- package/dist/{renderer-DZGtBUCx.mjs → renderer-BygIYH8s.mjs} +35 -185
- package/dist/renderer-BygIYH8s.mjs.map +1 -0
- package/dist/{renderer-Bv6q84TU.mjs → renderer-C--Dqe-3.mjs} +61 -208
- package/dist/renderer-C--Dqe-3.mjs.map +1 -0
- package/dist/renderer-C14mKYCw.mjs +5 -0
- package/dist/{renderer-CnXW28b9.mjs → renderer-C27RfwXN.mjs} +85 -279
- package/dist/renderer-C27RfwXN.mjs.map +1 -0
- package/dist/{renderer-Dy0utCl7.mjs → renderer-C5caYAA3.mjs} +10 -17
- package/dist/renderer-C5caYAA3.mjs.map +1 -0
- package/dist/{renderer-Bfgd4N0O.mjs → renderer-C5zpaQed.mjs} +9 -16
- package/dist/renderer-C5zpaQed.mjs.map +1 -0
- package/dist/{renderer-cgxO2xN6.mjs → renderer-C7UZLOYk.mjs} +10 -17
- package/dist/renderer-C7UZLOYk.mjs.map +1 -0
- package/dist/{renderer-BJ1aTkZf.mjs → renderer-C92mwhZz.mjs} +99 -282
- package/dist/renderer-C92mwhZz.mjs.map +1 -0
- package/dist/{renderer-CepMDQ06.mjs → renderer-CAJe9eLS.mjs} +19 -106
- package/dist/renderer-CAJe9eLS.mjs.map +1 -0
- package/dist/renderer-CFqhAXkH.mjs +5 -0
- package/dist/renderer-CK-spD4j.mjs +5 -0
- package/dist/renderer-CLLzQTIk.mjs +5 -0
- package/dist/{renderer-CtyD_Xju.mjs → renderer-CMsjnZ0G.mjs} +59 -194
- package/dist/renderer-CMsjnZ0G.mjs.map +1 -0
- package/dist/renderer-COwa6xlF.mjs +5 -0
- package/dist/renderer-CQPuuoVf.mjs +6 -0
- package/dist/renderer-CRd-cDqZ.mjs +5 -0
- package/dist/renderer-CTVnQAUm.mjs +5 -0
- package/dist/renderer-CbiEBSGx.mjs +5 -0
- package/dist/renderer-Cl7PruQ1.mjs +5 -0
- package/dist/renderer-CmuGGUDR.mjs +5 -0
- package/dist/renderer-CoGP4Mvf.mjs +148 -0
- package/dist/renderer-CoGP4Mvf.mjs.map +1 -0
- package/dist/renderer-CoNRrfqx.mjs +5 -0
- package/dist/{renderer-BREIjsUU.mjs → renderer-CrAqu3Rg.mjs} +14 -40
- package/dist/renderer-CrAqu3Rg.mjs.map +1 -0
- package/dist/renderer-CvIGa0mE.mjs +5 -0
- package/dist/renderer-CwMDPv0p.mjs +5 -0
- package/dist/{renderer-BIIWCg_J.mjs → renderer-CydWqyf0.mjs} +11 -18
- package/dist/renderer-CydWqyf0.mjs.map +1 -0
- package/dist/{renderer-bsWnRNpJ.mjs → renderer-CzBQgGD2.mjs} +29 -98
- package/dist/renderer-CzBQgGD2.mjs.map +1 -0
- package/dist/{renderer-CdciwwMI.mjs → renderer-D0aZNkQE.mjs} +161 -457
- package/dist/renderer-D0aZNkQE.mjs.map +1 -0
- package/dist/{renderer-B8UaFNqb.mjs → renderer-D2BRlqof.mjs} +62 -209
- package/dist/renderer-D2BRlqof.mjs.map +1 -0
- package/dist/{renderer-B8-kzZdP.mjs → renderer-D2FFvxsq.mjs} +41 -140
- package/dist/renderer-D2FFvxsq.mjs.map +1 -0
- package/dist/{renderer-Ctk2zzfy.mjs → renderer-D8-zNjyz.mjs} +57 -197
- package/dist/renderer-D8-zNjyz.mjs.map +1 -0
- package/dist/{renderer-DML9qpmS.mjs → renderer-DDqwds9R.mjs} +52 -202
- package/dist/renderer-DDqwds9R.mjs.map +1 -0
- package/dist/{renderer-BSaYG8aw.mjs → renderer-DGtBOdst.mjs} +3 -1
- package/dist/{renderer-CzPWB0Ss.mjs → renderer-DKqG9Lek.mjs} +13 -45
- package/dist/renderer-DKqG9Lek.mjs.map +1 -0
- package/dist/renderer-DOHbhGPu.mjs +5 -0
- package/dist/renderer-DOmA6IKc.mjs +5 -0
- package/dist/{renderer-DirxsOjq.mjs → renderer-DUhXH5Tz.mjs} +80 -258
- package/dist/renderer-DUhXH5Tz.mjs.map +1 -0
- package/dist/{renderer-kwmlLQOO.mjs → renderer-DVnVnS3c.mjs} +4 -4
- package/dist/{renderer-kwmlLQOO.mjs.map → renderer-DVnVnS3c.mjs.map} +1 -1
- package/dist/{renderer-CaaOKMSd.mjs → renderer-DWEvQ-hQ.mjs} +63 -190
- package/dist/renderer-DWEvQ-hQ.mjs.map +1 -0
- package/dist/renderer-DX2qEJTL.mjs +2173 -0
- package/dist/renderer-DX2qEJTL.mjs.map +1 -0
- package/dist/{renderer-1VuQTY1Z.mjs → renderer-DX8aBDqR.mjs} +236 -96
- package/dist/renderer-DX8aBDqR.mjs.map +1 -0
- package/dist/{renderer-DEJwPRkR.mjs → renderer-DYIPWN_B.mjs} +15 -51
- package/dist/renderer-DYIPWN_B.mjs.map +1 -0
- package/dist/{renderer-Djlb4TLO.mjs → renderer-DZD2G76E.mjs} +8 -15
- package/dist/renderer-DZD2G76E.mjs.map +1 -0
- package/dist/{renderer-WSGuj_V6.mjs → renderer-Da06_9FZ.mjs} +4 -3
- package/dist/{renderer-WSGuj_V6.mjs.map → renderer-Da06_9FZ.mjs.map} +1 -1
- package/dist/{renderer-BM05sB8m.mjs → renderer-DkyXqrQ6.mjs} +11 -74
- package/dist/renderer-DkyXqrQ6.mjs.map +1 -0
- package/dist/renderer-DmCWc4JL.mjs +5 -0
- package/dist/{renderer-BDbTWSpP.mjs → renderer-Dno-fujw.mjs} +58 -234
- package/dist/renderer-Dno-fujw.mjs.map +1 -0
- package/dist/{renderer-D2XD4QYk.mjs → renderer-DoYdfDEA.mjs} +34 -147
- package/dist/renderer-DoYdfDEA.mjs.map +1 -0
- package/dist/{renderer-_uvdg48N.mjs → renderer-DqjITuT-.mjs} +24 -93
- package/dist/renderer-DqjITuT-.mjs.map +1 -0
- package/dist/renderer-DuuOlYIG.mjs +3 -0
- package/dist/{renderer-DIgsilTw.mjs → renderer-Dy-DBU0X.mjs} +5 -4
- package/dist/{renderer-DIgsilTw.mjs.map → renderer-Dy-DBU0X.mjs.map} +1 -1
- package/dist/{renderer-CpkiHRhh.mjs → renderer-DyzNM721.mjs} +17 -99
- package/dist/renderer-DyzNM721.mjs.map +1 -0
- package/dist/{renderer-C_TPMHiH.mjs → renderer-DzrM1KMN.mjs} +81 -221
- package/dist/renderer-DzrM1KMN.mjs.map +1 -0
- package/dist/{renderer-Bc04fivZ.mjs → renderer-FHyZn0em.mjs} +99 -287
- package/dist/renderer-FHyZn0em.mjs.map +1 -0
- package/dist/renderer-GSFP7v2z.mjs +3 -0
- package/dist/{renderer-DpGc-N3G.mjs → renderer-NXdm6HLb.mjs} +24 -104
- package/dist/renderer-NXdm6HLb.mjs.map +1 -0
- package/dist/renderer-OLaYikwi.mjs +5 -0
- package/dist/renderer-Q75RC5Uz.mjs +5 -0
- package/dist/renderer-T0LJ4Po3.mjs +5 -0
- package/dist/renderer-VuXt1hfq.mjs +5 -0
- package/dist/{renderer-BfAWZziM.mjs → renderer-_1xGBbxn.mjs} +58 -225
- package/dist/renderer-_1xGBbxn.mjs.map +1 -0
- package/dist/{renderer-B1YMwl2B.mjs → renderer-c4AorKyw.mjs} +3 -1
- package/dist/renderer-hY_2WLt3.mjs +5 -0
- package/dist/{renderer-BhZZEyFX.mjs → renderer-mp1NN5zk.mjs} +4 -4
- package/dist/{renderer-BhZZEyFX.mjs.map → renderer-mp1NN5zk.mjs.map} +1 -1
- package/dist/{renderer-D7zvPHKn.mjs → renderer-qsg-JMuN.mjs} +18 -28
- package/dist/renderer-qsg-JMuN.mjs.map +1 -0
- package/dist/{renderer-vqkKWqa5.mjs → renderer-timEC0Gl.mjs} +23 -107
- package/dist/renderer-timEC0Gl.mjs.map +1 -0
- package/dist/renderer-y4EqE06a.mjs +5 -0
- package/dist/{renderers-CP8CFWDs-DwQTx8S7.mjs → renderers-CP8CFWDs-CMYe4kvZ.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DwQTx8S7.mjs.map → renderers-CP8CFWDs-CMYe4kvZ.mjs.map} +1 -1
- package/dist/signals/index.d.mts +6 -6
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-Bv1OweKd.mjs → signals-DGRs6ddH.mjs} +4 -4
- package/dist/{signals-Bv1OweKd.mjs.map → signals-DGRs6ddH.mjs.map} +1 -1
- package/package.json +55 -55
- package/dist/client-CwRhflHE.mjs +0 -66
- package/dist/client-CwRhflHE.mjs.map +0 -1
- package/dist/dist-BAVZdFEJ.mjs.map +0 -1
- package/dist/dist-BYqNNwsl.mjs.map +0 -1
- package/dist/dist-CbG3QxDw.mjs.map +0 -1
- package/dist/dist-Cxi68OuY.mjs.map +0 -1
- package/dist/dist-cjs--lfMLs3U.mjs +0 -66
- package/dist/dist-cjs--lfMLs3U.mjs.map +0 -1
- package/dist/dist-cjs--pxyGFw2.mjs +0 -43
- package/dist/dist-cjs--pxyGFw2.mjs.map +0 -1
- package/dist/dist-cjs-3pon9kTt.mjs +0 -6
- package/dist/dist-cjs-BDpO-TH_.mjs +0 -51
- package/dist/dist-cjs-BDpO-TH_.mjs.map +0 -1
- package/dist/dist-cjs-BiKQozdJ.mjs +0 -64
- package/dist/dist-cjs-BiKQozdJ.mjs.map +0 -1
- package/dist/dist-cjs-BmyyWYWv.mjs +0 -153
- package/dist/dist-cjs-BmyyWYWv.mjs.map +0 -1
- package/dist/dist-cjs-CND_ghfH.mjs +0 -98
- package/dist/dist-cjs-CND_ghfH.mjs.map +0 -1
- package/dist/dist-cjs-CQwmMllY.mjs +0 -137
- package/dist/dist-cjs-CQwmMllY.mjs.map +0 -1
- package/dist/dist-cjs-CgFzrgj8.mjs +0 -85
- package/dist/dist-cjs-CgFzrgj8.mjs.map +0 -1
- package/dist/dist-cjs-CsU2sZoX.mjs +0 -323
- package/dist/dist-cjs-CsU2sZoX.mjs.map +0 -1
- package/dist/dist-cjs-DJ8fcQEe.mjs +0 -9069
- package/dist/dist-cjs-DJ8fcQEe.mjs.map +0 -1
- package/dist/dist-cjs-DT2jJlcK.mjs +0 -181
- package/dist/dist-cjs-DT2jJlcK.mjs.map +0 -1
- package/dist/dist-cjs-DjzmP0-x.mjs +0 -1091
- package/dist/dist-cjs-DjzmP0-x.mjs.map +0 -1
- package/dist/dist-cjs-DzjrlfbE.mjs +0 -437
- package/dist/dist-cjs-DzjrlfbE.mjs.map +0 -1
- package/dist/dist-cjs-M-8QOgS_.mjs +0 -209
- package/dist/dist-cjs-M-8QOgS_.mjs.map +0 -1
- package/dist/dist-cjs-TsA8LFXC.mjs +0 -48
- package/dist/dist-cjs-TsA8LFXC.mjs.map +0 -1
- package/dist/dist-cjs-agQl9T8M.mjs +0 -5015
- package/dist/dist-cjs-agQl9T8M.mjs.map +0 -1
- package/dist/event-streams-BaNGaLxh.mjs +0 -204
- package/dist/event-streams-BaNGaLxh.mjs.map +0 -1
- package/dist/fonts-C0W6TgJk.mjs.map +0 -1
- package/dist/index-9B8CJowc.d.mts.map +0 -1
- package/dist/index-CYGpSVsf.d.mts.map +0 -1
- package/dist/index-DDEPvMww.d.mts.map +0 -1
- package/dist/index-DnWsbbuZ.d.mts.map +0 -1
- package/dist/package-XpCRbTOA.mjs +0 -6
- package/dist/package-XpCRbTOA.mjs.map +0 -1
- package/dist/preview-BV2C4Fk6.mjs.map +0 -1
- package/dist/preview-engine/chunk-36YGYLKD.mjs +0 -58
- package/dist/preview-engine/chunk-7O24H4YT.mjs +0 -117
- package/dist/preview-engine/chunk-AUFSM5KI.mjs +0 -141
- package/dist/preview-engine/chunk-BHFI3Y4T.mjs +0 -1
- package/dist/preview-engine/chunk-BQ65MU6H.mjs +0 -138
- package/dist/preview-engine/chunk-BWDARDO6.mjs +0 -117
- package/dist/preview-engine/chunk-DLXQDDIN.mjs +0 -46
- package/dist/preview-engine/chunk-EJGLUZMW.mjs +0 -1
- package/dist/preview-engine/chunk-FE6RSVKZ.mjs +0 -73
- package/dist/preview-engine/chunk-FGHOHCFG.mjs +0 -110
- package/dist/preview-engine/chunk-HPIULG7P.mjs +0 -111
- package/dist/preview-engine/chunk-HRIKNYPF.mjs +0 -60
- package/dist/preview-engine/chunk-IMV5SBQV.mjs +0 -1
- package/dist/preview-engine/chunk-JPXQPP6J.mjs +0 -1
- package/dist/preview-engine/chunk-K52S5DJX.mjs +0 -109
- package/dist/preview-engine/chunk-L3IEJZ5S.mjs +0 -474
- package/dist/preview-engine/chunk-M7NMFDJ3.mjs +0 -3
- package/dist/preview-engine/chunk-MJM3NFEC.mjs +0 -315
- package/dist/preview-engine/chunk-NFAGEP43.mjs +0 -1448
- package/dist/preview-engine/chunk-NRHSNPZV.mjs +0 -182
- package/dist/preview-engine/chunk-OWOSYNMF.mjs +0 -104
- package/dist/preview-engine/chunk-Q66QQI6N.mjs +0 -8
- package/dist/preview-engine/chunk-QGBSLNFI.mjs +0 -52
- package/dist/preview-engine/chunk-QM3XFEJN.mjs +0 -63
- package/dist/preview-engine/chunk-R3ZH7YF3.mjs +0 -89
- package/dist/preview-engine/chunk-R6YNSBKL.mjs +0 -108
- package/dist/preview-engine/chunk-S4CSX6K5.mjs +0 -610
- package/dist/preview-engine/chunk-SNYAHQ25.mjs +0 -186
- package/dist/preview-engine/chunk-SRT2OCQW.mjs +0 -1
- package/dist/preview-engine/chunk-SUUUYXXT.mjs +0 -1
- package/dist/preview-engine/chunk-T6COGNOW.mjs +0 -134
- package/dist/preview-engine/chunk-XFYXT76H.mjs +0 -52
- package/dist/preview-engine/chunk-XUM42I4R.mjs +0 -1
- package/dist/preview-engine/chunk-YITWSOG4.mjs +0 -103
- package/dist/preview-engine/chunk-ZDCA6NVT.mjs +0 -82
- package/dist/preview-engine/chunk-ZNGOAGAI.mjs +0 -1
- package/dist/preview-engine/renderers-27Q5X3U6.mjs +0 -1
- package/dist/preview-engine/renderers-4AHH6BHF.mjs +0 -1
- package/dist/preview-engine/renderers-5BV6JGTU.mjs +0 -248
- package/dist/preview-engine/renderers-6PRVCTYV.mjs +0 -1
- package/dist/preview-engine/renderers-76PQY2SO.mjs +0 -1
- package/dist/preview-engine/renderers-7X2W6QWX.mjs +0 -1
- package/dist/preview-engine/renderers-B52QT6MT.mjs +0 -55
- package/dist/preview-engine/renderers-BE6RVJSE.mjs +0 -1
- package/dist/preview-engine/renderers-BMM2BH56.mjs +0 -1
- package/dist/preview-engine/renderers-CHOGQHVQ.mjs +0 -1
- package/dist/preview-engine/renderers-CRKRWR2Y.mjs +0 -1
- package/dist/preview-engine/renderers-DEYDSGJX.mjs +0 -1
- package/dist/preview-engine/renderers-DZTNRCR7.mjs +0 -1
- package/dist/preview-engine/renderers-ELO3KWTK.mjs +0 -1
- package/dist/preview-engine/renderers-EOJMPPAQ.mjs +0 -1
- package/dist/preview-engine/renderers-F2KJNDWA.mjs +0 -124
- package/dist/preview-engine/renderers-FCV4COVB.mjs +0 -1
- package/dist/preview-engine/renderers-G5KQISVL.mjs +0 -1
- package/dist/preview-engine/renderers-GJSUN5HU.mjs +0 -1
- package/dist/preview-engine/renderers-GMX2ZQDG.mjs +0 -1
- package/dist/preview-engine/renderers-GXCRINGC.mjs +0 -1
- package/dist/preview-engine/renderers-IHKORHMT.mjs +0 -1
- package/dist/preview-engine/renderers-JA4SLMG3.mjs +0 -1
- package/dist/preview-engine/renderers-JLN77CFZ.mjs +0 -1
- package/dist/preview-engine/renderers-KBFW7B5F.mjs +0 -1
- package/dist/preview-engine/renderers-LJRJMFCR.mjs +0 -1
- package/dist/preview-engine/renderers-LPAPZ5QS.mjs +0 -1
- package/dist/preview-engine/renderers-NQUDQEHY.mjs +0 -1
- package/dist/preview-engine/renderers-NS3AIJVG.mjs +0 -1
- package/dist/preview-engine/renderers-NSY2SDIE.mjs +0 -1
- package/dist/preview-engine/renderers-PW4OJWHF.mjs +0 -120
- package/dist/preview-engine/renderers-PWLWOZY4.mjs +0 -1
- package/dist/preview-engine/renderers-Q3MD34JN.mjs +0 -1
- package/dist/preview-engine/renderers-RXGNA2Q7.mjs +0 -1
- package/dist/preview-engine/renderers-TVTQ2R74.mjs +0 -1
- package/dist/preview-engine/renderers-VTTGFO55.mjs +0 -1
- package/dist/preview-engine/renderers-W3VVM5HB.mjs +0 -1
- package/dist/preview-engine/renderers-WG7QBD4D.mjs +0 -1
- package/dist/preview-engine/renderers-WLLJFZTF.mjs +0 -1
- package/dist/preview-engine/renderers-WN4SYFCU.mjs +0 -1
- package/dist/preview-engine/renderers-WSMLLSWX.mjs +0 -1
- package/dist/preview-engine/renderers-XFBSGTHU.mjs +0 -1
- package/dist/preview-engine/renderers-XFC6ZPO5.mjs +0 -1
- package/dist/preview-engine/renderers-XUHRY3XH.mjs +0 -1
- package/dist/preview-engine/renderers-YAOB5XU6.mjs +0 -1
- package/dist/preview-engine/renderers-YTB4FOHT.mjs +0 -1
- package/dist/preview-engine/renderers-ZIMBODX6.mjs +0 -1
- package/dist/program-BmNKgzja.mjs.map +0 -1
- package/dist/renderer-1VuQTY1Z.mjs.map +0 -1
- package/dist/renderer-6oMSare3.mjs +0 -3
- package/dist/renderer-B1ComPb2.mjs +0 -3
- package/dist/renderer-B2XzjK0z.mjs +0 -3
- package/dist/renderer-B2ieylQ3.mjs.map +0 -1
- package/dist/renderer-B8-kzZdP.mjs.map +0 -1
- package/dist/renderer-B8UaFNqb.mjs.map +0 -1
- package/dist/renderer-BDbTWSpP.mjs.map +0 -1
- package/dist/renderer-BIIWCg_J.mjs.map +0 -1
- package/dist/renderer-BJ1aTkZf.mjs.map +0 -1
- package/dist/renderer-BM05sB8m.mjs.map +0 -1
- package/dist/renderer-BQ5Bz5D0.mjs +0 -3
- package/dist/renderer-BREIjsUU.mjs.map +0 -1
- package/dist/renderer-BTu2EVhF.mjs +0 -3
- package/dist/renderer-BZcn_iBl.mjs +0 -3
- package/dist/renderer-Bc04fivZ.mjs.map +0 -1
- package/dist/renderer-BfAWZziM.mjs.map +0 -1
- package/dist/renderer-BfJSUjPN.mjs +0 -3
- package/dist/renderer-Bfgd4N0O.mjs.map +0 -1
- package/dist/renderer-Bhdf90Zq.mjs.map +0 -1
- package/dist/renderer-Bp6sDMa6.mjs +0 -3
- package/dist/renderer-Bt7_sb_Y.mjs +0 -3
- package/dist/renderer-Bv6q84TU.mjs.map +0 -1
- package/dist/renderer-C-H680_l.mjs +0 -3
- package/dist/renderer-C606ZPUn.mjs +0 -3
- package/dist/renderer-C9jyKn1i.mjs +0 -3
- package/dist/renderer-CDLrNgfo.mjs +0 -3
- package/dist/renderer-CERfcxgv.mjs +0 -3
- package/dist/renderer-CG5PzNkv.mjs +0 -3
- package/dist/renderer-CI7sG_cv.mjs.map +0 -1
- package/dist/renderer-CPoIMVdk.mjs +0 -3
- package/dist/renderer-CQdVj2JS.mjs +0 -3
- package/dist/renderer-CQiTodg9.mjs +0 -337
- package/dist/renderer-CQiTodg9.mjs.map +0 -1
- package/dist/renderer-CWTpc4ff.mjs.map +0 -1
- package/dist/renderer-CXn5HAnK.mjs.map +0 -1
- package/dist/renderer-CZgB5st8.mjs +0 -3
- package/dist/renderer-C_TPMHiH.mjs.map +0 -1
- package/dist/renderer-Ca7L1EOp.mjs +0 -3
- package/dist/renderer-CaaOKMSd.mjs.map +0 -1
- package/dist/renderer-CdciwwMI.mjs.map +0 -1
- package/dist/renderer-CepMDQ06.mjs.map +0 -1
- package/dist/renderer-CfC_aiew.mjs.map +0 -1
- package/dist/renderer-ChdLYS-G.mjs.map +0 -1
- package/dist/renderer-CkykdR_D.mjs +0 -3
- package/dist/renderer-Cl6GkeHx.mjs +0 -3
- package/dist/renderer-ClcjrFyo.mjs +0 -3
- package/dist/renderer-CnXW28b9.mjs.map +0 -1
- package/dist/renderer-CpkiHRhh.mjs.map +0 -1
- package/dist/renderer-CtVkU_GA.mjs +0 -44
- package/dist/renderer-CtVkU_GA.mjs.map +0 -1
- package/dist/renderer-Ctk2zzfy.mjs.map +0 -1
- package/dist/renderer-CtyD_Xju.mjs.map +0 -1
- package/dist/renderer-CySUP_wk.mjs +0 -3
- package/dist/renderer-CzPWB0Ss.mjs.map +0 -1
- package/dist/renderer-D2XD4QYk.mjs.map +0 -1
- package/dist/renderer-D2l_Odyg.mjs +0 -3
- package/dist/renderer-D7zvPHKn.mjs.map +0 -1
- package/dist/renderer-D9NnIx7o.mjs +0 -3
- package/dist/renderer-DCPCYySt.mjs +0 -3
- package/dist/renderer-DEJwPRkR.mjs.map +0 -1
- package/dist/renderer-DIkpJEOZ.mjs +0 -3
- package/dist/renderer-DML9qpmS.mjs.map +0 -1
- package/dist/renderer-DNSXPkf_.mjs +0 -3
- package/dist/renderer-DP-CvZ_Z.mjs +0 -3
- package/dist/renderer-DZGtBUCx.mjs.map +0 -1
- package/dist/renderer-D_1oDOCP.mjs.map +0 -1
- package/dist/renderer-DeXb8R6h.mjs +0 -3
- package/dist/renderer-DezO-ZaP.mjs +0 -4
- package/dist/renderer-DhXe04fC.mjs +0 -3
- package/dist/renderer-DirxsOjq.mjs.map +0 -1
- package/dist/renderer-Djlb4TLO.mjs.map +0 -1
- package/dist/renderer-DnH3SI7w.mjs +0 -3
- package/dist/renderer-DpGc-N3G.mjs.map +0 -1
- package/dist/renderer-Dpw4oi33.mjs +0 -3
- package/dist/renderer-DxTs4Iyi.mjs.map +0 -1
- package/dist/renderer-Dy0utCl7.mjs.map +0 -1
- package/dist/renderer-Md-ytU0v.mjs +0 -3
- package/dist/renderer-RKsXlF_0.mjs +0 -23900
- package/dist/renderer-RKsXlF_0.mjs.map +0 -1
- package/dist/renderer-U-bhWO9Q.mjs +0 -3
- package/dist/renderer-_uvdg48N.mjs.map +0 -1
- package/dist/renderer-bsWnRNpJ.mjs.map +0 -1
- package/dist/renderer-cgxO2xN6.mjs.map +0 -1
- package/dist/renderer-d5-F_48R.mjs +0 -3
- package/dist/renderer-ho_jXJ0H.mjs.map +0 -1
- package/dist/renderer-vqkKWqa5.mjs.map +0 -1
- package/dist/renderer-zA5okHds.mjs +0 -3
- package/dist/signin-Db08vl-g.mjs +0 -865
- package/dist/signin-Db08vl-g.mjs.map +0 -1
- package/dist/sso-oidc-CpLz_lIu.mjs +0 -1051
- package/dist/sso-oidc-CpLz_lIu.mjs.map +0 -1
- package/dist/sts-BQefGuml.mjs +0 -6
- package/dist/sts-Dgl0kH-t.mjs +0 -1395
- package/dist/sts-Dgl0kH-t.mjs.map +0 -1
- /package/dist/{renderer-C2n-EHxg.mjs → renderer-B-BcgA6d.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-D0aZNkQE.mjs","names":[],"sources":["../../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tblurUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]),\n\tsignalTextureLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tmodule: blurModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\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\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tconst unwrapped = unwrapFrameParam(op[configKey], compositionFrame, fps);\n\t\t\tif (unwrapped.gpuTextureView) {\n\t\t\t\tgpuTextureView = unwrapped.gpuTextureView;\n\t\t\t\thasStaticSig = true;\n\t\t\t}\n\t\t\tconst rawVal = unwrapped.value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(outTex1, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t}\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-rcrwEq-B.mjs.map"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
2
|
-
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-
|
|
3
|
-
import {
|
|
1
|
+
import { l as unwrapFrameParam, n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
+
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-BY0bIWgr.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass } from "./gpu-DG3gI88-.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
|
-
//#region ../../nodes/node-patch-heal/dist/renderers-
|
|
6
|
+
//#region ../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs
|
|
7
7
|
const MAX_RADIUS = 500;
|
|
8
8
|
const MAX_FEATHER = 100;
|
|
9
9
|
const MAX_OFFSET = 4096;
|
|
@@ -293,118 +293,42 @@ const deviceResourceCache = /* @__PURE__ */ new WeakMap();
|
|
|
293
293
|
function getDeviceResources(device, format) {
|
|
294
294
|
let res = deviceResourceCache.get(device);
|
|
295
295
|
if (res) return res;
|
|
296
|
-
const uniformLayout = device
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
buffer: { type: "uniform" }
|
|
300
|
-
}] });
|
|
301
|
-
const textureLayout = device.createBindGroupLayout({ entries: [
|
|
302
|
-
{
|
|
303
|
-
binding: 0,
|
|
304
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
305
|
-
texture: { sampleType: "float" }
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
binding: 1,
|
|
309
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
310
|
-
texture: { sampleType: "float" }
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
binding: 2,
|
|
314
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
315
|
-
sampler: { type: "filtering" }
|
|
316
|
-
}
|
|
317
|
-
] });
|
|
318
|
-
const signalTextureLayout = device.createBindGroupLayout({ entries: [
|
|
319
|
-
{
|
|
320
|
-
binding: 0,
|
|
321
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
322
|
-
texture: { sampleType: "float" }
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
binding: 1,
|
|
326
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
327
|
-
texture: { sampleType: "float" }
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
binding: 2,
|
|
331
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
332
|
-
texture: { sampleType: "float" }
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
binding: 3,
|
|
336
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
337
|
-
texture: { sampleType: "float" }
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
binding: 4,
|
|
341
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
342
|
-
texture: { sampleType: "float" }
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
binding: 5,
|
|
346
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
347
|
-
texture: { sampleType: "float" }
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
binding: 6,
|
|
351
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
352
|
-
texture: { sampleType: "float" }
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
binding: 7,
|
|
356
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
357
|
-
texture: { sampleType: "float" }
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
binding: 8,
|
|
361
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
362
|
-
sampler: { type: "filtering" }
|
|
363
|
-
}
|
|
364
|
-
] });
|
|
365
|
-
const shaderModule = device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\n${WGSL_PATCHHEAL_FS}` });
|
|
366
|
-
const pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [
|
|
367
|
-
uniformLayout,
|
|
368
|
-
textureLayout,
|
|
369
|
-
signalTextureLayout
|
|
370
|
-
] });
|
|
296
|
+
const uniformLayout = fragmentBindGroupLayout(device, ["uniform"]);
|
|
297
|
+
const textureLayout = texturesLayout(device, 2);
|
|
298
|
+
const signalTextureLayout = texturesLayout(device, 8);
|
|
371
299
|
res = {
|
|
372
300
|
uniformLayout,
|
|
373
301
|
textureLayout,
|
|
374
302
|
signalTextureLayout,
|
|
375
|
-
pipeline: device
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
dstFactor: "zero",
|
|
395
|
-
operation: "add"
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}]
|
|
303
|
+
pipeline: createFullscreenPipeline(device, {
|
|
304
|
+
module: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\n${WGSL_PATCHHEAL_FS}` }),
|
|
305
|
+
layouts: device.createPipelineLayout({ bindGroupLayouts: [
|
|
306
|
+
uniformLayout,
|
|
307
|
+
textureLayout,
|
|
308
|
+
signalTextureLayout
|
|
309
|
+
] }),
|
|
310
|
+
format,
|
|
311
|
+
blend: {
|
|
312
|
+
color: {
|
|
313
|
+
srcFactor: "one",
|
|
314
|
+
dstFactor: "zero",
|
|
315
|
+
operation: "add"
|
|
316
|
+
},
|
|
317
|
+
alpha: {
|
|
318
|
+
srcFactor: "one",
|
|
319
|
+
dstFactor: "zero",
|
|
320
|
+
operation: "add"
|
|
321
|
+
}
|
|
399
322
|
},
|
|
400
|
-
|
|
323
|
+
vertexEntryPoint: "vs_main",
|
|
324
|
+
fragmentEntryPoint: "fs_main"
|
|
401
325
|
})
|
|
402
326
|
};
|
|
403
327
|
deviceResourceCache.set(device, res);
|
|
404
328
|
return res;
|
|
405
329
|
}
|
|
406
330
|
const PatchHealWebGPURenderer = async (args) => {
|
|
407
|
-
const { ctx, encoder, pass,
|
|
331
|
+
const { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;
|
|
408
332
|
const op = props.virtualMedia?.operation;
|
|
409
333
|
if (op?.op !== "PatchHeal" || !op) return;
|
|
410
334
|
const childMedia = props.virtualMedia?.children?.[0];
|
|
@@ -416,68 +340,24 @@ const PatchHealWebGPURenderer = async (args) => {
|
|
|
416
340
|
const compositionFrame = props.compositionFrame ?? frame;
|
|
417
341
|
const fps = props.fps || 30;
|
|
418
342
|
const nodeId = op.inputs ? Object.keys(op.inputs)[0] : "patch_heal_node";
|
|
419
|
-
const
|
|
420
|
-
const tmpSrcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);
|
|
421
|
-
const tmpSrcView = tmpSrcTex.createView();
|
|
422
|
-
ctx.renderer.beginFrame(encoder, tmpSrcView, {
|
|
423
|
-
r: 0,
|
|
424
|
-
g: 0,
|
|
425
|
-
b: 0,
|
|
426
|
-
a: 0
|
|
427
|
-
}, width, height, "clear").end();
|
|
428
|
-
ctx.renderer.pushScissor({
|
|
429
|
-
x: 0,
|
|
430
|
-
y: 0,
|
|
431
|
-
width,
|
|
432
|
-
height
|
|
433
|
-
});
|
|
434
|
-
ctx.renderer.pushIdentity();
|
|
435
|
-
await drawChild(childMedia, {
|
|
343
|
+
const { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {
|
|
436
344
|
...props,
|
|
437
345
|
virtualMedia: childMedia,
|
|
438
|
-
renderId: `${props.renderId}-src
|
|
439
|
-
|
|
440
|
-
}, tmpSrcView, tmpSrcTex, width, height);
|
|
441
|
-
ctx.renderer.popTransform();
|
|
442
|
-
ctx.renderer.popScissor();
|
|
346
|
+
renderId: `${props.renderId}-src`
|
|
347
|
+
} });
|
|
443
348
|
let maskTex = null;
|
|
444
|
-
if (op.maskMedia) {
|
|
445
|
-
|
|
446
|
-
...props.excludeTextures || [],
|
|
447
|
-
targetTexture,
|
|
448
|
-
tmpSrcTex
|
|
449
|
-
]);
|
|
450
|
-
const maskView = maskTex.createView();
|
|
451
|
-
ctx.renderer.beginFrame(encoder, maskView, {
|
|
452
|
-
r: 0,
|
|
453
|
-
g: 0,
|
|
454
|
-
b: 0,
|
|
455
|
-
a: 0
|
|
456
|
-
}, width, height, "clear").end();
|
|
457
|
-
ctx.renderer.pushScissor({
|
|
458
|
-
x: 0,
|
|
459
|
-
y: 0,
|
|
460
|
-
width,
|
|
461
|
-
height
|
|
462
|
-
});
|
|
463
|
-
ctx.renderer.pushIdentity();
|
|
464
|
-
await drawChild(op.maskMedia, {
|
|
349
|
+
if (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {
|
|
350
|
+
props: {
|
|
465
351
|
...props,
|
|
466
352
|
virtualMedia: op.maskMedia,
|
|
467
353
|
renderId: `${props.renderId}-mask`,
|
|
468
|
-
excludeTextures: [
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
]
|
|
473
|
-
}, maskView, maskTex, width, height);
|
|
474
|
-
ctx.renderer.popTransform();
|
|
475
|
-
ctx.renderer.popScissor();
|
|
476
|
-
}
|
|
354
|
+
excludeTextures: [...props.excludeTextures || [], tmpSrcTex]
|
|
355
|
+
},
|
|
356
|
+
exclude: [tmpSrcTex]
|
|
357
|
+
}));
|
|
477
358
|
const { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);
|
|
478
359
|
const sampler = ctx.renderer.samplerCache.getSampler(ctx.device);
|
|
479
|
-
const elapsedSeconds
|
|
480
|
-
const durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;
|
|
360
|
+
const { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);
|
|
481
361
|
const patches = normalizePatches(op);
|
|
482
362
|
const resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {
|
|
483
363
|
const handleId = op[`${configKey}HandleId`];
|
|
@@ -490,16 +370,7 @@ const PatchHealWebGPURenderer = async (args) => {
|
|
|
490
370
|
const numVal = typeof input.outputItem.data === "number" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;
|
|
491
371
|
val = Math.max(minVal, Math.min(maxVal, Number(numVal)));
|
|
492
372
|
} else {
|
|
493
|
-
|
|
494
|
-
if (rawVal !== void 0 && rawVal !== null) {
|
|
495
|
-
if (typeof rawVal === "object") {
|
|
496
|
-
if ("get" in rawVal && typeof rawVal.get === "function") rawVal = rawVal.get({
|
|
497
|
-
frame: compositionFrame,
|
|
498
|
-
fps
|
|
499
|
-
});
|
|
500
|
-
else if ("value" in rawVal) rawVal = rawVal.value;
|
|
501
|
-
} else if (typeof rawVal === "function") rawVal = rawVal(compositionFrame, fps);
|
|
502
|
-
}
|
|
373
|
+
const rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;
|
|
503
374
|
const numVal = Number(rawVal ?? fallbackVal);
|
|
504
375
|
val = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));
|
|
505
376
|
}
|
|
@@ -571,10 +442,16 @@ const PatchHealWebGPURenderer = async (args) => {
|
|
|
571
442
|
hasStaticSig: false,
|
|
572
443
|
sd: null
|
|
573
444
|
};
|
|
574
|
-
const
|
|
575
|
-
|
|
576
|
-
|
|
445
|
+
const signalContext = {
|
|
446
|
+
args,
|
|
447
|
+
width,
|
|
448
|
+
height,
|
|
449
|
+
frame,
|
|
450
|
+
fps,
|
|
451
|
+
elapsedSeconds,
|
|
452
|
+
durationSeconds
|
|
577
453
|
};
|
|
454
|
+
const getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);
|
|
578
455
|
const offsetXView = getSignalView(offsetXRes, "offsetX_sig");
|
|
579
456
|
const offsetYView = getSignalView(offsetYRes, "offsetY_sig");
|
|
580
457
|
const centerXView = getSignalView(centerXRes, "centerX_sig");
|
|
@@ -665,47 +542,23 @@ const PatchHealWebGPURenderer = async (args) => {
|
|
|
665
542
|
}
|
|
666
543
|
]
|
|
667
544
|
});
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
healPass.setPipeline(pipeline);
|
|
680
|
-
healPass.setBindGroup(0, ctx.device.createBindGroup({
|
|
681
|
-
layout: uLayout,
|
|
682
|
-
entries: [{
|
|
683
|
-
binding: 0,
|
|
684
|
-
resource: { buffer: uBuffer }
|
|
685
|
-
}]
|
|
686
|
-
}));
|
|
687
|
-
healPass.setBindGroup(1, texBindGroup);
|
|
688
|
-
healPass.setBindGroup(2, sigBindGroup);
|
|
689
|
-
healPass.draw(4);
|
|
690
|
-
healPass.end();
|
|
545
|
+
drawFullscreenPass(encoder, destinationTex.createView(), pipeline, [
|
|
546
|
+
ctx.device.createBindGroup({
|
|
547
|
+
layout: uLayout,
|
|
548
|
+
entries: [{
|
|
549
|
+
binding: 0,
|
|
550
|
+
resource: { buffer: uBuffer }
|
|
551
|
+
}]
|
|
552
|
+
}),
|
|
553
|
+
texBindGroup,
|
|
554
|
+
sigBindGroup
|
|
555
|
+
]);
|
|
691
556
|
currentInputTex = destinationTex;
|
|
692
557
|
}
|
|
693
|
-
|
|
694
|
-
r: 0,
|
|
695
|
-
g: 0,
|
|
696
|
-
b: 0,
|
|
697
|
-
a: 0
|
|
698
|
-
}, width, height, "load");
|
|
699
|
-
ctx.renderer.drawTexture(finalPass, currentInputTex, {
|
|
700
|
-
x: 0,
|
|
701
|
-
y: 0,
|
|
702
|
-
width,
|
|
703
|
-
height
|
|
704
|
-
}, { opacity: 1 });
|
|
705
|
-
args.pass = finalPass;
|
|
558
|
+
drawTextureToTarget(args, currentInputTex);
|
|
706
559
|
};
|
|
707
560
|
var renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });
|
|
708
561
|
|
|
709
562
|
//#endregion
|
|
710
563
|
export { renderers_default as n, PatchHealWebGPURenderer as t };
|
|
711
|
-
//# sourceMappingURL=renderer-
|
|
564
|
+
//# sourceMappingURL=renderer-D2BRlqof.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-D2BRlqof.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 2);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat,\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexEntryPoint: \"vs_main\",\n\t\t\tfragmentEntryPoint: \"fs_main\"\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\tlet maskTex = null;\n\tif (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t\t},\n\t\texclude: [tmpSrcTex]\n\t}));\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else {\n\t\t\tconst rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? fallbackVal);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst signalContext = {\n\t\t\targs,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedSeconds,\n\t\t\tdurationSeconds\n\t\t};\n\t\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tdrawFullscreenPass(encoder, destinationTex.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\ttexBindGroup,\n\t\t\tsigBindGroup\n\t\t]);\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tdrawTextureToTarget(args, currentInputTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-i-B6z1sf.mjs.map"],"mappings":";;;;;;AAMA,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,aAAa;AACnB,MAAM,kBAAkB,EAAE,OAAO;CAChC,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ;CAC/B,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG;CAC7C,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG;CAC7C,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG;CAChE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;CAC/D,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG;CACrD,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG;CAC3D,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,GAAG;CACvD,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CAC5C,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA,CAAC,CAAC,QAAQ,eAAe;CAC1B,CAAC;AACF,MAAM,kBAAkB,eAAe,CAAC,MAAM,WAAW,EAAE,MAAM,gBAAgB,CAAC,UAAU,EAAE;CAC7F,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE;CACzD,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE;CACzD,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG,EAAE;CAC5E,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE;CAC3E,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG,EAAE;CACjE,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,GAAG,EAAE;CACvE,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC,QAAQ,GAAG,EAAE;CACnE,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;CACxD,UAAU;CACV,WAAW,CAAC,UAAU,SAAS;CAC/B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,MAAM,QAAQ,EAAE,KAAK;CACvB;CACA;CACA;CACA,CAAC,CAAC,QAAQ,eAAe,EAAE;CAC3B,OAAO;CACP,aAAa;CACb,CAAC,CAAC,OAAO;AACV,MAAM,4BAA4B,gBAAgB;AAClD,SAAS,iBAAiB,QAAQ;AACjC,KAAI,QAAQ,WAAW,OAAO,QAAQ,SAAS,EAAG,QAAO,OAAO,QAAQ,KAAK,GAAG,SAAS;EACxF,IAAI,EAAE,MAAM,SAAS,MAAM;EAC3B,SAAS,EAAE,WAAW;EACtB,SAAS,EAAE,WAAW;EACtB,SAAS,EAAE,WAAW;EACtB,SAAS,EAAE,WAAW;EACtB,QAAQ,EAAE,UAAU;EACpB,cAAc,EAAE,gBAAgB,EAAE,UAAU;EAC5C,SAAS,EAAE,WAAW;EACtB,SAAS,EAAE,WAAW;EACtB,MAAM,EAAE,QAAQ;EAChB,EAAE;CACH,MAAM,iBAAiB,QAAQ,UAAU;AACzC,QAAO,CAAC;EACP,IAAI;EACJ,SAAS,QAAQ,WAAW;EAC5B,SAAS,QAAQ,WAAW;EAC5B,SAAS,QAAQ,WAAW;EAC5B,SAAS,QAAQ,WAAW;EAC5B,QAAQ;EACR,cAAc,QAAQ,gBAAgB;EACtC,SAAS,QAAQ,WAAW;EAC5B,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ;EACtB,CAAC;;AAEH,MAAM,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,kBAAkB,CAAC;AAW7E,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;AA0B3B,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgK1B,MAAM,sCAAsC,IAAI,SAAS;AACzD,SAAS,mBAAmB,QAAQ,QAAQ;CAC3C,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;CAChB,MAAM,gBAAgB,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAClE,MAAM,gBAAgB,eAAe,QAAQ,EAAE;CAC/C,MAAM,sBAAsB,eAAe,QAAQ,EAAE;AACrD,OAAM;EACL;EACA;EACA;EACA,UAAU,yBAAyB,QAAQ;GAC1C,QAAQ,OAAO,mBAAmB,EAAE,MAAM,GAAG,mBAAmB,IAAI,qBAAqB,CAAC;GAC1F,SAAS,OAAO,qBAAqB,EAAE,kBAAkB;IACxD;IACA;IACA;IACA,EAAE,CAAC;GACJ;GACA,OAAO;IACN,OAAO;KACN,WAAW;KACX,WAAW;KACX,WAAW;KACX;IACD,OAAO;KACN,WAAW;KACX,WAAW;KACX,WAAW;KACX;IACD;GACD,kBAAkB;GAClB,oBAAoB;GACpB,CAAC;EACF;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,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,eAAe,CAAC,GAAI;CACnC,MAAM,aAAa,MAAM,cAAc,WAAW;AAClD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,SAAS,GAAG,SAAS,OAAO,KAAK,GAAG,OAAO,CAAC,KAAK;CACvD,MAAM,EAAE,SAAS,WAAW,MAAM,eAAe,MAAM,mBAAmB,MAAM,YAAY,EAAE,OAAO;EACpG,GAAG;EACH,cAAc;EACd,UAAU,GAAG,MAAM,SAAS;EAC5B,EAAE,CAAC;CACJ,IAAI,UAAU;AACd,KAAI,GAAG,UAAW,EAAC,CAAC,SAAS,WAAW,MAAM,mBAAmB,MAAM,GAAG,WAAW;EACpF,OAAO;GACN,GAAG;GACH,cAAc,GAAG;GACjB,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB,CAAC,GAAG,MAAM,mBAAmB,EAAE,EAAE,UAAU;GAC5D;EACD,SAAS,CAAC,UAAU;EACpB,CAAC;CACF,MAAM,EAAE,UAAU,eAAe,SAAS,eAAe,SAAS,qBAAqB,cAAc,mBAAmB,IAAI,QAAQ,IAAI,SAAS,OAAO;CACxJ,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;CAC3E,MAAM,UAAU,iBAAiB,GAAG;CACpC,MAAM,mBAAmB,WAAW,aAAa,QAAQ,WAAW;EACnE,MAAM,WAAW,GAAG,GAAG,UAAU;EACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;EACjD,MAAM,YAAY,CAAC,EAAE,OAAO,oBAAoB,MAAM,YAAY,SAAS,YAAY,MAAM,YAAY,SAAS;EAClH,MAAM,KAAK,aAAa,OAAO,YAAY,OAAO,MAAM,WAAW,OAAO;EAC1E,IAAI,MAAM;EACV,IAAI,eAAe;AACnB,MAAI,CAAC,UAAW,KAAI,OAAO,mBAAmB,MAAM,YAAY,SAAS,UAAU;GAClF,MAAM,SAAS,OAAO,MAAM,WAAW,SAAS,WAAW,MAAM,WAAW,OAAO,MAAM,WAAW,MAAM,SAAS;AACnH,SAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,OAAO,OAAO,CAAC,CAAC;SAClD;GACN,MAAM,SAAS,iBAAiB,aAAa,kBAAkB,IAAI,CAAC;GACpE,MAAM,SAAS,OAAO,UAAU,YAAY;AAC5C,SAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO,GAAG,cAAc,OAAO,CAAC;;WAEtE,IAAI;AACZ,SAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;AAChE,kBAAe;;AAEhB,SAAO;GACN;GACA;GACA;GACA;;CAEF,MAAM,gBAAgB,UAAU,QAAQ,YAAY,GAAG;CACvD,IAAI,kBAAkB;CACtB,MAAM,UAAU,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC/D;EACA,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE;EAC3B;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;CACF,MAAM,UAAU,QAAQ,SAAS,IAAI,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EACpF;EACA;EACA,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE;EAC3B;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC,GAAG;AACL,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACxC,MAAM,QAAQ,QAAQ;EACtB,MAAM,eAAe,MAAM;EAC3B,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,GAAG,EAAE,GAAG;GACnF,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,GAAG,EAAE,GAAG;GACnF,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,CAAC,YAAY,WAAW,GAAG;GACtG,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,CAAC,YAAY,WAAW,GAAG;GACtG,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,YAAY,eAAe,gBAAgB,UAAU,MAAM,QAAQ,GAAG,WAAW,GAAG;GACzF,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,kBAAkB,eAAe,gBAAgB,gBAAgB,MAAM,gBAAgB,MAAM,QAAQ,GAAG,WAAW,GAAG;GAC3H,KAAK,MAAM,gBAAgB,MAAM;GACjC,cAAc;GACd,IAAI;GACJ;EACD,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,GAAG,YAAY,GAAG;GAC7F,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,aAAa,eAAe,gBAAgB,WAAW,MAAM,SAAS,GAAG,EAAE,GAAG;GACnF,KAAK,MAAM;GACX,cAAc;GACd,IAAI;GACJ;EACD,MAAM,gBAAgB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,MAAM,iBAAiB,KAAK,WAAW,kBAAkB,eAAe,KAAK,GAAG,OAAO,GAAG,SAAS;EACnG,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,aAAa,cAAc,WAAW,aAAa;EACzD,MAAM,mBAAmB,cAAc,iBAAiB,mBAAmB;EAC3E,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,cAAc,cAAc,YAAY,cAAc;EAC5D,MAAM,UAAU,MAAM,SAAS,UAAU,IAAI,MAAM,SAAS,oBAAoB,IAAI;EACpF,MAAM,YAAY,IAAI,aAAa,GAAG;AACtC,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK,UAAU;AACzB,YAAU,KAAK,gBAAgB;AAC/B,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK,WAAW;AAC1B,YAAU,KAAK;AACf,YAAU,KAAK,UAAU,IAAI;AAC7B,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM,UAAU,eAAe,IAAI;AAC7C,YAAU,MAAM,gBAAgB,eAAe,IAAI;AACnD,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM,WAAW,eAAe,IAAI;AAC9C,YAAU,MAAM;AAChB,YAAU,MAAM;EAChB,MAAM,UAAU,IAAI,SAAS,mBAAmB,UAAU;EAC1D,MAAM,iBAAiB,IAAI,MAAM,IAAI,UAAU;EAC/C,MAAM,eAAe,IAAI,OAAO,gBAAgB;GAC/C,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU,gBAAgB,YAAY;KACtC;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;EACF,MAAM,eAAe,IAAI,OAAO,gBAAgB;GAC/C,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;AACF,qBAAmB,SAAS,eAAe,YAAY,EAAE,UAAU;GAClE,IAAI,OAAO,gBAAgB;IAC1B,QAAQ;IACR,SAAS,CAAC;KACT,SAAS;KACT,UAAU,EAAE,QAAQ,SAAS;KAC7B,CAAC;IACF,CAAC;GACF;GACA;GACA,CAAC;AACF,oBAAkB;;AAEnB,qBAAoB,MAAM,gBAAgB;;AAK3C,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
|