framefields 2.13.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -4
- package/dist/audio/index.d.mts +3 -3
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-CHV33Od9.d.mts → audio-C4B9p_yq.d.mts} +2 -2
- package/dist/{audio-CHV33Od9.d.mts.map → audio-C4B9p_yq.d.mts.map} +1 -1
- package/dist/{audio-DHzLQ_RG.mjs → audio-DIvi6hTD.mjs} +3 -3
- package/dist/{audio-DHzLQ_RG.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +43 -43
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/components/index.d.mts +7 -7
- package/dist/components/index.mjs +42 -42
- package/dist/{dist-CUNvNDS3.mjs → dist-CCrYOkcc.mjs} +18 -4
- package/dist/dist-CCrYOkcc.mjs.map +1 -0
- package/dist/{dist-D3BeAZ7X.mjs → dist-DtPPPsZV.mjs} +314 -137
- package/dist/dist-DtPPPsZV.mjs.map +1 -0
- package/dist/effects/index.d.mts +3 -3
- package/dist/effects/index.mjs +34 -34
- package/dist/{effects-BiDgCK1L.mjs → effects-B-L3rLs6.mjs} +2 -2
- package/dist/{effects-BiDgCK1L.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DeDPWdvJ.mjs → fonts-k5ll8NTE.mjs} +2 -2
- package/dist/{fonts-DeDPWdvJ.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
- package/dist/{gpu-CWjgql4C.mjs → gpu-D2HT3KcE.mjs} +2 -2
- package/dist/{gpu-CWjgql4C.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
- package/dist/{index-D68eGFNE.d.mts → index-B08eSpaI.d.mts} +2 -2
- package/dist/{index-D68eGFNE.d.mts.map → index-B08eSpaI.d.mts.map} +1 -1
- package/dist/index-BFTtXosj.d.mts.map +1 -1
- package/dist/{index-YB9j9KUx.d.mts → index-BGlaws7-.d.mts} +2 -2
- package/dist/{index-YB9j9KUx.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
- package/dist/{index-Dibc_xpC.d.mts → index-ByhlTwxh.d.mts} +3 -3
- package/dist/{index-Dibc_xpC.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
- package/dist/{index-X2u96TEo.d.mts → index-C2yaponf.d.mts} +2 -3
- package/dist/index-C2yaponf.d.mts.map +1 -0
- package/dist/{index-E2IXX0Cz.d.mts → index-CtKUQ2VG.d.mts} +4 -4
- package/dist/{index-E2IXX0Cz.d.mts.map → index-CtKUQ2VG.d.mts.map} +1 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +49 -49
- package/dist/preview/index.d.mts +1 -1
- package/dist/preview/index.mjs +10 -10
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-IEEV5RB3.mjs → chunk-3C2XT64C.mjs} +1 -1
- package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
- package/dist/preview-engine/{chunk-77WWW75O.mjs → chunk-5ZS46EFB.mjs} +1 -1
- package/dist/preview-engine/{chunk-4P3MMJWD.mjs → chunk-FZ4RD7HV.mjs} +1 -1
- package/dist/preview-engine/{chunk-UFPA36D2.mjs → chunk-N3XTDAL6.mjs} +18 -18
- package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
- package/dist/preview-engine/{chunk-SMHEMYCV.mjs → chunk-UBY2UYEL.mjs} +1 -1
- package/dist/preview-engine/{chunk-XYCR3STG.mjs → chunk-XCPRRMMW.mjs} +31 -31
- 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-ZMMQ7S2A.mjs +228 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{preview-PDz7o2xg.mjs → preview-lHH8Tv4j.mjs} +3 -3
- package/dist/{preview-PDz7o2xg.mjs.map → preview-lHH8Tv4j.mjs.map} +1 -1
- package/dist/{program-Bn6ko_I4.mjs → program-BfiB9ttP.mjs} +15 -2
- package/dist/program-BfiB9ttP.mjs.map +1 -0
- package/dist/renderer/index.d.mts +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer-0rLmztAv.mjs +5 -0
- package/dist/{renderer-BjgFpwVK.mjs → renderer-4nsuReW2.mjs} +3 -3
- package/dist/{renderer-BjgFpwVK.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
- package/dist/{renderer-DJPZs_zV.mjs → renderer-7xQmXXMH.mjs} +3 -3
- package/dist/{renderer-DJPZs_zV.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
- package/dist/renderer-B0pjOXFY.mjs +5 -0
- package/dist/{renderer-C_1eqfI0.mjs → renderer-B10HDC13.mjs} +3 -3
- package/dist/{renderer-C_1eqfI0.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
- package/dist/{renderer-DRal7Goa.mjs → renderer-B2IUPjhw.mjs} +3 -3
- package/dist/{renderer-DRal7Goa.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
- package/dist/{renderer-Br8km655.mjs → renderer-B3_GddgJ.mjs} +2 -2
- package/dist/{renderer-Br8km655.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
- package/dist/{renderer-DOZPZTxe.mjs → renderer-B3un4Pdi.mjs} +3 -3
- package/dist/{renderer-DOZPZTxe.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
- package/dist/{renderer-Dp5ChuOs.mjs → renderer-B6bK9rXm.mjs} +2 -2
- package/dist/{renderer-Dp5ChuOs.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
- package/dist/renderer-B7J13reL.mjs +5 -0
- package/dist/{renderer-Nnu32rqg.mjs → renderer-BEhZiOT4.mjs} +2 -2
- package/dist/{renderer-Nnu32rqg.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
- package/dist/{renderer-C7m7Yxgc.mjs → renderer-BEuXJY-C.mjs} +3 -3
- package/dist/{renderer-C7m7Yxgc.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
- package/dist/{renderer-D-fzEZfX.mjs → renderer-BGchUBW_.mjs} +2 -2
- package/dist/{renderer-D-fzEZfX.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
- package/dist/{renderer--Q0pM9Vh.mjs → renderer-BIKkxw_Z.mjs} +3 -3
- package/dist/{renderer--Q0pM9Vh.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
- package/dist/{renderer-Dz6P-rPI.mjs → renderer-BM19iK8v.mjs} +2 -2
- package/dist/{renderer-Dz6P-rPI.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
- package/dist/{renderer-CE4535aW.mjs → renderer-BOlHW3Mi.mjs} +2 -2
- package/dist/{renderer-CE4535aW.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
- package/dist/renderer-BPGIKGgl.mjs +5 -0
- package/dist/{renderer-C9dqx3U7.mjs → renderer-BTwuM9u-.mjs} +3 -3
- package/dist/{renderer-C9dqx3U7.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
- package/dist/{renderer-BqUAyzCZ.mjs → renderer-BZMh2io2.mjs} +2 -2
- package/dist/{renderer-BqUAyzCZ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
- package/dist/{renderer-BZgJj8Cl.mjs → renderer-BZX932Lj.mjs} +2 -2
- package/dist/{renderer-BZgJj8Cl.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
- package/dist/{renderer-BgjPbgbn.mjs → renderer-BhcTYhaP.mjs} +3 -3
- package/dist/{renderer-BgjPbgbn.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
- package/dist/{renderer-CyUiXLRa.mjs → renderer-BmyFfvVA.mjs} +3 -3
- package/dist/{renderer-CyUiXLRa.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
- package/dist/{renderer-opVuiAQR.mjs → renderer-BrEeUw7T.mjs} +2 -2
- package/dist/{renderer-opVuiAQR.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
- package/dist/{renderer-CMnlgAGs.mjs → renderer-BsrKj6Td.mjs} +2 -2
- package/dist/{renderer-CMnlgAGs.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
- package/dist/renderer-Bv-Artj1.mjs +5 -0
- package/dist/{renderer-BO_wuUKA.mjs → renderer-BvBqTAtk.mjs} +3 -3
- package/dist/{renderer-BO_wuUKA.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
- package/dist/renderer-BvLjbhcL.mjs +5 -0
- package/dist/{renderer-D8gN7aqk.mjs → renderer-Bw-_GZVw.mjs} +3 -3
- package/dist/{renderer-D8gN7aqk.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
- package/dist/{renderer-LXhEPCmy.mjs → renderer-Bw0O--gW.mjs} +3 -3
- package/dist/{renderer-LXhEPCmy.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
- package/dist/renderer-By6awWaf.mjs +5 -0
- package/dist/renderer-C0rvsz7m.mjs +5 -0
- package/dist/{renderer-SJyp9-62.mjs → renderer-C4hd6Cqi.mjs} +2 -2
- package/dist/{renderer-SJyp9-62.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
- package/dist/{renderer-CnL8Cmmr.mjs → renderer-C64_B8It.mjs} +2 -2
- package/dist/{renderer-FPiLBwj5.mjs → renderer-C98XwEIr.mjs} +2 -2
- package/dist/{renderer-FPiLBwj5.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
- package/dist/{renderer-CL-vyXgX.mjs → renderer-CC22Djgi.mjs} +3 -3
- package/dist/{renderer-CL-vyXgX.mjs.map → renderer-CC22Djgi.mjs.map} +1 -1
- package/dist/renderer-CDgud_HB.mjs +5 -0
- package/dist/renderer-CDiRF3bG.mjs +6 -0
- package/dist/{renderer-CwlY8Tb-.mjs → renderer-CHCRcCKw.mjs} +2 -2
- package/dist/{renderer-CwlY8Tb-.mjs.map → renderer-CHCRcCKw.mjs.map} +1 -1
- package/dist/renderer-CIIEQd4B.mjs +5 -0
- package/dist/renderer-CJblwOA9.mjs +5 -0
- package/dist/renderer-CNMOXtXE.mjs +5 -0
- package/dist/{renderer-S9tVGneU.mjs → renderer-CO4NGvAh.mjs} +69 -69
- package/dist/{renderer-S9tVGneU.mjs.map → renderer-CO4NGvAh.mjs.map} +1 -1
- package/dist/{renderer-CxSFvKd1.mjs → renderer-CO9vE3sd.mjs} +2 -2
- package/dist/{renderer-CxSFvKd1.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
- package/dist/renderer-COeSeNGg.mjs +5 -0
- package/dist/{renderer-NBMmvqWl.mjs → renderer-CQ4h8n7p.mjs} +3 -3
- package/dist/{renderer-NBMmvqWl.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
- package/dist/{renderer-BsMZ5Iaq.mjs → renderer-CRhEGqW4.mjs} +3 -3
- package/dist/{renderer-BsMZ5Iaq.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
- package/dist/{renderer-RzkU_O1i.mjs → renderer-CSu_vYPn.mjs} +3 -3
- package/dist/{renderer-RzkU_O1i.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
- package/dist/{renderer-BCTUqJG7.mjs → renderer-CU6WT5jW.mjs} +3 -3
- package/dist/{renderer-BCTUqJG7.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
- package/dist/renderer-CUfElmtZ.mjs +5 -0
- package/dist/{renderer-Cp_HOmp7.mjs → renderer-CXrnzihz.mjs} +3 -3
- package/dist/{renderer-Cp_HOmp7.mjs.map → renderer-CXrnzihz.mjs.map} +1 -1
- package/dist/renderer-CYh2lFoJ.mjs +5 -0
- package/dist/renderer-CYtVZYMH.mjs +5 -0
- package/dist/{renderer-C-GTxnfv.mjs → renderer-CdXBRdFf.mjs} +2 -2
- package/dist/{renderer-C-GTxnfv.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
- package/dist/{renderer-puQhVfDS.mjs → renderer-Cfx_FCSf.mjs} +3 -3
- package/dist/{renderer-puQhVfDS.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
- package/dist/renderer-CjxZlkjb.mjs +5 -0
- package/dist/{renderer-DGb_wgTW.mjs → renderer-CkTehyRX.mjs} +3 -3
- package/dist/{renderer-DGb_wgTW.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
- package/dist/{renderer-CgK7Q1G8.mjs → renderer-CldjJmRR.mjs} +2 -2
- package/dist/{renderer-BlZgyBSo.mjs → renderer-CoC64eam.mjs} +3 -3
- package/dist/{renderer-BlZgyBSo.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
- package/dist/renderer-Cpd6TvTC.mjs +5 -0
- package/dist/{renderer-BPOh9x5X.mjs → renderer-Cv9CKKWG.mjs} +2 -2
- package/dist/{renderer-BPOh9x5X.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
- package/dist/{renderer-Cu3iKMSJ.mjs → renderer-D-mX1EVA.mjs} +3 -3
- package/dist/{renderer-Cu3iKMSJ.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
- package/dist/{renderer-BMpmmYOq.mjs → renderer-D0h1hTOo.mjs} +2 -2
- package/dist/{renderer-BMpmmYOq.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
- package/dist/{renderer-DpZballM.mjs → renderer-D0xM67cK.mjs} +2 -2
- package/dist/{renderer-DpZballM.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
- package/dist/renderer-D3ziOPhX.mjs +5 -0
- package/dist/{renderer-549d94qG.mjs → renderer-DCrKEVjb.mjs} +3 -3
- package/dist/{renderer-549d94qG.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
- package/dist/renderer-DL-phtL5.mjs +5 -0
- package/dist/{renderer-CQFMyC_c.mjs → renderer-DNynPM6X.mjs} +2 -2
- package/dist/{renderer-CQFMyC_c.mjs.map → renderer-DNynPM6X.mjs.map} +1 -1
- package/dist/renderer-DSnmYnHg.mjs +5 -0
- package/dist/renderer-DUGfsT-E.mjs +5 -0
- package/dist/renderer-DW5af9x1.mjs +5 -0
- package/dist/{renderer-B-LUGB9h.mjs → renderer-DWYmJSrl.mjs} +2 -2
- package/dist/{renderer-B-LUGB9h.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
- package/dist/renderer-DYMrol1t.mjs +5 -0
- package/dist/{renderer-CciiDHuU.mjs → renderer-DYeNNc_G.mjs} +3 -3
- package/dist/{renderer-CciiDHuU.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
- package/dist/{renderer-CYwVNbUh.mjs → renderer-DYlx7VHo.mjs} +2 -2
- package/dist/{renderer-CYwVNbUh.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
- package/dist/{renderer-CZ5mwBW1.mjs → renderer-D_m6Qbsi.mjs} +2 -2
- package/dist/{renderer-CZ5mwBW1.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
- package/dist/renderer-DekeUHaz.mjs +5 -0
- package/dist/{renderer-BKi6jDi_.mjs → renderer-DhGZ41hQ.mjs} +3 -3
- package/dist/{renderer-BKi6jDi_.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
- package/dist/{renderer-KgsVk9c6.mjs → renderer-DiZkZ0Pr.mjs} +3 -3
- package/dist/{renderer-KgsVk9c6.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
- package/dist/{renderer-BtgqTg2K.mjs → renderer-Dm57W73p.mjs} +2 -2
- package/dist/renderer-Dt5uyJdZ.mjs +5 -0
- package/dist/{renderer-g9SstkTz.mjs → renderer-DtFZbE1j.mjs} +2 -2
- package/dist/{renderer-C1ctHdXl.mjs → renderer-DvHi_wXE.mjs} +3 -3
- package/dist/{renderer-C1ctHdXl.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
- package/dist/{renderer-vll8LX0I.mjs → renderer-Dv_iRIyx.mjs} +17 -17
- package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
- package/dist/renderer-DwLQAnaK.mjs +5 -0
- package/dist/{renderer-DXFJv_e6.mjs → renderer-DzON3wDZ.mjs} +3 -3
- package/dist/{renderer-DXFJv_e6.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
- package/dist/{renderer-RAq3LnNy.mjs → renderer-GIlQ9lZq.mjs} +2 -2
- package/dist/{renderer-RAq3LnNy.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
- package/dist/{renderer-DwGlDNOV.mjs → renderer-HKv5cBdp.mjs} +2 -2
- package/dist/{renderer-DwGlDNOV.mjs.map → renderer-HKv5cBdp.mjs.map} +1 -1
- package/dist/renderer-IXQP2CWM.mjs +5 -0
- package/dist/renderer-K-Pkw63O.mjs +5 -0
- package/dist/renderer-MPw2KH9P.mjs +5 -0
- package/dist/{renderer-BUj7jE6t.mjs → renderer-QbSrnPZU.mjs} +3 -3
- package/dist/{renderer-BUj7jE6t.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
- package/dist/renderer-RPu8RMav.mjs +5 -0
- package/dist/{renderer-dRXP2dJU.mjs → renderer-TfeohPxt.mjs} +3 -3
- package/dist/{renderer-dRXP2dJU.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
- package/dist/{renderer-CuPAQjDK.mjs → renderer-Y1kjtOto.mjs} +3 -3
- package/dist/{renderer-CuPAQjDK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
- package/dist/{renderer-BIieU9pY.mjs → renderer-YONlI6W-.mjs} +3 -3
- package/dist/{renderer-BIieU9pY.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
- package/dist/{renderer-45ifiDkn.mjs → renderer-_J9JcCMR.mjs} +3 -3
- package/dist/{renderer-45ifiDkn.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
- package/dist/renderer-dCqxd5N2.mjs +5 -0
- package/dist/{renderer-aRk849b3.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
- package/dist/{renderer-aRk849b3.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
- package/dist/renderer-lhjmE-Fp.mjs +5 -0
- package/dist/{renderer-_54hiCq0.mjs → renderer-mDBoz0zT.mjs} +3 -3
- package/dist/{renderer-_54hiCq0.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
- package/dist/{renderer-BHPgkoEL.mjs → renderer-pn52dzZz.mjs} +2 -2
- package/dist/{renderer-BHPgkoEL.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
- package/dist/renderer-u9cmBuvM.mjs +5 -0
- package/dist/{renderer-BPiWsrC2.mjs → renderer-uER8kn7f.mjs} +2 -2
- package/dist/{renderer-BPiWsrC2.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
- package/dist/{renderer-B5b-ehRb.mjs → renderer-uzU6dsdR.mjs} +2 -2
- package/dist/{renderer-B5b-ehRb.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
- package/dist/renderer-vH12jcpz.mjs +5 -0
- package/dist/{renderer-DxB_OfLs.mjs → renderer-yNWYqvvq.mjs} +2 -2
- package/dist/{renderer-DxB_OfLs.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
- package/dist/{renderer-dGEMVaZ3.mjs → renderer-zLi2qFGT.mjs} +2 -2
- package/dist/{renderer-dGEMVaZ3.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
- package/dist/signals/index.d.mts +4 -4
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-BzFGotRc.mjs → src-DrP7fGJX.mjs} +37 -12
- package/dist/{src-BzFGotRc.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
- package/package.json +60 -60
- package/dist/dist-CUNvNDS3.mjs.map +0 -1
- package/dist/dist-D3BeAZ7X.mjs.map +0 -1
- package/dist/index-X2u96TEo.d.mts.map +0 -1
- package/dist/preview-engine/chunk-7M5LE6EM.mjs +0 -483
- package/dist/preview-engine/chunk-FRJPXWAG.mjs +0 -1
- package/dist/preview-engine/renderers-TTXTV4PC.mjs +0 -228
- package/dist/program-Bn6ko_I4.mjs.map +0 -1
- package/dist/renderer-1aSF5BmY.mjs +0 -5
- package/dist/renderer-B2e4Gr9u.mjs +0 -5
- package/dist/renderer-B6fz4j50.mjs +0 -5
- package/dist/renderer-BEftIYw-.mjs +0 -5
- package/dist/renderer-BHTnO-7e.mjs +0 -5
- package/dist/renderer-BMlnQqTO.mjs +0 -5
- package/dist/renderer-BOzcFezY.mjs +0 -5
- package/dist/renderer-BVbjJIKJ.mjs +0 -5
- package/dist/renderer-BXsHKf4k.mjs +0 -5
- package/dist/renderer-Bks49NVl.mjs +0 -5
- package/dist/renderer-C-t7qFKr.mjs +0 -5
- package/dist/renderer-C24n-6CX.mjs +0 -6
- package/dist/renderer-CCReX-7M.mjs +0 -5
- package/dist/renderer-CIxFQrAm.mjs +0 -5
- package/dist/renderer-CLHBMIqJ.mjs +0 -5
- package/dist/renderer-CMJKi-Ye.mjs +0 -5
- package/dist/renderer-C_H3mHZa.mjs +0 -5
- package/dist/renderer-CfkTdR5B.mjs +0 -5
- package/dist/renderer-CnhkXJ0R.mjs +0 -5
- package/dist/renderer-CqpyVsq_.mjs +0 -5
- package/dist/renderer-CtWgIpTE.mjs +0 -5
- package/dist/renderer-CyuKr5ca.mjs +0 -5
- package/dist/renderer-D9ON_1Hf.mjs +0 -5
- package/dist/renderer-DAnTgh4o.mjs +0 -5
- package/dist/renderer-DWgpivA3.mjs +0 -5
- package/dist/renderer-Dh_qNNwR.mjs +0 -5
- package/dist/renderer-DkCpXPMP.mjs +0 -5
- package/dist/renderer-Dre-6cDR.mjs +0 -5
- package/dist/renderer-Ds5z4_HX.mjs +0 -5
- package/dist/renderer-HGSCOMyP.mjs +0 -5
- package/dist/renderer-KMY8W-cJ.mjs +0 -5
- package/dist/renderer-R21YvXz3.mjs +0 -5
- package/dist/renderer-RtzCz37W.mjs +0 -5
- package/dist/renderer-iMrqAjix.mjs +0 -5
- package/dist/renderer-sMed1u1O.mjs +0 -5
- package/dist/renderer-tsAuo46l.mjs +0 -5
- package/dist/renderer-vll8LX0I.mjs.map +0 -1
|
@@ -1,483 +0,0 @@
|
|
|
1
|
-
import{a as et,b as rt,c as yt}from"./chunk-JAAFSVAG.mjs";import{c as mt,d as pt,e as A}from"./chunk-CSLSWUUT.mjs";import{b as tt}from"./chunk-FRJPXWAG.mjs";import{e as ft}from"./chunk-GXFYRMJZ.mjs";import{B as gt,c as dt,e as xt,y as U,z as C}from"./chunk-64L4GUOF.mjs";import{a as D}from"./chunk-354GX6IB.mjs";import{g as b}from"./chunk-Y4NIR77Z.mjs";b();function Nt(s,t=180,e=12,r=1,i=0){if(s<=0)return 0;let a=Math.sqrt(Math.max(1e-4,t)/Math.max(1e-4,r)),o=e/(2*Math.sqrt(Math.max(1e-4,t*r)));if(o<1){let l=a*Math.sqrt(1-o*o),n=Math.exp(-o*a*s),u=-1,c=(i-o*a*-1)/Math.max(1e-6,l),m=n*(u*Math.cos(l*s)+c*Math.sin(l*s));return Math.min(2,Math.max(-1,1+m))}else if(Math.abs(o-1)<1e-4){let l=Math.exp(-a*s);return 1+(-1+(i-a)*s)*l}else{let l=-a*(o-Math.sqrt(o*o-1)),n=-a*(o+Math.sqrt(o*o-1)),u=(i+n)/Math.max(1e-6,l-n),c=-1-u;return 1+(u*Math.exp(l*s)+c*Math.exp(n*s))}}function jt(s,t=0){if(s===0)return[1,0,0,1];let e=s*Math.PI/180,r=t*Math.PI/180,i=Math.cos(r),a=Math.sin(r),o=Math.tan(e),l=1-o*i*a,n=o*i*i,u=-o*a*a,c=1+o*a*i;return[l,n,u,c]}function Ht(s,t){let e=t.anchorX,r=t.anchorY;switch(t.preset){case"center":e=.5,r=.5;break;case"baseline":e=.5,r=s.height>0?s.ascender/s.height:.8;break;case"bottom_left":e=0,r=1;break;case"bottom_center":e=.5,r=1;break;case"bottom_right":e=1,r=1;break;case"top_left":e=0,r=0;break;case"top_center":e=.5,r=0;break;case"top_right":e=1,r=0;break;default:e=.5,r=.5;break}let i=(e-.5)*s.width+t.offsetX,a=(r-.5)*s.height+t.offsetY;return{px:i,py:a}}function Yt(s,t,e,r=0){if(e===0||t<=1)return 0;let i=r*(t-1);return(s-i)*e}function Xt(s,t){try{let e={textIndex:t.charIndex,textTotal:Math.max(1,t.totalChars),wordIndex:t.wordIndex,wordTotal:Math.max(1,t.totalWords),lineIndex:t.lineIndex,lineTotal:Math.max(1,t.totalLines),time:t.time,frame:t.frame,fps:t.fps,sin:Math.sin,cos:Math.cos,tan:Math.tan,exp:Math.exp,log:Math.log,abs:Math.abs,min:Math.min,max:Math.max,sqrt:Math.sqrt,pow:Math.pow,floor:Math.floor,ceil:Math.ceil,round:Math.round,PI:Math.PI,clamp:(l,n,u)=>Math.max(n,Math.min(u,l)),noise:l=>{let n=Math.sin(l*12.9898+t.frame*.1)*43758.5453;return(n-Math.floor(n))*2-1},signals:t.signals??{}},r=Object.keys(e),i=Object.values(e),a=new Function(...r,`return (${s});`),o=Number(a(...i));return Number.isFinite(o)?Math.max(-1,Math.min(1,o)):0}catch{return 0}}function Qt(s,t,e){let r=Math.max(1,t),i=r>1?s/(r-1):0,a=e.totalAngle*Math.PI/180,o=i*a,l=0,n=0,u=0,c=0,m=0,h=0,d=1;switch(e.mode){case"cylinder":{let y=e.totalAngle<360?(i-.5)*a:o;e.axis==="y"?(l=e.radius*Math.sin(y),u=e.radius*Math.cos(y)-e.radius,m=y*180/Math.PI):e.axis==="x"?(n=e.radius*Math.sin(y),u=e.radius*Math.cos(y)-e.radius,c=y*180/Math.PI):(l=e.radius*Math.sin(y),n=e.radius*Math.cos(y),h=y*180/Math.PI);let g=Math.cos(y);d=Math.max(.25,(g+1)*.5);break}case"vortex":{let g=-Math.PI/2+o,P=e.radius*(1-i*.35);l=P*Math.cos(g),n=P*Math.sin(g),u=-s*e.pitch||0;let v=-.35*e.radius/(a||1),M=v*Math.cos(g)-P*Math.sin(g),G=v*Math.sin(g)+P*Math.cos(g);h=Math.atan2(G,M)*180/Math.PI,d=Math.max(.65,1-i*.35);break}case"helix":{if(e.axis==="x"){let y=e.pitch>10?e.pitch:28;l=(s-(r-1)/2)*y,n=e.radius*Math.sin(o),u=e.radius*Math.cos(o)-e.radius,c=Math.sin(o)*22,d=.75+.25*((Math.cos(o)+1)*.5)}else{let y=(i-.5)*a;l=e.radius*Math.sin(y),n=(s-(r-1)/2)*e.pitch,u=e.radius*Math.cos(y)-e.radius,m=y*180/Math.PI;let g=Math.cos(y);d=Math.max(.65,(g+1)*.5)}break}default:{u=0;break}}let p=Math.max(100,e.perspective??1200),f=p-u,x=f>1?p/f:1;return{x:l*x,y:n*x,z:u,rotX:c,rotY:m,rotZ:h,scaleMult:Math.max(.1,x),depthOpacity:d}}function Kt(s,t,e,r,i){let o=(t>0?Math.max(t,e):e)+r.repeatGap;if(o<=0)return s;let l=r.velocity*i;if(r.snap?.enabled){let n=r.snap.stopIndex??0,u=r.snap.granularity==="character"?40:120,c=n*u,m=Math.min(1,i*1.5);l=l*(1-m)+c*m}if((r.direction==="right"||r.direction==="down")&&(l=-l),r.loop){let n=(s-l)%o;return n<-e?n+o:n}return s-l}function Zt(s,t,e,r,i,a){let o=Math.max(1,t),l=o>1?s/(o-1):.5,n=Math.max(20,e.minFreqHz),u=Math.max(n+100,e.maxFreqHz),c=n*(u/n)**l,m=0,h=ft.getChannelSamples(e.signalChannel,"primary");if(h&&h.length>0){let p=a>0?a:24,f=Math.max(0,Math.min(h.length-1,Math.round(i/p*24)));m=Number(h[f])||0}else if(r){let p=r[e.signalChannel];if(typeof p=="number")m=p;else if(typeof p=="function")m=Number(p(i,a,c))||0;else if(typeof p=="object"&&p!==null){let f=p;if(typeof f.get=="function")m=Number(f.get({frame:i,fps:a,freq:c}))||0;else if(Array.isArray(f.samples)||ArrayBuffer.isView(f.samples)){let x=f.samples,y=Math.floor(l*(x.length-1));m=Number(x[y])||0}}}let d=Math.max(0,Math.min(1,m));return e.minScale+d*(e.maxScale-e.minScale)}b();function ee(s,t,e,r,i,a=0,o=0){let l=t+r,n=e+r;if(n<=l)return 0;let u=(s-l)/(n-l),c=0;switch(i){case"square":c=u>=0&&u<=1?1:0;break;case"ramp_up":c=Math.max(0,Math.min(1,u));break;case"ramp_down":c=1-Math.max(0,Math.min(1,u));break;case"triangle":{u<0||u>1?c=0:u<.5?c=u*2:c=(1-u)*2;break}case"round":{u<0||u>1?c=0:c=.5-.5*Math.cos(u*2*Math.PI);break}case"smooth":{u<=0?c=0:u>=1?c=1:c=u*u*(3-2*u);break}}if(c>0&&c<1){if(a!==0&&c>.5){let m=(c-.5)*2,h=a>0?1+a*3:1/(1-a*3);c=.5+.5*m**h}if(o!==0&&c<=.5){let m=c*2,h=o>0?1+o*3:1/(1-o*3);c=.5*m**h}}return Math.max(0,Math.min(1,c))}function re(s,t,e,r){let i=(t*(1-r)+r)*12.9898+e+s*78.233,a=Math.sin(i)*43758.5453;return(a-Math.floor(a))*2-1}function ie(s,t){let e=t,r=()=>(e=(e*9301+49297)%233280,e/233280),i=Array.from({length:s},(a,o)=>o);for(let a=i.length-1;a>0;a--){let o=Math.floor(r()*(a+1)),l=i[a];i[a]=i[o],i[o]=l}return i}function ne(s,t,e){switch(e){case"add":return Math.max(0,Math.min(1,s+t));case"subtract":return Math.max(0,Math.min(1,s-t));case"intersect":return s*t;case"min":return Math.min(s,t);case"max":return Math.max(s,t);case"difference":return Math.abs(s-t)}}b();var Pt={ascii:"!@#$%^&*()_+{}[]:;<>,.?",alphanumeric:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",matrix:"010101<>[]{}+=*~#%&!?/\\:;|X0123456789",binary:"01",hex:"0123456789ABCDEF"};function kt(s,t){return s==="custom"&&t&&t.length>0?t:Pt[s]??Pt.alphanumeric}function se(s,t,e,r,i={mode:"human",jitter:.35,commaPauseMultiplier:3,sentencePauseMultiplier:5.5,paragraphPauseMultiplier:7},a={enabled:!1,charset:"alphanumeric",scrambleFramesPerChar:8,highlightProbability:.25},o=2,l="character",n){if(n===void 0&&t<e)return{visibleChars:0,currentDisplayString:"",isCursorVisible:!1};let u=n!==void 0?Math.max(0,Math.min(1,n)):Math.min(1,(t-e)/Math.max(1,r)),c=n!==void 0?u*r:t-e,m=s.length,h=Math.floor(u*m);if(l==="word"){let f=s.split(/(\s+)/),x=[];f.forEach((g,P)=>{g.trim().length>0&&x.push(P)});let y=Math.min(x.length,Math.floor(u*(x.length+1)));if(y<=0)h=0;else{let g=x[Math.min(x.length-1,y-1)];h=f.slice(0,g+1).join("").length}}else if(l==="line"){let f=s.split(`
|
|
2
|
-
`),x=Math.min(f.length,Math.floor(u*(f.length+1)));h=f.slice(0,x).join(`
|
|
3
|
-
`).length}else if(i.mode==="human"&&u<1){let f=0,x=0,y=r/Math.max(1,m);for(let g=0;g<m;g++){let P=s[g],v=1,M=i.commaPauseMultiplier??3,G=i.sentencePauseMultiplier??5.5,B=i.paragraphPauseMultiplier??7,R=i.jitter??.35;P===","||P===";"?v=M:P==="."||P==="!"||P==="?"?v=G:P===`
|
|
4
|
-
`&&(v=B);let L=1+Math.sin(g*17.3+42)*.5*R,w=y*v*L;if(x+=w,x<=c)f=g+1;else break}h=Math.min(m,f)}let d=s.slice(0,h);if(a.enabled&&h<m&&h>0){let f=kt(a.charset,a.customCharset),x=Math.min(h,Math.max(1,a.scrambleFramesPerChar>4?3:2)),y="";for(let g=0;g<x;g++){let P=Math.floor(Math.abs(Math.sin(t*7+g*13))*f.length)%f.length;y+=f[P]}d=d.slice(0,d.length-x)+y}let p=!0;if(o>0){let f=Math.max(1,Math.round(30/(2*o)));p=Math.floor(c/f)%2===0}return{visibleChars:h,currentDisplayString:d,isCursorVisible:p}}b();b();var bt=`
|
|
5
|
-
struct CompositeUniforms {
|
|
6
|
-
blendMode : u32,
|
|
7
|
-
padding1 : u32,
|
|
8
|
-
padding2 : u32,
|
|
9
|
-
padding3 : u32,
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
@group(0) @binding(0) var<uniform> u : CompositeUniforms;
|
|
13
|
-
@group(1) @binding(0) var baseTex : texture_2d<f32>;
|
|
14
|
-
@group(1) @binding(1) var overlayTex : texture_2d<f32>;
|
|
15
|
-
@group(1) @binding(2) var samp : sampler;
|
|
16
|
-
|
|
17
|
-
struct VSOut {
|
|
18
|
-
@builtin(position) pos : vec4<f32>,
|
|
19
|
-
@location(0) uv : vec2<f32>,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
23
|
-
var pos = array<vec2<f32>, 4>(
|
|
24
|
-
vec2<f32>(-1.0, 1.0),
|
|
25
|
-
vec2<f32>(1.0, 1.0),
|
|
26
|
-
vec2<f32>(-1.0, -1.0),
|
|
27
|
-
vec2<f32>(1.0, -1.0)
|
|
28
|
-
);
|
|
29
|
-
var uv = array<vec2<f32>, 4>(
|
|
30
|
-
vec2<f32>(0.0, 0.0),
|
|
31
|
-
vec2<f32>(1.0, 0.0),
|
|
32
|
-
vec2<f32>(0.0, 1.0),
|
|
33
|
-
vec2<f32>(1.0, 1.0)
|
|
34
|
-
);
|
|
35
|
-
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
fn lum(c: vec3<f32>) -> f32 {
|
|
39
|
-
return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
fn clip_color(c: vec3<f32>) -> vec3<f32> {
|
|
43
|
-
let l = lum(c);
|
|
44
|
-
let n = min(min(c.r, c.g), c.b);
|
|
45
|
-
let x = max(max(c.r, c.g), c.b);
|
|
46
|
-
var res = c;
|
|
47
|
-
if (n < 0.0) {
|
|
48
|
-
res = l + (((res - l) * l) / (l - n));
|
|
49
|
-
}
|
|
50
|
-
if (x > 1.0) {
|
|
51
|
-
res = l + (((res - l) * (1.0 - l)) / (x - l));
|
|
52
|
-
}
|
|
53
|
-
return res;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
fn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
57
|
-
let diff = l - lum(c);
|
|
58
|
-
return clip_color(c + vec3<f32>(diff));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
fn sat(c: vec3<f32>) -> f32 {
|
|
62
|
-
return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
fn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {
|
|
66
|
-
let c_min = min(min(c.r, c.g), c.b);
|
|
67
|
-
let c_max = max(max(c.r, c.g), c.b);
|
|
68
|
-
if (c_max <= c_min) {
|
|
69
|
-
return vec3<f32>(0.0);
|
|
70
|
-
}
|
|
71
|
-
return (c - vec3<f32>(c_min)) * s / (c_max - c_min);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
75
|
-
let d = textureSample(baseTex, samp, in.uv);
|
|
76
|
-
let s = textureSample(overlayTex, samp, in.uv);
|
|
77
|
-
let sa = s.a;
|
|
78
|
-
let da = d.a;
|
|
79
|
-
|
|
80
|
-
switch (u.blendMode) {
|
|
81
|
-
case 16u: { return d * sa; } // mask-in / destination-in
|
|
82
|
-
case 17u: { return d * (1.0 - sa); } // mask-out / destination-out
|
|
83
|
-
case 18u: { return s * da; } // source-in
|
|
84
|
-
case 19u: { return s * (1.0 - da); } // source-out
|
|
85
|
-
case 20u: { return s * da + d * (1.0 - sa); } // source-atop
|
|
86
|
-
case 21u: { return d + s * (1.0 - da); } // destination-over
|
|
87
|
-
case 22u: { return d * sa + s * (1.0 - da); } // destination-atop
|
|
88
|
-
case 23u: { return s + d; } // lighter
|
|
89
|
-
case 24u: { return s; } // copy
|
|
90
|
-
case 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor
|
|
91
|
-
// Luma mattes: the overlay's brightness (premultiplied, so transparent = black) masks the base.
|
|
92
|
-
case 26u: { return d * clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0); } // luma-in
|
|
93
|
-
case 27u: { return d * (1.0 - clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0)); } // luma-out
|
|
94
|
-
default: {
|
|
95
|
-
if (sa <= 0.0) { return d; }
|
|
96
|
-
if (da <= 0.0) { return s; }
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
let s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);
|
|
101
|
-
let d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);
|
|
102
|
-
|
|
103
|
-
var b_rgb = s_rgb;
|
|
104
|
-
|
|
105
|
-
switch (u.blendMode) {
|
|
106
|
-
case 1u: { b_rgb = s_rgb * d_rgb; } // multiply
|
|
107
|
-
case 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen
|
|
108
|
-
case 3u: { // overlay
|
|
109
|
-
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));
|
|
110
|
-
}
|
|
111
|
-
case 4u: { b_rgb = min(s_rgb, d_rgb); } // darken
|
|
112
|
-
case 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten
|
|
113
|
-
case 6u: { // color-dodge
|
|
114
|
-
b_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));
|
|
115
|
-
}
|
|
116
|
-
case 7u: { // color-burn
|
|
117
|
-
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));
|
|
118
|
-
}
|
|
119
|
-
case 8u: { // hard-light
|
|
120
|
-
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));
|
|
121
|
-
}
|
|
122
|
-
case 9u: { // soft-light
|
|
123
|
-
b_rgb = select(
|
|
124
|
-
d_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),
|
|
125
|
-
d_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),
|
|
126
|
-
s_rgb <= vec3<f32>(0.5)
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
case 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference
|
|
130
|
-
case 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion
|
|
131
|
-
case 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue
|
|
132
|
-
case 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation
|
|
133
|
-
case 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color
|
|
134
|
-
case 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity
|
|
135
|
-
case 16u: { return d * s.a; } // mask-in
|
|
136
|
-
case 17u: { return d * (1.0 - s.a); } // mask-out
|
|
137
|
-
default: { b_rgb = s_rgb; } // normal
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
let out_a = sa + da * (1.0 - sa);
|
|
141
|
-
let out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;
|
|
142
|
-
|
|
143
|
-
return vec4<f32>(out_rgb, out_a);
|
|
144
|
-
}
|
|
145
|
-
`;var _t=`
|
|
146
|
-
struct MotionBlur2DUniforms {
|
|
147
|
-
vel: vec2<f32>,
|
|
148
|
-
_pad: vec2<f32>,
|
|
149
|
-
shutterFraction: f32,
|
|
150
|
-
samples: f32,
|
|
151
|
-
viewportWidth: f32,
|
|
152
|
-
viewportHeight: f32,
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
@group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;
|
|
156
|
-
@group(1) @binding(0) var sourceTexture: texture_2d<f32>;
|
|
157
|
-
@group(1) @binding(1) var colorSampler: sampler;
|
|
158
|
-
|
|
159
|
-
@vertex
|
|
160
|
-
fn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
|
|
161
|
-
var pos = array<vec2<f32>, 3>(
|
|
162
|
-
vec2<f32>(-1.0, -3.0),
|
|
163
|
-
vec2<f32>( 3.0, 1.0),
|
|
164
|
-
vec2<f32>(-1.0, 1.0)
|
|
165
|
-
);
|
|
166
|
-
return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
@fragment
|
|
170
|
-
fn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
171
|
-
let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);
|
|
172
|
-
let sampleCount = u32(max(u.samples, 1.0));
|
|
173
|
-
let velUV = u.vel * u.shutterFraction;
|
|
174
|
-
let halfSamples = f32(sampleCount) * 0.5;
|
|
175
|
-
|
|
176
|
-
var accum = vec4<f32>(0.0);
|
|
177
|
-
var totalWeight = 0.0;
|
|
178
|
-
|
|
179
|
-
for (var i = 0u; i < sampleCount; i = i + 1u) {
|
|
180
|
-
let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);
|
|
181
|
-
let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
182
|
-
let w = exp(-2.5 * t * t);
|
|
183
|
-
accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;
|
|
184
|
-
totalWeight += w;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return accum / max(totalWeight, 0.0001);
|
|
188
|
-
}
|
|
189
|
-
`,it=class{textures=[];texturesByKey=new Map;index=0;getTexture(t,e,r,i,a){let o=new Set(Array.isArray(a)?a:a?[a]:[]),l=`${e}x${r}:${i}`,n=this.texturesByKey.get(l);if(n)for(let c=0;c<n.length;c++){let m=n[c];if(!o.has(m)){n.splice(c,1),n.unshift(m);let h=this.textures.indexOf(m);return h>=this.index&&(this.textures.splice(h,1),this.textures.splice(this.index,0,m),this.index++),m}}let u=t.createTexture({size:[e,r],format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});return this.texturesByKey.has(l)||this.texturesByKey.set(l,[]),this.texturesByKey.get(l).unshift(u),this.textures.splice(this.index,0,u),this.index++,u}reset(){this.index=0}destroy(){for(let t of this.textures)t.destroy();this.textures=[],this.texturesByKey.clear(),this.index=0}},Rt={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 C;motionBlurUniformBindGroupCache=new C;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(t,e){this.device=t,this.compositePool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new it,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 a=t.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),o=t.createShaderModule({label:"motion-blur-2d.wgsl",code:_t});this.motionBlurPipeline=t.createRenderPipeline({label:"MotionBlurPipeline",layout:a,vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(t,e,r,i,a){return this.texturePool.getTexture(t,e,r,i,a)}getBuffer(t,e){return this.compositePool.getBuffer(t,e)}composite(t,e,r,i,a,o,l,n){let u=r.getSampler(this.device),c=[i,a];n&&(Array.isArray(n)?c.push(...n):c.push(n));let m=this.texturePool.getTexture(this.device,i.width,i.height,l,c);this.compositeData[0]=Rt[o]??0;let h=this.compositePool.getBuffer(this.device,this.compositeData),d=t.beginRenderPass({colorAttachments:[{view:m.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});d.setPipeline(this.compositePipeline);let p=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,h);d.setBindGroup(0,p);let f=e.getCompositeBindGroup(this.device,this.dualTextureLayout,i,a,u);return d.setBindGroup(1,f),d.draw(4),d.end(),m}applyMotionBlur(t,e,r,i,a,o,l=180,n=16,u,c){if(Math.abs(a)<.1&&Math.abs(o)<.1||l<=0)return i;let m=r.getSampler(this.device),h=[i];c&&(Array.isArray(c)?h.push(...c):h.push(c));let d=this.texturePool.getTexture(this.device,i.width,i.height,u,h);this.motionBlurData[0]=a/i.width,this.motionBlurData[1]=o/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=l/360,this.motionBlurData[5]=n,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let p=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),f=t.beginRenderPass({colorAttachments:[{view:d.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});f.setPipeline(this.motionBlurPipeline);let x=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,p);return f.setBindGroup(0,x),f.setBindGroup(1,e.getBindGroup(this.device,this.singleTextureLayout,i,m)),f.draw(3),f.end(),d}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};b();b();var I=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(t,e,r,i){let a=this.cache.get(r);a||(a=new Map,this.cache.set(r,a));let o=a.get(e);return o||(o=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i}]}),a.set(e,o)),o}getCompositeBindGroup(t,e,r,i,a){let o=this.dualCache.get(r);o||(o=new WeakMap,this.dualCache.set(r,o));let l=o.get(i);l||(l=new Map,o.set(i,l));let n=l.get(e);return n||(n=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i.createView()},{binding:2,resource:a}]}),l.set(e,n)),n}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};b();var V=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 a=Math.max(0,Math.floor(i.x)),o=Math.max(0,Math.floor(i.y)),l=Math.min(e,Math.ceil(i.x+i.width)),n=Math.min(r,Math.ceil(i.y+i.height)),u=Math.max(0,l-a),c=Math.max(0,n-o);if(!Number.isFinite(a)||!Number.isFinite(o)||!Number.isFinite(u)||!Number.isFinite(c)||u<=0||c<=0)t.setScissorRect(0,0,1,1);else{let m=Math.min(u,Math.max(0,e-a)),h=Math.min(c,Math.max(0,r-o));m<=0||h<=0?t.setScissorRect(0,0,1,1):t.setScissorRect(Math.floor(a),Math.floor(o),Math.floor(m),Math.floor(h))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};b();function vt(s,t,e,r,i=24){let a=[],o=s;for(let l=1;l<=i;l++){let n=l/i,u=1-n,c=u*u,m=c*u,h=n*n,d=h*n,p={x:m*s.x+3*c*n*t.x+3*u*h*e.x+d*r.x,y:m*s.y+3*c*n*t.y+3*u*h*e.y+d*r.y};a.push({p0:o,p1:p}),o=p}return a}function Mt(s,t,e,r=16){let i=[],a=s;for(let o=1;o<=r;o++){let l=o/r,n=1-l,u=n*n,c=l*l,m={x:u*s.x+2*n*l*t.x+c*e.x,y:u*s.y+2*n*l*t.y+c*e.y};i.push({p0:a,p1:m}),a=m}return i}function Lt(s,t,e,r,i,a,o){let l=Math.abs(t),n=Math.abs(e);if(l<1e-9||n<1e-9)return[{p0:s,p1:o}];if(Math.hypot(o.x-s.x,o.y-s.y)<1e-9)return[];let u=r*Math.PI/180,c=Math.cos(u),m=Math.sin(u),h=(s.x-o.x)/2,d=(s.y-o.y)/2,p=c*h+m*d,f=-m*h+c*d,x=p*p/(l*l)+f*f/(n*n);x>1&&(l*=Math.sqrt(x),n*=Math.sqrt(x));let y=l*l*n*n-l*l*f*f-n*n*p*p,g=l*l*f*f+n*n*p*p,P=(i===a?-1:1)*Math.sqrt(Math.max(0,y/g)),v=P*l*f/n,M=-P*n*p/l,G=c*v-m*M+(s.x+o.x)/2,B=m*v+c*M+(s.y+o.y)/2,R=(k,F,O,$)=>Math.atan2(k*$-F*O,k*O+F*$),L=R(1,0,(p-v)/l,(f-M)/n),w=R((p-v)/l,(f-M)/n,(-p-v)/l,(-f-M)/n);!a&&w>0&&(w-=2*Math.PI),a&&w<0&&(w+=2*Math.PI);let J=Math.max(4,Math.ceil(Math.abs(w)/(2*Math.PI)*64)),ut=[],ct=s;for(let k=1;k<=J;k++){let F=L+w*k/J,O=l*Math.cos(F),$=n*Math.sin(F),ht=k===J?o:{x:c*O-m*$+G,y:m*O+c*$+B};ut.push({p0:ct,p1:ht}),ct=ht}return ut}function z(s){let t=[];if(!s||typeof s!="string")return t;let e=[],r=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,i;for(;(i=r.exec(s))!==null;)i[1]?e.push(i[1]):i[2]&&e.push(parseFloat(i[2]));let a=0,o={x:0,y:0},l={x:0,y:0},n=null,u=null;for(;a<e.length;){let c=e[a++];if(typeof c!="string")continue;let m=c,h=m===m.toLowerCase(),d=m.toUpperCase(),p=()=>a<e.length&&typeof e[a]=="number"?e[a++]:0;switch(d){case"M":{let f=!0;for(;a<e.length&&typeof e[a]=="number";){let x=p(),y=p();h&&(x+=o.x,y+=o.y),f?(o={x,y},l={x,y},f=!1):(t.push({p0:o,p1:{x,y}}),o={x,y})}n=null,u=null;break}case"L":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p();h&&(f+=o.x,x+=o.y),t.push({p0:o,p1:{x:f,y:x}}),o={x:f,y:x}}n=null,u=null;break}case"H":{for(;a<e.length&&typeof e[a]=="number";){let f=p();h&&(f+=o.x);let x={x:f,y:o.y};t.push({p0:o,p1:x}),o=x}n=null,u=null;break}case"V":{for(;a<e.length&&typeof e[a]=="number";){let f=p();h&&(f+=o.y);let x={x:o.x,y:f};t.push({p0:o,p1:x}),o=x}n=null,u=null;break}case"C":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p(),P=p(),v=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y,P+=o.x,v+=o.y);let M={x:f,y:x},G={x:y,y:g},B={x:P,y:v};t.push(...vt(o,M,G,B)),o=B,n=G}u=null;break}case"S":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y);let P;n?P={x:2*o.x-n.x,y:2*o.y-n.y}:P={x:o.x,y:o.y};let v={x:f,y:x},M={x:y,y:g};t.push(...vt(o,P,v,M)),o=M,n=v}u=null;break}case"Q":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y);let P={x:f,y:x},v={x:y,y:g};t.push(...Mt(o,P,v)),o=v,u=P}n=null;break}case"T":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p();h&&(f+=o.x,x+=o.y);let y;u?y={x:2*o.x-u.x,y:2*o.y-u.y}:y={x:o.x,y:o.y};let g={x:f,y:x};t.push(...Mt(o,y,g)),o=g,u=y}n=null;break}case"A":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p()!==0,P=p()!==0,v=p(),M=p();h&&(v+=o.x,M+=o.y);let G={x:v,y:M};t.push(...Lt(o,f,x,y,g,P,G)),o=G}n=null,u=null;break}case"Z":{Math.hypot(o.x-l.x,o.y-l.y)>1e-5&&t.push({p0:o,p1:l}),o=l,n=null,u=null;break}default:break}}return t}function W(s,t,e,r=0){if(s.length===0)return[];let i=[],a=0;for(let c of s){let m=Math.hypot(c.p1.x-c.p0.x,c.p1.y-c.p0.y);i.push(m),a+=m}if(a<1e-6)return[];let o=Math.abs(r)>1?r%360/360:r,l=(t+o)%1,n=(e+o)%1;l<0&&(l+=1),n<0&&(n+=1);let u=(c,m)=>{if(c>=m)return[];let h=[],d=0;for(let p=0;p<s.length;p++){let f=s[p],x=i[p],y=d,g=d+x;if(d=g,g<=c||y>=m||x<1e-6)continue;let P=Math.max(0,(c-y)/x),v=Math.min(1,(m-y)/x);if(v>P){let M={x:f.p0.x+(f.p1.x-f.p0.x)*P,y:f.p0.y+(f.p1.y-f.p0.y)*P},G={x:f.p0.x+(f.p1.x-f.p0.x)*v,y:f.p0.y+(f.p1.y-f.p0.y)*v};h.push({p0:M,p1:G})}}return h};if(t===0&&e===1&&r===0)return[...s];if(Math.abs(l-n)<1e-5)return[];if(l<=n)return u(l*a,n*a);{let c=u(l*a,a),m=u(0,n*a);return[...c,...m]}}function nt(s,t,e=0){if(s.length===0||t.length===0)return s;let r=0;for(let d of t)r+=d;if(r<1e-5)return s;let i=0,a=[];for(let d of s){let p=Math.hypot(d.p1.x-d.p0.x,d.p1.y-d.p0.y);a.push(p),i+=p}let o=[],l=(e%r+r)%r,n=0,u=!0,c=l;for(;c>t[n];)c-=t[n],n=(n+1)%t.length,u=!u;let m=t[n]-c,h=0;for(;h<i;){let d=Math.min(m,i-h);if(u&&d>1e-4){let p=W(s,h/i,(h+d)/i);o.push(...p)}h+=d,n=(n+1)%t.length,u=!u,m=t[n]}return o}function Gt(s,t,e=0,r=0,i=0,a=0){let o=Math.min(s/2,t/2),l=Math.min(e,o),n=Math.min(r,o),u=Math.min(i,o),c=Math.min(a,o);return l===0&&n===0&&u===0&&c===0?`M 0 0 L ${s} 0 L ${s} ${t} L 0 ${t} Z`:[`M ${l} 0`,`L ${s-n} 0`,n>0?`Q ${s} 0 ${s} ${n}`:`L ${s} 0`,`L ${s} ${t-u}`,u>0?`Q ${s} ${t} ${s-u} ${t}`:`L ${s} ${t}`,`L ${c} ${t}`,c>0?`Q 0 ${t} 0 ${t-c}`:`L 0 ${t}`,`L 0 ${l}`,l>0?`Q 0 0 ${l} 0`:"L 0 0","Z"].join(" ")}function Ft(s,t){let e=Math.min(s,t)/2,r=s/2,i=t/2,a=e*.5522847498;return[`M ${r} ${i-e}`,`C ${r+a} ${i-e} ${r+e} ${i-a} ${r+e} ${i}`,`C ${r+e} ${i+a} ${r+a} ${i+e} ${r} ${i+e}`,`C ${r-a} ${i+e} ${r-e} ${i+a} ${r-e} ${i}`,`C ${r-e} ${i-a} ${r-a} ${i-e} ${r} ${i-e}`,"Z"].join(" ")}function Ot(s,t){let e=s/2,r=t/2,i=e,a=r,o=e*.5522847498,l=r*.5522847498;return[`M ${i} ${a-r}`,`C ${i+o} ${a-r} ${i+e} ${a-l} ${i+e} ${a}`,`C ${i+e} ${a+l} ${i+o} ${a+r} ${i} ${a+r}`,`C ${i-o} ${a+r} ${i-e} ${a+l} ${i-e} ${a}`,`C ${i-e} ${a-l} ${i-o} ${a-r} ${i} ${a-r}`,"Z"].join(" ")}function $t(s,t,e=5){let r=Math.max(3,e),i=Math.min(s,t)/2,a=s/2,o=t/2,l=[];for(let n=0;n<r;n++){let u=-Math.PI/2+n*2*Math.PI/r;l.push({x:a+i*Math.cos(u),y:o+i*Math.sin(u)})}return l.map((n,u)=>`${u===0?"M":"L"} ${n.x} ${n.y}`).join(" ")+" Z"}function At(s,t,e=5,r=.5){let i=Math.max(3,e),a=Math.min(s,t)/2,o=a*Math.max(.01,Math.min(.99,r)),l=s/2,n=t/2,u=[];for(let c=0;c<i*2;c++){let m=-Math.PI/2+c*Math.PI/i,h=c%2===0?a:o;u.push({x:l+h*Math.cos(m),y:n+h*Math.sin(m)})}return u.map((c,m)=>`${m===0?"M":"L"} ${c.x} ${c.y}`).join(" ")+" Z"}function Et(s,t,e=40,r=40,i=20){let a=Math.min(e,t),o=Math.min(r,s),l=Math.min(i,a),n=t/2;return[`M 0 ${n-l/2}`,`L ${s-o} ${n-l/2}`,`L ${s-o} ${n-a/2}`,`L ${s} ${n}`,`L ${s-o} ${n+a/2}`,`L ${s-o} ${n+l/2}`,`L 0 ${n+l/2}`,"Z"].join(" ")}function ot(s){let{shapeType:t,width:e,height:r}=s;switch(t){case"rect":return Gt(e,r,s.cornerRadius??0,s.cornerRadius??0,s.cornerRadius??0,s.cornerRadius??0);case"circle":return Ft(e,r);case"ellipse":return Ot(e,r);case"polygon":return $t(e,r,s.polygonSides??5);case"star":return At(e,r,s.starPoints??5,s.starInnerRadiusRatio??.5);case"arrow":return Et(e,r,s.arrowHeadWidth??40,s.arrowHeadLength??40,s.arrowShaftWidth??20);case"path":return s.path??"";default:return""}}function St(s){if(s.length<3)return[];if(s.length===3)return[s[0],s[1],s[2]];let t=[...s],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 m=0;m<t.length;m++){let h=(m+1)%t.length;i+=t[m].x*t[h].y-t[h].x*t[m].y}i<0&&t.reverse();let a=(m,h,d,p)=>{let f=(d.x-h.x)*(m.y-h.y)-(d.y-h.y)*(m.x-h.x),x=(p.x-d.x)*(m.y-d.y)-(p.y-d.y)*(m.x-d.x),y=(h.x-p.x)*(m.y-p.y)-(h.y-p.y)*(m.x-p.x);return f>=-1e-6&&x>=-1e-6&&y>=-1e-6},o=(m,h,d,p)=>{if((h.x-m.x)*(d.y-m.y)-(h.y-m.y)*(d.x-m.x)<=1e-7)return!1;for(let x of p)if(!(x===m||x===h||x===d)&&a(x,m,h,d))return!1;return!0},l=[],n=[...t],u=0,c=n.length*n.length*2;for(;n.length>3&&u<c;){u++;let m=!1;for(let h=0;h<n.length;h++){let d=n[(h-1+n.length)%n.length],p=n[h],f=n[(h+1)%n.length];if(o(d,p,f,n)){l.push(d,p,f),n.splice(h,1),m=!0;break}}m||(l.push(n[0],n[1],n[2]),n.splice(1,1))}return n.length===3&&l.push(n[0],n[1],n[2]),l}function Ut(s){let{shapeType:t,width:e,height:r}=s;if(t==="rect"){let i=s.cornerRadius??0;if(i<=0)return new Float32Array([0,0,e,0,e,r,0,0,e,r,0,r]);let a=Gt(e,r,i,i,i,i),l=z(a).map(c=>c.p0),n=St(l),u=new Float32Array(n.length*2);for(let c=0;c<n.length;c++)u[c*2]=n[c].x,u[c*2+1]=n[c].y;return u}if(t==="circle"||t==="ellipse"){let i=e/2,a=r/2,o=t==="circle"?Math.min(e,r)/2:e/2,l=t==="circle"?o:r/2,n=48,u=new Float32Array(n*3*2),c=0;for(let m=0;m<n;m++){let h=m*2*Math.PI/n,d=(m+1)*2*Math.PI/n;u[c++]=i,u[c++]=a,u[c++]=i+o*Math.cos(h),u[c++]=a+l*Math.sin(h),u[c++]=i+o*Math.cos(d),u[c++]=a+l*Math.sin(d)}return u}if(t==="polygon"){let i=Math.max(3,s.polygonSides??5),a=Math.min(e,r)/2,o=e/2,l=r/2,n=new Float32Array(i*3*2),u=0;for(let c=0;c<i;c++){let m=-Math.PI/2+c*2*Math.PI/i,h=-Math.PI/2+(c+1)*2*Math.PI/i;n[u++]=o,n[u++]=l,n[u++]=o+a*Math.cos(m),n[u++]=l+a*Math.sin(m),n[u++]=o+a*Math.cos(h),n[u++]=l+a*Math.sin(h)}return n}if(t==="star"){let i=Math.max(3,s.starPoints??5),a=Math.min(e,r)/2,o=a*Math.max(.01,Math.min(.99,s.starInnerRadiusRatio??.5)),l=e/2,n=r/2,u=i*2,c=new Float32Array(u*3*2),m=0;for(let h=0;h<u;h++){let d=-Math.PI/2+h*Math.PI/i,p=-Math.PI/2+(h+1)*Math.PI/i,f=h%2===0?a:o,x=(h+1)%2===0?a:o;c[m++]=l,c[m++]=n,c[m++]=l+f*Math.cos(d),c[m++]=n+f*Math.sin(d),c[m++]=l+x*Math.cos(p),c[m++]=n+x*Math.sin(p)}return c}if(t==="arrow"){let i=Math.min(s.arrowHeadWidth??40,r),a=Math.min(s.arrowHeadLength??40,e),o=Math.min(s.arrowShaftWidth??20,i),l=r/2,n=0,u=e-a,c=e,m=l-o/2,h=l+o/2,d=l-i/2,p=l+i/2;return new Float32Array([n,m,u,m,u,h,n,m,u,h,n,h,u,d,c,l,u,p])}if(t==="path"&&s.path){let i=z(s.path);if(i.length===0)return new Float32Array(0);let a=i.map(n=>n.p0),o=St(a),l=new Float32Array(o.length*2);for(let n=0;n<o.length;n++)l[n*2]=o[n].x,l[n*2+1]=o[n].y;return l}return new Float32Array(0)}b();b();var wt=`
|
|
190
|
-
struct Uniforms {
|
|
191
|
-
transformCol0 : vec4<f32>,
|
|
192
|
-
transformCol1 : vec4<f32>,
|
|
193
|
-
transformCol2 : vec4<f32>,
|
|
194
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
|
|
195
|
-
color : vec4<f32>,
|
|
196
|
-
style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
|
|
197
|
-
p0 : vec2<f32>,
|
|
198
|
-
p1 : vec2<f32>,
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
202
|
-
|
|
203
|
-
struct VSOut {
|
|
204
|
-
@builtin(position) pos : vec4<f32>,
|
|
205
|
-
@location(0) localPos : vec2<f32>,
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
209
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
210
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
211
|
-
|
|
212
|
-
let surfaceSize = u.params.yz;
|
|
213
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
214
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
215
|
-
|
|
216
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
|
|
220
|
-
let ba = b - a;
|
|
221
|
-
let len = length(ba);
|
|
222
|
-
if (len < 1e-6) {
|
|
223
|
-
return length(p - a) - radius;
|
|
224
|
-
}
|
|
225
|
-
let dir = ba / len;
|
|
226
|
-
let normal = vec2<f32>(-dir.y, dir.x);
|
|
227
|
-
let pa = p - a;
|
|
228
|
-
|
|
229
|
-
let proj = dot(pa, dir);
|
|
230
|
-
let perp = abs(dot(pa, normal));
|
|
231
|
-
|
|
232
|
-
if (capType > 0.5 && capType < 1.5) {
|
|
233
|
-
// Butt cap: terminates strictly at endpoints a and b
|
|
234
|
-
let dx = max(-proj, proj - len);
|
|
235
|
-
let dy = perp - radius;
|
|
236
|
-
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
237
|
-
let inside = min(max(dx, dy), 0.0);
|
|
238
|
-
return outside + inside;
|
|
239
|
-
} else if (capType >= 1.5) {
|
|
240
|
-
// Square cap: extends past endpoints a and b by radius
|
|
241
|
-
let dx = max(-proj - radius, proj - (len + radius));
|
|
242
|
-
let dy = perp - radius;
|
|
243
|
-
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
244
|
-
let inside = min(max(dx, dy), 0.0);
|
|
245
|
-
return outside + inside;
|
|
246
|
-
} else {
|
|
247
|
-
// Round cap (default)
|
|
248
|
-
let h = clamp(proj / len, 0.0, 1.0);
|
|
249
|
-
return length(pa - ba * h) - radius;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
254
|
-
let radius = u.params.w * 0.5;
|
|
255
|
-
let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
|
|
256
|
-
|
|
257
|
-
let fw = max(fwidth(d), 1e-5);
|
|
258
|
-
let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
259
|
-
let alpha = u.color.a * u.params.x * edgeAlpha;
|
|
260
|
-
if (alpha <= 0.0) {
|
|
261
|
-
discard;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
return vec4<f32>(u.color.rgb * alpha, alpha);
|
|
265
|
-
}
|
|
266
|
-
`;b();var at={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function T(s){return s.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]})}function _(s,t){let{module:e}=t;return s.createRenderPipeline({label:t.label,layout:s.createPipelineLayout({bindGroupLayouts:[t.uniformLayout]}),vertex:{module:e,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:e,entryPoint:"fs",targets:[{format:t.format,blend:t.blend??at}]},primitive:{topology:t.topology}})}var q=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;scratchData=new Float32Array(28);constructor(t,e){this.device=t,this.uniformPool=new U(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"path.wgsl",code:wt});this.uniformLayout=T(t),this.pipeline=_(t,{label:"PathPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"}),this.maxPipeline=_(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,a,o,l,n){let u=z(r);if(u.length===0||((n?.trimStart!==void 0||n?.trimEnd!==void 0||n?.trimOffset!==void 0)&&(u=W(u,n.trimStart??0,n.trimEnd??1,n.trimOffset??0)),n?.strokeDashArray&&n.strokeDashArray.length>0&&(u=nt(u,n.strokeDashArray,n.strokeDashOffset??0)),u.length===0))return;let c=D(i),m=n?.opacity??1,h=0;n?.strokeLineCap==="butt"?h=1:n?.strokeLineCap==="square"&&(h=2);for(let d of u)this.drawSegment(t,e,d.p0,d.p1,c,a,h,o,l,m,n)}drawSegments(t,e,r,i,a,o,l,n){let u=r;if((n?.trimStart!==void 0||n?.trimEnd!==void 0||n?.trimOffset!==void 0)&&(u=W(u,n.trimStart??0,n.trimEnd??1,n.trimOffset??0)),n?.strokeDashArray&&n.strokeDashArray.length>0&&(u=nt(u,n.strokeDashArray,n.strokeDashOffset??0)),u.length===0)return;let c=D(i),m=n?.opacity??1,h=0;n?.strokeLineCap==="butt"?h=1:n?.strokeLineCap==="square"&&(h=2);for(let d of u)this.drawSegment(t,e,d.p0,d.p1,c,a,h,o,l,m,n)}drawSegment(t,e,r,i,a,o,l,n,u,c,m){let h=this.scratchData;e.packIntoBuffer(h,c,n,u,m?.transform),h[15]=o,h[16]=a.r,h[17]=a.g,h[18]=a.b,h[19]=a.a,h[20]=l,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 d=this.uniformPool.getBuffer(this.device,h),p=i.x-r.x,f=i.y-r.y,x=Math.sqrt(p*p+f*f);if(x<1e-6)return;let y=o*.5+2,g=p/x*y,P=f/x*y,v=-P,M=g,G=new Float32Array([r.x-g-v,r.y-P-M,r.x-g+v,r.y-P+M,i.x+g-v,i.y+P-M,i.x+g+v,i.y+P+M]),B=this.vertexPool.getBuffer(this.device,G),L=m?.blendMode==="max"?this.maxPipeline:this.pipeline;t.setPipeline(L);let w=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,d);t.setBindGroup(0,w),t.setVertexBuffer(0,B),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};b();b();var Ct=`
|
|
267
|
-
struct Uniforms {
|
|
268
|
-
transformCol0 : vec4<f32>,
|
|
269
|
-
transformCol1 : vec4<f32>,
|
|
270
|
-
transformCol2 : vec4<f32>,
|
|
271
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
275
|
-
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
276
|
-
@group(1) @binding(1) var samp : sampler;
|
|
277
|
-
|
|
278
|
-
struct VSOut {
|
|
279
|
-
@builtin(position) pos : vec4<f32>,
|
|
280
|
-
@location(0) uv : vec2<f32>,
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
|
|
284
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
285
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
286
|
-
|
|
287
|
-
let surfaceSize = u.params.yz;
|
|
288
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
289
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
290
|
-
|
|
291
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
295
|
-
let opacity = u.params.x;
|
|
296
|
-
let blurAmount = u.params.w;
|
|
297
|
-
|
|
298
|
-
if (blurAmount > 0.01) {
|
|
299
|
-
let fdx = dpdx(in.uv);
|
|
300
|
-
let fdy = dpdy(in.uv);
|
|
301
|
-
let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
|
|
302
|
-
let step = fw * blurAmount * 0.3;
|
|
303
|
-
|
|
304
|
-
var color = vec4<f32>(0.0);
|
|
305
|
-
var totalWeight = 0.0;
|
|
306
|
-
for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
|
|
307
|
-
for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
|
|
308
|
-
let offset = vec2<f32>(x_offset, y_offset) * step;
|
|
309
|
-
let sampleColor = textureSample(tex, samp, in.uv + offset);
|
|
310
|
-
color = color + sampleColor;
|
|
311
|
-
totalWeight = totalWeight + 1.0;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return (color / totalWeight) * opacity;
|
|
315
|
-
} else {
|
|
316
|
-
let color = textureSample(tex, samp, in.uv);
|
|
317
|
-
return color * opacity;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
`;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=[]}},j=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;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:Ct});this.uniformLayout=T(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:at}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,a,o,l,n,u,c){let m=c?.opacity??1;r.packIntoBuffer(this.uniformData,m,n,u,c?.transform);let h=this.uniformPool.getBuffer(this.device,this.uniformData),d=o.x/i.width,p=o.y/i.height,f=(o.x+o.width)/i.width,x=(o.y+o.height)/i.height;this.vertexData[0]=l.x,this.vertexData[1]=l.y,this.vertexData[2]=d,this.vertexData[3]=p,this.vertexData[4]=l.x+l.width,this.vertexData[5]=l.y,this.vertexData[6]=f,this.vertexData[7]=p,this.vertexData[8]=l.x,this.vertexData[9]=l.y+l.height,this.vertexData[10]=d,this.vertexData[11]=x,this.vertexData[12]=l.x+l.width,this.vertexData[13]=l.y+l.height,this.vertexData[14]=f,this.vertexData[15]=x;let y=this.vertexPool.getBuffer(this.device,this.vertexData),g=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h),P=e.getBindGroup(this.device,this.textureLayout,i,a);t.setPipeline(this.pipeline),t.setBindGroup(0,g),t.setBindGroup(1,P),t.setVertexBuffer(0,y),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};b();var H=class{samplers=new Map;lru=[];maxCapacity;constructor(t=32){this.maxCapacity=t}getSampler(t,e={}){let r=Math.max(1,Math.min(16,e.maxAnisotropy??4)),i=`${e.magFilter??"linear"}:${e.minFilter??"linear"}:${e.mipmapFilter??"linear"}:${e.addressModeU??"clamp-to-edge"}:${e.addressModeV??"clamp-to-edge"}:${r}`,a=this.samplers.get(i);if(a)this.lru=this.lru.filter(o=>o!==i);else{if(a=t.createSampler({magFilter:e.magFilter??"linear",minFilter:e.minFilter??"linear",mipmapFilter:e.mipmapFilter??"linear",addressModeU:e.addressModeU??"clamp-to-edge",addressModeV:e.addressModeV??"clamp-to-edge",maxAnisotropy:r}),this.samplers.size>=this.maxCapacity){let o=this.lru.pop();o&&this.samplers.delete(o)}this.samplers.set(i,a)}return this.lru.unshift(i),a}destroy(){this.samplers.clear(),this.lru=[]}};b();b();var Y=`
|
|
321
|
-
struct GradientUniforms {
|
|
322
|
-
info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count
|
|
323
|
-
geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)
|
|
324
|
-
offsets : array<vec4<f32>, 2>,
|
|
325
|
-
stops : array<vec4<f32>, 8>, // OKLab + alpha
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
fn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {
|
|
329
|
-
let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);
|
|
330
|
-
let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);
|
|
331
|
-
let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);
|
|
332
|
-
let lin = clamp(vec3<f32>(
|
|
333
|
-
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
334
|
-
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
335
|
-
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
|
|
336
|
-
), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
337
|
-
let lo = lin * 12.92;
|
|
338
|
-
let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;
|
|
339
|
-
return select(hi, lo, lin <= vec3<f32>(0.0031308));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
/// Position along the gradient (0..1, unclamped for linear/radial) at local point p.
|
|
343
|
-
fn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {
|
|
344
|
-
let d = p - g.geom.xy;
|
|
345
|
-
let kind = g.info.x;
|
|
346
|
-
if (kind < 1.5) {
|
|
347
|
-
return dot(d, g.geom.zw) + 0.5;
|
|
348
|
-
}
|
|
349
|
-
if (kind < 2.5) {
|
|
350
|
-
return length(d / max(g.geom.zw, vec2<f32>(1e-4)));
|
|
351
|
-
}
|
|
352
|
-
let a = atan2(d.x, -d.y) - g.geom.z;
|
|
353
|
-
return fract(a / 6.28318530718);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/// Straight sRGB color + alpha of the gradient at local point p.
|
|
357
|
-
fn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {
|
|
358
|
-
var offs = g.offsets;
|
|
359
|
-
var stops = g.stops;
|
|
360
|
-
let n = i32(g.info.y);
|
|
361
|
-
let t = gradientT(g, p);
|
|
362
|
-
var lab = stops[0];
|
|
363
|
-
if (t > offs[0].x) {
|
|
364
|
-
lab = stops[n - 1];
|
|
365
|
-
for (var i = 1; i < 8; i++) {
|
|
366
|
-
if (i >= n) {
|
|
367
|
-
break;
|
|
368
|
-
}
|
|
369
|
-
let b = offs[i / 4][i % 4];
|
|
370
|
-
if (t <= b) {
|
|
371
|
-
let a = offs[(i - 1) / 4][(i - 1) % 4];
|
|
372
|
-
let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);
|
|
373
|
-
lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));
|
|
374
|
-
break;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);
|
|
379
|
-
}
|
|
380
|
-
`;b();var Bt=`
|
|
381
|
-
${Y}
|
|
382
|
-
|
|
383
|
-
struct Uniforms {
|
|
384
|
-
transformCol0 : vec4<f32>,
|
|
385
|
-
transformCol1 : vec4<f32>,
|
|
386
|
-
transformCol2 : vec4<f32>,
|
|
387
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused
|
|
388
|
-
color : vec4<f32>, // solid color (gradient.info.x = 0)
|
|
389
|
-
gradient : GradientUniforms,
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
393
|
-
|
|
394
|
-
struct VSOut {
|
|
395
|
-
@builtin(position) pos : vec4<f32>,
|
|
396
|
-
@location(0) localPos : vec2<f32>,
|
|
397
|
-
};
|
|
398
|
-
|
|
399
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
400
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
401
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
402
|
-
|
|
403
|
-
let surfaceSize = u.params.yz;
|
|
404
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
405
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
406
|
-
|
|
407
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
411
|
-
var outColor = u.color;
|
|
412
|
-
if (u.gradient.info.x > 0.5) {
|
|
413
|
-
outColor = evalGradient(u.gradient, in.localPos);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
let alpha = outColor.a * u.params.x;
|
|
417
|
-
if (alpha <= 0.0) {
|
|
418
|
-
discard;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
return vec4<f32>(outColor.rgb * alpha, alpha);
|
|
422
|
-
}
|
|
423
|
-
`;b();var It={linear:1,radial:2,conic:3};function X(s){return typeof s=="string"&&s.includes("gradient(")?mt(s):null}function Q(s,t,e,r){if(e.fill(0,r,r+48),!s)return;let i=pt(s.stops),a=Math.max(t.width,.001),o=Math.max(t.height,.001),l=t.x+s.center[0]*a,n=t.y+s.center[1]*o;if(e[r]=It[s.type],e[r+1]=i.length,e[r+4]=s.type==="linear"?t.x+a/2:l,e[r+5]=s.type==="linear"?t.y+o/2:n,s.type==="linear"){let u=s.angle*Math.PI/180,c=Math.sin(u),m=-Math.cos(u),h=Math.abs(a*c)+Math.abs(o*m);e[r+6]=c/h,e[r+7]=m/h}else if(s.type==="radial"){let u,c;s.radius?[u,c]=s.radius:[u,c]=Vt(s,l-t.x,t.x+a-l,n-t.y,t.y+o-n),e[r+6]=u,e[r+7]=c}else e[r+6]=s.from*Math.PI/180;i.forEach((u,c)=>{e[r+8+c]=u.offset}),A(i).forEach((u,c)=>{e.set(u,r+16+c*4)})}function Vt(s,t,e,r,i){let a=s.extent??"farthest-corner",o=a.startsWith("farthest"),l=o?Math.max(t,e):Math.min(t,e),n=o?Math.max(r,i):Math.min(r,i),u=s.shape==="circle";if(a.endsWith("side")){if(!u)return[l,n];let c=o?Math.max(l,n):Math.min(l,n);return[c,c]}if(u){let c=Math.hypot(l,n);return[c,c]}return[l*Math.SQRT2,n*Math.SQRT2]}var K=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(68);constructor(t,e){this.device=t,this.uniformPool=new U(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"shape-fill.wgsl",code:Bt});this.uniformLayout=T(t),this.pipeline=_(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,a,o,l,n){if(r.length<6||i.type==="none")return;let u=n?.opacity??1;e.packIntoBuffer(this.uniformData,u,o,l,n?.transform),this.uniformData[15]=0;let c=X(i.color);if(c)this.uniformData.fill(0,16,20),Q(c,a,this.uniformData,20);else{let d=D(i.color??"#ffffff");this.uniformData[16]=d.r,this.uniformData[17]=d.g,this.uniformData[18]=d.b,this.uniformData[19]=d.a,this.packTwoColorGradient(i,a,d)}let m=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:m}}]})),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 a=D(t.color2??t.color??"#ffffff"),o=this.uniformData;if(t.type==="linear"){let n=t.startX??e.x,u=t.startY??e.y,c=t.endX??e.x+e.width,m=t.endY??e.y+e.height,h=c-n,d=m-u,p=Math.max(h*h+d*d,1e-6);o.set([1,2,0,0,(n+c)/2,(u+m)/2,h/p,d/p],20)}else{let n=t.radius??Math.max(e.width,e.height)/2;o.set([2,2,0,0,t.cx??e.x+e.width/2,t.cy??e.y+e.height/2,n,n],20)}o[28]=0,o[29]=1;let l=A([{offset:0,color:[r.r,r.g,r.b,r.a]},{offset:1,color:[a.r,a.g,a.b,a.a]}]);o.set(l[0],36),o.set(l[1],40)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};b();b();var Dt=`
|
|
424
|
-
${Y}
|
|
425
|
-
|
|
426
|
-
struct Uniforms {
|
|
427
|
-
transformCol0 : vec4<f32>,
|
|
428
|
-
transformCol1 : vec4<f32>,
|
|
429
|
-
transformCol2 : vec4<f32>,
|
|
430
|
-
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
|
|
431
|
-
color : vec4<f32>,
|
|
432
|
-
rect : vec4<f32>, // x, y, width, height
|
|
433
|
-
gradient : GradientUniforms, // info.x = 0: solid \`color\`
|
|
434
|
-
};
|
|
435
|
-
|
|
436
|
-
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
437
|
-
|
|
438
|
-
struct VSOut {
|
|
439
|
-
@builtin(position) pos : vec4<f32>,
|
|
440
|
-
@location(0) localPos : vec2<f32>,
|
|
441
|
-
};
|
|
442
|
-
|
|
443
|
-
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
444
|
-
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
445
|
-
let p = transform * vec3<f32>(xy, 1.0);
|
|
446
|
-
|
|
447
|
-
let surfaceSize = u.params.yz;
|
|
448
|
-
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
449
|
-
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
450
|
-
|
|
451
|
-
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
|
|
455
|
-
let q = abs(p) - b + r;
|
|
456
|
-
return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
460
|
-
let center = u.rect.xy + u.rect.zw * 0.5;
|
|
461
|
-
let halfSize = u.rect.zw * 0.5;
|
|
462
|
-
let radius = u.params.w;
|
|
463
|
-
|
|
464
|
-
let d = sdRoundedRect(in.localPos - center, halfSize, radius);
|
|
465
|
-
// Rounded shapes: one device pixel of coverage centred on the edge (the
|
|
466
|
-
// quad has room for its outer half). Square ones keep their exact edge.
|
|
467
|
-
let fw = max(fwidth(d), 1e-4);
|
|
468
|
-
var edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
|
|
469
|
-
if (radius > 0.0) {
|
|
470
|
-
edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
471
|
-
}
|
|
472
|
-
var fill = u.color;
|
|
473
|
-
if (u.gradient.info.x > 0.5) {
|
|
474
|
-
fill = evalGradient(u.gradient, in.localPos);
|
|
475
|
-
}
|
|
476
|
-
let alpha = fill.a * u.params.x * edgeAlpha;
|
|
477
|
-
if (alpha <= 0.0) {
|
|
478
|
-
discard;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
return vec4<f32>(fill.rgb * alpha, alpha);
|
|
482
|
-
}
|
|
483
|
-
`;var Z=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;uniformData=new Float32Array(72);vertexData=new Float32Array(8);constructor(t,e){this.device=t,this.uniformPool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"solid.wgsl",code:Dt});this.uniformLayout=T(t),this.pipeline=_(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,a,o,l=0,n){let u=X(i),c=u?{r:0,g:0,b:0,a:1}:D(i),m=n?.opacity??1;e.packIntoBuffer(this.uniformData,m,a,o,n?.transform),this.uniformData[15]=l,this.uniformData[16]=c.r,this.uniformData[17]=c.g,this.uniformData[18]=c.b,this.uniformData[19]=c.a,this.uniformData[20]=r.x,this.uniformData[21]=r.y,this.uniformData[22]=r.width,this.uniformData[23]=r.height,Q(u,r,this.uniformData,24);let h=this.uniformPool.getBuffer(this.device,this.uniformData),d=0;if(l>0){let v=n?.transform?e.getCurrent().multiply(n.transform):e.getCurrent(),M=Math.min(Math.hypot(v.a,v.b),Math.hypot(v.c,v.d));d=2/Math.max(M,.001)}let p=r.x-d,f=r.y-d,x=r.x+r.width+d,y=r.y+r.height+d;this.vertexData[0]=p,this.vertexData[1]=f,this.vertexData[2]=x,this.vertexData[3]=f,this.vertexData[4]=p,this.vertexData[5]=y,this.vertexData[6]=x,this.vertexData[7]=y;let g=this.vertexPool.getBuffer(this.device,this.vertexData);t.setPipeline(this.pipeline);let P=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h);t.setBindGroup(0,P),t.setVertexBuffer(0,g),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};function zt(s){if(Array.isArray(s)){let r=s[3]??1;return[s[0]*r,s[1]*r,s[2]*r,r]}if("r"in s){let r=s.a??1;return{r:s.r*r,g:s.g*r,b:s.b*r,a:r}}let t=Array.from(s),e=t[3]??1;return[t[0]*e,t[1]*e,t[2]*e,e]}var Tt=new WeakMap;function Dr(s,t){let e=Tt.get(s);return(!e||e.format!==t||e.isDestroyed)&&(e=new lt(s,t),Tt.set(s,e)),e.resetPools(),e}var lt=class{device;transformStack=new yt;clipStack=new V;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new I;samplerCache=new H;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(t,e){this.device=t,this.format=e,this.quadPipeline=new j(t,e),this.solidPipeline=new Z(t,e),this.shapeFillPipeline=new K(t,e),this.pathPipeline=new q(t,e),this.effectPipeline=new E(t,e),this.slugPipeline=new gt(t,e)}beginFrame(t,e,r={r:0,g:0,b:0,a:0},i,a,o="clear"){this.surfaceWidth=i,this.surfaceHeight=a,t!==this.lastEncoder&&(this.lastEncoder=t,this.resetPools());let l=t.beginRenderPass({colorAttachments:[{view:e,clearValue:zt(r),loadOp:o,storeOp:"store"}]});return this.clipStack.applyScissorToPass(l,i,a),l}endFrame(t){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),et.flushRetired(this.device),et.prune(this.device)}drawTexture(t,e,r,i){let a=this.samplerCache.getSampler(this.device),o={x:0,y:0,width:e.width,height:e.height};this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,a,o,r,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(t,e,r,i,a){let o=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,o,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawRect(t,e,r,i=0,a){let o=0,l=a;typeof i=="object"&&i!==null?(l=i,o=0):typeof i=="number"&&(o=i),this.rasterDrawCount++,this.solidPipeline.draw(t,this.transformStack,e,r,this.surfaceWidth,this.surfaceHeight,o,l)}drawPath(t,e,r,i,a){this.rasterDrawCount++,this.pathPipeline.drawPath(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawShapeFill(t,e,r,i,a){this.rasterDrawCount++,this.shapeFillPipeline.draw(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawShape(t,e,r,i,a){let o={x:0,y:0,width:e.width,height:e.height};if(r&&r.type!=="none"){let l=Ut(e);if(l.length>0&&(this.drawShapeFill(t,l,r,o,a),(!i||!i.width||i.width<=0)&&(r.type??"solid")==="solid"&&r.color)){let n=ot(e);if(n){let u=this.transformStack.getCurrent(),c=1/rt(a?.transform?u.multiply(a.transform):u);this.drawPath(t,n,r.color,c,{...a,strokeLineCap:"round"})}}}if(i&&i.width&&i.width>0&&i.color){let l=ot(e);l&&this.drawPath(t,l,i.color,i.width,{...a,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,a){return this.effectPipeline.composite(t,this.bindGroupCache,this.samplerCache,e,r,i,this.format,a)}applyMotionBlur(t,e,r,i,a=180,o=16,l){return this.effectPipeline.applyMotionBlur(t,this.bindGroupCache,this.samplerCache,e,r,i,a,o,this.format,l)}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),a=Math.min(t.x+t.width,e.x+e.width),o=Math.min(t.y+t.height,e.y+e.height);this.pushScissor({x:r,y:i,width:Math.max(0,a-r),height:Math.max(0,o-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(m=>m.x),a=r.map(m=>m.y),o=Math.min(...i),l=Math.min(...a),n=Math.max(...i)-o,u=Math.max(...a)-l,c=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(c){let m=Math.max(o,c.x),h=Math.max(l,c.y),d=Math.min(o+n,c.x+c.width),p=Math.min(l+u,c.y+c.height);o=m,l=h,n=Math.max(0,d-m),u=Math.max(0,p-h)}this.clipStack.pushScissor({x:o,y:l,width:n,height:u},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}};b();function Wt(s){return xt(s)??dt(s)??tt(s)}function $r(s){let t=Wt(s);return typeof t=="string"?t:tt(s)}export{Nt as a,jt as b,Ht as c,Yt as d,Xt as e,Qt as f,Kt as g,Zt as h,ee as i,re as j,ie as k,ne as l,kt as m,se as n,E as o,Lt as p,z as q,ot as r,at as s,H as t,Dr as u,lt as v,Wt as w,$r as x};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{k as Ve,l as Oe,n as Ie}from"./chunk-HOV6DDBZ.mjs";import{g as We,i as xe,l as q}from"./chunk-RECQ74RP.mjs";import{c as ze,e as He,f as Re}from"./chunk-UE7Y65C3.mjs";import{a as Ge}from"./chunk-LZNHGH56.mjs";import{a as Be}from"./chunk-UZTA2EUU.mjs";import{l as Pe}from"./chunk-77MT33VR.mjs";import{f as _,g as Y}from"./chunk-Y4NIR77Z.mjs";Y();Y();var De=()=>typeof _<"u"&&!!_.versions?.node||!!globalThis.__IS_HEADLESS_RENDERER__;function ee(e){if(!e||De()||typeof window>"u")return e;let t=e.replace(/^file:\/\//,"");return t.startsWith("/")&&!t.startsWith("/@fs/")&&!t.startsWith("/api/")?`/@fs${t}`:e}function Ae(e){if(!e)return;if(e?.sourceUrl&&typeof e.sourceUrl=="string")return ee(e.sourceUrl);if(e?.url&&typeof e.url=="string")return ee(e.url);let t=e?.entity;if(t)return typeof t=="string"?ee(t):t.url&&typeof t.url=="string"?ee(t.url):je(t);if(e.operation?.op==="source"){let s=e.operation.source;if(typeof s=="string")return ee(s);if(s?.url&&typeof s.url=="string")return ee(s.url);if(s?.entity)return je(s.entity);if(e.operation.sourceUrl&&typeof e.operation.sourceUrl=="string")return ee(e.operation.sourceUrl);if(e.operation.url&&typeof e.operation.url=="string")return ee(e.operation.url);let l=e.operation.srtText;if(l)return`data:text/srt;base64,${typeof Buffer<"u"?Buffer.from(l).toString("base64"):btoa(unescape(encodeURIComponent(l)))}`;let y=e.operation.svgContent;if(y)return`data:image/svg+xml;base64,${typeof Buffer<"u"?Buffer.from(y).toString("base64"):btoa(unescape(encodeURIComponent(y)))}`}let n=e.operation?.svgDataUrl;if(n&&typeof n=="string")return n;let r=e.operation?.svgContent;if(r&&typeof r=="string")return`data:image/svg+xml;base64,${typeof Buffer<"u"?Buffer.from(r).toString("base64"):btoa(unescape(encodeURIComponent(r)))}`;let i=e.operation?.lutUrl;if(i&&typeof i=="string")return i;if(e.operation?.op==="ExtractLUT")return;if(Array.isArray(e.children))for(let s of e.children){let l=Ae(s);if(l)return l}let o=e.operation?.inputs;if(o&&typeof o=="object"){for(let s of Object.values(o))if(s?.outputItem?.data&&typeof s.outputItem.data=="object"){let l=Ae(s.outputItem.data);if(l)return l}}}function je(e){if(!e)return"";if(e.url&&typeof e.url=="string"){let o=e.url;if(typeof window<"u"&&!De()){let s=o.replace(/^file:\/\//,"");if(s.startsWith("/")&&!s.startsWith("/@fs/")&&!s.startsWith("/api/"))return`/@fs${s}`}return o}let{id:t,key:n}=e;if(n&&(n.startsWith("file://")||n.startsWith("/")||n.startsWith("http://")||n.startsWith("https://"))){if(typeof window<"u"&&!De()){let o=n.replace(/^file:\/\//,"");if(o.startsWith("/")&&!o.startsWith("/@fs/")&&!o.startsWith("/api/"))return`/@fs${o}`}return n.startsWith("/")?`file://${n}`:n}let r=n.includes(".")?n.split(".").pop():null,i=r?`.${r}`:"";return`/api/v1/assets/${t}${i}`}function pt(e){return`assets/fonts/${e}.ttf`}Y();function Ye(e){let t=e.operation,n=q(e),r={sourceUrl:void 0,trimStartSec:0,trimEndSec:null,speed:1,cropRegion:null,flipH:!1,flipV:!1,rotation:0,effectiveDurationSec:0,mimeType:We(e)||null};t.op==="text"?r.sourceUrl=void 0:r.sourceUrl=Ae(e);let i=(n?.durationMs??0)/1e3;return r.effectiveDurationSec=((r.trimEndSec??i)-r.trimStartSec)/r.speed,r}Y();Y();function ve(e,t){return Math.round(e*t)}function Me(e,t,n={timeOffsetSec:0}){if(!e)return e;let{operation:r,metadata:i={},children:o=[]}=e,{timeOffsetSec:s,durationLimitMs:l}=n;if(!r)return{...e,children:(o||[]).map(c=>Me(c,t,n))};let y=r.timeline,m=y?.segments||[],g=q(e)?.durationMs??0;if(m.length>0){let c=m.reduce((U,d)=>{let C=d.endSec!=null?d.endSec-d.startSec:0,O=Math.max(1,Math.round(C*t));return U+O},0);c>0&&(g=c/t*1e3)}let b={...r},u=y?.startFrame??b.startFrame;if(typeof u=="number"){let c=ve(s,t);b.startFrame=u-c}let S={...i,durationMs:g},F=typeof u=="number"||b.op==="compose"?{timeOffsetSec:0,durationLimitMs:void 0}:{timeOffsetSec:s,durationLimitMs:l},te=(o||[]).map(c=>Me(c,t,F));return{metadata:S,operation:b,children:te}}var rt=typeof _<"u"&&/^(debug|trace)$/i.test(_.env?.LOG_LEVEL??""),T={debug:(e,...t)=>{rt&&(typeof e=="object"&&e!==null?console.info("[AudioExtractor]",e,...t):console.info(`[AudioExtractor] ${e}`,...t))},warn:(e,...t)=>{typeof e=="object"&&e!==null?console.warn("[AudioExtractor]",e,...t):console.warn(`[AudioExtractor] ${e}`,...t)},error:(e,...t)=>{typeof e=="object"&&e!==null?console.error("[AudioExtractor]",e,...t):console.error(`[AudioExtractor] ${e}`,...t)}},ke=()=>{if(typeof window>"u")return Promise.resolve();let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(t=>setTimeout(t,0))},at=async(e=3e4)=>{await new Promise(n=>setTimeout(n,100));let t=Date.now();return new Promise(n=>{let r=()=>{let i=typeof window<"u"&&window.renderer_delayRenderHandles?window.renderer_delayRenderHandles:[],o=typeof globalThis<"u"?globalThis.__GATEWAI_DELAYS__:null,s=i.length>0,l=o instanceof Set&&o.size>0;if(!s&&!l){n();return}if(Date.now()-t>e){T.warn(`[AudioExtractor] waitForDelayRender timed out waiting for handles: ${JSON.stringify({browserHandles:i,globalDelays:o?Array.from(o):[]})}`),n();return}setTimeout(r,50)};r()})};async function $t(e){let t=await Qe(e);return t?{channels:t.channels,sampleRate:t.sampleRate}:null}var it=.5,Fe=class extends Error{name="AudioDecodeUnavailable"};async function st(e){let t=window.AudioContext||window.webkitAudioContext;if(!t)throw new Fe(`No decoder here for ${e}: WebCodecs can't decode it and there is no AudioContext (a worker).`);let n=new t;try{let r=await fetch(He(e,!1));if(T.debug(`[AudioExtractor] Fetch response status for ${e}: ${r.status} (${r.statusText})`),!r.ok)throw new Error(`Failed to fetch audio source: ${r.statusText}`);let i=await r.arrayBuffer();T.debug(`[AudioExtractor] Fetched ${i.byteLength} bytes. Decoding audio data...`);let o=await n.decodeAudioData(i);T.debug(`[AudioExtractor] Decoded successfully: ${o.numberOfChannels} channels, sampleRate: ${o.sampleRate}, duration: ${o.duration}s`);let s=[];for(let l=0;l<o.numberOfChannels;l++)s.push(new Float32Array(o.getChannelData(l)));return{channels:s,sampleRate:o.sampleRate,startIndex:0,validFromSec:0,validToSec:Number.POSITIVE_INFINITY}}finally{n.close(),T.debug(`[AudioExtractor] AudioContext closed for ${e}`)}}async function Qe(e,t){T.debug(`[AudioExtractor] decodeAudioSource started for url: ${e}`);try{let n=!(typeof _<"u"&&_.versions?.node),r=!1;try{T.debug(`[AudioExtractor] Acquiring from inputStore for ${e}...`);let i=await Re.acquire(e);r=!0,T.debug("[AudioExtractor] inputStore acquired. Retrieving primary audio track...");let o=await i.getPrimaryAudioTrack();if(!o)return T.warn(`[AudioExtractor] No primary audio track found in input for ${e}`),null;let s=new ze(o),l=t?Math.max(0,t.startSec-it):0,y=s.samples(l,t?.endSec),m=[],g=0,b=48e3,u=1,S=null;T.debug(`[AudioExtractor] Starting mediabunny generator loop for ${e}...`);for await(let c of y){S===null&&(S=c.timestamp),b=c.sampleRate,u=c.numberOfChannels;let U=c.numberOfFrames;if(m.length===0)for(let d=0;d<u;d++)m.push([]);for(let d=0;d<u;d++){let C;try{let O=c.allocationSize({planeIndex:d,format:"f32-planar"});C=new Float32Array(O/4),c.copyTo(C,{planeIndex:d,format:"f32-planar"})}catch{let O=c.allocationSize({planeIndex:d});if(c.format==="s16"||c.format==="s16-planar"){let E=new Int16Array(O/2);c.copyTo(E,{planeIndex:d}),C=new Float32Array(E.length);for(let w=0;w<E.length;w++)C[w]=(E[w]??0)/32768}else if(c.format==="s32"||c.format==="s32-planar"){let E=new Int32Array(O/4);c.copyTo(E,{planeIndex:d}),C=new Float32Array(E.length);for(let w=0;w<E.length;w++)C[w]=(E[w]??0)/2147483648}else if(c.format==="u8"||c.format==="u8-planar"){let E=new Uint8Array(O);c.copyTo(E,{planeIndex:d}),C=new Float32Array(E.length);for(let w=0;w<E.length;w++)C[w]=((E[w]??128)-128)/128}else C=new Float32Array(O/4),c.copyTo(C,{planeIndex:d})}m[d].push(C)}g+=U,c.close()}if(T.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${g}`),g===0||m.length===0)return null;let V=m.map(c=>{let U=new Float32Array(g),d=0;for(let C of c)U.set(C,d),d+=C.length;return U}),F=0;if(l>0&&S!==null){let c=await s.getSample(0),U=c?.timestamp??await o.getFirstTimestamp();c?.close(),F=Math.round((S-U)*b)}let te=!t||(F+g)/b<t.endSec;return{channels:V,sampleRate:b,startIndex:F,validFromSec:l>0&&t?t.startSec:0,validToSec:te||!t?Number.POSITIVE_INFINITY:t.endSec}}catch(i){if(i instanceof Error&&i.message.includes("Cannot open local media file"))throw i;if(n)return st(e);if(typeof _<"u"&&_.versions?.node)try{let{execFileSync:o}=await import("./child_process-B2TV2STW.mjs"),s=t?Math.round(Math.max(0,t.startSec)*48e3):0,l=s/48e3,y=o("ffmpeg",["-v","error",...l>0?["-ss",String(l)]:[],"-i",e,...t?["-t",String(t.endSec-l)]:[],"-f","f32le","-ar","48000","-ac","2","pipe:1"],{maxBuffer:Number.POSITIVE_INFINITY}),m=y.byteLength/4,g=m/2,b=new Float32Array(y.buffer,y.byteOffset,m),u=new Float32Array(g),S=new Float32Array(g);for(let F=0;F<g;F++)u[F]=b[F*2],S[F]=b[F*2+1];let V=!t||l+g/48e3<t.endSec;return{channels:[u,S],sampleRate:48e3,startIndex:s,validFromSec:l,validToSec:V||!t?Number.POSITIVE_INFINITY:t.endSec}}catch(o){T.warn({ffmpegErr:o},`[AudioExtractor] ffmpeg fallback decode failed for ${e}`)}return T.error({err:i},`[AudioExtractor] Failed to decode source ${e}`),null}finally{r&&Re.release(e)}}catch(n){if(n instanceof Fe||n instanceof Error&&n.message.includes("Cannot open local media file"))throw n;return T.error({err:n},`[AudioExtractor] Failed to decode source ${e}`),null}}async function qe(e,t,n,r,i,o,s,l){let y=new Float32Array(r);for(let m=0;m<r;m++){m>0&&m%1e5===0&&await ke();let g=s+m/n*l;if(Oe(o,g))continue;let b=Ve(o,g,l)*t-i,u=Math.floor(b);if(u<0||u>=e.length)continue;let S=e[u];y[m]=S+((e[u+1]??S)-S)*(b-u)}return y}async function Je(e,t,n,r,i,o,s=0,l=0){let y=new Float32Array(i),g=t/n*r,b=1e5;for(let u=0;u<i;u++){u>0&&u%b===0&&await ke();let S=o+(l+u)*g-s,V=Math.floor(S),F=Math.ceil(S);if(V<0){y[u]=0;continue}if(V>=e.length)break;let te=S-V,c=e[V]??0,U=F>=0&&F<e.length?e[F]??c:c,d=c+te*(U-c);y[u]=Number.isFinite(d)?d:0}return y}var Ke=.05,ct=new Set(["Compositor","CompositorLayer"]);function lt(e,t,n){let r=Math.max(0,-n),i=Math.min(t.length,e.length-n);for(let o=r;o<i;o++)e[n+o]+=t[o]}var Ce=class{constructor(t){this.length=t}length;channels=null;get(){return this.channels??=[new Float32Array(this.length),new Float32Array(this.length)],this.channels}canAdopt(t,n){return this.channels===null&&n===0&&t.every(r=>r.length===this.length)}add(t,n){if(this.canAdopt(t,n)&&t[0]!==t[1]){this.channels=t;return}let r=this.get();for(let i=0;i<2;i++)lt(r[i],t[i],n)}};function ut(e,t){for(let n of e)for(let r=0;r<n.length;r++){let i=(n[r]??0)*t;n[r]=Number.isFinite(i)?Math.tanh(i):0}}function dt(e){return e>.95?.92/e:1}function ft(e){if(e.startsWith("data:"))return"inline audio";let t=e.split(/[?#]/)[0].split(/[\\/]/).pop();return t?mt(t):"audio"}function mt(e){try{return decodeURIComponent(e)}catch{return e}}async function Ut(e,t,n=48e3,r,i,o={}){T.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${t}, targetSampleRate: ${n}`),await at(),r&&!o.continue&&Ge.resetState(i??"global",r),Be.registerSignalsFromComposition(i,e);let s=q(e)?.durationMs||1e3,l=s/1e3,y=Math.ceil(l*n),m=o.window?Math.max(0,Math.round(o.window.startSec*n)):0,g=o.window?Math.min(y,Math.round(o.window.endSec*n)):Number.POSITIVE_INFINITY,b=o.window?Math.max(0,g-m):y,u=(a,f)=>({lo:Math.max(0,m-a),hi:Math.min(f,g-a)});T.debug(`[AudioExtractor] Composition total duration: ${s}ms (${l}s). Total mixed samples to allocate: ${y}`);let S=new Map,V=new Set;async function F(a,f,p,x=!0){if(V.has(a))return null;let A=S.get(a),M=x?A?.find(D=>D.validFromSec<=f&&D.validToSec>=p):void 0;if(M)return M;let P=await Qe(a,{startSec:f,endSec:p});return P?(x&&(A||(A=[],S.set(a,A)),A.push(P)),P):(V.add(a),null)}async function te(a,f,p,x,A=0){let M=new Float32Array(f),P=new Float32Array(f);for(let D=0;D<f;){let h=Math.min(f-D,n*2),k=x+(A+D)/n*t,J=Ie(p,k,k+(h-1)/n*t,t);for(;J.max-J.min>3&&h>1;)h=Math.max(1,Math.floor(h/2)),J=Ie(p,k,k+(h-1)/n*t,t);let N=await F(a,J.min,J.max+Ke,!1);if(!N)return null;let ne=await qe(N.channels[0],N.sampleRate,n,h,N.startIndex,p,k,t),oe=N.channels.length>1?await qe(N.channels[1],N.sampleRate,n,h,N.startIndex,p,k,t):ne;M.set(ne,D),P.set(oe,D),D+=h}return[M,P]}let c=new WeakMap;function U(a){let f=c.get(a);if(f!==void 0)return f;let p=a.operation,x=!1;if(p?.op==="source"){let A=xe(a);x=A==="Audio"||A==="Video"}else p?.op&&!ct.has(p.op)&&Pe.get(p.op)&&(x=!0);return!x&&a.children&&(x=a.children.some(A=>A&&U(A))),c.set(a,x),x}async function d(a,f,p,x,A,M,P,D=0){if(!a||!U(a))return null;let h=a.operation;if(!h){let B=q(a)?.durationMs??0,G=Math.round(B/1e3*t),ue=P&&M!==null?M:M!==null?G>0?Math.min(M,G):M:G,K=Math.ceil(ue/t*n);if(K<=0)return null;let{lo:Q,hi:re}=u(D,K);if(re<=Q)return null;let de=new Ce(re-Q);for(let R of a.children){let he=R.operation,L=he?.startFrame??he?.timeline?.startFrame??0,I=Math.round(L/t*n),$=await d(R,f,p,x,A,ue,P,D+I);$&&de.add($,Math.max(I,Q)-Q)}return de.channels}let k=x*(h.volume??1)*(h.opacity===0?0:1)*(h.muted?0:1),J=A,N=h.startFrame??h.timeline?.startFrame??0,ne=h.timeRemap,oe=ne?{map:ne,offsetFrames:0}:P?{map:P.map,offsetFrames:P.offsetFrames+N}:void 0,$e=h.op==="CompositorLayer"?N:p+N,Ue=h.timeline?.segments||[],se=h,Ne=se.op==="CompositorLayer"?(se.mediaStartFrame??se.trimStartFrames??null)!==null?(se.mediaStartFrame??se.trimStartFrames??0)/t:Math.round((se.trimStartSec??0)*t)/t:0,et=q(a)?.durationMs??0,we=Math.round(et/1e3*t),tt=P&&!ne&&M!==null?M:M!==null?we>0?Math.min(M,we):M:we,ce=Math.ceil(tt/t*n);if(ce<=0)return null;let{lo:v,hi:ge}=u(D,ce);if(ge<=v)return null;let le=new Ce(ge-v),Le=async(B,G)=>{let ue=B?B.startSec:0,K=f+Ne+ue,Q=$e+G,re=0;B?re=Math.max(1,Math.round(((B.endSec??0)-B.startSec)*t)):re=we;let de=P&&!ne&&!B&&M!==null?M:M!==null?Math.min(M,re):re,R=Math.round(G/t*n);if(h.op==="source"){let L=xe(a),I=Ye(a);if(I.sourceUrl&&(L==="Audio"||L==="Video")&&k>0){let $=Math.max(.5,J*(Number(I.speed)||1)),X=Math.max(0,(Number(I.trimStartSec)||0)+K),fe=de/t,me=Math.min(ce-R,Math.ceil(fe*n)),ye=Math.max(R,v),z=Math.min(R+me,ge)-ye,ae=ye-R,Se=ye-v,Te=oe&&z>0?await te(I.sourceUrl,z,oe.map,oe.offsetFrames+G,ae):null,H=!oe&&z>0&&R<ce?await F(I.sourceUrl,X+ae/n*$,X+(ae+z)/n*$+Ke):null;if(Te||H){let j,Z;if(Te)[j,Z]=Te;else if(H){let W=Math.round(X*H.sampleRate);j=await Je(H.channels[0],H.sampleRate,n,$,z,W,H.startIndex,ae),Z=H.channels.length>1?await Je(H.channels[1],H.sampleRate,n,$,z,W,H.startIndex,ae):j}else throw new Error("No decoded audio");let nt=[j,Z];if(le.canAdopt(nt,Se)){if(k!==1){for(let W=0;W<z;W++)j[W]*=k;if(Z!==j)for(let W=0;W<z;W++)Z[W]*=k}le.channels=[j,Z===j?j.slice():Z]}else{let[W,ot]=le.get();for(let be=0;be<z;be++){let _e=Se+be;W[_e]+=j[be]*k,ot[_e]+=Z[be]*k}}}await ke()}(L==="Audio"||L==="Video")&&(E++,o.onProgress?.({done:E,total:O,...I.sourceUrl&&{source:ft(I.sourceUrl)}}))}if(a.children)for(let L of a.children){let I=L.operation,$=I?.startFrame??I?.timeline?.startFrame??0,X=h.op==="CompositorLayer"&&I?.op==="CompositorLayer"?$-N:$,fe=R+Math.round(X/t*n),me=await d(L,K,Q,k,J,de,oe,D+fe);me&&le.add(me,Math.max(fe,v)-v)}let he=Pe.get(h.op);if(he)try{let L=de/t,I=Math.min(ce-R,Math.ceil(L*n)),$=Math.max(R,v),X=Math.min(R+I,ge),fe=$-R;if(X>$&&R<ce&&R>=0){let me=le.get().map(Se=>Se.subarray($-v,X-v)),ye=h.op==="CompositorLayer"?$e:0,Ee=fe/n,z=((Q-ye)/t+K-Ne+Ee)*1e3,ae=q(a)?.durationMs??void 0;await he(me,n,a,{device:r,frame:Q+Ee*t,fps:t,renderId:i,elapsedMs:z,durationMs:ae})}}catch(L){T.error({err:L},`[AudioExtractor] Custom plugin for operation '${h.op}' failed`)}};if(Ue.length>0){let B=0;for(let G of Ue){let ue=(G.endSec??0)-G.startSec,K=Math.max(1,Math.round(ue*t));await Le(G,B),B+=K}}else await Le(null,0);return le.channels}let C=Me(e,t),O=0,E=0;if(o.onProgress){let a=f=>{if(!f)return;let p=f.operation;if(p?.op==="source"){let x=xe(f);(x==="Audio"||x==="Video")&&(O+=Math.max(1,p.timeline?.segments?.length??0))}for(let x of f.children??[])a(x)};a(C),o.onProgress({done:0,total:O})}let w=await d(C,0,0,1,1,null),pe=w?.every(a=>a.length===b)&&w[0]!==w[1]?w:[new Float32Array(b),new Float32Array(b)],[Xe,Ze]=pe;if(w&&pe!==w)for(let a=0;a<2;a++){let f=pe[a],p=w[a],x=Math.min(p.length,f.length);for(let A=0;A<x;A++)f[A]=p[A]}S.clear();let ie=0;for(let a=0;a<b;a++){let f=Math.abs(Xe[a]??0),p=Math.abs(Ze[a]??0);f>ie&&(ie=f),p>ie&&(ie=p)}return o.master!==!1&&ut(pe,dt(ie)),{channels:pe,sampleRate:n,peak:ie}}export{Ae as a,pt as b,Ye as c,$t as d,Ut as e};
|