framefields 2.11.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +4 -0
- package/dist/audio/index.d.mts +6 -5
- package/dist/audio/index.mjs +13 -13
- package/dist/{audio-CYZkDwae.d.mts → audio-CHV33Od9.d.mts} +3 -4
- package/dist/audio-CHV33Od9.d.mts.map +1 -0
- package/dist/{audio-BuCVk1IQ.mjs → audio-DHzLQ_RG.mjs} +4 -4
- package/dist/{audio-BuCVk1IQ.mjs.map → audio-DHzLQ_RG.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 +390 -124
- package/dist/cli.mjs.map +1 -1
- package/dist/cloud/index.d.mts +16 -3
- package/dist/cloud/index.d.mts.map +1 -1
- package/dist/cloud/index.mjs +2 -2
- package/dist/cloud-Cj1TIme8.mjs +685 -0
- 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-BSKAbyea.mjs.map +1 -0
- package/dist/{dist-CNGv-JTX.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-EQX3TUUl.mjs → dist-CUNvNDS3.mjs} +129 -82
- package/dist/dist-CUNvNDS3.mjs.map +1 -0
- package/dist/dist-CiTgmfUw.mjs +502 -0
- package/dist/dist-CiTgmfUw.mjs.map +1 -0
- package/dist/{dist-CWLLnigL.mjs → dist-D3BeAZ7X.mjs} +315 -84
- package/dist/dist-D3BeAZ7X.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-Dg9LMWoX.mjs → dist-Kbf-JTry.mjs} +2 -2
- package/dist/{dist-Dg9LMWoX.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-DKLbLXF7.mjs → effects-BiDgCK1L.mjs} +3 -3
- package/dist/{effects-DKLbLXF7.mjs.map → effects-BiDgCK1L.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -3
- package/dist/{fonts-gPbGbShD.mjs → fonts-DeDPWdvJ.mjs} +2 -2
- package/dist/{fonts-gPbGbShD.mjs.map → fonts-DeDPWdvJ.mjs.map} +1 -1
- package/dist/{gpu-CpkJJLQP.mjs → gpu-CWjgql4C.mjs} +11 -3
- package/dist/gpu-CWjgql4C.mjs.map +1 -0
- package/dist/index-BFTtXosj.d.mts +63 -0
- package/dist/index-BFTtXosj.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-D2i9J9Zq.d.mts → index-D68eGFNE.d.mts} +3 -30
- package/dist/index-D68eGFNE.d.mts.map +1 -0
- package/dist/{index-CEU_Zsb9.d.mts → index-DBh3WphX.d.mts} +25 -23
- package/dist/index-DBh3WphX.d.mts.map +1 -0
- 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-jSDEM-uE.d.mts → index-Dibc_xpC.d.mts} +6 -6
- package/dist/{index-jSDEM-uE.d.mts.map → index-Dibc_xpC.d.mts.map} +1 -1
- package/dist/{index-Cro-818i.d.mts → index-E2IXX0Cz.d.mts} +88 -14
- package/dist/index-E2IXX0Cz.d.mts.map +1 -0
- package/dist/{index-BuiZzc6i.d.mts → index-X2u96TEo.d.mts} +162 -5
- package/dist/index-X2u96TEo.d.mts.map +1 -0
- package/dist/{index-Bly-7YM1.d.mts → index-YB9j9KUx.d.mts} +3 -3
- package/dist/{index-Bly-7YM1.d.mts.map → index-YB9j9KUx.d.mts.map} +1 -1
- 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-C8YwZ6k1.d.mts → index-rtCXNxGO.d.mts} +2 -2
- package/dist/{index-C8YwZ6k1.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-BToKUTtZ.mjs → preview-PDz7o2xg.mjs} +323 -35
- package/dist/preview-PDz7o2xg.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-QF4JWVO3.mjs → chunk-35XSD4QM.mjs} +15 -15
- package/dist/preview-engine/{chunk-ZF2MEFKO.mjs → chunk-3DOIE4DV.mjs} +1 -1
- package/dist/preview-engine/{chunk-JDB7PMRI.mjs → chunk-3IT7LHWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-DNNGWS2C.mjs → chunk-3MLGWUSK.mjs} +1 -1
- package/dist/preview-engine/{chunk-KVOFO273.mjs → chunk-3QJ5GRBH.mjs} +1 -1
- package/dist/preview-engine/{chunk-54Q5CKSV.mjs → chunk-3QTHW2CD.mjs} +1 -1
- package/dist/preview-engine/chunk-44V4V5LD.mjs +1 -0
- package/dist/preview-engine/chunk-4P3MMJWD.mjs +1 -0
- package/dist/preview-engine/chunk-4YT5YJIF.mjs +1 -0
- package/dist/preview-engine/{chunk-BJXNKMSY.mjs → chunk-64L4GUOF.mjs} +20 -6
- package/dist/preview-engine/{chunk-UMJ3VGKN.mjs → chunk-6B3NOY5W.mjs} +1 -1
- package/dist/preview-engine/chunk-77MT33VR.mjs +1 -0
- package/dist/preview-engine/{chunk-BRV7TQDV.mjs → chunk-77WWW75O.mjs} +1 -1
- package/dist/preview-engine/chunk-7M5LE6EM.mjs +483 -0
- package/dist/preview-engine/chunk-A6OAPDIA.mjs +1 -0
- package/dist/preview-engine/chunk-ADLIF544.mjs +39 -0
- package/dist/preview-engine/{chunk-OLB4TQLQ.mjs → chunk-AKVRG7UU.mjs} +1 -1
- package/dist/preview-engine/{chunk-CIVEZJYF.mjs → chunk-CRBOK3JT.mjs} +1 -1
- package/dist/preview-engine/chunk-CSLSWUUT.mjs +1 -0
- package/dist/preview-engine/{chunk-ACBBBOUM.mjs → chunk-CYM75INB.mjs} +1 -1
- package/dist/preview-engine/{chunk-JSYG6OWZ.mjs → chunk-D7OMXGIZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-EPRINA4V.mjs → chunk-E7BKWHOT.mjs} +10 -10
- package/dist/preview-engine/{chunk-NOKPBMIP.mjs → chunk-EWDJMJO5.mjs} +1 -1
- package/dist/preview-engine/{chunk-5KSBS3AL.mjs → chunk-EYE3GNL5.mjs} +1 -1
- package/dist/preview-engine/chunk-FRJPXWAG.mjs +1 -0
- package/dist/preview-engine/{chunk-IKVJ4MW5.mjs → chunk-G4ZTSLZU.mjs} +1 -1
- package/dist/preview-engine/{chunk-VZLIRYAL.mjs → chunk-GAMAKN5L.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZIXPWP2B.mjs → chunk-ICWD36H6.mjs} +1 -1
- package/dist/preview-engine/{chunk-OELPPLML.mjs → chunk-IEEV5RB3.mjs} +1 -1
- package/dist/preview-engine/chunk-JAAFSVAG.mjs +1 -0
- package/dist/preview-engine/{chunk-YVZTRH4Y.mjs → chunk-KDCM7S3S.mjs} +1 -1
- package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
- package/dist/preview-engine/{chunk-O63FLYWC.mjs → chunk-N2VISDTG.mjs} +1 -1
- package/dist/preview-engine/{chunk-GN3NDRLI.mjs → chunk-NCQHOGZK.mjs} +1 -1
- package/dist/preview-engine/{chunk-YKM7JDQY.mjs → chunk-NJO2BIJX.mjs} +1 -1
- package/dist/preview-engine/{chunk-7GMHSTRP.mjs → chunk-NTSALWFF.mjs} +1 -1
- package/dist/preview-engine/{chunk-PKNUTHPI.mjs → chunk-NVXFEDJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-VFQH5KVS.mjs → chunk-ONHY4KNY.mjs} +1 -1
- package/dist/preview-engine/{chunk-Z24UEN4P.mjs → chunk-PD2HKW2S.mjs} +1 -1
- package/dist/preview-engine/chunk-PH3UUX6A.mjs +138 -0
- package/dist/preview-engine/chunk-PIHG6HJO.mjs +1 -0
- package/dist/preview-engine/{chunk-YHMBGJP6.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-4AGQN53P.mjs → chunk-QXLFTCLC.mjs} +1 -1
- package/dist/preview-engine/{chunk-65NANVQL.mjs → chunk-R4H52Q7S.mjs} +1 -1
- package/dist/preview-engine/{chunk-FQL4IJZN.mjs → chunk-RN7J5TRU.mjs} +1 -1
- package/dist/preview-engine/{chunk-26XWIHW3.mjs → chunk-RVCLMO5Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-VQA4DYZU.mjs → chunk-RYSV44B4.mjs} +1 -1
- package/dist/preview-engine/{chunk-TEWRQKX3.mjs → chunk-SFHWP65D.mjs} +1 -1
- package/dist/preview-engine/{chunk-RDWLLITE.mjs → chunk-SMHEMYCV.mjs} +1 -1
- package/dist/preview-engine/{chunk-EXEO245X.mjs → chunk-SV3ZNZQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
- package/dist/preview-engine/chunk-UFPA36D2.mjs +2227 -0
- package/dist/preview-engine/{chunk-EAWJXW4J.mjs → chunk-UVEDFIPN.mjs} +1 -1
- package/dist/preview-engine/{chunk-6LTINEA4.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-IBPYV6HF.mjs → chunk-W4XR6F5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-UI3VH33L.mjs → chunk-WPYWCWWL.mjs} +1 -1
- package/dist/preview-engine/{chunk-GHTG5XV6.mjs → chunk-XYCR3STG.mjs} +84 -25
- package/dist/preview-engine/{chunk-WFMUDL55.mjs → chunk-YAPGJZPI.mjs} +1 -1
- package/dist/preview-engine/{chunk-LMXMBX4J.mjs → chunk-YJ4DSRDY.mjs} +1 -1
- package/dist/preview-engine/{chunk-CCORQLMR.mjs → chunk-YOJKIMU5.mjs} +1 -1
- package/dist/preview-engine/{chunk-UGB6JKVS.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
- package/dist/preview-engine/{chunk-LFNCWMKS.mjs → chunk-ZZMI3WOT.mjs} +1 -1
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/{renderers-53EI26GL.mjs → renderers-3FZVDYRQ.mjs} +1 -1
- package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
- package/dist/preview-engine/{renderers-6YVZUQOH.mjs → renderers-4RPQSUUZ.mjs} +1 -1
- package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
- package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
- package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
- package/dist/preview-engine/{renderers-CCRZNGVK.mjs → renderers-6FENMFSC.mjs} +1 -1
- package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
- package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
- package/dist/preview-engine/renderers-AFTUFMQQ.mjs +1 -0
- package/dist/preview-engine/{renderers-CYJAVWHT.mjs → renderers-AIZRIW2R.mjs} +1 -1
- package/dist/preview-engine/{renderers-OGOW3NA4.mjs → renderers-BDI2BDBA.mjs} +1 -1
- package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
- package/dist/preview-engine/{renderers-EN7LXJLG.mjs → renderers-BUZ67FNZ.mjs} +1 -1
- package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
- package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -0
- package/dist/preview-engine/{renderers-WSABL3QO.mjs → renderers-ECXMT5BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-MOEC2XZZ.mjs → renderers-EILFSWSJ.mjs} +1 -1
- package/dist/preview-engine/renderers-EPSF5CSQ.mjs +1 -0
- package/dist/preview-engine/{renderers-X6CORAES.mjs → renderers-EVEWFJ7U.mjs} +1 -1
- package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
- package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
- package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
- package/dist/preview-engine/{renderers-GQM3KMV3.mjs → renderers-FQISHQEN.mjs} +1 -1
- package/dist/preview-engine/{renderers-HKLCB4U6.mjs → renderers-FXAVFNUN.mjs} +1 -1
- package/dist/preview-engine/{renderers-P2HORBZ6.mjs → renderers-GITAVRYZ.mjs} +1 -1
- package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
- package/dist/preview-engine/{renderers-KCGK33Y2.mjs → renderers-HG6JZIZO.mjs} +1 -1
- package/dist/preview-engine/{renderers-I6QKZ7CH.mjs → renderers-HHWMIDN3.mjs} +1 -1
- package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
- package/dist/preview-engine/{renderers-7CAHX35U.mjs → renderers-HXEDI4BD.mjs} +1 -1
- package/dist/preview-engine/{renderers-77PDUMYI.mjs → renderers-HXNSDJBY.mjs} +1 -1
- package/dist/preview-engine/{renderers-ACUJMDEK.mjs → renderers-I2ZOUFRU.mjs} +1 -1
- package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
- package/dist/preview-engine/{renderers-IHGAWLUF.mjs → renderers-JMSAW7VY.mjs} +1 -1
- package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
- package/dist/preview-engine/{renderers-RN2MHIFK.mjs → renderers-KICDB5Y6.mjs} +1 -1
- package/dist/preview-engine/{renderers-C7SI3NIE.mjs → renderers-KKULMOV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-HSFQIILN.mjs → renderers-KMVMPYY7.mjs} +1 -1
- package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
- package/dist/preview-engine/{renderers-BOBVXYAA.mjs → renderers-LWW4RF6D.mjs} +1 -1
- package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
- package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
- package/dist/preview-engine/{renderers-VVP5WQOY.mjs → renderers-MPFU74I3.mjs} +1 -1
- package/dist/preview-engine/{renderers-H6PBHEYU.mjs → renderers-MW53LTMB.mjs} +1 -1
- package/dist/preview-engine/{renderers-PPZK6VEW.mjs → renderers-NQC4DPX4.mjs} +1 -1
- package/dist/preview-engine/renderers-OJWWIVNW.mjs +1 -0
- package/dist/preview-engine/{renderers-4IBFDW2S.mjs → renderers-PC2GOZDT.mjs} +1 -1
- package/dist/preview-engine/{renderers-UG2C3C7T.mjs → renderers-Q77UPEYE.mjs} +1 -1
- package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
- package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
- package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
- package/dist/preview-engine/renderers-RHMRWX46.mjs +1 -0
- package/dist/preview-engine/{renderers-5XLGCEOA.mjs → renderers-RIPXT4AL.mjs} +1 -1
- package/dist/preview-engine/{renderers-FY2HOQCS.mjs → renderers-SFVFAS3C.mjs} +1 -1
- package/dist/preview-engine/{renderers-VIGZYJYX.mjs → renderers-SWQVCJHB.mjs} +1 -1
- package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
- package/dist/preview-engine/renderers-TTXTV4PC.mjs +228 -0
- package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
- package/dist/preview-engine/{renderers-6LNDAO4B.mjs → renderers-U4IXWMD6.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-33FCFHDR.mjs → renderers-VUQAZ56P.mjs} +1 -1
- package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
- package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
- package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
- package/dist/preview-engine/renderers-XLQXVD37.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/signals.mjs +1 -1
- package/dist/preview-engine/{src-4IUYUKIZ.mjs → src-YXNX4MLK.mjs} +1 -1
- package/dist/{program-Bc860ko5.mjs → program-Bn6ko_I4.mjs} +44 -17
- package/dist/program-Bn6ko_I4.mjs.map +1 -0
- package/dist/renderer/index.d.mts +4 -3
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-B3Dme2es.mjs → renderer--Q0pM9Vh.mjs} +5 -5
- package/dist/{renderer-B3Dme2es.mjs.map → renderer--Q0pM9Vh.mjs.map} +1 -1
- package/dist/renderer-1aSF5BmY.mjs +5 -0
- package/dist/{renderer-CAWnCsQc.mjs → renderer-45ifiDkn.mjs} +5 -5
- package/dist/{renderer-CAWnCsQc.mjs.map → renderer-45ifiDkn.mjs.map} +1 -1
- package/dist/{renderer-Cz-n883J.mjs → renderer-549d94qG.mjs} +5 -5
- package/dist/{renderer-Cz-n883J.mjs.map → renderer-549d94qG.mjs.map} +1 -1
- package/dist/{renderer-BhsrlGKp.mjs → renderer-B-LUGB9h.mjs} +74 -21
- package/dist/renderer-B-LUGB9h.mjs.map +1 -0
- package/dist/renderer-B2e4Gr9u.mjs +5 -0
- package/dist/{renderer-B1LD29TV.mjs → renderer-B5b-ehRb.mjs} +3 -3
- package/dist/{renderer-B1LD29TV.mjs.map → renderer-B5b-ehRb.mjs.map} +1 -1
- package/dist/renderer-B6fz4j50.mjs +5 -0
- package/dist/{renderer-_9gbYS-3.mjs → renderer-BCTUqJG7.mjs} +5 -5
- package/dist/{renderer-_9gbYS-3.mjs.map → renderer-BCTUqJG7.mjs.map} +1 -1
- package/dist/renderer-BEftIYw-.mjs +5 -0
- package/dist/{renderer-C9BSXyrq.mjs → renderer-BHPgkoEL.mjs} +4 -4
- package/dist/{renderer-C9BSXyrq.mjs.map → renderer-BHPgkoEL.mjs.map} +1 -1
- package/dist/renderer-BHTnO-7e.mjs +5 -0
- package/dist/{renderer-fs8f1QeE.mjs → renderer-BIieU9pY.mjs} +5 -5
- package/dist/{renderer-fs8f1QeE.mjs.map → renderer-BIieU9pY.mjs.map} +1 -1
- package/dist/{renderer-DwK9jsER.mjs → renderer-BKi6jDi_.mjs} +4 -4
- package/dist/{renderer-DwK9jsER.mjs.map → renderer-BKi6jDi_.mjs.map} +1 -1
- package/dist/renderer-BMlnQqTO.mjs +5 -0
- package/dist/{renderer-BNJ6Jk7-.mjs → renderer-BMpmmYOq.mjs} +4 -4
- package/dist/{renderer-BNJ6Jk7-.mjs.map → renderer-BMpmmYOq.mjs.map} +1 -1
- package/dist/{renderer-DkqZmfm8.mjs → renderer-BO_wuUKA.mjs} +5 -5
- package/dist/{renderer-DkqZmfm8.mjs.map → renderer-BO_wuUKA.mjs.map} +1 -1
- package/dist/renderer-BOzcFezY.mjs +5 -0
- package/dist/{renderer-Bxjb0HYU.mjs → renderer-BPOh9x5X.mjs} +4 -4
- package/dist/{renderer-Bxjb0HYU.mjs.map → renderer-BPOh9x5X.mjs.map} +1 -1
- package/dist/{renderer-Ros7XQg2.mjs → renderer-BPiWsrC2.mjs} +3 -3
- package/dist/{renderer-Ros7XQg2.mjs.map → renderer-BPiWsrC2.mjs.map} +1 -1
- package/dist/{renderer-lHNTgiOM.mjs → renderer-BUj7jE6t.mjs} +3 -3
- package/dist/{renderer-lHNTgiOM.mjs.map → renderer-BUj7jE6t.mjs.map} +1 -1
- package/dist/renderer-BVbjJIKJ.mjs +5 -0
- package/dist/renderer-BXsHKf4k.mjs +5 -0
- package/dist/{renderer-D0aAZHC7.mjs → renderer-BZgJj8Cl.mjs} +4 -4
- package/dist/{renderer-D0aAZHC7.mjs.map → renderer-BZgJj8Cl.mjs.map} +1 -1
- package/dist/{renderer-V4dhrf_h.mjs → renderer-BgjPbgbn.mjs} +6 -6
- package/dist/{renderer-V4dhrf_h.mjs.map → renderer-BgjPbgbn.mjs.map} +1 -1
- package/dist/{renderer-BaIJIfJ6.mjs → renderer-BjgFpwVK.mjs} +5 -5
- package/dist/{renderer-BaIJIfJ6.mjs.map → renderer-BjgFpwVK.mjs.map} +1 -1
- package/dist/renderer-Bks49NVl.mjs +5 -0
- package/dist/{renderer-CU8v-LxD.mjs → renderer-BlZgyBSo.mjs} +5 -5
- package/dist/{renderer-CU8v-LxD.mjs.map → renderer-BlZgyBSo.mjs.map} +1 -1
- package/dist/{renderer-B6Oeahe_.mjs → renderer-BqUAyzCZ.mjs} +5 -5
- package/dist/{renderer-B6Oeahe_.mjs.map → renderer-BqUAyzCZ.mjs.map} +1 -1
- package/dist/{renderer-h62QaJYz.mjs → renderer-Br8km655.mjs} +4 -4
- package/dist/{renderer-h62QaJYz.mjs.map → renderer-Br8km655.mjs.map} +1 -1
- package/dist/{renderer-sfqZK6L5.mjs → renderer-BsMZ5Iaq.mjs} +4 -4
- package/dist/{renderer-sfqZK6L5.mjs.map → renderer-BsMZ5Iaq.mjs.map} +1 -1
- package/dist/{renderer-g_1t2je9.mjs → renderer-BtgqTg2K.mjs} +3 -3
- package/dist/{renderer-DcvjSolU.mjs → renderer-BuvKGwk3.mjs} +11 -2
- package/dist/{renderer-DcvjSolU.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
- package/dist/{renderer-BOrMBwQS.mjs → renderer-C-3qhk5x.mjs} +2 -2
- package/dist/{renderer-BOrMBwQS.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
- package/dist/{renderer-CLAvn9c6.mjs → renderer-C-GTxnfv.mjs} +4 -4
- package/dist/{renderer-CLAvn9c6.mjs.map → renderer-C-GTxnfv.mjs.map} +1 -1
- package/dist/renderer-C-t7qFKr.mjs +5 -0
- package/dist/{renderer-BDZC3o3N.mjs → renderer-C1ctHdXl.mjs} +4 -4
- package/dist/{renderer-BDZC3o3N.mjs.map → renderer-C1ctHdXl.mjs.map} +1 -1
- package/dist/renderer-C24n-6CX.mjs +6 -0
- package/dist/{renderer-pNmI-A9o.mjs → renderer-C7m7Yxgc.mjs} +5 -5
- package/dist/{renderer-pNmI-A9o.mjs.map → renderer-C7m7Yxgc.mjs.map} +1 -1
- package/dist/{renderer-Bf4-N7k7.mjs → renderer-C9dqx3U7.mjs} +5 -5
- package/dist/{renderer-Bf4-N7k7.mjs.map → renderer-C9dqx3U7.mjs.map} +1 -1
- package/dist/renderer-CCReX-7M.mjs +5 -0
- package/dist/{renderer-JHByuUNb.mjs → renderer-CE4535aW.mjs} +3 -3
- package/dist/{renderer-JHByuUNb.mjs.map → renderer-CE4535aW.mjs.map} +1 -1
- package/dist/renderer-CIxFQrAm.mjs +5 -0
- package/dist/{renderer-ByjaseAo.mjs → renderer-CL-vyXgX.mjs} +5 -5
- package/dist/{renderer-ByjaseAo.mjs.map → renderer-CL-vyXgX.mjs.map} +1 -1
- package/dist/renderer-CLHBMIqJ.mjs +5 -0
- package/dist/renderer-CMJKi-Ye.mjs +5 -0
- package/dist/{renderer-B-CMRUag.mjs → renderer-CMnlgAGs.mjs} +4 -4
- package/dist/{renderer-B-CMRUag.mjs.map → renderer-CMnlgAGs.mjs.map} +1 -1
- package/dist/{renderer-BNHcwxw9.mjs → renderer-CQFMyC_c.mjs} +4 -4
- package/dist/{renderer-BNHcwxw9.mjs.map → renderer-CQFMyC_c.mjs.map} +1 -1
- package/dist/{renderer-DgPn_SOC.mjs → renderer-CYwVNbUh.mjs} +4 -4
- package/dist/{renderer-DgPn_SOC.mjs.map → renderer-CYwVNbUh.mjs.map} +1 -1
- package/dist/{renderer-DLPhfwbR.mjs → renderer-CZ5mwBW1.mjs} +3 -3
- package/dist/{renderer-DLPhfwbR.mjs.map → renderer-CZ5mwBW1.mjs.map} +1 -1
- package/dist/{renderer-4ZUv3X1I.mjs → renderer-C_1eqfI0.mjs} +5 -5
- package/dist/{renderer-4ZUv3X1I.mjs.map → renderer-C_1eqfI0.mjs.map} +1 -1
- package/dist/renderer-C_H3mHZa.mjs +5 -0
- package/dist/{renderer-B1esRxGy.mjs → renderer-CciiDHuU.mjs} +4 -4
- package/dist/{renderer-B1esRxGy.mjs.map → renderer-CciiDHuU.mjs.map} +1 -1
- package/dist/renderer-CfkTdR5B.mjs +5 -0
- package/dist/{renderer-ynFRJh7G.mjs → renderer-CgK7Q1G8.mjs} +3 -3
- package/dist/{renderer-CR0mDPYY.mjs → renderer-CnL8Cmmr.mjs} +3 -3
- package/dist/renderer-CnhkXJ0R.mjs +5 -0
- package/dist/{renderer-fwKnV9zs.mjs → renderer-Cp_HOmp7.mjs} +5 -5
- package/dist/{renderer-fwKnV9zs.mjs.map → renderer-Cp_HOmp7.mjs.map} +1 -1
- package/dist/renderer-CqpyVsq_.mjs +5 -0
- package/dist/renderer-CtWgIpTE.mjs +5 -0
- package/dist/{renderer-riIFosX6.mjs → renderer-Cu3iKMSJ.mjs} +5 -5
- package/dist/{renderer-riIFosX6.mjs.map → renderer-Cu3iKMSJ.mjs.map} +1 -1
- package/dist/{renderer-D4f8f66C.mjs → renderer-CuPAQjDK.mjs} +4 -4
- package/dist/{renderer-D4f8f66C.mjs.map → renderer-CuPAQjDK.mjs.map} +1 -1
- package/dist/{renderer-CxGx1Lhi.mjs → renderer-CwlY8Tb-.mjs} +3 -3
- package/dist/{renderer-CxGx1Lhi.mjs.map → renderer-CwlY8Tb-.mjs.map} +1 -1
- package/dist/{renderer-o68mVeyk.mjs → renderer-CxSFvKd1.mjs} +4 -4
- package/dist/{renderer-o68mVeyk.mjs.map → renderer-CxSFvKd1.mjs.map} +1 -1
- package/dist/{renderer-CrR8Mpxq.mjs → renderer-CyUiXLRa.mjs} +5 -5
- package/dist/{renderer-CrR8Mpxq.mjs.map → renderer-CyUiXLRa.mjs.map} +1 -1
- package/dist/renderer-CyuKr5ca.mjs +5 -0
- package/dist/renderer-CzgcZXKH.mjs +3 -0
- package/dist/{renderer-Bx14Wnxl.mjs → renderer-D-GWBoVT.mjs} +58 -4
- package/dist/renderer-D-GWBoVT.mjs.map +1 -0
- package/dist/{renderer-BwrfKKqw.mjs → renderer-D-fzEZfX.mjs} +4 -4
- package/dist/{renderer-BwrfKKqw.mjs.map → renderer-D-fzEZfX.mjs.map} +1 -1
- package/dist/renderer-D5yp74NL.mjs +3 -0
- package/dist/{renderer-DAn9xiQT.mjs → renderer-D8gN7aqk.mjs} +4 -4
- package/dist/{renderer-DAn9xiQT.mjs.map → renderer-D8gN7aqk.mjs.map} +1 -1
- package/dist/renderer-D9ON_1Hf.mjs +5 -0
- package/dist/renderer-DAnTgh4o.mjs +5 -0
- package/dist/{renderer-Dpl6poqD.mjs → renderer-DGOMfyh8.mjs} +2 -2
- package/dist/{renderer-Dpl6poqD.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
- package/dist/{renderer-Rw87u1Cr.mjs → renderer-DGb_wgTW.mjs} +6 -6
- package/dist/{renderer-Rw87u1Cr.mjs.map → renderer-DGb_wgTW.mjs.map} +1 -1
- package/dist/{renderer-Co6UFbZB.mjs → renderer-DJPZs_zV.mjs} +5 -5
- package/dist/{renderer-Co6UFbZB.mjs.map → renderer-DJPZs_zV.mjs.map} +1 -1
- package/dist/renderer-DKJOon6y.d.mts +1 -0
- package/dist/{renderer-DOkbn1ot.mjs → renderer-DOZPZTxe.mjs} +5 -5
- package/dist/{renderer-DOkbn1ot.mjs.map → renderer-DOZPZTxe.mjs.map} +1 -1
- package/dist/{renderer-DaXQgGg3.mjs → renderer-DRal7Goa.mjs} +5 -5
- package/dist/{renderer-DaXQgGg3.mjs.map → renderer-DRal7Goa.mjs.map} +1 -1
- package/dist/renderer-DWgpivA3.mjs +5 -0
- package/dist/{renderer-Bo7shNdU.mjs → renderer-DXFJv_e6.mjs} +4 -4
- package/dist/{renderer-Bo7shNdU.mjs.map → renderer-DXFJv_e6.mjs.map} +1 -1
- package/dist/renderer-Dh_qNNwR.mjs +5 -0
- package/dist/renderer-DkCpXPMP.mjs +5 -0
- package/dist/{renderer-eMCTAa9e.mjs → renderer-Dp5ChuOs.mjs} +4 -4
- package/dist/{renderer-eMCTAa9e.mjs.map → renderer-Dp5ChuOs.mjs.map} +1 -1
- package/dist/{renderer-1uoKiILq.mjs → renderer-DpZballM.mjs} +3 -3
- package/dist/{renderer-1uoKiILq.mjs.map → renderer-DpZballM.mjs.map} +1 -1
- package/dist/renderer-Dre-6cDR.mjs +5 -0
- package/dist/renderer-Ds5z4_HX.mjs +5 -0
- package/dist/{renderer-7ow5Acsg.mjs → renderer-DwGlDNOV.mjs} +3 -3
- package/dist/{renderer-7ow5Acsg.mjs.map → renderer-DwGlDNOV.mjs.map} +1 -1
- package/dist/{renderer-q7q6k_cD.mjs → renderer-DxB_OfLs.mjs} +4 -4
- package/dist/{renderer-q7q6k_cD.mjs.map → renderer-DxB_OfLs.mjs.map} +1 -1
- package/dist/{renderer-DFJWPqOJ.mjs → renderer-Dz6P-rPI.mjs} +3 -3
- package/dist/{renderer-DFJWPqOJ.mjs.map → renderer-Dz6P-rPI.mjs.map} +1 -1
- package/dist/{renderer-BURhYcpA.mjs → renderer-FPiLBwj5.mjs} +4 -4
- package/dist/{renderer-BURhYcpA.mjs.map → renderer-FPiLBwj5.mjs.map} +1 -1
- package/dist/renderer-HGSCOMyP.mjs +5 -0
- package/dist/renderer-KMY8W-cJ.mjs +5 -0
- package/dist/{renderer-D-QVGphn.mjs → renderer-KgsVk9c6.mjs} +4 -4
- package/dist/{renderer-D-QVGphn.mjs.map → renderer-KgsVk9c6.mjs.map} +1 -1
- package/dist/{renderer-COcKhouz.mjs → renderer-LXhEPCmy.mjs} +5 -5
- package/dist/{renderer-COcKhouz.mjs.map → renderer-LXhEPCmy.mjs.map} +1 -1
- package/dist/{renderer-HDj9Zb-O.mjs → renderer-NBMmvqWl.mjs} +20 -7
- package/dist/renderer-NBMmvqWl.mjs.map +1 -0
- package/dist/{renderer-DE9Jik9K.mjs → renderer-Nnu32rqg.mjs} +3 -3
- package/dist/{renderer-DE9Jik9K.mjs.map → renderer-Nnu32rqg.mjs.map} +1 -1
- package/dist/renderer-R21YvXz3.mjs +5 -0
- package/dist/{renderer-celhuAL7.mjs → renderer-RAq3LnNy.mjs} +3 -3
- package/dist/{renderer-celhuAL7.mjs.map → renderer-RAq3LnNy.mjs.map} +1 -1
- package/dist/renderer-RtzCz37W.mjs +5 -0
- package/dist/{renderer-50JEMaVo.mjs → renderer-RzkU_O1i.mjs} +5 -5
- package/dist/{renderer-50JEMaVo.mjs.map → renderer-RzkU_O1i.mjs.map} +1 -1
- package/dist/{renderer-Bbxh4N8Y.mjs → renderer-S9tVGneU.mjs} +95 -80
- package/dist/renderer-S9tVGneU.mjs.map +1 -0
- package/dist/{renderer-BSELd5vU.mjs → renderer-SJyp9-62.mjs} +3 -3
- package/dist/{renderer-BSELd5vU.mjs.map → renderer-SJyp9-62.mjs.map} +1 -1
- package/dist/{renderer-jnAIhWn_.mjs → renderer-_54hiCq0.mjs} +5 -5
- package/dist/{renderer-jnAIhWn_.mjs.map → renderer-_54hiCq0.mjs.map} +1 -1
- package/dist/{renderer-88C3QpKL.d.mts → renderer-aRk849b3.d.mts} +2 -2
- package/dist/{renderer-88C3QpKL.d.mts.map → renderer-aRk849b3.d.mts.map} +1 -1
- package/dist/{renderer-BQetXCcZ.mjs → renderer-dGEMVaZ3.mjs} +4 -4
- package/dist/{renderer-BQetXCcZ.mjs.map → renderer-dGEMVaZ3.mjs.map} +1 -1
- package/dist/{renderer-RvI3qRUI.mjs → renderer-dRXP2dJU.mjs} +5 -5
- package/dist/{renderer-RvI3qRUI.mjs.map → renderer-dRXP2dJU.mjs.map} +1 -1
- package/dist/{renderer-D06HxSXO.mjs → renderer-g9SstkTz.mjs} +3 -3
- package/dist/renderer-iMrqAjix.mjs +5 -0
- package/dist/{renderer-BJ-7WRgO.mjs → renderer-opVuiAQR.mjs} +3 -3
- package/dist/{renderer-BJ-7WRgO.mjs.map → renderer-opVuiAQR.mjs.map} +1 -1
- package/dist/{renderer-KKk7myX1.mjs → renderer-puQhVfDS.mjs} +5 -5
- package/dist/{renderer-KKk7myX1.mjs.map → renderer-puQhVfDS.mjs.map} +1 -1
- package/dist/renderer-sMed1u1O.mjs +5 -0
- package/dist/renderer-tsAuo46l.mjs +5 -0
- package/dist/{renderer-TKZCA0B9.mjs → renderer-vll8LX0I.mjs} +211 -72
- package/dist/renderer-vll8LX0I.mjs.map +1 -0
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs → renderers-CP8CFWDs-BRQyvcut.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DRoslK4F.mjs.map → renderers-CP8CFWDs-BRQyvcut.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-Bnr8DUC--BRDqRF6I.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +76 -11
- package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +1 -0
- package/dist/{src-BYp6r-cS.mjs → src-BzFGotRc.mjs} +250 -30
- package/dist/src-BzFGotRc.mjs.map +1 -0
- 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-CYZkDwae.d.mts.map +0 -1
- package/dist/cloud-xcfV4J03.mjs +0 -233
- package/dist/cloud-xcfV4J03.mjs.map +0 -1
- package/dist/dist-CWLLnigL.mjs.map +0 -1
- package/dist/dist-CySGkG54.mjs.map +0 -1
- package/dist/dist-EQX3TUUl.mjs.map +0 -1
- package/dist/gpu-CpkJJLQP.mjs.map +0 -1
- package/dist/index-BuiZzc6i.d.mts.map +0 -1
- package/dist/index-CEU_Zsb9.d.mts.map +0 -1
- package/dist/index-CdCrae-I.d.mts.map +0 -1
- package/dist/index-Cro-818i.d.mts.map +0 -1
- package/dist/index-D2i9J9Zq.d.mts.map +0 -1
- package/dist/index-gOVtTm-P.d.mts.map +0 -1
- package/dist/preview-BToKUTtZ.mjs.map +0 -1
- package/dist/preview-engine/chunk-4FY4TNST.mjs +0 -1
- package/dist/preview-engine/chunk-7LDSMOO3.mjs +0 -1
- package/dist/preview-engine/chunk-AGAZJZWI.mjs +0 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +0 -1
- package/dist/preview-engine/chunk-C4M3B2Q2.mjs +0 -1
- package/dist/preview-engine/chunk-CIVJXFWH.mjs +0 -4
- package/dist/preview-engine/chunk-D73ZKPFN.mjs +0 -138
- package/dist/preview-engine/chunk-KOVN277Z.mjs +0 -1
- package/dist/preview-engine/chunk-M4QANUJI.mjs +0 -480
- package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
- package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
- package/dist/preview-engine/chunk-XF6DYP6B.mjs +0 -1974
- package/dist/preview-engine/chunk-XYGDTPO7.mjs +0 -39
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +0 -1
- package/dist/preview-engine/renderers-2NGIILMI.mjs +0 -1
- package/dist/preview-engine/renderers-466Z77BH.mjs +0 -1
- package/dist/preview-engine/renderers-4KRENGZA.mjs +0 -1
- package/dist/preview-engine/renderers-4W52BQEU.mjs +0 -1
- package/dist/preview-engine/renderers-55PRAS7G.mjs +0 -1
- package/dist/preview-engine/renderers-5LLYINHW.mjs +0 -1
- package/dist/preview-engine/renderers-63N3Y2XO.mjs +0 -1
- package/dist/preview-engine/renderers-6ROVFDIN.mjs +0 -1
- package/dist/preview-engine/renderers-A4RVLPMG.mjs +0 -1
- package/dist/preview-engine/renderers-A53P4J6O.mjs +0 -1
- package/dist/preview-engine/renderers-AFJ3373L.mjs +0 -1
- package/dist/preview-engine/renderers-ATFWTA3U.mjs +0 -1
- package/dist/preview-engine/renderers-BPYJXHBU.mjs +0 -1
- package/dist/preview-engine/renderers-D3ZF7FXT.mjs +0 -1
- package/dist/preview-engine/renderers-D7YN6B4B.mjs +0 -1
- package/dist/preview-engine/renderers-DBLASKF5.mjs +0 -1
- package/dist/preview-engine/renderers-DC5ZYYHM.mjs +0 -1
- package/dist/preview-engine/renderers-J6ZEXW5L.mjs +0 -1
- package/dist/preview-engine/renderers-JV4MF46Q.mjs +0 -1
- package/dist/preview-engine/renderers-KQKH4ZIX.mjs +0 -1
- package/dist/preview-engine/renderers-MDHPQY6D.mjs +0 -1
- package/dist/preview-engine/renderers-MEITHN4N.mjs +0 -1
- package/dist/preview-engine/renderers-MN3HSBTJ.mjs +0 -1
- package/dist/preview-engine/renderers-NTG3QGNH.mjs +0 -1
- package/dist/preview-engine/renderers-OU4SFMB2.mjs +0 -1
- package/dist/preview-engine/renderers-P6TIBJIG.mjs +0 -1
- package/dist/preview-engine/renderers-POJWQ7L3.mjs +0 -1
- package/dist/preview-engine/renderers-RJ7S6VHD.mjs +0 -1
- package/dist/preview-engine/renderers-RJJAJZYN.mjs +0 -1
- package/dist/preview-engine/renderers-UEQ733VK.mjs +0 -1
- package/dist/preview-engine/renderers-ULO2AW2U.mjs +0 -1
- package/dist/preview-engine/renderers-UPVHGHCK.mjs +0 -1
- package/dist/preview-engine/renderers-UZHSNNIM.mjs +0 -1
- package/dist/preview-engine/renderers-V5KWZL2C.mjs +0 -1
- package/dist/preview-engine/renderers-WL372W36.mjs +0 -228
- package/dist/preview-engine/renderers-YMXKYOHQ.mjs +0 -1
- package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +0 -1
- package/dist/program-Bc860ko5.mjs.map +0 -1
- package/dist/renderer--Ymc_4XJ.mjs +0 -5
- package/dist/renderer-B-OdV-eq.mjs +0 -5
- package/dist/renderer-B65fwoA2.mjs +0 -5
- package/dist/renderer-B92Ahkcv.mjs +0 -5
- package/dist/renderer-B9z2AK31.mjs +0 -5
- package/dist/renderer-BIF3Dg3Z.mjs +0 -5
- package/dist/renderer-BJUVaIAT.mjs +0 -5
- package/dist/renderer-BKRDMbI-.mjs +0 -5
- package/dist/renderer-BSwhyVWa.mjs +0 -5
- package/dist/renderer-BUqSZn2X.mjs +0 -5
- package/dist/renderer-BVKOQarx.d.mts +0 -99
- package/dist/renderer-BVKOQarx.d.mts.map +0 -1
- package/dist/renderer-BbmvjqK9.mjs +0 -3
- package/dist/renderer-Bbxh4N8Y.mjs.map +0 -1
- package/dist/renderer-BhsrlGKp.mjs.map +0 -1
- package/dist/renderer-Bpe4k_x6.mjs +0 -5
- package/dist/renderer-Bx14Wnxl.mjs.map +0 -1
- package/dist/renderer-C1NjG0CJ.mjs +0 -5
- package/dist/renderer-C7Puyst9.mjs +0 -5
- package/dist/renderer-CGA_7320.mjs +0 -5
- package/dist/renderer-CLnFkXO7.mjs +0 -5
- package/dist/renderer-CMQIT1Kh.mjs +0 -5
- package/dist/renderer-CQ1rwjIh.mjs +0 -5
- package/dist/renderer-CT8h0boY.mjs +0 -5
- package/dist/renderer-Cb0lszt3.mjs +0 -5
- package/dist/renderer-Ci7oLye9.mjs +0 -5
- package/dist/renderer-CjqXB3CZ.mjs +0 -5
- package/dist/renderer-CqTV04zQ.mjs +0 -5
- package/dist/renderer-CtWeRtHK.mjs +0 -5
- package/dist/renderer-CzolnwCo.mjs +0 -5
- package/dist/renderer-D6qhcx_C.mjs +0 -5
- package/dist/renderer-DDfEf0jt.mjs +0 -5
- package/dist/renderer-DDpa8ztp.mjs +0 -5
- package/dist/renderer-DbQBqzmx.mjs +0 -5
- package/dist/renderer-DfUcwMKa.mjs +0 -5
- package/dist/renderer-DgIjNANM.mjs +0 -6
- package/dist/renderer-Dsh6Tgu0.mjs +0 -3
- package/dist/renderer-DuIwR9GT.mjs +0 -5
- package/dist/renderer-Dv4u2c14.mjs +0 -5
- package/dist/renderer-HDj9Zb-O.mjs.map +0 -1
- package/dist/renderer-IE1yu3lZ.mjs +0 -5
- package/dist/renderer-PY_wnEN0.mjs +0 -5
- package/dist/renderer-TKZCA0B9.mjs.map +0 -1
- package/dist/renderer-gv24VyzO.mjs +0 -5
- package/dist/renderer-nN6lPZf9.mjs +0 -5
- package/dist/src-BYp6r-cS.mjs.map +0 -1
- package/dist/src-Bnr8DUC--BRDqRF6I.mjs.map +0 -1
- /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
- /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import{a as et,b as rt,c as yt}from"./chunk-JAAFSVAG.mjs";import{c as mt,d as pt,e as A}from"./chunk-CSLSWUUT.mjs";import{b as tt}from"./chunk-FRJPXWAG.mjs";import{e as ft}from"./chunk-GXFYRMJZ.mjs";import{B as gt,c as dt,e as xt,y as U,z as C}from"./chunk-64L4GUOF.mjs";import{a as D}from"./chunk-354GX6IB.mjs";import{g as b}from"./chunk-Y4NIR77Z.mjs";b();function Nt(s,t=180,e=12,r=1,i=0){if(s<=0)return 0;let a=Math.sqrt(Math.max(1e-4,t)/Math.max(1e-4,r)),o=e/(2*Math.sqrt(Math.max(1e-4,t*r)));if(o<1){let l=a*Math.sqrt(1-o*o),n=Math.exp(-o*a*s),u=-1,c=(i-o*a*-1)/Math.max(1e-6,l),m=n*(u*Math.cos(l*s)+c*Math.sin(l*s));return Math.min(2,Math.max(-1,1+m))}else if(Math.abs(o-1)<1e-4){let l=Math.exp(-a*s);return 1+(-1+(i-a)*s)*l}else{let l=-a*(o-Math.sqrt(o*o-1)),n=-a*(o+Math.sqrt(o*o-1)),u=(i+n)/Math.max(1e-6,l-n),c=-1-u;return 1+(u*Math.exp(l*s)+c*Math.exp(n*s))}}function jt(s,t=0){if(s===0)return[1,0,0,1];let e=s*Math.PI/180,r=t*Math.PI/180,i=Math.cos(r),a=Math.sin(r),o=Math.tan(e),l=1-o*i*a,n=o*i*i,u=-o*a*a,c=1+o*a*i;return[l,n,u,c]}function Ht(s,t){let e=t.anchorX,r=t.anchorY;switch(t.preset){case"center":e=.5,r=.5;break;case"baseline":e=.5,r=s.height>0?s.ascender/s.height:.8;break;case"bottom_left":e=0,r=1;break;case"bottom_center":e=.5,r=1;break;case"bottom_right":e=1,r=1;break;case"top_left":e=0,r=0;break;case"top_center":e=.5,r=0;break;case"top_right":e=1,r=0;break;default:e=.5,r=.5;break}let i=(e-.5)*s.width+t.offsetX,a=(r-.5)*s.height+t.offsetY;return{px:i,py:a}}function Yt(s,t,e,r=0){if(e===0||t<=1)return 0;let i=r*(t-1);return(s-i)*e}function Xt(s,t){try{let e={textIndex:t.charIndex,textTotal:Math.max(1,t.totalChars),wordIndex:t.wordIndex,wordTotal:Math.max(1,t.totalWords),lineIndex:t.lineIndex,lineTotal:Math.max(1,t.totalLines),time:t.time,frame:t.frame,fps:t.fps,sin:Math.sin,cos:Math.cos,tan:Math.tan,exp:Math.exp,log:Math.log,abs:Math.abs,min:Math.min,max:Math.max,sqrt:Math.sqrt,pow:Math.pow,floor:Math.floor,ceil:Math.ceil,round:Math.round,PI:Math.PI,clamp:(l,n,u)=>Math.max(n,Math.min(u,l)),noise:l=>{let n=Math.sin(l*12.9898+t.frame*.1)*43758.5453;return(n-Math.floor(n))*2-1},signals:t.signals??{}},r=Object.keys(e),i=Object.values(e),a=new Function(...r,`return (${s});`),o=Number(a(...i));return Number.isFinite(o)?Math.max(-1,Math.min(1,o)):0}catch{return 0}}function Qt(s,t,e){let r=Math.max(1,t),i=r>1?s/(r-1):0,a=e.totalAngle*Math.PI/180,o=i*a,l=0,n=0,u=0,c=0,m=0,h=0,d=1;switch(e.mode){case"cylinder":{let y=e.totalAngle<360?(i-.5)*a:o;e.axis==="y"?(l=e.radius*Math.sin(y),u=e.radius*Math.cos(y)-e.radius,m=y*180/Math.PI):e.axis==="x"?(n=e.radius*Math.sin(y),u=e.radius*Math.cos(y)-e.radius,c=y*180/Math.PI):(l=e.radius*Math.sin(y),n=e.radius*Math.cos(y),h=y*180/Math.PI);let g=Math.cos(y);d=Math.max(.25,(g+1)*.5);break}case"vortex":{let g=-Math.PI/2+o,P=e.radius*(1-i*.35);l=P*Math.cos(g),n=P*Math.sin(g),u=-s*e.pitch||0;let v=-.35*e.radius/(a||1),M=v*Math.cos(g)-P*Math.sin(g),G=v*Math.sin(g)+P*Math.cos(g);h=Math.atan2(G,M)*180/Math.PI,d=Math.max(.65,1-i*.35);break}case"helix":{if(e.axis==="x"){let y=e.pitch>10?e.pitch:28;l=(s-(r-1)/2)*y,n=e.radius*Math.sin(o),u=e.radius*Math.cos(o)-e.radius,c=Math.sin(o)*22,d=.75+.25*((Math.cos(o)+1)*.5)}else{let y=(i-.5)*a;l=e.radius*Math.sin(y),n=(s-(r-1)/2)*e.pitch,u=e.radius*Math.cos(y)-e.radius,m=y*180/Math.PI;let g=Math.cos(y);d=Math.max(.65,(g+1)*.5)}break}default:{u=0;break}}let p=Math.max(100,e.perspective??1200),f=p-u,x=f>1?p/f:1;return{x:l*x,y:n*x,z:u,rotX:c,rotY:m,rotZ:h,scaleMult:Math.max(.1,x),depthOpacity:d}}function Kt(s,t,e,r,i){let o=(t>0?Math.max(t,e):e)+r.repeatGap;if(o<=0)return s;let l=r.velocity*i;if(r.snap?.enabled){let n=r.snap.stopIndex??0,u=r.snap.granularity==="character"?40:120,c=n*u,m=Math.min(1,i*1.5);l=l*(1-m)+c*m}if((r.direction==="right"||r.direction==="down")&&(l=-l),r.loop){let n=(s-l)%o;return n<-e?n+o:n}return s-l}function Zt(s,t,e,r,i,a){let o=Math.max(1,t),l=o>1?s/(o-1):.5,n=Math.max(20,e.minFreqHz),u=Math.max(n+100,e.maxFreqHz),c=n*(u/n)**l,m=0,h=ft.getChannelSamples(e.signalChannel,"primary");if(h&&h.length>0){let p=a>0?a:24,f=Math.max(0,Math.min(h.length-1,Math.round(i/p*24)));m=Number(h[f])||0}else if(r){let p=r[e.signalChannel];if(typeof p=="number")m=p;else if(typeof p=="function")m=Number(p(i,a,c))||0;else if(typeof p=="object"&&p!==null){let f=p;if(typeof f.get=="function")m=Number(f.get({frame:i,fps:a,freq:c}))||0;else if(Array.isArray(f.samples)||ArrayBuffer.isView(f.samples)){let x=f.samples,y=Math.floor(l*(x.length-1));m=Number(x[y])||0}}}let d=Math.max(0,Math.min(1,m));return e.minScale+d*(e.maxScale-e.minScale)}b();function ee(s,t,e,r,i,a=0,o=0){let l=t+r,n=e+r;if(n<=l)return 0;let u=(s-l)/(n-l),c=0;switch(i){case"square":c=u>=0&&u<=1?1:0;break;case"ramp_up":c=Math.max(0,Math.min(1,u));break;case"ramp_down":c=1-Math.max(0,Math.min(1,u));break;case"triangle":{u<0||u>1?c=0:u<.5?c=u*2:c=(1-u)*2;break}case"round":{u<0||u>1?c=0:c=.5-.5*Math.cos(u*2*Math.PI);break}case"smooth":{u<=0?c=0:u>=1?c=1:c=u*u*(3-2*u);break}}if(c>0&&c<1){if(a!==0&&c>.5){let m=(c-.5)*2,h=a>0?1+a*3:1/(1-a*3);c=.5+.5*m**h}if(o!==0&&c<=.5){let m=c*2,h=o>0?1+o*3:1/(1-o*3);c=.5*m**h}}return Math.max(0,Math.min(1,c))}function re(s,t,e,r){let i=(t*(1-r)+r)*12.9898+e+s*78.233,a=Math.sin(i)*43758.5453;return(a-Math.floor(a))*2-1}function ie(s,t){let e=t,r=()=>(e=(e*9301+49297)%233280,e/233280),i=Array.from({length:s},(a,o)=>o);for(let a=i.length-1;a>0;a--){let o=Math.floor(r()*(a+1)),l=i[a];i[a]=i[o],i[o]=l}return i}function ne(s,t,e){switch(e){case"add":return Math.max(0,Math.min(1,s+t));case"subtract":return Math.max(0,Math.min(1,s-t));case"intersect":return s*t;case"min":return Math.min(s,t);case"max":return Math.max(s,t);case"difference":return Math.abs(s-t)}}b();var Pt={ascii:"!@#$%^&*()_+{}[]:;<>,.?",alphanumeric:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",matrix:"010101<>[]{}+=*~#%&!?/\\:;|X0123456789",binary:"01",hex:"0123456789ABCDEF"};function kt(s,t){return s==="custom"&&t&&t.length>0?t:Pt[s]??Pt.alphanumeric}function se(s,t,e,r,i={mode:"human",jitter:.35,commaPauseMultiplier:3,sentencePauseMultiplier:5.5,paragraphPauseMultiplier:7},a={enabled:!1,charset:"alphanumeric",scrambleFramesPerChar:8,highlightProbability:.25},o=2,l="character",n){if(n===void 0&&t<e)return{visibleChars:0,currentDisplayString:"",isCursorVisible:!1};let u=n!==void 0?Math.max(0,Math.min(1,n)):Math.min(1,(t-e)/Math.max(1,r)),c=n!==void 0?u*r:t-e,m=s.length,h=Math.floor(u*m);if(l==="word"){let f=s.split(/(\s+)/),x=[];f.forEach((g,P)=>{g.trim().length>0&&x.push(P)});let y=Math.min(x.length,Math.floor(u*(x.length+1)));if(y<=0)h=0;else{let g=x[Math.min(x.length-1,y-1)];h=f.slice(0,g+1).join("").length}}else if(l==="line"){let f=s.split(`
|
|
2
|
+
`),x=Math.min(f.length,Math.floor(u*(f.length+1)));h=f.slice(0,x).join(`
|
|
3
|
+
`).length}else if(i.mode==="human"&&u<1){let f=0,x=0,y=r/Math.max(1,m);for(let g=0;g<m;g++){let P=s[g],v=1,M=i.commaPauseMultiplier??3,G=i.sentencePauseMultiplier??5.5,B=i.paragraphPauseMultiplier??7,R=i.jitter??.35;P===","||P===";"?v=M:P==="."||P==="!"||P==="?"?v=G:P===`
|
|
4
|
+
`&&(v=B);let L=1+Math.sin(g*17.3+42)*.5*R,w=y*v*L;if(x+=w,x<=c)f=g+1;else break}h=Math.min(m,f)}let d=s.slice(0,h);if(a.enabled&&h<m&&h>0){let f=kt(a.charset,a.customCharset),x=Math.min(h,Math.max(1,a.scrambleFramesPerChar>4?3:2)),y="";for(let g=0;g<x;g++){let P=Math.floor(Math.abs(Math.sin(t*7+g*13))*f.length)%f.length;y+=f[P]}d=d.slice(0,d.length-x)+y}let p=!0;if(o>0){let f=Math.max(1,Math.round(30/(2*o)));p=Math.floor(c/f)%2===0}return{visibleChars:h,currentDisplayString:d,isCursorVisible:p}}b();b();var bt=`
|
|
5
|
+
struct CompositeUniforms {
|
|
6
|
+
blendMode : u32,
|
|
7
|
+
padding1 : u32,
|
|
8
|
+
padding2 : u32,
|
|
9
|
+
padding3 : u32,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
@group(0) @binding(0) var<uniform> u : CompositeUniforms;
|
|
13
|
+
@group(1) @binding(0) var baseTex : texture_2d<f32>;
|
|
14
|
+
@group(1) @binding(1) var overlayTex : texture_2d<f32>;
|
|
15
|
+
@group(1) @binding(2) var samp : sampler;
|
|
16
|
+
|
|
17
|
+
struct VSOut {
|
|
18
|
+
@builtin(position) pos : vec4<f32>,
|
|
19
|
+
@location(0) uv : vec2<f32>,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
23
|
+
var pos = array<vec2<f32>, 4>(
|
|
24
|
+
vec2<f32>(-1.0, 1.0),
|
|
25
|
+
vec2<f32>(1.0, 1.0),
|
|
26
|
+
vec2<f32>(-1.0, -1.0),
|
|
27
|
+
vec2<f32>(1.0, -1.0)
|
|
28
|
+
);
|
|
29
|
+
var uv = array<vec2<f32>, 4>(
|
|
30
|
+
vec2<f32>(0.0, 0.0),
|
|
31
|
+
vec2<f32>(1.0, 0.0),
|
|
32
|
+
vec2<f32>(0.0, 1.0),
|
|
33
|
+
vec2<f32>(1.0, 1.0)
|
|
34
|
+
);
|
|
35
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
fn lum(c: vec3<f32>) -> f32 {
|
|
39
|
+
return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fn clip_color(c: vec3<f32>) -> vec3<f32> {
|
|
43
|
+
let l = lum(c);
|
|
44
|
+
let n = min(min(c.r, c.g), c.b);
|
|
45
|
+
let x = max(max(c.r, c.g), c.b);
|
|
46
|
+
var res = c;
|
|
47
|
+
if (n < 0.0) {
|
|
48
|
+
res = l + (((res - l) * l) / (l - n));
|
|
49
|
+
}
|
|
50
|
+
if (x > 1.0) {
|
|
51
|
+
res = l + (((res - l) * (1.0 - l)) / (x - l));
|
|
52
|
+
}
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
57
|
+
let diff = l - lum(c);
|
|
58
|
+
return clip_color(c + vec3<f32>(diff));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
fn sat(c: vec3<f32>) -> f32 {
|
|
62
|
+
return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
fn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {
|
|
66
|
+
let c_min = min(min(c.r, c.g), c.b);
|
|
67
|
+
let c_max = max(max(c.r, c.g), c.b);
|
|
68
|
+
if (c_max <= c_min) {
|
|
69
|
+
return vec3<f32>(0.0);
|
|
70
|
+
}
|
|
71
|
+
return (c - vec3<f32>(c_min)) * s / (c_max - c_min);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
75
|
+
let d = textureSample(baseTex, samp, in.uv);
|
|
76
|
+
let s = textureSample(overlayTex, samp, in.uv);
|
|
77
|
+
let sa = s.a;
|
|
78
|
+
let da = d.a;
|
|
79
|
+
|
|
80
|
+
switch (u.blendMode) {
|
|
81
|
+
case 16u: { return d * sa; } // mask-in / destination-in
|
|
82
|
+
case 17u: { return d * (1.0 - sa); } // mask-out / destination-out
|
|
83
|
+
case 18u: { return s * da; } // source-in
|
|
84
|
+
case 19u: { return s * (1.0 - da); } // source-out
|
|
85
|
+
case 20u: { return s * da + d * (1.0 - sa); } // source-atop
|
|
86
|
+
case 21u: { return d + s * (1.0 - da); } // destination-over
|
|
87
|
+
case 22u: { return d * sa + s * (1.0 - da); } // destination-atop
|
|
88
|
+
case 23u: { return s + d; } // lighter
|
|
89
|
+
case 24u: { return s; } // copy
|
|
90
|
+
case 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor
|
|
91
|
+
// Luma mattes: the overlay's brightness (premultiplied, so transparent = black) masks the base.
|
|
92
|
+
case 26u: { return d * clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0); } // luma-in
|
|
93
|
+
case 27u: { return d * (1.0 - clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0)); } // luma-out
|
|
94
|
+
default: {
|
|
95
|
+
if (sa <= 0.0) { return d; }
|
|
96
|
+
if (da <= 0.0) { return s; }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);
|
|
101
|
+
let d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);
|
|
102
|
+
|
|
103
|
+
var b_rgb = s_rgb;
|
|
104
|
+
|
|
105
|
+
switch (u.blendMode) {
|
|
106
|
+
case 1u: { b_rgb = s_rgb * d_rgb; } // multiply
|
|
107
|
+
case 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen
|
|
108
|
+
case 3u: { // overlay
|
|
109
|
+
b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, d_rgb < vec3<f32>(0.5));
|
|
110
|
+
}
|
|
111
|
+
case 4u: { b_rgb = min(s_rgb, d_rgb); } // darken
|
|
112
|
+
case 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten
|
|
113
|
+
case 6u: { // color-dodge
|
|
114
|
+
b_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));
|
|
115
|
+
}
|
|
116
|
+
case 7u: { // color-burn
|
|
117
|
+
b_rgb = select(1.0 - min((1.0 - d_rgb) / s_rgb, vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb == vec3<f32>(0.0));
|
|
118
|
+
}
|
|
119
|
+
case 8u: { // hard-light
|
|
120
|
+
b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, s_rgb < vec3<f32>(0.5));
|
|
121
|
+
}
|
|
122
|
+
case 9u: { // soft-light
|
|
123
|
+
b_rgb = select(
|
|
124
|
+
d_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),
|
|
125
|
+
d_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),
|
|
126
|
+
s_rgb <= vec3<f32>(0.5)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
case 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference
|
|
130
|
+
case 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion
|
|
131
|
+
case 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue
|
|
132
|
+
case 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation
|
|
133
|
+
case 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color
|
|
134
|
+
case 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity
|
|
135
|
+
case 16u: { return d * s.a; } // mask-in
|
|
136
|
+
case 17u: { return d * (1.0 - s.a); } // mask-out
|
|
137
|
+
default: { b_rgb = s_rgb; } // normal
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
let out_a = sa + da * (1.0 - sa);
|
|
141
|
+
let out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;
|
|
142
|
+
|
|
143
|
+
return vec4<f32>(out_rgb, out_a);
|
|
144
|
+
}
|
|
145
|
+
`;var _t=`
|
|
146
|
+
struct MotionBlur2DUniforms {
|
|
147
|
+
vel: vec2<f32>,
|
|
148
|
+
_pad: vec2<f32>,
|
|
149
|
+
shutterFraction: f32,
|
|
150
|
+
samples: f32,
|
|
151
|
+
viewportWidth: f32,
|
|
152
|
+
viewportHeight: f32,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
@group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;
|
|
156
|
+
@group(1) @binding(0) var sourceTexture: texture_2d<f32>;
|
|
157
|
+
@group(1) @binding(1) var colorSampler: sampler;
|
|
158
|
+
|
|
159
|
+
@vertex
|
|
160
|
+
fn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
|
|
161
|
+
var pos = array<vec2<f32>, 3>(
|
|
162
|
+
vec2<f32>(-1.0, -3.0),
|
|
163
|
+
vec2<f32>( 3.0, 1.0),
|
|
164
|
+
vec2<f32>(-1.0, 1.0)
|
|
165
|
+
);
|
|
166
|
+
return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@fragment
|
|
170
|
+
fn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
171
|
+
let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);
|
|
172
|
+
let sampleCount = u32(max(u.samples, 1.0));
|
|
173
|
+
let velUV = u.vel * u.shutterFraction;
|
|
174
|
+
let halfSamples = f32(sampleCount) * 0.5;
|
|
175
|
+
|
|
176
|
+
var accum = vec4<f32>(0.0);
|
|
177
|
+
var totalWeight = 0.0;
|
|
178
|
+
|
|
179
|
+
for (var i = 0u; i < sampleCount; i = i + 1u) {
|
|
180
|
+
let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);
|
|
181
|
+
let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
182
|
+
let w = exp(-2.5 * t * t);
|
|
183
|
+
accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;
|
|
184
|
+
totalWeight += w;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return accum / max(totalWeight, 0.0001);
|
|
188
|
+
}
|
|
189
|
+
`,it=class{textures=[];texturesByKey=new Map;index=0;getTexture(t,e,r,i,a){let o=new Set(Array.isArray(a)?a:a?[a]:[]),l=`${e}x${r}:${i}`,n=this.texturesByKey.get(l);if(n)for(let c=0;c<n.length;c++){let m=n[c];if(!o.has(m)){n.splice(c,1),n.unshift(m);let h=this.textures.indexOf(m);return h>=this.index&&(this.textures.splice(h,1),this.textures.splice(this.index,0,m),this.index++),m}}let u=t.createTexture({size:[e,r],format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});return this.texturesByKey.has(l)||this.texturesByKey.set(l,[]),this.texturesByKey.get(l).unshift(u),this.textures.splice(this.index,0,u),this.index++,u}reset(){this.index=0}destroy(){for(let t of this.textures)t.destroy();this.textures=[],this.texturesByKey.clear(),this.index=0}},Rt={normal:0,"source-over":0,multiply:1,screen:2,overlay:3,darken:4,lighten:5,"color-dodge":6,"color-burn":7,"hard-light":8,"soft-light":9,difference:10,exclusion:11,hue:12,saturation:13,color:14,luminosity:15,"mask-in":16,"destination-in":16,"mask-out":17,"destination-out":17,"source-in":18,"source-out":19,"source-atop":20,"destination-over":21,"destination-atop":22,lighter:23,copy:24,xor:25,"luma-in":26,"luma-out":27},E=class{device;compositeUniformLayout;dualTextureLayout;motionBlurUniformLayout;singleTextureLayout;compositePipeline;motionBlurPipeline;compositePool;motionBlurPool;texturePool;compositeUniformBindGroupCache=new C;motionBlurUniformBindGroupCache=new C;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(t,e){this.device=t,this.compositePool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new it,this.compositeUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.dualTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),this.motionBlurUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.singleTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let r=t.createPipelineLayout({bindGroupLayouts:[this.compositeUniformLayout,this.dualTextureLayout]}),i=t.createShaderModule({label:"composite.wgsl",code:bt});this.compositePipeline=t.createRenderPipeline({label:"CompositePipeline",layout:r,vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}});let a=t.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),o=t.createShaderModule({label:"motion-blur-2d.wgsl",code:_t});this.motionBlurPipeline=t.createRenderPipeline({label:"MotionBlurPipeline",layout:a,vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(t,e,r,i,a){return this.texturePool.getTexture(t,e,r,i,a)}getBuffer(t,e){return this.compositePool.getBuffer(t,e)}composite(t,e,r,i,a,o,l,n){let u=r.getSampler(this.device),c=[i,a];n&&(Array.isArray(n)?c.push(...n):c.push(n));let m=this.texturePool.getTexture(this.device,i.width,i.height,l,c);this.compositeData[0]=Rt[o]??0;let h=this.compositePool.getBuffer(this.device,this.compositeData),d=t.beginRenderPass({colorAttachments:[{view:m.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});d.setPipeline(this.compositePipeline);let p=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,h);d.setBindGroup(0,p);let f=e.getCompositeBindGroup(this.device,this.dualTextureLayout,i,a,u);return d.setBindGroup(1,f),d.draw(4),d.end(),m}applyMotionBlur(t,e,r,i,a,o,l=180,n=16,u,c){if(Math.abs(a)<.1&&Math.abs(o)<.1||l<=0)return i;let m=r.getSampler(this.device),h=[i];c&&(Array.isArray(c)?h.push(...c):h.push(c));let d=this.texturePool.getTexture(this.device,i.width,i.height,u,h);this.motionBlurData[0]=a/i.width,this.motionBlurData[1]=o/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=l/360,this.motionBlurData[5]=n,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let p=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),f=t.beginRenderPass({colorAttachments:[{view:d.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});f.setPipeline(this.motionBlurPipeline);let x=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,p);return f.setBindGroup(0,x),f.setBindGroup(1,e.getBindGroup(this.device,this.singleTextureLayout,i,m)),f.draw(3),f.end(),d}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};b();b();var I=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(t,e,r,i){let a=this.cache.get(r);a||(a=new Map,this.cache.set(r,a));let o=a.get(e);return o||(o=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i}]}),a.set(e,o)),o}getCompositeBindGroup(t,e,r,i,a){let o=this.dualCache.get(r);o||(o=new WeakMap,this.dualCache.set(r,o));let l=o.get(i);l||(l=new Map,o.set(i,l));let n=l.get(e);return n||(n=t.createBindGroup({layout:e,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i.createView()},{binding:2,resource:a}]}),l.set(e,n)),n}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};b();var V=class{scissorStack=[];stencilStack=[];pushScissor(t,e,r){this.scissorStack.push({rect:t,surfaceWidth:e,surfaceHeight:r})}popScissor(){this.scissorStack.length>0&&this.scissorStack.pop()}saveScissors(){return[...this.scissorStack]}restoreScissors(t){this.scissorStack=[...t]}clearScissors(){this.scissorStack=[]}getCurrentScissor(t,e){let r=this.scissorStack[this.scissorStack.length-1];if(r&&!(t!==void 0&&e!==void 0&&r.surfaceWidth!==void 0&&r.surfaceHeight!==void 0&&r.surfaceWidth!==0&&r.surfaceHeight!==0&&(r.surfaceWidth!==t||r.surfaceHeight!==e)))return r.rect}pushStencilClip(t){this.stencilStack.push(t)}popStencilClip(){this.stencilStack.length>0&&this.stencilStack.pop()}getCurrentStencil(){return this.stencilStack[this.stencilStack.length-1]}applyScissorToPass(t,e,r){let i=this.getCurrentScissor(e,r);if(!i){t.setScissorRect(0,0,Math.max(1,Math.floor(e)),Math.max(1,Math.floor(r)));return}let a=Math.max(0,Math.floor(i.x)),o=Math.max(0,Math.floor(i.y)),l=Math.min(e,Math.ceil(i.x+i.width)),n=Math.min(r,Math.ceil(i.y+i.height)),u=Math.max(0,l-a),c=Math.max(0,n-o);if(!Number.isFinite(a)||!Number.isFinite(o)||!Number.isFinite(u)||!Number.isFinite(c)||u<=0||c<=0)t.setScissorRect(0,0,1,1);else{let m=Math.min(u,Math.max(0,e-a)),h=Math.min(c,Math.max(0,r-o));m<=0||h<=0?t.setScissorRect(0,0,1,1):t.setScissorRect(Math.floor(a),Math.floor(o),Math.floor(m),Math.floor(h))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};b();function vt(s,t,e,r,i=24){let a=[],o=s;for(let l=1;l<=i;l++){let n=l/i,u=1-n,c=u*u,m=c*u,h=n*n,d=h*n,p={x:m*s.x+3*c*n*t.x+3*u*h*e.x+d*r.x,y:m*s.y+3*c*n*t.y+3*u*h*e.y+d*r.y};a.push({p0:o,p1:p}),o=p}return a}function Mt(s,t,e,r=16){let i=[],a=s;for(let o=1;o<=r;o++){let l=o/r,n=1-l,u=n*n,c=l*l,m={x:u*s.x+2*n*l*t.x+c*e.x,y:u*s.y+2*n*l*t.y+c*e.y};i.push({p0:a,p1:m}),a=m}return i}function Lt(s,t,e,r,i,a,o){let l=Math.abs(t),n=Math.abs(e);if(l<1e-9||n<1e-9)return[{p0:s,p1:o}];if(Math.hypot(o.x-s.x,o.y-s.y)<1e-9)return[];let u=r*Math.PI/180,c=Math.cos(u),m=Math.sin(u),h=(s.x-o.x)/2,d=(s.y-o.y)/2,p=c*h+m*d,f=-m*h+c*d,x=p*p/(l*l)+f*f/(n*n);x>1&&(l*=Math.sqrt(x),n*=Math.sqrt(x));let y=l*l*n*n-l*l*f*f-n*n*p*p,g=l*l*f*f+n*n*p*p,P=(i===a?-1:1)*Math.sqrt(Math.max(0,y/g)),v=P*l*f/n,M=-P*n*p/l,G=c*v-m*M+(s.x+o.x)/2,B=m*v+c*M+(s.y+o.y)/2,R=(k,F,O,$)=>Math.atan2(k*$-F*O,k*O+F*$),L=R(1,0,(p-v)/l,(f-M)/n),w=R((p-v)/l,(f-M)/n,(-p-v)/l,(-f-M)/n);!a&&w>0&&(w-=2*Math.PI),a&&w<0&&(w+=2*Math.PI);let J=Math.max(4,Math.ceil(Math.abs(w)/(2*Math.PI)*64)),ut=[],ct=s;for(let k=1;k<=J;k++){let F=L+w*k/J,O=l*Math.cos(F),$=n*Math.sin(F),ht=k===J?o:{x:c*O-m*$+G,y:m*O+c*$+B};ut.push({p0:ct,p1:ht}),ct=ht}return ut}function z(s){let t=[];if(!s||typeof s!="string")return t;let e=[],r=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,i;for(;(i=r.exec(s))!==null;)i[1]?e.push(i[1]):i[2]&&e.push(parseFloat(i[2]));let a=0,o={x:0,y:0},l={x:0,y:0},n=null,u=null;for(;a<e.length;){let c=e[a++];if(typeof c!="string")continue;let m=c,h=m===m.toLowerCase(),d=m.toUpperCase(),p=()=>a<e.length&&typeof e[a]=="number"?e[a++]:0;switch(d){case"M":{let f=!0;for(;a<e.length&&typeof e[a]=="number";){let x=p(),y=p();h&&(x+=o.x,y+=o.y),f?(o={x,y},l={x,y},f=!1):(t.push({p0:o,p1:{x,y}}),o={x,y})}n=null,u=null;break}case"L":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p();h&&(f+=o.x,x+=o.y),t.push({p0:o,p1:{x:f,y:x}}),o={x:f,y:x}}n=null,u=null;break}case"H":{for(;a<e.length&&typeof e[a]=="number";){let f=p();h&&(f+=o.x);let x={x:f,y:o.y};t.push({p0:o,p1:x}),o=x}n=null,u=null;break}case"V":{for(;a<e.length&&typeof e[a]=="number";){let f=p();h&&(f+=o.y);let x={x:o.x,y:f};t.push({p0:o,p1:x}),o=x}n=null,u=null;break}case"C":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p(),P=p(),v=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y,P+=o.x,v+=o.y);let M={x:f,y:x},G={x:y,y:g},B={x:P,y:v};t.push(...vt(o,M,G,B)),o=B,n=G}u=null;break}case"S":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y);let P;n?P={x:2*o.x-n.x,y:2*o.y-n.y}:P={x:o.x,y:o.y};let v={x:f,y:x},M={x:y,y:g};t.push(...vt(o,P,v,M)),o=M,n=v}u=null;break}case"Q":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p();h&&(f+=o.x,x+=o.y,y+=o.x,g+=o.y);let P={x:f,y:x},v={x:y,y:g};t.push(...Mt(o,P,v)),o=v,u=P}n=null;break}case"T":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p();h&&(f+=o.x,x+=o.y);let y;u?y={x:2*o.x-u.x,y:2*o.y-u.y}:y={x:o.x,y:o.y};let g={x:f,y:x};t.push(...Mt(o,y,g)),o=g,u=y}n=null;break}case"A":{for(;a<e.length&&typeof e[a]=="number";){let f=p(),x=p(),y=p(),g=p()!==0,P=p()!==0,v=p(),M=p();h&&(v+=o.x,M+=o.y);let G={x:v,y:M};t.push(...Lt(o,f,x,y,g,P,G)),o=G}n=null,u=null;break}case"Z":{Math.hypot(o.x-l.x,o.y-l.y)>1e-5&&t.push({p0:o,p1:l}),o=l,n=null,u=null;break}default:break}}return t}function W(s,t,e,r=0){if(s.length===0)return[];let i=[],a=0;for(let c of s){let m=Math.hypot(c.p1.x-c.p0.x,c.p1.y-c.p0.y);i.push(m),a+=m}if(a<1e-6)return[];let o=Math.abs(r)>1?r%360/360:r,l=(t+o)%1,n=(e+o)%1;l<0&&(l+=1),n<0&&(n+=1);let u=(c,m)=>{if(c>=m)return[];let h=[],d=0;for(let p=0;p<s.length;p++){let f=s[p],x=i[p],y=d,g=d+x;if(d=g,g<=c||y>=m||x<1e-6)continue;let P=Math.max(0,(c-y)/x),v=Math.min(1,(m-y)/x);if(v>P){let M={x:f.p0.x+(f.p1.x-f.p0.x)*P,y:f.p0.y+(f.p1.y-f.p0.y)*P},G={x:f.p0.x+(f.p1.x-f.p0.x)*v,y:f.p0.y+(f.p1.y-f.p0.y)*v};h.push({p0:M,p1:G})}}return h};if(t===0&&e===1&&r===0)return[...s];if(Math.abs(l-n)<1e-5)return[];if(l<=n)return u(l*a,n*a);{let c=u(l*a,a),m=u(0,n*a);return[...c,...m]}}function nt(s,t,e=0){if(s.length===0||t.length===0)return s;let r=0;for(let d of t)r+=d;if(r<1e-5)return s;let i=0,a=[];for(let d of s){let p=Math.hypot(d.p1.x-d.p0.x,d.p1.y-d.p0.y);a.push(p),i+=p}let o=[],l=(e%r+r)%r,n=0,u=!0,c=l;for(;c>t[n];)c-=t[n],n=(n+1)%t.length,u=!u;let m=t[n]-c,h=0;for(;h<i;){let d=Math.min(m,i-h);if(u&&d>1e-4){let p=W(s,h/i,(h+d)/i);o.push(...p)}h+=d,n=(n+1)%t.length,u=!u,m=t[n]}return o}function Gt(s,t,e=0,r=0,i=0,a=0){let o=Math.min(s/2,t/2),l=Math.min(e,o),n=Math.min(r,o),u=Math.min(i,o),c=Math.min(a,o);return l===0&&n===0&&u===0&&c===0?`M 0 0 L ${s} 0 L ${s} ${t} L 0 ${t} Z`:[`M ${l} 0`,`L ${s-n} 0`,n>0?`Q ${s} 0 ${s} ${n}`:`L ${s} 0`,`L ${s} ${t-u}`,u>0?`Q ${s} ${t} ${s-u} ${t}`:`L ${s} ${t}`,`L ${c} ${t}`,c>0?`Q 0 ${t} 0 ${t-c}`:`L 0 ${t}`,`L 0 ${l}`,l>0?`Q 0 0 ${l} 0`:"L 0 0","Z"].join(" ")}function Ft(s,t){let e=Math.min(s,t)/2,r=s/2,i=t/2,a=e*.5522847498;return[`M ${r} ${i-e}`,`C ${r+a} ${i-e} ${r+e} ${i-a} ${r+e} ${i}`,`C ${r+e} ${i+a} ${r+a} ${i+e} ${r} ${i+e}`,`C ${r-a} ${i+e} ${r-e} ${i+a} ${r-e} ${i}`,`C ${r-e} ${i-a} ${r-a} ${i-e} ${r} ${i-e}`,"Z"].join(" ")}function Ot(s,t){let e=s/2,r=t/2,i=e,a=r,o=e*.5522847498,l=r*.5522847498;return[`M ${i} ${a-r}`,`C ${i+o} ${a-r} ${i+e} ${a-l} ${i+e} ${a}`,`C ${i+e} ${a+l} ${i+o} ${a+r} ${i} ${a+r}`,`C ${i-o} ${a+r} ${i-e} ${a+l} ${i-e} ${a}`,`C ${i-e} ${a-l} ${i-o} ${a-r} ${i} ${a-r}`,"Z"].join(" ")}function $t(s,t,e=5){let r=Math.max(3,e),i=Math.min(s,t)/2,a=s/2,o=t/2,l=[];for(let n=0;n<r;n++){let u=-Math.PI/2+n*2*Math.PI/r;l.push({x:a+i*Math.cos(u),y:o+i*Math.sin(u)})}return l.map((n,u)=>`${u===0?"M":"L"} ${n.x} ${n.y}`).join(" ")+" Z"}function At(s,t,e=5,r=.5){let i=Math.max(3,e),a=Math.min(s,t)/2,o=a*Math.max(.01,Math.min(.99,r)),l=s/2,n=t/2,u=[];for(let c=0;c<i*2;c++){let m=-Math.PI/2+c*Math.PI/i,h=c%2===0?a:o;u.push({x:l+h*Math.cos(m),y:n+h*Math.sin(m)})}return u.map((c,m)=>`${m===0?"M":"L"} ${c.x} ${c.y}`).join(" ")+" Z"}function Et(s,t,e=40,r=40,i=20){let a=Math.min(e,t),o=Math.min(r,s),l=Math.min(i,a),n=t/2;return[`M 0 ${n-l/2}`,`L ${s-o} ${n-l/2}`,`L ${s-o} ${n-a/2}`,`L ${s} ${n}`,`L ${s-o} ${n+a/2}`,`L ${s-o} ${n+l/2}`,`L 0 ${n+l/2}`,"Z"].join(" ")}function ot(s){let{shapeType:t,width:e,height:r}=s;switch(t){case"rect":return Gt(e,r,s.cornerRadius??0,s.cornerRadius??0,s.cornerRadius??0,s.cornerRadius??0);case"circle":return Ft(e,r);case"ellipse":return Ot(e,r);case"polygon":return $t(e,r,s.polygonSides??5);case"star":return At(e,r,s.starPoints??5,s.starInnerRadiusRatio??.5);case"arrow":return Et(e,r,s.arrowHeadWidth??40,s.arrowHeadLength??40,s.arrowShaftWidth??20);case"path":return s.path??"";default:return""}}function St(s){if(s.length<3)return[];if(s.length===3)return[s[0],s[1],s[2]];let t=[...s],e=t[t.length-1],r=t[0];if(Math.hypot(e.x-r.x,e.y-r.y)<1e-5&&t.pop(),t.length<3)return[];let i=0;for(let m=0;m<t.length;m++){let h=(m+1)%t.length;i+=t[m].x*t[h].y-t[h].x*t[m].y}i<0&&t.reverse();let a=(m,h,d,p)=>{let f=(d.x-h.x)*(m.y-h.y)-(d.y-h.y)*(m.x-h.x),x=(p.x-d.x)*(m.y-d.y)-(p.y-d.y)*(m.x-d.x),y=(h.x-p.x)*(m.y-p.y)-(h.y-p.y)*(m.x-p.x);return f>=-1e-6&&x>=-1e-6&&y>=-1e-6},o=(m,h,d,p)=>{if((h.x-m.x)*(d.y-m.y)-(h.y-m.y)*(d.x-m.x)<=1e-7)return!1;for(let x of p)if(!(x===m||x===h||x===d)&&a(x,m,h,d))return!1;return!0},l=[],n=[...t],u=0,c=n.length*n.length*2;for(;n.length>3&&u<c;){u++;let m=!1;for(let h=0;h<n.length;h++){let d=n[(h-1+n.length)%n.length],p=n[h],f=n[(h+1)%n.length];if(o(d,p,f,n)){l.push(d,p,f),n.splice(h,1),m=!0;break}}m||(l.push(n[0],n[1],n[2]),n.splice(1,1))}return n.length===3&&l.push(n[0],n[1],n[2]),l}function Ut(s){let{shapeType:t,width:e,height:r}=s;if(t==="rect"){let i=s.cornerRadius??0;if(i<=0)return new Float32Array([0,0,e,0,e,r,0,0,e,r,0,r]);let a=Gt(e,r,i,i,i,i),l=z(a).map(c=>c.p0),n=St(l),u=new Float32Array(n.length*2);for(let c=0;c<n.length;c++)u[c*2]=n[c].x,u[c*2+1]=n[c].y;return u}if(t==="circle"||t==="ellipse"){let i=e/2,a=r/2,o=t==="circle"?Math.min(e,r)/2:e/2,l=t==="circle"?o:r/2,n=48,u=new Float32Array(n*3*2),c=0;for(let m=0;m<n;m++){let h=m*2*Math.PI/n,d=(m+1)*2*Math.PI/n;u[c++]=i,u[c++]=a,u[c++]=i+o*Math.cos(h),u[c++]=a+l*Math.sin(h),u[c++]=i+o*Math.cos(d),u[c++]=a+l*Math.sin(d)}return u}if(t==="polygon"){let i=Math.max(3,s.polygonSides??5),a=Math.min(e,r)/2,o=e/2,l=r/2,n=new Float32Array(i*3*2),u=0;for(let c=0;c<i;c++){let m=-Math.PI/2+c*2*Math.PI/i,h=-Math.PI/2+(c+1)*2*Math.PI/i;n[u++]=o,n[u++]=l,n[u++]=o+a*Math.cos(m),n[u++]=l+a*Math.sin(m),n[u++]=o+a*Math.cos(h),n[u++]=l+a*Math.sin(h)}return n}if(t==="star"){let i=Math.max(3,s.starPoints??5),a=Math.min(e,r)/2,o=a*Math.max(.01,Math.min(.99,s.starInnerRadiusRatio??.5)),l=e/2,n=r/2,u=i*2,c=new Float32Array(u*3*2),m=0;for(let h=0;h<u;h++){let d=-Math.PI/2+h*Math.PI/i,p=-Math.PI/2+(h+1)*Math.PI/i,f=h%2===0?a:o,x=(h+1)%2===0?a:o;c[m++]=l,c[m++]=n,c[m++]=l+f*Math.cos(d),c[m++]=n+f*Math.sin(d),c[m++]=l+x*Math.cos(p),c[m++]=n+x*Math.sin(p)}return c}if(t==="arrow"){let i=Math.min(s.arrowHeadWidth??40,r),a=Math.min(s.arrowHeadLength??40,e),o=Math.min(s.arrowShaftWidth??20,i),l=r/2,n=0,u=e-a,c=e,m=l-o/2,h=l+o/2,d=l-i/2,p=l+i/2;return new Float32Array([n,m,u,m,u,h,n,m,u,h,n,h,u,d,c,l,u,p])}if(t==="path"&&s.path){let i=z(s.path);if(i.length===0)return new Float32Array(0);let a=i.map(n=>n.p0),o=St(a),l=new Float32Array(o.length*2);for(let n=0;n<o.length;n++)l[n*2]=o[n].x,l[n*2+1]=o[n].y;return l}return new Float32Array(0)}b();b();var wt=`
|
|
190
|
+
struct Uniforms {
|
|
191
|
+
transformCol0 : vec4<f32>,
|
|
192
|
+
transformCol1 : vec4<f32>,
|
|
193
|
+
transformCol2 : vec4<f32>,
|
|
194
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
|
|
195
|
+
color : vec4<f32>,
|
|
196
|
+
style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
|
|
197
|
+
p0 : vec2<f32>,
|
|
198
|
+
p1 : vec2<f32>,
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
202
|
+
|
|
203
|
+
struct VSOut {
|
|
204
|
+
@builtin(position) pos : vec4<f32>,
|
|
205
|
+
@location(0) localPos : vec2<f32>,
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
209
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
210
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
211
|
+
|
|
212
|
+
let surfaceSize = u.params.yz;
|
|
213
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
214
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
215
|
+
|
|
216
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
|
|
220
|
+
let ba = b - a;
|
|
221
|
+
let len = length(ba);
|
|
222
|
+
if (len < 1e-6) {
|
|
223
|
+
return length(p - a) - radius;
|
|
224
|
+
}
|
|
225
|
+
let dir = ba / len;
|
|
226
|
+
let normal = vec2<f32>(-dir.y, dir.x);
|
|
227
|
+
let pa = p - a;
|
|
228
|
+
|
|
229
|
+
let proj = dot(pa, dir);
|
|
230
|
+
let perp = abs(dot(pa, normal));
|
|
231
|
+
|
|
232
|
+
if (capType > 0.5 && capType < 1.5) {
|
|
233
|
+
// Butt cap: terminates strictly at endpoints a and b
|
|
234
|
+
let dx = max(-proj, proj - len);
|
|
235
|
+
let dy = perp - radius;
|
|
236
|
+
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
237
|
+
let inside = min(max(dx, dy), 0.0);
|
|
238
|
+
return outside + inside;
|
|
239
|
+
} else if (capType >= 1.5) {
|
|
240
|
+
// Square cap: extends past endpoints a and b by radius
|
|
241
|
+
let dx = max(-proj - radius, proj - (len + radius));
|
|
242
|
+
let dy = perp - radius;
|
|
243
|
+
let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
|
|
244
|
+
let inside = min(max(dx, dy), 0.0);
|
|
245
|
+
return outside + inside;
|
|
246
|
+
} else {
|
|
247
|
+
// Round cap (default)
|
|
248
|
+
let h = clamp(proj / len, 0.0, 1.0);
|
|
249
|
+
return length(pa - ba * h) - radius;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
254
|
+
let radius = u.params.w * 0.5;
|
|
255
|
+
let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
|
|
256
|
+
|
|
257
|
+
let fw = max(fwidth(d), 1e-5);
|
|
258
|
+
let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
259
|
+
let alpha = u.color.a * u.params.x * edgeAlpha;
|
|
260
|
+
if (alpha <= 0.0) {
|
|
261
|
+
discard;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return vec4<f32>(u.color.rgb * alpha, alpha);
|
|
265
|
+
}
|
|
266
|
+
`;b();var at={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function T(s){return s.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]})}function _(s,t){let{module:e}=t;return s.createRenderPipeline({label:t.label,layout:s.createPipelineLayout({bindGroupLayouts:[t.uniformLayout]}),vertex:{module:e,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:e,entryPoint:"fs",targets:[{format:t.format,blend:t.blend??at}]},primitive:{topology:t.topology}})}var q=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;scratchData=new Float32Array(28);constructor(t,e){this.device=t,this.uniformPool=new U(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"path.wgsl",code:wt});this.uniformLayout=T(t),this.pipeline=_(t,{label:"PathPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"}),this.maxPipeline=_(t,{label:"PathPipeline.max",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}drawPath(t,e,r,i,a,o,l,n){let u=z(r);if(u.length===0||((n?.trimStart!==void 0||n?.trimEnd!==void 0||n?.trimOffset!==void 0)&&(u=W(u,n.trimStart??0,n.trimEnd??1,n.trimOffset??0)),n?.strokeDashArray&&n.strokeDashArray.length>0&&(u=nt(u,n.strokeDashArray,n.strokeDashOffset??0)),u.length===0))return;let c=D(i),m=n?.opacity??1,h=0;n?.strokeLineCap==="butt"?h=1:n?.strokeLineCap==="square"&&(h=2);for(let d of u)this.drawSegment(t,e,d.p0,d.p1,c,a,h,o,l,m,n)}drawSegments(t,e,r,i,a,o,l,n){let u=r;if((n?.trimStart!==void 0||n?.trimEnd!==void 0||n?.trimOffset!==void 0)&&(u=W(u,n.trimStart??0,n.trimEnd??1,n.trimOffset??0)),n?.strokeDashArray&&n.strokeDashArray.length>0&&(u=nt(u,n.strokeDashArray,n.strokeDashOffset??0)),u.length===0)return;let c=D(i),m=n?.opacity??1,h=0;n?.strokeLineCap==="butt"?h=1:n?.strokeLineCap==="square"&&(h=2);for(let d of u)this.drawSegment(t,e,d.p0,d.p1,c,a,h,o,l,m,n)}drawSegment(t,e,r,i,a,o,l,n,u,c,m){let h=this.scratchData;e.packIntoBuffer(h,c,n,u,m?.transform),h[15]=o,h[16]=a.r,h[17]=a.g,h[18]=a.b,h[19]=a.a,h[20]=l,h[21]=0,h[22]=0,h[23]=0,h[24]=r.x,h[25]=r.y,h[26]=i.x,h[27]=i.y;let d=this.uniformPool.getBuffer(this.device,h),p=i.x-r.x,f=i.y-r.y,x=Math.sqrt(p*p+f*f);if(x<1e-6)return;let y=o*.5+2,g=p/x*y,P=f/x*y,v=-P,M=g,G=new Float32Array([r.x-g-v,r.y-P-M,r.x-g+v,r.y-P+M,i.x+g-v,i.y+P-M,i.x+g+v,i.y+P+M]),B=this.vertexPool.getBuffer(this.device,G),L=m?.blendMode==="max"?this.maxPipeline:this.pipeline;t.setPipeline(L);let w=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,d);t.setBindGroup(0,w),t.setVertexBuffer(0,B),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};b();b();var Ct=`
|
|
267
|
+
struct Uniforms {
|
|
268
|
+
transformCol0 : vec4<f32>,
|
|
269
|
+
transformCol1 : vec4<f32>,
|
|
270
|
+
transformCol2 : vec4<f32>,
|
|
271
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
275
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
276
|
+
@group(1) @binding(1) var samp : sampler;
|
|
277
|
+
|
|
278
|
+
struct VSOut {
|
|
279
|
+
@builtin(position) pos : vec4<f32>,
|
|
280
|
+
@location(0) uv : vec2<f32>,
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
@vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
|
|
284
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
285
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
286
|
+
|
|
287
|
+
let surfaceSize = u.params.yz;
|
|
288
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
289
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
290
|
+
|
|
291
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
295
|
+
let opacity = u.params.x;
|
|
296
|
+
let blurAmount = u.params.w;
|
|
297
|
+
|
|
298
|
+
if (blurAmount > 0.01) {
|
|
299
|
+
let fdx = dpdx(in.uv);
|
|
300
|
+
let fdy = dpdy(in.uv);
|
|
301
|
+
let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
|
|
302
|
+
let step = fw * blurAmount * 0.3;
|
|
303
|
+
|
|
304
|
+
var color = vec4<f32>(0.0);
|
|
305
|
+
var totalWeight = 0.0;
|
|
306
|
+
for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
|
|
307
|
+
for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
|
|
308
|
+
let offset = vec2<f32>(x_offset, y_offset) * step;
|
|
309
|
+
let sampleColor = textureSample(tex, samp, in.uv + offset);
|
|
310
|
+
color = color + sampleColor;
|
|
311
|
+
totalWeight = totalWeight + 1.0;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return (color / totalWeight) * opacity;
|
|
315
|
+
} else {
|
|
316
|
+
let color = textureSample(tex, samp, in.uv);
|
|
317
|
+
return color * opacity;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
`;var N=class{buffers=[];index=0;size;usage;constructor(t,e){this.size=t,this.usage=e}getBuffer(t,e){if(this.index>=this.buffers.length){let i=t.createBuffer({size:this.size,usage:this.usage});this.buffers.push(i)}let r=this.buffers[this.index++];return t.queue.writeBuffer(r,0,e),r}reset(){this.index=0}destroy(){for(let t of this.buffers)t.destroy();this.buffers=[]}},j=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;uniformData=new Float32Array(16);vertexData=new Float32Array(16);constructor(t,e){this.device=t,this.uniformPool=new N(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new N(64,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"quad.wgsl",code:Ct});this.uniformLayout=T(t),this.textureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let i=t.createPipelineLayout({bindGroupLayouts:[this.uniformLayout,this.textureLayout]});this.pipeline=t.createRenderPipeline({label:"QuadPipeline",layout:i,vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:e,blend:at}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,a,o,l,n,u,c){let m=c?.opacity??1;r.packIntoBuffer(this.uniformData,m,n,u,c?.transform);let h=this.uniformPool.getBuffer(this.device,this.uniformData),d=o.x/i.width,p=o.y/i.height,f=(o.x+o.width)/i.width,x=(o.y+o.height)/i.height;this.vertexData[0]=l.x,this.vertexData[1]=l.y,this.vertexData[2]=d,this.vertexData[3]=p,this.vertexData[4]=l.x+l.width,this.vertexData[5]=l.y,this.vertexData[6]=f,this.vertexData[7]=p,this.vertexData[8]=l.x,this.vertexData[9]=l.y+l.height,this.vertexData[10]=d,this.vertexData[11]=x,this.vertexData[12]=l.x+l.width,this.vertexData[13]=l.y+l.height,this.vertexData[14]=f,this.vertexData[15]=x;let y=this.vertexPool.getBuffer(this.device,this.vertexData),g=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h),P=e.getBindGroup(this.device,this.textureLayout,i,a);t.setPipeline(this.pipeline),t.setBindGroup(0,g),t.setBindGroup(1,P),t.setVertexBuffer(0,y),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};b();var H=class{samplers=new Map;lru=[];maxCapacity;constructor(t=32){this.maxCapacity=t}getSampler(t,e={}){let r=Math.max(1,Math.min(16,e.maxAnisotropy??4)),i=`${e.magFilter??"linear"}:${e.minFilter??"linear"}:${e.mipmapFilter??"linear"}:${e.addressModeU??"clamp-to-edge"}:${e.addressModeV??"clamp-to-edge"}:${r}`,a=this.samplers.get(i);if(a)this.lru=this.lru.filter(o=>o!==i);else{if(a=t.createSampler({magFilter:e.magFilter??"linear",minFilter:e.minFilter??"linear",mipmapFilter:e.mipmapFilter??"linear",addressModeU:e.addressModeU??"clamp-to-edge",addressModeV:e.addressModeV??"clamp-to-edge",maxAnisotropy:r}),this.samplers.size>=this.maxCapacity){let o=this.lru.pop();o&&this.samplers.delete(o)}this.samplers.set(i,a)}return this.lru.unshift(i),a}destroy(){this.samplers.clear(),this.lru=[]}};b();b();var Y=`
|
|
321
|
+
struct GradientUniforms {
|
|
322
|
+
info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count
|
|
323
|
+
geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)
|
|
324
|
+
offsets : array<vec4<f32>, 2>,
|
|
325
|
+
stops : array<vec4<f32>, 8>, // OKLab + alpha
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
fn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {
|
|
329
|
+
let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);
|
|
330
|
+
let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);
|
|
331
|
+
let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);
|
|
332
|
+
let lin = clamp(vec3<f32>(
|
|
333
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
334
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
335
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
|
|
336
|
+
), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
337
|
+
let lo = lin * 12.92;
|
|
338
|
+
let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;
|
|
339
|
+
return select(hi, lo, lin <= vec3<f32>(0.0031308));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/// Position along the gradient (0..1, unclamped for linear/radial) at local point p.
|
|
343
|
+
fn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {
|
|
344
|
+
let d = p - g.geom.xy;
|
|
345
|
+
let kind = g.info.x;
|
|
346
|
+
if (kind < 1.5) {
|
|
347
|
+
return dot(d, g.geom.zw) + 0.5;
|
|
348
|
+
}
|
|
349
|
+
if (kind < 2.5) {
|
|
350
|
+
return length(d / max(g.geom.zw, vec2<f32>(1e-4)));
|
|
351
|
+
}
|
|
352
|
+
let a = atan2(d.x, -d.y) - g.geom.z;
|
|
353
|
+
return fract(a / 6.28318530718);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/// Straight sRGB color + alpha of the gradient at local point p.
|
|
357
|
+
fn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {
|
|
358
|
+
var offs = g.offsets;
|
|
359
|
+
var stops = g.stops;
|
|
360
|
+
let n = i32(g.info.y);
|
|
361
|
+
let t = gradientT(g, p);
|
|
362
|
+
var lab = stops[0];
|
|
363
|
+
if (t > offs[0].x) {
|
|
364
|
+
lab = stops[n - 1];
|
|
365
|
+
for (var i = 1; i < 8; i++) {
|
|
366
|
+
if (i >= n) {
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
let b = offs[i / 4][i % 4];
|
|
370
|
+
if (t <= b) {
|
|
371
|
+
let a = offs[(i - 1) / 4][(i - 1) % 4];
|
|
372
|
+
let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);
|
|
373
|
+
lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);
|
|
379
|
+
}
|
|
380
|
+
`;b();var Bt=`
|
|
381
|
+
${Y}
|
|
382
|
+
|
|
383
|
+
struct Uniforms {
|
|
384
|
+
transformCol0 : vec4<f32>,
|
|
385
|
+
transformCol1 : vec4<f32>,
|
|
386
|
+
transformCol2 : vec4<f32>,
|
|
387
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused
|
|
388
|
+
color : vec4<f32>, // solid color (gradient.info.x = 0)
|
|
389
|
+
gradient : GradientUniforms,
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
393
|
+
|
|
394
|
+
struct VSOut {
|
|
395
|
+
@builtin(position) pos : vec4<f32>,
|
|
396
|
+
@location(0) localPos : vec2<f32>,
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
400
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
401
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
402
|
+
|
|
403
|
+
let surfaceSize = u.params.yz;
|
|
404
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
405
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
406
|
+
|
|
407
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
411
|
+
var outColor = u.color;
|
|
412
|
+
if (u.gradient.info.x > 0.5) {
|
|
413
|
+
outColor = evalGradient(u.gradient, in.localPos);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
let alpha = outColor.a * u.params.x;
|
|
417
|
+
if (alpha <= 0.0) {
|
|
418
|
+
discard;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return vec4<f32>(outColor.rgb * alpha, alpha);
|
|
422
|
+
}
|
|
423
|
+
`;b();var It={linear:1,radial:2,conic:3};function X(s){return typeof s=="string"&&s.includes("gradient(")?mt(s):null}function Q(s,t,e,r){if(e.fill(0,r,r+48),!s)return;let i=pt(s.stops),a=Math.max(t.width,.001),o=Math.max(t.height,.001),l=t.x+s.center[0]*a,n=t.y+s.center[1]*o;if(e[r]=It[s.type],e[r+1]=i.length,e[r+4]=s.type==="linear"?t.x+a/2:l,e[r+5]=s.type==="linear"?t.y+o/2:n,s.type==="linear"){let u=s.angle*Math.PI/180,c=Math.sin(u),m=-Math.cos(u),h=Math.abs(a*c)+Math.abs(o*m);e[r+6]=c/h,e[r+7]=m/h}else if(s.type==="radial"){let u,c;s.radius?[u,c]=s.radius:[u,c]=Vt(s,l-t.x,t.x+a-l,n-t.y,t.y+o-n),e[r+6]=u,e[r+7]=c}else e[r+6]=s.from*Math.PI/180;i.forEach((u,c)=>{e[r+8+c]=u.offset}),A(i).forEach((u,c)=>{e.set(u,r+16+c*4)})}function Vt(s,t,e,r,i){let a=s.extent??"farthest-corner",o=a.startsWith("farthest"),l=o?Math.max(t,e):Math.min(t,e),n=o?Math.max(r,i):Math.min(r,i),u=s.shape==="circle";if(a.endsWith("side")){if(!u)return[l,n];let c=o?Math.max(l,n):Math.min(l,n);return[c,c]}if(u){let c=Math.hypot(l,n);return[c,c]}return[l*Math.SQRT2,n*Math.SQRT2]}var K=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(68);constructor(t,e){this.device=t,this.uniformPool=new U(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"shape-fill.wgsl",code:Bt});this.uniformLayout=T(t),this.pipeline=_(t,{label:"ShapeFillPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-list"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,a,o,l,n){if(r.length<6||i.type==="none")return;let u=n?.opacity??1;e.packIntoBuffer(this.uniformData,u,o,l,n?.transform),this.uniformData[15]=0;let c=X(i.color);if(c)this.uniformData.fill(0,16,20),Q(c,a,this.uniformData,20);else{let d=D(i.color??"#ffffff");this.uniformData[16]=d.r,this.uniformData[17]=d.g,this.uniformData[18]=d.b,this.uniformData[19]=d.a,this.packTwoColorGradient(i,a,d)}let m=this.uniformPool.getBuffer(this.device,this.uniformData),h=this.vertexPool.getBuffer(this.device,r);t.setPipeline(this.pipeline),t.setBindGroup(0,this.device.createBindGroup({layout:this.uniformLayout,entries:[{binding:0,resource:{buffer:m}}]})),t.setVertexBuffer(0,h),t.draw(r.length/2)}packTwoColorGradient(t,e,r){if(this.uniformData.fill(0,20,68),t.type!=="linear"&&t.type!=="radial")return;let a=D(t.color2??t.color??"#ffffff"),o=this.uniformData;if(t.type==="linear"){let n=t.startX??e.x,u=t.startY??e.y,c=t.endX??e.x+e.width,m=t.endY??e.y+e.height,h=c-n,d=m-u,p=Math.max(h*h+d*d,1e-6);o.set([1,2,0,0,(n+c)/2,(u+m)/2,h/p,d/p],20)}else{let n=t.radius??Math.max(e.width,e.height)/2;o.set([2,2,0,0,t.cx??e.x+e.width/2,t.cy??e.y+e.height/2,n,n],20)}o[28]=0,o[29]=1;let l=A([{offset:0,color:[r.r,r.g,r.b,r.a]},{offset:1,color:[a.r,a.g,a.b,a.a]}]);o.set(l[0],36),o.set(l[1],40)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};b();b();var Dt=`
|
|
424
|
+
${Y}
|
|
425
|
+
|
|
426
|
+
struct Uniforms {
|
|
427
|
+
transformCol0 : vec4<f32>,
|
|
428
|
+
transformCol1 : vec4<f32>,
|
|
429
|
+
transformCol2 : vec4<f32>,
|
|
430
|
+
params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
|
|
431
|
+
color : vec4<f32>,
|
|
432
|
+
rect : vec4<f32>, // x, y, width, height
|
|
433
|
+
gradient : GradientUniforms, // info.x = 0: solid \`color\`
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
437
|
+
|
|
438
|
+
struct VSOut {
|
|
439
|
+
@builtin(position) pos : vec4<f32>,
|
|
440
|
+
@location(0) localPos : vec2<f32>,
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
@vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
|
|
444
|
+
let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
|
|
445
|
+
let p = transform * vec3<f32>(xy, 1.0);
|
|
446
|
+
|
|
447
|
+
let surfaceSize = u.params.yz;
|
|
448
|
+
let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
|
|
449
|
+
let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
|
|
450
|
+
|
|
451
|
+
return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
|
|
455
|
+
let q = abs(p) - b + r;
|
|
456
|
+
return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
460
|
+
let center = u.rect.xy + u.rect.zw * 0.5;
|
|
461
|
+
let halfSize = u.rect.zw * 0.5;
|
|
462
|
+
let radius = u.params.w;
|
|
463
|
+
|
|
464
|
+
let d = sdRoundedRect(in.localPos - center, halfSize, radius);
|
|
465
|
+
// Rounded shapes: one device pixel of coverage centred on the edge (the
|
|
466
|
+
// quad has room for its outer half). Square ones keep their exact edge.
|
|
467
|
+
let fw = max(fwidth(d), 1e-4);
|
|
468
|
+
var edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
|
|
469
|
+
if (radius > 0.0) {
|
|
470
|
+
edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
|
|
471
|
+
}
|
|
472
|
+
var fill = u.color;
|
|
473
|
+
if (u.gradient.info.x > 0.5) {
|
|
474
|
+
fill = evalGradient(u.gradient, in.localPos);
|
|
475
|
+
}
|
|
476
|
+
let alpha = fill.a * u.params.x * edgeAlpha;
|
|
477
|
+
if (alpha <= 0.0) {
|
|
478
|
+
discard;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
return vec4<f32>(fill.rgb * alpha, alpha);
|
|
482
|
+
}
|
|
483
|
+
`;var Z=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new C;uniformData=new Float32Array(72);vertexData=new Float32Array(8);constructor(t,e){this.device=t,this.uniformPool=new U(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new U(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=t.createShaderModule({label:"solid.wgsl",code:Dt});this.uniformLayout=T(t),this.pipeline=_(t,{label:"SolidPipeline",module:r,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,r,i,a,o,l=0,n){let u=X(i),c=u?{r:0,g:0,b:0,a:1}:D(i),m=n?.opacity??1;e.packIntoBuffer(this.uniformData,m,a,o,n?.transform),this.uniformData[15]=l,this.uniformData[16]=c.r,this.uniformData[17]=c.g,this.uniformData[18]=c.b,this.uniformData[19]=c.a,this.uniformData[20]=r.x,this.uniformData[21]=r.y,this.uniformData[22]=r.width,this.uniformData[23]=r.height,Q(u,r,this.uniformData,24);let h=this.uniformPool.getBuffer(this.device,this.uniformData),d=0;if(l>0){let v=n?.transform?e.getCurrent().multiply(n.transform):e.getCurrent(),M=Math.min(Math.hypot(v.a,v.b),Math.hypot(v.c,v.d));d=2/Math.max(M,.001)}let p=r.x-d,f=r.y-d,x=r.x+r.width+d,y=r.y+r.height+d;this.vertexData[0]=p,this.vertexData[1]=f,this.vertexData[2]=x,this.vertexData[3]=f,this.vertexData[4]=p,this.vertexData[5]=y,this.vertexData[6]=x,this.vertexData[7]=y;let g=this.vertexPool.getBuffer(this.device,this.vertexData);t.setPipeline(this.pipeline);let P=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h);t.setBindGroup(0,P),t.setVertexBuffer(0,g),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};function zt(s){if(Array.isArray(s)){let r=s[3]??1;return[s[0]*r,s[1]*r,s[2]*r,r]}if("r"in s){let r=s.a??1;return{r:s.r*r,g:s.g*r,b:s.b*r,a:r}}let t=Array.from(s),e=t[3]??1;return[t[0]*e,t[1]*e,t[2]*e,e]}var Tt=new WeakMap;function Dr(s,t){let e=Tt.get(s);return(!e||e.format!==t||e.isDestroyed)&&(e=new lt(s,t),Tt.set(s,e)),e.resetPools(),e}var lt=class{device;transformStack=new yt;clipStack=new V;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new I;samplerCache=new H;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(t,e){this.device=t,this.format=e,this.quadPipeline=new j(t,e),this.solidPipeline=new Z(t,e),this.shapeFillPipeline=new K(t,e),this.pathPipeline=new q(t,e),this.effectPipeline=new E(t,e),this.slugPipeline=new gt(t,e)}beginFrame(t,e,r={r:0,g:0,b:0,a:0},i,a,o="clear"){this.surfaceWidth=i,this.surfaceHeight=a,t!==this.lastEncoder&&(this.lastEncoder=t,this.resetPools());let l=t.beginRenderPass({colorAttachments:[{view:e,clearValue:zt(r),loadOp:o,storeOp:"store"}]});return this.clipStack.applyScissorToPass(l,i,a),l}endFrame(t){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),et.flushRetired(this.device),et.prune(this.device)}drawTexture(t,e,r,i){let a=this.samplerCache.getSampler(this.device),o={x:0,y:0,width:e.width,height:e.height};this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,a,o,r,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(t,e,r,i,a){let o=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,o,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawRect(t,e,r,i=0,a){let o=0,l=a;typeof i=="object"&&i!==null?(l=i,o=0):typeof i=="number"&&(o=i),this.rasterDrawCount++,this.solidPipeline.draw(t,this.transformStack,e,r,this.surfaceWidth,this.surfaceHeight,o,l)}drawPath(t,e,r,i,a){this.rasterDrawCount++,this.pathPipeline.drawPath(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawShapeFill(t,e,r,i,a){this.rasterDrawCount++,this.shapeFillPipeline.draw(t,this.transformStack,e,r,i,this.surfaceWidth,this.surfaceHeight,a)}drawShape(t,e,r,i,a){let o={x:0,y:0,width:e.width,height:e.height};if(r&&r.type!=="none"){let l=Ut(e);if(l.length>0&&(this.drawShapeFill(t,l,r,o,a),(!i||!i.width||i.width<=0)&&(r.type??"solid")==="solid"&&r.color)){let n=ot(e);if(n){let u=this.transformStack.getCurrent(),c=1/rt(a?.transform?u.multiply(a.transform):u);this.drawPath(t,n,r.color,c,{...a,strokeLineCap:"round"})}}}if(i&&i.width&&i.width>0&&i.color){let l=ot(e);l&&this.drawPath(t,l,i.color,i.width,{...a,strokeLineCap:i.cap,trimStart:i.trimStart,trimEnd:i.trimEnd,trimOffset:i.trimOffset,strokeDashArray:i.dashArray,strokeDashOffset:i.dashOffset})}}drawRRect(t,e,r,i){this.drawRect(t,e.rect,r,e.rx,i)}getTemporaryTexture(t,e,r){return this.effectPipeline.getTexture(this.device,t,e,this.format,r)}getTemporaryBuffer(t){return this.effectPipeline.getBuffer(this.device,t)}composite(t,e,r,i,a){return this.effectPipeline.composite(t,this.bindGroupCache,this.samplerCache,e,r,i,this.format,a)}applyMotionBlur(t,e,r,i,a=180,o=16,l){return this.effectPipeline.applyMotionBlur(t,this.bindGroupCache,this.samplerCache,e,r,i,a,o,this.format,l)}getCurrentTransform(){return this.transformStack.getCurrent()}getTransformStack(){return this.transformStack}getSurfaceWidth(){return this.surfaceWidth}getSurfaceHeight(){return this.surfaceHeight}pushIdentity(){let t=this.transformStack.getCurrent();this.pushTransform(t.inverse())}pushTransform(t){this.transformStack.push(t)}popTransform(){this.transformStack.pop()}pushScissor(t){this.clipStack.pushScissor(t,this.surfaceWidth,this.surfaceHeight)}pushScissorIntersect(t){let e=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(!e){this.pushScissor(t);return}let r=Math.max(t.x,e.x),i=Math.max(t.y,e.y),a=Math.min(t.x+t.width,e.x+e.width),o=Math.min(t.y+t.height,e.y+e.height);this.pushScissor({x:r,y:i,width:Math.max(0,a-r),height:Math.max(0,o-i)})}pushScissorLocal(t){let e=this.transformStack.getCurrent(),r=[e.transformPoint(new DOMPoint(t.x,t.y)),e.transformPoint(new DOMPoint(t.x+t.width,t.y)),e.transformPoint(new DOMPoint(t.x,t.y+t.height)),e.transformPoint(new DOMPoint(t.x+t.width,t.y+t.height))],i=r.map(m=>m.x),a=r.map(m=>m.y),o=Math.min(...i),l=Math.min(...a),n=Math.max(...i)-o,u=Math.max(...a)-l,c=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(c){let m=Math.max(o,c.x),h=Math.max(l,c.y),d=Math.min(o+n,c.x+c.width),p=Math.min(l+u,c.y+c.height);o=m,l=h,n=Math.max(0,d-m),u=Math.max(0,p-h)}this.clipStack.pushScissor({x:o,y:l,width:n,height:u},this.surfaceWidth,this.surfaceHeight)}popScissor(){this.clipStack.popScissor()}suspendScissors(){let t=this.clipStack.saveScissors();return this.clipStack.clearScissors(),t}resumeScissors(t){this.clipStack.restoreScissors(t)}pushStencilClip(t){this.clipStack.pushStencilClip(t)}popStencilClip(){this.clipStack.popStencilClip()}destroy(){this.isDestroyed=!0,this.transformStack.destroy(),this.clipStack.destroy(),this.bindGroupCache.destroy(),this.samplerCache.destroy(),this.quadPipeline.destroy(),this.solidPipeline.destroy(),this.shapeFillPipeline.destroy(),this.pathPipeline.destroy(),this.effectPipeline.destroy(),this.slugPipeline.destroy(),this.lastEncoder=null}};b();function Wt(s){return xt(s)??dt(s)??tt(s)}function $r(s){let t=Wt(s);return typeof t=="string"?t:tt(s)}export{Nt as a,jt as b,Ht as c,Yt as d,Xt as e,Qt as f,Kt as g,Zt as h,ee as i,re as j,ie as k,ne as l,kt as m,se as n,E as o,Lt as p,z as q,ot as r,at as s,H as t,Dr as u,lt as v,Wt as w,$r as x};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as l,g as p}from"./chunk-Y4NIR77Z.mjs";p();var u=null,n=null,c=null,d=/llvmpipe|lavapipe|softpipe|swiftshader|\bwarp\b|software/i;function g(t){let r=t.info??{},e={vendor:String(r.vendor??""),architecture:String(r.architecture??""),device:String(r.device??""),description:String(r.description??"")},o=r.isFallbackAdapter===!0||t.isFallbackAdapter===!0||d.test(`${e.vendor} ${e.architecture} ${e.device} ${e.description}`);return{...e,software:o}}async function P(){if(await b(),!c)throw new Error("WebGPU adapter unknown");return c}async function m(t){if(typeof l<"u"&&l.versions?.node&&!globalThis.navigator?.gpu){let{create:a,globals:s}=await import("./webgpu-OC6ZJ2EV.mjs");Object.assign(globalThis,s);let f=[];typeof globalThis.navigator>"u"?globalThis.navigator={gpu:a(f)}:Object.defineProperty(globalThis.navigator,"gpu",{value:a(f),configurable:!0,writable:!0})}let r=globalThis.navigator.gpu,e=await r.requestAdapter({powerPreference:"high-performance",...t})??(t?.forceFallbackAdapter?null:await r.requestAdapter({...t,forceFallbackAdapter:!0}));if(!e)throw new Error("WebGPU not available");c=g(e);let o=[];e.features.has("float32-filterable")&&o.push("float32-filterable");let i={};e.limits&&Number.isInteger(e.limits.maxTextureDimension2D)&&(i.maxTextureDimension2D=Math.min(8192,e.limits.maxTextureDimension2D)),e.limits&&Number.isInteger(e.limits.maxStorageBuffersPerShaderStage)&&(i.maxStorageBuffersPerShaderStage=Math.min(16,e.limits.maxStorageBuffersPerShaderStage)),e.limits&&Number.isInteger(e.limits.maxStorageBuffersPerPipelineLayout)&&(i.maxStorageBuffersPerPipelineLayout=Math.min(16,e.limits.maxStorageBuffersPerPipelineLayout));for(let a of["maxStorageBufferBindingSize","maxBufferSize"]){let s=e.limits?.[a];Number.isFinite(s)&&(i[a]=s)}return e.requestDevice({requiredFeatures:o,requiredLimits:i})}function v(){u=null,n=null}var b=async t=>u||n||(n=(async()=>{let r=await m(t);return u=r,r.lost.then(e=>{e.reason!=="destroyed"&&v()}),r})(),n);export{P as a,b};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import{W as xe,Z as Te,ba as ke,ea as we,fa as Me,ga as Ue,ha as Pe,ka as Re}from"./chunk-PH3UUX6A.mjs";import{k as ve}from"./chunk-PIHG6HJO.mjs";import{g as ye}from"./chunk-77MT33VR.mjs";import{g as j}from"./chunk-Y4NIR77Z.mjs";j();j();j();var re=new Uint8Array(0),Ge=new Uint32Array(0);function Ee(t,e,n){re.length<t.length&&(re=new Uint8Array(t.length),Ge=new Uint32Array(t.length));let r=re,c=Ge,i=0,s=0;for(let u=1;u<=t.length;u++)(u===t.length||t[u]!==t[s])&&(r[i]=t[s],c[i]=u-s,i++,s=u);return{width:e,height:n,values:r.slice(0,i),lengths:c.slice(0,i)}}function De(t){let e=new Uint8Array(t.width*t.height),n=0;for(let r=0;r<t.values.length;r++){let c=n+t.lengths[r];t.values[r]!==0&&e.fill(t.values[r],n,c),n=c}return e}function Se(t){return t.values.byteLength+t.lengths.byteLength}function oe(t){let{mask:e,...n}=t;return{...n,rle:Ee(e,t.width,t.height)}}function ae(t){let{rle:e,...n}=t;return{...n,mask:De(e)}}function se(t){let e=512+t.detections.length*128+t.objects.length*256;for(let n of t.masks??[])e+=Se(n.rle);return t.subject&&(e+=Se(t.subject.mask.rle)),e}var $=class{constructor(e=256*1024*1024){this.maxBytes=e}maxBytes;entries=new Map;bytes=0;get(e,n){let r=`${e}#${n}`,c=this.entries.get(r);return c&&(this.entries.delete(r),this.entries.set(r,c)),c}set(e,n,r){let c=`${e}#${n}`,i=this.entries.get(c);i&&(this.bytes-=se(i),this.entries.delete(c)),this.entries.set(c,r),this.bytes+=se(r);for(let[s,u]of this.entries){if(this.bytes<=this.maxBytes)break;this.entries.delete(s),this.bytes-=se(u)}}clear(){this.entries.clear(),this.bytes=0}get size(){return this.entries.size}};j();var Ne=`
|
|
2
|
+
struct Params {
|
|
3
|
+
mode: u32, // 0 matte, 1 mask, 2 crop
|
|
4
|
+
_pad: u32,
|
|
5
|
+
cropMin: vec2<f32>, // uv of the subject bounds (crop)
|
|
6
|
+
cropMax: vec2<f32>,
|
|
7
|
+
_pad2: vec2<f32>,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
@group(0) @binding(0) var<uniform> params: Params;
|
|
11
|
+
@group(0) @binding(1) var picture: texture_2d<f32>;
|
|
12
|
+
@group(0) @binding(2) var mask: texture_2d<f32>;
|
|
13
|
+
@group(0) @binding(3) var samp: sampler;
|
|
14
|
+
|
|
15
|
+
struct VSOut {
|
|
16
|
+
@builtin(position) pos: vec4<f32>,
|
|
17
|
+
@location(0) uv: vec2<f32>,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
@vertex fn vs(@builtin(vertex_index) i: u32) -> VSOut {
|
|
21
|
+
var p = array<vec2<f32>, 3>(vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0));
|
|
22
|
+
var out: VSOut;
|
|
23
|
+
out.pos = vec4(p[i], 0.0, 1.0);
|
|
24
|
+
out.uv = vec2(p[i].x * 0.5 + 0.5, 0.5 - p[i].y * 0.5);
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
29
|
+
var uv = in.uv;
|
|
30
|
+
if (params.mode == 2u) {
|
|
31
|
+
uv = mix(params.cropMin, params.cropMax, uv);
|
|
32
|
+
}
|
|
33
|
+
let m = textureSampleLevel(mask, samp, uv, 0.0).r;
|
|
34
|
+
if (params.mode == 1u) {
|
|
35
|
+
return vec4(m, m, m, 1.0);
|
|
36
|
+
}
|
|
37
|
+
return textureSampleLevel(picture, samp, uv, 0.0) * m;
|
|
38
|
+
}
|
|
39
|
+
`,L=class{constructor(e,n){this.device=e;let r=e.createShaderModule({label:"vision_matte_composite",code:Ne});this.pipeline=e.createRenderPipeline({label:"vision_matte_composite",layout:"auto",vertex:{module:r,entryPoint:"vs"},fragment:{module:r,entryPoint:"fs",targets:[{format:n}]},primitive:{topology:"triangle-list"}}),this.sampler=e.createSampler({magFilter:"linear",minFilter:"linear"})}device;pipeline;sampler;uniforms=[];uniformIndex=0;masks=new Map;uploadMask(e,n,r,c){let i=this.masks.get(e);(!i||i.width!==r||i.height!==c)&&(i?.destroy(),i=this.device.createTexture({label:`vision_mask_${e}`,size:[r,c],format:"r8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),this.masks.set(e,i));let s=Math.ceil(r/256)*256,u=n;if(s!==r){u=new Uint8Array(s*c);for(let f=0;f<c;f++)u.set(n.subarray(f*r,(f+1)*r),f*s)}return this.device.queue.writeTexture({texture:i},u.buffer,{offset:u.byteOffset,bytesPerRow:s,rowsPerImage:c},{width:r,height:c}),i}draw(e,n,r,c,i,s){let u=c.width,f=c.height,o=new Float32Array(8),h=new Uint32Array(o.buffer);h[0]=i==="matte"?0:i==="mask"?1:2,i==="crop"&&s?(o[2]=s.x0/u,o[3]=s.y0/f,o[4]=(s.x1+1)/u,o[5]=(s.y1+1)/f):(o[2]=0,o[3]=0,o[4]=1,o[5]=1,i==="crop"&&(h[0]=0)),this.uniformIndex>=this.uniforms.length&&this.uniforms.push(this.device.createBuffer({size:o.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}));let a=this.uniforms[this.uniformIndex];this.uniformIndex=(this.uniformIndex+1)%16,this.device.queue.writeBuffer(a,0,o);let p=this.device.createBindGroup({layout:this.pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:a}},{binding:1,resource:r.createView()},{binding:2,resource:c.createView()},{binding:3,resource:this.sampler}]}),g=e.beginRenderPass({label:"vision_matte_composite",colorAttachments:[{view:n,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});g.setPipeline(this.pipeline),g.setBindGroup(0,p),g.draw(3),g.end()}};var E=new Map,Ye=4,ce=null,K=null,je=null,Ie=new $,_e=new Map,Xe=new Map,$e=new Map,Le=new Map,Ce=new Map,ue=new WeakMap,_=new Map,D=new Map,Ke=3;function de(t,e,n,r,c,i){let s=t.get(n);return(!s||s.width!==r.width||s.height!==r.height||s.format!==r.format)&&(s?.destroy(),s=e.createTexture({size:[r.width,r.height],format:r.format,usage:c,label:i}),t.set(n,s)),s}var ze=(t,e,n)=>de(Xe,t,e,n,GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING,"vision_held_frame"),We=(t,e,n)=>de($e,t,e,n,GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,"vision_analysis_frame"),qe=(t,e,n)=>de(Le,t,e,n,GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,"vision_matte");function He(t,e,n,r,c){let i=e;return JSON.stringify([t,i?.operation?.id??i?.id??null,r,c,n.mode??"passthrough",n.variant,n.confidence,n.classes,n.maskThreshold,n.featherRadius,n.matteSource,n.keyBackground===!0,n.maxMissedFrames])}function Je(t,e,n){let r=t.backgroundKeyThreshold;return typeof r=="number"?r:typeof r?.get=="function"?Number(r.get({frame:e,fps:n})):typeof r?._value=="number"?Number(r._value):70}function Qe(t,e,n){if(t)return D.set(e,{mask:t,frame:n}),t;let r=D.get(e);if(r&&n-r.frame<=Ke)return r.mask}function Oe(t){let e={variant:t.variant,modelsDir:t.modelsDir,baseUrl:t.baseUrl},n=JSON.stringify(e),r=E.get(n);if(!r){if(E.size>=Ye){let[u,f]=E.entries().next().value;f.runner.close(),E.delete(u)}r={runner:we.create(e),derived:new Map},E.set(n,r)}let c={confidence:t.confidence,classes:t.classes,maskThreshold:t.maskThreshold,featherRadius:t.featherRadius},i=JSON.stringify(c),s=r.derived.get(i);return s||(s=r.runner.derive(c),r.derived.set(i,s)),s}function Ze(t,e){let n=Ce.get(t);return n||(n=new xe({maxMissedFrames:e.maxMissedFrames??15}),Ce.set(t,n)),n}function et(t,e,n){return e<=0||n<=0?t:{people:t.people.map(r=>({...r,keypoints:r.keypoints.map(c=>({x:c.x/e,y:c.y/n,visibility:c.visibility}))}))}}function tt(t,e){if(!e)return!0;let n=t.toLowerCase();return e.some(r=>r.toLowerCase()===n)}function nt(t,e){return t.map(n=>{let{cx:r,cy:c}=ot(n),i=null;for(let s of e){let u=s.centerX-r,f=s.centerY-c,o=u*u+f*f;(!i||o<i.distance)&&(i={trackId:s.trackId,distance:o})}return i?{...n,trackId:i.trackId}:n})}function rt(t,e,n){let r=e*n,c=new Uint8Array(r),i=new Int32Array(r),s=0,u=o=>{c[o]||t[o]>0||(c[o]=1,i[s++]=o)};for(let o=0;o<e;o++)u(o),u((n-1)*e+o);for(let o=0;o<n;o++)u(o*e),u(o*e+e-1);let f=0;for(;f<s;){let o=i[f++],h=o%e,a=o+1;h+1<e&&!c[a]&&t[a]===0&&(c[a]=1,i[s++]=a),a=o-1,h>0&&!c[a]&&t[a]===0&&(c[a]=1,i[s++]=a),a=o+e,a<r&&!c[a]&&t[a]===0&&(c[a]=1,i[s++]=a),a=o-e,a>=0&&!c[a]&&t[a]===0&&(c[a]=1,i[s++]=a)}for(let o=0;o<r;o++)t[o]===0&&c[o]===0&&(t[o]=255)}function st(t,e,n,r=2){if(r<=0)return t;let c=new Uint8Array(e*n),i=new Uint8Array(e*n),s=2*r+1;for(let f=0;f<n;f++){let o=f*e,h=0;for(let a=-r;a<=r;a++){let p=Math.max(0,Math.min(e-1,a));h+=t[o+p]}for(let a=0;a<e;a++){c[o+a]=Math.round(h/s);let p=Math.max(0,a-r),g=Math.min(e-1,a+r+1);h+=t[o+g]-t[o+p]}}let u=new Float64Array(e);for(let f=-r;f<=r;f++){let o=Math.max(0,Math.min(n-1,f))*e;for(let h=0;h<e;h++)u[h]+=c[o+h]}for(let f=0;f<n;f++){let o=f*e,h=Math.max(0,f-r)*e,a=Math.min(n-1,f+r+1)*e;for(let p=0;p<e;p++)i[o+p]=Math.round(u[p]/s),u[p]+=c[a+p]-c[h+p]}return i}function it(t,e,n,r,c,i){let s=0,u=0,f=0,o=0,h=(d,U)=>{let l=U*e+d;if(t[l])return;let B=l*4;s+=r[B],u+=r[B+1],f+=r[B+2],o++};for(let d=0;d<e;d+=4)h(d,0),h(d,n-1);for(let d=0;d<n;d+=4)h(0,d),h(e-1,d);if(o===0)return t;s/=o,u/=o,f/=o;let a=e*n,p=new Uint8Array(a);for(let d=0,U=0;d<a;d++,U+=4)p[d]=Math.max(Math.abs(r[U]-s),Math.abs(r[U+1]-u),Math.abs(r[U+2]-f))>c?1:0;let g=new Int32Array(a),M=0;for(let d=0;d<a;d++)t[d]>0&&(p[d]&&(t[d]=255),g[M++]=d);let k=0;for(;k<M;){let d=g[k++],U=d%e,l=d+1;U+1<e&&t[l]!==255&&p[l]&&(t[l]=255,g[M++]=l),l=d-1,U>0&&t[l]!==255&&p[l]&&(t[l]=255,g[M++]=l),l=d+e,l<a&&t[l]!==255&&p[l]&&(t[l]=255,g[M++]=l),l=d-e,l>=0&&t[l]!==255&&p[l]&&(t[l]=255,g[M++]=l)}rt(t,e,n);let C=i!==void 0&&i>0?Math.max(1,Math.min(8,Math.round(i*50))):2;return st(t,e,n,C)}function ot(t){let{mask:e,width:n,height:r}=t,c=0,i=0,s=0;for(let u=0;u<r;u++){let f=u*n;for(let o=0;o<n;o++)e[f+o]>0&&(c+=o,i+=u,s++)}return s===0?{cx:0,cy:0}:{cx:c/s,cy:i/s}}var Ve=async t=>{let{ctx:e,encoder:n,pass:r,targetView:c,targetWidth:i,targetHeight:s,props:u,drawChild:f}=t,{virtualMedia:o}=u;ve(e.device);let h=o?.operation;if(h?.op!=="Vision")return;let a=h;r.end();let p=o?.children?.[0];if(!p)return;if(a.mode==="depth"){ut(e,n,c,i,s,a.effect,u.sourceTimeSec===void 0?u.frame??0:u.sourceTimeSec*(u.fps??24),u.fps??24);return}let g=a.effect,M=g!=null,k=o?.id??h?.id??`${i}x${s}_${a.mode}_${a.variant}_${a.keyBackground}_${a.backgroundKeyThreshold}`,C=`vision-${k}`,d=M?ue.get(g):_.get(C);d&&(d.width!==i||d.height!==s)&&(d.destroy(),d=void 0,M?ue.delete(g):_.delete(C));let U=d!==void 0;if(!d&&(d=e.device.createTexture({size:[i,s],format:e.renderer.format,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,label:"vision_child_persistent"}),M?ue.set(g,d):_.set(C,d),_.size>4)){let m=_.keys().next().value;m&&m!==C&&(_.get(m)?.destroy(),_.delete(m))}let l=u.frame??0,B=u.compositionFrame??l,O=u.fps??24,P=a.mode??"passthrough",G=P==="mask"||P==="matte"||P==="crop",v=a.visionBundle??o.visionBundle,z=a.enableDetection!==!1||P==="boxes"||P==="tracking",N=a.enableSegmentation===!0||G&&a.matteSource!=="selfie",W=a.enableMatte===!0||G&&a.matteSource==="selfie",q=a.enablePose===!0||P==="skeleton",fe=G&&!v&&!q&&!W&&a.keyBackground!==!0?at(g,u.sourceTimeSec===void 0?l:u.sourceTimeSec*O,O,i,s):void 0,H=P==="skeleton"&&!v?ct(g,u.sourceTimeSec===void 0?l:u.sourceTimeSec*O,O,i,s):void 0,Y=fe!==void 0||H!==void 0,J=!Y&&!W&&!q&&(z||N),me=J?He(k,p,a,i,s):"",Q=m=>a.keyBackground===!0?Je(a,B-(l-m),O):void 0,he=m=>{if(!J||m===void 0)return;let y=Ie.get(me,m);if(!(!y||y.keyThreshold!==Q(m))&&!(N&&v&&!y.masks))return y},F=U?_e.get(k):void 0,R=he(l),pe=Y||R!==void 0;R||(R=he(F));let Z;G&&U&&!pe&&(Z=ze(e.device,k,d),n.copyTextureToTexture({texture:d},{texture:Z},[i,s,1]));let X,ee=null;if(U&&!R&&!Y){let m=We(e.device,k,d),y=e.device.createCommandEncoder({label:"vision_analysis_copy"});y.copyTextureToTexture({texture:d},{texture:m},[i,s,1]),e.device.queue.submit([y.finish()]),X={texture:m,device:e.device,width:i,height:s},G&&a.keyBackground===!0&&(ee=(await Te(X)).data)}let ge=d.createView();e.renderer.beginFrame(n,ge,{r:0,g:0,b:0,a:0},i,s,"clear").end(),await f(p,{...u},ge,d,i,s),_e.set(k,l);let S=[],A=[],te,ne,x;if(Y)x=fe??void 0,x?D.set(k,{mask:x,frame:l}):D.delete(k);else if(R)S=R.objects,z&&v?.setObjectResult(l,{objects:R.objects,rawDetections:R.detections}),N&&v&&R.masks&&(A=R.masks.map(ae),v.setMaskResult(l,A)),R.subject&&(x=ae(R.subject.mask),D.set(k,{mask:x,frame:l}));else if(X){let m=Oe(a),y=X,w=[];if(z){w=await m.detect(y);let T=Ze(k,a);l===0&&T.reset(),S=T.update(w,l,O),v?.setObjectResult(l,{objects:S,rawDetections:w})}let I=[];if(N){let T=G&&a.matteSource!=="selfie"&&a.classes!==void 0,V=await(T?Oe({...a,classes:void 0}):m).segment(y);A=nt(T?V.masks.filter(Fe=>tt(Fe.category,a.classes)):V.masks,S),I=T?V.masks:A,v?.setMaskResult(l,A)}if(W&&(te=await m.matte(y),v?.setMatteResult(l,te)),q){let T=await m.pose(y),b=et(T,y.width,y.height);ne={people:Re(b.people,S)},v?.setPoseResult(l,ne)}if(G){x=Qe(a.matteSource==="selfie"?dt(te):Pe(I.length>0?I:v?.getMaskResult(l)??[],{classes:a.classes}),k,l);let T=Q(F??l);x&&T!==void 0&&ee&&(x={...x,mask:it(x.mask,x.width,x.height,ee,T,a.featherRadius)})}J&&F!==void 0&&Ie.set(me,F,{detections:w,objects:S,masks:v?A.map(oe):null,subject:x?{mask:oe(x)}:null,keyThreshold:Q(F)})}if(G){let m=pe?d:Z;if(!x||!m){e.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},i,s,"clear").end();return}(!K||je!==e.renderer.format)&&(K=new L(e.device,e.renderer.format),je=e.renderer.format);let y=K.uploadMask(k,x.mask,x.width,x.height),w=qe(e.device,k,d);K.draw(n,w.createView(),m,y,P,P==="crop"?Ue(x)??void 0:void 0),v?.setStencilTexture(w);let I=e.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(I,w,{x:0,y:0,width:i,height:s}),I.end();return}if(P==="skeleton"){ce||(ce=new ke(e.device));let m=H!==void 0?H:(v?.getPoseResult(l)??ne)?.people[0]?.keypoints,y=e.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},i,s,"clear");if(m&&m.length>0){let w=ce.renderToTexture(m,{width:i,height:s});e.renderer.drawTexture(y,w,{x:0,y:0,width:i,height:s})}y.end();return}if(P==="boxes"||P==="tracking"){let m=e.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(m,d,{x:0,y:0,width:i,height:s});let y=S.length>0?S:v?.getObjectResult(l).objects??[];if(y.length>0){let w="#38bdf8";for(let T of y){if(!T.active)continue;let b=T.boundingBox;e.renderer.drawRect(m,{x:b.originX,y:b.originY,width:b.width,height:2},w),e.renderer.drawRect(m,{x:b.originX,y:b.originY+b.height-2,width:b.width,height:2},w),e.renderer.drawRect(m,{x:b.originX,y:b.originY,width:2,height:b.height},w),e.renderer.drawRect(m,{x:b.originX+b.width-2,y:b.originY,width:2,height:b.height},w);let V=Math.min(16,b.width/4,b.height/4);e.renderer.drawRect(m,{x:b.originX,y:b.originY,width:V,height:4},"#ffffff"),e.renderer.drawRect(m,{x:b.originX,y:b.originY,width:4,height:V},"#ffffff"),P==="tracking"&&e.renderer.drawRect(m,{x:T.centerX-3,y:T.centerY-3,width:6,height:6},"#ef4444",3)}}m.end();return}let be=e.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(be,d,{x:0,y:0,width:i,height:s}),be.end()};function at(t,e,n,r,c){let i=le(t),s=i?.subject(e,n);return!s||!i||Be(i,s.width/s.height,r/c)?s:void 0}function ct(t,e,n,r,c){let i=le(t),s=i?.pose?.(e,n);return!s||!i?s===null?null:void 0:Be(i,s.width/s.height,r/c)?s.keypoints:void 0}var Ae=new WeakMap;function ut(t,e,n,r,c,i,s,u){let f=le(i);if(!f?.depth)throw new Error("A depth layer reads its clip's depth: add the video to the composition (framefields links it to a `comp.vision(src, { depth: true })` clip).");let o=f.depth(s,u),h=t.renderer.beginFrame(e,n,{r:0,g:0,b:0,a:0},r,c,"clear");if(o){if(Math.abs(o.width/o.height/(r/c)-1)>.02)throw new Error(`A depth layer keeps its clip's aspect ratio (${o.width}\xD7${o.height} source vs a ${r}\xD7${c} layer); crop after the depth layer instead.`);let a=i?Ae.get(i):void 0;(!a||a.width!==o.width||a.height!==o.height)&&(a?.destroy(),a=t.device.createTexture({size:[o.width,o.height],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,label:"vision_depth"}),i&&Ae.set(i,a));let p=new Uint8Array(o.width*o.height*4);for(let g=0;g<o.data.length;g++){let M=Math.round(o.data[g]*255);p.set([M,M,M,255],g*4)}t.device.queue.writeTexture({texture:a},p,{bytesPerRow:o.width*4},[o.width,o.height]),t.renderer.drawTexture(h,a,{x:0,y:0,width:r,height:c})}h.end()}function le(t){return t?.[Me]}function Be(t,e,n){if(Math.abs(e/n-1)<.01)return!0;if(t.exact)throw new Error("A prompted clip matte requires the source aspect ratio. Apply layout cropping after the source matte.");return!1}function dt(t){if(!t||t.coverage<=0)return;let e=Math.round(t.coverage*t.width*t.height);return{category:"person",mask:t.mask,width:t.width,height:t.height,area:e,coverage:t.coverage,detectionIndex:-1}}var wt=ye({WebGPURenderer:Ve});export{wt as a};
|