framefields 2.8.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -1
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-CGVJlZb9.mjs → audio-BfQg37MW.mjs} +3 -3
- package/dist/{audio-CGVJlZb9.mjs.map → audio-BfQg37MW.mjs.map} +1 -1
- package/dist/{audio-CxAUxVyA.d.mts → audio-Ccpl9mjV.d.mts} +3 -3
- package/dist/{audio-CxAUxVyA.d.mts.map → audio-Ccpl9mjV.d.mts.map} +1 -1
- package/dist/cli/check-worker.mjs +44 -44
- package/dist/components/index.d.mts +10 -10
- package/dist/components/index.mjs +43 -43
- package/dist/{dist-CnFcSau0.mjs → dist-C1cCW7Bt.mjs} +2297 -213
- package/dist/dist-C1cCW7Bt.mjs.map +1 -0
- package/dist/{dist-C5eZw8ms.mjs → dist-C8Xq3zgx.mjs} +2 -2
- package/dist/{dist-C5eZw8ms.mjs.map → dist-C8Xq3zgx.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-DdvkiI3u.mjs → effects-CemgqEPv.mjs} +2 -2
- package/dist/{effects-DdvkiI3u.mjs.map → effects-CemgqEPv.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-k_89s1HO.mjs → fonts-BW0pPcvJ.mjs} +2 -2
- package/dist/{fonts-k_89s1HO.mjs.map → fonts-BW0pPcvJ.mjs.map} +1 -1
- package/dist/{gpu-BoyykRdD.mjs → gpu-CMaa63nz.mjs} +2 -2
- package/dist/{gpu-BoyykRdD.mjs.map → gpu-CMaa63nz.mjs.map} +1 -1
- package/dist/{index-CPFKis94.d.mts → index-7Z9_a_iB.d.mts} +3 -3
- package/dist/{index-CPFKis94.d.mts.map → index-7Z9_a_iB.d.mts.map} +1 -1
- package/dist/{index-CFKMZDv1.d.mts → index-BIjMAW1h.d.mts} +2 -2
- package/dist/{index-CFKMZDv1.d.mts.map → index-BIjMAW1h.d.mts.map} +1 -1
- package/dist/{index-BukqOGDa.d.mts → index-CFoAmh7q.d.mts} +3 -3
- package/dist/{index-BukqOGDa.d.mts.map → index-CFoAmh7q.d.mts.map} +1 -1
- package/dist/{index-CPeaSZoz.d.mts → index-CJL0JAU8.d.mts} +2 -2
- package/dist/{index-CPeaSZoz.d.mts.map → index-CJL0JAU8.d.mts.map} +1 -1
- package/dist/{index-Ds9_v60R.d.mts → index-CZjrnylh.d.mts} +544 -336
- package/dist/index-CZjrnylh.d.mts.map +1 -0
- package/dist/{index-Ced1Ry4S.d.mts → index-D5UDyVMb.d.mts} +211 -9
- package/dist/index-D5UDyVMb.d.mts.map +1 -0
- package/dist/{index-B_nooAhS.d.mts → index-Du5YgdzM.d.mts} +53 -15
- package/dist/index-Du5YgdzM.d.mts.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.mjs +50 -50
- package/dist/preview/index.d.mts +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-DHqCrFhG.mjs → preview-BQVgn6Ho.mjs} +2 -2
- package/dist/{preview-DHqCrFhG.mjs.map → preview-BQVgn6Ho.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-JGDZQCNU.mjs → chunk-2B722GXM.mjs} +1 -1
- package/dist/preview-engine/{chunk-GFW3D464.mjs → chunk-2DWY7UBV.mjs} +1 -1
- package/dist/preview-engine/{chunk-72DYOIMP.mjs → chunk-2PYTDN2C.mjs} +1 -1
- package/dist/preview-engine/{chunk-PF3SXQNV.mjs → chunk-34DL53D5.mjs} +1 -1
- package/dist/preview-engine/{chunk-GLXJOXBE.mjs → chunk-34RJ7GAS.mjs} +1 -1
- package/dist/preview-engine/{chunk-6OY4YLTC.mjs → chunk-35HMRW4I.mjs} +1 -1
- package/dist/preview-engine/chunk-374QY63R.mjs +1974 -0
- package/dist/preview-engine/{chunk-W26U6BP2.mjs → chunk-4WYM72ZN.mjs} +1 -1
- package/dist/preview-engine/{chunk-EQ4VBUWM.mjs → chunk-5AWAOMBR.mjs} +1 -1
- package/dist/preview-engine/{chunk-J4SHMCTG.mjs → chunk-6R3UJBL5.mjs} +1 -1
- package/dist/preview-engine/{chunk-VHGC72XP.mjs → chunk-73CNXGAK.mjs} +1 -1
- package/dist/preview-engine/{chunk-K5F4ZW6T.mjs → chunk-7U34VKNO.mjs} +1 -1
- package/dist/preview-engine/{chunk-KYOPOCO5.mjs → chunk-AHQCDTD6.mjs} +1 -1
- package/dist/preview-engine/{chunk-ADV2TIKA.mjs → chunk-BEYA25UZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-RBDIRBEI.mjs → chunk-BJV2LBII.mjs} +1 -1
- package/dist/preview-engine/{chunk-LBJBBEKP.mjs → chunk-BVDWS3D2.mjs} +1 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
- package/dist/preview-engine/{chunk-NIPWL6Z5.mjs → chunk-C4M3B2Q2.mjs} +1 -1
- package/dist/preview-engine/{chunk-LLUFOFF4.mjs → chunk-CC4NNNIY.mjs} +1 -1
- package/dist/preview-engine/chunk-CCB3VTY2.mjs +39 -0
- package/dist/preview-engine/{chunk-NX66555S.mjs → chunk-CN2VLYLB.mjs} +1 -1
- package/dist/preview-engine/{chunk-SK7PUBTC.mjs → chunk-DMSZXG56.mjs} +1 -1
- package/dist/preview-engine/{chunk-WC257OBY.mjs → chunk-DVZITDQS.mjs} +1 -1
- package/dist/preview-engine/chunk-FKG27DVO.mjs +4 -0
- package/dist/preview-engine/{chunk-COZG35ZR.mjs → chunk-FTCEG3SF.mjs} +1 -1
- package/dist/preview-engine/{chunk-57LES7TL.mjs → chunk-GA4HNR44.mjs} +1 -1
- package/dist/preview-engine/chunk-GEUUXTDL.mjs +138 -0
- package/dist/preview-engine/{chunk-S4WNCEMO.mjs → chunk-GIICZZQI.mjs} +1 -1
- package/dist/preview-engine/{chunk-RTHU7REC.mjs → chunk-GRJJVSOV.mjs} +1 -1
- package/dist/preview-engine/{chunk-RGDM6PQ5.mjs → chunk-GZWA5QJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-LZNNM5OB.mjs → chunk-H7BSN7V7.mjs} +1 -1
- package/dist/preview-engine/{chunk-JXUENEQO.mjs → chunk-HOV6DDBZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-C6XLAJLL.mjs → chunk-JSYG6OWZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-GZVPVOHB.mjs → chunk-K3C6GUQD.mjs} +1 -1
- package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
- package/dist/preview-engine/{chunk-Y6TWMUJC.mjs → chunk-LVYVXVZO.mjs} +1 -1
- package/dist/preview-engine/chunk-MIEH74UH.mjs +480 -0
- package/dist/preview-engine/{chunk-AVDHZNIZ.mjs → chunk-OH5W5EL6.mjs} +1 -1
- package/dist/preview-engine/{chunk-22F33PPP.mjs → chunk-P5FKRQFU.mjs} +1 -1
- package/dist/preview-engine/{chunk-7X2AUKTU.mjs → chunk-PM2W4VLT.mjs} +1 -1
- package/dist/preview-engine/chunk-QCSVT73T.mjs +2403 -0
- package/dist/preview-engine/{chunk-523CTDOC.mjs → chunk-RJIAES3X.mjs} +1 -1
- package/dist/preview-engine/{chunk-DPQN7WYQ.mjs → chunk-S2ABWY5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-G7JJ6HVL.mjs → chunk-SF37HXAH.mjs} +1 -1
- package/dist/preview-engine/{chunk-OKLYIQ5F.mjs → chunk-SPJPM43P.mjs} +1 -1
- package/dist/preview-engine/{chunk-UOTMBWBJ.mjs → chunk-TNJEZKXM.mjs} +1 -1
- package/dist/preview-engine/chunk-ULOFDFHJ.mjs +1 -0
- package/dist/preview-engine/{chunk-LLB3AGBQ.mjs → chunk-UQKPDGEH.mjs} +1 -1
- package/dist/preview-engine/{chunk-DISKQ5MH.mjs → chunk-UXYM2G6J.mjs} +1 -1
- package/dist/preview-engine/{chunk-U5YNECNG.mjs → chunk-VN36PRVD.mjs} +1 -1
- package/dist/preview-engine/{chunk-PMOKPVSD.mjs → chunk-VVE2QHVG.mjs} +1 -1
- package/dist/preview-engine/{chunk-PEUQRSIM.mjs → chunk-Y5K5LVOR.mjs} +1 -1
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
- package/dist/preview-engine/{chunk-PSEMCJBH.mjs → chunk-ZJ5SWTCW.mjs} +1 -1
- package/dist/preview-engine/chunk-ZY47XIRK.mjs +5 -0
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-3BOQOUEU.mjs +1 -0
- package/dist/preview-engine/renderers-3M2FESR2.mjs +1 -0
- package/dist/preview-engine/{renderers-FEEIDQF3.mjs → renderers-4F7WLQD5.mjs} +1 -1
- package/dist/preview-engine/{renderers-OP6MKYRM.mjs → renderers-5KANN7XF.mjs} +1 -1
- package/dist/preview-engine/{renderers-TVRR7PGN.mjs → renderers-5TO2SXFR.mjs} +1 -1
- package/dist/preview-engine/{renderers-DR7UZ3QR.mjs → renderers-5UZ3YFBD.mjs} +1 -1
- package/dist/preview-engine/renderers-6LHIWKMZ.mjs +1 -0
- package/dist/preview-engine/{renderers-7F2KF5RE.mjs → renderers-6Z7DWAPH.mjs} +1 -1
- package/dist/preview-engine/renderers-77PDUMYI.mjs +1 -0
- package/dist/preview-engine/{renderers-3J3NCOAI.mjs → renderers-7C5RA3R5.mjs} +1 -1
- package/dist/preview-engine/renderers-7XHO6M3B.mjs +228 -0
- package/dist/preview-engine/{renderers-KJAOPYAU.mjs → renderers-A24KZK2Q.mjs} +1 -1
- package/dist/preview-engine/renderers-A43VCJ7X.mjs +1 -0
- package/dist/preview-engine/renderers-AKY464RY.mjs +1 -0
- package/dist/preview-engine/renderers-C5UO6PL5.mjs +1 -0
- package/dist/preview-engine/renderers-C64QSZO4.mjs +1 -0
- package/dist/preview-engine/renderers-CIRCR6NG.mjs +1 -0
- package/dist/preview-engine/renderers-CIWOPETY.mjs +1 -0
- package/dist/preview-engine/renderers-CUMVIVHI.mjs +1 -0
- package/dist/preview-engine/renderers-CZEZCELP.mjs +1 -0
- package/dist/preview-engine/{renderers-R3YVLWKV.mjs → renderers-ENMY4DKF.mjs} +1 -1
- package/dist/preview-engine/{renderers-AAENCA7X.mjs → renderers-FSI5KNGZ.mjs} +1 -1
- package/dist/preview-engine/renderers-FSQMWHQM.mjs +1 -0
- package/dist/preview-engine/renderers-FZEW5C23.mjs +1 -0
- package/dist/preview-engine/renderers-HCET2IML.mjs +1 -0
- package/dist/preview-engine/{renderers-LBX7GPDU.mjs → renderers-IHGAWLUF.mjs} +1 -1
- package/dist/preview-engine/renderers-IUOOC6K7.mjs +1 -0
- package/dist/preview-engine/{renderers-VXMR47WZ.mjs → renderers-KC6ZSKCW.mjs} +1 -1
- package/dist/preview-engine/renderers-KYYJLVIJ.mjs +1 -0
- package/dist/preview-engine/renderers-L4GE7WV3.mjs +1 -0
- package/dist/preview-engine/renderers-L6YDX6GS.mjs +1 -0
- package/dist/preview-engine/renderers-LRAFWKCO.mjs +1 -0
- package/dist/preview-engine/renderers-LU3XZWEB.mjs +1 -0
- package/dist/preview-engine/{renderers-4YYGKLDK.mjs → renderers-MD3PRFZL.mjs} +1 -1
- package/dist/preview-engine/renderers-MOEC2XZZ.mjs +1 -0
- package/dist/preview-engine/{renderers-RGDTRVZM.mjs → renderers-NCGH2WWJ.mjs} +1 -1
- package/dist/preview-engine/renderers-ND2WV4K3.mjs +1 -0
- package/dist/preview-engine/renderers-NJ5CWVVH.mjs +1 -0
- package/dist/preview-engine/renderers-NKXYPR3V.mjs +1 -0
- package/dist/preview-engine/{renderers-WVQQZQ6Y.mjs → renderers-NUAI4TO5.mjs} +1 -1
- package/dist/preview-engine/renderers-NWR66CGK.mjs +1 -0
- package/dist/preview-engine/renderers-O22WTBRM.mjs +1 -0
- package/dist/preview-engine/renderers-O55BEDQZ.mjs +1 -0
- package/dist/preview-engine/renderers-PBBA7LQB.mjs +1 -0
- package/dist/preview-engine/{renderers-BL7Z3FTF.mjs → renderers-PIIEUKFE.mjs} +1 -1
- package/dist/preview-engine/renderers-PPZK6VEW.mjs +1 -0
- package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +1 -0
- package/dist/preview-engine/{renderers-7TNEKJZS.mjs → renderers-QA2HKUJJ.mjs} +1 -1
- package/dist/preview-engine/renderers-RMEACSRL.mjs +1 -0
- package/dist/preview-engine/{renderers-AWRIELVX.mjs → renderers-RN2MHIFK.mjs} +1 -1
- package/dist/preview-engine/renderers-SEIAUKJF.mjs +1 -0
- package/dist/preview-engine/renderers-SP42LCSI.mjs +1 -0
- package/dist/preview-engine/{renderers-OE55O27K.mjs → renderers-T74CQCEN.mjs} +1 -1
- package/dist/preview-engine/renderers-T7SZA3BX.mjs +1 -0
- package/dist/preview-engine/{renderers-ZUQ2ZBYY.mjs → renderers-TGJSOKDY.mjs} +1 -1
- package/dist/preview-engine/renderers-TSBV4KPE.mjs +1 -0
- package/dist/preview-engine/{renderers-2SE5BLLB.mjs → renderers-U4M7ZCV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-YEI4K4W4.mjs → renderers-V3AQO7AR.mjs} +1 -1
- package/dist/preview-engine/renderers-VADTDAHD.mjs +1 -0
- package/dist/preview-engine/renderers-VNNWI5C3.mjs +1 -0
- package/dist/preview-engine/{renderers-YYMRKHAA.mjs → renderers-WEYAHOBK.mjs} +1 -1
- package/dist/preview-engine/renderers-WZ75MLP3.mjs +1 -0
- package/dist/preview-engine/renderers-XB5R4UQA.mjs +1 -0
- package/dist/preview-engine/{renderers-YIVPMPQS.mjs → renderers-Y22VSOXF.mjs} +1 -1
- package/dist/preview-engine/{renderers-Y53D5CQ7.mjs → renderers-YBIUZDGQ.mjs} +1 -1
- package/dist/preview-engine/renderers-YESJR4O7.mjs +1 -0
- package/dist/preview-engine/renderers-YKSRZRRT.mjs +1 -0
- package/dist/preview-engine/{renderers-V4VML5IG.mjs → renderers-ZACSHGNZ.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/src-NGVAJYHC.mjs +8 -0
- package/dist/{program-CqQDWfSV.mjs → program-CKpKkllV.mjs} +5 -6
- package/dist/program-CKpKkllV.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--Ac-dg4A.mjs +5 -0
- package/dist/renderer--N7TMqzU.mjs +5 -0
- package/dist/{renderer-DYfNgEhK.mjs → renderer--fkmiVjl.mjs} +2 -2
- package/dist/{renderer-DYfNgEhK.mjs.map → renderer--fkmiVjl.mjs.map} +1 -1
- package/dist/{renderer-JDLYPnRh.mjs → renderer-1r-Uq-Ae.mjs} +2 -2
- package/dist/{renderer-JDLYPnRh.mjs.map → renderer-1r-Uq-Ae.mjs.map} +1 -1
- package/dist/renderer-2ecmdOae.mjs +5 -0
- package/dist/{renderer-DZKZup7n.mjs → renderer-8QIwXh7O.mjs} +3 -3
- package/dist/{renderer-DZKZup7n.mjs.map → renderer-8QIwXh7O.mjs.map} +1 -1
- package/dist/{renderer-DCyp-jzQ.mjs → renderer-B-ur0Ej8.mjs} +3 -3
- package/dist/{renderer-DCyp-jzQ.mjs.map → renderer-B-ur0Ej8.mjs.map} +1 -1
- package/dist/{renderer-BD25uND8.mjs → renderer-B0piZg9r.mjs} +383 -171
- package/dist/renderer-B0piZg9r.mjs.map +1 -0
- package/dist/{renderer-Cn34qZC4.mjs → renderer-B2jjxsjO.mjs} +2 -2
- package/dist/{renderer-Cn34qZC4.mjs.map → renderer-B2jjxsjO.mjs.map} +1 -1
- package/dist/{renderer-DbO4xZBb.mjs → renderer-B39I6CQw.mjs} +3 -3
- package/dist/{renderer-DbO4xZBb.mjs.map → renderer-B39I6CQw.mjs.map} +1 -1
- package/dist/{renderer-CTr_Zi08.mjs → renderer-B522Dkdk.mjs} +3 -3
- package/dist/{renderer-CTr_Zi08.mjs.map → renderer-B522Dkdk.mjs.map} +1 -1
- package/dist/renderer-B5RJp5g-.mjs +5 -0
- package/dist/renderer-B7xyT1Vb.mjs +5 -0
- package/dist/{renderer-4a4koLCl.mjs → renderer-BAYTI6jj.mjs} +2 -2
- package/dist/{renderer-4a4koLCl.mjs.map → renderer-BAYTI6jj.mjs.map} +1 -1
- package/dist/{renderer-CCnrG0Pd.mjs → renderer-BAusZ6Vu.mjs} +2 -2
- package/dist/{renderer-CCnrG0Pd.mjs.map → renderer-BAusZ6Vu.mjs.map} +1 -1
- package/dist/renderer-BBeArN_x.mjs +5 -0
- package/dist/renderer-BCAZDu-r.mjs +5 -0
- package/dist/{renderer-bE6yZ_Ef.mjs → renderer-BF0hx_iJ.mjs} +3 -3
- package/dist/{renderer-bE6yZ_Ef.mjs.map → renderer-BF0hx_iJ.mjs.map} +1 -1
- package/dist/renderer-BJnhik7Y.mjs +5 -0
- package/dist/{renderer-kg8-ngnB.mjs → renderer-BPWDsufX.mjs} +2 -2
- package/dist/{renderer-kg8-ngnB.mjs.map → renderer-BPWDsufX.mjs.map} +1 -1
- package/dist/{renderer-DXu0nrzo.d.mts → renderer-BX7jS14r.d.mts} +2 -2
- package/dist/{renderer-DXu0nrzo.d.mts.map → renderer-BX7jS14r.d.mts.map} +1 -1
- package/dist/{renderer-DBN6SV8L.mjs → renderer-BXJXziIt.mjs} +2 -2
- package/dist/{renderer-DBN6SV8L.mjs.map → renderer-BXJXziIt.mjs.map} +1 -1
- package/dist/{renderer-4F4FypvN.mjs → renderer-BdyopiLC.mjs} +2 -2
- package/dist/{renderer-4F4FypvN.mjs.map → renderer-BdyopiLC.mjs.map} +1 -1
- package/dist/{renderer-wH_l-jMH.mjs → renderer-Bfk6A7UO.mjs} +3 -3
- package/dist/{renderer-wH_l-jMH.mjs.map → renderer-Bfk6A7UO.mjs.map} +1 -1
- package/dist/{renderer-DYT4iPi-.mjs → renderer-BgO6BA_z.mjs} +2 -2
- package/dist/{renderer-DYT4iPi-.mjs.map → renderer-BgO6BA_z.mjs.map} +1 -1
- package/dist/{renderer-Dv5yE4LE.mjs → renderer-BlPqTEii.mjs} +2 -2
- package/dist/{renderer-Dv5yE4LE.mjs.map → renderer-BlPqTEii.mjs.map} +1 -1
- package/dist/{renderer-CuK1lPnA.mjs → renderer-BlvGcyAN.mjs} +2 -2
- package/dist/{renderer-CuK1lPnA.mjs.map → renderer-BlvGcyAN.mjs.map} +1 -1
- package/dist/{renderer-DX5ZpEBB.mjs → renderer-BpIF1QIE.mjs} +3 -3
- package/dist/{renderer-DX5ZpEBB.mjs.map → renderer-BpIF1QIE.mjs.map} +1 -1
- package/dist/renderer-BxRW8MZO.mjs +5 -0
- package/dist/renderer-C-lfsEAN.mjs +5 -0
- package/dist/{renderer-DRLtfxdW.mjs → renderer-C41U1tK6.mjs} +95 -16
- package/dist/renderer-C41U1tK6.mjs.map +1 -0
- package/dist/renderer-C6nOFN4-.mjs +5 -0
- package/dist/{renderer-CpEU-TRR.mjs → renderer-C7L8Ceqr.mjs} +2 -2
- package/dist/{renderer-CpEU-TRR.mjs.map → renderer-C7L8Ceqr.mjs.map} +1 -1
- package/dist/{renderer-BMnX_-PZ.mjs → renderer-C7eFJf0_.mjs} +3 -3
- package/dist/{renderer-BMnX_-PZ.mjs.map → renderer-C7eFJf0_.mjs.map} +1 -1
- package/dist/renderer-C84TSQmS.mjs +5 -0
- package/dist/renderer-C8_6YofT.mjs +5 -0
- package/dist/{renderer-CeIXVu9F.mjs → renderer-CCycwCEB.mjs} +2 -2
- package/dist/{renderer-CeIXVu9F.mjs.map → renderer-CCycwCEB.mjs.map} +1 -1
- package/dist/{renderer-CNVzJIBz.mjs → renderer-CHr7MiYW.mjs} +3 -3
- package/dist/{renderer-CNVzJIBz.mjs.map → renderer-CHr7MiYW.mjs.map} +1 -1
- package/dist/renderer-COR66Sby.mjs +3 -0
- package/dist/renderer-COb3tOPG.mjs +5 -0
- package/dist/{renderer-Crl8q_vD.mjs → renderer-CQvmbRQ5.mjs} +3 -3
- package/dist/{renderer-Crl8q_vD.mjs.map → renderer-CQvmbRQ5.mjs.map} +1 -1
- package/dist/renderer-CSCIzaLy.mjs +5 -0
- package/dist/{renderer-DO15Nj-w.mjs → renderer-CYC32bDW.mjs} +3 -3
- package/dist/{renderer-DO15Nj-w.mjs.map → renderer-CYC32bDW.mjs.map} +1 -1
- package/dist/{renderer-NvGahExL.mjs → renderer-CcvvoKiZ.mjs} +3 -3
- package/dist/{renderer-NvGahExL.mjs.map → renderer-CcvvoKiZ.mjs.map} +1 -1
- package/dist/{renderer-vVKNp3ri.mjs → renderer-CiQhD8Gg.mjs} +3 -3
- package/dist/{renderer-vVKNp3ri.mjs.map → renderer-CiQhD8Gg.mjs.map} +1 -1
- package/dist/renderer-CmI4c8MS.mjs +5 -0
- package/dist/{renderer-Sj11W1xq.mjs → renderer-CpUJBOfb.mjs} +2 -2
- package/dist/renderer-CqVltdX9.mjs +5 -0
- package/dist/{renderer-j-3XB8YI.mjs → renderer-CwFqqpWY.mjs} +3 -3
- package/dist/{renderer-j-3XB8YI.mjs.map → renderer-CwFqqpWY.mjs.map} +1 -1
- package/dist/renderer-D-FpMzLY.mjs +5 -0
- package/dist/renderer-D-Oyn9mG.mjs +5 -0
- package/dist/renderer-D2QrkA8_.mjs +5 -0
- package/dist/{renderer-ClxmV_id.mjs → renderer-D47AEJE_.mjs} +2 -2
- package/dist/{renderer-ClxmV_id.mjs.map → renderer-D47AEJE_.mjs.map} +1 -1
- package/dist/{renderer-BrXkb-9N.mjs → renderer-D61B9bXF.mjs} +2 -2
- package/dist/{renderer-BrXkb-9N.mjs.map → renderer-D61B9bXF.mjs.map} +1 -1
- package/dist/renderer-D64r4iN-.mjs +5 -0
- package/dist/{renderer-DXsV3mZD.mjs → renderer-D7Al3_-5.mjs} +3 -3
- package/dist/{renderer-DXsV3mZD.mjs.map → renderer-D7Al3_-5.mjs.map} +1 -1
- package/dist/{renderer-Bw3tlr9I.mjs → renderer-D7r6onRT.mjs} +2 -2
- package/dist/{renderer-Bw3tlr9I.mjs.map → renderer-D7r6onRT.mjs.map} +1 -1
- package/dist/{renderer-Dypn26aP.mjs → renderer-D8bBHrWC.mjs} +3 -3
- package/dist/{renderer-Dypn26aP.mjs.map → renderer-D8bBHrWC.mjs.map} +1 -1
- package/dist/renderer-DCq6YkgP.mjs +5 -0
- package/dist/{renderer-BHwbnT6S.mjs → renderer-DDEkFbVI.mjs} +3 -3
- package/dist/{renderer-BHwbnT6S.mjs.map → renderer-DDEkFbVI.mjs.map} +1 -1
- package/dist/renderer-DDHG3GdR.mjs +5 -0
- package/dist/{renderer-DqMZiy5N.mjs → renderer-DEmYyaqj.mjs} +2 -2
- package/dist/{renderer-DqMZiy5N.mjs.map → renderer-DEmYyaqj.mjs.map} +1 -1
- package/dist/{renderer-CyELq6P6.mjs → renderer-DF-yvIrV.mjs} +2 -2
- package/dist/{renderer-CyELq6P6.mjs.map → renderer-DF-yvIrV.mjs.map} +1 -1
- package/dist/{renderer-XnWe1hSL.mjs → renderer-DFzI3yI_.mjs} +2 -2
- package/dist/{renderer-XnWe1hSL.mjs.map → renderer-DFzI3yI_.mjs.map} +1 -1
- package/dist/{renderer-Cx2Sw9Ib.mjs → renderer-DIw3UtEU.mjs} +3 -3
- package/dist/{renderer-Cx2Sw9Ib.mjs.map → renderer-DIw3UtEU.mjs.map} +1 -1
- package/dist/{renderer-D_Mf-Zft.d.mts → renderer-DKgPVOLL.d.mts} +2 -2
- package/dist/{renderer-D_Mf-Zft.d.mts.map → renderer-DKgPVOLL.d.mts.map} +1 -1
- package/dist/renderer-DMdNfcud.mjs +6 -0
- package/dist/{renderer-CaRPsrbX.mjs → renderer-DMvmf3T2.mjs} +2 -2
- package/dist/{renderer-jvgqy4Td.mjs → renderer-DNQvOrkY.mjs} +3 -3
- package/dist/{renderer-jvgqy4Td.mjs.map → renderer-DNQvOrkY.mjs.map} +1 -1
- package/dist/{renderer-DB7PM7nZ.mjs → renderer-DO-KbpYZ.mjs} +3 -3
- package/dist/{renderer-DB7PM7nZ.mjs.map → renderer-DO-KbpYZ.mjs.map} +1 -1
- package/dist/{renderer-CQkZUsvc.mjs → renderer-DTqDy2m9.mjs} +3 -3
- package/dist/{renderer-CQkZUsvc.mjs.map → renderer-DTqDy2m9.mjs.map} +1 -1
- package/dist/{renderer-DPUULdjh.mjs → renderer-DVCJjVn7.mjs} +2 -2
- package/dist/{renderer-DPUULdjh.mjs.map → renderer-DVCJjVn7.mjs.map} +1 -1
- package/dist/{renderer-C7SYbHgB.mjs → renderer-DX41niRU.mjs} +2 -2
- package/dist/{renderer-C7SYbHgB.mjs.map → renderer-DX41niRU.mjs.map} +1 -1
- package/dist/{renderer-BYIa_hnS.mjs → renderer-DXEWbnRF.mjs} +3 -3
- package/dist/{renderer-BYIa_hnS.mjs.map → renderer-DXEWbnRF.mjs.map} +1 -1
- package/dist/renderer-DZQXZ4lK.mjs +5 -0
- package/dist/{renderer-iA7rxZmR.mjs → renderer-DbRZe0Re.mjs} +3 -3
- package/dist/{renderer-iA7rxZmR.mjs.map → renderer-DbRZe0Re.mjs.map} +1 -1
- package/dist/renderer-DczJJLA1.mjs +5 -0
- package/dist/renderer-DfqJj9oe.mjs +5 -0
- package/dist/renderer-DgO9ihVJ.mjs +5 -0
- package/dist/renderer-DhgnQZYb.mjs +5 -0
- package/dist/{renderer-l-K6iZLC.mjs → renderer-DiY70S8S.mjs} +3 -3
- package/dist/{renderer-l-K6iZLC.mjs.map → renderer-DiY70S8S.mjs.map} +1 -1
- package/dist/renderer-DjxKjHMf.mjs +5 -0
- package/dist/{renderer-Qd-HCwKj.mjs → renderer-DkRSZg5g.mjs} +3 -3
- package/dist/{renderer-Qd-HCwKj.mjs.map → renderer-DkRSZg5g.mjs.map} +1 -1
- package/dist/{renderer-CaE0rp9j.mjs → renderer-DmkWrWAk.mjs} +2 -2
- package/dist/{renderer-CaE0rp9j.mjs.map → renderer-DmkWrWAk.mjs.map} +1 -1
- package/dist/{renderer-BUV6IH0o.mjs → renderer-DpruWmZU.mjs} +2 -2
- package/dist/{renderer-BUV6IH0o.mjs.map → renderer-DpruWmZU.mjs.map} +1 -1
- package/dist/renderer-DqLA5cdR.mjs +5 -0
- package/dist/{renderer-DfTnsfy9.mjs → renderer-DqvoMLca.mjs} +3 -3
- package/dist/{renderer-DfTnsfy9.mjs.map → renderer-DqvoMLca.mjs.map} +1 -1
- package/dist/{renderer-Dhi0Q1cI.mjs → renderer-DsEyjwfT.mjs} +70 -70
- package/dist/{renderer-Dhi0Q1cI.mjs.map → renderer-DsEyjwfT.mjs.map} +1 -1
- package/dist/renderer-Dudp6ZlH.mjs +5 -0
- package/dist/{renderer-Bw5jGUo5.mjs → renderer-EaLUCobW.mjs} +2 -2
- package/dist/{renderer-Bw5jGUo5.mjs.map → renderer-EaLUCobW.mjs.map} +1 -1
- package/dist/{renderer-Ca-LoeJh.mjs → renderer-GBmWjBvy.mjs} +2 -2
- package/dist/{renderer-Ca-LoeJh.mjs.map → renderer-GBmWjBvy.mjs.map} +1 -1
- package/dist/{renderer-DS-Gv-3w.mjs → renderer-Lth37j17.mjs} +2 -2
- package/dist/{renderer-BlUfAZyK.mjs → renderer-SSBL4M1o.mjs} +3 -3
- package/dist/{renderer-BlUfAZyK.mjs.map → renderer-SSBL4M1o.mjs.map} +1 -1
- package/dist/{renderer-DSM5c7UA.mjs → renderer-SWr3vbrV.mjs} +2 -2
- package/dist/{renderer-DSM5c7UA.mjs.map → renderer-SWr3vbrV.mjs.map} +1 -1
- package/dist/{renderer-BLrhcSex.mjs → renderer-WCZu2Rf5.mjs} +3 -3
- package/dist/{renderer-BLrhcSex.mjs.map → renderer-WCZu2Rf5.mjs.map} +1 -1
- package/dist/{renderer-D7FuHXiz.mjs → renderer-Xv6GfNUI.mjs} +2 -2
- package/dist/{renderer-D7FuHXiz.mjs.map → renderer-Xv6GfNUI.mjs.map} +1 -1
- package/dist/renderer-_jC5KIT1.mjs +5 -0
- package/dist/{renderer-8pS82_mX.mjs → renderer-bAKUeHF3.mjs} +3 -3
- package/dist/{renderer-8pS82_mX.mjs.map → renderer-bAKUeHF3.mjs.map} +1 -1
- package/dist/renderer-cTgAuVmJ.mjs +5 -0
- package/dist/{renderer-DjWBBISJ.mjs → renderer-cod5Ona9.mjs} +2 -2
- package/dist/{renderer-C55eLbl1.mjs → renderer-g_vrrAQU.mjs} +2 -2
- package/dist/{renderer-C55eLbl1.mjs.map → renderer-g_vrrAQU.mjs.map} +1 -1
- package/dist/{renderer-CT_aJBk2.mjs → renderer-hSCfnvaK.mjs} +3 -3
- package/dist/{renderer-CT_aJBk2.mjs.map → renderer-hSCfnvaK.mjs.map} +1 -1
- package/dist/{renderer-BuYRrBRf.mjs → renderer-ktWXVYka.mjs} +3 -3
- package/dist/{renderer-BuYRrBRf.mjs.map → renderer-ktWXVYka.mjs.map} +1 -1
- package/dist/renderer-nVKDvDLO.mjs +5 -0
- package/dist/{renderer-7Tx-L9Vf.mjs → renderer-oKRF4A0M.mjs} +2 -2
- package/dist/{renderer-7Tx-L9Vf.mjs.map → renderer-oKRF4A0M.mjs.map} +1 -1
- package/dist/{renderer-fv9WvK0d.mjs → renderer-pHWEHDnM.mjs} +3 -3
- package/dist/{renderer-fv9WvK0d.mjs.map → renderer-pHWEHDnM.mjs.map} +1 -1
- package/dist/renderer-pZ6_pUo1.mjs +5 -0
- package/dist/{renderer-DsGE9qtz.mjs → renderer-sCovEubT.mjs} +3 -3
- package/dist/{renderer-DsGE9qtz.mjs.map → renderer-sCovEubT.mjs.map} +1 -1
- package/dist/{renderer-BcHpcLq3.mjs → renderer-sYSkIUfo.mjs} +3 -3
- package/dist/{renderer-BcHpcLq3.mjs.map → renderer-sYSkIUfo.mjs.map} +1 -1
- package/dist/{renderer-4GwADfB0.mjs → renderer-zXPVLRlD.mjs} +3 -3
- package/dist/{renderer-4GwADfB0.mjs.map → renderer-zXPVLRlD.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs → renderers-CP8CFWDs-DH2oktaC.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-fYqxoIKK.mjs.map → renderers-CP8CFWDs-DH2oktaC.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-DggYlKaX.mjs → src-CK5rGVbh.mjs} +664 -72
- package/dist/src-CK5rGVbh.mjs.map +1 -0
- package/package.json +67 -58
- package/dist/dist-CnFcSau0.mjs.map +0 -1
- package/dist/index-B_nooAhS.d.mts.map +0 -1
- package/dist/index-Ced1Ry4S.d.mts.map +0 -1
- package/dist/index-Ds9_v60R.d.mts.map +0 -1
- package/dist/preview-engine/chunk-3OXRGTQ2.mjs +0 -2390
- package/dist/preview-engine/chunk-3U2A3RW4.mjs +0 -5
- package/dist/preview-engine/chunk-6E3JSPJN.mjs +0 -1
- package/dist/preview-engine/chunk-7EYVBRN3.mjs +0 -480
- package/dist/preview-engine/chunk-7WBDEZ2A.mjs +0 -1974
- package/dist/preview-engine/chunk-F4F2UDRX.mjs +0 -1
- package/dist/preview-engine/chunk-HPP52AQI.mjs +0 -4
- package/dist/preview-engine/chunk-PYSBWKIJ.mjs +0 -1
- package/dist/preview-engine/chunk-U2IFQMS3.mjs +0 -174
- package/dist/preview-engine/renderers-2GMY2ZNK.mjs +0 -1
- package/dist/preview-engine/renderers-2QJNKL7Q.mjs +0 -1
- package/dist/preview-engine/renderers-3OYU6O6F.mjs +0 -1
- package/dist/preview-engine/renderers-433Y2PCK.mjs +0 -1
- package/dist/preview-engine/renderers-4AGPGEL4.mjs +0 -1
- package/dist/preview-engine/renderers-54DBHGUW.mjs +0 -1
- package/dist/preview-engine/renderers-5M2O55U3.mjs +0 -1
- package/dist/preview-engine/renderers-6FVMDEAY.mjs +0 -1
- package/dist/preview-engine/renderers-6R7ZJ7DU.mjs +0 -1
- package/dist/preview-engine/renderers-75GCMFOD.mjs +0 -1
- package/dist/preview-engine/renderers-7LWLUCVQ.mjs +0 -1
- package/dist/preview-engine/renderers-BLDENIEV.mjs +0 -1
- package/dist/preview-engine/renderers-CCOEGTZJ.mjs +0 -228
- package/dist/preview-engine/renderers-CDB3YK3R.mjs +0 -1
- package/dist/preview-engine/renderers-D6D4XDFY.mjs +0 -1
- package/dist/preview-engine/renderers-DJVFQZYU.mjs +0 -1
- package/dist/preview-engine/renderers-DMXSV7VO.mjs +0 -1
- package/dist/preview-engine/renderers-EBMASIOE.mjs +0 -1
- package/dist/preview-engine/renderers-F262HDFS.mjs +0 -1
- package/dist/preview-engine/renderers-FMXKIF22.mjs +0 -1
- package/dist/preview-engine/renderers-GJKSZ6DR.mjs +0 -1
- package/dist/preview-engine/renderers-GR3RLYDZ.mjs +0 -1
- package/dist/preview-engine/renderers-GT3W2QIA.mjs +0 -1
- package/dist/preview-engine/renderers-IHC7HUK3.mjs +0 -1
- package/dist/preview-engine/renderers-J56ZGEVM.mjs +0 -1
- package/dist/preview-engine/renderers-KYM6352U.mjs +0 -1
- package/dist/preview-engine/renderers-LFXX6TWI.mjs +0 -1
- package/dist/preview-engine/renderers-NAHUPFPU.mjs +0 -1
- package/dist/preview-engine/renderers-NM3FZLHH.mjs +0 -1
- package/dist/preview-engine/renderers-NNB4BTJA.mjs +0 -1
- package/dist/preview-engine/renderers-OYVQW6QI.mjs +0 -1
- package/dist/preview-engine/renderers-P5RIFU3C.mjs +0 -1
- package/dist/preview-engine/renderers-QB7HJUTS.mjs +0 -1
- package/dist/preview-engine/renderers-QRQVOCDC.mjs +0 -1
- package/dist/preview-engine/renderers-QVFHJTZA.mjs +0 -1
- package/dist/preview-engine/renderers-R3WQIE4L.mjs +0 -1
- package/dist/preview-engine/renderers-SQBVOLG7.mjs +0 -1
- package/dist/preview-engine/renderers-TLXMYEDI.mjs +0 -1
- package/dist/preview-engine/renderers-X4S3WELJ.mjs +0 -1
- package/dist/preview-engine/renderers-XT7U25I7.mjs +0 -1
- package/dist/preview-engine/renderers-XVGLMBB3.mjs +0 -1
- package/dist/preview-engine/renderers-YUWU3TQZ.mjs +0 -1
- package/dist/preview-engine/renderers-ZNUD5OVO.mjs +0 -1
- package/dist/program-CqQDWfSV.mjs.map +0 -1
- package/dist/renderer-68XHoE2b.mjs +0 -5
- package/dist/renderer-AqUForA-.mjs +0 -5
- package/dist/renderer-B0J-uGBG.mjs +0 -5
- package/dist/renderer-BD25uND8.mjs.map +0 -1
- package/dist/renderer-BF2R0rwb.mjs +0 -5
- package/dist/renderer-BLrO9lqK.mjs +0 -5
- package/dist/renderer-BMy8jXhL.mjs +0 -5
- package/dist/renderer-BUxENp9L.mjs +0 -5
- package/dist/renderer-C-ebryrM.mjs +0 -5
- package/dist/renderer-C8Gbs3kr.mjs +0 -5
- package/dist/renderer-CFZvMv2-.mjs +0 -5
- package/dist/renderer-CGXW7mOs.mjs +0 -5
- package/dist/renderer-CNq6OGbb.mjs +0 -5
- package/dist/renderer-CO-Ddz6-.mjs +0 -5
- package/dist/renderer-CRdxAsP7.mjs +0 -5
- package/dist/renderer-CZLo0ALi.mjs +0 -5
- package/dist/renderer-CdvVUkhR.mjs +0 -5
- package/dist/renderer-Cjg7kmTq.mjs +0 -5
- package/dist/renderer-Cvz22ZSh.mjs +0 -3
- package/dist/renderer-CxKymhVa.mjs +0 -5
- package/dist/renderer-Cxlpu3pN.mjs +0 -5
- package/dist/renderer-Cz6qZ2Ii.mjs +0 -5
- package/dist/renderer-DDGvF2YA.mjs +0 -5
- package/dist/renderer-DFxtOKpi.mjs +0 -5
- package/dist/renderer-DGBNjTsB.mjs +0 -6
- package/dist/renderer-DRLtfxdW.mjs.map +0 -1
- package/dist/renderer-DUFcdZmw.mjs +0 -5
- package/dist/renderer-DUMu6EOH.mjs +0 -5
- package/dist/renderer-DdULrvJo.mjs +0 -5
- package/dist/renderer-DoaOOP6_.mjs +0 -5
- package/dist/renderer-DqmZqV-a.mjs +0 -5
- package/dist/renderer-LxTQ2E-G.mjs +0 -5
- package/dist/renderer-SpU-RddZ.mjs +0 -5
- package/dist/renderer-W6ahCM9z.mjs +0 -5
- package/dist/renderer-gGqtzw-S.mjs +0 -5
- package/dist/renderer-l0Wn1AoV.mjs +0 -5
- package/dist/renderer-rpXHvMZG.mjs +0 -5
- package/dist/renderer-twdsKOiz.mjs +0 -5
- package/dist/renderer-uJz-eIqO.mjs +0 -5
- package/dist/src-DggYlKaX.mjs.map +0 -1
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{a as g}from"./chunk-UZTA2EUU.mjs";import{a as c,d as s}from"./chunk-VVY4PG5E.mjs";import{A as f,c as t,d as a}from"./chunk-F4F2UDRX.mjs";import{g as d}from"./chunk-Y4NIR77Z.mjs";d();d();var l=async(n,m,p,e)=>{if(!e?.device||!n||n.length===0||n[0].length===0)return;let r=p.operation||{},i=r.nodeId||r.id||"audio-signal-extractor",v=e.fps??24,y=a(r.extractionMode,""),b=a(r.curve,""),I={extractionMode:y||void 0,attackMs:t(r.attackMs,10),releaseMs:t(r.releaseMs,120),sensitivity:t(r.sensitivity,1),noiseFloorDb:t(r.noiseFloorDb,-45),dynamicRangeDb:t(r.dynamicRangeDb,36),smoothing:t(r.smoothing,.15),curve:b||void 0,beatThreshold:t(r.beatThreshold,.55),beatDecayMs:t(r.beatDecayMs,80)},o=await c.extractFeatures(e.device,n,m,v,I,512);s.registerBuffer(e.device,i,o.primaryBuffer,e.renderId),s.registerBuffer(e.device,`${i}_beat`,o.beatBuffer,e.renderId),s.registerBuffer(e.device,`${i}_bass`,o.bassBuffer,e.renderId),s.registerBuffer(e.device,`${i}_energy`,o.energyBuffer,e.renderId),s.registerTexture(e.device,i,o.texture,o.textureView,e.renderId),s.registerTexture(e.device,`${i}_beat`,o.texture,o.textureView,e.renderId),s.registerTexture(e.device,`${i}_bass`,o.texture,o.textureView,e.renderId),s.registerTexture(e.device,`${i}_energy`,o.texture,o.textureView,e.renderId);let u=`signal_${i.replace(/[^a-zA-Z0-9]/g,"_")}`,A=`
|
|
2
|
-
fn ${u}(t: f32, x: f32, y: f32, z: f32, i: u32, n: u32, frame: u32, color: vec4f, t_elapsed: f32, duration: f32) -> f32 {
|
|
3
|
-
return 0.0f;
|
|
4
|
-
}
|
|
5
|
-
`;g.register(i,{wgsl:A,name:u,outputType:"f32",fnParams:[]},e.renderId)};var T=f({audioProcessor:l});export{T as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as G,c as k}from"./chunk-5RRKGN2U.mjs";import{f as p,g as m}from"./chunk-Y4NIR77Z.mjs";m();var N=8,D=/^\s*(linear|radial|conic)-gradient\(\s*([\s\S]*)\)\s*$/i;function j(t){return typeof t=="string"&&D.test(t)}function z(t){let e=[],r=0,o="";for(let n of t)n==="("&&r++,n===")"&&r--,n===","&&r===0?(e.push(o.trim()),o=""):o+=n;return o.trim()&&e.push(o.trim()),e}function T(t){let e=/^(-?[\d.]+)(deg|turn|rad|grad)?$/i.exec(t.trim());if(!e)return null;let r=parseFloat(e[1]);switch((e[2]??"deg").toLowerCase()){case"turn":return r*360;case"rad":return r*180/Math.PI;case"grad":return r*.9;default:return r}}var W={top:0,right:90,bottom:180,left:270,"top right":45,"right top":45,"bottom right":135,"right bottom":135,"bottom left":225,"left bottom":225,"top left":315,"left top":315},V={left:0,top:0,center:.5,right:1,bottom:1};function q(t){let e=t.map(n=>n in V?{v:V[n],axis:n==="top"||n==="bottom"?"y":n==="left"||n==="right"?"x":"any"}:{v:n.endsWith("%")?parseFloat(n)/100:.5,axis:"any"}),r=.5,o=.5;return e.length===1?e[0].axis==="y"?o=e[0].v:r=e[0].v:e.length>=2&&(e[0].axis==="y"||e[1].axis==="x"?(o=e[0].v,r=e[1].v):(r=e[0].v,o=e[1].v)),[r,o]}function X(t){let e=/^((?:[a-z]+\([^)]*\))|#[0-9a-f]+|[a-z]+)\s*(.*)$/i.exec(t.trim());if(!e)return null;let r=k(e[1]);if(!r)return null;let o=[];for(let n of e[2].split(/\s+/).filter(Boolean))if(n.endsWith("%"))o.push(parseFloat(n)/100);else if(n==="0")o.push(0);else if(/(deg|turn|rad|grad)$/i.test(n)){let i=T(n);i!==null&&o.push(i/360)}return{color:r,positions:o.filter(n=>Number.isFinite(n))}}function K(t){let e=t.length;if(e===0)return[];let r=t.map(n=>n.position);r[0]===void 0&&(r[0]=0),r[e-1]===void 0&&(r[e-1]=1);let o=-1/0;for(let n=0;n<e;n++){let i=r[n];i!==void 0&&(r[n]=Math.max(i,o),o=r[n])}for(let n=1;n<e;n++){if(r[n]!==void 0)continue;let i=n;for(;r[i]===void 0;)i++;let a=r[n-1],s=r[i];for(let c=n;c<i;c++)r[c]=a+(s-a)*(c-n+1)/(i-n+1)}return t.map((n,i)=>({offset:r[i],color:n.color}))}var x=new Map;function Q(t){let e=x.get(t);if(e!==void 0)return e;let r=Y(t);return x.size>512&&x.clear(),x.set(t,r),r}function Y(t){let e=D.exec(t);if(!e)return null;let r=e[1].toLowerCase(),o=z(e[2]),n={type:r,angle:180,center:[.5,.5],shape:"ellipse",from:0,stops:[]},i=o[0]?.toLowerCase().trim()??"",a=!1;if(r==="linear")if(i.startsWith("to ")){let c=i.slice(3).trim().replace(/\s+/g," ");c in W&&(n.angle=W[c],a=!0)}else{let c=T(i);c!==null&&(n.angle=c,a=!0)}else{let c=i.split(/\s+/).filter(Boolean),u=c.indexOf("at"),d=u>=0?c.slice(0,u):c;if(u>=0||d.some(f=>f==="circle"||f==="ellipse"||f==="from"||/^closest|^farthest/.test(f)||r==="radial"&&/px$/.test(f)))if(a=!0,u>=0&&(n.center=q(c.slice(u+1))),r==="radial"){d.includes("circle")&&(n.shape="circle");let f=d.find(g=>/^(closest|farthest)-(side|corner)$/.test(g));f&&(n.extent=f);let b=d.filter(g=>/px$/.test(g)).map(g=>parseFloat(g));b.length===1?(n.shape="circle",n.radius=[b[0],b[0]]):b.length>=2&&(n.radius=[b[0],b[1]])}else{let f=d.indexOf("from");f>=0&&d[f+1]&&(n.from=T(d[f+1])??0)}}let s=[];for(let c of a?o.slice(1):o){let u=X(c);if(!u)return null;u.positions.length===0&&s.push({color:u.color});for(let d of u.positions)s.push({color:u.color,position:d})}return s.length===0?null:(s.length===1&&s.push({...s[0]}),n.stops=K(s),n)}function Ie(t){if(t.length<=N)return t;let e=[],r=t[0].offset,o=t[t.length-1].offset;for(let n=0;n<N;n++){let i=r+(o-r)*n/(N-1),a=1;for(;a<t.length-1&&t[a].offset<i;)a++;let s=t[a-1],c=t[a],u=c.offset-s.offset,d=u>0?Math.min(1,Math.max(0,(i-s.offset)/u)):1;e.push({offset:i,color:s.color.map((l,f)=>l+(c.color[f]-l)*d)})}return e}function Oe(t){let e=t.map(r=>G(r.color[0],r.color[1],r.color[2]));return t.map((r,o)=>{let n=e[o];if(r.color[3]<1e-4){let i=t.slice(0,o).reverse().findIndex(u=>u.color[3]>1e-4),a=t.slice(o+1).findIndex(u=>u.color[3]>1e-4),s=i>=0?o-1-i:-1,c=a>=0?o+1+a:-1;if(s>=0&&c>=0){let u=e[s],d=e[c];n=[(u[0]+d[0])/2,(u[1]+d[1])/2,(u[2]+d[2])/2]}else s>=0?n=e[s]:c>=0&&(n=e[c])}return[n[0],n[1],n[2],r.color[3]]})}function E(t){return t.map(e=>typeof e=="string"?e:`${e.color} ${Math.round(e.offset*1e4)/100}%`).join(", ")}var Ne={linear(t,e=180){return`linear-gradient(${e}deg, ${E(t)})`},radial(t,e={}){let r=e.at??[.5,.5];return`radial-gradient(${e.radius!==void 0?`${e.radius}px`:e.circle?"circle":"ellipse"} at ${r[0]*100}% ${r[1]*100}%, ${E(t)})`},conic(t,e={}){let r=e.at??[.5,.5];return`conic-gradient(from ${e.from??0}deg at ${r[0]*100}% ${r[1]*100}%, ${E(t)})`},parse:Q,is:j};m();m();m();function v(t,e){let r=0,o=1;for(;;){if(e>=t.length)throw new Error("ONNX model: truncated varint");let n=t[e++];if(r+=(n&127)*o,n<128)return[r,e];o*=128}}function y(t){let e=[],r=0;for(;r<t.length;){let o=r,[n,i]=v(t,r);r=i;let a=Math.floor(n/8),s=n&7,c=t.subarray(r,r);if(s===0)r=v(t,r)[1];else if(s===1)r+=8;else if(s===5)r+=4;else if(s===2){let[u,d]=v(t,r);c=t.subarray(d,d+u),r=d+u}else throw new Error(`ONNX model: unsupported wire type ${s}`);if(r>t.length)throw new Error("ONNX model: truncated field");e.push({number:a,wire:s,raw:t.subarray(o,r),body:c})}return e}var Z=new TextDecoder,Ae=new TextEncoder;function S(t,e){return y(t).filter(r=>r.number===e&&r.wire===2).map(r=>Z.decode(r.body))}function h(t,e){return S(t,e)[0]}function F(t){let e=[];for(;t>=128;)e.push(t%128|128),t=Math.floor(t/128);return e.push(t),e}function Re(t,e){let r=[...F(t*8+2),...F(e.length)],o=new Uint8Array(r.length+e.length);return o.set(r,0),o.set(e,r.length),o}function Ue(t){let e=new Uint8Array(t.reduce((o,n)=>o+n.length,0)),r=0;for(let o of t)e.set(o,r),r+=o.length;return e}var ie=4,se=5,ae=2,L=1,ce=3,ue=5,de=1;function $(t){let e=[];if(t.wire===2){let r=0;for(;r<t.body.length;){let[o,n]=v(t.body,r);e.push(o),r=n}}else if(t.wire===0){let r=0;r=v(t.raw,r)[1],e.push(v(t.raw,r)[0])}return e}function M(t){return y(t).filter(e=>e.number===de).flatMap($)}function B(t){let e;try{e=y(t).find(n=>n.number===7&&n.wire===2)}catch{return!0}if(!e)return!0;let r=new Map,o=[];for(let n of y(e.body))if(n.number===5){let i=h(n.body,8);i!==void 0&&r.set(i,M(n.body))}else if(n.number===1){let i=h(n.body,ie);if(i!=="Conv"&&i!=="Constant")continue;let a=y(n.body).filter(l=>l.number===se).map(l=>l.body);if(i==="Constant"){let l=a.find(g=>h(g,L)==="value"),f=l&&y(l).find(g=>g.number===ue),b=S(n.body,ae)[0];f&&b&&r.set(b,M(f.body));continue}let s=a.find(l=>h(l,L)==="group"),c=s&&y(s).find(l=>l.number===ce),u=c?$(c)[0]??1:1,d=S(n.body,1)[1];u>1&&d&&o.push({weight:d,group:u})}return o.some(({weight:n})=>{let i=r.get(n)?.[1];return i!==void 0&&i>1&&i%4!==0})}var le="onnxruntime-web",fe=()=>import(le),_=class{kind="webgpu";_loader;_providers;_wasmFallback;_ortPromise;device;constructor(e={}){this._loader=e.loader??fe,this._providers=e.executionProviders??["webgpu","wasm"],this._wasmFallback=e.wasmFallback!==!1,this.device=e.device}ort(){return this._ortPromise||(this._ortPromise=this._loader().catch(e=>{throw this._ortPromise=void 0,new Error(`onnxruntime-web failed to load (${String(e)}). Install it in the browser bundle or pass a custom loader.`)})),this._ortPromise}async createSession(e){let r=await this.ort(),o;try{let n=this.device,i=B(e)?"NCHW":"NHWC";o=await r.InferenceSession.create(e,{executionProviders:this._providers.map(a=>pe(a,n,i)),graphOptimizationLevel:"all",logSeverityLevel:3})}catch(n){if(!this._wasmFallback||!this._providers.includes("webgpu"))throw n;o=await r.InferenceSession.create(e,{executionProviders:["wasm"],graphOptimizationLevel:"all",logSeverityLevel:3})}return{run:async n=>{let i=o.inputNames.includes(n.name)?n.name:o.inputNames[0]??n.name,a=n.gpuBuffer&&r.Tensor.fromGpuBuffer?r.Tensor.fromGpuBuffer(n.gpuBuffer,{dataType:"float32",dims:[...n.dims]}):new r.Tensor("float32",n.data,[...n.dims]),s=await o.run({[i]:a}),c={};for(let[u,d]of Object.entries(s))c[u]={data:d.data,dims:[...d.dims]};return c},release:()=>{o.release()}}}};function pe(t,e,r){return t!=="webgpu"?t:e?{name:t,preferredLayout:r,device:e}:{name:t,preferredLayout:r}}m();m();var me="onnxruntime-web/webgpu",be="webgpu",P,ge=/llvmpipe|lavapipe|swiftshader|software/i;function ye(){return P||(P=(async()=>{let t=globalThis;if(!t.navigator?.gpu){let{create:i,globals:a}=await import(be);Object.assign(globalThis,a),t.navigator??={},Object.defineProperty(t.navigator,"gpu",{value:i([]),configurable:!0,writable:!0})}let r=await(t.navigator?.gpu).requestAdapter({powerPreference:"high-performance"});if(!r)throw new Error("No WebGPU adapter.");let o=r.info??{},n=[o.vendor,o.architecture,o.device,o.description].filter(Boolean).join(" ");if(r.isFallbackAdapter===!0||o.isFallbackAdapter===!0||ge.test(n))throw new Error(`WebGPU adapter is a software rasterizer (${n}).`);ve(r.features)})(),P.catch(()=>{P=void 0})),P}function ve(t){let e=Object.getPrototypeOf(t);!e||typeof e.keys!="function"||(typeof e.forEach!="function"&&Object.defineProperty(e,"forEach",{value(r,o){for(let n of this.keys())r.call(o,n,n,this)},configurable:!0,writable:!0}),typeof e.values!="function"&&Object.defineProperty(e,"values",{value(){return this.keys()},configurable:!0,writable:!0}),typeof e.entries!="function"&&Object.defineProperty(e,"entries",{*value(){for(let r of this.keys())yield[r,r]},configurable:!0,writable:!0}))}var I=class{kind="webgpu";device;_inner;constructor(e={}){let r=e.loader??(async()=>{await ye();let o=await import(me);return o.env?.wasm&&(o.env.wasm.numThreads=1),o.env?.webgpu&&(o.env.webgpu.powerPreference="high-performance"),o});this.device=e.device,this._inner=new _({wasmFallback:!1,...e,loader:r})}createSession(e){return this._inner.createSession(e)}};var A,R;function je(t){R=t}function ze(t){A=t}var he=Symbol.for("framefields.vision.backend");function O(t){let e=globalThis[he];if(typeof e=="function")try{e(t)}catch{}}function Pe(){let t=typeof p<"u"?p.env.FRAMEFIELDS_VISION_PROVIDER?.trim().toLowerCase():void 0;return t==="webgpu"||t==="cuda"||t==="cpu"?t:"auto"}var U=class{_resolved;_resolving;get kind(){return this._resolved?.kind??"webgpu"}get device(){return this._resolved?.device}async createSession(e){if(this._resolved)return this._resolved.createSession(e);if(!this._resolving){this._resolving=this.resolve(e),this._resolving.catch(()=>{this._resolving=void 0});let{provider:o,first:n}=await this._resolving;return this._resolved=o,n||o.createSession(e)}let{provider:r}=await this._resolving;return r.createSession(e)}async resolve(e){let r=Pe();if(r==="cpu")return O({backend:"cpu",sharedDevice:!1,reason:"FRAMEFIELDS_VISION_PROVIDER=cpu"}),{provider:new w};if(r==="cuda")return O({backend:"cuda",sharedDevice:!1}),{provider:new w({executionProviders:["cuda","cpu"]})};let o=new I({wasmFallback:!1,device:R});try{let n=await o.createSession(e);return O({backend:"webgpu",sharedDevice:!!R}),{provider:o,first:n}}catch(n){if(r==="webgpu")throw n;return O({backend:"cpu",sharedDevice:!1,reason:n instanceof Error?n.message:String(n)}),{provider:new w}}}},H;function qe(){return A?A():(H??=new U,H)}async function we(){let t=await import("./shims/os.mjs"),e=typeof t.availableParallelism=="function"?t.availableParallelism():t.cpus().length,r=await xe();return Math.max(1,r!==void 0?Math.min(e,r):e)}async function xe(){if(typeof p>"u"||p.platform!=="linux")return;let{readFile:t}=await import("./shims/fs-promises.mjs"),e=a=>t(a,"utf8").then(s=>s.trim(),()=>{}),r=(a,s)=>a>0&&s>0?Math.ceil(a/s):void 0,o=await e("/sys/fs/cgroup/cpu.max");if(o!==void 0){let[a,s]=o.split(/\s+/);return a==="max"?void 0:r(Number(a),Number(s))}let n=await e("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),i=await e("/sys/fs/cgroup/cpu/cpu.cfs_period_us");if(!(n===void 0||i===void 0))return r(Number(n),Number(i))}async function Se(){let t=typeof p<"u"?Number.parseInt(p.env.FRAMEFIELDS_VISION_THREADS??"",10):Number.NaN;if(Number.isFinite(t)&&t>0)return t;if(!(typeof p>"u"||p.platform!=="linux"))return we()}var w=class{kind="node";_executionProviders;constructor(e={}){this._executionProviders=e.executionProviders??["cpu"]}ortPromise;async ort(){return this.ortPromise||(this.ortPromise=import("./onnxruntime-node-JCLVQ7P3.mjs").catch(e=>{throw this.ortPromise=void 0,new Error(`onnxruntime-node failed to load (${String(e)}). Install it in the environment or provide a custom SessionProvider.`)})),this.ortPromise}async createSession(e){let r=await this.ort(),o=await Se(),n=await r.InferenceSession.create(e,{executionProviders:[...this._executionProviders],graphOptimizationLevel:"all",...o!==void 0?{intraOpNumThreads:o,interOpNumThreads:1}:{}});return{run:async i=>{let s={[n.inputNames.includes(i.name)?i.name:n.inputNames[0]??i.name]:new r.Tensor("float32",i.data,[...i.dims])},c=await n.run(s),u={};for(let[d,l]of Object.entries(c))u[d]={data:l.data,dims:[...l.dims]};return u},release:()=>{n.release()}}}};export{N as a,j as b,Q as c,Ie as d,Oe as e,Ne as f,y as g,Ae as h,S as i,h as j,Re as k,Ue as l,_ as m,je as n,ze as o,qe as p};
|
|
@@ -1,480 +0,0 @@
|
|
|
1
|
-
import{a as st}from"./chunk-AGAZJZWI.mjs";import{o as Gt,p as D,q as T,r as Mt,s as Ut,t as kt}from"./chunk-HPP52AQI.mjs";import{c as yt,d as xt,e as $}from"./chunk-6E3JSPJN.mjs";import{a as Pt,b as it,d as bt,e as A}from"./chunk-32WC4FRR.mjs";import{B as wt,b as vt,j as O,v as St,y as G,z as U}from"./chunk-BJXNKMSY.mjs";import{a as B,b as gt}from"./chunk-354GX6IB.mjs";import{g as x}from"./chunk-Y4NIR77Z.mjs";x();var I=class{constructor(t,e){this.url=t;this.isHeadless=e}url;isHeadless;input=null;initPromise=null;iterator=null;iteratorStartTimestamp=-1;currentFetchId=0;fetchLock=Promise.resolve();destroyed=!1;async init(){if(!this.input)return this.initPromise?this.initPromise:(this.destroyed=!1,this.initPromise=(async()=>{try{let t=await A.acquire(this.url);this.destroyed?A.release(this.url):this.input=t}catch(t){throw this.initPromise=null,t}})(),this.initPromise)}destroy(){this.destroyed=!0,this.iterator?.return(),this.input&&(A.release(this.url),this.input=null),this.initPromise=null,this.onDestroy()}},ot=class extends I{canvasSink=null;videoSampleSink=null;currentFrame=null;nextFrame=null;currentSample=null;nextSample=null;headlessQueue=[];backwardFrames=[];backwardBytes=0;backwardEnd;lastHeadlessTimestamp;isDecoding=!1;decodeBuffer=null;nextRequest=null;pushHeadlessQueue(t){let e=this.headlessQueue.findIndex(r=>r.timestamp>t.timestamp);e===-1?this.headlessQueue.push(t):this.headlessQueue.splice(e,0,t)}async fillHeadlessQueue(t){if(this.iterator)for(;this.headlessQueue.length<2;){let e=await this.iterator.next();if(this.currentFetchId!==t){e.value?.close?.();return}if(e.done||!e.value)break;this.pushHeadlessQueue(e.value)}}async closeIterator(t){if(t)try{await t.return()}catch{}}resetSinks(){let t=this.iterator;if(this.iterator=null,t)try{t.return()}catch{}this.canvasSink=null,this.videoSampleSink=null,this.currentFrame=null,this.nextFrame=null,this.currentSample?.close(),this.currentSample=null,this.nextSample?.close(),this.nextSample=null;for(let e of this.headlessQueue)try{e.close()}catch{}this.headlessQueue=[],this.clearBackwardFrames(),this.lastHeadlessTimestamp=void 0,this.decodeBuffer=null,this.iteratorStartTimestamp=-1}clearBackwardFrames(){for(let t of this.backwardFrames)t.close();this.backwardFrames=[],this.backwardBytes=0,this.backwardEnd=void 0}async copyHeadlessSample(t,e){let r=t.displayWidth,i=t.displayHeight,n=r*i*4,s=this.decodeBuffer;return(!s||s.length!==n)&&(s=new Uint8Array(n),this.decodeBuffer=s),await t.copyTo(s,{format:"RGBA"}),this.currentFetchId!==e||this.destroyed||!this.input?null:(gt(s),{width:r,height:i,buffer:s})}cachedBackwardFrame(t){let e,r=-1;for(let[n,s]of this.backwardFrames.entries()){if(s.timestamp>t+1e-4)break;e=s,r=n}let i=this.backwardFrames[r+1]?.timestamp??this.backwardEnd;if(!(!e||!(e.duration>0)||t+1e-4>=Math.min(e.timestamp+e.duration,i??1/0)))return e}async fillBackwardFrames(t,e){if(!this.videoSampleSink)return;await this.closeIterator(this.iterator),this.iterator=null;for(let i of this.headlessQueue)i.close();this.headlessQueue=[],this.clearBackwardFrames();let r=this.videoSampleSink.samples(Math.max(0,t-.5));try{for await(let i of r){if(i.timestamp>t+1e-4&&(this.backwardEnd=i.timestamp),this.destroyed||this.currentFetchId!==e||i.timestamp>t+1e-4){i.close();break}let n=i.displayWidth*i.displayHeight*4;if(n>48*1024*1024){i.close();break}for(this.backwardFrames.push(i),this.backwardBytes+=n;this.backwardBytes>48*1024*1024&&this.backwardFrames.length>1;){let s=this.backwardFrames.shift();s&&(this.backwardBytes-=s.displayWidth*s.displayHeight*4,s.close())}}}finally{await this.closeIterator(r)}}onDestroy(){this.resetSinks()}async startIterator(t,e){if(!this.canvasSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;this.iterator=this.canvasSink.canvases(r);let n=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed)return;this.currentFrame=n.value??null;let s=await this.iterator.next();this.currentFetchId!==e||this.destroyed||(this.nextFrame=s.value??null,this.iteratorStartTimestamp=r)}async startIteratorHeadless(t,e){if(!this.videoSampleSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;for(let s of this.headlessQueue)s.close();this.headlessQueue=[];let n=Math.max(0,r-.1);this.iterator=this.videoSampleSink.samples(n),await this.fillHeadlessQueue(e),!(this.currentFetchId!==e||this.destroyed)&&(this.iteratorStartTimestamp=r)}async getFrame(t){if(await this.init(),this.destroyed||!this.input)return null;let e=Math.max(0,Number.isFinite(t)?t:0);return this.isDecoding?(this.nextRequest&&this.nextRequest.resolve(null),new Promise((r,i)=>{this.nextRequest={timestampSec:e,resolve:r,reject:i}})):this.executeDecode(e)}async executeDecode(t){this.isDecoding=!0;try{return await this.performDecode(t)}finally{if(this.isDecoding=!1,this.nextRequest){let e=this.nextRequest;this.nextRequest=null,this.executeDecode(e.timestampSec).then(e.resolve).catch(e.reject)}}}async performDecodeHeadless(t,e){if(!this.videoSampleSink){if(this.destroyed||!this.input)return null;let c=await this.input.getPrimaryVideoTrack();if(!c)return null;this.videoSampleSink=new Pt(c)}let r=1e-4,i=1,n=.01,s=this.lastHeadlessTimestamp!==void 0&&t<this.lastHeadlessTimestamp-1e-4;this.lastHeadlessTimestamp=t;let a=this.cachedBackwardFrame(t);if(!a&&s&&(await this.fillBackwardFrames(t,e),a=this.cachedBackwardFrame(t)),a)return this.copyHeadlessSample(a,e);if((!this.iterator||t<this.iteratorStartTimestamp-r||this.headlessQueue.length>0&&t<this.headlessQueue[0].timestamp-n||this.headlessQueue.length>0&&t-this.headlessQueue[0].timestamp>i)&&(await this.startIteratorHeadless(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;;){if(await this.fillHeadlessQueue(e),this.currentFetchId!==e||this.destroyed||!this.input)return null;if(this.headlessQueue.length>=2&&this.headlessQueue[1].timestamp<=t+r){this.headlessQueue.shift()?.close();continue}break}let o=this.headlessQueue[0];return o?this.copyHeadlessSample(o,e):null}async performDecodeInternal(t){this.currentFetchId++;let e=this.currentFetchId;if(this.isHeadless)return this.performDecodeHeadless(t,e);if(!this.canvasSink){if(this.destroyed||!this.input)return null;let a=await this.input.getPrimaryVideoTrack();if(!a)return null;this.canvasSink=new it(a,{poolSize:3,alpha:!0})}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.currentFrame&&t<this.currentFrame.timestamp-.01||this.currentFrame&&t-this.currentFrame.timestamp>1)&&(await this.startIterator(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;this.nextFrame&&this.nextFrame.timestamp<=t+r;)if(this.currentFrame=this.nextFrame,this.nextFrame=null,this.iterator){let a=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed||!this.input)return null;this.nextFrame=a.value??null}if(!this.currentFrame)return null;let s=this.currentFrame.canvas;return{width:s.width,height:s.height,canvas:s}}async performDecode(t){let e=Math.max(0,Number.isFinite(t)?t:0);try{return await this.performDecodeInternal(e)}catch(r){let i=r;if(i?.name==="InputDisposedError"||i?.message?.includes("disposed")||this.destroyed||!this.input)return null;this.resetSinks();try{if(!this.isHeadless&&this.input&&!this.destroyed){let n=await this.input.getPrimaryVideoTrack();if(n&&!this.destroyed)return this.canvasSink=new it(n,{poolSize:3,alpha:!0,decoderOptions:{hardwareAcceleration:"prefer-software"}}),await this.performDecodeInternal(e)}}catch{}throw r}}},nt=class extends I{audioSink=null;onDestroy(){this.audioSink=null}async startIterator(t,e){this.audioSink&&(this.iterator?.return(),this.iterator=this.audioSink.buffers(t),this.iteratorStartTimestamp=t)}async*getBuffers(t){try{if(await this.init(),this.destroyed||!this.input)return;if(!this.audioSink){let i=await this.input.getPrimaryAudioTrack();if(!i)return;this.audioSink=new bt(i)}(!this.iterator||Math.abs(t-this.iteratorStartTimestamp)>.05)&&(this.currentFetchId++,await this.startIterator(t,this.currentFetchId));let r=this.currentFetchId;if(!this.iterator)return;for await(let i of this.iterator){if(this.currentFetchId!==r||this.destroyed||!this.input)break;this.iteratorStartTimestamp=i.timestamp+i.duration,yield i}}catch(e){let r=e;if(r?.name==="InputDisposedError"||r?.message?.includes("disposed")||this.destroyed||!this.input)return;throw e}finally{let e=this.currentFetchId;this.currentFetchId===e&&(this.iterator=null)}}},at=class{videoDecoders=new Map;audioDecoders=new Map;lastAccessed=new Map;ticks=0;lastTick=new Map;touchKey(t){this.lastAccessed.set(t,Date.now()),this.lastTick.set(t,this.ticks)}dropKey(t){let e=this.videoDecoders.get(t);if(e){try{e.destroy()}catch{}this.videoDecoders.delete(t)}let r=this.audioDecoders.get(t);if(r){try{r.destroy()}catch{}this.audioDecoders.delete(t)}this.lastAccessed.delete(t),this.lastTick.delete(t)}tick(t=120){this.ticks++;for(let[e,r]of this.lastTick)this.ticks-r>t&&this.dropKey(e)}destroy(){for(let t of this.videoDecoders.values())try{t.destroy()}catch{}this.videoDecoders.clear();for(let t of this.audioDecoders.values())try{t.destroy()}catch{}this.audioDecoders.clear(),this.lastAccessed.clear(),this.lastTick.clear()}get size(){return this.videoDecoders.size+this.audioDecoders.size}prune(t=3e5){let e=Date.now();for(let[r,i]of this.lastAccessed.entries())e-i>t&&this.dropKey(r)}getVideo(t,e,r){let i=`${t}-${e}-${r??"default"}`,n=this.videoDecoders.get(i);return n||(n=new ot(t,e),this.videoDecoders.set(i,n)),this.touchKey(i),this.prune(),n}getAudio(t,e){let r=`${t}-${e??"default"}`,i=this.audioDecoders.get(r);return i||(i=new nt(t,!1),this.audioDecoders.set(r,i)),this.touchKey(r),this.prune(),i}clearNode(t){let e=[...this.videoDecoders.keys(),...this.audioDecoders.keys()];for(let r of e)r.includes(t)&&this.dropKey(r)}},ee=new at;x();x();var Bt=`
|
|
2
|
-
struct CompositeUniforms {
|
|
3
|
-
blendMode : u32,
|
|
4
|
-
padding1 : u32,
|
|
5
|
-
padding2 : u32,
|
|
6
|
-
padding3 : u32,
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
@group(0) @binding(0) var<uniform> u : CompositeUniforms;
|
|
10
|
-
@group(1) @binding(0) var baseTex : texture_2d<f32>;
|
|
11
|
-
@group(1) @binding(1) var overlayTex : texture_2d<f32>;
|
|
12
|
-
@group(1) @binding(2) var samp : sampler;
|
|
13
|
-
|
|
14
|
-
struct VSOut {
|
|
15
|
-
@builtin(position) pos : vec4<f32>,
|
|
16
|
-
@location(0) uv : vec2<f32>,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
20
|
-
var pos = array<vec2<f32>, 4>(
|
|
21
|
-
vec2<f32>(-1.0, 1.0),
|
|
22
|
-
vec2<f32>(1.0, 1.0),
|
|
23
|
-
vec2<f32>(-1.0, -1.0),
|
|
24
|
-
vec2<f32>(1.0, -1.0)
|
|
25
|
-
);
|
|
26
|
-
var uv = array<vec2<f32>, 4>(
|
|
27
|
-
vec2<f32>(0.0, 0.0),
|
|
28
|
-
vec2<f32>(1.0, 0.0),
|
|
29
|
-
vec2<f32>(0.0, 1.0),
|
|
30
|
-
vec2<f32>(1.0, 1.0)
|
|
31
|
-
);
|
|
32
|
-
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
fn lum(c: vec3<f32>) -> f32 {
|
|
36
|
-
return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
fn clip_color(c: vec3<f32>) -> vec3<f32> {
|
|
40
|
-
let l = lum(c);
|
|
41
|
-
let n = min(min(c.r, c.g), c.b);
|
|
42
|
-
let x = max(max(c.r, c.g), c.b);
|
|
43
|
-
var res = c;
|
|
44
|
-
if (n < 0.0) {
|
|
45
|
-
res = l + (((res - l) * l) / (l - n));
|
|
46
|
-
}
|
|
47
|
-
if (x > 1.0) {
|
|
48
|
-
res = l + (((res - l) * (1.0 - l)) / (x - l));
|
|
49
|
-
}
|
|
50
|
-
return res;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
fn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
54
|
-
let diff = l - lum(c);
|
|
55
|
-
return clip_color(c + vec3<f32>(diff));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
fn sat(c: vec3<f32>) -> f32 {
|
|
59
|
-
return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
fn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {
|
|
63
|
-
let c_min = min(min(c.r, c.g), c.b);
|
|
64
|
-
let c_max = max(max(c.r, c.g), c.b);
|
|
65
|
-
if (c_max <= c_min) {
|
|
66
|
-
return vec3<f32>(0.0);
|
|
67
|
-
}
|
|
68
|
-
return (c - vec3<f32>(c_min)) * s / (c_max - c_min);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
72
|
-
let d = textureSample(baseTex, samp, in.uv);
|
|
73
|
-
let s = textureSample(overlayTex, samp, in.uv);
|
|
74
|
-
let sa = s.a;
|
|
75
|
-
let da = d.a;
|
|
76
|
-
|
|
77
|
-
switch (u.blendMode) {
|
|
78
|
-
case 16u: { return d * sa; } // mask-in / destination-in
|
|
79
|
-
case 17u: { return d * (1.0 - sa); } // mask-out / destination-out
|
|
80
|
-
case 18u: { return s * da; } // source-in
|
|
81
|
-
case 19u: { return s * (1.0 - da); } // source-out
|
|
82
|
-
case 20u: { return s * da + d * (1.0 - sa); } // source-atop
|
|
83
|
-
case 21u: { return d + s * (1.0 - da); } // destination-over
|
|
84
|
-
case 22u: { return d * sa + s * (1.0 - da); } // destination-atop
|
|
85
|
-
case 23u: { return s + d; } // lighter
|
|
86
|
-
case 24u: { return s; } // copy
|
|
87
|
-
case 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor
|
|
88
|
-
// Luma mattes: the overlay's brightness (premultiplied, so transparent = black) masks the base.
|
|
89
|
-
case 26u: { return d * clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0); } // luma-in
|
|
90
|
-
case 27u: { return d * (1.0 - clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0)); } // luma-out
|
|
91
|
-
default: {
|
|
92
|
-
if (sa <= 0.0) { return d; }
|
|
93
|
-
if (da <= 0.0) { return s; }
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
let s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);
|
|
98
|
-
let d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);
|
|
99
|
-
|
|
100
|
-
var b_rgb = s_rgb;
|
|
101
|
-
|
|
102
|
-
switch (u.blendMode) {
|
|
103
|
-
case 1u: { b_rgb = s_rgb * d_rgb; } // multiply
|
|
104
|
-
case 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen
|
|
105
|
-
case 3u: { // overlay
|
|
106
|
-
b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, d_rgb < vec3<f32>(0.5));
|
|
107
|
-
}
|
|
108
|
-
case 4u: { b_rgb = min(s_rgb, d_rgb); } // darken
|
|
109
|
-
case 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten
|
|
110
|
-
case 6u: { // color-dodge
|
|
111
|
-
b_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));
|
|
112
|
-
}
|
|
113
|
-
case 7u: { // color-burn
|
|
114
|
-
b_rgb = select(1.0 - min((1.0 - d_rgb) / s_rgb, vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb == vec3<f32>(0.0));
|
|
115
|
-
}
|
|
116
|
-
case 8u: { // hard-light
|
|
117
|
-
b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, s_rgb < vec3<f32>(0.5));
|
|
118
|
-
}
|
|
119
|
-
case 9u: { // soft-light
|
|
120
|
-
b_rgb = select(
|
|
121
|
-
d_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),
|
|
122
|
-
d_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),
|
|
123
|
-
s_rgb <= vec3<f32>(0.5)
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
case 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference
|
|
127
|
-
case 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion
|
|
128
|
-
case 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue
|
|
129
|
-
case 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation
|
|
130
|
-
case 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color
|
|
131
|
-
case 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity
|
|
132
|
-
case 16u: { return d * s.a; } // mask-in
|
|
133
|
-
case 17u: { return d * (1.0 - s.a); } // mask-out
|
|
134
|
-
default: { b_rgb = s_rgb; } // normal
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
let out_a = sa + da * (1.0 - sa);
|
|
138
|
-
let out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;
|
|
139
|
-
|
|
140
|
-
return vec4<f32>(out_rgb, out_a);
|
|
141
|
-
}
|
|
142
|
-
`;var Vt=`
|
|
143
|
-
struct MotionBlur2DUniforms {
|
|
144
|
-
vel: vec2<f32>,
|
|
145
|
-
_pad: vec2<f32>,
|
|
146
|
-
shutterFraction: f32,
|
|
147
|
-
samples: f32,
|
|
148
|
-
viewportWidth: f32,
|
|
149
|
-
viewportHeight: f32,
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
@group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;
|
|
153
|
-
@group(1) @binding(0) var sourceTexture: texture_2d<f32>;
|
|
154
|
-
@group(1) @binding(1) var colorSampler: sampler;
|
|
155
|
-
|
|
156
|
-
@vertex
|
|
157
|
-
fn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
|
|
158
|
-
var pos = array<vec2<f32>, 3>(
|
|
159
|
-
vec2<f32>(-1.0, -3.0),
|
|
160
|
-
vec2<f32>( 3.0, 1.0),
|
|
161
|
-
vec2<f32>(-1.0, 1.0)
|
|
162
|
-
);
|
|
163
|
-
return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
@fragment
|
|
167
|
-
fn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
168
|
-
let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);
|
|
169
|
-
let sampleCount = u32(max(u.samples, 1.0));
|
|
170
|
-
let velUV = u.vel * u.shutterFraction;
|
|
171
|
-
let halfSamples = f32(sampleCount) * 0.5;
|
|
172
|
-
|
|
173
|
-
var accum = vec4<f32>(0.0);
|
|
174
|
-
var totalWeight = 0.0;
|
|
175
|
-
|
|
176
|
-
for (var i = 0u; i < sampleCount; i = i + 1u) {
|
|
177
|
-
let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);
|
|
178
|
-
let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
179
|
-
let w = exp(-2.5 * t * t);
|
|
180
|
-
accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;
|
|
181
|
-
totalWeight += w;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return accum / max(totalWeight, 0.0001);
|
|
185
|
-
}
|
|
186
|
-
`,lt=class{textures=[];texturesByKey=new Map;index=0;getTexture(t,e,r,i,n){let s=new Set(Array.isArray(n)?n:n?[n]:[]),a=`${e}x${r}:${i}`,o=this.texturesByKey.get(a);if(o)for(let u=0;u<o.length;u++){let p=o[u];if(!s.has(p)){o.splice(u,1),o.unshift(p);let h=this.textures.indexOf(p);return h>=this.index&&(this.textures.splice(h,1),this.textures.splice(this.index,0,p),this.index++),p}}let c=t.createTexture({size:[e,r],format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});return this.texturesByKey.has(a)||this.texturesByKey.set(a,[]),this.texturesByKey.get(a).unshift(c),this.textures.splice(this.index,0,c),this.index++,c}reset(){this.index=0}destroy(){for(let t of this.textures)t.destroy();this.textures=[],this.texturesByKey.clear(),this.index=0}},Wt={normal:0,"source-over":0,multiply:1,screen:2,overlay:3,darken:4,lighten:5,"color-dodge":6,"color-burn":7,"hard-light":8,"soft-light":9,difference:10,exclusion:11,hue:12,saturation:13,color:14,luminosity:15,"mask-in":16,"destination-in":16,"mask-out":17,"destination-out":17,"source-in":18,"source-out":19,"source-atop":20,"destination-over":21,"destination-atop":22,lighter:23,copy:24,xor:25,"luma-in":26,"luma-out":27},E=class{device;compositeUniformLayout;dualTextureLayout;motionBlurUniformLayout;singleTextureLayout;compositePipeline;motionBlurPipeline;compositePool;motionBlurPool;texturePool;compositeUniformBindGroupCache=new U;motionBlurUniformBindGroupCache=new U;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(t,e){this.device=t,this.compositePool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new lt,this.compositeUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.dualTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),this.motionBlurUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.singleTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let r=t.createPipelineLayout({bindGroupLayouts:[this.compositeUniformLayout,this.dualTextureLayout]}),i=t.createShaderModule({label:"composite.wgsl",code:Bt});this.compositePipeline=t.createRenderPipeline({label:"CompositePipeline",layout:r,vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}});let n=t.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),s=t.createShaderModule({label:"motion-blur-2d.wgsl",code:Vt});this.motionBlurPipeline=t.createRenderPipeline({label:"MotionBlurPipeline",layout:n,vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(t,e,r,i,n){return this.texturePool.getTexture(t,e,r,i,n)}getBuffer(t,e){return this.compositePool.getBuffer(t,e)}composite(t,e,r,i,n,s,a,o){let c=r.getSampler(this.device),u=[i,n];o&&(Array.isArray(o)?u.push(...o):u.push(o));let p=this.texturePool.getTexture(this.device,i.width,i.height,a,u);this.compositeData[0]=Wt[s]??0;let h=this.compositePool.getBuffer(this.device,this.compositeData),f=t.beginRenderPass({colorAttachments:[{view:p.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});f.setPipeline(this.compositePipeline);let d=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,h);f.setBindGroup(0,d);let m=e.getCompositeBindGroup(this.device,this.dualTextureLayout,i,n,c);return f.setBindGroup(1,m),f.draw(4),f.end(),p}applyMotionBlur(t,e,r,i,n,s,a=180,o=16,c,u){if(Math.abs(n)<.1&&Math.abs(s)<.1||a<=0)return i;let p=r.getSampler(this.device),h=[i];u&&(Array.isArray(u)?h.push(...u):h.push(u));let f=this.texturePool.getTexture(this.device,i.width,i.height,c,h);this.motionBlurData[0]=n/i.width,this.motionBlurData[1]=s/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=a/360,this.motionBlurData[5]=o,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let d=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),m=t.beginRenderPass({colorAttachments:[{view:f.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});m.setPipeline(this.motionBlurPipeline);let y=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,d);return m.setBindGroup(0,y),m.setBindGroup(1,e.getBindGroup(this.device,this.singleTextureLayout,i,p)),m.draw(3),m.end(),f}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};x();x();var V=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(t,e,r,i){let n=this.cache.get(r);n||(n=new Map,this.cache.set(r,n));let s=n.get(e);return s||(s=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i}]}),n.set(e,s)),s}getCompositeBindGroup(t,e,r,i,n){let s=this.dualCache.get(r);s||(s=new WeakMap,this.dualCache.set(r,s));let a=s.get(i);a||(a=new Map,s.set(i,a));let o=a.get(e);return o||(o=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i.createView()},{binding:2,resource:n}]}),a.set(e,o)),o}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};x();var W=class{scissorStack=[];stencilStack=[];pushScissor(t,e,r){this.scissorStack.push({rect:t,surfaceWidth:e,surfaceHeight:r})}popScissor(){this.scissorStack.length>0&&this.scissorStack.pop()}saveScissors(){return[...this.scissorStack]}restoreScissors(t){this.scissorStack=[...t]}clearScissors(){this.scissorStack=[]}getCurrentScissor(t,e){let r=this.scissorStack[this.scissorStack.length-1];if(r&&!(t!==void 0&&e!==void 0&&r.surfaceWidth!==void 0&&r.surfaceHeight!==void 0&&r.surfaceWidth!==0&&r.surfaceHeight!==0&&(r.surfaceWidth!==t||r.surfaceHeight!==e)))return r.rect}pushStencilClip(t){this.stencilStack.push(t)}popStencilClip(){this.stencilStack.length>0&&this.stencilStack.pop()}getCurrentStencil(){return this.stencilStack[this.stencilStack.length-1]}applyScissorToPass(t,e,r){let i=this.getCurrentScissor(e,r);if(!i){t.setScissorRect(0,0,Math.max(1,Math.floor(e)),Math.max(1,Math.floor(r)));return}let n=Math.max(0,Math.floor(i.x)),s=Math.max(0,Math.floor(i.y)),a=Math.min(e,Math.ceil(i.x+i.width)),o=Math.min(r,Math.ceil(i.y+i.height)),c=Math.max(0,a-n),u=Math.max(0,o-s);if(!Number.isFinite(n)||!Number.isFinite(s)||!Number.isFinite(c)||!Number.isFinite(u)||c<=0||u<=0)t.setScissorRect(0,0,1,1);else{let p=Math.min(c,Math.max(0,e-n)),h=Math.min(u,Math.max(0,r-s));p<=0||h<=0?t.setScissorRect(0,0,1,1):t.setScissorRect(Math.floor(n),Math.floor(s),Math.floor(p),Math.floor(h))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};x();function Dt(l,t,e,r,i=24){let n=[],s=l;for(let a=1;a<=i;a++){let o=a/i,c=1-o,u=c*c,p=u*c,h=o*o,f=h*o,d={x:p*l.x+3*u*o*t.x+3*c*h*e.x+f*r.x,y:p*l.y+3*u*o*t.y+3*c*h*e.y+f*r.y};n.push({p0:s,p1:d}),s=d}return n}function Ct(l,t,e,r=16){let i=[],n=l;for(let s=1;s<=r;s++){let a=s/r,o=1-a,c=o*o,u=a*a,p={x:c*l.x+2*o*a*t.x+u*e.x,y:c*l.y+2*o*a*t.y+u*e.y};i.push({p0:n,p1:p}),n=p}return i}function zt(l,t,e,r,i,n,s){let a=Math.abs(t),o=Math.abs(e);if(a<1e-9||o<1e-9)return[{p0:l,p1:s}];if(Math.hypot(s.x-l.x,s.y-l.y)<1e-9)return[];let c=r*Math.PI/180,u=Math.cos(c),p=Math.sin(c),h=(l.x-s.x)/2,f=(l.y-s.y)/2,d=u*h+p*f,m=-p*h+u*f,y=d*d/(a*a)+m*m/(o*o);y>1&&(a*=Math.sqrt(y),o*=Math.sqrt(y));let g=a*a*o*o-a*a*m*m-o*o*d*d,P=a*a*m*m+o*o*d*d,b=(i===n?-1:1)*Math.sqrt(Math.max(0,g/P)),v=b*a*m/o,S=-b*o*d/a,M=u*v-p*S+(l.x+s.x)/2,F=p*v+u*S+(l.y+s.y)/2,tt=(C,_,R,L)=>Math.atan2(C*L-_*R,C*R+_*L),et=tt(1,0,(d-v)/a,(m-S)/o),k=tt((d-v)/a,(m-S)/o,(-d-v)/a,(-m-S)/o);!n&&k>0&&(k-=2*Math.PI),n&&k<0&&(k+=2*Math.PI);let rt=Math.max(4,Math.ceil(Math.abs(k)/(2*Math.PI)*64)),dt=[],ft=l;for(let C=1;C<=rt;C++){let _=et+k*C/rt,R=a*Math.cos(_),L=o*Math.sin(_),mt=C===rt?s:{x:u*R-p*L+M,y:p*R+u*L+F};dt.push({p0:ft,p1:mt}),ft=mt}return dt}function z(l){let t=[];if(!l||typeof l!="string")return t;let e=[],r=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,i;for(;(i=r.exec(l))!==null;)i[1]?e.push(i[1]):i[2]&&e.push(parseFloat(i[2]));let n=0,s={x:0,y:0},a={x:0,y:0},o=null,c=null;for(;n<e.length;){let u=e[n++];if(typeof u!="string")continue;let p=u,h=p===p.toLowerCase(),f=p.toUpperCase(),d=()=>n<e.length&&typeof e[n]=="number"?e[n++]:0;switch(f){case"M":{let m=!0;for(;n<e.length&&typeof e[n]=="number";){let y=d(),g=d();h&&(y+=s.x,g+=s.y),m?(s={x:y,y:g},a={x:y,y:g},m=!1):(t.push({p0:s,p1:{x:y,y:g}}),s={x:y,y:g})}o=null,c=null;break}case"L":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d();h&&(m+=s.x,y+=s.y),t.push({p0:s,p1:{x:m,y}}),s={x:m,y}}o=null,c=null;break}case"H":{for(;n<e.length&&typeof e[n]=="number";){let m=d();h&&(m+=s.x);let y={x:m,y:s.y};t.push({p0:s,p1:y}),s=y}o=null,c=null;break}case"V":{for(;n<e.length&&typeof e[n]=="number";){let m=d();h&&(m+=s.y);let y={x:s.x,y:m};t.push({p0:s,p1:y}),s=y}o=null,c=null;break}case"C":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d(),g=d(),P=d(),b=d(),v=d();h&&(m+=s.x,y+=s.y,g+=s.x,P+=s.y,b+=s.x,v+=s.y);let S={x:m,y},M={x:g,y:P},F={x:b,y:v};t.push(...Dt(s,S,M,F)),s=F,o=M}c=null;break}case"S":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d(),g=d(),P=d();h&&(m+=s.x,y+=s.y,g+=s.x,P+=s.y);let b;o?b={x:2*s.x-o.x,y:2*s.y-o.y}:b={x:s.x,y:s.y};let v={x:m,y},S={x:g,y:P};t.push(...Dt(s,b,v,S)),s=S,o=v}c=null;break}case"Q":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d(),g=d(),P=d();h&&(m+=s.x,y+=s.y,g+=s.x,P+=s.y);let b={x:m,y},v={x:g,y:P};t.push(...Ct(s,b,v)),s=v,c=b}o=null;break}case"T":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d();h&&(m+=s.x,y+=s.y);let g;c?g={x:2*s.x-c.x,y:2*s.y-c.y}:g={x:s.x,y:s.y};let P={x:m,y};t.push(...Ct(s,g,P)),s=P,c=g}o=null;break}case"A":{for(;n<e.length&&typeof e[n]=="number";){let m=d(),y=d(),g=d(),P=d()!==0,b=d()!==0,v=d(),S=d();h&&(v+=s.x,S+=s.y);let M={x:v,y:S};t.push(...zt(s,m,y,g,P,b,M)),s=M}o=null,c=null;break}case"Z":{Math.hypot(s.x-a.x,s.y-a.y)>1e-5&&t.push({p0:s,p1:a}),s=a,o=null,c=null;break}default:break}}return t}function H(l,t,e,r=0){if(l.length===0)return[];let i=[],n=0;for(let u of l){let p=Math.hypot(u.p1.x-u.p0.x,u.p1.y-u.p0.y);i.push(p),n+=p}if(n<1e-6)return[];let s=Math.abs(r)>1?r%360/360:r,a=(t+s)%1,o=(e+s)%1;a<0&&(a+=1),o<0&&(o+=1);let c=(u,p)=>{if(u>=p)return[];let h=[],f=0;for(let d=0;d<l.length;d++){let m=l[d],y=i[d],g=f,P=f+y;if(f=P,P<=u||g>=p||y<1e-6)continue;let b=Math.max(0,(u-g)/y),v=Math.min(1,(p-g)/y);if(v>b){let S={x:m.p0.x+(m.p1.x-m.p0.x)*b,y:m.p0.y+(m.p1.y-m.p0.y)*b},M={x:m.p0.x+(m.p1.x-m.p0.x)*v,y:m.p0.y+(m.p1.y-m.p0.y)*v};h.push({p0:S,p1:M})}}return h};if(t===0&&e===1&&r===0)return[...l];if(Math.abs(a-o)<1e-5)return[];if(a<=o)return c(a*n,o*n);{let u=c(a*n,n),p=c(0,o*n);return[...u,...p]}}function ct(l,t,e=0){if(l.length===0||t.length===0)return l;let r=0;for(let f of t)r+=f;if(r<1e-5)return l;let i=0,n=[];for(let f of l){let d=Math.hypot(f.p1.x-f.p0.x,f.p1.y-f.p0.y);n.push(d),i+=d}let s=[],a=(e%r+r)%r,o=0,c=!0,u=a;for(;u>t[o];)u-=t[o],o=(o+1)%t.length,c=!c;let p=t[o]-u,h=0;for(;h<i;){let f=Math.min(p,i-h);if(c&&f>1e-4){let d=H(l,h/i,(h+f)/i);s.push(...d)}h+=f,o=(o+1)%t.length,c=!c,p=t[o]}return s}function Ft(l,t,e=0,r=0,i=0,n=0){let s=Math.min(l/2,t/2),a=Math.min(e,s),o=Math.min(r,s),c=Math.min(i,s),u=Math.min(n,s);return a===0&&o===0&&c===0&&u===0?`M 0 0 L ${l} 0 L ${l} ${t} L 0 ${t} Z`:[`M ${a} 0`,`L ${l-o} 0`,o>0?`Q ${l} 0 ${l} ${o}`:`L ${l} 0`,`L ${l} ${t-c}`,c>0?`Q ${l} ${t} ${l-c} ${t}`:`L ${l} ${t}`,`L ${u} ${t}`,u>0?`Q 0 ${t} 0 ${t-u}`:`L 0 ${t}`,`L 0 ${a}`,a>0?`Q 0 0 ${a} 0`:"L 0 0","Z"].join(" ")}function Ht(l,t){let e=Math.min(l,t)/2,r=l/2,i=t/2,n=e*.5522847498;return[`M ${r} ${i-e}`,`C ${r+n} ${i-e} ${r+e} ${i-n} ${r+e} ${i}`,`C ${r+e} ${i+n} ${r+n} ${i+e} ${r} ${i+e}`,`C ${r-n} ${i+e} ${r-e} ${i+n} ${r-e} ${i}`,`C ${r-e} ${i-n} ${r-n} ${i-e} ${r} ${i-e}`,"Z"].join(" ")}function jt(l,t){let e=l/2,r=t/2,i=e,n=r,s=e*.5522847498,a=r*.5522847498;return[`M ${i} ${n-r}`,`C ${i+s} ${n-r} ${i+e} ${n-a} ${i+e} ${n}`,`C ${i+e} ${n+a} ${i+s} ${n+r} ${i} ${n+r}`,`C ${i-s} ${n+r} ${i-e} ${n+a} ${i-e} ${n}`,`C ${i-e} ${n-a} ${i-s} ${n-r} ${i} ${n-r}`,"Z"].join(" ")}function Nt(l,t,e=5){let r=Math.max(3,e),i=Math.min(l,t)/2,n=l/2,s=t/2,a=[];for(let o=0;o<r;o++){let c=-Math.PI/2+o*2*Math.PI/r;a.push({x:n+i*Math.cos(c),y:s+i*Math.sin(c)})}return a.map((o,c)=>`${c===0?"M":"L"} ${o.x} ${o.y}`).join(" ")+" Z"}function qt(l,t,e=5,r=.5){let i=Math.max(3,e),n=Math.min(l,t)/2,s=n*Math.max(.01,Math.min(.99,r)),a=l/2,o=t/2,c=[];for(let u=0;u<i*2;u++){let p=-Math.PI/2+u*Math.PI/i,h=u%2===0?n:s;c.push({x:a+h*Math.cos(p),y:o+h*Math.sin(p)})}return c.map((u,p)=>`${p===0?"M":"L"} ${u.x} ${u.y}`).join(" ")+" Z"}function Qt(l,t,e=40,r=40,i=20){let n=Math.min(e,t),s=Math.min(r,l),a=Math.min(i,n),o=t/2;return[`M 0 ${o-a/2}`,`L ${l-s} ${o-a/2}`,`L ${l-s} ${o-n/2}`,`L ${l} ${o}`,`L ${l-s} ${o+n/2}`,`L ${l-s} ${o+a/2}`,`L 0 ${o+a/2}`,"Z"].join(" ")}function ut(l){let{shapeType:t,width:e,height:r}=l;switch(t){case"rect":return Ft(e,r,l.cornerRadius??0,l.cornerRadius??0,l.cornerRadius??0,l.cornerRadius??0);case"circle":return Ht(e,r);case"ellipse":return jt(e,r);case"polygon":return Nt(e,r,l.polygonSides??5);case"star":return qt(e,r,l.starPoints??5,l.starInnerRadiusRatio??.5);case"arrow":return Qt(e,r,l.arrowHeadWidth??40,l.arrowHeadLength??40,l.arrowShaftWidth??20);case"path":return l.path??"";default:return""}}function Tt(l){if(l.length<3)return[];if(l.length===3)return[l[0],l[1],l[2]];let t=[...l],e=t[t.length-1],r=t[0];if(Math.hypot(e.x-r.x,e.y-r.y)<1e-5&&t.pop(),t.length<3)return[];let i=0;for(let p=0;p<t.length;p++){let h=(p+1)%t.length;i+=t[p].x*t[h].y-t[h].x*t[p].y}i<0&&t.reverse();let n=(p,h,f,d)=>{let m=(f.x-h.x)*(p.y-h.y)-(f.y-h.y)*(p.x-h.x),y=(d.x-f.x)*(p.y-f.y)-(d.y-f.y)*(p.x-f.x),g=(h.x-d.x)*(p.y-d.y)-(h.y-d.y)*(p.x-d.x);return m>=-1e-6&&y>=-1e-6&&g>=-1e-6},s=(p,h,f,d)=>{if((h.x-p.x)*(f.y-p.y)-(h.y-p.y)*(f.x-p.x)<=1e-7)return!1;for(let y of d)if(!(y===p||y===h||y===f)&&n(y,p,h,f))return!1;return!0},a=[],o=[...t],c=0,u=o.length*o.length*2;for(;o.length>3&&c<u;){c++;let p=!1;for(let h=0;h<o.length;h++){let f=o[(h-1+o.length)%o.length],d=o[h],m=o[(h+1)%o.length];if(s(f,d,m,o)){a.push(f,d,m),o.splice(h,1),p=!0;break}}p||(a.push(o[0],o[1],o[2]),o.splice(1,1))}return o.length===3&&a.push(o[0],o[1],o[2]),a}function _t(l){let{shapeType:t,width:e,height:r}=l;if(t==="rect"){let i=l.cornerRadius??0;if(i<=0)return new Float32Array([0,0,e,0,e,r,0,0,e,r,0,r]);let n=Ft(e,r,i,i,i,i),a=z(n).map(u=>u.p0),o=Tt(a),c=new Float32Array(o.length*2);for(let u=0;u<o.length;u++)c[u*2]=o[u].x,c[u*2+1]=o[u].y;return c}if(t==="circle"||t==="ellipse"){let i=e/2,n=r/2,s=t==="circle"?Math.min(e,r)/2:e/2,a=t==="circle"?s:r/2,o=48,c=new Float32Array(o*3*2),u=0;for(let p=0;p<o;p++){let h=p*2*Math.PI/o,f=(p+1)*2*Math.PI/o;c[u++]=i,c[u++]=n,c[u++]=i+s*Math.cos(h),c[u++]=n+a*Math.sin(h),c[u++]=i+s*Math.cos(f),c[u++]=n+a*Math.sin(f)}return c}if(t==="polygon"){let i=Math.max(3,l.polygonSides??5),n=Math.min(e,r)/2,s=e/2,a=r/2,o=new Float32Array(i*3*2),c=0;for(let u=0;u<i;u++){let p=-Math.PI/2+u*2*Math.PI/i,h=-Math.PI/2+(u+1)*2*Math.PI/i;o[c++]=s,o[c++]=a,o[c++]=s+n*Math.cos(p),o[c++]=a+n*Math.sin(p),o[c++]=s+n*Math.cos(h),o[c++]=a+n*Math.sin(h)}return o}if(t==="star"){let i=Math.max(3,l.starPoints??5),n=Math.min(e,r)/2,s=n*Math.max(.01,Math.min(.99,l.starInnerRadiusRatio??.5)),a=e/2,o=r/2,c=i*2,u=new Float32Array(c*3*2),p=0;for(let h=0;h<c;h++){let f=-Math.PI/2+h*Math.PI/i,d=-Math.PI/2+(h+1)*Math.PI/i,m=h%2===0?n:s,y=(h+1)%2===0?n:s;u[p++]=a,u[p++]=o,u[p++]=a+m*Math.cos(f),u[p++]=o+m*Math.sin(f),u[p++]=a+y*Math.cos(d),u[p++]=o+y*Math.sin(d)}return u}if(t==="arrow"){let i=Math.min(l.arrowHeadWidth??40,r),n=Math.min(l.arrowHeadLength??40,e),s=Math.min(l.arrowShaftWidth??20,i),a=r/2,o=0,c=e-n,u=e,p=a-s/2,h=a+s/2,f=a-i/2,d=a+i/2;return new Float32Array([o,p,c,p,c,h,o,p,c,h,o,h,c,f,u,a,c,d])}if(t==="path"&&l.path){let i=z(l.path);if(i.length===0)return new Float32Array(0);let n=i.map(o=>o.p0),s=Tt(n),a=new Float32Array(s.length*2);for(let o=0;o<s.length;o++)a[o*2]=s[o].x,a[o*2+1]=s[o].y;return a}return new Float32Array(0)}x();x();var Rt=`
|
|
187
|
-
struct Uniforms {
|
|
188
|
-
transformCol0 : vec4<f32>,
|
|
189
|
-
transformCol1 : vec4<f32>,
|
|
190
|
-
transformCol2 : vec4<f32>,
|
|
191
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
|
|
192
|
-
color : vec4<f32>,
|
|
193
|
-
style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
|
|
194
|
-
p0 : vec2<f32>,
|
|
195
|
-
p1 : vec2<f32>,
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
199
|
-
|
|
200
|
-
struct VSOut {
|
|
201
|
-
@builtin(position) pos : vec4<f32>,
|
|
202
|
-
@location(0) localPos : vec2<f32>,
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
206
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
207
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
208
|
-
|
|
209
|
-
let surfaceSize = u.params.yz;
|
|
210
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
211
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
212
|
-
|
|
213
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
|
|
217
|
-
let ba = b - a;
|
|
218
|
-
let len = length(ba);
|
|
219
|
-
if (len < 1e-6) {
|
|
220
|
-
return length(p - a) - radius;
|
|
221
|
-
}
|
|
222
|
-
let dir = ba / len;
|
|
223
|
-
let normal = vec2<f32>(-dir.y, dir.x);
|
|
224
|
-
let pa = p - a;
|
|
225
|
-
|
|
226
|
-
let proj = dot(pa, dir);
|
|
227
|
-
let perp = abs(dot(pa, normal));
|
|
228
|
-
|
|
229
|
-
if (capType > 0.5 && capType < 1.5) {
|
|
230
|
-
// Butt cap: terminates strictly at endpoints a and b
|
|
231
|
-
let dx = max(-proj, proj - len);
|
|
232
|
-
let dy = perp - radius;
|
|
233
|
-
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
234
|
-
let inside = min(max(dx, dy), 0.0);
|
|
235
|
-
return outside + inside;
|
|
236
|
-
} else if (capType >= 1.5) {
|
|
237
|
-
// Square cap: extends past endpoints a and b by radius
|
|
238
|
-
let dx = max(-proj - radius, proj - (len + radius));
|
|
239
|
-
let dy = perp - radius;
|
|
240
|
-
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
241
|
-
let inside = min(max(dx, dy), 0.0);
|
|
242
|
-
return outside + inside;
|
|
243
|
-
} else {
|
|
244
|
-
// Round cap (default)
|
|
245
|
-
let h = clamp(proj / len, 0.0, 1.0);
|
|
246
|
-
return length(pa - ba * h) - radius;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
251
|
-
let radius = u.params.w * 0.5;
|
|
252
|
-
let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
|
|
253
|
-
|
|
254
|
-
let fw = max(fwidth(d), 1e-5);
|
|
255
|
-
let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
256
|
-
let alpha = u.color.a * u.params.x * edgeAlpha;
|
|
257
|
-
if (alpha <= 0.0) {
|
|
258
|
-
discard;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
return vec4<f32>(u.color.rgb * alpha, alpha);
|
|
262
|
-
}
|
|
263
|
-
`;var j=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new U;scratchData=new Float32Array(28);constructor(t,e){this.device=t,this.uniformPool=new G(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"path.wgsl",code:Rt});this.uniformLayout=D(t),this.pipeline=T(t,{label:"PathPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"}),this.maxPipeline=T(t,{label:"PathPipeline.max",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}drawPath(t,e,r,i,n,s,a,o){let c=z(r);if(c.length===0||((o?.trimStart!==void 0||o?.trimEnd!==void 0||o?.trimOffset!==void 0)&&(c=H(c,o.trimStart??0,o.trimEnd??1,o.trimOffset??0)),o?.strokeDashArray&&o.strokeDashArray.length>0&&(c=ct(c,o.strokeDashArray,o.strokeDashOffset??0)),c.length===0))return;let u=B(i),p=o?.opacity??1,h=0;o?.strokeLineCap==="butt"?h=1:o?.strokeLineCap==="square"&&(h=2);for(let f of c)this.drawSegment(t,e,f.p0,f.p1,u,n,h,s,a,p,o)}drawSegments(t,e,r,i,n,s,a,o){let c=r;if((o?.trimStart!==void 0||o?.trimEnd!==void 0||o?.trimOffset!==void 0)&&(c=H(c,o.trimStart??0,o.trimEnd??1,o.trimOffset??0)),o?.strokeDashArray&&o.strokeDashArray.length>0&&(c=ct(c,o.strokeDashArray,o.strokeDashOffset??0)),c.length===0)return;let u=B(i),p=o?.opacity??1,h=0;o?.strokeLineCap==="butt"?h=1:o?.strokeLineCap==="square"&&(h=2);for(let f of c)this.drawSegment(t,e,f.p0,f.p1,u,n,h,s,a,p,o)}drawSegment(t,e,r,i,n,s,a,o,c,u,p){let h=this.scratchData;e.packIntoBuffer(h,u,o,c,p?.transform),h[15]=s,h[16]=n.r,h[17]=n.g,h[18]=n.b,h[19]=n.a,h[20]=a,h[21]=0,h[22]=0,h[23]=0,h[24]=r.x,h[25]=r.y,h[26]=i.x,h[27]=i.y;let f=this.uniformPool.getBuffer(this.device,h),d=i.x-r.x,m=i.y-r.y,y=Math.sqrt(d*d+m*m);if(y<1e-6)return;let g=s*.5+2,P=d/y*g,b=m/y*g,v=-b,S=P,M=new Float32Array([r.x-P-v,r.y-b-S,r.x-P+v,r.y-b+S,i.x+P-v,i.y+b-S,i.x+P+v,i.y+b+S]),F=this.vertexPool.getBuffer(this.device,M),et=p?.blendMode==="max"?this.maxPipeline:this.pipeline;t.setPipeline(et);let k=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,f);t.setBindGroup(0,k),t.setVertexBuffer(0,F),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};x();x();var Lt=`
|
|
264
|
-
struct Uniforms {
|
|
265
|
-
transformCol0 : vec4<f32>,
|
|
266
|
-
transformCol1 : vec4<f32>,
|
|
267
|
-
transformCol2 : vec4<f32>,
|
|
268
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
272
|
-
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
273
|
-
@group(1) @binding(1) var samp : sampler;
|
|
274
|
-
|
|
275
|
-
struct VSOut {
|
|
276
|
-
@builtin(position) pos : vec4<f32>,
|
|
277
|
-
@location(0) uv : vec2<f32>,
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
|
|
281
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
282
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
283
|
-
|
|
284
|
-
let surfaceSize = u.params.yz;
|
|
285
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
286
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
287
|
-
|
|
288
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
292
|
-
let opacity = u.params.x;
|
|
293
|
-
let blurAmount = u.params.w;
|
|
294
|
-
|
|
295
|
-
if (blurAmount > 0.01) {
|
|
296
|
-
let fdx = dpdx(in.uv);
|
|
297
|
-
let fdy = dpdy(in.uv);
|
|
298
|
-
let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
|
|
299
|
-
let step = fw * blurAmount * 0.3;
|
|
300
|
-
|
|
301
|
-
var color = vec4<f32>(0.0);
|
|
302
|
-
var totalWeight = 0.0;
|
|
303
|
-
for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
|
|
304
|
-
for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
|
|
305
|
-
let offset = vec2<f32>(x_offset, y_offset) * step;
|
|
306
|
-
let sampleColor = textureSample(tex, samp, in.uv + offset);
|
|
307
|
-
color = color + sampleColor;
|
|
308
|
-
totalWeight = totalWeight + 1.0;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return (color / totalWeight) * opacity;
|
|
312
|
-
} else {
|
|
313
|
-
let color = textureSample(tex, samp, in.uv);
|
|
314
|
-
return color * opacity;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
`;var N=class{buffers=[];index=0;size;usage;constructor(t,e){this.size=t,this.usage=e}getBuffer(t,e){if(this.index>=this.buffers.length){let i=t.createBuffer({size:this.size,usage:this.usage});this.buffers.push(i)}let r=this.buffers[this.index++];return t.queue.writeBuffer(r,0,e),r}reset(){this.index=0}destroy(){for(let t of this.buffers)t.destroy();this.buffers=[]}},q=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new U;uniformData=new Float32Array(16);vertexData=new Float32Array(16);constructor(t,e){this.device=t,this.uniformPool=new N(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new N(64,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"quad.wgsl",code:Lt});this.uniformLayout=D(t),this.textureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let i=t.createPipelineLayout({bindGroupLayouts:[this.uniformLayout,this.textureLayout]});this.pipeline=t.createRenderPipeline({label:"QuadPipeline",layout:i,vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:e,blend:Gt}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,n,s,a,o,c,u){let p=u?.opacity??1;r.packIntoBuffer(this.uniformData,p,o,c,u?.transform);let h=this.uniformPool.getBuffer(this.device,this.uniformData),f=s.x/i.width,d=s.y/i.height,m=(s.x+s.width)/i.width,y=(s.y+s.height)/i.height;this.vertexData[0]=a.x,this.vertexData[1]=a.y,this.vertexData[2]=f,this.vertexData[3]=d,this.vertexData[4]=a.x+a.width,this.vertexData[5]=a.y,this.vertexData[6]=m,this.vertexData[7]=d,this.vertexData[8]=a.x,this.vertexData[9]=a.y+a.height,this.vertexData[10]=f,this.vertexData[11]=y,this.vertexData[12]=a.x+a.width,this.vertexData[13]=a.y+a.height,this.vertexData[14]=m,this.vertexData[15]=y;let g=this.vertexPool.getBuffer(this.device,this.vertexData),P=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h),b=e.getBindGroup(this.device,this.textureLayout,i,n);t.setPipeline(this.pipeline),t.setBindGroup(0,P),t.setBindGroup(1,b),t.setVertexBuffer(0,g),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};x();x();var Q=`
|
|
318
|
-
struct GradientUniforms {
|
|
319
|
-
info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count
|
|
320
|
-
geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)
|
|
321
|
-
offsets : array<vec4<f32>, 2>,
|
|
322
|
-
stops : array<vec4<f32>, 8>, // OKLab + alpha
|
|
323
|
-
};
|
|
324
|
-
|
|
325
|
-
fn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {
|
|
326
|
-
let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);
|
|
327
|
-
let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);
|
|
328
|
-
let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);
|
|
329
|
-
let lin = clamp(vec3<f32>(
|
|
330
|
-
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
331
|
-
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
332
|
-
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
|
|
333
|
-
), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
334
|
-
let lo = lin * 12.92;
|
|
335
|
-
let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;
|
|
336
|
-
return select(hi, lo, lin <= vec3<f32>(0.0031308));
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/// Position along the gradient (0..1, unclamped for linear/radial) at local point p.
|
|
340
|
-
fn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {
|
|
341
|
-
let d = p - g.geom.xy;
|
|
342
|
-
let kind = g.info.x;
|
|
343
|
-
if (kind < 1.5) {
|
|
344
|
-
return dot(d, g.geom.zw) + 0.5;
|
|
345
|
-
}
|
|
346
|
-
if (kind < 2.5) {
|
|
347
|
-
return length(d / max(g.geom.zw, vec2<f32>(1e-4)));
|
|
348
|
-
}
|
|
349
|
-
let a = atan2(d.x, -d.y) - g.geom.z;
|
|
350
|
-
return fract(a / 6.28318530718);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/// Straight sRGB color + alpha of the gradient at local point p.
|
|
354
|
-
fn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {
|
|
355
|
-
var offs = g.offsets;
|
|
356
|
-
var stops = g.stops;
|
|
357
|
-
let n = i32(g.info.y);
|
|
358
|
-
let t = gradientT(g, p);
|
|
359
|
-
var lab = stops[0];
|
|
360
|
-
if (t > offs[0].x) {
|
|
361
|
-
lab = stops[n - 1];
|
|
362
|
-
for (var i = 1; i < 8; i++) {
|
|
363
|
-
if (i >= n) {
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
let b = offs[i / 4][i % 4];
|
|
367
|
-
if (t <= b) {
|
|
368
|
-
let a = offs[(i - 1) / 4][(i - 1) % 4];
|
|
369
|
-
let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);
|
|
370
|
-
lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));
|
|
371
|
-
break;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);
|
|
376
|
-
}
|
|
377
|
-
`;x();var Ot=`
|
|
378
|
-
${Q}
|
|
379
|
-
|
|
380
|
-
struct Uniforms {
|
|
381
|
-
transformCol0 : vec4<f32>,
|
|
382
|
-
transformCol1 : vec4<f32>,
|
|
383
|
-
transformCol2 : vec4<f32>,
|
|
384
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused
|
|
385
|
-
color : vec4<f32>, // solid color (gradient.info.x = 0)
|
|
386
|
-
gradient : GradientUniforms,
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
390
|
-
|
|
391
|
-
struct VSOut {
|
|
392
|
-
@builtin(position) pos : vec4<f32>,
|
|
393
|
-
@location(0) localPos : vec2<f32>,
|
|
394
|
-
};
|
|
395
|
-
|
|
396
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
397
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
398
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
399
|
-
|
|
400
|
-
let surfaceSize = u.params.yz;
|
|
401
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
402
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
403
|
-
|
|
404
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
408
|
-
var outColor = u.color;
|
|
409
|
-
if (u.gradient.info.x > 0.5) {
|
|
410
|
-
outColor = evalGradient(u.gradient, in.localPos);
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
let alpha = outColor.a * u.params.x;
|
|
414
|
-
if (alpha <= 0.0) {
|
|
415
|
-
discard;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
return vec4<f32>(outColor.rgb * alpha, alpha);
|
|
419
|
-
}
|
|
420
|
-
`;x();var Yt={linear:1,radial:2,conic:3};function Y(l){return typeof l=="string"&&l.includes("gradient(")?yt(l):null}function X(l,t,e,r){if(e.fill(0,r,r+48),!l)return;let i=xt(l.stops),n=Math.max(t.width,.001),s=Math.max(t.height,.001),a=t.x+l.center[0]*n,o=t.y+l.center[1]*s;if(e[r]=Yt[l.type],e[r+1]=i.length,e[r+4]=l.type==="linear"?t.x+n/2:a,e[r+5]=l.type==="linear"?t.y+s/2:o,l.type==="linear"){let c=l.angle*Math.PI/180,u=Math.sin(c),p=-Math.cos(c),h=Math.abs(n*u)+Math.abs(s*p);e[r+6]=u/h,e[r+7]=p/h}else if(l.type==="radial"){let c,u;l.radius?[c,u]=l.radius:[c,u]=Xt(l,a-t.x,t.x+n-a,o-t.y,t.y+s-o),e[r+6]=c,e[r+7]=u}else e[r+6]=l.from*Math.PI/180;i.forEach((c,u)=>{e[r+8+u]=c.offset}),$(i).forEach((c,u)=>{e.set(c,r+16+u*4)})}function Xt(l,t,e,r,i){let n=l.extent??"farthest-corner",s=n.startsWith("farthest"),a=s?Math.max(t,e):Math.min(t,e),o=s?Math.max(r,i):Math.min(r,i),c=l.shape==="circle";if(n.endsWith("side")){if(!c)return[a,o];let u=s?Math.max(a,o):Math.min(a,o);return[u,u]}if(c){let u=Math.hypot(a,o);return[u,u]}return[a*Math.SQRT2,o*Math.SQRT2]}var K=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(68);constructor(t,e){this.device=t,this.uniformPool=new G(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"shape-fill.wgsl",code:Ot});this.uniformLayout=D(t),this.pipeline=T(t,{label:"ShapeFillPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-list"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,n,s,a,o){if(r.length<6||i.type==="none")return;let c=o?.opacity??1;e.packIntoBuffer(this.uniformData,c,s,a,o?.transform),this.uniformData[15]=0;let u=Y(i.color);if(u)this.uniformData.fill(0,16,20),X(u,n,this.uniformData,20);else{let f=B(i.color??"#ffffff");this.uniformData[16]=f.r,this.uniformData[17]=f.g,this.uniformData[18]=f.b,this.uniformData[19]=f.a,this.packTwoColorGradient(i,n,f)}let p=this.uniformPool.getBuffer(this.device,this.uniformData),h=this.vertexPool.getBuffer(this.device,r);t.setPipeline(this.pipeline),t.setBindGroup(0,this.device.createBindGroup({layout:this.uniformLayout,entries:[{binding:0,resource:{buffer:p}}]})),t.setVertexBuffer(0,h),t.draw(r.length/2)}packTwoColorGradient(t,e,r){if(this.uniformData.fill(0,20,68),t.type!=="linear"&&t.type!=="radial")return;let n=B(t.color2??t.color??"#ffffff"),s=this.uniformData;if(t.type==="linear"){let o=t.startX??e.x,c=t.startY??e.y,u=t.endX??e.x+e.width,p=t.endY??e.y+e.height,h=u-o,f=p-c,d=Math.max(h*h+f*f,1e-6);s.set([1,2,0,0,(o+u)/2,(c+p)/2,h/d,f/d],20)}else{let o=t.radius??Math.max(e.width,e.height)/2;s.set([2,2,0,0,t.cx??e.x+e.width/2,t.cy??e.y+e.height/2,o,o],20)}s[28]=0,s[29]=1;let a=$([{offset:0,color:[r.r,r.g,r.b,r.a]},{offset:1,color:[n.r,n.g,n.b,n.a]}]);s.set(a[0],36),s.set(a[1],40)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};x();x();var $t=`
|
|
421
|
-
${Q}
|
|
422
|
-
|
|
423
|
-
struct Uniforms {
|
|
424
|
-
transformCol0 : vec4<f32>,
|
|
425
|
-
transformCol1 : vec4<f32>,
|
|
426
|
-
transformCol2 : vec4<f32>,
|
|
427
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
|
|
428
|
-
color : vec4<f32>,
|
|
429
|
-
rect : vec4<f32>, // x, y, width, height
|
|
430
|
-
gradient : GradientUniforms, // info.x = 0: solid \`color\`
|
|
431
|
-
};
|
|
432
|
-
|
|
433
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
434
|
-
|
|
435
|
-
struct VSOut {
|
|
436
|
-
@builtin(position) pos : vec4<f32>,
|
|
437
|
-
@location(0) localPos : vec2<f32>,
|
|
438
|
-
};
|
|
439
|
-
|
|
440
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
441
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
442
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
443
|
-
|
|
444
|
-
let surfaceSize = u.params.yz;
|
|
445
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
446
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
447
|
-
|
|
448
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
|
|
452
|
-
let q = abs(p) - b + r;
|
|
453
|
-
return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
457
|
-
let center = u.rect.xy + u.rect.zw * 0.5;
|
|
458
|
-
let halfSize = u.rect.zw * 0.5;
|
|
459
|
-
let radius = u.params.w;
|
|
460
|
-
|
|
461
|
-
let d = sdRoundedRect(in.localPos - center, halfSize, radius);
|
|
462
|
-
// Rounded shapes: one device pixel of coverage centred on the edge (the
|
|
463
|
-
// quad has room for its outer half). Square ones keep their exact edge.
|
|
464
|
-
let fw = max(fwidth(d), 1e-4);
|
|
465
|
-
var edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
|
|
466
|
-
if (radius > 0.0) {
|
|
467
|
-
edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
468
|
-
}
|
|
469
|
-
var fill = u.color;
|
|
470
|
-
if (u.gradient.info.x > 0.5) {
|
|
471
|
-
fill = evalGradient(u.gradient, in.localPos);
|
|
472
|
-
}
|
|
473
|
-
let alpha = fill.a * u.params.x * edgeAlpha;
|
|
474
|
-
if (alpha <= 0.0) {
|
|
475
|
-
discard;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
return vec4<f32>(fill.rgb * alpha, alpha);
|
|
479
|
-
}
|
|
480
|
-
`;var Z=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new U;uniformData=new Float32Array(72);vertexData=new Float32Array(8);constructor(t,e){this.device=t,this.uniformPool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"solid.wgsl",code:$t});this.uniformLayout=D(t),this.pipeline=T(t,{label:"SolidPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,n,s,a=0,o){let c=Y(i),u=c?{r:0,g:0,b:0,a:1}:B(i),p=o?.opacity??1;e.packIntoBuffer(this.uniformData,p,n,s,o?.transform),this.uniformData[15]=a,this.uniformData[16]=u.r,this.uniformData[17]=u.g,this.uniformData[18]=u.b,this.uniformData[19]=u.a,this.uniformData[20]=r.x,this.uniformData[21]=r.y,this.uniformData[22]=r.width,this.uniformData[23]=r.height,X(c,r,this.uniformData,24);let h=this.uniformPool.getBuffer(this.device,this.uniformData),f=0;if(a>0){let v=o?.transform?e.getCurrent().multiply(o.transform):e.getCurrent(),S=Math.min(Math.hypot(v.a,v.b),Math.hypot(v.c,v.d));f=2/Math.max(S,.001)}let d=r.x-f,m=r.y-f,y=r.x+r.width+f,g=r.y+r.height+f;this.vertexData[0]=d,this.vertexData[1]=m,this.vertexData[2]=y,this.vertexData[3]=m,this.vertexData[4]=d,this.vertexData[5]=g,this.vertexData[6]=y,this.vertexData[7]=g;let P=this.vertexPool.getBuffer(this.device,this.vertexData);t.setPipeline(this.pipeline);let b=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h);t.setBindGroup(0,b),t.setVertexBuffer(0,P),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};x();var J=class{stack=[new DOMMatrix];push(t){let r=this.stack[this.stack.length-1].multiply(t);this.stack.push(r)}pop(){this.stack.length>1&&this.stack.pop()}getCurrent(){return this.stack[this.stack.length-1]}packIntoBuffer(t,e,r,i,n,s){let a=this.getCurrent();n&&(a=a.multiply(n)),t[0]=a.a,t[1]=a.b,t[2]=0,t[3]=0,t[4]=a.c,t[5]=a.d,t[6]=0,t[7]=0,t[8]=a.e,t[9]=a.f,t[10]=1,t[11]=0,t[12]=e,t[13]=r,t[14]=i,t[15]=s??0}destroy(){this.stack=[new DOMMatrix]}};function Kt(l){if(Array.isArray(l)){let r=l[3]??1;return[l[0]*r,l[1]*r,l[2]*r,r]}if("r"in l){let r=l.a??1;return{r:l.r*r,g:l.g*r,b:l.b*r,a:r}}let t=Array.from(l),e=t[3]??1;return[t[0]*e,t[1]*e,t[2]*e,e]}var At=new WeakMap;function br(l,t){let e=At.get(l);return(!e||e.format!==t||e.isDestroyed)&&(e=new pt(l,t),At.set(l,e)),e.resetPools(),e}var pt=class{device;transformStack=new J;clipStack=new W;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new V;samplerCache=new Mt;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(t,e){this.device=t,this.format=e,this.quadPipeline=new q(t,e),this.solidPipeline=new Z(t,e),this.shapeFillPipeline=new K(t,e),this.pathPipeline=new j(t,e),this.effectPipeline=new E(t,e),this.slugPipeline=new wt(t,e)}beginFrame(t,e,r={r:0,g:0,b:0,a:0},i,n,s="clear"){this.surfaceWidth=i,this.surfaceHeight=n,t!==this.lastEncoder&&(this.lastEncoder=t,this.resetPools());let a=t.beginRenderPass({colorAttachments:[{view:e,clearValue:Kt(r),loadOp:s,storeOp:"store"}]});return this.clipStack.applyScissorToPass(a,i,n),a}endFrame(t){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),st.flushRetired(this.device),st.prune(this.device)}drawTexture(t,e,r,i){let n=this.samplerCache.getSampler(this.device),s={x:0,y:0,width:e.width,height:e.height};this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,n,s,r,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(t,e,r,i,n){let s=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,s,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawRect(t,e,r,i=0,n){let s=0,a=n;typeof i=="object"&&i!==null?(a=i,s=0):typeof i=="number"&&(s=i),this.rasterDrawCount++,this.solidPipeline.draw(t,this.transformStack,e,r,this.surfaceWidth,this.surfaceHeight,s,a)}drawPath(t,e,r,i,n){this.rasterDrawCount++,this.pathPipeline.drawPath(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawShapeFill(t,e,r,i,n){this.rasterDrawCount++,this.shapeFillPipeline.draw(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawShape(t,e,r,i,n){let s={x:0,y:0,width:e.width,height:e.height};if(r&&r.type!=="none"){let a=_t(e);if(a.length>0&&(this.drawShapeFill(t,a,r,s,n),(!i||!i.width||i.width<=0)&&(r.type??"solid")==="solid"&&r.color)){let o=ut(e);o&&this.drawPath(t,o,r.color,1,{...n,strokeLineCap:"round"})}}if(i&&i.width&&i.width>0&&i.color){let a=ut(e);a&&this.drawPath(t,a,i.color,i.width,{...n,strokeLineCap:i.cap,trimStart:i.trimStart,trimEnd:i.trimEnd,trimOffset:i.trimOffset,strokeDashArray:i.dashArray,strokeDashOffset:i.dashOffset})}}drawRRect(t,e,r,i){this.drawRect(t,e.rect,r,e.rx,i)}getTemporaryTexture(t,e,r){return this.effectPipeline.getTexture(this.device,t,e,this.format,r)}getTemporaryBuffer(t){return this.effectPipeline.getBuffer(this.device,t)}composite(t,e,r,i,n){return this.effectPipeline.composite(t,this.bindGroupCache,this.samplerCache,e,r,i,this.format,n)}applyMotionBlur(t,e,r,i,n=180,s=16,a){return this.effectPipeline.applyMotionBlur(t,this.bindGroupCache,this.samplerCache,e,r,i,n,s,this.format,a)}getCurrentTransform(){return this.transformStack.getCurrent()}getTransformStack(){return this.transformStack}getSurfaceWidth(){return this.surfaceWidth}getSurfaceHeight(){return this.surfaceHeight}pushIdentity(){let t=this.transformStack.getCurrent();this.pushTransform(t.inverse())}pushTransform(t){this.transformStack.push(t)}popTransform(){this.transformStack.pop()}pushScissor(t){this.clipStack.pushScissor(t,this.surfaceWidth,this.surfaceHeight)}pushScissorIntersect(t){let e=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(!e){this.pushScissor(t);return}let r=Math.max(t.x,e.x),i=Math.max(t.y,e.y),n=Math.min(t.x+t.width,e.x+e.width),s=Math.min(t.y+t.height,e.y+e.height);this.pushScissor({x:r,y:i,width:Math.max(0,n-r),height:Math.max(0,s-i)})}pushScissorLocal(t){let e=this.transformStack.getCurrent(),r=[e.transformPoint(new DOMPoint(t.x,t.y)),e.transformPoint(new DOMPoint(t.x+t.width,t.y)),e.transformPoint(new DOMPoint(t.x,t.y+t.height)),e.transformPoint(new DOMPoint(t.x+t.width,t.y+t.height))],i=r.map(p=>p.x),n=r.map(p=>p.y),s=Math.min(...i),a=Math.min(...n),o=Math.max(...i)-s,c=Math.max(...n)-a,u=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(u){let p=Math.max(s,u.x),h=Math.max(a,u.y),f=Math.min(s+o,u.x+u.width),d=Math.min(a+c,u.y+u.height);s=p,a=h,o=Math.max(0,f-p),c=Math.max(0,d-h)}this.clipStack.pushScissor({x:s,y:a,width:o,height:c},this.surfaceWidth,this.surfaceHeight)}popScissor(){this.clipStack.popScissor()}suspendScissors(){let t=this.clipStack.saveScissors();return this.clipStack.clearScissors(),t}resumeScissors(t){this.clipStack.restoreScissors(t)}pushStencilClip(t){this.clipStack.pushStencilClip(t)}popStencilClip(){this.clipStack.popStencilClip()}destroy(){this.isDestroyed=!0,this.transformStack.destroy(),this.clipStack.destroy(),this.bindGroupCache.destroy(),this.samplerCache.destroy(),this.quadPipeline.destroy(),this.solidPipeline.destroy(),this.shapeFillPipeline.destroy(),this.pathPipeline.destroy(),this.effectPipeline.destroy(),this.slugPipeline.destroy(),this.lastEncoder=null}};x();async function It(l,t){if(typeof window<"u"&&typeof FontFace<"u"){let e=typeof t=="string"?t:"its registered bytes";try{let i=await new FontFace(l,typeof t=="string"?`url(${t})`:t).load();document.fonts.add(i),await document.fonts.ready}catch(r){console.warn(`[preloadFont] Failed to load font "${l}" from ${e}:`,r)}}else typeof t=="string"&&await vt(l,t)}x();var Et=!1;async function Fr(l,t,e=(r,i)=>console.warn(`[framefields] ${i}`,r)){let r=new Set,i=new Map;(function s(a){let o=a.operation;if(o){let c=o.op==="text"||o.kind==="text"||o.op==="caption"||o.kind==="caption"||typeof o.text=="string",u=o.fontFamily||(c?"Inter":"");if(u&&r.add(u),c&&typeof o.text=="string"){let p=o.fontSize??48;for(let h of St(o.text))i.set(`${h}-${p}`,p)}}for(let c of a.children??[])s(c)})(l);let n=[];for(let s of r){let a=Ut(s),o=kt(s),c=typeof a=="string"?a:"its registered bytes";n.push(It(s,a).catch(u=>e(u,`font "${s}" from ${c}`))),t&&n.push(O.preloadSlugFont(t,s,o).catch(u=>e(u,`Slug font "${s}" from ${o}`)))}if(t&&i.size>0){!O.hasEmojiFont()&&!Et&&(Et=!0,console.warn("[framefields] Text uses emoji but no emoji font is registered, so exports draw nothing for them. Run `npx framefields fonts add emoji` and call the generated `registerFonts()`, or register a color emoji font (e.g. Noto Color Emoji) with FontManager.registerEmojiFont(path). `comp.lint()` names the layers (missing_emoji_font)."));for(let[s,a]of i){let o=s.slice(0,s.lastIndexOf("-"));n.push(O.preloadEmoji(t,o,a).catch(c=>{O.hasEmojiFont()&&e(c,`emoji "${o}"`)}))}}await Promise.all(n)}export{ee as a,E as b,z as c,ut as d,br as e,pt as f,It as g,Fr as h};
|