framefields 2.12.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 +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-afTBdB3U.d.mts → audio-C4B9p_yq.d.mts} +3 -4
- package/dist/audio-C4B9p_yq.d.mts.map +1 -0
- package/dist/{audio-DHLoNcxD.mjs → audio-DIvi6hTD.mjs} +4 -4
- package/dist/{audio-DHLoNcxD.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
- package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
- package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
- package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +51 -51
- package/dist/cli/check-worker.mjs.map +1 -1
- package/dist/cli/local-worker.d.mts +28 -0
- package/dist/cli/local-worker.d.mts.map +1 -0
- package/dist/cli/local-worker.mjs +83 -0
- package/dist/cli/local-worker.mjs.map +1 -0
- package/dist/cli.mjs +229 -54
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +2 -0
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +1 -1
- package/dist/{cloud-COid1Ipa.mjs → cloud-Cj1TIme8.mjs} +306 -7
- package/dist/cloud-Cj1TIme8.mjs.map +1 -0
- package/dist/components/index.d.mts +15 -14
- package/dist/components/index.mjs +47 -47
- package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
- package/dist/{dist-CySGkG54.mjs.map → dist-BSKAbyea.mjs.map} +1 -1
- package/dist/{dist-BwtxciN4.mjs → dist-B_rSWeOz.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
- package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
- package/dist/{dist-BSqeChht.mjs → dist-CCrYOkcc.mjs} +145 -84
- package/dist/dist-CCrYOkcc.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
- package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
- package/dist/{dist-B-OPY7Cs.mjs → dist-DtPPPsZV.mjs} +356 -145
- package/dist/dist-DtPPPsZV.mjs.map +1 -0
- package/dist/{dist-2_lT3Dwc.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-2_lT3Dwc.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
- package/dist/effects/index.d.mts +6 -6
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C8CL9cOq.mjs → effects-B-L3rLs6.mjs} +3 -3
- package/dist/{effects-C8CL9cOq.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-BQrDjnpV.mjs → fonts-k5ll8NTE.mjs} +2 -2
- package/dist/{fonts-BQrDjnpV.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
- package/dist/{gpu-DHa-3Dou.mjs → gpu-D2HT3KcE.mjs} +2 -2
- package/dist/{gpu-DHa-3Dou.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
- package/dist/{index-CTv9ZieD.d.mts → index-B08eSpaI.d.mts} +3 -30
- package/dist/index-B08eSpaI.d.mts.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.d.mts.map +1 -0
- package/dist/{index-Drk6HC2k.d.mts → index-BGlaws7-.d.mts} +3 -3
- package/dist/{index-Drk6HC2k.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
- package/dist/{index-CAuNuvIg.d.mts → index-ByhlTwxh.d.mts} +5 -5
- package/dist/{index-CAuNuvIg.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
- package/dist/{index-Fliv2Z-w.d.mts → index-C2yaponf.d.mts} +132 -7
- package/dist/index-C2yaponf.d.mts.map +1 -0
- package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
- package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
- package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
- package/dist/index-CnZhBlob.d.mts.map +1 -0
- package/dist/{index-BNClElng.d.mts → index-CtKUQ2VG.d.mts} +281 -283
- package/dist/index-CtKUQ2VG.d.mts.map +1 -0
- package/dist/{index-WwuuX8ZJ.d.mts → index-DBh3WphX.d.mts} +2 -2
- package/dist/{index-WwuuX8ZJ.d.mts.map → index-DBh3WphX.d.mts.map} +1 -1
- package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
- package/dist/index-DQ1U3HC3.d.mts.map +1 -0
- package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
- package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
- package/dist/{index-DQa7mhzq.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-DQa7mhzq.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
- package/dist/index.d.mts +16 -15
- package/dist/index.mjs +58 -58
- package/dist/preview/index.d.mts +5 -4
- package/dist/preview/index.mjs +12 -12
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-FJTURGJV.mjs → chunk-3C2XT64C.mjs} +1 -1
- package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
- package/dist/preview-engine/{chunk-4JNIEQS2.mjs → chunk-5ZS46EFB.mjs} +1 -1
- package/dist/preview-engine/{chunk-KBCZKIIQ.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/chunk-FZ4RD7HV.mjs +1 -0
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-RGKS6YIA.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/chunk-N3XTDAL6.mjs +2227 -0
- package/dist/preview-engine/{chunk-O75BFM4S.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
- package/dist/preview-engine/{chunk-VUO4K52B.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/{chunk-HTAHYSCW.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-6O7UDVNL.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TKXOSEIJ.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-JAUMCOOJ.mjs → chunk-UBY2UYEL.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/{chunk-M4QVCQ3O.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYKN2VET.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 +5 -5
- package/dist/preview-engine/{renderers-L6GFGHS6.mjs → renderers-AFTUFMQQ.mjs} +1 -1
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -1
- package/dist/preview-engine/{renderers-PREFONJG.mjs → renderers-EPSF5CSQ.mjs} +1 -1
- package/dist/preview-engine/{renderers-R22CDFO4.mjs → renderers-OJWWIVNW.mjs} +1 -1
- package/dist/preview-engine/{renderers-TS32FDV7.mjs → renderers-RHMRWX46.mjs} +1 -1
- package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
- package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
- package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
- package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
- package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +228 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/{src-GPF7RIBU.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{preview-BUtt481A.mjs → preview-lHH8Tv4j.mjs} +323 -35
- package/dist/preview-lHH8Tv4j.mjs.map +1 -0
- package/dist/{program-Cvv_nb9T.mjs → program-BfiB9ttP.mjs} +17 -4
- package/dist/program-BfiB9ttP.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/renderer-0rLmztAv.mjs +5 -0
- package/dist/{renderer-D3QPNBEj.mjs → renderer-4nsuReW2.mjs} +5 -5
- package/dist/{renderer-D3QPNBEj.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
- package/dist/{renderer-DO1SZ5xY.mjs → renderer-7xQmXXMH.mjs} +5 -5
- package/dist/{renderer-DO1SZ5xY.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
- package/dist/renderer-B0pjOXFY.mjs +5 -0
- package/dist/{renderer-BSsKlcHk.mjs → renderer-B10HDC13.mjs} +5 -5
- package/dist/{renderer-BSsKlcHk.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
- package/dist/{renderer-DaY04IyU.mjs → renderer-B2IUPjhw.mjs} +5 -5
- package/dist/{renderer-DaY04IyU.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
- package/dist/{renderer-O4y02xkD.mjs → renderer-B3_GddgJ.mjs} +4 -4
- package/dist/{renderer-O4y02xkD.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
- package/dist/{renderer-DQJHjU0L.mjs → renderer-B3un4Pdi.mjs} +5 -5
- package/dist/{renderer-DQJHjU0L.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
- package/dist/{renderer-PnnkUWm-.mjs → renderer-B6bK9rXm.mjs} +4 -4
- package/dist/{renderer-PnnkUWm-.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
- package/dist/renderer-B7J13reL.mjs +5 -0
- package/dist/{renderer-HXw4cJZx.mjs → renderer-BEhZiOT4.mjs} +3 -3
- package/dist/{renderer-HXw4cJZx.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
- package/dist/{renderer-xNOKSN3V.mjs → renderer-BEuXJY-C.mjs} +5 -5
- package/dist/{renderer-xNOKSN3V.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
- package/dist/{renderer-IAffbHXx.mjs → renderer-BGchUBW_.mjs} +4 -4
- package/dist/{renderer-IAffbHXx.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
- package/dist/{renderer-CZClDMgF.mjs → renderer-BIKkxw_Z.mjs} +5 -5
- package/dist/{renderer-CZClDMgF.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
- package/dist/{renderer-BvRM3OZ6.mjs → renderer-BM19iK8v.mjs} +3 -3
- package/dist/{renderer-BvRM3OZ6.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
- package/dist/{renderer-CtpEzVBn.mjs → renderer-BOlHW3Mi.mjs} +3 -3
- package/dist/{renderer-CtpEzVBn.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
- package/dist/renderer-BPGIKGgl.mjs +5 -0
- package/dist/{renderer-4uZGSmUD.mjs → renderer-BTwuM9u-.mjs} +5 -5
- package/dist/{renderer-4uZGSmUD.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
- package/dist/{renderer-DO_zXwMJ.mjs → renderer-BZMh2io2.mjs} +5 -5
- package/dist/{renderer-DO_zXwMJ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
- package/dist/{renderer-rKw5_EjG.mjs → renderer-BZX932Lj.mjs} +4 -4
- package/dist/{renderer-rKw5_EjG.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
- package/dist/{renderer-5fGj_tqN.mjs → renderer-BhcTYhaP.mjs} +6 -6
- package/dist/{renderer-5fGj_tqN.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
- package/dist/{renderer-DL3o_lG1.mjs → renderer-BmyFfvVA.mjs} +5 -5
- package/dist/{renderer-DL3o_lG1.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
- package/dist/{renderer-DX60Kr20.mjs → renderer-BrEeUw7T.mjs} +3 -3
- package/dist/{renderer-DX60Kr20.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
- package/dist/{renderer-Bf7Z7WT5.mjs → renderer-BsrKj6Td.mjs} +4 -4
- package/dist/{renderer-Bf7Z7WT5.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs → renderer-BuvKGwk3.mjs} +1 -1
- package/dist/{renderer-BOg8i8eF.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/renderer-Bv-Artj1.mjs +5 -0
- package/dist/{renderer-_KIBvES8.mjs → renderer-BvBqTAtk.mjs} +5 -5
- package/dist/{renderer-_KIBvES8.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
- package/dist/renderer-BvLjbhcL.mjs +5 -0
- package/dist/{renderer-BC_Nse6h.mjs → renderer-Bw-_GZVw.mjs} +4 -4
- package/dist/{renderer-BC_Nse6h.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
- package/dist/{renderer-CLTRTtQ8.mjs → renderer-Bw0O--gW.mjs} +5 -5
- package/dist/{renderer-CLTRTtQ8.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
- package/dist/renderer-By6awWaf.mjs +5 -0
- package/dist/{renderer-DsPLMzy1.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-DsPLMzy1.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/renderer-C0rvsz7m.mjs +5 -0
- package/dist/{renderer-DP9ScNM6.mjs → renderer-C4hd6Cqi.mjs} +3 -3
- package/dist/{renderer-DP9ScNM6.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
- package/dist/{renderer-B09I95bo.mjs → renderer-C64_B8It.mjs} +3 -3
- package/dist/{renderer-DrL3J9ci.mjs → renderer-C98XwEIr.mjs} +4 -4
- package/dist/{renderer-DrL3J9ci.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
- package/dist/{renderer-6g1ri445.mjs → renderer-CC22Djgi.mjs} +5 -5
- package/dist/{renderer-6g1ri445.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-FvvywNvv.mjs → renderer-CHCRcCKw.mjs} +3 -3
- package/dist/{renderer-FvvywNvv.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-D3YbHjRG.mjs → renderer-CO4NGvAh.mjs} +95 -80
- package/dist/renderer-CO4NGvAh.mjs.map +1 -0
- package/dist/{renderer-ByFPmHBC.mjs → renderer-CO9vE3sd.mjs} +4 -4
- package/dist/{renderer-ByFPmHBC.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
- package/dist/renderer-COeSeNGg.mjs +5 -0
- package/dist/{renderer-CN-mCIoI.mjs → renderer-CQ4h8n7p.mjs} +5 -5
- package/dist/{renderer-CN-mCIoI.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
- package/dist/{renderer-DEoerd-j.mjs → renderer-CRhEGqW4.mjs} +4 -4
- package/dist/{renderer-DEoerd-j.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
- package/dist/{renderer-CiHVnhUk.mjs → renderer-CSu_vYPn.mjs} +5 -5
- package/dist/{renderer-CiHVnhUk.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
- package/dist/{renderer-BJEexai1.mjs → renderer-CU6WT5jW.mjs} +5 -5
- package/dist/{renderer-BJEexai1.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
- package/dist/renderer-CUfElmtZ.mjs +5 -0
- package/dist/{renderer-BwJ0nXXu.mjs → renderer-CXrnzihz.mjs} +5 -5
- package/dist/{renderer-BwJ0nXXu.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-BwV-o_1b.mjs → renderer-CdXBRdFf.mjs} +4 -4
- package/dist/{renderer-BwV-o_1b.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
- package/dist/{renderer-DrK6pyfz.mjs → renderer-Cfx_FCSf.mjs} +5 -5
- package/dist/{renderer-DrK6pyfz.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
- package/dist/renderer-CjxZlkjb.mjs +5 -0
- package/dist/{renderer-CInMMs5x.mjs → renderer-CkTehyRX.mjs} +6 -6
- package/dist/{renderer-CInMMs5x.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
- package/dist/{renderer-DGXqspB9.mjs → renderer-CldjJmRR.mjs} +3 -3
- package/dist/{renderer-HhJPFidU.mjs → renderer-CoC64eam.mjs} +5 -5
- package/dist/{renderer-HhJPFidU.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
- package/dist/renderer-Cpd6TvTC.mjs +5 -0
- package/dist/{renderer-DLaUT6JZ.mjs → renderer-Cv9CKKWG.mjs} +4 -4
- package/dist/{renderer-DLaUT6JZ.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-DCMoBppL.mjs → renderer-D-GWBoVT.mjs} +3 -3
- package/dist/{renderer-DCMoBppL.mjs.map → renderer-D-GWBoVT.mjs.map} +1 -1
- package/dist/{renderer-C3CGYjrC.mjs → renderer-D-mX1EVA.mjs} +5 -5
- package/dist/{renderer-C3CGYjrC.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
- package/dist/{renderer-C2kFIZ4r.mjs → renderer-D0h1hTOo.mjs} +4 -4
- package/dist/{renderer-C2kFIZ4r.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
- package/dist/{renderer-C_gR2H3R.mjs → renderer-D0xM67cK.mjs} +3 -3
- package/dist/{renderer-C_gR2H3R.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
- package/dist/renderer-D3ziOPhX.mjs +5 -0
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-BTd6tFcS.mjs → renderer-DCrKEVjb.mjs} +5 -5
- package/dist/{renderer-BTd6tFcS.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
- package/dist/{renderer-Dak_wVh9.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dak_wVh9.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/renderer-DL-phtL5.mjs +5 -0
- package/dist/{renderer-uA0UCxjA.mjs → renderer-DNynPM6X.mjs} +4 -4
- package/dist/{renderer-uA0UCxjA.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-CMCmljb0.mjs → renderer-DWYmJSrl.mjs} +3 -3
- package/dist/{renderer-CMCmljb0.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
- package/dist/renderer-DYMrol1t.mjs +5 -0
- package/dist/{renderer-CGpi8CDT.mjs → renderer-DYeNNc_G.mjs} +4 -4
- package/dist/{renderer-CGpi8CDT.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
- package/dist/{renderer-DKFaVaRJ.mjs → renderer-DYlx7VHo.mjs} +4 -4
- package/dist/{renderer-DKFaVaRJ.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
- package/dist/{renderer-DZIxduEt.mjs → renderer-D_m6Qbsi.mjs} +3 -3
- package/dist/{renderer-DZIxduEt.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
- package/dist/renderer-DekeUHaz.mjs +5 -0
- package/dist/{renderer-snjhPaP-.mjs → renderer-DhGZ41hQ.mjs} +4 -4
- package/dist/{renderer-snjhPaP-.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
- package/dist/{renderer-BXGuCnCJ.mjs → renderer-DiZkZ0Pr.mjs} +4 -4
- package/dist/{renderer-BXGuCnCJ.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
- package/dist/{renderer-BBjkX0Vt.mjs → renderer-Dm57W73p.mjs} +3 -3
- package/dist/renderer-Dt5uyJdZ.mjs +5 -0
- package/dist/{renderer-DwH5e3hx.mjs → renderer-DtFZbE1j.mjs} +3 -3
- package/dist/{renderer-Bxiiar50.mjs → renderer-DvHi_wXE.mjs} +4 -4
- package/dist/{renderer-Bxiiar50.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
- package/dist/{renderer-DaLy1dFA.mjs → renderer-Dv_iRIyx.mjs} +21 -21
- package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
- package/dist/renderer-DwLQAnaK.mjs +5 -0
- package/dist/{renderer-qVJdxbXB.mjs → renderer-DzON3wDZ.mjs} +4 -4
- package/dist/{renderer-qVJdxbXB.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
- package/dist/{renderer-Dj54y3h3.mjs → renderer-GIlQ9lZq.mjs} +3 -3
- package/dist/{renderer-Dj54y3h3.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
- package/dist/{renderer-b0H3oDae.mjs → renderer-HKv5cBdp.mjs} +3 -3
- package/dist/{renderer-b0H3oDae.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-t1sXDiqm.mjs → renderer-QbSrnPZU.mjs} +3 -3
- package/dist/{renderer-t1sXDiqm.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
- package/dist/renderer-RPu8RMav.mjs +5 -0
- package/dist/{renderer-Dp9FQKVP.mjs → renderer-TfeohPxt.mjs} +5 -5
- package/dist/{renderer-Dp9FQKVP.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
- package/dist/{renderer-BzTj_CeK.mjs → renderer-Y1kjtOto.mjs} +4 -4
- package/dist/{renderer-BzTj_CeK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
- package/dist/{renderer-LrAldCWN.mjs → renderer-YONlI6W-.mjs} +5 -5
- package/dist/{renderer-LrAldCWN.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
- package/dist/{renderer-tRi3KNoG.mjs → renderer-_J9JcCMR.mjs} +5 -5
- package/dist/{renderer-tRi3KNoG.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
- package/dist/renderer-dCqxd5N2.mjs +5 -0
- package/dist/{renderer-CcmxR6Fy.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
- package/dist/{renderer-CcmxR6Fy.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
- package/dist/renderer-lhjmE-Fp.mjs +5 -0
- package/dist/{renderer-TiaHrU5z.mjs → renderer-mDBoz0zT.mjs} +5 -5
- package/dist/{renderer-TiaHrU5z.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
- package/dist/{renderer-smP1F57W.mjs → renderer-pn52dzZz.mjs} +4 -4
- package/dist/{renderer-smP1F57W.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
- package/dist/renderer-u9cmBuvM.mjs +5 -0
- package/dist/{renderer-CNpq7rL-.mjs → renderer-uER8kn7f.mjs} +3 -3
- package/dist/{renderer-CNpq7rL-.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
- package/dist/{renderer-sMFJtt_H.mjs → renderer-uzU6dsdR.mjs} +3 -3
- package/dist/{renderer-sMFJtt_H.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
- package/dist/renderer-vH12jcpz.mjs +5 -0
- package/dist/{renderer-oBgCEqaM.mjs → renderer-yNWYqvvq.mjs} +4 -4
- package/dist/{renderer-oBgCEqaM.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
- package/dist/{renderer-Dy1xQOTu.mjs → renderer-zLi2qFGT.mjs} +4 -4
- package/dist/{renderer-Dy1xQOTu.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
- package/dist/sam/index.d.mts +3 -3
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +7 -7
- package/dist/signals/index.mjs +8 -8
- package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
- package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +3 -3
- package/dist/{src-BU6vm9sP-DFJ3phW0.mjs.map → src-BU6vm9sP-DdTHmCr4.mjs.map} +1 -1
- package/dist/{src-D7M8VTzv.mjs → src-DrP7fGJX.mjs} +41 -16
- package/dist/{src-D7M8VTzv.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
- package/dist/storage/index.d.mts +206 -0
- package/dist/storage/index.d.mts.map +1 -0
- package/dist/storage/index.mjs +3 -0
- package/package.json +67 -59
- package/dist/audio-afTBdB3U.d.mts.map +0 -1
- package/dist/cloud-COid1Ipa.mjs.map +0 -1
- package/dist/dist-B-OPY7Cs.mjs.map +0 -1
- package/dist/dist-BSqeChht.mjs.map +0 -1
- package/dist/index-BNClElng.d.mts.map +0 -1
- package/dist/index-CTv9ZieD.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Fliv2Z-w.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BUtt481A.mjs.map +0 -1
- package/dist/preview-engine/chunk-5SLBE2FX.mjs +0 -1
- package/dist/preview-engine/chunk-74J4DJQA.mjs +0 -1
- package/dist/preview-engine/chunk-KIPXBOYG.mjs +0 -1974
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-UKZVUYB6.mjs +0 -483
- package/dist/preview-engine/renderers-PSBTV2DO.mjs +0 -228
- package/dist/preview-engine/renderers-TEKHQHCL.mjs +0 -1
- package/dist/preview-engine/renderers-U3RLYFCN.mjs +0 -1
- package/dist/preview-engine/renderers-V5HM6PZ2.mjs +0 -1
- package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +0 -1
- package/dist/program-Cvv_nb9T.mjs.map +0 -1
- package/dist/renderer--RJepuOy.mjs +0 -5
- package/dist/renderer-B1U6YRRV.d.mts +0 -117
- package/dist/renderer-B1U6YRRV.d.mts.map +0 -1
- package/dist/renderer-B4NFnaty.mjs +0 -5
- package/dist/renderer-B6g4ts0e.mjs +0 -5
- package/dist/renderer-BGoAr-tl.mjs +0 -5
- package/dist/renderer-BSOdBgdE.mjs +0 -5
- package/dist/renderer-BU6O0fpM.mjs +0 -5
- package/dist/renderer-BZ97iidG.mjs +0 -5
- package/dist/renderer-B_Klh1VT.mjs +0 -5
- package/dist/renderer-BaWQM1y-.mjs +0 -5
- package/dist/renderer-Bc0jvAj0.mjs +0 -5
- package/dist/renderer-Bd-NuU3M.mjs +0 -3
- package/dist/renderer-Bm077kZ6.mjs +0 -5
- package/dist/renderer-BtzE_e_Y.mjs +0 -5
- package/dist/renderer-C225eCAo.mjs +0 -5
- package/dist/renderer-CC4fhNup.mjs +0 -3
- package/dist/renderer-CLXdR4vz.mjs +0 -5
- package/dist/renderer-CszM8B3C.mjs +0 -5
- package/dist/renderer-Ctp8ZYfk.mjs +0 -5
- package/dist/renderer-CxQdSp8I.mjs +0 -5
- package/dist/renderer-D3YbHjRG.mjs.map +0 -1
- package/dist/renderer-D4GMRtDd.mjs +0 -6
- package/dist/renderer-DEsGIvTZ.mjs +0 -5
- package/dist/renderer-DIaUQ0EP.mjs +0 -5
- package/dist/renderer-DLjqcNzQ.mjs +0 -5
- package/dist/renderer-DMuQZa51.mjs +0 -5
- package/dist/renderer-DOgi2aF2.mjs +0 -5
- package/dist/renderer-DSh7cvi4.mjs +0 -5
- package/dist/renderer-DV1LVBBP.mjs +0 -5
- package/dist/renderer-DaLy1dFA.mjs.map +0 -1
- package/dist/renderer-Dhrj2bJz.mjs +0 -5
- package/dist/renderer-DoFUu1R4.mjs +0 -5
- package/dist/renderer-DsydX3cx.mjs +0 -5
- package/dist/renderer-DxVSoeYi.mjs +0 -5
- package/dist/renderer-Nc9bHb0n.mjs +0 -5
- package/dist/renderer-TFaSD2Db.mjs +0 -5
- package/dist/renderer-Z61ctppe.mjs +0 -5
- package/dist/renderer-awXf3sNS.mjs +0 -5
- package/dist/renderer-cHT28oYI.mjs +0 -5
- package/dist/renderer-g7Y3bFot.mjs +0 -5
- package/dist/renderer-qVv0OzVc.mjs +0 -5
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import{a as bt,b as Pt,c as Wt}from"./chunk-JAAFSVAG.mjs";import{c as Et,d as $t,e as K}from"./chunk-CSLSWUUT.mjs";import{b as gt}from"./chunk-OBIJIQCZ.mjs";import{e as It}from"./chunk-GXFYRMJZ.mjs";import{B as Nt,c as zt,e as Vt,y as D,z as F}from"./chunk-64L4GUOF.mjs";import{a as A}from"./chunk-354GX6IB.mjs";import{g as v}from"./chunk-Y4NIR77Z.mjs";v();function tr(r,t=180,e=12,n=1,i=0){if(r<=0)return 0;let o=Math.sqrt(Math.max(1e-4,t)/Math.max(1e-4,n)),s=e/(2*Math.sqrt(Math.max(1e-4,t*n)));if(s<1){let l=o*Math.sqrt(1-s*s),a=Math.exp(-s*o*r),u=-1,c=(i-s*o*-1)/Math.max(1e-6,l),h=a*(u*Math.cos(l*r)+c*Math.sin(l*r));return Math.min(2,Math.max(-1,1+h))}else if(Math.abs(s-1)<1e-4){let l=Math.exp(-o*r);return 1+(-1+(i-o)*r)*l}else{let l=-o*(s-Math.sqrt(s*s-1)),a=-o*(s+Math.sqrt(s*s-1)),u=(i+a)/Math.max(1e-6,l-a),c=-1-u;return 1+(u*Math.exp(l*r)+c*Math.exp(a*r))}}function er(r,t=0){if(r===0)return[1,0,0,1];let e=r*Math.PI/180,n=t*Math.PI/180,i=Math.cos(n),o=Math.sin(n),s=Math.tan(e),l=1-s*i*o,a=s*i*i,u=-s*o*o,c=1+s*o*i;return[l,a,u,c]}function rr(r,t){let e=t.anchorX,n=t.anchorY;switch(t.preset){case"center":e=.5,n=.5;break;case"baseline":e=.5,n=r.height>0?r.ascender/r.height:.8;break;case"bottom_left":e=0,n=1;break;case"bottom_center":e=.5,n=1;break;case"bottom_right":e=1,n=1;break;case"top_left":e=0,n=0;break;case"top_center":e=.5,n=0;break;case"top_right":e=1,n=0;break;default:e=.5,n=.5;break}let i=(e-.5)*r.width+t.offsetX,o=(n-.5)*r.height+t.offsetY;return{px:i,py:o}}function nr(r,t,e,n=0){if(e===0||t<=1)return 0;let i=n*(t-1);return(r-i)*e}function ir(r,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,a,u)=>Math.max(a,Math.min(u,l)),noise:l=>{let a=Math.sin(l*12.9898+t.frame*.1)*43758.5453;return(a-Math.floor(a))*2-1},signals:t.signals??{}},n=Object.keys(e),i=Object.values(e),o=new Function(...n,`return (${r});`),s=Number(o(...i));return Number.isFinite(s)?Math.max(-1,Math.min(1,s)):0}catch{return 0}}function or(r,t,e){let n=Math.max(1,t),i=n>1?r/(n-1):0,o=e.totalAngle*Math.PI/180,s=i*o,l=0,a=0,u=0,c=0,h=0,f=0,p=1;switch(e.mode){case"cylinder":{let x=e.totalAngle<360?(i-.5)*o:s;e.axis==="y"?(l=e.radius*Math.sin(x),u=e.radius*Math.cos(x)-e.radius,h=x*180/Math.PI):e.axis==="x"?(a=e.radius*Math.sin(x),u=e.radius*Math.cos(x)-e.radius,c=x*180/Math.PI):(l=e.radius*Math.sin(x),a=e.radius*Math.cos(x),f=x*180/Math.PI);let g=Math.cos(x);p=Math.max(.25,(g+1)*.5);break}case"vortex":{let g=-Math.PI/2+s,y=e.radius*(1-i*.35);l=y*Math.cos(g),a=y*Math.sin(g),u=-r*e.pitch||0;let b=-.35*e.radius/(o||1),M=b*Math.cos(g)-y*Math.sin(g),U=b*Math.sin(g)+y*Math.cos(g);f=Math.atan2(U,M)*180/Math.PI,p=Math.max(.65,1-i*.35);break}case"helix":{if(e.axis==="x"){let x=e.pitch>10?e.pitch:28;l=(r-(n-1)/2)*x,a=e.radius*Math.sin(s),u=e.radius*Math.cos(s)-e.radius,c=Math.sin(s)*22,p=.75+.25*((Math.cos(s)+1)*.5)}else{let x=(i-.5)*o;l=e.radius*Math.sin(x),a=(r-(n-1)/2)*e.pitch,u=e.radius*Math.cos(x)-e.radius,h=x*180/Math.PI;let g=Math.cos(x);p=Math.max(.65,(g+1)*.5)}break}default:{u=0;break}}let m=Math.max(100,e.perspective??1200),d=m-u,P=d>1?m/d:1;return{x:l*P,y:a*P,z:u,rotX:c,rotY:h,rotZ:f,scaleMult:Math.max(.1,P),depthOpacity:p}}function sr(r,t,e,n,i){let s=(t>0?Math.max(t,e):e)+n.repeatGap;if(s<=0)return r;let l=n.velocity*i;if(n.snap?.enabled){let a=n.snap.stopIndex??0,u=n.snap.granularity==="character"?40:120,c=a*u,h=Math.min(1,i*1.5);l=l*(1-h)+c*h}if((n.direction==="right"||n.direction==="down")&&(l=-l),n.loop){let a=(r-l)%s;return a<-e?a+s:a}return r-l}function ar(r,t,e,n,i,o){let s=Math.max(1,t),l=s>1?r/(s-1):.5,a=Math.max(20,e.minFreqHz),u=Math.max(a+100,e.maxFreqHz),c=a*(u/a)**l,h=0,f=It.getChannelSamples(e.signalChannel,"primary");if(f&&f.length>0){let m=o>0?o:24,d=Math.max(0,Math.min(f.length-1,Math.round(i/m*24)));h=Number(f[d])||0}else if(n){let m=n[e.signalChannel];if(typeof m=="number")h=m;else if(typeof m=="function")h=Number(m(i,o,c))||0;else if(typeof m=="object"&&m!==null){let d=m;if(typeof d.get=="function")h=Number(d.get({frame:i,fps:o,freq:c}))||0;else if(Array.isArray(d.samples)||ArrayBuffer.isView(d.samples)){let P=d.samples,x=Math.floor(l*(P.length-1));h=Number(P[x])||0}}}let p=Math.max(0,Math.min(1,h));return e.minScale+p*(e.maxScale-e.minScale)}v();function cr(r,t,e,n,i,o=0,s=0){let l=t+n,a=e+n;if(a<=l)return 0;let u=(r-l)/(a-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(o!==0&&c>.5){let h=(c-.5)*2,f=o>0?1+o*3:1/(1-o*3);c=.5+.5*h**f}if(s!==0&&c<=.5){let h=c*2,f=s>0?1+s*3:1/(1-s*3);c=.5*h**f}}return Math.max(0,Math.min(1,c))}function hr(r,t,e,n){let i=(t*(1-n)+n)*12.9898+e+r*78.233,o=Math.sin(i)*43758.5453;return(o-Math.floor(o))*2-1}function fr(r,t){let e=t,n=()=>(e=(e*9301+49297)%233280,e/233280),i=Array.from({length:r},(o,s)=>s);for(let o=i.length-1;o>0;o--){let s=Math.floor(n()*(o+1)),l=i[o];i[o]=i[s],i[s]=l}return i}function pr(r,t,e){switch(e){case"add":return Math.max(0,Math.min(1,r+t));case"subtract":return Math.max(0,Math.min(1,r-t));case"intersect":return r*t;case"min":return Math.min(r,t);case"max":return Math.max(r,t);case"difference":return Math.abs(r-t)}}v();var jt={ascii:"!@#$%^&*()_+{}[]:;<>,.?",alphanumeric:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",matrix:"010101<>[]{}+=*~#%&!?/\\:;|X0123456789",binary:"01",hex:"0123456789ABCDEF"};function me(r,t){return r==="custom"&&t&&t.length>0?t:jt[r]??jt.alphanumeric}function xr(r,t,e,n,i={mode:"human",jitter:.35,commaPauseMultiplier:3,sentencePauseMultiplier:5.5,paragraphPauseMultiplier:7},o={enabled:!1,charset:"alphanumeric",scrambleFramesPerChar:8,highlightProbability:.25},s=2,l="character",a){if(a===void 0&&t<e)return{visibleChars:0,currentDisplayString:"",isCursorVisible:!1};let u=a!==void 0?Math.max(0,Math.min(1,a)):Math.min(1,(t-e)/Math.max(1,n)),c=a!==void 0?u*n:t-e,h=r.length,f=Math.floor(u*h);if(l==="word"){let d=r.split(/(\s+)/),P=[];d.forEach((g,y)=>{g.trim().length>0&&P.push(y)});let x=Math.min(P.length,Math.floor(u*(P.length+1)));if(x<=0)f=0;else{let g=P[Math.min(P.length-1,x-1)];f=d.slice(0,g+1).join("").length}}else if(l==="line"){let d=r.split(`
|
|
2
|
+
`),P=Math.min(d.length,Math.floor(u*(d.length+1)));f=d.slice(0,P).join(`
|
|
3
|
+
`).length}else if(i.mode==="human"&&u<1){let d=0,P=0,x=n/Math.max(1,h);for(let g=0;g<h;g++){let y=r[g],b=1,M=i.commaPauseMultiplier??3,U=i.sentencePauseMultiplier??5.5,C=i.paragraphPauseMultiplier??7,T=i.jitter??.35;y===","||y===";"?b=M:y==="."||y==="!"||y==="?"?b=U:y===`
|
|
4
|
+
`&&(b=C);let _=1+Math.sin(g*17.3+42)*.5*T,k=x*b*_;if(P+=k,P<=c)d=g+1;else break}f=Math.min(h,d)}let p=r.slice(0,f);if(o.enabled&&f<h&&f>0){let d=me(o.charset,o.customCharset),P=Math.min(f,Math.max(1,o.scrambleFramesPerChar>4?3:2)),x="";for(let g=0;g<P;g++){let y=Math.floor(Math.abs(Math.sin(t*7+g*13))*d.length)%d.length;x+=d[y]}p=p.slice(0,p.length-P)+x}let m=!0;if(s>0){let d=Math.max(1,Math.round(30/(2*s)));m=Math.floor(c/d)%2===0}return{visibleChars:f,currentDisplayString:p,isCursorVisible:m}}v();v();var Ht=`
|
|
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 de=`
|
|
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
|
+
`,vt=class{textures=[];texturesByKey=new Map;index=0;getTexture(t,e,n,i,o){let s=new Set(Array.isArray(o)?o:o?[o]:[]),l=`${e}x${n}:${i}`,a=this.texturesByKey.get(l);if(a)for(let c=0;c<a.length;c++){let h=a[c];if(!s.has(h)){a.splice(c,1),a.unshift(h);let f=this.textures.indexOf(h);return f>=this.index&&(this.textures.splice(f,1),this.textures.splice(this.index,0,h),this.index++),h}}let u=t.createTexture({size:[e,n],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}},xe={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},Q=class{device;compositeUniformLayout;dualTextureLayout;motionBlurUniformLayout;singleTextureLayout;compositePipeline;motionBlurPipeline;compositePool;motionBlurPool;texturePool;compositeUniformBindGroupCache=new F;motionBlurUniformBindGroupCache=new F;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(t,e){this.device=t,this.compositePool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new vt,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 n=t.createPipelineLayout({bindGroupLayouts:[this.compositeUniformLayout,this.dualTextureLayout]}),i=t.createShaderModule({label:"composite.wgsl",code:Ht});this.compositePipeline=t.createRenderPipeline({label:"CompositePipeline",layout:n,vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}});let o=t.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),s=t.createShaderModule({label:"motion-blur-2d.wgsl",code:de});this.motionBlurPipeline=t.createRenderPipeline({label:"MotionBlurPipeline",layout:o,vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(t,e,n,i,o){return this.texturePool.getTexture(t,e,n,i,o)}getBuffer(t,e){return this.compositePool.getBuffer(t,e)}composite(t,e,n,i,o,s,l,a){let u=n.getSampler(this.device),c=[i,o];a&&(Array.isArray(a)?c.push(...a):c.push(a));let h=this.texturePool.getTexture(this.device,i.width,i.height,l,c);this.compositeData[0]=xe[s]??0;let f=this.compositePool.getBuffer(this.device,this.compositeData),p=t.beginRenderPass({colorAttachments:[{view:h.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});p.setPipeline(this.compositePipeline);let m=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,f);p.setBindGroup(0,m);let d=e.getCompositeBindGroup(this.device,this.dualTextureLayout,i,o,u);return p.setBindGroup(1,d),p.draw(4),p.end(),h}applyMotionBlur(t,e,n,i,o,s,l=180,a=16,u,c){if(Math.abs(o)<.1&&Math.abs(s)<.1||l<=0)return i;let h=n.getSampler(this.device),f=[i];c&&(Array.isArray(c)?f.push(...c):f.push(c));let p=this.texturePool.getTexture(this.device,i.width,i.height,u,f);this.motionBlurData[0]=o/i.width,this.motionBlurData[1]=s/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=l/360,this.motionBlurData[5]=a,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let m=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),d=t.beginRenderPass({colorAttachments:[{view:p.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});d.setPipeline(this.motionBlurPipeline);let P=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,m);return d.setBindGroup(0,P),d.setBindGroup(1,e.getBindGroup(this.device,this.singleTextureLayout,i,h)),d.draw(3),d.end(),p}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};v();v();var J=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(t,e,n,i){let o=this.cache.get(n);o||(o=new Map,this.cache.set(n,o));let s=o.get(e);return s||(s=t.createBindGroup({layout:e,entries:[{binding:0,resource:n.createView()},{binding:1,resource:i}]}),o.set(e,s)),s}getCompositeBindGroup(t,e,n,i,o){let s=this.dualCache.get(n);s||(s=new WeakMap,this.dualCache.set(n,s));let l=s.get(i);l||(l=new Map,s.set(i,l));let a=l.get(e);return a||(a=t.createBindGroup({layout:e,entries:[{binding:0,resource:n.createView()},{binding:1,resource:i.createView()},{binding:2,resource:o}]}),l.set(e,a)),a}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};v();var tt=class{scissorStack=[];stencilStack=[];pushScissor(t,e,n){this.scissorStack.push({rect:t,surfaceWidth:e,surfaceHeight:n})}popScissor(){this.scissorStack.length>0&&this.scissorStack.pop()}saveScissors(){return[...this.scissorStack]}restoreScissors(t){this.scissorStack=[...t]}clearScissors(){this.scissorStack=[]}getCurrentScissor(t,e){let n=this.scissorStack[this.scissorStack.length-1];if(n&&!(t!==void 0&&e!==void 0&&n.surfaceWidth!==void 0&&n.surfaceHeight!==void 0&&n.surfaceWidth!==0&&n.surfaceHeight!==0&&(n.surfaceWidth!==t||n.surfaceHeight!==e)))return n.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,n){let i=this.getCurrentScissor(e,n);if(!i){t.setScissorRect(0,0,Math.max(1,Math.floor(e)),Math.max(1,Math.floor(n)));return}let o=Math.max(0,Math.floor(i.x)),s=Math.max(0,Math.floor(i.y)),l=Math.min(e,Math.ceil(i.x+i.width)),a=Math.min(n,Math.ceil(i.y+i.height)),u=Math.max(0,l-o),c=Math.max(0,a-s);if(!Number.isFinite(o)||!Number.isFinite(s)||!Number.isFinite(u)||!Number.isFinite(c)||u<=0||c<=0)t.setScissorRect(0,0,1,1);else{let h=Math.min(u,Math.max(0,e-o)),f=Math.min(c,Math.max(0,n-s));h<=0||f<=0?t.setScissorRect(0,0,1,1):t.setScissorRect(Math.floor(o),Math.floor(s),Math.floor(h),Math.floor(f))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};v();v();v();var H=new Set,Mt=!1;function ot(r,t,e=2){let n=t&&t.length,i=n?t[0]*e:r.length;H.size&&H.clear();let o=Xt(r,0,i,e,!0),s=[];if(!o||o.next===o.prev)return s;let l=0,a=0,u=0;if(n&&(o=ve(r,t,o,e)),r.length>80*e){l=r[0],a=r[1];let c=l,h=a;for(let f=e;f<i;f+=e){let p=r[f],m=r[f+1];p<l&&(l=p),m<a&&(a=m),p>c&&(c=p),m>h&&(h=m)}u=Math.max(c-l,h-a),u=u!==0?32767/u:0}return St(o,s,l,a,u),s}function Xt(r,t,e,n,i){let o=null;if(i===Le(r,t,e,n)>0)for(let s=t;s<e;s+=n)o=Zt(s/n|0,r[s],r[s+1],o);else for(let s=e-n;s>=t;s-=n)o=Zt(s/n|0,r[s],r[s+1],o);return o&&Y(o,o.next)&&(Z(o),o=o.next),o}function E(r,t=r){let e=t===r,n=r,i;do i=!1,n!==n.next&&(H.size===0||!H.has(n))&&(Y(n,n.next)||w(n.prev,n,n.next)===0)?((e||n===t)&&(t=n.prev),Mt=!0,Z(n),n=n.prev,i=!0):(e||n!==t)&&(n=n.next,i=!e);while(i||n!==t);return t}function St(r,t,e,n,i){i&&Be(r,e,n,i);let o=r,s=!1;for(;r.prev!==r.next;){let l=r.prev,a=r.next;if(w(l,r,a)<0&&(i?ge(r,e,n,i):ye(r))){t.push(l.i,r.i,a.i),Z(r),r=a,o=a;continue}if(r=a,r===o){if(Mt=!1,r=E(r),Mt){o=r;continue}if(!s){r=be(r,t),o=r,s=!0;continue}Pe(r,t,e,n,i);break}}}function ye(r){let t=r.prev,e=r,n=r.next,i=t.x,o=e.x,s=n.x,l=t.y,a=e.y,u=n.y,c=Math.min(i,o,s),h=Math.min(l,a,u),f=Math.max(i,o,s),p=Math.max(l,a,u),m=n.next;for(;m!==t;){if(m.x>=c&&m.x<=f&&m.y>=h&&m.y<=p&&!(i===m.x&&l===m.y)&&it(i,l,o,a,s,u,m.x,m.y)&&w(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function ge(r,t,e,n){let i=r.prev,o=r,s=r.next,l=i.x,a=o.x,u=s.x,c=i.y,h=o.y,f=s.y,p=Math.min(l,a,u),m=Math.min(c,h,f),d=Math.max(l,a,u),P=Math.max(c,h,f),x=Ct(p,m,t,e,n),g=Ct(d,P,t,e,n),y=r.prevZ;for(;y&&y.z>=x;){if(y.x>=p&&y.x<=d&&y.y>=m&&y.y<=P&&y!==s&&!(l===y.x&&c===y.y)&&it(l,c,a,h,u,f,y.x,y.y)&&w(y.prev,y,y.next)>=0)return!1;y=y.prevZ}let b=r.nextZ;for(;b&&b.z<=g;){if(b.x>=p&&b.x<=d&&b.y>=m&&b.y<=P&&b!==s&&!(l===b.x&&c===b.y)&&it(l,c,a,h,u,f,b.x,b.y)&&w(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function be(r,t){let e=r,n=!1;do{let i=e.prev,o=e.next.next;Jt(i,e,e.next,o,!1)&&q(i,o)&&q(o,i)&&(t.push(i.i,e.i,o.i),Z(e),Z(e.next),e=r=o,n=!0),e=e.next}while(e!==r);return n?E(e):e}function Pe(r,t,e,n,i){let o=r;do{let s=o.next.next;for(;s!==o.prev;){if(o.i!==s.i&&ke(o,s)){let l=te(o,s);o=E(o,o.next),l=E(l,l.next),St(o,t,e,n,i),St(l,t,e,n,i);return}s=s.next}o=o.next}while(o!==r)}var Gt=!1;function ve(r,t,e,n){let i=[];for(let o=0,s=t.length;o<s;o++){let l=t[o]*n,a=o<s-1?t[o+1]*n:r.length,u=Xt(r,l,a,n,!1);u===u.next&&H.add(u),i.push(De(u))}i.sort(Me),Ge(r.length/n,t.length),Qt(e,e),Gt=!0;for(let o=0;o<i.length;o++)e=Se(i[o],e);return Gt=!1,E(e)}function Me(r,t){return r.x-t.x||r.y-t.y||(r.next.y-r.y)/(r.next.x-r.x)-(t.next.y-t.y)/(t.next.x-t.x)}function Se(r,t){let e=Ue(r,t);if(!e)return t;let n=te(e,r),i=n.next;return Qt(e,i.next),E(n,n.next),E(e,e.next)}var Kt=16,G=new Float64Array(0),nt=0,wt=[],Ut=[];function Ge(r,t){let e=Math.ceil((r+2*t)/Kt)+t+2;G.length<e*4&&(G=new Float64Array(e*4)),nt=0}function Qt(r,t){let e=r;do{let n=nt++;wt[n]=e;let i=e.x,o=e.y,s=e.x,l=e.y,a=0;do{let c=e.next;e.z=n,c.x<i&&(i=c.x),c.x>s&&(s=c.x),c.y<o&&(o=c.y),c.y>l&&(l=c.y),e=c}while(++a<Kt&&e!==t);Ut[n]=e;let u=n*4;G[u]=i,G[u+1]=o,G[u+2]=s,G[u+3]=l}while(e!==t)}function we(r,t){let e=r.z*4;t.x<G[e]&&(G[e]=t.x),t.y<G[e+1]&&(G[e+1]=t.y),t.x>G[e+2]&&(G[e+2]=t.x),t.y>G[e+3]&&(G[e+3]=t.y)}function Yt(r){let t=Ut[r];for(;t.prev.next!==t;)t=t.next;return Ut[r]=t,t}function qt(r){let t=wt[r];for(;t.prev.next!==t;)t=t.next;return wt[r]=t,t}function Ue(r,t){let e=t,n=r.x,i=r.y,o=-1/0,s;if(Y(r,e))return e;for(let f=0,p=0;f<nt;f++,p+=4){if(i<G[p+1]||i>G[p+3]||G[p]>n||G[p+2]<=o)continue;let m=Yt(f);e=qt(f);do{if(e.prev.next===e){if(Y(r,e.next))return e.next;if(i<=e.y&&i>=e.next.y&&e.next.y!==e.y){let d=e.x+(i-e.y)*(e.next.x-e.x)/(e.next.y-e.y);if(d<=n&&d>o&&(o=d,s=e.x<e.next.x?e:e.next,d===n))return s}}e=e.next}while(e!==m)}if(!s)return null;let l=s.x,a=s.y,u=Math.min(i,a),c=Math.max(i,a),h=1/0;for(let f=0,p=0;f<nt;f++,p+=4){if(G[p+2]<l||G[p]>n||G[p+3]<u||G[p+1]>c)continue;let m=Yt(f);e=qt(f);do{if(e.prev.next===e&&n>=e.x&&e.x>=l&&n!==e.x&&it(i<a?n:o,i,l,a,i<a?o:n,i,e.x,e.y)){let d=Math.abs(i-e.y)/(n-e.x);(q(e,r)||e.y===i&&e.next.y===i&&e.next.x>n)&&(d<h||d===h&&(e.x>s.x||e.x===s.x&&Ce(s,e)))&&(s=e,h=d)}e=e.next}while(e!==m)}return s}function Ce(r,t){return w(r.prev,r,t.prev)<0&&w(t.next,r,r.next)<0}var B=[],I=[],O=new Uint32Array(0),N=new Uint32Array(0),j=new Uint32Array(256);function Be(r,t,e,n){let i=r,o=0;do i.z=Ct(i.x,i.y,t,e,n),B[o++]=i,i=i.next;while(i!==r);Te(o);let s=null;for(let l=0;l<o;l++){let a=B[l];a.prevZ=s,s&&(s.nextZ=a),s=a}s.nextZ=null,B.fill(null,0,o),I.fill(null,0,o)}function Te(r){if(r<=32){for(let t=1;t<r;t++){let e=B[t],n=e.z,i=t-1;for(;i>=0&&B[i].z>n;)B[i+1]=B[i],i--;B[i+1]=e}return}O.length<r&&(O=new Uint32Array(r),N=new Uint32Array(r),I=new Array(r));for(let t=0;t<r;t++)O[t]=B[t].z;et(r,B,O,I,N,0),et(r,I,N,B,O,8),et(r,B,O,I,N,16),et(r,I,N,B,O,24)}function et(r,t,e,n,i,o){j.fill(0);for(let l=0;l<r;l++)j[e[l]>>>o&255]++;let s=0;for(let l=0;l<256;l++){let a=j[l];j[l]=s,s+=a}for(let l=0;l<r;l++){let a=e[l],u=j[a>>>o&255]++;n[u]=t[l],i[u]=a}}function Ct(r,t,e,n,i){return r=(r-e)*i|0,t=(t-n)*i|0,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,r|t<<1}function De(r){let t=r,e=r;do(t.x<e.x||t.x===e.x&&t.y<e.y)&&(e=t),t=t.next;while(t!==r);return e}function it(r,t,e,n,i,o,s,l){return(i-s)*(t-l)>=(r-s)*(o-l)&&(r-s)*(n-l)>=(e-s)*(t-l)&&(e-s)*(o-l)>=(i-s)*(n-l)}function ke(r,t){let e=Y(r,t)&&w(r.prev,r,r.next)>0&&w(t.prev,t,t.next)>0;return r.next.i!==t.i&&(e||q(r,t)&&q(t,r)&&(w(r.prev,r,t.prev)!==0||w(r,t.prev,t)!==0))&&!_e(r,t)&&(e||Fe(r,t))}function w(r,t,e){return(t.y-r.y)*(e.x-t.x)-(t.x-r.x)*(e.y-t.y)}function Y(r,t){return r.x===t.x&&r.y===t.y}function Jt(r,t,e,n,i=!0){let o=w(r,t,e),s=w(r,t,n),l=w(e,n,r),a=w(e,n,t);return(o>0&&s<0||o<0&&s>0)&&(l>0&&a<0||l<0&&a>0)?!0:i?!!(o===0&&rt(r,e,t)||s===0&&rt(r,n,t)||l===0&&rt(e,r,n)||a===0&&rt(e,t,n)):!1}function rt(r,t,e){return t.x<=Math.max(r.x,e.x)&&t.x>=Math.min(r.x,e.x)&&t.y<=Math.max(r.y,e.y)&&t.y>=Math.min(r.y,e.y)}function _e(r,t){let e=Math.min(r.x,t.x),n=Math.max(r.x,t.x),i=Math.min(r.y,t.y),o=Math.max(r.y,t.y),s=r;do{let l=s.next;if(s.x>n&&l.x>n||s.x<e&&l.x<e||s.y>o&&l.y>o||s.y<i&&l.y<i){s=l;continue}if(s.i!==r.i&&l.i!==r.i&&s.i!==t.i&&l.i!==t.i&&Jt(s,l,r,t))return!0;s=l}while(s!==r);return!1}function q(r,t){return w(r.prev,r,r.next)<0?w(r,t,r.next)>=0&&w(r,r.prev,t)>=0:w(r,t,r.prev)<0||w(r,r.next,t)<0}function Fe(r,t){let e=r,n=!1,i=(r.x+t.x)/2,o=(r.y+t.y)/2;do{let s=e.next;e.y>o!=s.y>o&&i<(s.x-e.x)*(o-e.y)/(s.y-e.y)+e.x&&(n=!n),e=s}while(e!==r);return n}function te(r,t){let e=Bt(r.i,r.x,r.y),n=Bt(t.i,t.x,t.y),i=r.next,o=t.prev;return r.next=t,t.prev=r,e.next=i,i.prev=e,n.next=e,e.prev=n,o.next=n,n.prev=o,n}function Zt(r,t,e,n){let i=Bt(r,t,e);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Z(r){r.next.prev=r.prev,r.prev.next=r.next,r.prevZ&&(r.prevZ.nextZ=r.nextZ),r.nextZ&&(r.nextZ.prevZ=r.prevZ),Gt&&we(r.prev,r.next)}function Bt(r,t,e){return{i:r,x:t,y:e,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function Le(r,t,e,n){let i=0;for(let o=t,s=e-n;o<e;o+=n)i+=(r[s]-r[o])*(r[o+1]+r[s+1]),s=o;return i}function Tt(r){let t=0;for(let e=0;e<r.length;e++){let n=r[e],i=r[(e+1)%r.length];t+=n.x*i.y-i.x*n.y}return t/2}function ee(r){let t=[];for(let e of r)t.push(e.x,e.y);return t}function Re(r){let t={x0:1/0,y0:1/0,x1:-1/0,y1:-1/0};for(let e of r)t.x0=Math.min(t.x0,e.x),t.y0=Math.min(t.y0,e.y),t.x1=Math.max(t.x1,e.x),t.y1=Math.max(t.y1,e.y);return t}function Ae(r){let t=ee(r),e=ot(t),n=s=>({x:t[s*2],y:t[s*2+1]}),i=-1,o=r[0];for(let s=0;s<e.length;s+=3){let l=n(e[s]),a=n(e[s+1]),u=n(e[s+2]),c=Math.abs((a.x-l.x)*(u.y-l.y)-(u.x-l.x)*(a.y-l.y));c>i&&(i=c,o={x:(l.x+a.x+u.x)/3,y:(l.y+a.y+u.y)/3})}return o}function Oe(r,t){let e=!1;for(let n=0,i=r.length-1;n<r.length;i=n++){let o=r[n],s=r[i];o.y>t.y!=s.y>t.y&&t.x<(s.x-o.x)*(t.y-o.y)/(s.y-o.y)+o.x&&(e=!e)}return e}var Ee=(r,t)=>r.box.x0<=t.box.x0&&r.box.y0<=t.box.y0&&r.box.x1>=t.box.x1&&r.box.y1>=t.box.y1&&Oe(r.points,t.inside);function re(r){let t=r.map(i=>({points:i,area:Tt(i),box:Re(i),inside:Ae(i),parent:-1,winding:0})),e=t.map((i,o)=>o).sort((i,o)=>Math.abs(t[o].area)-Math.abs(t[i].area));e.forEach((i,o)=>{let s=t[i];for(let a=o-1;a>=0;a--){let u=e[a];if(Ee(t[u],s)){s.parent=u;break}}let l=s.parent>=0?t[s.parent].winding:0;s.winding=l+Math.sign(s.area)});let n=[];return t.forEach((i,o)=>{if(i.winding===0)return;let s=ee(i.points),l=[];for(let a of t)if(a.parent===o){l.push(s.length/2);for(let u of a.points)s.push(u.x,u.y)}for(let a of ot(s,l))n.push(s[a*2],s[a*2+1])}),new Float32Array(n)}function ne(r,t,e,n,i=24){let o=[],s=r;for(let l=1;l<=i;l++){let a=l/i,u=1-a,c=u*u,h=c*u,f=a*a,p=f*a,m={x:h*r.x+3*c*a*t.x+3*u*f*e.x+p*n.x,y:h*r.y+3*c*a*t.y+3*u*f*e.y+p*n.y};o.push({p0:s,p1:m}),s=m}return o}function ie(r,t,e,n=16){let i=[],o=r;for(let s=1;s<=n;s++){let l=s/n,a=1-l,u=a*a,c=l*l,h={x:u*r.x+2*a*l*t.x+c*e.x,y:u*r.y+2*a*l*t.y+c*e.y};i.push({p0:o,p1:h}),o=h}return i}function $e(r,t,e,n,i,o,s){let l=Math.abs(t),a=Math.abs(e);if(l<1e-9||a<1e-9)return[{p0:r,p1:s}];if(Math.hypot(s.x-r.x,s.y-r.y)<1e-9)return[];let u=n*Math.PI/180,c=Math.cos(u),h=Math.sin(u),f=(r.x-s.x)/2,p=(r.y-s.y)/2,m=c*f+h*p,d=-h*f+c*p,P=m*m/(l*l)+d*d/(a*a);P>1&&(l*=Math.sqrt(P),a*=Math.sqrt(P));let x=l*l*a*a-l*l*d*d-a*a*m*m,g=l*l*d*d+a*a*m*m,y=(i===o?-1:1)*Math.sqrt(Math.max(0,x/g)),b=y*l*d/a,M=-y*a*m/l,U=c*b-h*M+(r.x+s.x)/2,C=h*b+c*M+(r.y+s.y)/2,T=(R,z,V,W)=>Math.atan2(R*W-z*V,R*V+z*W),_=T(1,0,(m-b)/l,(d-M)/a),k=T((m-b)/l,(d-M)/a,(-m-b)/l,(-d-M)/a);!o&&k>0&&(k-=2*Math.PI),o&&k<0&&(k+=2*Math.PI);let yt=Math.max(4,Math.ceil(Math.abs(k)/(2*Math.PI)*64)),Rt=[],At=r;for(let R=1;R<=yt;R++){let z=_+k*R/yt,V=l*Math.cos(z),W=a*Math.sin(z),Ot=R===yt?s:{x:c*V-h*W+U,y:h*V+c*W+C};Rt.push({p0:At,p1:Ot}),At=Ot}return Rt}function Dt(r){return oe(r).segments}function oe(r){let t=[],e=[];if(!r||typeof r!="string")return{segments:t,subpaths:e};let n=-1,i=(...p)=>{for(let m of p)t.push(m),e.push(n)},o=[],s=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,l;for(;(l=s.exec(r))!==null;)l[1]?o.push(l[1]):l[2]&&o.push(parseFloat(l[2]));let a=0,u={x:0,y:0},c={x:0,y:0},h=null,f=null;for(;a<o.length;){let p=o[a++];if(typeof p!="string")continue;let m=p,d=m===m.toLowerCase(),P=m.toUpperCase(),x=()=>a<o.length&&typeof o[a]=="number"?o[a++]:0;switch(P){case"M":{let g=!0;for(;a<o.length&&typeof o[a]=="number";){let y=x(),b=x();d&&(y+=u.x,b+=u.y),g?(u={x:y,y:b},c={x:y,y:b},n++,g=!1):(i({p0:u,p1:{x:y,y:b}}),u={x:y,y:b})}h=null,f=null;break}case"L":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x();d&&(g+=u.x,y+=u.y),i({p0:u,p1:{x:g,y}}),u={x:g,y}}h=null,f=null;break}case"H":{for(;a<o.length&&typeof o[a]=="number";){let g=x();d&&(g+=u.x);let y={x:g,y:u.y};i({p0:u,p1:y}),u=y}h=null,f=null;break}case"V":{for(;a<o.length&&typeof o[a]=="number";){let g=x();d&&(g+=u.y);let y={x:u.x,y:g};i({p0:u,p1:y}),u=y}h=null,f=null;break}case"C":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x(),U=x(),C=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y,U+=u.x,C+=u.y);let T={x:g,y},_={x:b,y:M},k={x:U,y:C};i(...ne(u,T,_,k)),u=k,h=_}f=null;break}case"S":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y);let U;h?U={x:2*u.x-h.x,y:2*u.y-h.y}:U={x:u.x,y:u.y};let C={x:g,y},T={x:b,y:M};i(...ne(u,U,C,T)),u=T,h=C}f=null;break}case"Q":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y);let U={x:g,y},C={x:b,y:M};i(...ie(u,U,C)),u=C,f=U}h=null;break}case"T":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x();d&&(g+=u.x,y+=u.y);let b;f?b={x:2*u.x-f.x,y:2*u.y-f.y}:b={x:u.x,y:u.y};let M={x:g,y};i(...ie(u,b,M)),u=M,f=b}h=null;break}case"A":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x()!==0,U=x()!==0,C=x(),T=x();d&&(C+=u.x,T+=u.y);let _={x:C,y:T};i(...$e(u,g,y,b,M,U,_)),u=_}h=null,f=null;break}case"Z":{Math.hypot(u.x-c.x,u.y-c.y)>1e-5&&i({p0:u,p1:c}),u=c,h=null,f=null;break}default:break}}return{segments:t,subpaths:e}}function kt(r,t,e,n=0){if(r.length===0)return[];let i=[],o=0;for(let c of r){let h=Math.hypot(c.p1.x-c.p0.x,c.p1.y-c.p0.y);i.push(h),o+=h}if(o<1e-6)return[];let s=Math.abs(n)>1?n%360/360:n,l=(t+s)%1,a=(e+s)%1;l<0&&(l+=1),a<0&&(a+=1);let u=(c,h)=>{if(c>=h)return[];let f=[],p=0;for(let m=0;m<r.length;m++){let d=r[m],P=i[m],x=p,g=p+P;if(p=g,g<=c||x>=h||P<1e-6)continue;let y=Math.max(0,(c-x)/P),b=Math.min(1,(h-x)/P);if(b>y){let M={x:d.p0.x+(d.p1.x-d.p0.x)*y,y:d.p0.y+(d.p1.y-d.p0.y)*y},U={x:d.p0.x+(d.p1.x-d.p0.x)*b,y:d.p0.y+(d.p1.y-d.p0.y)*b};f.push({p0:M,p1:U})}}return f};if(t===0&&e===1&&n===0)return[...r];if(Math.abs(l-a)<1e-5)return[];if(l<=a)return u(l*o,a*o);{let c=u(l*o,o),h=u(0,a*o);return[...c,...h]}}function Ar(r){if(r===void 0)return;let t=typeof r=="string"?r.trim().split(/[\s,]+/).filter(Boolean).map(Number):[...r];if(!(t.length===0||t.some(e=>!Number.isFinite(e)||e<0))&&!(t.reduce((e,n)=>e+n,0)<=0))return t.length%2===1?[...t,...t]:t}function se(r,t,e=0){if(r.length===0||t.length===0)return r;let n=0;for(let p of t)n+=p;if(n<1e-5)return r;let i=0,o=[];for(let p of r){let m=Math.hypot(p.p1.x-p.p0.x,p.p1.y-p.p0.y);o.push(m),i+=m}let s=[],l=(e%n+n)%n,a=0,u=!0,c=l;for(;c>t[a];)c-=t[a],a=(a+1)%t.length,u=!u;let h=t[a]-c,f=0;for(;f<i;){let p=Math.min(h,i-f);if(u&&p>1e-4){let m=kt(r,f/i,(f+p)/i);s.push(...m)}f+=p,a=(a+1)%t.length,u=!u,h=t[a]}return s}function ae(r,t,e=0,n=0,i=0,o=0){let s=Math.min(r/2,t/2),l=Math.min(e,s),a=Math.min(n,s),u=Math.min(i,s),c=Math.min(o,s);return l===0&&a===0&&u===0&&c===0?`M 0 0 L ${r} 0 L ${r} ${t} L 0 ${t} Z`:[`M ${l} 0`,`L ${r-a} 0`,a>0?`Q ${r} 0 ${r} ${a}`:`L ${r} 0`,`L ${r} ${t-u}`,u>0?`Q ${r} ${t} ${r-u} ${t}`:`L ${r} ${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 Ie(r,t){let e=Math.min(r,t)/2,n=r/2,i=t/2,o=e*.5522847498;return[`M ${n} ${i-e}`,`C ${n+o} ${i-e} ${n+e} ${i-o} ${n+e} ${i}`,`C ${n+e} ${i+o} ${n+o} ${i+e} ${n} ${i+e}`,`C ${n-o} ${i+e} ${n-e} ${i+o} ${n-e} ${i}`,`C ${n-e} ${i-o} ${n-o} ${i-e} ${n} ${i-e}`,"Z"].join(" ")}function ze(r,t){let e=r/2,n=t/2,i=e,o=n,s=e*.5522847498,l=n*.5522847498;return[`M ${i} ${o-n}`,`C ${i+s} ${o-n} ${i+e} ${o-l} ${i+e} ${o}`,`C ${i+e} ${o+l} ${i+s} ${o+n} ${i} ${o+n}`,`C ${i-s} ${o+n} ${i-e} ${o+l} ${i-e} ${o}`,`C ${i-e} ${o-l} ${i-s} ${o-n} ${i} ${o-n}`,"Z"].join(" ")}function Ve(r,t,e=5){let n=Math.max(3,e),i=Math.min(r,t)/2,o=r/2,s=t/2,l=[];for(let a=0;a<n;a++){let u=-Math.PI/2+a*2*Math.PI/n;l.push({x:o+i*Math.cos(u),y:s+i*Math.sin(u)})}return l.map((a,u)=>`${u===0?"M":"L"} ${a.x} ${a.y}`).join(" ")+" Z"}function We(r,t,e=5,n=.5){let i=Math.max(3,e),o=Math.min(r,t)/2,s=o*Math.max(.01,Math.min(.99,n)),l=r/2,a=t/2,u=[];for(let c=0;c<i*2;c++){let h=-Math.PI/2+c*Math.PI/i,f=c%2===0?o:s;u.push({x:l+f*Math.cos(h),y:a+f*Math.sin(h)})}return u.map((c,h)=>`${h===0?"M":"L"} ${c.x} ${c.y}`).join(" ")+" Z"}function Ne(r,t,e=40,n=40,i=20){let o=Math.min(e,t),s=Math.min(n,r),l=Math.min(i,o),a=t/2;return[`M 0 ${a-l/2}`,`L ${r-s} ${a-l/2}`,`L ${r-s} ${a-o/2}`,`L ${r} ${a}`,`L ${r-s} ${a+o/2}`,`L ${r-s} ${a+l/2}`,`L 0 ${a+l/2}`,"Z"].join(" ")}function _t(r){let{shapeType:t,width:e,height:n}=r;switch(t){case"rect":return ae(e,n,r.cornerRadius??0,r.cornerRadius??0,r.cornerRadius??0,r.cornerRadius??0);case"circle":return Ie(e,n);case"ellipse":return ze(e,n);case"polygon":return Ve(e,n,r.polygonSides??5);case"star":return We(e,n,r.starPoints??5,r.starInnerRadiusRatio??.5);case"arrow":return Ne(e,n,r.arrowHeadWidth??40,r.arrowHeadLength??40,r.arrowShaftWidth??20);case"path":return r.path??"";default:return""}}function je(r){if(r.length<3)return[];if(r.length===3)return[r[0],r[1],r[2]];let t=[...r],e=t[t.length-1],n=t[0];if(Math.hypot(e.x-n.x,e.y-n.y)<1e-5&&t.pop(),t.length<3)return[];let i=0;for(let h=0;h<t.length;h++){let f=(h+1)%t.length;i+=t[h].x*t[f].y-t[f].x*t[h].y}i<0&&t.reverse();let o=(h,f,p,m)=>{let d=(p.x-f.x)*(h.y-f.y)-(p.y-f.y)*(h.x-f.x),P=(m.x-p.x)*(h.y-p.y)-(m.y-p.y)*(h.x-p.x),x=(f.x-m.x)*(h.y-m.y)-(f.y-m.y)*(h.x-m.x);return d>=-1e-6&&P>=-1e-6&&x>=-1e-6},s=(h,f,p,m)=>{if((f.x-h.x)*(p.y-h.y)-(f.y-h.y)*(p.x-h.x)<=1e-7)return!1;for(let P of m)if(!(P===h||P===f||P===p)&&o(P,h,f,p))return!1;return!0},l=[],a=[...t],u=0,c=a.length*a.length*2;for(;a.length>3&&u<c;){u++;let h=!1;for(let f=0;f<a.length;f++){let p=a[(f-1+a.length)%a.length],m=a[f],d=a[(f+1)%a.length];if(s(p,m,d,a)){l.push(p,m,d),a.splice(f,1),h=!0;break}}h||(l.push(a[0],a[1],a[2]),a.splice(1,1))}return a.length===3&&l.push(a[0],a[1],a[2]),l}function He(r){let t=new Map,{segments:e,subpaths:n}=oe(r);e.forEach((o,s)=>{let l=n[s]??0,a=t.get(l);a||(a=[o.p0],t.set(l,a)),a.push(o.p1)});let i=[];for(let o of t.values()){let s=o[0],l=o[o.length-1];Math.hypot(l.x-s.x,l.y-s.y)<1e-5&&o.pop(),o.length>=3&&Math.abs(Tt(o))>1e-6&&i.push(o)}return i}var Ye=64,$=new Map;function qe(r){let t=$.get(r);if(t)return $.delete(r),$.set(r,t),t;let e=re(He(r));return $.set(r,e),$.size>Ye&&$.delete($.keys().next().value),e}function le(r){let{shapeType:t,width:e,height:n}=r;if(t==="rect"){let i=r.cornerRadius??0;if(i<=0)return new Float32Array([0,0,e,0,e,n,0,0,e,n,0,n]);let o=ae(e,n,i,i,i,i),l=Dt(o).map(c=>c.p0),a=je(l),u=new Float32Array(a.length*2);for(let c=0;c<a.length;c++)u[c*2]=a[c].x,u[c*2+1]=a[c].y;return u}if(t==="circle"||t==="ellipse"){let i=e/2,o=n/2,s=t==="circle"?Math.min(e,n)/2:e/2,l=t==="circle"?s:n/2,a=48,u=new Float32Array(a*3*2),c=0;for(let h=0;h<a;h++){let f=h*2*Math.PI/a,p=(h+1)*2*Math.PI/a;u[c++]=i,u[c++]=o,u[c++]=i+s*Math.cos(f),u[c++]=o+l*Math.sin(f),u[c++]=i+s*Math.cos(p),u[c++]=o+l*Math.sin(p)}return u}if(t==="polygon"){let i=Math.max(3,r.polygonSides??5),o=Math.min(e,n)/2,s=e/2,l=n/2,a=new Float32Array(i*3*2),u=0;for(let c=0;c<i;c++){let h=-Math.PI/2+c*2*Math.PI/i,f=-Math.PI/2+(c+1)*2*Math.PI/i;a[u++]=s,a[u++]=l,a[u++]=s+o*Math.cos(h),a[u++]=l+o*Math.sin(h),a[u++]=s+o*Math.cos(f),a[u++]=l+o*Math.sin(f)}return a}if(t==="star"){let i=Math.max(3,r.starPoints??5),o=Math.min(e,n)/2,s=o*Math.max(.01,Math.min(.99,r.starInnerRadiusRatio??.5)),l=e/2,a=n/2,u=i*2,c=new Float32Array(u*3*2),h=0;for(let f=0;f<u;f++){let p=-Math.PI/2+f*Math.PI/i,m=-Math.PI/2+(f+1)*Math.PI/i,d=f%2===0?o:s,P=(f+1)%2===0?o:s;c[h++]=l,c[h++]=a,c[h++]=l+d*Math.cos(p),c[h++]=a+d*Math.sin(p),c[h++]=l+P*Math.cos(m),c[h++]=a+P*Math.sin(m)}return c}if(t==="arrow"){let i=Math.min(r.arrowHeadWidth??40,n),o=Math.min(r.arrowHeadLength??40,e),s=Math.min(r.arrowShaftWidth??20,i),l=n/2,a=0,u=e-o,c=e,h=l-s/2,f=l+s/2,p=l-i/2,m=l+i/2;return new Float32Array([a,h,u,h,u,f,a,h,u,f,a,f,u,p,c,l,u,m])}return t==="path"&&r.path?qe(r.path):new Float32Array(0)}v();v();var ue=`
|
|
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
|
+
};
|
|
198
|
+
|
|
199
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
200
|
+
|
|
201
|
+
struct VSOut {
|
|
202
|
+
@builtin(position) pos : vec4<f32>,
|
|
203
|
+
@location(0) localPos : vec2<f32>,
|
|
204
|
+
@location(1) @interpolate(flat) p0 : vec2<f32>,
|
|
205
|
+
@location(2) @interpolate(flat) p1 : vec2<f32>,
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
@vertex fn vs(@builtin(vertex_index) corner : u32, @location(0) seg : vec4<f32>) -> VSOut {
|
|
209
|
+
let p0 = seg.xy;
|
|
210
|
+
let p1 = seg.zw;
|
|
211
|
+
let d = p1 - p0;
|
|
212
|
+
let len = max(length(d), 1e-6);
|
|
213
|
+
let padding = u.params.w * 0.5 + 2.0;
|
|
214
|
+
let along = (d / len) * padding;
|
|
215
|
+
let across = vec2<f32>(-along.y, along.x);
|
|
216
|
+
// Triangle strip: p0 \u2212along \u2213across, then p1 +along \u2213across.
|
|
217
|
+
let atEnd = corner >= 2u;
|
|
218
|
+
let side = select(-1.0, 1.0, (corner & 1u) == 1u);
|
|
219
|
+
let xy = select(p0 - along, p1 + along, atEnd) + across * side;
|
|
220
|
+
|
|
221
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
222
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
223
|
+
let surfaceSize = u.params.yz;
|
|
224
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
225
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
226
|
+
|
|
227
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy, p0, p1);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
|
|
231
|
+
let ba = b - a;
|
|
232
|
+
let len = length(ba);
|
|
233
|
+
if (len < 1e-6) {
|
|
234
|
+
return length(p - a) - radius;
|
|
235
|
+
}
|
|
236
|
+
let dir = ba / len;
|
|
237
|
+
let normal = vec2<f32>(-dir.y, dir.x);
|
|
238
|
+
let pa = p - a;
|
|
239
|
+
|
|
240
|
+
let proj = dot(pa, dir);
|
|
241
|
+
let perp = abs(dot(pa, normal));
|
|
242
|
+
|
|
243
|
+
if (capType > 0.5 && capType < 1.5) {
|
|
244
|
+
// Butt cap: terminates strictly at endpoints a and b
|
|
245
|
+
let dx = max(-proj, proj - len);
|
|
246
|
+
let dy = perp - radius;
|
|
247
|
+
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
248
|
+
let inside = min(max(dx, dy), 0.0);
|
|
249
|
+
return outside + inside;
|
|
250
|
+
} else if (capType >= 1.5) {
|
|
251
|
+
// Square cap: extends past endpoints a and b by radius
|
|
252
|
+
let dx = max(-proj - radius, proj - (len + radius));
|
|
253
|
+
let dy = perp - radius;
|
|
254
|
+
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
255
|
+
let inside = min(max(dx, dy), 0.0);
|
|
256
|
+
return outside + inside;
|
|
257
|
+
} else {
|
|
258
|
+
// Round cap (default)
|
|
259
|
+
let h = clamp(proj / len, 0.0, 1.0);
|
|
260
|
+
return length(pa - ba * h) - radius;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
265
|
+
let radius = u.params.w * 0.5;
|
|
266
|
+
let d = sdSegmentWithCap(in.localPos, in.p0, in.p1, radius, u.style.x);
|
|
267
|
+
|
|
268
|
+
let fw = max(fwidth(d), 1e-5);
|
|
269
|
+
let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
270
|
+
let alpha = u.color.a * u.params.x * edgeAlpha;
|
|
271
|
+
if (alpha <= 0.0) {
|
|
272
|
+
discard;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return vec4<f32>(u.color.rgb * alpha, alpha);
|
|
276
|
+
}
|
|
277
|
+
`;v();var X={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function L(r){return r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]})}function st(r,t){let{module:e}=t;return r.createRenderPipeline({label:t.label,layout:r.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??X}]},primitive:{topology:t.topology}})}var at=4,lt=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;segmentPool;uniformBindGroupCache=new F;scratchData=new Float32Array(24);constructor(t,e){this.device=t,this.uniformPool=new D(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.segmentPool=new D(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"path.wgsl",code:ue});this.uniformLayout=L(t);let i=(o,s)=>t.createRenderPipeline({label:o,layout:t.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:n,entryPoint:"vs",buffers:[{arrayStride:at*4,stepMode:"instance",attributes:[{shaderLocation:0,offset:0,format:"float32x4"}]}]},fragment:{module:n,entryPoint:"fs",targets:[{format:e,blend:s}]},primitive:{topology:"triangle-strip"}});this.pipeline=i("PathPipeline",X),this.maxPipeline=i("PathPipeline.max",{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}})}resetPools(){this.uniformPool.reset(),this.segmentPool.reset()}drawPath(t,e,n,i,o,s,l,a){this.drawSegments(t,e,Dt(n),i,o,s,l,a)}drawSegments(t,e,n,i,o,s,l,a){let u=n;(a?.trimStart!==void 0||a?.trimEnd!==void 0||a?.trimOffset!==void 0)&&(u=kt(u,a.trimStart??0,a.trimEnd??1,a.trimOffset??0)),a?.strokeDashArray&&a.strokeDashArray.length>0&&(u=se(u,a.strokeDashArray,a.strokeDashOffset??0));let c=new Float32Array(u.length*at),h=0;for(let{p0:x,p1:g}of u){if(Math.hypot(g.x-x.x,g.y-x.y)<1e-6)continue;let y=h++*at;c[y]=x.x,c[y+1]=x.y,c[y+2]=g.x,c[y+3]=g.y}if(h===0)return;let f=A(i),p=this.scratchData;e.packIntoBuffer(p,a?.opacity??1,s,l,a?.transform),p[15]=o,p[16]=f.r,p[17]=f.g,p[18]=f.b,p[19]=f.a,p[20]=a?.strokeLineCap==="butt"?1:a?.strokeLineCap==="square"?2:0,p[21]=0,p[22]=0,p[23]=0;let m=this.uniformPool.getBuffer(this.device,p),d=this.segmentPool.getBuffer(this.device,c.subarray(0,h*at)),P=a?.blendMode==="max";t.setPipeline(P?this.maxPipeline:this.pipeline),t.setBindGroup(0,this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,m)),t.setVertexBuffer(0,d),t.draw(4,h)}destroy(){this.uniformPool.destroy(),this.segmentPool.destroy(),this.uniformBindGroupCache.destroy()}};v();v();var ce=`
|
|
278
|
+
struct Uniforms {
|
|
279
|
+
transformCol0 : vec4<f32>,
|
|
280
|
+
transformCol1 : vec4<f32>,
|
|
281
|
+
transformCol2 : vec4<f32>,
|
|
282
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
286
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
287
|
+
@group(1) @binding(1) var samp : sampler;
|
|
288
|
+
|
|
289
|
+
struct VSOut {
|
|
290
|
+
@builtin(position) pos : vec4<f32>,
|
|
291
|
+
@location(0) uv : vec2<f32>,
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
|
|
295
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
296
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
297
|
+
|
|
298
|
+
let surfaceSize = u.params.yz;
|
|
299
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
300
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
301
|
+
|
|
302
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
306
|
+
let opacity = u.params.x;
|
|
307
|
+
let blurAmount = u.params.w;
|
|
308
|
+
|
|
309
|
+
if (blurAmount > 0.01) {
|
|
310
|
+
let fdx = dpdx(in.uv);
|
|
311
|
+
let fdy = dpdy(in.uv);
|
|
312
|
+
let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
|
|
313
|
+
let step = fw * blurAmount * 0.3;
|
|
314
|
+
|
|
315
|
+
var color = vec4<f32>(0.0);
|
|
316
|
+
var totalWeight = 0.0;
|
|
317
|
+
for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
|
|
318
|
+
for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
|
|
319
|
+
let offset = vec2<f32>(x_offset, y_offset) * step;
|
|
320
|
+
let sampleColor = textureSample(tex, samp, in.uv + offset);
|
|
321
|
+
color = color + sampleColor;
|
|
322
|
+
totalWeight = totalWeight + 1.0;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return (color / totalWeight) * opacity;
|
|
326
|
+
} else {
|
|
327
|
+
let color = textureSample(tex, samp, in.uv);
|
|
328
|
+
return color * opacity;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
`;var ut=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 n=this.buffers[this.index++];return t.queue.writeBuffer(n,0,e),n}reset(){this.index=0}destroy(){for(let t of this.buffers)t.destroy();this.buffers=[]}},ct=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new F;uniformData=new Float32Array(16);vertexData=new Float32Array(16);constructor(t,e){this.device=t,this.uniformPool=new ut(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new ut(64,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"quad.wgsl",code:ce});this.uniformLayout=L(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:n,entryPoint:"vs",buffers:[{arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]}]},fragment:{module:n,entryPoint:"fs",targets:[{format:e,blend:X}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l,a,u,c){let h=c?.opacity??1;n.packIntoBuffer(this.uniformData,h,a,u,c?.transform);let f=this.uniformPool.getBuffer(this.device,this.uniformData),p=s.x/i.width,m=s.y/i.height,d=(s.x+s.width)/i.width,P=(s.y+s.height)/i.height;this.vertexData[0]=l.x,this.vertexData[1]=l.y,this.vertexData[2]=p,this.vertexData[3]=m,this.vertexData[4]=l.x+l.width,this.vertexData[5]=l.y,this.vertexData[6]=d,this.vertexData[7]=m,this.vertexData[8]=l.x,this.vertexData[9]=l.y+l.height,this.vertexData[10]=p,this.vertexData[11]=P,this.vertexData[12]=l.x+l.width,this.vertexData[13]=l.y+l.height,this.vertexData[14]=d,this.vertexData[15]=P;let x=this.vertexPool.getBuffer(this.device,this.vertexData),g=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,f),y=e.getBindGroup(this.device,this.textureLayout,i,o);t.setPipeline(this.pipeline),t.setBindGroup(0,g),t.setBindGroup(1,y),t.setVertexBuffer(0,x),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};v();var ht=class{samplers=new Map;lru=[];maxCapacity;constructor(t=32){this.maxCapacity=t}getSampler(t,e={}){let n=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"}:${n}`,o=this.samplers.get(i);if(o)this.lru=this.lru.filter(s=>s!==i);else{if(o=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:n}),this.samplers.size>=this.maxCapacity){let s=this.lru.pop();s&&this.samplers.delete(s)}this.samplers.set(i,o)}return this.lru.unshift(i),o}destroy(){this.samplers.clear(),this.lru=[]}};v();v();var ft=`
|
|
332
|
+
struct GradientUniforms {
|
|
333
|
+
info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count
|
|
334
|
+
geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)
|
|
335
|
+
offsets : array<vec4<f32>, 2>,
|
|
336
|
+
stops : array<vec4<f32>, 8>, // OKLab + alpha
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
fn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {
|
|
340
|
+
let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);
|
|
341
|
+
let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);
|
|
342
|
+
let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);
|
|
343
|
+
let lin = clamp(vec3<f32>(
|
|
344
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
345
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
346
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
|
|
347
|
+
), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
348
|
+
let lo = lin * 12.92;
|
|
349
|
+
let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;
|
|
350
|
+
return select(hi, lo, lin <= vec3<f32>(0.0031308));
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/// Position along the gradient (0..1, unclamped for linear/radial) at local point p.
|
|
354
|
+
fn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {
|
|
355
|
+
let d = p - g.geom.xy;
|
|
356
|
+
let kind = g.info.x;
|
|
357
|
+
if (kind < 1.5) {
|
|
358
|
+
return dot(d, g.geom.zw) + 0.5;
|
|
359
|
+
}
|
|
360
|
+
if (kind < 2.5) {
|
|
361
|
+
return length(d / max(g.geom.zw, vec2<f32>(1e-4)));
|
|
362
|
+
}
|
|
363
|
+
let a = atan2(d.x, -d.y) - g.geom.z;
|
|
364
|
+
return fract(a / 6.28318530718);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/// Straight sRGB color + alpha of the gradient at local point p.
|
|
368
|
+
fn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {
|
|
369
|
+
var offs = g.offsets;
|
|
370
|
+
var stops = g.stops;
|
|
371
|
+
let n = i32(g.info.y);
|
|
372
|
+
let t = gradientT(g, p);
|
|
373
|
+
var lab = stops[0];
|
|
374
|
+
if (t > offs[0].x) {
|
|
375
|
+
lab = stops[n - 1];
|
|
376
|
+
for (var i = 1; i < 8; i++) {
|
|
377
|
+
if (i >= n) {
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
let b = offs[i / 4][i % 4];
|
|
381
|
+
if (t <= b) {
|
|
382
|
+
let a = offs[(i - 1) / 4][(i - 1) % 4];
|
|
383
|
+
let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);
|
|
384
|
+
lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);
|
|
390
|
+
}
|
|
391
|
+
`;v();var he=`
|
|
392
|
+
${ft}
|
|
393
|
+
|
|
394
|
+
struct Uniforms {
|
|
395
|
+
transformCol0 : vec4<f32>,
|
|
396
|
+
transformCol1 : vec4<f32>,
|
|
397
|
+
transformCol2 : vec4<f32>,
|
|
398
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused
|
|
399
|
+
color : vec4<f32>, // solid color (gradient.info.x = 0)
|
|
400
|
+
gradient : GradientUniforms,
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
404
|
+
|
|
405
|
+
struct VSOut {
|
|
406
|
+
@builtin(position) pos : vec4<f32>,
|
|
407
|
+
@location(0) localPos : vec2<f32>,
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
411
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
412
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
413
|
+
|
|
414
|
+
let surfaceSize = u.params.yz;
|
|
415
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
416
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
417
|
+
|
|
418
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
422
|
+
var outColor = u.color;
|
|
423
|
+
if (u.gradient.info.x > 0.5) {
|
|
424
|
+
outColor = evalGradient(u.gradient, in.localPos);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
let alpha = outColor.a * u.params.x;
|
|
428
|
+
if (alpha <= 0.0) {
|
|
429
|
+
discard;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
return vec4<f32>(outColor.rgb * alpha, alpha);
|
|
433
|
+
}
|
|
434
|
+
`;v();var Ze={linear:1,radial:2,conic:3};function pt(r){return typeof r=="string"&&r.includes("gradient(")?Et(r):null}function mt(r,t,e,n){if(e.fill(0,n,n+48),!r)return;let i=$t(r.stops),o=Math.max(t.width,.001),s=Math.max(t.height,.001),l=t.x+r.center[0]*o,a=t.y+r.center[1]*s;if(e[n]=Ze[r.type],e[n+1]=i.length,e[n+4]=r.type==="linear"?t.x+o/2:l,e[n+5]=r.type==="linear"?t.y+s/2:a,r.type==="linear"){let u=r.angle*Math.PI/180,c=Math.sin(u),h=-Math.cos(u),f=Math.abs(o*c)+Math.abs(s*h);e[n+6]=c/f,e[n+7]=h/f}else if(r.type==="radial"){let u,c;r.radius?[u,c]=r.radius:[u,c]=Xe(r,l-t.x,t.x+o-l,a-t.y,t.y+s-a),e[n+6]=u,e[n+7]=c}else e[n+6]=r.from*Math.PI/180;i.forEach((u,c)=>{e[n+8+c]=u.offset}),K(i).forEach((u,c)=>{e.set(u,n+16+c*4)})}function Xe(r,t,e,n,i){let o=r.extent??"farthest-corner",s=o.startsWith("farthest"),l=s?Math.max(t,e):Math.min(t,e),a=s?Math.max(n,i):Math.min(n,i),u=r.shape==="circle";if(o.endsWith("side")){if(!u)return[l,a];let c=s?Math.max(l,a):Math.min(l,a);return[c,c]}if(u){let c=Math.hypot(l,a);return[c,c]}return[l*Math.SQRT2,a*Math.SQRT2]}var dt=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(68);constructor(t,e){this.device=t,this.uniformPool=new D(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new D(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"shape-fill.wgsl",code:he});this.uniformLayout=L(t),this.pipeline=st(t,{label:"ShapeFillPipeline",module:n,uniformLayout:this.uniformLayout,format:e,topology:"triangle-list"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l,a){if(n.length<6||i.type==="none")return;let u=a?.opacity??1;e.packIntoBuffer(this.uniformData,u,s,l,a?.transform),this.uniformData[15]=0;let c=pt(i.color);if(c)this.uniformData.fill(0,16,20),mt(c,o,this.uniformData,20);else{let p=A(i.color??"#ffffff");this.uniformData[16]=p.r,this.uniformData[17]=p.g,this.uniformData[18]=p.b,this.uniformData[19]=p.a,this.packTwoColorGradient(i,o,p)}let h=this.uniformPool.getBuffer(this.device,this.uniformData),f=this.vertexPool.getBuffer(this.device,n);t.setPipeline(this.pipeline),t.setBindGroup(0,this.device.createBindGroup({layout:this.uniformLayout,entries:[{binding:0,resource:{buffer:h}}]})),t.setVertexBuffer(0,f),t.draw(n.length/2)}packTwoColorGradient(t,e,n){if(this.uniformData.fill(0,20,68),t.type!=="linear"&&t.type!=="radial")return;let o=A(t.color2??t.color??"#ffffff"),s=this.uniformData;if(t.type==="linear"){let a=t.startX??e.x,u=t.startY??e.y,c=t.endX??e.x+e.width,h=t.endY??e.y+e.height,f=c-a,p=h-u,m=Math.max(f*f+p*p,1e-6);s.set([1,2,0,0,(a+c)/2,(u+h)/2,f/m,p/m],20)}else{let a=t.radius??Math.max(e.width,e.height)/2;s.set([2,2,0,0,t.cx??e.x+e.width/2,t.cy??e.y+e.height/2,a,a],20)}s[28]=0,s[29]=1;let l=K([{offset:0,color:[n.r,n.g,n.b,n.a]},{offset:1,color:[o.r,o.g,o.b,o.a]}]);s.set(l[0],36),s.set(l[1],40)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};v();v();var fe=`
|
|
435
|
+
${ft}
|
|
436
|
+
|
|
437
|
+
struct Uniforms {
|
|
438
|
+
transformCol0 : vec4<f32>,
|
|
439
|
+
transformCol1 : vec4<f32>,
|
|
440
|
+
transformCol2 : vec4<f32>,
|
|
441
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
|
|
442
|
+
color : vec4<f32>,
|
|
443
|
+
rect : vec4<f32>, // x, y, width, height
|
|
444
|
+
gradient : GradientUniforms, // info.x = 0: solid \`color\`
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
448
|
+
|
|
449
|
+
struct VSOut {
|
|
450
|
+
@builtin(position) pos : vec4<f32>,
|
|
451
|
+
@location(0) localPos : vec2<f32>,
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
455
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
456
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
457
|
+
|
|
458
|
+
let surfaceSize = u.params.yz;
|
|
459
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
460
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
461
|
+
|
|
462
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
|
|
466
|
+
let q = abs(p) - b + r;
|
|
467
|
+
return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
471
|
+
let center = u.rect.xy + u.rect.zw * 0.5;
|
|
472
|
+
let halfSize = u.rect.zw * 0.5;
|
|
473
|
+
let radius = u.params.w;
|
|
474
|
+
|
|
475
|
+
let d = sdRoundedRect(in.localPos - center, halfSize, radius);
|
|
476
|
+
// Rounded shapes: one device pixel of coverage centred on the edge (the
|
|
477
|
+
// quad has room for its outer half). Square ones keep their exact edge.
|
|
478
|
+
let fw = max(fwidth(d), 1e-4);
|
|
479
|
+
var edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
|
|
480
|
+
if (radius > 0.0) {
|
|
481
|
+
edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
482
|
+
}
|
|
483
|
+
var fill = u.color;
|
|
484
|
+
if (u.gradient.info.x > 0.5) {
|
|
485
|
+
fill = evalGradient(u.gradient, in.localPos);
|
|
486
|
+
}
|
|
487
|
+
let alpha = fill.a * u.params.x * edgeAlpha;
|
|
488
|
+
if (alpha <= 0.0) {
|
|
489
|
+
discard;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
return vec4<f32>(fill.rgb * alpha, alpha);
|
|
493
|
+
}
|
|
494
|
+
`;var xt=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new F;uniformData=new Float32Array(72);vertexData=new Float32Array(8);constructor(t,e){this.device=t,this.uniformPool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new D(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"solid.wgsl",code:fe});this.uniformLayout=L(t),this.pipeline=st(t,{label:"SolidPipeline",module:n,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l=0,a){let u=pt(i),c=u?{r:0,g:0,b:0,a:1}:A(i),h=a?.opacity??1;e.packIntoBuffer(this.uniformData,h,o,s,a?.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]=n.x,this.uniformData[21]=n.y,this.uniformData[22]=n.width,this.uniformData[23]=n.height,mt(u,n,this.uniformData,24);let f=this.uniformPool.getBuffer(this.device,this.uniformData),p=0;if(l>0){let b=a?.transform?e.getCurrent().multiply(a.transform):e.getCurrent(),M=Math.min(Math.hypot(b.a,b.b),Math.hypot(b.c,b.d));p=2/Math.max(M,.001)}let m=n.x-p,d=n.y-p,P=n.x+n.width+p,x=n.y+n.height+p;this.vertexData[0]=m,this.vertexData[1]=d,this.vertexData[2]=P,this.vertexData[3]=d,this.vertexData[4]=m,this.vertexData[5]=x,this.vertexData[6]=P,this.vertexData[7]=x;let g=this.vertexPool.getBuffer(this.device,this.vertexData);t.setPipeline(this.pipeline);let y=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,f);t.setBindGroup(0,y),t.setVertexBuffer(0,g),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};function Ke(r){if(Array.isArray(r)){let n=r[3]??1;return[r[0]*n,r[1]*n,r[2]*n,n]}if("r"in r){let n=r.a??1;return{r:r.r*n,g:r.g*n,b:r.b*n,a:n}}let t=Array.from(r),e=t[3]??1;return[t[0]*e,t[1]*e,t[2]*e,e]}var pe=new WeakMap;function Hn(r,t){let e=pe.get(r);return(!e||e.format!==t||e.isDestroyed)&&(e=new Lt(r,t),pe.set(r,e)),e.resetPools(),e}var Lt=class{device;transformStack=new Wt;clipStack=new tt;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new J;samplerCache=new ht;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(t,e){this.device=t,this.format=e,this.quadPipeline=new ct(t,e),this.solidPipeline=new xt(t,e),this.shapeFillPipeline=new dt(t,e),this.pathPipeline=new lt(t,e),this.effectPipeline=new Q(t,e),this.slugPipeline=new Nt(t,e)}beginFrame(t,e,n={r:0,g:0,b:0,a:0},i,o,s="clear"){this.surfaceWidth=i,this.surfaceHeight=o,t!==this.lastEncoder&&(this.lastEncoder=t,this.resetPools());let l=t.beginRenderPass({colorAttachments:[{view:e,clearValue:Ke(n),loadOp:s,storeOp:"store"}]});return this.clipStack.applyScissorToPass(l,i,o),l}endFrame(t){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),bt.flushRetired(this.device),bt.prune(this.device)}drawTexture(t,e,n,i){let o=this.samplerCache.getSampler(this.device),s={x:0,y:0,width:e.width,height:e.height};this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,o,s,n,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(t,e,n,i,o){let s=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,s,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawRect(t,e,n,i=0,o){let s=0,l=o;typeof i=="object"&&i!==null?(l=i,s=0):typeof i=="number"&&(s=i),this.rasterDrawCount++,this.solidPipeline.draw(t,this.transformStack,e,n,this.surfaceWidth,this.surfaceHeight,s,l)}drawPath(t,e,n,i,o){this.rasterDrawCount++,this.pathPipeline.drawPath(t,this.transformStack,e,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawShapeFill(t,e,n,i,o){this.rasterDrawCount++,this.shapeFillPipeline.draw(t,this.transformStack,e,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawShape(t,e,n,i,o){let s={x:0,y:0,width:e.width,height:e.height};if(n&&n.type!=="none"){let l=le(e);if(l.length>0&&(this.drawShapeFill(t,l,n,s,o),(!i||!i.width||i.width<=0)&&(n.type??"solid")==="solid"&&n.color)){let a=_t(e);if(a){let u=this.transformStack.getCurrent(),c=1/Pt(o?.transform?u.multiply(o.transform):u);this.drawPath(t,a,n.color,c,{...o,strokeLineCap:"round"})}}}if(i&&i.width&&i.width>0&&i.color){let l=_t(e);l&&this.drawPath(t,l,i.color,i.width,{...o,strokeLineCap:i.cap,trimStart:i.trimStart,trimEnd:i.trimEnd,trimOffset:i.trimOffset,strokeDashArray:i.dashArray,strokeDashOffset:i.dashOffset})}}drawRRect(t,e,n,i){this.drawRect(t,e.rect,n,e.rx,i)}getTemporaryTexture(t,e,n){return this.effectPipeline.getTexture(this.device,t,e,this.format,n)}getTemporaryBuffer(t){return this.effectPipeline.getBuffer(this.device,t)}composite(t,e,n,i,o){return this.effectPipeline.composite(t,this.bindGroupCache,this.samplerCache,e,n,i,this.format,o)}applyMotionBlur(t,e,n,i,o=180,s=16,l){return this.effectPipeline.applyMotionBlur(t,this.bindGroupCache,this.samplerCache,e,n,i,o,s,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 n=Math.max(t.x,e.x),i=Math.max(t.y,e.y),o=Math.min(t.x+t.width,e.x+e.width),s=Math.min(t.y+t.height,e.y+e.height);this.pushScissor({x:n,y:i,width:Math.max(0,o-n),height:Math.max(0,s-i)})}pushScissorLocal(t){let e=this.transformStack.getCurrent(),n=[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=n.map(h=>h.x),o=n.map(h=>h.y),s=Math.min(...i),l=Math.min(...o),a=Math.max(...i)-s,u=Math.max(...o)-l,c=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(c){let h=Math.max(s,c.x),f=Math.max(l,c.y),p=Math.min(s+a,c.x+c.width),m=Math.min(l+u,c.y+c.height);s=h,l=f,a=Math.max(0,p-h),u=Math.max(0,m-f)}this.clipStack.pushScissor({x:s,y:l,width:a,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}};v();function Qe(r){return Vt(r)??zt(r)??gt(r)}function ti(r){let t=Qe(r);return typeof t=="string"?t:gt(r)}export{tr as a,er as b,rr as c,nr as d,ir as e,or as f,sr as g,ar as h,cr as i,hr as j,fr as k,pr as l,me as m,xr as n,Q as o,ot as p,$e as q,Dt as r,Ar as s,_t as t,X as u,ht as v,Hn as w,Lt as x,Qe as y,ti as z};
|