framefields 2.14.0 → 2.16.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 +5 -1
- package/dist/audio/index.d.mts +3 -3
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-DFwRbID_.mjs → audio-6TfPlfl4.mjs} +3 -3
- package/dist/{audio-DFwRbID_.mjs.map → audio-6TfPlfl4.mjs.map} +1 -1
- package/dist/{audio-CdCuGK5d.d.mts → audio-7oqTUi4G.d.mts} +2 -2
- package/dist/{audio-CdCuGK5d.d.mts.map → audio-7oqTUi4G.d.mts.map} +1 -1
- package/dist/cli/check-worker.mjs +44 -44
- package/dist/cli.mjs +1 -1
- package/dist/cloud/index.mjs +1 -1
- package/dist/{cloud-Cj1TIme8.mjs → cloud-jnk1hPYf.mjs} +2 -2
- package/dist/{cloud-Cj1TIme8.mjs.map → cloud-jnk1hPYf.mjs.map} +1 -1
- package/dist/components/index.d.mts +11 -11
- package/dist/components/index.mjs +43 -43
- package/dist/{dist-Kbf-JTry.mjs → dist-BtI6ukB5.mjs} +2 -2
- package/dist/{dist-Kbf-JTry.mjs.map → dist-BtI6ukB5.mjs.map} +1 -1
- package/dist/{dist-B8Nby2CU.mjs → dist-COOpgG9G.mjs} +4 -3
- package/dist/{dist-B8Nby2CU.mjs.map → dist-COOpgG9G.mjs.map} +1 -1
- package/dist/{dist--Uu5bQ_6.mjs → dist-XqlFM2a8.mjs} +13733 -5323
- package/dist/dist-XqlFM2a8.mjs.map +1 -0
- package/dist/{dist-CiTgmfUw.mjs → dist-f1zkl69f.mjs} +4 -4
- package/dist/dist-f1zkl69f.mjs.map +1 -0
- package/dist/{dist-B_rSWeOz.mjs → dist-umQOWz0a.mjs} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-WMgv8ZaD.mjs → effects-DlRMovU5.mjs} +2 -2
- package/dist/{effects-WMgv8ZaD.mjs.map → effects-DlRMovU5.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-OW3yAfO5.mjs → fonts-BWYcXjyK.mjs} +3 -3
- package/dist/fonts-BWYcXjyK.mjs.map +1 -0
- package/dist/{gpu-R4T2Tndu.mjs → gpu-CH1PdM4T.mjs} +2 -2
- package/dist/{gpu-R4T2Tndu.mjs.map → gpu-CH1PdM4T.mjs.map} +1 -1
- package/dist/{index-CEKxvGY-.d.mts → index-BHTycml5.d.mts} +2 -2
- package/dist/{index-CEKxvGY-.d.mts.map → index-BHTycml5.d.mts.map} +1 -1
- package/dist/{index-DoP6EiHj.d.mts → index-BcxxxwhV.d.mts} +4 -4
- package/dist/{index-DoP6EiHj.d.mts.map → index-BcxxxwhV.d.mts.map} +1 -1
- package/dist/index-C-V6CAhP.d.mts.map +1 -1
- package/dist/{index-D1FqV1eu.d.mts → index-CMhkkc56.d.mts} +43 -11
- package/dist/index-CMhkkc56.d.mts.map +1 -0
- package/dist/{index-B0Vq8Bwf.d.mts → index-CYVpYGM-.d.mts} +2 -2
- package/dist/{index-B0Vq8Bwf.d.mts.map → index-CYVpYGM-.d.mts.map} +1 -1
- package/dist/{index-Bv7gxGK1.d.mts → index-Cq8jgdNY.d.mts} +90 -3
- package/dist/index-Cq8jgdNY.d.mts.map +1 -0
- package/dist/{index-9xte4JgL.d.mts → index-Dg5BAtDq.d.mts} +1446 -541
- package/dist/index-Dg5BAtDq.d.mts.map +1 -0
- package/dist/{index-C7-p9zwU.d.mts → index-DhL7ckvs.d.mts} +5 -5
- package/dist/index-DhL7ckvs.d.mts.map +1 -0
- package/dist/{index-GA9_Z8Fn.d.mts → index-RILu3ULT.d.mts} +2 -2
- package/dist/{index-GA9_Z8Fn.d.mts.map → index-RILu3ULT.d.mts.map} +1 -1
- package/dist/{index-C5sgRLlG.d.mts → index-TCtdSXd7.d.mts} +3 -1
- package/dist/index-TCtdSXd7.d.mts.map +1 -0
- package/dist/{index-CRaydvLi.d.mts → index-s2qQ8ifZ.d.mts} +886 -51
- package/dist/index-s2qQ8ifZ.d.mts.map +1 -0
- package/dist/index.d.mts +13 -13
- package/dist/index.mjs +52 -52
- package/dist/preview/index.d.mts +4 -4
- package/dist/preview/index.mjs +11 -11
- package/dist/preview-Dm912wly.mjs +1037 -0
- package/dist/preview-Dm912wly.mjs.map +1 -0
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-4F3DG6YB.mjs} +2 -2
- package/dist/preview-engine/chunk-A2OTOW3B.mjs +4694 -0
- package/dist/preview-engine/{chunk-GNDE3OXQ.mjs → chunk-BR56TQBP.mjs} +1 -1
- package/dist/preview-engine/{chunk-ADLIF544.mjs → chunk-H2XKXXAU.mjs} +1 -1
- package/dist/preview-engine/chunk-NDUODAY2.mjs +3 -0
- package/dist/preview-engine/{chunk-FZ4RD7HV.mjs → chunk-QAQJSWUT.mjs} +1 -1
- package/dist/preview-engine/chunk-SWRGQTVC.mjs +138 -0
- package/dist/preview-engine/{chunk-52X7SURQ.mjs → chunk-TEA3GVBJ.mjs} +1 -1
- package/dist/preview-engine/chunk-VZUVB3BP.mjs +644 -0
- package/dist/preview-engine/{chunk-UBY2UYEL.mjs → chunk-XSHNQJ7L.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 +3 -3
- package/dist/preview-engine/{renderers-DU7KPFVV.mjs → renderers-6C7NWWDX.mjs} +1 -1
- package/dist/preview-engine/renderers-HHVGNMSJ.mjs +206 -0
- package/dist/preview-engine/{src-YXNX4MLK.mjs → src-RCNEKIRP.mjs} +1 -1
- package/dist/preview-page/index.html +19 -0
- package/dist/preview-page/main.css +1 -0
- package/dist/preview-page/main.js +326 -0
- package/dist/{program-tFKCWU2j.mjs → program-CMigyfso.mjs} +829 -52
- package/dist/program-CMigyfso.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-DkOuQi84.mjs → renderer-0GMEL_Zi.mjs} +3 -3
- package/dist/{renderer-DkOuQi84.mjs.map → renderer-0GMEL_Zi.mjs.map} +1 -1
- package/dist/{renderer-BGp0An5A.mjs → renderer-3Wv2ZBJG.mjs} +3 -3
- package/dist/{renderer-BGp0An5A.mjs.map → renderer-3Wv2ZBJG.mjs.map} +1 -1
- package/dist/{renderer-BVIXKfbC.mjs → renderer-4nXkaAWu.mjs} +1178 -199
- package/dist/renderer-4nXkaAWu.mjs.map +1 -0
- package/dist/{renderer-Cw6_NL2i.mjs → renderer-6SnfLXeg.mjs} +3 -3
- package/dist/{renderer-Cw6_NL2i.mjs.map → renderer-6SnfLXeg.mjs.map} +1 -1
- package/dist/{renderer-BVU22lBS.mjs → renderer-8gHw3O0P.mjs} +2 -2
- package/dist/{renderer-BVU22lBS.mjs.map → renderer-8gHw3O0P.mjs.map} +1 -1
- package/dist/{renderer-BjDddtw9.mjs → renderer-AOBglZHC.mjs} +2 -2
- package/dist/{renderer-D-KHHWQD.mjs → renderer-B0bSARK3.mjs} +3 -3
- package/dist/{renderer-D-KHHWQD.mjs.map → renderer-B0bSARK3.mjs.map} +1 -1
- package/dist/{renderer-CCxk-RJR.mjs → renderer-B2_tuRfl.mjs} +2 -2
- package/dist/{renderer-CCxk-RJR.mjs.map → renderer-B2_tuRfl.mjs.map} +1 -1
- package/dist/{renderer-k5d7JSbs.mjs → renderer-B82FhkEr.mjs} +3 -3
- package/dist/{renderer-k5d7JSbs.mjs.map → renderer-B82FhkEr.mjs.map} +1 -1
- package/dist/{renderer-I0Hh9cLK.mjs → renderer-B9lzA0PY.mjs} +3 -3
- package/dist/{renderer-I0Hh9cLK.mjs.map → renderer-B9lzA0PY.mjs.map} +1 -1
- package/dist/{renderer-Dwwnx7Dk.mjs → renderer-BBSIWSry.mjs} +2 -2
- package/dist/{renderer-Dwwnx7Dk.mjs.map → renderer-BBSIWSry.mjs.map} +1 -1
- package/dist/{renderer-_pC-jB9O.mjs → renderer-BEKDMxbi.mjs} +2 -2
- package/dist/{renderer-_pC-jB9O.mjs.map → renderer-BEKDMxbi.mjs.map} +1 -1
- package/dist/renderer-BERGAxqA.mjs +5 -0
- package/dist/{renderer-raxwsiGI.mjs → renderer-BF960HY8.mjs} +3 -3
- package/dist/{renderer-raxwsiGI.mjs.map → renderer-BF960HY8.mjs.map} +1 -1
- package/dist/{renderer-Dr0tXA4k.mjs → renderer-BFwyVxCu.mjs} +3 -3
- package/dist/{renderer-Dr0tXA4k.mjs.map → renderer-BFwyVxCu.mjs.map} +1 -1
- package/dist/{renderer-DEjo6dw_.mjs → renderer-BNiwcI3-.mjs} +2 -2
- package/dist/{renderer-DEjo6dw_.mjs.map → renderer-BNiwcI3-.mjs.map} +1 -1
- package/dist/{renderer-DIEeHiQA.mjs → renderer-BPbVb2Q4.mjs} +2 -2
- package/dist/{renderer-DIEeHiQA.mjs.map → renderer-BPbVb2Q4.mjs.map} +1 -1
- package/dist/renderer-BQ_YkBMt.mjs +6 -0
- package/dist/{renderer-BBMtmxks.mjs → renderer-BUWxlA8T.mjs} +3 -3
- package/dist/{renderer-BBMtmxks.mjs.map → renderer-BUWxlA8T.mjs.map} +1 -1
- package/dist/renderer-BW0Tjsv9.mjs +5 -0
- package/dist/{renderer-Dgj46uEU.mjs → renderer-BX8liu-e.mjs} +2 -2
- package/dist/{renderer-ZnrEfkYh.mjs → renderer-BXIwDAr_.mjs} +2 -2
- package/dist/{renderer-ZnrEfkYh.mjs.map → renderer-BXIwDAr_.mjs.map} +1 -1
- package/dist/{renderer-DA8YEo_d.mjs → renderer-B_Hy1W-g.mjs} +3 -3
- package/dist/{renderer-DA8YEo_d.mjs.map → renderer-B_Hy1W-g.mjs.map} +1 -1
- package/dist/{renderer-iMiYStcW.mjs → renderer-Bb6cvSgh.mjs} +2 -2
- package/dist/{renderer-iMiYStcW.mjs.map → renderer-Bb6cvSgh.mjs.map} +1 -1
- package/dist/{renderer-BacY4nh8.mjs → renderer-BdppwWC9.mjs} +2 -2
- package/dist/{renderer-BacY4nh8.mjs.map → renderer-BdppwWC9.mjs.map} +1 -1
- package/dist/{renderer-CrxwW6VQ.mjs → renderer-Bhc24HVe.mjs} +3 -3
- package/dist/{renderer-CrxwW6VQ.mjs.map → renderer-Bhc24HVe.mjs.map} +1 -1
- package/dist/{renderer-BH7UCMPQ.mjs → renderer-BiNA2wF0.mjs} +2 -2
- package/dist/{renderer-BH7UCMPQ.mjs.map → renderer-BiNA2wF0.mjs.map} +1 -1
- package/dist/{renderer-DVPgWHZw.mjs → renderer-BmoBgTp5.mjs} +3 -3
- package/dist/{renderer-DVPgWHZw.mjs.map → renderer-BmoBgTp5.mjs.map} +1 -1
- package/dist/{renderer-C20efMI0.mjs → renderer-BmqFmCWS.mjs} +3 -3
- package/dist/{renderer-C20efMI0.mjs.map → renderer-BmqFmCWS.mjs.map} +1 -1
- package/dist/{renderer-B0yVUOPP.mjs → renderer-BnVwAObV.mjs} +2 -2
- package/dist/{renderer-B0yVUOPP.mjs.map → renderer-BnVwAObV.mjs.map} +1 -1
- package/dist/{renderer-CP8wLzTU.mjs → renderer-BxttZHme.mjs} +2 -2
- package/dist/{renderer-CP8wLzTU.mjs.map → renderer-BxttZHme.mjs.map} +1 -1
- package/dist/renderer-BzyPdUD1.mjs +5 -0
- package/dist/renderer-C0hM-mtY.mjs +5 -0
- package/dist/renderer-C6cyUTvk.mjs +5 -0
- package/dist/{renderer-BOSZAdgF.mjs → renderer-C8E4XsSg.mjs} +2 -2
- package/dist/{renderer-BOSZAdgF.mjs.map → renderer-C8E4XsSg.mjs.map} +1 -1
- package/dist/renderer-C8zY3pzk.mjs +5 -0
- package/dist/{renderer-DWq9gYRw.mjs → renderer-C9U-LY50.mjs} +3 -3
- package/dist/{renderer-DWq9gYRw.mjs.map → renderer-C9U-LY50.mjs.map} +1 -1
- package/dist/{renderer-Dj2H5JPR.mjs → renderer-CB2JVu5x.mjs} +3 -3
- package/dist/{renderer-Dj2H5JPR.mjs.map → renderer-CB2JVu5x.mjs.map} +1 -1
- package/dist/{renderer-Bcu3UrI-.mjs → renderer-CC4YBJ8Z.mjs} +3 -3
- package/dist/{renderer-Bcu3UrI-.mjs.map → renderer-CC4YBJ8Z.mjs.map} +1 -1
- package/dist/renderer-CEkSOyKu.mjs +5 -0
- package/dist/{renderer-DzLrvCB2.mjs → renderer-CIycc5O-.mjs} +2 -2
- package/dist/{renderer-DzLrvCB2.mjs.map → renderer-CIycc5O-.mjs.map} +1 -1
- package/dist/renderer-CJYtfa4x.mjs +5 -0
- package/dist/{renderer-BeNl_6EG.mjs → renderer-CJraQlV-.mjs} +2 -2
- package/dist/{renderer-BeNl_6EG.mjs.map → renderer-CJraQlV-.mjs.map} +1 -1
- package/dist/renderer-CKMtHGZh.mjs +5 -0
- package/dist/renderer-CLzicoiy.mjs +5 -0
- package/dist/renderer-CM2A4BHd.mjs +5 -0
- package/dist/{renderer-DtMVitEF.mjs → renderer-COWGWtob.mjs} +2 -2
- package/dist/{renderer-DtMVitEF.mjs.map → renderer-COWGWtob.mjs.map} +1 -1
- package/dist/{renderer-CT3zkfbf.mjs → renderer-COxG2XGf.mjs} +2 -2
- package/dist/{renderer-CT3zkfbf.mjs.map → renderer-COxG2XGf.mjs.map} +1 -1
- package/dist/{renderer-DNxWOz8Q.mjs → renderer-CQDCIsQm.mjs} +2 -2
- package/dist/{renderer-DNxWOz8Q.mjs.map → renderer-CQDCIsQm.mjs.map} +1 -1
- package/dist/{renderer-C5AoaymD.mjs → renderer-CRUeag8i.mjs} +3 -3
- package/dist/{renderer-C5AoaymD.mjs.map → renderer-CRUeag8i.mjs.map} +1 -1
- package/dist/{renderer-ngmYIIob.mjs → renderer-CWVput06.mjs} +3 -3
- package/dist/{renderer-ngmYIIob.mjs.map → renderer-CWVput06.mjs.map} +1 -1
- package/dist/renderer-CZlHjcxr.mjs +5 -0
- package/dist/{renderer-0rveCDm-.mjs → renderer-CbbnBLOB.mjs} +3 -3
- package/dist/{renderer-0rveCDm-.mjs.map → renderer-CbbnBLOB.mjs.map} +1 -1
- package/dist/renderer-CbimvSU8.mjs +5 -0
- package/dist/renderer-Ccvc63yd.mjs +5 -0
- package/dist/renderer-Cdp-SGfq.mjs +5 -0
- package/dist/renderer-CeTcSs3e.mjs +5 -0
- package/dist/{renderer-Brmbl12Y.mjs → renderer-CfLZein2.mjs} +3 -3
- package/dist/{renderer-Brmbl12Y.mjs.map → renderer-CfLZein2.mjs.map} +1 -1
- package/dist/{renderer-BJ8ea92W.mjs → renderer-Ch-q1O-q.mjs} +3 -3
- package/dist/{renderer-BJ8ea92W.mjs.map → renderer-Ch-q1O-q.mjs.map} +1 -1
- package/dist/{renderer-CP108ABB.mjs → renderer-Ch5JvJWl.mjs} +2 -2
- package/dist/{renderer-CP108ABB.mjs.map → renderer-Ch5JvJWl.mjs.map} +1 -1
- package/dist/{renderer-47y12Z37.mjs → renderer-ChtEzq-R.mjs} +2 -2
- package/dist/{renderer-47y12Z37.mjs.map → renderer-ChtEzq-R.mjs.map} +1 -1
- package/dist/{renderer-DhyMfG1v.mjs → renderer-Cj9nTC5l.mjs} +3 -3
- package/dist/{renderer-DhyMfG1v.mjs.map → renderer-Cj9nTC5l.mjs.map} +1 -1
- package/dist/{renderer-BDzn1AKF.mjs → renderer-CqT8HsSS.mjs} +2 -2
- package/dist/{renderer-BDzn1AKF.mjs.map → renderer-CqT8HsSS.mjs.map} +1 -1
- package/dist/{renderer-B7G1KohJ.mjs → renderer-CuQjMhdV.mjs} +2 -2
- package/dist/renderer-CvNuu52U.mjs +5 -0
- package/dist/renderer-CwciC0oI.mjs +5 -0
- package/dist/renderer-CysLUbIr.mjs +5 -0
- package/dist/{renderer-Cm0tsbQH.mjs → renderer-Cz30EVws.mjs} +2 -2
- package/dist/{renderer-Cm0tsbQH.mjs.map → renderer-Cz30EVws.mjs.map} +1 -1
- package/dist/renderer-D3A22Vxb.mjs +5 -0
- package/dist/renderer-D5SY9EmA.mjs +5 -0
- package/dist/renderer-D8h3ZvaE.mjs +5 -0
- package/dist/renderer-DE-B6N9n.mjs +5 -0
- package/dist/renderer-DETZTI7t.mjs +5 -0
- package/dist/{renderer-nHS3Sius.mjs → renderer-DHoX-5U_.mjs} +3 -3
- package/dist/{renderer-nHS3Sius.mjs.map → renderer-DHoX-5U_.mjs.map} +1 -1
- package/dist/{renderer-BWSRryIA.mjs → renderer-DOkm0Ycd.mjs} +2 -2
- package/dist/{renderer-BWSRryIA.mjs.map → renderer-DOkm0Ycd.mjs.map} +1 -1
- package/dist/{renderer-BHYJlK6H.d.mts → renderer-DU3f6ZrS.d.mts} +2 -2
- package/dist/{renderer-BHYJlK6H.d.mts.map → renderer-DU3f6ZrS.d.mts.map} +1 -1
- package/dist/{renderer-BpVOk9ux.mjs → renderer-DUzv-shq.mjs} +2 -2
- package/dist/{renderer-BpVOk9ux.mjs.map → renderer-DUzv-shq.mjs.map} +1 -1
- package/dist/renderer-DWnDj0IM.mjs +5 -0
- package/dist/renderer-DcGUIbQF.mjs +5 -0
- package/dist/renderer-Dfq6FoNO.mjs +5 -0
- package/dist/renderer-DhasXW6S.mjs +3 -0
- package/dist/{renderer-NRMlYkX6.mjs → renderer-DhnOWnEA.mjs} +3 -3
- package/dist/{renderer-NRMlYkX6.mjs.map → renderer-DhnOWnEA.mjs.map} +1 -1
- package/dist/{renderer-COgwYqev.mjs → renderer-Dhy1XHzz.mjs} +3 -3
- package/dist/{renderer-COgwYqev.mjs.map → renderer-Dhy1XHzz.mjs.map} +1 -1
- package/dist/renderer-DjCvpsV_.mjs +5 -0
- package/dist/{renderer-BfZNIiSv.mjs → renderer-DjJshz9Y.mjs} +2 -2
- package/dist/{renderer-BfZNIiSv.mjs.map → renderer-DjJshz9Y.mjs.map} +1 -1
- package/dist/{renderer-CKo7VR8x.mjs → renderer-DmTUIdus.mjs} +3 -3
- package/dist/{renderer-CKo7VR8x.mjs.map → renderer-DmTUIdus.mjs.map} +1 -1
- package/dist/{renderer-Baw6Utxi.mjs → renderer-Dq7AioJa.mjs} +2 -2
- package/dist/{renderer-Baw6Utxi.mjs.map → renderer-Dq7AioJa.mjs.map} +1 -1
- package/dist/renderer-DrAaM6JD.mjs +5 -0
- package/dist/{renderer-D-GWBoVT.mjs → renderer-Dt4sqNEu.mjs} +2 -2
- package/dist/{renderer-D-GWBoVT.mjs.map → renderer-Dt4sqNEu.mjs.map} +1 -1
- package/dist/{renderer-FYOL5Za6.mjs → renderer-Dtcs4idV.mjs} +3 -3
- package/dist/{renderer-FYOL5Za6.mjs.map → renderer-Dtcs4idV.mjs.map} +1 -1
- package/dist/renderer-Dxlv8LYm.mjs +5 -0
- package/dist/{renderer-D-RhYvVl.mjs → renderer-Gj8SrE2W.mjs} +2 -2
- package/dist/{renderer-D-RhYvVl.mjs.map → renderer-Gj8SrE2W.mjs.map} +1 -1
- package/dist/{renderer-D_j1WKMD.mjs → renderer-KfnXDJS0.mjs} +3 -3
- package/dist/{renderer-D_j1WKMD.mjs.map → renderer-KfnXDJS0.mjs.map} +1 -1
- package/dist/{renderer-Bpm145BW.mjs → renderer-MXVlg4p5.mjs} +3 -3
- package/dist/{renderer-Bpm145BW.mjs.map → renderer-MXVlg4p5.mjs.map} +1 -1
- package/dist/{renderer-Nnmi8Gt6.mjs → renderer-N2b6QZ1E.mjs} +3 -3
- package/dist/{renderer-Nnmi8Gt6.mjs.map → renderer-N2b6QZ1E.mjs.map} +1 -1
- package/dist/renderer-Pb43OO2t.mjs +5 -0
- package/dist/{renderer-Ca1KjNCO.mjs → renderer-Q7gDzm8c.mjs} +2 -2
- package/dist/{renderer-Ca1KjNCO.mjs.map → renderer-Q7gDzm8c.mjs.map} +1 -1
- package/dist/{renderer-D2wNFNRf.mjs → renderer-RCiANtRV.mjs} +2 -2
- package/dist/{renderer-D2wNFNRf.mjs.map → renderer-RCiANtRV.mjs.map} +1 -1
- package/dist/{renderer-Cqb7PGrI.mjs → renderer-Sig9nZcI.mjs} +2 -2
- package/dist/renderer-VQbm-cGr.mjs +5 -0
- package/dist/{renderer-W1bVNVR6.mjs → renderer-fabBgwQX.mjs} +3 -3
- package/dist/{renderer-W1bVNVR6.mjs.map → renderer-fabBgwQX.mjs.map} +1 -1
- package/dist/{renderer-zRq0j6Xy.mjs → renderer-g-0PCNoo.mjs} +3 -3
- package/dist/{renderer-zRq0j6Xy.mjs.map → renderer-g-0PCNoo.mjs.map} +1 -1
- package/dist/{renderer-2PjR3w-q.mjs → renderer-gmHKIbKI.mjs} +3 -3
- package/dist/{renderer-2PjR3w-q.mjs.map → renderer-gmHKIbKI.mjs.map} +1 -1
- package/dist/{renderer-03mYJLgX.mjs → renderer-kVZwiRoK.mjs} +3 -3
- package/dist/{renderer-03mYJLgX.mjs.map → renderer-kVZwiRoK.mjs.map} +1 -1
- package/dist/renderer-oPMypDM1.mjs +5 -0
- package/dist/{renderer-DcAKDAnS.mjs → renderer-p7tgxP-A.mjs} +3 -3
- package/dist/{renderer-DcAKDAnS.mjs.map → renderer-p7tgxP-A.mjs.map} +1 -1
- package/dist/{renderer-jUKdkmG5.mjs → renderer-tvYj306A.mjs} +81 -78
- package/dist/renderer-tvYj306A.mjs.map +1 -0
- package/dist/renderer-xvWGpVyp.mjs +5 -0
- package/dist/renderer-zafZbD6Q.mjs +5 -0
- package/dist/{renderers-CP8CFWDs-CshljORp.mjs → renderers-CP8CFWDs-DLjtjrwx.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-CshljORp.mjs.map → renderers-CP8CFWDs-DLjtjrwx.mjs.map} +1 -1
- package/dist/sam/index.d.mts +2 -2
- package/dist/sam/index.mjs +1 -1
- package/dist/signals/index.d.mts +4 -4
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-BU6vm9sP-DdTHmCr4.mjs → src-B23p_eh7-Cj6-lvV6.mjs} +293 -6
- package/dist/src-B23p_eh7-Cj6-lvV6.mjs.map +1 -0
- package/dist/{src-Dy4gnc6w.mjs → src-CoHAjviq.mjs} +1349 -177
- package/dist/src-CoHAjviq.mjs.map +1 -0
- package/dist/storage/index.mjs +1 -1
- package/package.json +63 -60
- package/dist/dist--Uu5bQ_6.mjs.map +0 -1
- package/dist/dist-CiTgmfUw.mjs.map +0 -1
- package/dist/fonts-OW3yAfO5.mjs.map +0 -1
- package/dist/index-9xte4JgL.d.mts.map +0 -1
- package/dist/index-Bv7gxGK1.d.mts.map +0 -1
- package/dist/index-C5sgRLlG.d.mts.map +0 -1
- package/dist/index-C7-p9zwU.d.mts.map +0 -1
- package/dist/index-CRaydvLi.d.mts.map +0 -1
- package/dist/index-D1FqV1eu.d.mts.map +0 -1
- package/dist/preview-D7BGmE1E.mjs +0 -2446
- package/dist/preview-D7BGmE1E.mjs.map +0 -1
- package/dist/preview-engine/chunk-5DZTPUMH.mjs +0 -2568
- package/dist/preview-engine/chunk-NCQHOGZK.mjs +0 -3
- package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
- package/dist/preview-engine/chunk-UPZURPJY.mjs +0 -2227
- package/dist/preview-engine/renderers-DLJOA3BM.mjs +0 -228
- package/dist/program-tFKCWU2j.mjs.map +0 -1
- package/dist/renderer-6_bzbbXt.mjs +0 -5
- package/dist/renderer-8M-9G6F_.mjs +0 -5
- package/dist/renderer-B5OzKvF8.mjs +0 -5
- package/dist/renderer-BBCZ2qbE.mjs +0 -5
- package/dist/renderer-BChbxCux.mjs +0 -5
- package/dist/renderer-BGeMPr8C.mjs +0 -5
- package/dist/renderer-BPQ8Pkjb.mjs +0 -5
- package/dist/renderer-BTRpA3HD.mjs +0 -5
- package/dist/renderer-BVIXKfbC.mjs.map +0 -1
- package/dist/renderer-BVsECSn-.mjs +0 -5
- package/dist/renderer-Bgos68gc.mjs +0 -6
- package/dist/renderer-BjHOvoqO.mjs +0 -5
- package/dist/renderer-BjXMPPlV.mjs +0 -5
- package/dist/renderer-Byobxqkv.mjs +0 -5
- package/dist/renderer-CKrsg3EG.mjs +0 -5
- package/dist/renderer-Cj875NuH.mjs +0 -5
- package/dist/renderer-CnmzJoMv.mjs +0 -5
- package/dist/renderer-CtklDaMg.mjs +0 -5
- package/dist/renderer-D1tK3in_.mjs +0 -5
- package/dist/renderer-D2yc9P61.mjs +0 -5
- package/dist/renderer-D4v-JvSr.mjs +0 -5
- package/dist/renderer-D5yp74NL.mjs +0 -3
- package/dist/renderer-D7WRWDwB.mjs +0 -5
- package/dist/renderer-DGvA0tdB.mjs +0 -5
- package/dist/renderer-DO7v5Sdm.mjs +0 -5
- package/dist/renderer-DRVvt7-V.mjs +0 -5
- package/dist/renderer-DYMCd3jL.mjs +0 -5
- package/dist/renderer-DmHKw-MM.mjs +0 -5
- package/dist/renderer-DoDsuZ6G.mjs +0 -5
- package/dist/renderer-EpgclS70.mjs +0 -5
- package/dist/renderer-GroKiYyK.mjs +0 -5
- package/dist/renderer-MQ5K_xIS.mjs +0 -5
- package/dist/renderer-U43SflML.mjs +0 -5
- package/dist/renderer-UqOmBgCv.mjs +0 -5
- package/dist/renderer-XLULgJM0.mjs +0 -5
- package/dist/renderer-jUKdkmG5.mjs.map +0 -1
- package/dist/renderer-lNjxY1GG.mjs +0 -5
- package/dist/renderer-ukufL7pl.mjs +0 -5
- package/dist/renderer-wb0NCKdF.mjs +0 -5
- package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +0 -1
- package/dist/src-Dy4gnc6w.mjs.map +0 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import{a as _o,b as jo,c as Qo,e as Wo,f as $o}from"./chunk-BR56TQBP.mjs";import{Fa as zn,Ga as nr,Ha as $r,I as Uo,Ia as Hr,J as Ln,K as Yo,Ka as Qt,L as Qr,La as qr,M as Xo,N as Eo,O as er,P as gr,Y as ei,Z as ti,_ as ni,b as jr,c as Gn,ca as Pn,d as _,e as Kn,ea as ri,g as Fo,ga as oi,ha as ii,i as Oo,ia as ai,j as Go,k as Lo,pa as yr,ra as mi,ta as fi,v as zo,w as No,wa as br}from"./chunk-A2OTOW3B.mjs";import{s as Jo,u as Ko}from"./chunk-TEA3GVBJ.mjs";import{b as Ho}from"./chunk-JAAFSVAG.mjs";import{a as Ro}from"./chunk-CJ4CSVU3.mjs";import{a as pi}from"./chunk-OGSZZ4JO.mjs";import"./chunk-LGQSJCKE.mjs";import"./chunk-BREZX5L5.mjs";import"./chunk-CSLSWUUT.mjs";import{a as si,b as ci,d as Wr,g as li}from"./chunk-3QTHW2CD.mjs";import{a as Zo,d as ui,e as di}from"./chunk-OBIJIQCZ.mjs";import{k as Po}from"./chunk-HOV6DDBZ.mjs";import{b as qn,l as Jn}from"./chunk-RECQ74RP.mjs";import"./chunk-UE7Y65C3.mjs";import"./chunk-6FULVULN.mjs";import"./chunk-XOF6UTZX.mjs";import"./chunk-LZNHGH56.mjs";import"./chunk-UZTA2EUU.mjs";import"./chunk-GXFYRMJZ.mjs";import{a as Co,b as Rt,g as Ao,j as Bo,k as Io,l as Vo}from"./chunk-77MT33VR.mjs";import{c as _r,e as Do}from"./chunk-ULOFDFHJ.mjs";import{j as tr,y as qo}from"./chunk-4F3DG6YB.mjs";import"./chunk-QEWDIPJ7.mjs";import"./chunk-OGPJTUAL.mjs";import{a as nt}from"./chunk-354GX6IB.mjs";import"./chunk-5RRKGN2U.mjs";import"./chunk-BDZ3TSOT.mjs";import{g as ke}from"./chunk-Y4NIR77Z.mjs";ke();ke();ke();function Jr(t,e){let n=[];for(let o of e){let i=typeof o=="number"?t.animations[o]:t.animations.find(s=>s.name===o);i&&n.push(i)}return n}function hi(t,e,n){if(e.skin!==void 0)return gr(t,e.skin,n);let o=e.node!==void 0&&n[e.node]?n[e.node]:_.identity();return new Float32Array(o)}function gi(t,e,n=30){let o=[],i=[],s=[];for(let d of e){let m=Math.max(1,Math.round(d.duration*n));o.push({name:d.name,base:i.length,count:m,duration:d.duration});for(let b=0;b<=m;b++)i.push(b/m*d.duration),s.push(d)}let c=new Map,a=i.map((d,m)=>er(t,s[m],d));for(let d of t.meshes){let m=hi(t,d,a[0]??er(t,void 0,0)),b=m.length/16,h=new Float32Array(Math.max(1,a.length)*m.length);a.forEach((C,V)=>{h.set(hi(t,d,C),V*m.length)}),c.set(d,{palette:h,jointCount:b})}return{fps:n,clips:o,meshes:c}}ke();var Xt=(t,e)=>[t[3]*e[0]+t[0]*e[3]+t[1]*e[2]-t[2]*e[1],t[3]*e[1]-t[0]*e[2]+t[1]*e[3]+t[2]*e[0],t[3]*e[2]+t[0]*e[1]-t[1]*e[0]+t[2]*e[3],t[3]*e[3]-t[0]*e[0]-t[1]*e[1]-t[2]*e[2]],bi=t=>[-t[0],-t[1],-t[2],t[3]],Fe=(t,e)=>[t[0]-e[0],t[1]-e[1],t[2]-e[2]],en=(t,e)=>[t[0]+e[0],t[1]+e[1],t[2]+e[2]],tn=(t,e)=>[t[0]*e,t[1]*e,t[2]*e],Nn=(t,e)=>t[0]*e[0]+t[1]*e[1]+t[2]*e[2],hn=(t,e)=>[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]],Gt=t=>Math.hypot(t[0],t[1],t[2]),Ht=t=>tn(t,1/(Gt(t)||1)),nn=(t,e,n)=>Math.min(n,Math.max(e,t));function xi(t,e){let n=tn(hn([t[0],t[1],t[2]],e),2);return en(en(e,tn(n,t[3])),hn([t[0],t[1],t[2]],n))}function rr(t,e){let n=Ht(t),o=Math.sin(e/2);return[n[0]*o,n[1]*o,n[2]*o,Math.cos(e/2)]}function wr(t,e){let n=Ht(t),o=Ht(e),i=Nn(n,o);if(i<-.999999){let d=Math.abs(n[0])<.9?hn(n,[1,0,0]):hn(n,[0,1,0]);return rr(d,Math.PI)}let s=hn(n,o),c=[s[0],s[1],s[2],1+i],a=Math.hypot(...c);return[c[0]/a,c[1]/a,c[2]/a,c[3]/a]}var Ga=t=>[t[12],t[13],t[14]],yi=t=>t.slice(t.lastIndexOf(":")+1).toLowerCase(),Kr=class{nodes;local;worldCache=null;byName;constructor(e,n){this.nodes=e,this.local=n,this.byName=new Map(e.map((o,i)=>[o.name,i]))}index(e){let n=this.byName.get(e);if(n!==void 0)return n;let o=yi(e);return this.byBare??=new Map(this.nodes.map((i,s)=>[yi(i.name),s]).reverse()),this.byBare.get(o)}byBare;boneAxis(e){for(let n=0;n<this.nodes.length;n++){if(this.nodes[n].parent!==e)continue;let o=this.local.t[n];if(Gt(o)>1e-9)return Ht(o)}}world(){return this.worldCache??=Eo(this.nodes,Xo(this.nodes,this.local)),this.worldCache}position(e){return Ga(this.world()[e])}globalRotation(e){let n=this.local.r[e];for(let o=this.nodes[e].parent;o>=0;o=this.nodes[o].parent)n=Xt(this.local.r[o],n);return n}parentRotation(e){let n=this.nodes[e].parent;return n>=0?this.globalRotation(n):[0,0,0,1]}touch(){this.worldCache=null}setGlobalRotation(e,n,o=1){let i=Xt(bi(this.parentRotation(e)),n);this.local.r[e]=o>=1?i:Ln(this.local.r[e],i,o),this.worldCache=null}maskSet(e){let n=new Set(e.map(i=>this.index(i)).filter(i=>i!==void 0)),o=new Set;for(let i=0;i<this.nodes.length;i++)for(let s=i;s>=0;s=this.nodes[s].parent)if(n.has(s)){o.add(i);break}return o}};function wi(t,e){let n=t.nodes??[],o=Qr(n,void 0,0),i=new Kr(n,o);for(let s of e){let c=nn(s.weight,0,1);if(c<=0)continue;let a=Qr(n,s.clip,s.time),d=s.mask?.length?i.maskSet(s.mask):void 0;for(let m=0;m<n.length;m++){if(d&&!d.has(m))continue;let b=o.t[m],h=o.s[m];o.t[m]=en(b,tn(Fe(a.t[m],b),c)),o.s[m]=en(h,tn(Fe(a.s[m],h),c)),o.r[m]=Ln(o.r[m],a.r[m],c)}}return i}function La(t,e){let n=e.chain.map(Te=>t.index(Te));if(n.some(Te=>Te===void 0))return;let[o,i,s]=n,c=nn(e.weight,0,1);if(c<=0)return;let a=[t.local.r[o],t.local.r[i]],d=t.position(o),m=t.position(i),b=t.position(s),h=1e-4,C=Gt(Fe(m,d)),V=Gt(Fe(b,m)),X=nn(Gt(Fe(e.target,d)),h,C+V-h),ee=Te=>Math.acos(nn(Te,-1,1)),W=ee(Nn(Ht(Fe(b,d)),Ht(Fe(m,d)))),B=ee(Nn(Ht(Fe(d,m)),Ht(Fe(b,m)))),O=ee((V*V-C*C-X*X)/(-2*C*X)),P=ee((X*X-C*C-V*V)/(-2*C*V)),G=hn(Fe(b,d),Fe(m,d));Gt(G)<1e-6&&e.pole&&(G=hn(Fe(b,d),Fe(e.pole,d))),Gt(G)<1e-6&&(G=hn(Fe(b,d),[0,0,1]));let L=t.globalRotation(o),u=t.globalRotation(i),M=rr(G,O-W),te=rr(G,P-B);t.setGlobalRotation(o,Xt(M,L)),t.setGlobalRotation(i,Xt(M,Xt(te,u)));let ne=Fe(t.position(s),d);if(t.setGlobalRotation(o,Xt(wr(ne,Fe(e.target,d)),t.globalRotation(o))),e.pole&&za(t,o,i,d,e.target,e.pole),c<1){let Te=[t.local.r[o],t.local.r[i]];t.local.r[o]=Ln(a[0],Te[0],c),t.local.r[i]=Ln(a[1],Te[1],c),t.touch()}}function za(t,e,n,o,i,s){let c=Ht(Fe(i,o)),a=V=>Fe(V,tn(c,Nn(V,c))),d=a(Fe(t.position(n),o)),m=a(Fe(s,o));if(Gt(d)<1e-6||Gt(m)<1e-6)return;let b=Ht(d),h=Ht(m),C=Math.atan2(Nn(hn(b,h),c),Nn(b,h));t.setGlobalRotation(e,Xt(rr(c,C),t.globalRotation(e)))}function Na(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0)return;let i=t.globalRotation(n),s=xi(i,e.axis),c=Fe(e.target,t.position(n));if(Gt(c)<1e-6)return;let a=wr(s,c),d=2*Math.acos(nn(a[3],-1,1)),m=nn(e.maxAngleDeg,0,180)*Math.PI/180;if(d>m){let b=[a[0],a[1],a[2]];a=Gt(b)>1e-9?rr(b,m):[0,0,0,1]}t.setGlobalRotation(n,Xt(a,i),o)}function Mi(t,e){for(let n of e.pose??[])Ea(t,n);for(let n of e.aim??[])Za(t,n);for(let n of e.lookAt??[])Na(t,n);for(let n of e.drive??[])Xa(t,n);for(let n of e.ik??[])La(t,n)}function Ua(t){let[e,n,o,i]=t,s=1-2*(n*n+o*o),c=2*(e*n+i*o),a=2*(e*o-i*n),d=2*(n*o+i*e),m=1-2*(e*e+n*n),b=180/Math.PI;return[Math.atan2(d,m)*b,Math.asin(nn(-a,-1,1))*b,Math.atan2(c,s)*b]}function Ya(t){let e=Math.PI/360,n=[Math.sin(t[0]*e),0,0,Math.cos(t[0]*e)],o=[0,Math.sin(t[1]*e),0,Math.cos(t[1]*e)],i=[0,0,Math.sin(t[2]*e),Math.cos(t[2]*e)];return Xt(i,Xt(o,n))}function Xa(t,e){let n=t.index(e.joint),o=t.index(e.from);if(n===void 0||o===void 0)return;let i=t.nodes[o].rotation,s=Ua(Xt(bi(i),t.local.r[o])),c=[s[0]*(e.rotate.x??0),s[1]*(e.rotate.y??0),s[2]*(e.rotate.z??0)];t.local.r[n]=Xt(t.local.r[n],Ya(c)),t.touch()}function Ea(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0)return;let i=t.nodes[n],s=e.mode==="rest"?i.rotation:t.local.r[n],c=e.mode==="rest"?i.translation:t.local.t[n],a=Xt(s,e.rotation),d=en(c,e.offset);t.local.r[n]=o>=1?a:Ln(t.local.r[n],a,o),t.local.t[n]=en(t.local.t[n],tn(Fe(d,t.local.t[n]),o)),t.touch()}function Za(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0||Gt(e.direction)<1e-9)return;let i=e.axis??t.boneAxis(n);if(!i)return;let s=t.globalRotation(n),c=wr(xi(s,i),e.direction);t.setGlobalRotation(n,Xt(c,s),o)}function _a(t,e){let n=[e];for(;;){let o=n[n.length-1],i=t.nodes.findIndex(s=>s.parent===o);if(i<0)return n;n.push(i)}}var xr=class{constructor(e,n,o=4){this.substeps=o;for(let i of n)for(let s of i.joints){let c=e.index(s);if(c===void 0)continue;let a=_a(e,c);a.length<2||this.chains.push({ids:a,stiffness:i.stiffness??6,damping:nn(i.damping??.6,0,1),gravity:i.gravity??[0,0,0],cur:[],prev:[]})}}substeps;chains=[];started=!1;step(e,n){for(let o of this.chains){let i=o.ids.map(c=>e.position(c));if(!this.started){o.cur=i.map(c=>[...c]),o.prev=i.map(c=>[...c]);continue}let s=n/this.substeps;for(let c=0;c<this.substeps;c++)this.substep(o,i,s)}this.started=!0}substep(e,n,o){e.cur[0]=n[0],e.prev[0]=n[0];let i=(1-e.damping)**o,s=Math.min(1,e.stiffness*o);for(let c=1;c<e.ids.length;c++){let a=e.cur[c-1],d=Gt(Fe(n[c],n[c-1])),m=en(a,Fe(n[c],n[c-1])),b=e.cur[c],h=en(b,tn(Fe(b,e.prev[c]),i));h=en(h,tn(Fe(m,h),s)),h=en(h,tn(e.gravity,o*o));let C=Fe(h,a);h=Gt(C)>1e-9?en(a,tn(Ht(C),d)):m,e.prev[c]=b,e.cur[c]=h}}apply(e){for(let n of this.chains)for(let o=0;o+1<n.ids.length;o++){let i=n.ids[o],s=Fe(e.position(n.ids[o+1]),e.position(i)),c=Fe(n.cur[o+1],e.position(i));Gt(s)<1e-9||Gt(c)<1e-9||e.setGlobalRotation(i,Xt(wr(s,c),e.globalRotation(i)))}}};ke();ke();var vi=`
|
|
2
|
+
struct RelightMaterialUniforms {
|
|
3
|
+
// vec4 0
|
|
4
|
+
roughness : f32,
|
|
5
|
+
specularStrength : f32,
|
|
6
|
+
metallic : f32,
|
|
7
|
+
ambientIntensity : f32,
|
|
8
|
+
|
|
9
|
+
// vec4 1
|
|
10
|
+
depthScale : f32,
|
|
11
|
+
depthInvert : f32,
|
|
12
|
+
hasNormalMap : f32,
|
|
13
|
+
volumetricDensity: f32,
|
|
14
|
+
|
|
15
|
+
// vec4 2
|
|
16
|
+
viewportWidth : f32,
|
|
17
|
+
viewportHeight : f32,
|
|
18
|
+
shininess : f32,
|
|
19
|
+
opacity : f32,
|
|
20
|
+
|
|
21
|
+
// vec4 3
|
|
22
|
+
layerX : f32,
|
|
23
|
+
layerY : f32,
|
|
24
|
+
_pad0 : f32,
|
|
25
|
+
_pad1 : f32,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
struct GPULight {
|
|
29
|
+
posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)
|
|
30
|
+
dirRadius : vec4<f32>, // xyz = normalized direction, w = radius
|
|
31
|
+
colorIntensity : vec4<f32>, // rgb = linear color, w = intensity
|
|
32
|
+
spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = 0
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
struct LightsUniforms {
|
|
36
|
+
ambientColor : vec4<f32>,
|
|
37
|
+
params : vec4<f32>, // x = lightCount, y = hasLights (1=lit, 0=unlit)
|
|
38
|
+
lights : array<GPULight, 8>,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
@group(0) @binding(0) var<uniform> mat : RelightMaterialUniforms;
|
|
42
|
+
@group(1) @binding(0) var<uniform> lights : LightsUniforms;
|
|
43
|
+
|
|
44
|
+
@group(2) @binding(0) var albedoTex : texture_2d<f32>;
|
|
45
|
+
@group(2) @binding(1) var albedoSamp : sampler;
|
|
46
|
+
@group(2) @binding(2) var normalTex : texture_2d<f32>;
|
|
47
|
+
@group(2) @binding(3) var normalSamp : sampler;
|
|
48
|
+
|
|
49
|
+
struct VSOut {
|
|
50
|
+
@builtin(position) pos : vec4<f32>,
|
|
51
|
+
@location(0) uv : vec2<f32>,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
55
|
+
var pos = array<vec2<f32>, 4>(
|
|
56
|
+
vec2<f32>(-1.0, 1.0),
|
|
57
|
+
vec2<f32>( 1.0, 1.0),
|
|
58
|
+
vec2<f32>(-1.0, -1.0),
|
|
59
|
+
vec2<f32>( 1.0, -1.0)
|
|
60
|
+
);
|
|
61
|
+
var uv = array<vec2<f32>, 4>(
|
|
62
|
+
vec2<f32>(0.0, 0.0),
|
|
63
|
+
vec2<f32>(1.0, 0.0),
|
|
64
|
+
vec2<f32>(0.0, 1.0),
|
|
65
|
+
vec2<f32>(1.0, 1.0)
|
|
66
|
+
);
|
|
67
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
71
|
+
let albedo = textureSampleLevel(albedoTex, albedoSamp, in.uv, 0.0);
|
|
72
|
+
if (albedo.a <= 0.001) {
|
|
73
|
+
return vec4<f32>(0.0);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Normal unpacking: [0, 1] -> [-1, 1]
|
|
77
|
+
var N = vec3<f32>(0.0, 0.0, 1.0);
|
|
78
|
+
if (mat.hasNormalMap > 0.5) {
|
|
79
|
+
let rawNormal = textureSampleLevel(normalTex, normalSamp, in.uv, 0.0).xyz;
|
|
80
|
+
let unpacked = rawNormal * 2.0 - 1.0;
|
|
81
|
+
N = normalize(vec3<f32>(unpacked.x, unpacked.y, max(unpacked.z, 0.05)));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let V = vec3<f32>(0.0, 0.0, 1.0);
|
|
85
|
+
let pSurface = vec3<f32>(
|
|
86
|
+
mat.layerX + in.uv.x * mat.viewportWidth,
|
|
87
|
+
mat.layerY + in.uv.y * mat.viewportHeight,
|
|
88
|
+
0.0
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// If scene lights are not declared, output base albedo unmodified
|
|
92
|
+
if (lights.params.y < 0.5) {
|
|
93
|
+
return vec4<f32>(albedo.rgb * mat.opacity, albedo.a * mat.opacity);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let numLights = u32(min(lights.params.x, 8.0));
|
|
97
|
+
var ambientAccum = lights.ambientColor.rgb * mat.ambientIntensity;
|
|
98
|
+
var directDiffuseAccum = vec3<f32>(0.0);
|
|
99
|
+
var directSpecularAccum = vec3<f32>(0.0);
|
|
100
|
+
|
|
101
|
+
let roughness = clamp(mat.roughness, 0.02, 1.0);
|
|
102
|
+
let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);
|
|
103
|
+
|
|
104
|
+
for (var i = 0u; i < 8u; i = i + 1u) {
|
|
105
|
+
if (i >= numLights) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
let light = lights.lights[i];
|
|
110
|
+
let lightType = light.posType.w;
|
|
111
|
+
let lightColor = light.colorIntensity.rgb;
|
|
112
|
+
let intensity = light.colorIntensity.w;
|
|
113
|
+
|
|
114
|
+
var L = vec3<f32>(0.0, 0.0, 1.0);
|
|
115
|
+
var attenuation: f32 = 1.0;
|
|
116
|
+
|
|
117
|
+
if (lightType > 0.5 && lightType < 1.5) {
|
|
118
|
+
// Directional Light
|
|
119
|
+
L = normalize(-light.dirRadius.xyz);
|
|
120
|
+
} else if (lightType >= 1.5) {
|
|
121
|
+
// Point or Spot Light
|
|
122
|
+
let lightPosCanvas = light.posType.xyz;
|
|
123
|
+
let toLight = lightPosCanvas - pSurface;
|
|
124
|
+
let dist = length(toLight);
|
|
125
|
+
let radius = max(10.0, light.dirRadius.w);
|
|
126
|
+
|
|
127
|
+
if (dist > radius * 2.0) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
L = normalize(toLight);
|
|
132
|
+
let dNorm = clamp(dist / radius, 0.0, 1.0);
|
|
133
|
+
let decay = max(0.5, light.spotParams.z);
|
|
134
|
+
attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay) / (1.0 + dNorm * dNorm);
|
|
135
|
+
|
|
136
|
+
if (lightType > 2.5) {
|
|
137
|
+
// Spot Light
|
|
138
|
+
let spotDir = normalize(light.dirRadius.xyz);
|
|
139
|
+
let cosAngle = dot(-L, spotDir);
|
|
140
|
+
let cosOuter = light.spotParams.x;
|
|
141
|
+
let cosInner = light.spotParams.y;
|
|
142
|
+
|
|
143
|
+
if (cosAngle < cosOuter) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);
|
|
147
|
+
attenuation *= spotFalloff;
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
// Ambient light in array
|
|
151
|
+
ambientAccum += lightColor * (intensity * mat.ambientIntensity);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
let NdotL = max(dot(N, L), 0.0);
|
|
156
|
+
let diffuse = lightColor * (NdotL * intensity * attenuation);
|
|
157
|
+
directDiffuseAccum += diffuse;
|
|
158
|
+
|
|
159
|
+
let H = normalize(L + V);
|
|
160
|
+
let NdotH = max(dot(N, H), 0.0);
|
|
161
|
+
let specularFactor = pow(NdotH, specPower) * mat.specularStrength * intensity * attenuation;
|
|
162
|
+
let specColor = mix(lightColor, lightColor * albedo.rgb, mat.metallic);
|
|
163
|
+
directSpecularAccum += specColor * specularFactor;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
let finalColor = albedo.rgb * (ambientAccum + directDiffuseAccum) + directSpecularAccum;
|
|
167
|
+
let outOpacity = albedo.a * mat.opacity;
|
|
168
|
+
|
|
169
|
+
// Premultiplied alpha return
|
|
170
|
+
return vec4<f32>(finalColor * outOpacity, outOpacity);
|
|
171
|
+
}
|
|
172
|
+
`;var Mr=class{device;format;materialLayout;lightsLayout;texturesLayout;pipeline;materialPool;linearSampler;defaultFlatNormalTex;constructor(e,n="rgba8unorm"){this.device=e,this.format=n,this.materialPool=new qo(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.linearSampler=e.createSampler({label:"relight_linear_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.materialLayout=e.createBindGroupLayout({label:"relight_material_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.lightsLayout=e.createBindGroupLayout({label:"relight_lights_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.texturesLayout=e.createBindGroupLayout({label:"relight_textures_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let o=e.createShaderModule({label:"screen_space_relight.wgsl",code:vi}),i=e.createPipelineLayout({label:"screen_space_relight_pipeline_layout",bindGroupLayouts:[this.materialLayout,this.lightsLayout,this.texturesLayout]});this.pipeline=e.createRenderPipeline({label:"ScreenSpaceRelightPipeline",layout:i,vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:n,blend:Ko}]},primitive:{topology:"triangle-strip"}})}getOrCreateDefaultFlatNormalTexture(){if(!this.defaultFlatNormalTex){this.defaultFlatNormalTex=this.device.createTexture({label:"default_flat_normal",size:[2,2],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});let e=new Uint8Array([128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255]);this.device.queue.writeTexture({texture:this.defaultFlatNormalTex},e,{bytesPerRow:8,rowsPerImage:2},[2,2])}return this.defaultFlatNormalTex}resetPools(){this.materialPool.reset()}execute(e,n,o,i,s,c,a="clear"){let d=new Float32Array(16);d[0]=c.roughness??.35,d[1]=c.specularStrength??.7,d[2]=c.metallic??0,d[3]=c.ambientIntensity??.5,d[4]=c.depthScale??1,d[5]=0,d[6]=i?1:0,d[7]=0,d[8]=c.viewportWidth,d[9]=c.viewportHeight,d[10]=32,d[11]=c.opacity??1,d[12]=c.layerX??0,d[13]=c.layerY??0,d[14]=0,d[15]=0;let m=this.materialPool.getBuffer(this.device,d),b=this.device.createBindGroup({layout:this.materialLayout,entries:[{binding:0,resource:{buffer:m}}]}),h=this.device.createBindGroup({layout:this.lightsLayout,entries:[{binding:0,resource:{buffer:s}}]}),C=i??this.getOrCreateDefaultFlatNormalTexture(),V=this.device.createBindGroup({layout:this.texturesLayout,entries:[{binding:0,resource:o.createView()},{binding:1,resource:this.linearSampler},{binding:2,resource:C.createView()},{binding:3,resource:this.linearSampler}]}),X=e.beginRenderPass({label:"screen_space_relight_render_pass",colorAttachments:[{view:n,loadOp:a,storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});X.setPipeline(this.pipeline),X.setBindGroup(0,b),X.setBindGroup(1,h),X.setBindGroup(2,V),X.draw(4,1,0,0),X.end()}destroy(){this.materialPool.destroy(),this.defaultFlatNormalTex?.destroy()}};ke();var ja=t=>t==="Image"||t==="SVG"||t==="Text",ki=(t,e,n=3e3,o)=>{if(o==="Caption")return e&&e>0?e:t||n;let i=ja(o);return t&&e&&!i?Math.min(t,e):t||e||n};ke();var Pi=nr.timeline?nr:nr.default||nr;function Tn(t,e,n){t.tl.seek(e/n);for(let o of t.live){let i=Math.max(o.startFrame,Math.min(o.endFrame,e));o.step&&o.step>1&&(i=o.startFrame+Math.floor((i-o.startFrame)/o.step)*o.step),o.stub[o.track.prop]=Hr(o.track,i,n,{startFrame:o.startFrame,base:o.stub,signals:t.signals})}}var Un=new Map,Ti=new WeakMap,eo=1e4,Qa=50,Wa=50;function to(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return(e>>>0).toString(16)}var Si=new WeakMap,$a=0;function Ha(t){return!t||typeof t!="object"?Yn(t):Object.keys(t).sort().map(e=>{let n=t[e];if(n&&typeof n=="object"&&typeof n.get=="function"){let o=Si.get(n);return o===void 0&&(o=$a++,Si.set(n,o)),`${JSON.stringify(e)}:#${o}`}return`${JSON.stringify(e)}:${Yn(n)}`}).join(",")}function Tr(t){t.tl.kill()}function Ri(t,e){let n=Date.now();for(let[o,i]of t.entries())n-i.cacheTime>eo&&(t.delete(o),Tr(i.value));if(t.size>=e){let o=t.keys().next().value;if(o!==void 0){let i=t.get(o);t.delete(o),i&&Tr(i.value)}}}function Yn(t){return t===null?"null":t===void 0?"undefined":typeof t!="object"?JSON.stringify(t):ArrayBuffer.isView(t)?`[TypedArray:${t.byteLength}]`:Array.isArray(t)?"["+t.map(Yn).join(",")+"]":"{"+Object.keys(t).sort().map(o=>`${JSON.stringify(o)}:${Yn(t[o])}`).join(",")+"}"}function qa(t){let e=Un.get(t);if(e){if(Date.now()-e.cacheTime>eo){Un.delete(t),Tr(e.value);return}return e.cacheTime=Date.now(),Un.delete(t),Un.set(t,e),e.value}}function Ja(t,e){Ri(Un,Qa),Un.set(t,{cacheTime:Date.now(),value:e})}var Ci=new Set(["hidden","muted"]);function Ai(t,e,n,o,i,s,c,a,d){let m=n.prop,b=n.source??{type:"keyframe"},h=d!==void 0&&d>1;if((b.type==="signal"||h||m==="d")&&a&&!n.repeat){let B=Number.isFinite(s)?s:Math.round(i*5),O={stub:e,track:n,startFrame:o,endFrame:o+B,...h&&{step:d}};return e[m]=Hr(n,o,i,{startFrame:o,base:e,signals:c}),a.push(O),{dropped:0,maxAuthoredFrame:0}}if(b.type!=="keyframe"){let B=Number.isFinite(s)?s:Math.round(i*5),O=1/i,P=[],G=br(n,o,i,{startFrame:o,baseValues:e,signals:c});e[m]=G,P.push({[m]:G,duration:0});for(let L=1;L<=B;L++){let u=br(n,o+L,i,{startFrame:o,baseValues:e,signals:c});P.push({[m]:u,duration:O,ease:"none"})}return t.to(e,{keyframes:P,repeat:n.repeat??0,yoyo:!!n.yoyo,lazy:!1,overwrite:!1,immediateRender:!1},o/i),{dropped:0,maxAuthoredFrame:0}}let C=[...n.keyframes].sort((B,O)=>B.frame-O.frame),V=C.filter(B=>B.frame>=0&&B.frame<=s),X=C.length-V.length,ee=X>0?C[C.length-1].frame:0;if(V.length===0)return{dropped:X,maxAuthoredFrame:ee};if(Ci.has(m))for(let B of V){let O=(o+B.frame)/i;t.set(e,{[m]:B.value,immediateRender:!1},O)}else{let B=n.repeat??0,O=!!n.yoyo;if(V.length===1){let P=V[0],G=(o+P.frame)/i;t.set(e,{[m]:P.value,immediateRender:!1},G)}else if(V.length===2){let P=V[0],G=V[1],L=P.value,u=G.value,M=(o+P.frame)/i,te=(G.frame-P.frame)/i,ne=n.durationFrames??G.frame-P.frame,Te=G.ease??P.ease,mt=$r(Te,ne,i);L===e[m]?t.to(e,{[m]:u,duration:te,ease:mt,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},M):t.fromTo(e,{[m]:L},{[m]:u,duration:te,ease:mt,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},M)}else{let P=V[0],G=(o+P.frame)/i,L=[];L.push({[m]:P.value,duration:0});for(let u=1;u<V.length;u++){let M=V[u-1],te=V[u],ne=te.frame-M.frame,Te=ne/i,mt=$r(te.ease,ne,i);L.push({[m]:te.value,duration:Te,ease:mt})}t.to(e,{keyframes:L,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},G)}}return{dropped:X,maxAuthoredFrame:ee}}var Ka={x:"cameraX",y:"cameraY",z:"cameraZ"};function Di(t){let e=t.animation?.tracks??[];return t.kind!=="camera"?e:e.map(n=>{let o=Ka[n.prop];return o?{...n,prop:o}:n})}var vr=new Set,es=100;function ts(t,e){if(vr.has(t))return;vr.size>=es&&vr.clear(),vr.add(t);let n=e.map(o=>`'${o.prop}' (track '${o.trackId}') on '${o.layerId}': ${o.dropped} keyframe(s) past the clip window (last authored frame ${o.maxAuthoredFrame})`).join("; ");console.warn(`[compositor] ${e.length} track(s) truncated \u2014 animation tails will not play: ${n}. Extend durationFrames or move those keyframes.`)}function ns(t,e,n,o,i){let s=Yn({nodes:t.map(c=>{let a=c?.operation||{};return{id:a.id,animation:a.animation,startFrame:a.startFrame,durationFrames:a.durationFrames,x:a.x,y:a.y,scale:a.scale,rotation:a.rotation,opacity:a.opacity,volume:a.volume,width:a.width,height:a.height,hidden:a.hidden,muted:a.muted,backgroundColor:a.backgroundColor,fill:a.fill,borderColor:a.borderColor,textBackgroundColor:a.textBackgroundColor,rotateX:a.rotateX,rotateY:a.rotateY,rotateZ:a.rotateZ,perspective:a.perspective,perspectiveOriginX:a.perspectiveOriginX,perspectiveOriginY:a.perspectiveOriginY,translateZ:a.translateZ,backfaceVisibility:a.backfaceVisibility,transformStyle:a.transformStyle,is3D:a.is3D,z:a.z,scaleZ:a.scaleZ,twoSided:a.twoSided,cameraX:a.cameraX,cameraY:a.cameraY,cameraZ:a.cameraZ,targetX:a.targetX,targetY:a.targetY,targetZ:a.targetZ,cameraPitch:a.cameraPitch,cameraYaw:a.cameraYaw,cameraRoll:a.cameraRoll,cameraFov:a.cameraFov,cameraZoom:a.cameraZoom,focalLength:a.focalLength,focusDistance:a.focusDistance,fStop:a.fStop,maxBlurRadius:a.maxBlurRadius,shakeTranslation:a.shakeTranslation,shakeRotation:a.shakeRotation,relativitySpeed:a.relativitySpeed,orbitRadius:a.orbitRadius,orbitAzimuth:a.orbitAzimuth,orbitElevation:a.orbitElevation,material:a.material,shininess:a.shininess,roughness:a.roughness,specularIntensity:a.specularIntensity,ambientIntensity:a.ambientIntensity,metallic:a.metallic,emissive:a.emissive,emissiveIntensity:a.emissiveIntensity,clearcoat:a.clearcoat,clearcoatRoughness:a.clearcoatRoughness,anisotropy:a.anisotropy,anisotropyRotation:a.anisotropyRotation,subsurface:a.subsurface,subsurfaceColor:a.subsurfaceColor,sheen:a.sheen,sheenColor:a.sheenColor,sheenRoughness:a.sheenRoughness,iridescence:a.iridescence,iridescenceThickness:a.iridescenceThickness,iridescenceIor:a.iridescenceIor,triplanar:a.triplanar,triplanarScale:a.triplanarScale,triplanarSharpness:a.triplanarSharpness,lightType:a.lightType,color:a.color,intensity:a.intensity,radius:a.radius,angle:a.angle,penumbra:a.penumbra,exposure:a.exposure,hdri:typeof a.hdri=="string"?a.hdri:!!a.hdri,volumetricFog:a.volumetricFog,volumetricFogDensity:a.volumetricFogDensity,volumetricFogAnisotropy:a.volumetricFogAnisotropy,volumetricFogNoiseStrength:a.volumetricFogNoiseStrength,animationProgress:a.animationProgress,animationTime:a.animationTime,animationSpeed:a.animationSpeed,wireframe:a.wireframe,scaleX:a.scaleX,scaleY:a.scaleY,fontSize:a.fontSize,text:a.text}}),width:e,height:n,fps:o,durationSec:i});return to(s)}function Bi(t,e,n){let o=n.fps,i=n.durationSec,s=e?.metadata?.width??1920,c=e?.metadata?.height??1080,a=zn(e?.children??[]),d=e?.children,m=d?Ti.get(d):void 0,b;m&&m.width===s&&m.height===c&&m.fps===o&&m.durationSec===i?b=m.hash:(b=ns(a,s,c,o,i),d&&Ti.set(d,{width:s,height:c,fps:o,durationSec:i,hash:b}));let h=to(`${b}|${Ha(e?.operation?.signals??e?.signals)}`),C=`${t}_${h}`,V=qa(C);if(V)return V;let X=Pi.timeline({paused:!0,smoothChildTiming:!1}),ee={},W=e?.operation?.signals??e?.signals??{};a.forEach((G,L)=>{let u=G?.operation||{},M=u.id||u.inputHandleId||`layer_${L}`,te={id:M,inputHandleId:u.inputHandleId||`layer_${L}`,trackId:M,x:u.kind==="camera"||u.kind==="light"?u.x??u.cameraX:u.x??0,y:u.kind==="camera"||u.kind==="light"?u.y??u.cameraY:u.y??0,scale:u.scale??1,rotation:u.rotation??0,opacity:u.opacity??1,volume:u.volume??1,width:u.width,height:u.height,hidden:!!u.hidden,muted:!!u.muted,rotateX:u.rotateX??0,rotateY:u.rotateY??0,rotateZ:u.rotateZ??0,perspective:u.perspective??0,perspectiveOriginX:u.perspectiveOriginX??.5,perspectiveOriginY:u.perspectiveOriginY??.5,translateZ:u.translateZ??0,backfaceVisibility:u.backfaceVisibility??"visible",transformStyle:u.transformStyle??"flat",fontSize:u.fontSize,text:1,fill:u.fill,fillColor:u.fillColor??u.fill,strokeColor:u.strokeColor??u.stroke,strokeWidth:u.strokeWidth,letterSpacing:u.letterSpacing,firstMargin:u.firstMargin??u.pathOptions?.firstMargin,lastMargin:u.lastMargin??u.pathOptions?.lastMargin,baselineShift:u.baselineShift??u.pathOptions?.baselineShift,offset:u.offset,rangeStart:u.rangeStart,rangeEnd:u.rangeEnd,animators:u.animators,pathOptions:u.pathOptions,typewriter:u.typewriter,marquee:u.marquee,is3D:u.is3D??(u.kind==="camera"||u.kind==="light"||u.kind==="model3d"),z:u.z??(u.kind==="camera"?u.z??-1500:0),scaleZ:u.scaleZ??1,twoSided:u.twoSided??u.kind!=="light",material:u.material,shininess:u.shininess,roughness:u.roughness,specularIntensity:u.specularIntensity,ambientIntensity:u.ambientIntensity,metallic:u.metallic,emissive:u.emissive,emissiveIntensity:u.emissiveIntensity,clearcoat:u.clearcoat,clearcoatRoughness:u.clearcoatRoughness,anisotropy:u.anisotropy,anisotropyRotation:u.anisotropyRotation,subsurface:u.subsurface,subsurfaceColor:u.subsurfaceColor,sheen:u.sheen,sheenColor:u.sheenColor,sheenRoughness:u.sheenRoughness,iridescence:u.iridescence,iridescenceThickness:u.iridescenceThickness,iridescenceIor:u.iridescenceIor,triplanar:u.triplanar,triplanarScale:u.triplanarScale,triplanarSharpness:u.triplanarSharpness,animationProgress:u.animationProgress??0,animationTime:u.animationTime??0,animationSpeed:u.animationSpeed??1,wireframe:u.wireframe??!1,scaleX:u.scaleX??1,scaleY:u.scaleY??1,cameraX:u.cameraX??(u.kind==="camera"?u.x:void 0),cameraY:u.cameraY??(u.kind==="camera"?u.y:void 0),cameraZ:u.cameraZ??(u.kind==="camera"?u.z:void 0),targetX:u.targetX,targetY:u.targetY,targetZ:u.targetZ,cameraPitch:u.cameraPitch??u.pitch??0,cameraYaw:u.cameraYaw??u.yaw??0,cameraRoll:u.cameraRoll??u.roll??0,cameraFov:u.cameraFov??u.lens?.fov??50,cameraZoom:u.cameraZoom??u.lens?.zoom??1,focalLength:u.focalLength??u.lens?.focalLength??50,focusDistance:u.focusDistance??u.dof?.focusDistance,fStop:u.fStop??u.dof?.fStop??2.8,maxBlurRadius:u.maxBlurRadius??u.dof?.maxBlurRadius??24,shakeTranslation:u.shakeTranslation??(u.shake?.enabled?u.shake?.translationAmplitude??0:0),shakeRotation:u.shakeRotation??(u.shake?.enabled?u.shake?.rotationAmplitude??0:0),relativitySpeed:u.relativitySpeed??u.relativity?.speed??0,orbitRadius:u.orbitRadius,orbitAzimuth:u.orbitAzimuth,orbitElevation:u.orbitElevation,lightType:u.lightType,color:u.color,intensity:u.intensity??(u.kind==="light"?1:void 0),radius:u.radius,angle:u.angle,penumbra:u.penumbra,decay:u.decay,exposure:u.exposure,volumetricFogDensity:u.volumetricFogDensity,volumetricFogAnisotropy:u.volumetricFogAnisotropy,volumetricFogNoiseStrength:u.volumetricFogNoiseStrength};for(let ne of Di(u))if((ne.source??{type:"keyframe"}).type!=="keyframe")te[ne.prop]=br(ne,u.startFrame??0,o,{startFrame:u.startFrame??0,baseValues:te,signals:W});else if(ne.keyframes&&ne.keyframes.length>0){let At=ne.keyframes.reduce((rt,ot)=>ot.frame<rt.frame?ot:rt),Wt=te;!Ci.has(ne.prop)||At.frame===0?Wt[ne.prop]=At.value:Wt[ne.prop]===void 0&&(Wt[ne.prop]=u[ne.prop]??At.value)}ee[M]=te});let B=[],O=[];if(a.forEach(G=>{let L=G?.operation||{},u=L.id||L.inputHandleId,M=u?ee[u]:void 0;if(!M)return;let te=L.startFrame??0,ne=L.durationFrames;if(ne===void 0){let Te=G.children?.[0],mt=Te?Jn(Te):null,At=e?.metadata?.durationMs??3e3,Wt=L.type??(L.kind==="text"?"Text":L.kind==="media"&&Te?Te.operation?.dataType:void 0),rt=ki(void 0,mt?.durationMs??void 0,At,Wt);ne=Math.max(1,Math.round(rt/1e3*o))}for(let Te of Di(L)){let{dropped:mt,maxAuthoredFrame:At}=Ai(X,M,Te,te,o,ne,W,O,L.animation?.frameStep);mt>0&&B.push({layerId:u,trackId:Te.id,prop:Te.prop,dropped:mt,maxAuthoredFrame:At})}}),B.length>0){ts(t.startsWith("img-")?`frame_${h}`:C,B);for(let G of B)Ro(t,{severity:"warning",code:"animation_truncated",layerId:G.layerId,message:`'${G.prop}' on '${G.layerId}': ${G.dropped} keyframe(s) past the clip window (last authored frame ${G.maxAuthoredFrame}) never play`})}X.seek(1e-6),X.seek(0);let P={key:C,tl:X,targetsById:ee,nodes:a,live:O,signals:W};return Ja(C,P),P}var kr=new Map;function Ii(t,e,n,o,i){let s=Yn({animation:e,baseVolume:n,baseMuted:o,fps:i}),c=to(s),a=`layer_${t}_${c}`,d=kr.get(a);if(d){if(Date.now()-d.cacheTime<=eo)return d.cacheTime=Date.now(),d.value;kr.delete(a),Tr(d.value)}let m=Pi.timeline({paused:!0,smoothChildTiming:!1}),b={volume:n,muted:o},h=e?.tracks??[];for(let V of h){let X=V.prop;X!=="volume"&&X!=="muted"||Ai(m,b,V,0,i,1/0)}m.seek(1e-6),m.seek(0);let C={tl:m,stub:b};return Ri(kr,Wa),kr.set(a,{cacheTime:Date.now(),value:C}),C}ke();var rs=(t,e)=>[t[0]*e[0]+t[4]*e[1]+t[8]*e[2]+t[12],t[1]*e[0]+t[5]*e[1]+t[9]*e[2]+t[13],t[2]*e[0]+t[6]*e[1]+t[10]*e[2]+t[14]],Oi=(t,e)=>[t[0]*e[0]+t[4]*e[1]+t[8]*e[2],t[1]*e[0]+t[5]*e[1]+t[9]*e[2],t[2]*e[0]+t[6]*e[1]+t[10]*e[2]];function Gi(t,e,n,o){if(!n||!t?.length)return e;let i=[...e],s=new Map(t.map((c,a)=>[c.toLowerCase(),a]));for(let[c,a]of Object.entries(n)){let d=s.get(c.toLowerCase());d!==void 0&&(i[d]=Qt(a,o,i[d]??0))}return i}function os(t){return!!(t.animationLayers?.length||t.ik?.length||t.lookAt?.length||t.springBones?.length||t.pose&&Object.keys(t.pose).length||t.aim?.length||t.drive?.length)}function is(t,e,n){let o=b=>b*Math.PI/360,[i,s]=[Math.sin(o(t)),Math.cos(o(t))],[c,a]=[Math.sin(o(e)),Math.cos(o(e))],[d,m]=[Math.sin(o(n)),Math.cos(o(n))];return[m*a*i-d*c*s,m*c*s+d*a*i,d*a*s-m*c*i,m*a*s+d*c*i]}function as(t,e){return Object.entries(t.node.pose??{}).map(([n,o])=>({joint:n,rotation:is(Qt(o.rotateX,e,0),Qt(o.rotateY,e,0),Qt(o.rotateZ,e,0)),offset:[Qt(o.x,e,0),Qt(o.y,e,0),Qt(o.z,e,0)],weight:Qt(o.weight,e,1),mode:o.mode??"additive"}))}function ss(t,e){let n=t.node.animationLayers;if(!n?.length)return t.clip?[{clip:t.clip,time:t.clipSec,weight:1}]:[];let o=[];for(let i of n){let[s]=Jr(t.model,[i.clip]);if(!s)continue;let c=(i.timeOffset??0)+e/t.fps*(i.speed??1);s.duration>0&&(c=i.loop??!0?(c%s.duration+s.duration)%s.duration:Math.min(Math.max(c,0),s.duration)),o.push({clip:s,time:c,weight:Qt(i.weight,{frame:e,fps:t.fps},1),mask:i.mask})}return o}function cs(t,e,n){let o={frame:e,fps:t.fps},i=c=>rs(n,qr(c,o)),s=c=>Oi(n,qr(c,o));return{pose:as(t,o),aim:(t.node.aim??[]).map(c=>({joint:c.joint,direction:s(c.direction),weight:Qt(c.weight,o,1),...c.axis&&{axis:c.axis}})),ik:(t.node.ik??[]).map(c=>({chain:c.chain,target:i(c.target),pole:c.poleTarget?i(c.poleTarget):void 0,weight:Qt(c.weight,o,1)})),drive:[...t.model.drivers??[],...t.node.drive??[]],lookAt:(t.node.lookAt??[]).map(c=>({joint:c.joint,target:i(c.target),weight:Qt(c.weight,o,1),maxAngleDeg:c.maxAngleDeg??70,axis:c.axis??[0,0,1]}))}}function Li(t,e,n){let o=wi(t.model,ss(t,e));return Mi(o,cs(t,e,n)),o}var Sr=new Map;function ls(t,e,n){let o=t.node.springBones;if(!o?.length)return;let i=JSON.stringify([o,t.node.animationLayers,t.node.pose,t.node.aim,t.fps]),s=Sr.get(t.key),c=Math.max(0,Math.floor(t.frame));if(!s||s.model!==t.model||s.config!==i||s.frame>c){let a=d=>Oi(e,d??[0,0,0]);s={model:t.model,config:i,springs:new xr(n,o.map(d=>({...d,gravity:a(d.gravity)}))),frame:-1},Sr.size>256&&Sr.clear(),Sr.set(t.key,s)}for(let a=s.frame+1;a<=c;a++)s.springs.step(Li(t,a,e),1/t.fps),s.frame=a;return s.springs}function zi(t){if(!os(t.node)&&!t.model.drivers?.length)return er(t.model,t.clip,t.clipSec);let e=_.invert(t.sceneRoot)??_.identity(),n=Li(t,t.frame,e);return ls(t,e,n)?.apply(n),n.world()}var Vi=new WeakMap,Fi=new WeakMap;function Ni(t,e){let n=Fi.get(e);return n||(n=t.createBuffer({label:"CrowdPalette",size:Math.max(64,e.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(n,0,e),Fi.set(e,n)),n}function Ui(t,e){let n=JSON.stringify([e.clips,e.fps??30]),o=Vi.get(t);o||(o=new Map,Vi.set(t,o));let i=o.get(n);if(!i){let s=Jr(t,e.clips);if(!s.length)return;i=gi(t,s,e.fps??30),o.set(n,i)}return i}function Yi(t,e,n,o){let i=No((e.seed??1)*7919+n*104729),s=i(),c=i(),a=(o.clip??n)%t.clips.length,d=t.clips[Math.max(0,a)],[m,b]=e.speedRange??[1,1],h=o.animOffset??((e.phase??"random")==="random"?s*d.duration:0),C=d.duration>0?d.count/d.duration:t.fps;return[d.base,d.count,h*C,(o.animSpeed??m+(b-m)*c)*C]}ke();function Rn(t,e){return e?t==="flex"||t==="block"||t==="box":!1}ke();var us=4096;function Xi(t,e,n,o,i,s){let c=t?.lens?.projection??"perspective",a=t?.relativity;if(c==="perspective"&&!a)return null;let d={projection:c,fov:e.fov,zoom:e.zoom},m=t?.lens?.cubeSize,b=Math.min(s,m??Lo(d,o,i,Math.min(us,s))),h=Oo(e),C=a?{speed:n,direction:a.direction?Gn.normalize(a.direction):h.forward,doppler:a.doppler??!0,beaming:a.beaming??!0,exposure:a.exposure??"auto"}:null;return{faceSize:b,remap:{...d,basis:h,observer:C},centerDensity:Go(d,o,i)}}ke();function Zi(t,e,n){let o=e.track,i=(t.nodes?.length??0)*7;if(!o?.length||!i)return!0;let s=Math.floor(o.length/i),c=Math.min(Math.max(Math.ceil(n),0),s-1)*i;for(let a=0;a<i;a++)if(o[c+a]!==o[a])return!1;return!0}function _i(t,e){return ni(t,e).model}function Ei(t,e){return{p:[t[e],t[e+1],t[e+2]],q:[t[e+3],t[e+4],t[e+5],t[e+6]]}}function ds(t,e,n){if(n<=0)return t;let o=t.q.reduce((c,a,d)=>c+a*e.q[d],0)<0?-1:1,i=t.q.map((c,a)=>c+(e.q[a]*o-c)*n),s=Math.hypot(...i)||1;return{p:t.p.map((c,a)=>c+(e.p[a]-c)*n),q:i.map(c=>c/s)}}function ji(t,e,n,o,i){let s=e.track,c=t.nodes?.length??0,a=c*7;if(!s?.length||!a||s.length%a!==0)return;let d=s.length/a,m=Math.min(Math.max(n,0),d-1),b=Math.floor(m),h=Math.min(d-1,b+1),C=_.invert(o)??_.identity(),V=[];for(let X=0;X<c;X++){let{p:ee,q:W}=ds(Ei(s,b*a+X*7),Ei(s,h*a+X*7),m-b);V.push(_.multiply(C,Uo(ee,W,i)))}return V}ke();var ms=new Set(["position","rotation","scale","modelMatrix","normalMatrix","bounds"]);function no(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e))return t.length===e.length&&t.every((s,c)=>no(s,e[c]));if(!t||!e||typeof t!="object"||typeof e!="object"||Object.getPrototypeOf(t)!==Object.prototype||Object.getPrototypeOf(e)!==Object.prototype)return!1;let n=t,o=e,i=Object.keys(n);return i.length===Object.keys(o).length&&i.every(s=>Object.hasOwn(o,s)&&no(n[s],o[s]))}function Qi(t){let e=t.opts;return!t.meshBuffers&&!e.transparent&&!e.instanceBuffer&&(e.instanceCount??1)===1&&!e.firstInstance&&!e.matrixInstances&&!e.isSkinned&&!e.skinningMatrices&&!e.audioDeform&&!e.morphWeights?.length&&e.material!=="glass"&&e.material!=="acrylic"&&e.material!=="frosted"&&(e.opacity??1)>=1&&(e.colorTint?.[3]??1)>=1}function Wi(t,e){if(!Qi(t)||!Qi(e)||t.mesh!==e.mesh||t.texture!==e.texture)return!1;let n=t.opts,o=e.opts,i=new Set([...Object.keys(n),...Object.keys(o)]);for(let s of i)if(!ms.has(s)&&!no(n[s],o[s]))return!1;return!0}ke();var or=class{frame=Number.NaN;value;prevFrame=Number.NaN;prevValue;write(e,n){e!==this.frame&&(this.prevFrame=this.frame,this.prevValue=this.value),this.frame=e,this.value=n}at(e){if(e===this.frame)return this.value;if(e===this.prevFrame)return this.prevValue}},ro=class{states=new Map;instances;vertices;camera=new or;frames=new or;constructor(e){this.instances=new Pr(e,"Instances"),this.vertices=new Pr(e,"Vertices")}needsPrevious(e){return e>0&&this.frames.at(e-1)===void 0}previousCamera(e){return this.camera.at(e-1)}previousMesh(e,n,o){let i=this.states.get(e)?.at(n-1);if(i?.kind!=="mesh")return;let s={modelMatrix:i.modelMatrix};o.skinning&&i.skinning?.length===o.skinning.length&&(s.skinningMatrices=i.skinning);let c=this.instances.at(e,n-1);o.instanceBuffer&&c&&i.instanceBytes===o.instanceBuffer.size&&(s.instanceBuffer=c);let a=this.vertices.at(e,n-1);return o.vertexBytes&&a&&i.vertexBytes===o.vertexBytes&&(s.vertexBuffer=a),o.wind&&i.windTime!==void 0&&(s.wind={...o.wind,time:i.windTime}),o.crowd&&i.crowdTime!==void 0&&(s.crowd={...o.crowd,time:i.crowdTime}),s}previousQuad(e,n){let o=this.states.get(e)?.at(n-1);return o?.kind==="quad"?o.modelMatrix:void 0}recordMesh(e,n,o,i,s){let{instanceBuffer:c,vertices:a}=s;c&&this.instances.copy(e,n,o,c,c.size,GPUBufferUsage.STORAGE),a&&this.vertices.copy(e,n,o,a.buffer,a.bytes,GPUBufferUsage.VERTEX),this.slots(n).write(o,{kind:"mesh",...i,...i.skinning&&{skinning:i.skinning.slice()},instanceBytes:c?.size,vertexBytes:a?.bytes})}previousSlug(e,n){let o=this.states.get(e)?.at(n-1);return o?.kind==="slug"?o:void 0}recordSlug(e,n,o,i){this.slots(e).write(n,{kind:"slug",modelMatrix:o,batches:i.map(s=>({...s,instances:s.instances.slice(0,s.instanceCount*24)}))})}recordQuad(e,n,o){this.slots(e).write(n,{kind:"quad",modelMatrix:o})}recordFrame(e,n){this.camera.write(e,n),this.frames.write(e,!0)}slots(e){let n=this.states.get(e);return n||(n=new or,this.states.set(e,n)),n}},Pr=class{constructor(e,n){this.device=e;this.label=n}device;label;pairs=new Map;at(e,n){return this.pairs.get(e)?.[n&1]}copy(e,n,o,i,s,c){let a=this.pairs.get(n)??[],d=o&1,m=a[d];(!m||m.size!==s)&&(m?.destroy(),m=this.device.createBuffer({label:`MotionHistory${this.label}:${n}`,size:s,usage:c|GPUBufferUsage.COPY_DST}),a[d]=m,this.pairs.set(n,a)),e.copyBufferToBuffer(i,0,m,0,s)}},Dr=new Map;function oo(t,e){let n=Dr.get(e);return n||(Dr.size>64&&Dr.clear(),n=new ro(t),Dr.set(e,n)),n}ke();function fs(t){let e=Math.PI/180,n=t.scale??1,o=_.translate(t.x??0,t.y??0,t.z??0);return t.rotateZ&&(o=_.multiply(o,_.rotateZ(t.rotateZ*e))),t.rotateY&&(o=_.multiply(o,_.rotateY(t.rotateY*e))),t.rotateX&&(o=_.multiply(o,_.rotateX(t.rotateX*e))),_.multiply(o,_.scale(n*(t.scaleX??1),n*(t.scaleY??1),n*(t.scaleZ??1)))}var ps=t=>typeof t=="object"&&t!==null&&"meshes"in t;async function Hi(t,e){if(ps(t.modelData))return t.modelData;if(t.primitive3d)return Pn(t.primitive3d);if(t.src)return e(t.src,t)}var Rr={q:[0,0,0,1],s:1};function qi(t,e){return[t[3]*e[0]+t[0]*e[3]+t[1]*e[2]-t[2]*e[1],t[3]*e[1]-t[0]*e[2]+t[1]*e[3]+t[2]*e[0],t[3]*e[2]+t[0]*e[1]-t[1]*e[0]+t[2]*e[3],t[3]*e[3]-t[0]*e[0]-t[1]*e[1]-t[2]*e[2]]}function Ji(t,e){let n=t.bounds;if(!n)return 0;let o=Number.NEGATIVE_INFINITY;for(let i=0;i<8;i++){let s=[i&1?n.max[0]:n.min[0],i&2?n.max[1]:n.min[1],i&4?n.max[2]:n.min[2]];o=Math.max(o,oi(e.q,s)[1]*e.s)}return o}var $i=new WeakMap;function Ki(t,e,n){let o=t.surface,i=JSON.stringify([n,e.bounds?.size]),s=$i.get(t);if(s&&s.key===i)return s.out;let{points:c}=ii({model:e,matrix:fs(o)},t),a=Math.max(1,n.length),d=c.map((m,b)=>{let[h,C,V]=ai(m,n[b%a]??0,t.sink??0);return{x:h,y:C,z:V,rotation:m.rotation,scale:m.scale}});return $i.set(t,{key:i,out:d}),d}function io(t,e,n){if(!t)return;let o=e.bounds,i=o?o.size[1]:0;if(!(!o||i<=0))return{amplitudeDeg:t.amplitudeDeg??8,frequency:t.frequency??.4,direction:t.direction??[1,0],waveScale:t.waveScale??600,time:n,baseY:o.max[1],height:i}}ke();function ao(t,e){return{a:1,b:0,c:0,d:1,e:t,f:e}}function hs(t){let e=t*Math.PI/180,n=Math.cos(e),o=Math.sin(e);return{a:n,b:o,c:-o,d:n,e:0,f:0}}function gs(t,e=t){return{a:t,b:0,c:0,d:e,e:0,f:0}}function Cr(t,e){return{a:t.a*e.a+t.c*e.b,b:t.b*e.a+t.d*e.b,c:t.a*e.c+t.c*e.d,d:t.b*e.c+t.d*e.d,e:t.a*e.e+t.c*e.f+t.e,f:t.b*e.e+t.d*e.f+t.f}}function ys(t,e,n){return{x:t.a*e+t.c*n+t.e,y:t.b*e+t.d*n+t.f}}function ea(t){return new DOMMatrix([t.a,t.b,t.c,t.d,t.e,t.f])}function ta(t){let e=t.anchorX??.5,n=t.anchorY??.5,o=e*t.width,i=n*t.height,s=t.scale??1,c=(t.scaleX??1)*s,a=(t.scaleY??1)*s;return Cr(ao(t.x,t.y),Cr(ao(o,i),Cr(hs(t.rotation),Cr(gs(c,a),ao(-o,-i)))))}function na(t){let e=t.baseX??0,n=t.baseY??0,o=t.sampledX??e,i=t.sampledY??n,s=0,c=0;t.rect&&t.parentRect?(s=t.rect.x-t.parentRect.x+(o-e),c=t.rect.y-t.parentRect.y+(i-n)):t.rect?(s=t.rect.x+(o-e),c=t.rect.y+(i-n)):(s=o,c=i);let a=t.parentMatrix;return a?"isIdentity"in a&&a.isIdentity?{x:s,y:c}:ys(a,s,c):{x:s,y:c}}var bs=4;function ra(t,e,n){let o=Math.max(1,e.width),i=Math.max(1,e.height),s=Math.min(bs,n.maxDimension/Math.max(o,i),Math.sqrt(n.maxPixels/(o*i)),n.effects),c=n.maxDimension/Math.max(o,i);if(c<1)return Math.floor(c*1024)/1024;let a=Math.ceil(t*4-1e-6)/4;return Math.max(1,Math.min(a,Math.floor(s*4+1e-6)/4))}ke();var ze={identity(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},multiply(t,e){let n=new Array(16);for(let o=0;o<4;o++)for(let i=0;i<4;i++)n[i*4+o]=t[0+o]*e[i*4+0]+t[4+o]*e[i*4+1]+t[8+o]*e[i*4+2]+t[12+o]*e[i*4+3];return n},translate(t,e,n=0){return[1,0,0,0,0,1,0,0,0,0,1,0,t,e,n,1]},scale(t,e,n=1){return[t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1]},rotateX(t){let e=Math.cos(t),n=Math.sin(t);return[1,0,0,0,0,e,n,0,0,-n,e,0,0,0,0,1]},rotateY(t){let e=Math.cos(t),n=Math.sin(t);return[e,0,-n,0,0,1,0,0,n,0,e,0,0,0,0,1]},rotateZ(t){let e=Math.cos(t),n=Math.sin(t);return[e,n,0,0,-n,e,0,0,0,0,1,0,0,0,0,1]},perspective(t){if(t<=0)return ze.identity();let e=ze.identity();return e[11]=-1/t,e},buildLayer3DMatrix(t){let{x:e,y:n,width:o,height:i,rotateXDeg:s=0,rotateYDeg:c=0,rotateZDeg:a=0,scaleX:d=1,scaleY:m=1,perspectivePx:b=0,originXRatio:h=.5,originYRatio:C=.5,translateZPx:V=0}=t,X=e+o*h,ee=n+i*C,W=s*Math.PI/180,B=c*Math.PI/180,O=a*Math.PI/180,P=ze.identity();return P=ze.multiply(P,ze.translate(X,ee,0)),b>0&&(P=ze.multiply(P,ze.perspective(b))),V!==0&&(P=ze.multiply(P,ze.translate(0,0,V))),O!==0&&(P=ze.multiply(P,ze.rotateZ(O))),B!==0&&(P=ze.multiply(P,ze.rotateY(B))),W!==0&&(P=ze.multiply(P,ze.rotateX(W))),P=ze.multiply(P,ze.translate(-o*h,-i*C,0)),(d!==1||m!==1)&&(P=ze.multiply(P,ze.scale(d,m,1))),P},projectPoint(t,e){let n=e.x,o=e.y,i=e.z,s=t[0]*n+t[4]*o+t[8]*i+t[12],c=t[1]*n+t[5]*o+t[9]*i+t[13],a=t[3]*n+t[7]*o+t[11]*i+t[15],d=Math.abs(a)>1e-6?1/a:1;return{x:s*d,y:c*d}},projectRectangleCorners(t,e,n){return{topLeft:ze.projectPoint(t,{x:0,y:0,z:0}),topRight:ze.projectPoint(t,{x:e,y:0,z:0}),bottomLeft:ze.projectPoint(t,{x:0,y:n,z:0}),bottomRight:ze.projectPoint(t,{x:e,y:n,z:0})}},computeSignedArea(t){let{topLeft:e,topRight:n,bottomRight:o,bottomLeft:i}=t;return .5*(e.x*n.y-n.x*e.y+(n.x*o.y-o.x*n.y)+(o.x*i.y-i.x*o.y)+(i.x*e.y-e.x*i.y))}};function so(t,e){let n=t?.rotateX??e?.rotateX??0,o=t?.rotateY??e?.rotateY??0,i=t?.rotateZ??e?.rotateZ??0,s=t?.translateZ??e?.translateZ??0,c=t?.perspective??e?.perspective??0;if(n!==0||o!==0||s!==0||c>0&&(n!==0||o!==0||s!==0||i!==0)||t?.rotateZ!==void 0&&t.rotateZ!==0||e?.rotateZ!==void 0&&e.rotateZ!==0)return!0;let a=e?.animation?.tracks;if(a&&a.length>0){for(let d of a)if(d.prop==="rotateX"||d.prop==="rotateY"||d.prop==="rotateZ"||d.prop==="translateZ"||d.prop==="perspective")return!0}return!1}var oa=new WeakMap;function xs(t,e){let n=m=>typeof m=="number"&&m>0?m:0,o=n(t?.strokeWidth??e.strokeWidth),s=!!(t?.stroke??t?.strokeColor??e.stroke)?e.strokeAlign==="outside"?o:o/2:0,c=0,a=e.shadows;if(Array.isArray(a))for(let m of a)c=Math.max(c,Math.max(Math.abs(m.offset?.x??0),Math.abs(m.offset?.y??0))+2*n(m.blurRadius));let d=s+c;return d>0?Math.ceil(d)+1:0}function ia(t){return t.positions.length/3*64}function ws(t){let e=oa.get(t);if(e!==void 0)return e;let n=t.colors,o=!1;if(n){for(let i=3;i<n.length;i+=4)if(n[i]<1){o=!0;break}}return oa.set(t,o),o}var Ms=["width","height","gap","padding","fontSize","letterSpacing"],aa=new WeakMap;function vs(t,e,n,o){let i=[t,e];for(let s in n){let c=n[s];for(let a of Ms)c[a]!==void 0&&i.push(s,a,c[a])}for(let[s,c]of o)i.push(s,c.width,c.height);return JSON.stringify(i)}var ks=`
|
|
173
|
+
struct HomographyUniforms {
|
|
174
|
+
matrix_row0 : vec4<f32>,
|
|
175
|
+
matrix_row1 : vec4<f32>,
|
|
176
|
+
matrix_row2 : vec4<f32>,
|
|
177
|
+
params : vec4<f32>, // params.x = opacity
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
@group(0) @binding(0) var<uniform> u : HomographyUniforms;
|
|
181
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
182
|
+
@group(1) @binding(1) var samp : sampler;
|
|
183
|
+
${si}
|
|
184
|
+
|
|
185
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
186
|
+
let x = in.uv.x;
|
|
187
|
+
let y = in.uv.y;
|
|
188
|
+
|
|
189
|
+
let d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;
|
|
190
|
+
if (d <= 1e-6) {
|
|
191
|
+
return vec4<f32>(0.0);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
let src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;
|
|
195
|
+
let src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;
|
|
196
|
+
|
|
197
|
+
if (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {
|
|
198
|
+
return vec4<f32>(0.0);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
let color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);
|
|
202
|
+
return color * u.params.x;
|
|
203
|
+
}
|
|
204
|
+
`,sa=new WeakMap;function Ts(t,e){let n=sa.get(t);if(!n){let o=Wr(t,["uniform"]),i=Wr(t,["texture","sampler"]),s=t.createShaderModule({label:"compositor_homography.wgsl",code:ks});n={pipeline:li(t,{label:"CompositorHomographyPipeline",module:s,layouts:[o,i],format:e,blend:ci}),uniformLayout:o,textureLayout:i},sa.set(t,n)}return n}var Ar=new Map,ca=new WeakMap,la=new WeakMap,ua=new WeakMap;function gn(t,e,n){let o=la.get(t);o||(o=new Map,la.set(t,o));let i=`${e}|${n}`,s=o.get(i);return s||(s=new ri(t,e,n),o.set(i,s)),s}var da=new WeakMap;function co(t,e){let n=da.get(t);return(!n||n.format!==e)&&(n=new Mr(t,e),da.set(t,n)),n}var ma=new WeakMap;function fa(t,e){let n=ma.get(t);n||(n=new Map,ma.set(t,n));let o=n.get(e);return o||(o=new pi(t),n.set(e,o)),o}function pa(t,e,n,o,i){if(e.length>0||t.lightType===void 0&&t.intensity===void 0&&t.lightPosX===void 0)return e;let s=String(t.lightType??"point").toLowerCase(),c=s==="directional"?"directional":s==="spot"?"spot":"point",a=t.intensity??1,d=Rt(a,1,o,i),m=Rt(t.lightPosX,.5,o,i),b=Rt(t.lightPosY,.5,o,i),h=Rt(t.lightPosZ,.25,o,i),C=Rt(t.lightRadius,.75,o,i),V=n.x+m*n.width,X=n.y+b*n.height,ee=h*Math.max(n.width,n.height),W=C*Math.max(n.width,n.height),B={lightType:c,color:t.lightColor??"#ffffff",intensity:d,x:V,y:X,z:ee,radius:W,decay:1},O=Rt(t.ambientIntensity,.15,o,i);return[{lightType:"ambient",color:t.ambientColor??"#ffffff",intensity:O},B]}function Br(t,e,n,o,i,s,c,a){if(Math.abs(ze.computeSignedArea(i))<1e-4)return;let m=Math.max(0,Math.min(s,Math.floor(Math.min(i.topLeft.x,i.topRight.x,i.bottomLeft.x,i.bottomRight.x)))),b=Math.max(0,Math.min(c,Math.floor(Math.min(i.topLeft.y,i.topRight.y,i.bottomLeft.y,i.bottomRight.y)))),h=Math.max(0,Math.min(s,Math.ceil(Math.max(i.topLeft.x,i.topRight.x,i.bottomLeft.x,i.bottomRight.x)))),C=Math.max(0,Math.min(c,Math.ceil(Math.max(i.topLeft.y,i.topRight.y,i.bottomLeft.y,i.bottomRight.y)))),V=h-m,X=C-b;if(V<=0||X<=0)return;let ee=[{x:i.topLeft.x/s,y:i.topLeft.y/c},{x:i.topRight.x/s,y:i.topRight.y/c},{x:i.bottomLeft.x/s,y:i.bottomLeft.y/c},{x:i.bottomRight.x/s,y:i.bottomRight.y/c}],W=Co(ee);for(let Te of W)if(!Number.isFinite(Te))return;let B=new Float32Array(16);B[0]=W[0],B[1]=W[1],B[2]=W[2],B[3]=0,B[4]=W[3],B[5]=W[4],B[6]=W[5],B[7]=0,B[8]=W[6],B[9]=W[7],B[10]=W[8],B[11]=0,B[12]=a,B[13]=0,B[14]=0,B[15]=0;let{pipeline:O,uniformLayout:P,textureLayout:G}=Ts(t.device,t.renderer.format),L=t.renderer.samplerCache.getSampler(t.device),u=t.renderer.getTemporaryBuffer(B),M=t.device.createBindGroup({layout:P,entries:[{binding:0,resource:{buffer:u}}]}),te=t.renderer.bindGroupCache.getBindGroup(t.device,G,o,L),ne=e.beginRenderPass({colorAttachments:[{view:n,loadOp:"load",storeOp:"store"}]});ne.setPipeline(O),ne.setScissorRect(m,b,V,X),ne.setBindGroup(0,M),ne.setBindGroup(1,te),ne.draw(4),ne.end()}function Xn(t,e,n){let o=h=>h<=.0031308?12.92*h:1.055*h**.4166666666666667-.055,i=t?.emissive??e.emissive??(n?.emissive?[o(n.emissive[0]),o(n.emissive[1]),o(n.emissive[2])]:void 0),s={};i!==void 0&&(s.emissive=i,s.emissiveIntensity=t?.emissiveIntensity??e.emissiveIntensity??n?.emissiveStrength??1),e.castShadow!==void 0&&(s.castShadow=e.castShadow),s.toon=t?.toon??e.toon,s.outline=t?.outline??e.outline;let c=n?.surface,a={clearcoat:t?.clearcoat??e.clearcoat??c?.clearcoat,clearcoatRoughness:t?.clearcoatRoughness??e.clearcoatRoughness??c?.clearcoatRoughness,anisotropy:t?.anisotropy??e.anisotropy??c?.anisotropy,anisotropyRotation:t?.anisotropyRotation??e.anisotropyRotation??c?.anisotropyRotation,subsurface:t?.subsurface??e.subsurface??c?.subsurface,subsurfaceColor:t?.subsurfaceColor??e.subsurfaceColor??c?.subsurfaceColor,sheen:t?.sheen??e.sheen??c?.sheen,sheenColor:t?.sheenColor??e.sheenColor??c?.sheenColor,sheenRoughness:t?.sheenRoughness??e.sheenRoughness??c?.sheenRoughness,iridescence:t?.iridescence??e.iridescence??c?.iridescence,iridescenceThickness:t?.iridescenceThickness??e.iridescenceThickness??c?.iridescenceThickness,iridescenceIor:t?.iridescenceIor??e.iridescenceIor??c?.iridescenceIor};for(let[h,C]of Object.entries(a))C!==void 0&&(s[h]=C);let d=t?.triplanar??e.triplanar;d!==void 0&&(s.triplanar=d);let m=t?.triplanarScale??e.triplanarScale;m!==void 0&&(s.triplanarScale=m);let b=t?.triplanarSharpness??e.triplanarSharpness;return b!==void 0&&(s.triplanarSharpness=b),s}function Ss(t){let e=n=>Math.hypot(t[n],t[n+1],t[n+2]);return(e(0)+e(4)+e(8))/3}function ha(t,e,n){let o=[t.transformPoint(new DOMPoint(0,0)),t.transformPoint(new DOMPoint(e,0)),t.transformPoint(new DOMPoint(0,n)),t.transformPoint(new DOMPoint(e,n))],i=o.map(b=>b.x),s=o.map(b=>b.y),c=Math.min(...i),a=Math.min(...s),d=Math.max(...i),m=Math.max(...s);return{x:Math.round(c),y:Math.round(a),width:Math.max(0,Math.round(d-c)),height:Math.max(0,Math.round(m-a))}}function Ds(t){let e=0;for(let n of t){let o=n&&typeof n.toOperation=="function"?n.toOperation():n,i=o?Bo(o):null;if(i===null)return null;e+=i}return e}function Ps(t){let e=Number.POSITIVE_INFINITY;for(let n of t){let o=n&&typeof n.toOperation=="function"?n.toOperation():n;!o||typeof o!="object"||o.op==="Relight3D"||(e=Math.min(e,Io(o)))}return e}function Rs(t){let e=t?.operation?.op;return e==="source"||e==="Compositor"}function Ir(t,e,n){let o=Math.PI/180,i=t*o/2,s=e*o/2,c=n*o/2,a=Math.cos(i),d=Math.sin(i),m=Math.cos(s),b=Math.sin(s),h=Math.cos(c),C=Math.sin(c);return[h*m*d-C*b*a,h*b*a+C*m*d,C*m*a-h*b*d,h*m*a+C*b*d]}function Cs(t,e){if(!Array.isArray(t)||t.length===0){let a=nt(t||"#ffffff")??{r:1,g:1,b:1};return[a.r,a.g,a.b]}if(t.length===1){let a=nt(t[0])??{r:1,g:1,b:1};return[a.r,a.g,a.b]}let n=Math.max(0,Math.min(1,e))*(t.length-1),o=Math.min(Math.floor(n),t.length-2),i=n-o,s=nt(t[o])??{r:1,g:1,b:1},c=nt(t[o+1])??{r:1,g:1,b:1};return[s.r+(c.r-s.r)*i,s.g+(c.g-s.g)*i,s.b+(c.b-s.b)*i]}function As(t,e){return{x:t.x-e,y:t.y-e,width:t.width+e*2,height:t.height+e*2}}function Bs(t,e,n){let o=Math.max(0,Math.floor(t.x)),i=Math.max(0,Math.floor(t.y)),s=Math.min(e,Math.ceil(t.x+t.width)),c=Math.min(n,Math.ceil(t.y+t.height));return s>o&&c>i?{x:o,y:i,width:s-o,height:c-i}:null}async function Is(t,e,n,o,i,s,c,a,d,m,b,h,C,V,X){let ee=(G,L,u,M)=>ga(e,G,L,u,s,c,a,d,M,b,h,C,V,X);if(!t||t.width*t.height>o*i*.6)return ee(n,o,i,m);let W=(G,L,u,M,te)=>{let ne=s.renderer.beginFrame(c,G.createView(),{r:0,g:0,b:0,a:0},L,u,"clear");s.renderer.pushScissor({x:0,y:0,width:L,height:u}),s.renderer.pushIdentity(),s.renderer.drawTexture(ne,M,te,{opacity:1}),s.renderer.popTransform(),s.renderer.popScissor(),ne.end()},B=s.renderer.getTemporaryTexture(t.width,t.height,[n,...m]);W(B,t.width,t.height,n,{x:-t.x,y:-t.y,width:o,height:i});let O=await ee(B,t.width,t.height,[n,B,...m]),P=s.renderer.getTemporaryTexture(o,i,[O.texture,n,B,...m]);return W(P,o,i,O.texture,t),{texture:P,view:P.createView()}}async function ga(t,e,n,o,i,s,c,a,d,m,b,h,C,V,X=1){let ee=t.filter(G=>{if(!G||typeof G!="object")return!1;let L=G?.op,u=G?.constructor?.name;return!(L==="TemporalDeflicker"||L==="Deflicker"||L==="Relight3D"||u==="TemporalDeflicker"||u==="Relight3D")});if(ee.length===0)return{texture:e,view:e.createView()};let W={metadata:{width:n,height:o},operation:{op:"TextureSource",sourceTexture:e,dataType:"Image"},children:[]};for(let G=0;G<ee.length;G++){let L=ee[G],u=L&&typeof L.toOperation=="function"?L.toOperation():L,M=String(u.op??"effect");W={metadata:{width:n,height:o},operation:{op:M,id:`${V}-${M}_${G}`,effect:L,...u,dataType:"Image"},children:[W]}}let B=i.renderer.getTemporaryTexture(n,o,[e,...d]),O=B.createView();i.renderer.beginFrame(s,O,{r:0,g:0,b:0,a:0},n,o,"clear").end(),i.renderer.pushScissor({x:0,y:0,width:n,height:o}),i.renderer.pushIdentity();try{await a(W,{...c,containerWidth:n,containerHeight:o,pixelScale:X,renderId:`${c.renderId}-${V}-fx`,frame:m,compositionFrame:b,fps:h,isVideoMode:C,signals:c.signals,excludeTextures:[e,B,...d]},O,B,n,o)}finally{i.renderer.popTransform(),i.renderer.popScissor()}return{texture:B,view:O}}var lo=async t=>{let{ctx:e,pass:n,targetView:o,targetTexture:i,targetWidth:s,targetHeight:c,encoder:a,props:d,drawChild:m}=t,{virtualMedia:b,fps:h,frame:C}=d,V=b.operation;if(V){if(n.end(),V.op==="CompositorLayer"){console.warn("CompositorWebGPURenderer called directly with legacy CompositorLayer operation. This is a bug."),t.pass=e.renderer.beginFrame(a,o,{r:0,g:0,b:0,a:0},s,c,"load");return}if(V.op==="Compositor"){let X=V,ee=X.antialias3d===!1?1:4,W=d.containerWidth??e.surface.width,B=d.containerHeight??e.surface.height,O=X.width??W,P=X.height??B,G=typeof X.opacity=="number"?X.opacity:1,L=d.isVideoMode??(X.mode==="Video"||X.dataType==="Video"||b?.metadata?.durationMs!=null),u=d.inheritedSeekOffset??0,M=Math.max(0,C!=null&&h!=null?C+Math.round(u*h):C??0),te=d.compositionFrame??M,ne=d.motionHistoryOnly===!0,Te=e.renderer.getTemporaryTexture(O,P,[...d.excludeTextures||[],i]),mt=Te.createView(),At=b?.metadata?.durationMs??3e3,Wt=At/1e3,rt=Bi(d.renderId,b,{fps:h??24,durationSec:Wt}),{targetsById:ot}=rt;!ne&&C!=null&&Vs(b)&&oo(e.device,rt.key).needsPrevious(M)&&await Fs(t,C-1),Tn(rt,M,h??24);let ya=gn(e.device,e.renderer.format??"rgba8unorm",ee),ba=co(e.device,e.renderer.format??"rgba8unorm");ua.get(e.device)!==a&&(ua.set(e.device,a),ya.resetPools(),ba.resetPools());let xa=nt(X.backgroundColor);e.renderer.beginFrame(a,mt,xa,O,P,"clear").end();let uo=Te;e.renderer.pushScissor({x:0,y:0,width:O,height:P}),e.renderer.pushIdentity(),await mi();let ir=new Map;for(let f of zn(b.children)){let x=f.operation;if(x.kind==="media"){let Q=Jn(f.children?.[0]);if(Q?.width&&Q?.height)ir.set(x.id,{width:Q.width,height:Q.height});else if(x.dataType==="Caption"||f.children?.[0]?.operation?.dataType==="Caption"||f.children?.[0]?.operation?.srtText!==void 0){let v=ot[x.id]?.width??x.width,xe=typeof v=="number"?v:Math.round(O*.8),E=ot[x.id]?.height??x.height,pe=typeof E=="number"?E:160,$=f.children?.[0],S=Zo($)??$?.operation?.url??$?.operation?.src??$?.operation?.srtText??x.src??x.url;if(typeof E!="number"&&S)try{let z=await $o.load(S);z&&z.length>0&&(pe=Wo(z,x,xe))}catch{}ir.set(x.id,{width:xe,height:pe})}}}let mo=f=>{let x=f?.operation??{},Q=ot[x.id],v=E=>Q&&Q[E]!==void 0?Q[E]:x[E],xe={...x,width:v("width"),height:v("height"),gap:v("gap"),padding:v("padding"),fontSize:v("fontSize"),letterSpacing:v("letterSpacing")};return xe.children=(f?.children??[]).map(mo),xe.children.length||(xe.children=void 0),xe},wa=()=>(b.children??[]).map(mo).filter(f=>f?.kind!=="camera"&&f?.kind!=="light"),ar=b.children,Vr=vs(O,P,ot,ir),Fr=ar?aa.get(ar):void 0,{rects:sr}=Fr?.key===Vr?Fr:await fi({layout:wa(),viewport:{width:O,height:P},measure:(f,x)=>{if(f.kind==="text"){let Q={fontSize:f.fontSize??48,fontWeight:f.fontWeight,fontVariations:f.fontVariations,fontFamily:f.fontFamily,letterSpacing:f.letterSpacing,lineHeight:f.lineHeight,padding:f.padding,direction:f.direction};if(x!==void 0){let E=typeof f.width!="number",pe=yr(f.text??"",{...Q,width:E?void 0:x,keepNaturalWidth:!0});return{width:E?Math.ceil(pe.width):Math.min(x,Math.ceil(pe.width)),height:Math.ceil(pe.height)}}let v=yr(f.text??"",Q);if(typeof f.width!="number")return{width:Math.ceil(v.width),height:Math.ceil(v.height)};let xe=yr(f.text??"",{...Q,width:f.width});return{width:Math.ceil(xe.width),height:Math.ceil(xe.height)}}return f.kind==="media"?ir.get(f.id)??null:null}});ar&&Fr?.key!==Vr&&aa.set(ar,{key:Vr,rects:sr});let Or=zn(b.children??[]),fo=Or.filter(f=>f.operation?.kind==="camera"),po=L?fo.filter(f=>{let x=f.operation,Q=x.startFrame??0,v=x.durationFrames;return M>=Q&&(v===void 0||M<Q+v)}).sort((f,x)=>(x.operation.startFrame??0)-(f.operation.startFrame??0))[0]:fo[0],ho=Or.filter(f=>f.operation?.kind==="light"),Ma=Or.some(f=>{let x=f.operation,Q=x.id?ot[x.id]:void 0;return x.kind!=="camera"&&x.kind!=="light"&&(!!(Q?.is3D??x.is3D)||(Q?.z??x.z??0)!==0)}),va=!!(po||Ma||ho.length>0),me=null,go=[0,0,0],Cn=!1,cr=null,sn=null,yn=null,An=[],Bt=null,Bn=null,yo;if(va){let f=po?.operation,x=f?.id?ot[f.id]:void 0,Q=x?.cameraFov??f?.lens?.fov??50;me=Kn.createDefaultCamera(O,P,Q),go=[...me.eye],me.near=f?.lens?.near??1,me.far=f?.lens?.far??5e4,me.zoom=x?.cameraZoom??f?.lens?.zoom??1;let v=me.eye,xe=me.target,E=x?.cameraX??x?.x??f?.x??v[0],pe=x?.cameraY??x?.y??f?.y??v[1],$=x?.cameraZ??x?.z??f?.z??v[2];me.eye=[E,pe,$],x?.targetX!==void 0||x?.targetY!==void 0||x?.targetZ!==void 0||f?.targetX!==void 0||f?.targetY!==void 0||f?.targetZ!==void 0?me.target=[x?.targetX??f?.targetX??xe[0],x?.targetY??f?.targetY??xe[1],x?.targetZ??f?.targetZ??xe[2]]:me.target=[E,pe,0];let z=x?.cameraPitch??f?.pitch??0,Ce=x?.cameraYaw??f?.yaw??0,ft=x?.cameraRoll??f?.roll??0;(z!==0||Ce!==0||ft!==0)&&(me=Kn.applyOrientation(me,z,Ce,ft));let F=x?.orbitAzimuth,r=x?.orbitElevation,H=x?.orbitRadius;if(F!==void 0||r!==void 0||H!==void 0){let ge=H??Gn.distance(me.eye,me.target);me.eye=Kn.orbit(me.target,ge,F??0,r??0)}let l=x?.shakeTranslation??(f?.shake?.enabled?f?.shake?.translationAmplitude:0)??0,be=x?.shakeRotation??(f?.shake?.enabled?f?.shake?.rotationAmplitude:0)??0;if(l>0||be>0){let ge=M/(h??24);me=Kn.applyCameraShake(me,ge,{translationAmplitude:l,rotationAmplitude:be,frequency:f?.shake?.frequency??1.5,octaves:f?.shake?.octaves??3,seed:f?.shake?.seed??42})}Cn=!!(f?.dof?.enabled||x?.focusDistance!==void 0),Cn&&(me.focusDistance=x?.focusDistance??f?.dof?.focusDistance??Gn.distance(me.eye,me.target),me.fStop=x?.fStop??f?.dof?.fStop??2.8,me.maxBlurRadius=x?.maxBlurRadius??f?.dof?.maxBlurRadius??24);let kt=f?.motionBlur;if(kt&&h&&(cr=kt===!0?{}:kt,sn=oo(e.device,rt.key)),yn=Xi(f,me,x?.relativitySpeed??f?.relativity?.speed??0,O,P,e.device.limits.maxTextureDimension2D),yn&&Cn)throw new Error(`Camera '${f?.id}' is a cube camera (${f?.relativity?"relativity":f?.lens?.projection}) with depth of field: depth of field needs a single perspective view.`);for(let ge of ho){let y=ge.operation,pt=y.id||y.inputHandleId,q=pt?ot[pt]:void 0;if(q?.hidden||y.hidden)continue;if(L){let qe=y.startFrame??0,re=y.durationFrames;if(M<qe||re!==void 0&&M>=qe+re)continue}let It=q?.lightType??y.lightType??"point";if(It==="environment"){let qe=q?.intensity??y.intensity,re=q?.volumetricFogDensity??y.volumetricFogDensity,Oe=q?.volumetricFogAnisotropy??y.volumetricFogAnisotropy,lt=q?.volumetricFogNoiseStrength??y.volumetricFogNoiseStrength,N=y.volumetricFog,Pe=N===!0?{}:N&&typeof N=="object"?{...N}:void 0,rn=Pe?{...Pe,...re!==void 0&&{density:re},...Oe!==void 0&&{anisotropy:Oe},...lt!==void 0&&{noise:{...typeof Pe.noise=="object"?Pe.noise:{},strength:lt}}}:void 0;Bt={preset:y.preset,hdri:y.hdri,top:y.top,horizon:y.horizon,bottom:y.bottom,softboxes:q?.softboxes??y.softboxes,rotation:q?.rotation??y.rotation,exposure:q?.exposure??y.exposure,toneMapping:y.toneMapping,fog:y.fog,floor:y.floor,outlines:y.outlines,ssr:y.ssr,gi:y.gi,...rn&&{volumetricFog:rn},...qe!==void 0&&{intensity:qe}},Bn=y.bloom===!0?{}:y.bloom&&typeof y.bloom=="object"?{...y.bloom}:null;continue}let ht=q?.color??y.color??"#ffffff",Ue=nt(ht),Tt=q?.intensity??y.intensity??1,ct=q?.x??y.x??0,Vt=q?.y??y.y??0,Lt=q?.z??y.z??0,fe=q?.targetX??y.targetX??0,we=q?.targetY??y.targetY??0,Ne=q?.targetZ??y.targetZ??0,Ee=q?.radius??y.radius??1e3,g=q?.angle??y.angle??45,ie=q?.penumbra??y.penumbra??.2,Z=q?.decay??y.decay??1,ae=typeof(q?.width??y.width)=="number"?q?.width??y.width:void 0,T=typeof(q?.height??y.height)=="number"?q?.height??y.height:void 0,w=!!(q?.twoSided??y.twoSided),De=q?.rotation??y.rotation??0;An.push({type:It,color:Ue,intensity:Tt,position:[ct,Vt,Lt],target:[fe,we,Ne],...Array.isArray(y.direction)&&{direction:y.direction},radius:Ee,angle:g,penumbra:ie,decay:Z,...ae!==void 0&&{width:ae},...T!==void 0&&{height:T},twoSided:w,rotation:De,castShadow:!!y.castShadow,shadowSoftness:q?.shadowSoftness??y.shadowSoftness,shadowDarkness:q?.shadowDarkness??y.shadowDarkness}),y.castShadow&&y.shadowMapSize&&(yo=y.shadowMapSize)}}let We=[],Zn=()=>We.flatMap(f=>[f.texture,f.opts.matte,f.kind==="quad"?f.opts.relief?.texture:void 0]).filter(f=>!!f),bo=new Map,xo=(f,x,Q,v,xe)=>{let E=f===void 0?void 0:bo.get(f);if(!E)return{};let{width:pe,height:$}=E.texture;return{relief:{texture:E.texture,uvRect:[x/pe,Q/$,v/pe,xe/$],amount:E.amount,eye:go}}},wo=()=>{let f=new Map;return We.map(x=>{if(x.owner===void 0)return[x,void 0];let Q=f.get(x.owner)??0;return f.set(x.owner,Q+1),[x,`${x.owner}#${Q}`]})},Mo=(f,x)=>{let Q=gn(e.device,e.renderer.format??"rgba8unorm",ee);for(let[v,xe]of wo())xe&&(v.kind==="mesh"?f.recordMesh(a,xe,M,{modelMatrix:Q.meshModelMatrix(v.opts),skinning:v.opts.skinningMatrices,windTime:v.opts.wind?.time,crowdTime:v.opts.crowd?.time},{instanceBuffer:v.opts.instanceBuffer,vertices:v.meshBuffers&&{buffer:v.meshBuffers.vertexBuffer,bytes:ia(v.mesh)}}):v.kind==="quad"?f.recordQuad(xe,M,Q.quadModelMatrix(v.opts)):f.recordSlug(xe,M,Q.quadModelMatrix(v.opts),v.batches));f.recordFrame(M,x)},ka=(f,x,Q,v,xe,E)=>{let pe=gn(e.device,e.renderer.format??"rgba8unorm",ee),$=pe.beginVelocityPass(a,O,P,x,f.previousCamera(M)??x);E&&pe.drawFloorVelocity($.pass,$.cameraBindGroup,E);for(let[S,z]of wo())if(S.kind==="mesh"){let Ce=z?f.previousMesh(z,M,{skinning:S.opts.skinningMatrices,instanceBuffer:S.opts.instanceBuffer,vertexBytes:S.meshBuffers&&ia(S.mesh),wind:S.opts.wind,crowd:S.opts.crowd}):void 0;pe.drawMeshVelocity($.pass,$.cameraBindGroup,S.meshBuffers??S.mesh,S.texture,S.opts,Ce)}else S.kind==="quad"?pe.drawQuadVelocity($.pass,$.cameraBindGroup,S.texture,S.opts,z?f.previousQuad(z,M):void 0):pe.drawSlugVelocity($.pass,$.cameraBindGroup,S.batches,S.opts,S.stackBase,z?f.previousSlug(z,M):void 0);$.pass.end(),pe.applyMotionBlur(a,Q,$.velocity,v.createView(),{shutterAngle:xe.shutter,sampleCount:xe.samples,maxBlur:xe.maxBlur})},Gr=(f,x,Q)=>{if(We.length===0||!me)return{finalTex:f,finalView:x};let v=gn(e.device,e.renderer.format??"rgba8unorm",ee);for(let g of We)g.kind==="mesh"&&(g.opts.morphWeights?.length&&(g.meshBuffers=v.morphMesh(a,g.mesh,g.opts.morphWeights,g.opts.wireframe)),g.opts.audioDeform&&(g.meshBuffers=v.deformMesh(a,g.mesh,g.opts.audioDeform,g.opts.wireframe,g.meshBuffers)));if(ne)return sn&&Mo(sn,me),We.length=0,{finalTex:f,finalView:x};let xe=Zn(),E=e.renderer.getTemporaryTexture(O,P,[f,i,...Q,...xe]),pe=E.createView(),$=Bt?.outlines,S=$===!0?{}:$||null,z=!!Bt?.volumetricFog,Ce=!!(Bt?.ssr||Bt?.gi),ft=Cn||!!S||z||Ce,F,r;ft&&(F=v.getOrCreateLinearDepthTexture(O,P),r=F.createView());let H=[],l=An.filter(g=>(g.lightType??g.type)!=="ambient").map((g,ie)=>({light:g,index:ie})).filter(({light:g})=>{let ie=g.lightType??g.type;return g.castShadow&&(ie==="directional"||ie==="spot"||ie==="rect"||ie==="point")});if(l.length>0){let g=[],ie=[];for(let Z of We)if(Z.kind==="mesh"){let ae={kind:"mesh",mesh:Z.mesh,buffers:Z.meshBuffers,opts:Z.opts};ie.push(v.worldBounds(ae)),Z.opts.castShadow!==!1&&Z.opts.material!=="unlit"&&g.push(ae)}else if(Z.kind==="quad"){let ae={kind:"quad",texture:Z.texture,opts:Z.opts};ie.push(v.worldBounds(ae)),Z.opts.castShadow===!0&&g.push(ae)}if(g.length>0){let Z=l.reduce((De,{light:qe})=>De+((qe.lightType??qe.type)==="point"?6:1),0),ae=l.every(({light:De})=>(De.lightType??De.type)==="point"),T=yo??(ae?1024:2048),w=0;for(let{light:De,index:qe}of l){let re=(De.lightType??De.type)==="point"?6:1,Oe=v.renderShadowMap(a,De,qe,g,ie,{mapSize:T,layer:w,layerCount:Z});Oe&&(H.push(Oe),w+=Oe.layerCount??re)}}}let be=g=>g.kind==="mesh"&&(g.opts.material==="glass"||g.opts.material==="acrylic"||g.opts.material==="frosted"),kt=[],ge=[],y=[],pt=Gn.subtract(me.target,me.eye);for(let g of We)if(be(g))ge.push(g);else if(g.kind==="mesh"&&g.opts.transparent){let ie=v.worldBounds({kind:"mesh",mesh:g.mesh,opts:g.opts}),Z=ie.min.map((T,w)=>(T+ie.max[w])/2),ae=Z[0]*pt[0]+Z[1]*pt[1]+Z[2]*pt[2];y.push({item:g,depth:ae})}else kt.push(g);y.sort((g,ie)=>ie.depth-g.depth);let q=[],It=Math.max(1,Math.floor(e.device.limits.maxStorageBufferBindingSize/128));for(let g=0;g<kt.length;){let ie=kt[g];if(ie.kind!=="mesh"){q.push(ie),g++;continue}let Z=g+1;for(;Z<kt.length&&Z-g<It;){let ae=kt[Z];if(ae.kind!=="mesh"||!Wi(ie,ae))break;Z++}if(Z-g===1)q.push(ie);else{let ae=new Float32Array((Z-g)*32);for(let T=g;T<Z;T++){let w=kt[T];if(w.kind!=="mesh")throw new Error("Invalid mesh batch");let De=v.meshModelMatrix(w.opts);ae.set(De,(T-g)*32),ae.set(w.opts.normalMatrix??zo.computeNormalMatrix(De),(T-g)*32+16)}q.push({...ie,opts:{...ie.opts,modelMatrix:_.identity(),normalMatrix:_.identity(),instanceBuffer:v.uploadInstanceData(ae),instanceCount:Z-g,matrixInstances:!0}})}g=Z}let ht=[...q,...y.map(({item:g})=>g),...ge];if(yn){let g=[Ce&&"screen-space reflections and GI (ssr, gi)",cr&&"motion blur"].filter(Boolean);if(g.length)throw new Error(`A cube camera (${yn.remap.projection??"lens"}) cannot draw ${g.join(" or ")}: they need a single perspective view.`)}let Ue=Bt?.floor,Tt=H.length?H:null,ct=(g,ie,Z)=>{if(!Ue||typeof Ue.y!="number"||g.eye[1]>=Ue.y)return null;let ae={...g,eye:[g.eye[0],2*Ue.y-g.eye[1],g.eye[2]],target:[g.target[0],2*Ue.y-g.target[1],g.target[2]],up:[g.up[0],g.up[1],g.up[2]]},{pass:T,cameraBindGroup:w,lightsBindGroup:De,reflectionTexture:qe}=v.beginReflectionPass(a,ie,Z,ae,An,{environment:Bt,shadow:null});for(let re of ht)re.kind==="quad"?v.drawTextureQuad(T,w,De,re.texture,re.opts,!1):re.kind==="slug"?v.drawSlugText(T,w,De,re.batches,re.opts,re.stackBase,!1):re.kind==="mesh"&&v.drawMesh3D(T,w,De,re.meshBuffers??re.mesh,re.texture,re.opts,!1);return T.end(),v.blurReflection(a,qe,Ue.roughness??.35)},Vt=(g,ie,Z,ae)=>{let T=v.beginPass(a,g.color,g.width,g.height,g.view,"clear",{r:0,g:0,b:0,a:0},g.geometry,An,{environment:Bt,shadow:Tt,screenIndirect:ie},Z,g.hdr),{pass:w,cameraBindGroup:De,lightsBindGroup:qe}=T;Ue&&g.reflection&&v.drawFloor(w,De,qe,g.reflection,Ue,ft,Z);for(let re of ht)ae===null&&be(re)||(re.kind==="quad"?v.drawTextureQuad(w,De,qe,re.texture,re.opts,ft):re.kind==="slug"?v.drawSlugText(w,De,qe,re.batches,re.opts,re.stackBase,ft):re.kind==="mesh"&&v.drawMesh3D(w,De,qe,re.meshBuffers??re.mesh,re.texture,be(re)?{...re.opts,backdrop:ae??void 0}:re.opts,ft));return w.end(),T},Lt=M/Math.max(1,h??24),fe=E,we=null,Ne=null;if(yn){let g=yn.faceSize,ie=v.getOrCreateCubeTexture(g,!1),Z=Bn?v.getOrCreateCubeTexture(g,!0):null,ae=S&&{...S,referenceHeight:(S.referenceHeight??1080)*2*yn.centerDensity/P},T=!!ae||z,w=[f,i,E,...Q,...xe],De=T?e.renderer.getTemporaryTexture(g,g,w):null,qe=ae&&z?e.renderer.getTemporaryTexture(g,g,[...w,...De?[De]:[]]):null,re=ft?v.getOrCreateLinearDepthTexture(g,g):null;Fo(me.eye,me.near,me.far).forEach((Oe,lt)=>{let N=v.cubeFaceView(ie,lt),{cameraBindGroup:Pe,lightsBindGroup:rn}=Vt({view:Oe,width:g,height:g,color:De?De.createView():N,geometry:re?.createView(),hdr:Z?v.cubeFaceView(Z,lt):void 0,reflection:ct(Oe,g,g)},void 0,!!Bn,void 0);if(!De||!re)return;z&&v.resolveGeometry(a,re);let ur=De;if(ae){let In=qe??null;if(v.applyOutlines(a,De,re,In?In.createView():N,Oe,ae,Bt?.fog),!In)return;ur=In}z&&Bt&&v.applyVolumetricFog(a,ur,re,N,Pe,rn,Bt,Lt,M)}),v.remapLens(a,ie,Z,pe,O,P,yn.remap)}else{we=ct(me,O,P);let g={view:me,width:O,height:P,color:pe,geometry:r,reflection:we};if(Ce&&Bt){let{cameraBuffer:Z}=Vt(g,"radiance",!0,f);v.traceScreenIndirect(a,Z,Bt)}let ie=f;ge.length&&(Vt(g,Ce?"apply":void 0,!1,null),ie=e.renderer.composite(a,f,E,"normal",[i,E,...Q])),Ne=Vt(g,Ce?"apply":void 0,!!Bn,ie)}if(Ne&&S&&F){(Cn||z)&&v.resolveGeometry(a,F);let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,F,...Q]);v.applyOutlines(a,E,F,g.createView(),me,S,Bt?.fog),fe=g}if(Ne&&z&&Bt&&F){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,F,...Q]);v.applyVolumetricFog(a,fe,F,g.createView(),Ne.cameraBindGroup,Ne.lightsBindGroup,Bt,Lt,M),fe=g}if(Ne&&Cn&&F){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,...Q]);v.applyDepthOfField(a,fe,F,g.createView(),Ne.cameraBuffer),fe=g}if(cr&&sn){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,...Q]);ka(sn,me,fe,g,cr,Ue&&we?Ue:void 0),fe=g}if(sn&&Mo(sn,me),Bn){let g=e.renderer.getTemporaryTexture(O,P,[f,i,fe,E,...Q]);v.applyBloom(a,fe,g,Bn,v.hdrSource()),fe=g}let Ee=e.renderer.composite(a,f,fe,"normal",[i,...Q]);return We.length=0,{finalTex:Ee,finalView:Ee.createView()}},_t=0,Ta=(f,x,Q)=>{let v=Q*(1-Math.SQRT1_2);for(let xe of f){let E=xe.operation;if(!E)return!1;let pe=ot[E.id||E.inputHandleId];if(pe?.hidden||E.hidden)continue;let $=sr[E.id];if(!$)return!1;let S=(ft,F)=>pe?.[ft]??E[ft]??F;if(S("scale",1)!==1||S("scaleX",1)!==1||S("scaleY",1)!==1||S("rotation",0)!==0||S("rotateX",0)!==0||S("rotateY",0)!==0||Array.isArray(E.effects)&&E.effects.length>0||(pe?.animators??E.animators)?.length)return!1;let z=$.x-x.x+(S("x",0)-(E.x??0)),Ce=$.y-x.y+(S("y",0)-(E.y??0));if(z<v||Ce<v||z+$.width>x.width-v||Ce+$.height>x.height-v)return!1}return!0},lr=(f,x,Q,v=Number.POSITIVE_INFINITY)=>ra(Ho(f),{width:x,height:Q},{maxDimension:e.device.limits.maxTextureDimension2D,maxPixels:4*O*P,effects:v}),bn=async(f,x,Q,v,xe=1,E=new DOMMatrix,pe=null,$=O,S=P,z=null,Ce=!1)=>{let ft=[...f].sort((ge,y)=>{let pt=ge.operation?.zIndex??0,q=y.operation?.zIndex??0;return pt-q}),F=x,r=Q,H=v,l=new Map,be=new Map,kt=new Map;for(let ge of f){let y=ge.operation;y?.matteOf&&l.set(y.matteOf,ge),y?.reliefOf&&be.set(y.reliefOf,ge),y?.textureOf&&kt.set(y.textureOf,ge)}for(let ge of ft){let y=ge.operation;if(y.kind==="camera"||y.kind==="light"||y.matteOf||y.reliefOf||y.textureOf)continue;let pt=y.id||y.inputHandleId,q=pt?ot[pt]:void 0,It=!!(q?.is3D??y.is3D)||!!(me&&((q?.z??y.z??0)!==0||y.is3D))||!!z;if(Ce&&!It&&We.length>0){let fe=Gr(F,r,H);fe.finalTex!==F&&(H=[...H,fe.finalTex]),F=fe.finalTex,r=fe.finalView}if(y.op!=="CompositorLayer"){await m(ge,{containerWidth:$,containerHeight:S,renderId:`${d.renderId}-c${_t}-${y.op}`,fps:h,isVideoMode:L,frame:M,compositionFrame:te,excludeTextures:[i,...H]},r,F,$,S);continue}_t+=1;let ht=async(fe,we)=>{let Ne=We.splice(0),Ee=[i,F,...H,...Ne.flatMap(w=>[w.texture,w.opts.matte,w.kind==="quad"?w.opts.relief?.texture:void 0])].filter(w=>!!w),g=e.renderer.getTemporaryTexture($,S,Ee),ie=g.createView();e.renderer.beginFrame(a,ie,{r:0,g:0,b:0,a:0},$,S,"clear").end();let ae=(await Lr(fe,we,g,ie,Ee.filter(w=>w!==i),xe,E,pe,$,S,z,!1))?.finalTex??g,T=Gr(ae,ae.createView(),Ee).finalTex;return We.push(...Ne),T},Ue=y.reliefId?be.get(y.id):void 0;if(Ue&&It){let fe=await ht(Ue,_t);H=[...H,fe],_t+=1,bo.set(y.id,{texture:fe,amount:y.reliefAmount??0})}let Tt=y.textureLayerId?kt.get(y.id):void 0,ct;if(Tt){let fe=await ht(Tt,_t);H=[...H,fe],_t+=1;let we=sr[y.textureLayerId],Ne=we?[we.x/$,we.y/S,we.width/$,we.height/S]:[0,0,1,1],Ee=We.length;ct=()=>{for(let g of We.slice(Ee))g.kind==="mesh"&&(g.texture=fe,g.opts.uvRect=Ne)}}let Vt=y.matteId?l.get(y.id):void 0;if(Vt){let fe=Vt.operation.matteMode??"alpha",we=fe==="luma"?"luma-in":fe==="luma-inverted"?"luma-out":fe==="alpha-inverted"?"destination-out":"destination-in";if(It){let Z=await ht(Vt,_t);if(H=[...H,Z],_t+=1,fe!=="alpha"){let w=e.renderer.getTemporaryTexture($,S,[i,F,...H,...Zn()]);e.renderer.beginFrame(a,w.createView(),{r:1,g:1,b:1,a:1},$,S,"clear").end(),Z=e.renderer.composite(a,w,Z,we,[i,F,...H,...Zn(),w]),H=[...H,Z]}let ae=We.length,T=await Lr(ge,_t,F,r,H,xe,E,pe,$,S,z,Ce);for(let w of We.slice(ae))w.opts.matte=Z;ct?.(),T&&(T.finalTex!==F&&(H=[...H,T.finalTex]),F=T.finalTex,r=T.finalView);continue}let Ne=await ht(ge,_t);H=[...H,Ne],_t+=1;let Ee=await ht(Vt,_t),g=e.renderer.composite(a,Ne,Ee,we,[i,F,...H,Ee]),ie=e.renderer.composite(a,F,g,"normal",[i,...H,Ee]);H=[...H,ie],F=ie,r=ie.createView();continue}let Lt=await Lr(ge,_t,F,r,H,xe,E,pe,$,S,z,Ce);ct?.(),Lt&&(Lt.finalTex!==F&&(H=[...H,Lt.finalTex]),F=Lt.finalTex,r=Lt.finalView)}if(Ce&&We.length>0){let ge=Gr(F,r,H);ge.finalTex!==F&&(H=[...H,ge.finalTex]),F=ge.finalTex,r=ge.finalView}return{finalTex:F,finalView:r}},Lr=async(f,x,Q,v,xe,E,pe,$,S=O,z=P,Ce=null,ft=!1)=>{let F=[...xe,...Zn()],r=f.operation;if(r.kind==="camera"||r.kind==="light")return;let H=r.id||r.inputHandleId,l=H?ot[H]:void 0;if(l?.hidden||r.hidden)return;let be=r.kind,kt=be==="flex"||be==="block"||be==="box";if(L){let R=r.startFrame??0,D=r.durationFrames;if(M<R||D!==void 0&&M>=R+D)return}let ge=!!(l?.is3D??r.is3D)||!!(me&&((l?.z??r.z??0)!==0||r.is3D));if(ne&&!kt&&be!=="model3d"&&!ge&&!so(l,r))return;if(be==="model3d"){let R=gn(e.device,e.renderer.format??"rgba8unorm",ee),D=r.modelData??r.src;if(!D&&r.text3dOptions){let p=r.text3dOptions,ce=(p.fontFamily?tr.getParsed(p.fontFamily):null)??tr.getParsed("Inter")??tr.getParsed("Unbounded")??tr.getFirstParsed();ce&&(D=ei({...p,font:ce}).modelData,r.modelData=D)}if(!D&&r.primitive3d&&(D=Pn(r.primitive3d),r.modelData=D),!D)return;let Y;try{Y=typeof D=="object"&&D!==null&&"meshes"in D?D:await R.loadModelAsync(D,r.modelFormat??"auto",{center:r.center,normalizeSize:r.normalizeSize})}catch(p){throw new Error(`Failed to load 3D model ${r.id??"(unnamed)"}: ${p instanceof Error?p.message:String(p)}`,{cause:p})}if(Y&&r.fracture3d&&(Y=_i(Y,r.fracture3d)),!Y||Y.meshes.length===0)return;let J=r.x??0,he=r.y??0,Je=l?.x??J,Dt=l?.y??he,zt=l?.z??r.z??0,Re=Je,Ve=Dt;if(!Ce){let p=na({rect:null,parentRect:null,baseX:J,baseY:he,sampledX:Je,sampledY:Dt,parentMatrix:pe});Re=p.x,Ve=p.y}let it=l?.rotateX??r.rotateX??0,Ze=l?.rotateY??r.rotateY??0,Ke=(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:l?.rotation??r.rotation??0,bt=l?.scale??r.scale??1,$e=(l?.scaleX??r.scaleX??1)*bt,xt=(l?.scaleY??r.scaleY??1)*bt,Jt=(l?.scaleZ??r.scaleZ??1)*bt,Be=_.identity();Be=_.multiply(Be,_.translate(Re,Ve,zt));let un=it*Math.PI/180,on=Ze*Math.PI/180,I=Ke*Math.PI/180;I!==0&&(Be=_.multiply(Be,_.rotateZ(I))),on!==0&&(Be=_.multiply(Be,_.rotateY(on))),un!==0&&(Be=_.multiply(Be,_.rotateX(un))),Be=_.multiply(Be,_.scale($e,xt,Jt));let Me=Ce?_.multiply(Ce,Be):Be,se=l?.colorTint||l?.color||r.colorTint||r.color?nt(l?.colorTint??l?.color??r.colorTint??r.color):void 0,ye=se?[se.r,se.g,se.b,se.a]:[1,1,1,1],_e=(l?.opacity??r.opacity??1)*E;if(r.instances3d){let p=r.instances3d,ce=Array.isArray(p.mesh)?p.mesh:p.mesh?[p.mesh]:r.modelData?[r.modelData]:r.primitive3d?[Pn(r.primitive3d)]:[],Se=[],Et=[];for(let le of ce){let j;if(typeof le=="object"&&le!==null){if("meshes"in le&&Array.isArray(le.meshes))j=le;else if(le.modelData&&"meshes"in le.modelData)j=le.modelData;else if(le.primitive3d)j=Pn(le.primitive3d);else if(le.src)try{j=R.loadModel(le.src,le.modelFormat??"auto",{center:le.center,normalizeSize:le.normalizeSize})}catch{}}if(j&&j.meshes&&j.meshes.length>0){Se.push(j);let at=!("meshes"in le);Et.push(at?{q:Ir(le.rotateX??0,le.rotateY??0,le.rotateZ??0),s:le.scale??1}:Rr)}}if(Se.length===0&&Y&&(Se.push(Y),Et.push(Rr)),r.scatter3d&&Se.length>0){let le=r.scatter3d,j=await Hi(le.surface,(at,st)=>R.loadModelAsync(at,st.modelFormat??"auto",{center:st.center,normalizeSize:st.normalizeSize}));p.transforms=j?Ki(le,j,Se.map((at,st)=>Ji(at,Et[st]))):[],p.count=p.transforms.length}if(Se.length>0){let le=p.bodies&&Array.isArray(p.bodies)&&p.bodies.length>0?p.bodies.length:p.count??(Array.isArray(p.transforms)?p.transforms.length:0);if(le>0){let j=Se.length,at=new Uint32Array(j);for(let U=0;U<le;U++)at[U%j]++;let st=r.crowd,$t=Se.map(U=>st?Ui(U,st):void 0),wt=$t.map(U=>U?32:16),Ft=(U,de)=>{let Mt=U?.meshes.get(de);if(!(!U||!Mt))return{palette:Ni(e.device,Mt.palette),jointCount:Mt.jointCount,time:(M??0)/(h||30)}},ve=[],et=[];for(let U=0;U<j;U++)ve.push(new Float32Array(at[U]*wt[U])),et.push({min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]});let Yt=new Uint32Array(j),Ye={frame:M??0,fps:h||30,time:(M??0)/(h||30),duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)};for(let U=0;U<le;U++){let de=U%j,Mt=Yt[de],Xe=ve[de],Ie=et[de],je=Mt*wt[de],Ot={},tt=0,Zt=0,Pt=0,dn=1,an=0,A=0,ue=0,oe=1,He=1,vt=1,Qe=1,Mn=1,vn=0,kn=0,mn=0,fn=0;if(p.bodies&&p.bodies[U]){let k=p.bodies[U];tt=typeof k.x?.get=="function"?Number(k.x.get(Ye)):Number(k.x??0),Zt=typeof k.y?.get=="function"?Number(k.y.get(Ye)):Number(k.y??0),Pt=typeof k.z?.get=="function"?Number(k.z.get(Ye)):Number(k.z??0);let K=typeof k.rotateX?.get=="function"?Number(k.rotateX.get(Ye)):Number(k.rotateX??0),Xr=typeof k.rotateY?.get=="function"?Number(k.rotateY.get(Ye)):Number(k.rotateY??0),Oa=typeof k.rotateZ?.get=="function"?Number(k.rotateZ.get(Ye)):Number(k.rotateZ??0),pr=Ir(K,Xr,Oa);if(an=pr[0],A=pr[1],ue=pr[2],oe=pr[3],p.emissiveBySpeed){let hr=typeof k.speed?.get=="function"?Number(k.speed.get(Ye)):Number(k.speed??0),Hn=p.emissiveBySpeed.maxSpeed||1e3,Er=Math.min(1,Math.max(0,hr/Hn));if(Er>.001){let Zr=Cs(p.emissiveBySpeed.color,Er);vn=Zr[0],kn=Zr[1],mn=Zr[2],fn=Er*(p.emissiveBySpeed.intensity??3)}}if(p.emissiveByImpact){let hr=typeof k.impact?.get=="function"?Number(k.impact.get(Ye)):Number(k.impact??0);if(hr>.01){let Hn=nt(p.emissiveByImpact.color??"#ffffff")??{r:1,g:1,b:1,a:1};vn=Math.max(vn,Hn.r),kn=Math.max(kn,Hn.g),mn=Math.max(mn,Hn.b),fn=Math.max(fn,hr*(p.emissiveByImpact.intensity??4))}}}else if(typeof p.instanceAt=="function"){let k=p.instanceAt(U,M??0,h||30);if(!k||(Ot=k,tt=k.x??0,Zt=k.y??0,Pt=k.z??0,typeof k.scale=="number"&&(dn=k.scale),dn<=0))continue;if(k.rotation)if(k.rotation.length===4)an=k.rotation[0],A=k.rotation[1],ue=k.rotation[2],oe=k.rotation[3];else{let K=Ir(k.rotation[0],k.rotation[1],k.rotation[2]);an=K[0],A=K[1],ue=K[2],oe=K[3]}if(k.color){let K=typeof k.color=="string"?nt(k.color):{r:k.color[0],g:k.color[1],b:k.color[2],a:k.color[3]??1};K&&(He=K.r,vt=K.g,Qe=K.b,Mn=K.a)}if(k.emissive){let K=typeof k.emissive=="string"?nt(k.emissive):{r:k.emissive[0],g:k.emissive[1],b:k.emissive[2]};K&&(vn=K.r,kn=K.g,mn=K.b),fn=k.emissiveIntensity??1}}else if(Array.isArray(p.transforms)&&p.transforms[U]){let k=p.transforms[U];if(Ot=k,tt=k.x??0,Zt=k.y??0,Pt=k.z??0,typeof k.scale=="number"&&(dn=k.scale),dn<=0)continue;if(k.rotation)if(k.rotation.length===4)an=k.rotation[0],A=k.rotation[1],ue=k.rotation[2],oe=k.rotation[3];else{let K=Ir(k.rotation[0],k.rotation[1],k.rotation[2]);an=K[0],A=K[1],ue=K[2],oe=K[3]}if(k.color){let K=typeof k.color=="string"?nt(k.color):{r:k.color[0],g:k.color[1],b:k.color[2],a:k.color[3]??1};K&&(He=K.r,vt=K.g,Qe=K.b,Mn=K.a)}if(k.emissive){let K=typeof k.emissive=="string"?nt(k.emissive):{r:k.emissive[0],g:k.emissive[1],b:k.emissive[2]};K&&(vn=K.r,kn=K.g,mn=K.b),fn=k.emissiveIntensity??1}}else continue;Yt[de]++;let Fn=Et[de];Fn!==Rr&&([an,A,ue,oe]=qi([an,A,ue,oe],Fn.q),dn*=Fn.s),Xe[je+0]=tt,Xe[je+1]=Zt,Xe[je+2]=Pt,Xe[je+3]=dn,Xe[je+4]=an,Xe[je+5]=A,Xe[je+6]=ue,Xe[je+7]=oe,Xe[je+8]=He,Xe[je+9]=vt,Xe[je+10]=Qe,Xe[je+11]=Mn,Xe[je+12]=vn,Xe[je+13]=kn,Xe[je+14]=mn,Xe[je+15]=fn;let $n=$t[de];$n&&st&&Xe.set(Yi($n,st,U,Ot),je+16);let On=Se[de].bounds,pn=(On?On.boundingSphereRadius+Math.hypot(...On.center):50)*dn;Ie.min[0]=Math.min(Ie.min[0],tt-pn),Ie.min[1]=Math.min(Ie.min[1],Zt-pn),Ie.min[2]=Math.min(Ie.min[2],Pt-pn),Ie.max[0]=Math.max(Ie.max[0],tt+pn),Ie.max[1]=Math.max(Ie.max[1],Zt+pn),Ie.max[2]=Math.max(Ie.max[2],Pt+pn)}for(let U=0;U<j;U++){let de=Yt[U];if(de===0)continue;let Mt=Se[U],Xe=de===at[U]?ve[U]:ve[U].subarray(0,de*wt[U]),Ie=R.uploadInstanceData(Xe),je=Number.isFinite(et[U].min[0])?et[U]:void 0;for(let Ot of Mt.meshes){let tt=Ot.materialName?Mt.materials[Ot.materialName]:void 0,Zt=tt?.diffuseColor??[1,1,1,1],Pt={modelMatrix:Me,opacity:_e*(tt?.opacity??1),colorTint:[ye[0]*Zt[0],ye[1]*Zt[1],ye[2]*Zt[2],ye[3]*(Zt[3]??1)],transparent:!1,twoSided:l?.twoSided??r.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),material:l?.material??r.material??p.material??tt?.shading??"lit",roughness:l?.roughness??r.roughness??p.roughness??tt?.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity??p.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??p.ambientIntensity??1,metallic:l?.metallic??r.metallic??p.metallic??tt?.metallic,...Xn(l,r,tt),instanceBuffer:Ie,instanceCount:de,bounds:je,wind:io(r.wind,Mt,(M??0)/(h||30)),crowd:Ft($t[U],Ot)};We.push({owner:r.id,kind:"mesh",mesh:Ot,texture:tt?await R.materialTexture(tt):void 0,opts:Pt})}}return{finalTex:Q,finalView:v}}}}if(r.swarm3d){let p=r.swarm3d,ce=p.max??2e3,Se=p.seed??42,Et=p.substeps??2,le=p.prewarm??0,j=p.emitter??{},at=Array.isArray(p.speed)?p.speed:[p.speed??100,p.speed??300],st=p.direction??[0,-1,0],$t=(p.spread??45)*Math.PI/180,wt=Array.isArray(p.angularSpeed)?p.angularSpeed:[p.angularSpeed??1,p.angularSpeed??6],Ft=p.angularDrag??.1,ve=Array.isArray(p.lifetime)?p.lifetime:[p.lifetime??2,p.lifetime??4],et=Array.isArray(p.size)?p.size:[p.size??18,p.size??12],Yt=p.sizeJitter??.25,Ye=p.fade??[.15,.2],U=[];if(Array.isArray(p.color))for(let A of p.color){let ue=nt(A);ue&&U.push([ue.r,ue.g,ue.b,ue.a])}else if(typeof p.color=="string"){let A=nt(p.color);A&&U.push([A.r,A.g,A.b,A.a])}U.length===0&&U.push([.15,.14,.18,1]);let de=p.heat??{},Mt=[[.1,.05,.15],[1,0,.6],[1,.9,1]];if(Array.isArray(de.color)&&de.color.length>=2){let A=nt(de.color[0])??{r:.1,g:.05,b:.15},ue=nt(de.color[Math.floor(de.color.length/2)])??{r:1,g:0,b:.6},oe=nt(de.color[de.color.length-1])??{r:1,g:.9,b:1};Mt[0]=[A.r,A.g,A.b],Mt[1]=[ue.r,ue.g,ue.b],Mt[2]=[oe.r,oe.g,oe.b]}let Xe=Array.isArray(p.meshVariants)?p.meshVariants:p.mesh?[p.mesh]:[],Ie=[];for(let A of Xe){let ue;if(A&&typeof A=="object"){if("meshes"in A&&Array.isArray(A.meshes))ue=A;else if(A.modelData&&"meshes"in A.modelData)ue=A.modelData;else if(A.primitive3d)ue=Pn(A.primitive3d);else if(A.src)try{ue=R.loadModel(A.src,A.modelFormat??"auto",{center:A.center,normalizeSize:A.normalizeSize})}catch{}}ue&&ue.meshes&&ue.meshes.length>0&&Ie.push(ue)}Ie.length===0&&Y&&Ie.push(Y);let je=20,Ot=Ie[0]?.bounds;if(Ot){let A=Ot.max[0]-Ot.min[0],ue=Ot.max[1]-Ot.min[1],oe=Ot.max[2]-Ot.min[2],He=Math.max(A,ue,oe)*.5;Number.isFinite(He)&&He>.1&&(je=He)}let tt;if(p.sparks&&typeof p.sparks=="object"){let A=p.sparks,ue=Array.isArray(A.size)?[A.size[0]??3.2,A.size[1]??1.2]:[A.size??3.2,(A.size??3.2)*.35],oe=Array.isArray(A.lifetime)?[A.lifetime[0]??.35,A.lifetime[1]??.9]:[A.lifetime??.35,(A.lifetime??.6)*1.4],He=Array.isArray(A.speed)?[A.speed[0]??60,A.speed[1]??260]:[60,A.speed??260],vt=[1,.9,1];if(Array.isArray(A.color)&&A.color.length>=1){let Qe=nt(A.color[Math.floor(A.color.length/2)])??nt(A.color[0])??{r:1,g:.9,b:1};vt=[Qe.r,Qe.g,Qe.b]}else if(typeof A.color=="string"){let Qe=nt(A.color)??{r:1,g:.9,b:1};vt=[Qe.r,Qe.g,Qe.b]}tt={max:A.max??2e3,rate:A.rate??600,threshold:A.threshold??.25,size:[ue[0],ue[1]],lifetime:[oe[0],oe[1]],speed:[He[0],He[1]],intensity:A.intensity??9,color:vt}}let Zt={max:ce,seed:Se,substeps:Et,prewarm:le,emitter:{shape:j.shape??"point",x:j.x??0,y:j.y??0,z:j.z??0,width:j.width??100,height:j.height??100,depth:j.depth??100,radius:j.radius??50},speed:[at[0],at[1]],direction:[st[0],st[1],st[2]],spread:$t,angularSpeed:[wt[0],wt[1]],angularDrag:Ft,lifetime:[ve[0],ve[1]],size:[et[0],et[1]],sizeJitter:Yt,fade:[Ye[0],Ye[1]],colors:U,heat:{source:de.source??"both",maxSpeed:de.maxSpeed??900,curve:de.curve??1.6,intensity:de.intensity??5,colors:Mt},variants:Math.max(1,Ie.length),meshRadius:je,sparks:tt},Pt=ca.get(r);(!Pt||Pt.device!==e.device)&&(Pt=R.swarm3dPipeline.createState(Zt),ca.set(r,Pt));let dn=M??0,an=A=>{let ue={frame:A,fps:h||30,time:A/(h||30),duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)},oe=(K,Xr)=>typeof K=="number"?K:typeof K?.get=="function"?Number(K.get(ue)):typeof K=="function"?Number(K(A)):Xr,He=p.gravity,vt=0,Qe=1200,Mn=0;Array.isArray(He)?(vt=oe(He[0],0),Qe=oe(He[1],1200),Mn=oe(He[2],0)):He!==void 0&&(Qe=oe(He,1200));let vn=oe(j.rate,150),kn=oe(p.drag,.05),mn=0,fn=200,Fn=1;p.noise&&(mn=oe(p.noise.strength,0),fn=p.noise.scale??200,Fn=p.noise.speed??1);let $n=[];if(Array.isArray(p.attractors))for(let K of p.attractors)$n.push({x:oe(K.x,0),y:oe(K.y,0),z:oe(K.z,0),strength:oe(K.strength,0),radius:K.radius});let On;p.vortex&&(On={x:oe(p.vortex.x,0),y:oe(p.vortex.y,0),z:oe(p.vortex.z,0),axis:p.vortex.axis??[0,-1,0],swirl:oe(p.vortex.swirl,0),pull:oe(p.vortex.pull,0),axial:oe(p.vortex.axial,0),radius:p.vortex.radius??800});let pn;p.floor&&(pn={y:p.floor.y??500,bounce:p.floor.bounce??.3,friction:oe(p.floor.friction,1.5),heatGain:p.floor.heatGain??1,heatDecay:p.floor.heatDecay??.45});let k;return(j.x!==void 0||j.y!==void 0||j.z!==void 0)&&(k=[oe(j.x,0),oe(j.y,0),oe(j.z,0)]),{rate:vn,gravity:[vt,Qe,Mn],drag:kn,noise:{strength:mn,scale:fn,speed:Fn},attractors:$n,vortex:On,floor:pn,emitterPos:k}};if(R.swarm3dPipeline.advance(Pt,Zt,dn,h||30,an),Ie.length>0){let A=Pt.sliceCount;for(let ue=0;ue<Ie.length;ue++){let oe=Ie[ue],He=ue*A;for(let vt of oe.meshes){let Qe=vt.materialName?oe.materials[vt.materialName]:void 0,Mn={modelMatrix:Me,opacity:_e,colorTint:ye,transparent:!1,twoSided:l?.twoSided??r.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),material:l?.material??r.material??p.material??Qe?.shading??"lit",roughness:l?.roughness??r.roughness??p.roughness??Qe?.roughness??.35,specularIntensity:l?.specularIntensity??r.specularIntensity??p.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??p.ambientIntensity??1,metallic:l?.metallic??r.metallic??p.metallic??Qe?.metallic??.7,...Xn(l,r,Qe),instanceBuffer:Pt.instances,instanceCount:A,firstInstance:He};We.push({owner:r.id,kind:"mesh",mesh:vt,texture:Qe?await R.materialTexture(Qe):void 0,opts:Mn})}}if(tt&&tt.max>0){let ue=Ie[0],oe=Ie.length*A;for(let He of ue.meshes){let vt=He.materialName?ue.materials[He.materialName]:void 0,Qe={modelMatrix:Me,opacity:_e,colorTint:ye,transparent:!1,twoSided:!0,wireframe:!1,material:"lit",roughness:.2,specularIntensity:.8,ambientIntensity:1,metallic:.9,...Xn(l,r,vt),instanceBuffer:Pt.instances,instanceCount:tt.max,firstInstance:oe};We.push({owner:r.id,kind:"mesh",mesh:He,texture:vt?await R.materialTexture(vt):void 0,opts:Qe})}}}return{finalTex:Q,finalView:v}}let Nt,jt=l?.animationProgress??r.animationProgress??0,dt=l?.animationTime??r.animationTime??0,Kt=l?.animationSpeed??r.animationSpeed??1,Le=(r.animationName?Y.animations.find(p=>p.name===r.animationName):void 0)??Y.animations[0],Ut=0;Le&&Le.duration>0&&(Ut=jt>0?jt*Le.duration:dt+(M??0)/(h||30)*Kt,(r.loop??!0)&&(Ut%=Le.duration));let Ae=_.multiply(Me,Y.rootTransform??_.identity()),Vn=_.multiply(_.translate(Je-Re,Dt-Ve,0),Be),Dn=!!(r.fracture3d&&Zi(Y,r.fracture3d,M??0)),wn=r.fracture3d&&!Dn&&ji(Y,r.fracture3d,M??0,Vn,[$e,xt,Jt])||(Y.nodes?zi({model:Y,node:r,frame:M??0,fps:h||30,clip:Le,clipSec:Ut,sceneRoot:Ae,key:`${rt.key}:${r.id}`}):void 0),Wn=new Map,Fa=p=>{if(!wn)return{matrix:Ae};if(p.skin!==void 0){let ce=Wn.get(p.skin);return ce||(ce=gr(Y,p.skin,wn),Wn.set(p.skin,ce)),{matrix:Ae,joints:ce}}return p.node!==void 0?{matrix:_.multiply(Ae,wn[p.node])}:{matrix:Ae}};if(!wn&&Le&&Le.duration>0){let p=Ut;if(Y.skeleton&&Y.skeleton.bones.length>0){let ce=Y.skeleton.bones.length;Nt=new Float32Array(ce*16);for(let Se=0;Se<ce;Se++)Nt[Se*16]=1,Nt[Se*16+5]=1,Nt[Se*16+10]=1,Nt[Se*16+15]=1;for(let Se of Le.tracks){let Et=Y.skeleton.boneIndicesByName[Se.nodeName];if(Et!==void 0&&Et<ce){let le=Se.times,j=0;for(let wt=0;wt<le.length-1;wt++)if(p>=le[wt]&&p<=le[wt+1]){j=wt;break}let at=le[j]??0,st=le[j+1]??at,$t=st>at?(p-at)/(st-at):0;if(Se.translations){let wt=Se.translations[j*3]??0,Ft=Se.translations[j*3+1]??0,ve=Se.translations[j*3+2]??0,et=Se.translations[(j+1)*3]??wt,Yt=Se.translations[(j+1)*3+1]??Ft,Ye=Se.translations[(j+1)*3+2]??ve,U=wt+(et-wt)*$t,de=Ft+(Yt-Ft)*$t,Mt=ve+(Ye-ve)*$t,Xe=_.translate(U,de,Mt),Ie=Y.skeleton.bones[Et],je=Ie?_.multiply(Xe,Ie.inverseBindMatrix):Xe;Nt.set(je,Et*16)}}}}}for(let p of Y.meshes){if(Dn&&p.materialName===ti)continue;let ce=p.materialName?Y.materials[p.materialName]:void 0,Se=Fa(p),Et=Se.joints??Nt,le;se?ce?.diffuseColor?le=[ce.diffuseColor[0]*ye[0],ce.diffuseColor[1]*ye[1],ce.diffuseColor[2]*ye[2],(ce.diffuseColor[3]??1)*ye[3]]:le=ye:ce?.diffuseColor?le=ce.diffuseColor:le=[.8,.8,.85,1];let j=l?.audioDeform??r.audioDeform,at;if(j){let $t=(M??0)/(h||30),wt=$t*1e3,Ft=j.latentBuffer;if(!Ft&&j.audioBuffer&&(Ft=j.audioBuffer),!Ft){let ve=j.audioData;if(ve){let et=(r.id??"audio-mesh")+"-direct-audio",Yt=Ar.get(et);if(!Yt){let Ye=Array.isArray(ve)?ve:ve.channels,U=Array.isArray(ve)?48e3:ve.sampleRate,de=Math.max(10,Math.ceil((Ye[0]?.length??0)/U*(h||30))+10);Yt=new jr(Ye,U,h||30,de),Ar.set(et,Yt)}Ft=Yt.getGpuBuffer(e.device,M??0)}}if(!Ft&&j.audioTrackId){let ve=j.audioTrackId,et,Yt=Ye=>{for(let U of Ye){let de=U.operation;if(de){if(de.id===ve||de.inputHandleId===ve){et=de.inputHandleId||de.src||de.url;return}U.children&&Yt(U.children)}}};if(b.children&&Yt(b.children),!et&&(ve.endsWith(".mp3")||ve.endsWith(".wav")||ve.endsWith(".ogg"))&&(et=ve),et)try{let Ye=Ar.get(et);if(!Ye){let U=await ui(et);if(U&&U.channels.length>0){let de=U.sampleRate||48e3,Mt=U.channels[0]?.length??0,Xe=U.durationSec??Mt/de,Ie=Math.max(10,Math.ceil(Xe*(h||30))+10);Ye=new jr(U.channels,de,h||30,Ie),Ar.set(et,Ye)}}Ye&&(Ft=Ye.getGpuBuffer(e.device,M??0))}catch(Ye){console.warn("[webgpu-renderer] Failed to decode audio for deformWithAudio:",Ye)}}if(Ft){let ve=j.amplitudeMultiplier??1;if(typeof ve!="number"&&typeof ve?.get=="function"){let et={frame:M??0,fps:h||30,time:$t,duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)};ve=Number(ve.get(et))}else typeof ve!="number"&&typeof ve?.value=="number"&&(ve=ve.value);at={config:{...j,amplitudeMultiplier:Number.isFinite(ve)?ve:1},latentBuffer:Ft,timeMs:wt,sampleRate:48e3}}}let st={modelMatrix:Se.matrix,morphWeights:Gi(p.morphTargetNames,Yo(p,Le,Ut),l?.morphs??r.morphs,{frame:M??0,fps:h||30}),opacity:_e*(ce?.opacity??1),colorTint:le,transparent:ce?.alphaMode==="blend"||_e*(ce?.opacity??1)<1||le[3]<1||ws(p),twoSided:l?.twoSided??r.twoSided??ce?.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),isSkinned:!!(Et||p.jointIndices&&p.jointWeights),skinningMatrices:Et,material:l?.material??r.material??ce?.shading??"lit",shadeColor:ce?.shadeColor,alphaCutoff:ce?.alphaCutoff,textureWrap:ce?.textureWrap,textureFilter:ce?.textureFilter,shininess:l?.shininess??r.shininess??ce?.shininess??32,roughness:l?.roughness??r.roughness??ce?.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??1,metallic:l?.metallic??r.metallic??ce?.metallic,...Xn(l,r,ce),ior:l?.ior??r.ior??ce?.ior,dispersion:l?.dispersion??r.dispersion,thickness:l?.thickness??r.thickness,...ce?.thickness!==void 0?{worldThickness:ce.thickness*Ss(Se.matrix)}:{},audioDeform:at,wind:io(r.wind,Y,(M??0)/(h||30))};ce&&(st.maps=await R.materialMaps(ce)),We.push({owner:r.id,kind:"mesh",mesh:p,texture:ce?await R.materialTexture(ce):void 0,opts:st})}return{finalTex:Q,finalView:v}}let y=sr[r.id];if(!y)return kt?await bn(f.children??[],Q,v,F,E,pe,$,S,z,Ce,ft):void 0;let pt=r.x??0,q=r.y??0,It=l?.x??pt,ht=l?.y??q,Ue=0,Tt=0;if($){let R=y.x-$.x,D=y.y-$.y;Ue=R+(It-pt),Tt=D+(ht-q)}else Ue=y.x+(It-pt),Tt=y.y+(ht-q);let ct=l?.scale??r.scale??1,Vt=l?.scaleX??r.scaleX??1,Lt=l?.scaleY??r.scaleY??1,fe=l?.rotation??r.rotation??0,we=(l?.opacity??r.opacity??1)*E,Ne=l?.animators??r.animators,Ee=be==="text"&&!!(r.pathOptions||l?.pathOptions),g=be==="text"&&Array.isArray(Ne)&&Ne.length>0,ie=be==="text"&&Array.isArray(Ne)&&Ne.some(R=>{let D=R;return D?.props?.formation!==void 0||D?.formation!==void 0}),Z=0,ae=0;if(ie){let R=0,D=0;for(let Y of Ne){let J=Y,he=J?.props?.formation??J?.formation;he&&(typeof he.radius=="number"&&(R=Math.max(R,he.radius)),typeof he.pitch=="number"&&(D=Math.max(D,he.pitch)))}Z=Math.max(160,Math.ceil(R+100)),ae=Math.max(100,Math.ceil(R+D*15+100))}else!Ee&&g&&(Z=Math.max(80,Math.ceil(y.width*.2)),ae=Math.max(50,Math.ceil(y.height*.5)));if(be==="text"&&!Ee){let R=xs(l,r);Z=Math.max(Z,R),ae=Math.max(ae,R)}let T=Ee?S:y.width+Z*2,w=Ee?z:y.height+ae*2;Ue-=Z,Tt-=ae;let De=Ee?(r.anchorX??.5)*y.width/T:(Z+(r.anchorX??.5)*y.width)/T,qe=Ee?(r.anchorY??.5)*y.height/w:(ae+(r.anchorY??.5)*y.height)/w,re=ea(ta({x:Ue,y:Tt,width:T,height:w,rotation:fe,scale:ct,scaleX:Vt,scaleY:Lt,anchorX:De,anchorY:qe})),Oe=pe.multiply(re),lt=r.blendMode||"normal",N=Q,Pe=v,rn=so(l,r),ur=l?.rotateX??r.rotateX??0,In=l?.rotateY??r.rotateY??0,ko=l?.rotateZ??r.rotateZ??0,Da=l?.translateZ??r.translateZ??0,Pa=l?.perspective??r.perspective??0,Ra=l?.perspectiveOriginX??r.perspectiveOriginX??De,Ca=l?.perspectiveOriginY??r.perspectiveOriginY??qe,Aa=l?.backfaceVisibility??r.backfaceVisibility??"visible",xn=null;if(rn){let R=ze.buildLayer3DMatrix({x:Ue,y:Tt,width:T,height:w,rotateXDeg:ur,rotateYDeg:In,rotateZDeg:ko!==0?ko:fe,scaleX:Vt*ct,scaleY:Lt*ct,perspectivePx:Pa,originXRatio:Ra,originYRatio:Ca,translateZPx:Da}),D=ze.projectRectangleCorners(R,T,w);if(pe.isIdentity||(D={topLeft:pe.transformPoint(new DOMPoint(D.topLeft.x,D.topLeft.y)),topRight:pe.transformPoint(new DOMPoint(D.topRight.x,D.topRight.y)),bottomLeft:pe.transformPoint(new DOMPoint(D.bottomLeft.x,D.bottomLeft.y)),bottomRight:pe.transformPoint(new DOMPoint(D.bottomRight.x,D.bottomRight.y))}),Aa==="hidden"&&ze.computeSignedArea(D)<0)return;xn=D}if(kt){if(r.transformStyle==="preserve-3d"&&ge){let I=_.identity(),Me=Ce!==null?l?.x??r.x??0:l?.x??r.x??Ue+T*.5,se=Ce!==null?l?.y??r.y??0:l?.y??r.y??Tt+w*.5,ye=l?.z??r.z??0;I=_.multiply(I,_.translate(Me,se,ye));let _e=(l?.rotateX??r.rotateX??0)*Math.PI/180,Nt=(l?.rotateY??r.rotateY??0)*Math.PI/180,jt=((l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe)*(Math.PI/180);jt!==0&&(I=_.multiply(I,_.rotateZ(jt))),Nt!==0&&(I=_.multiply(I,_.rotateY(Nt))),_e!==0&&(I=_.multiply(I,_.rotateX(_e)));let dt=(l?.scaleX??r.scaleX??1)*ct,Kt=(l?.scaleY??r.scaleY??1)*ct,Le=(l?.scaleZ??r.scaleZ??1)*ct;if((dt!==1||Kt!==1||Le!==1)&&(I=_.multiply(I,_.scale(dt,Kt,Le))),Ce&&(I=_.multiply(Ce,I)),f.children&&f.children.length>0){let Ut=await bn(f.children,N,Pe,F,we,new DOMMatrix,null,T,w,I,!1);N=Ut.finalTex,Pe=Ut.finalView}return{finalTex:N,finalView:Pe}}if(ge){let I=Math.max(1,Math.ceil(T)),Me=Math.max(1,Math.ceil(w)),se=[N,i,...F,...Zn()],ye=e.renderer.getTemporaryTexture(I,Me,se),_e=ye.createView();e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"clear").end();let jt=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let Ae=e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawRect(Ae,{x:0,y:0,width:T,height:w},r.background,0,{opacity:1}),Ae.end()}let dt=ye,Kt=_e;if(f.children&&f.children.length>0){let Ae=await bn(f.children,ye,_e,[ye,...se],1,new DOMMatrix,y,I,Me,null,!1);dt=Ae.finalTex,Kt=Ae.finalView}let Le=!ge&&r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,jt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[dt,...se]):null;if(Le){let Ae=e.renderer.beginFrame(a,Kt,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawTexture(Ae,Le.borderTex,{x:Le.ox,y:Le.oy,width:Le.ow,height:Le.oh},{opacity:1}),Ae.end()}let Ut={position:[Ue+T*.5,Tt+w*.5,l?.z??r.z??0],width:T,height:w,textureExtent:[T/dt.width,w/dt.height],rotation:[l?.rotateX??r.rotateX??0,l?.rotateY??r.rotateY??0,(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe],scale:[ct*Vt,ct*Lt,l?.scaleZ??r.scaleZ??1],anchor:[r.anchorX??.5,r.anchorY??.5],borderRadius:jt,borderWidth:r.borderWidth,borderColor:r.borderColor,opacity:we,twoSided:l?.twoSided??r.twoSided??!0,material:l?.material??r.material,shininess:l?.shininess??r.shininess,roughness:l?.roughness??r.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity,ambientIntensity:l?.ambientIntensity??r.ambientIntensity,metallic:l?.metallic??r.metallic,...Xn(l,r),...xo(r.id,Ue,Tt,T,w)};if(Ce){let Ae=gn(e.device,e.renderer.format??"rgba8unorm",ee);Ut.modelMatrix=_.multiply(Ce,Ae.quadModelMatrix({...Ut,position:[l?.x??r.x??0,l?.y??r.y??0,l?.z??r.z??0]}))}return We.push({owner:r.id,kind:"quad",texture:dt,opts:Ut}),{finalTex:N,finalView:Pe}}if(rn&&xn){let I=Math.max(1,Math.ceil(T)),Me=Math.max(1,Math.ceil(w)),se=[N,i,...F],ye=e.renderer.getTemporaryTexture(I,Me,se),_e=ye.createView();e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"clear").end();let jt=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let Ae=e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawRect(Ae,{x:0,y:0,width:T,height:w},r.background,jt,{opacity:1}),Ae.end()}let dt=ye,Kt=_e;if(f.children&&f.children.length>0){let Ae=await bn(f.children,ye,_e,[ye,...se],1,new DOMMatrix,y,I,Me,null,!1);dt=Ae.finalTex,Kt=Ae.finalView}let Le=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,jt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[dt,...se]):null;if(Le){let Ae=e.renderer.beginFrame(a,Kt,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawTexture(Ae,Le.borderTex,{x:Le.ox,y:Le.oy,width:Le.ow,height:Le.oh},{opacity:1}),Ae.end()}let Ut=l?.motionBlurShutter??r.motionBlurShutter??0;if(Ut>0&&h&&M!==void 0){Tn(rt,M-1,h);let Ae=H?ot[H]:void 0,Vn=Ae?.x??pt,Dn=Ae?.y??q;Tn(rt,M,h);let wn=It-Vn,Wn=ht-Dn;Math.hypot(wn,Wn)>.5&&(dt=e.renderer.applyMotionBlur(a,dt,wn,Wn,Ut,16,[N,i,...F]),Kt=dt.createView())}if(lt==="normal"||lt==="source-over")Br(e,a,Pe,dt,xn,S,z,we);else{let Ae=[N,i,dt,...F];Le&&Ae.push(Le.borderTex);let Vn=e.renderer.getTemporaryTexture(S,z,Ae),Dn=Vn.createView();e.renderer.beginFrame(a,Dn,{r:0,g:0,b:0,a:0},S,z,"clear").end(),Br(e,a,Dn,dt,xn,S,z,we),N=e.renderer.composite(a,N,Vn,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}}let R=(l?.overflow??r.overflow)==="hidden",D=R?ha(Oe,T,w):null,Y=R?Math.min(l?.borderRadius??r.borderRadius??0,T/2,w/2):0;if((be==="flex"||be==="block")&&(!Array.isArray(r.effects)||r.effects.length===0)&&Y<=0&&!Rn(be,r.background)&&we===1&<==="normal"&&!r.borderWidth&&!r.borderColor&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)){D&&e.renderer.pushScissorIntersect(D);let I=await bn(f.children??[],N,Pe,F,E,Oe,y,S,z,null,ft);return D&&e.renderer.popScissor(),I}if((!f.children||f.children.length===0)&&(!Array.isArray(r.effects)||r.effects.length===0)&<==="normal"&&!(l?.motionBlurShutter??r.motionBlurShutter)&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)){if(we<=0)return{finalTex:N,finalView:Pe};let I=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2),Me=Rn(be,r.background),se=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,I,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[N,i,...F],lr(Oe,T,w)):null;if(Me||se){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),Me&&e.renderer.drawRect(ye,{x:0,y:0,width:T,height:w},r.background,I,{opacity:we}),se&&e.renderer.drawTexture(ye,se.borderTex,{x:se.ox,y:se.oy,width:se.ow,height:se.oh},{opacity:we}),e.renderer.popTransform(),ye.end()}return{finalTex:N,finalView:Pe}}if(f.children&&f.children.length>0&&(!Array.isArray(r.effects)||r.effects.length===0)&&we===1&<==="normal"&&!(l?.motionBlurShutter??r.motionBlurShutter)&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)&&(Y<=0||Ta(f.children,y,Y))){let I=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawRect(ye,{x:0,y:0,width:T,height:w},r.background,I,{opacity:1}),e.renderer.popTransform(),ye.end()}D&&e.renderer.pushScissorIntersect(D);let Me=await bn(f.children,N,Pe,F,E,Oe,y,S,z,null,ft);D&&e.renderer.popScissor(),N=Me.finalTex,Pe=Me.finalView;let se=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,I,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[N,i,...F],lr(Oe,T,w)):null;if(se){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(ye,se.borderTex,{x:se.ox,y:se.oy,width:se.ow,height:se.oh},{opacity:1}),e.renderer.popTransform(),ye.end()}return{finalTex:N,finalView:Pe}}let J=[N,i,...F],he=e.renderer.getTemporaryTexture(S,z,J),Je=he.createView();e.renderer.beginFrame(a,Je,{r:0,g:0,b:0,a:0},S,z,"clear").end();let zt=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let I=e.renderer.beginFrame(a,Je,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawRect(I,{x:0,y:0,width:T,height:w},r.background,zt,{opacity:we}),e.renderer.popTransform(),I.end()}let Re=he,Ve=Je;if(f.children&&f.children.length>0){D&&e.renderer.pushScissorIntersect(D);let I=await bn(f.children,he,Je,[he,...J],we,Oe,y,S,z,null,!1);D&&e.renderer.popScissor(),Re=I.finalTex,Ve=I.finalView}if(Y>0){let I=e.renderer.getTemporaryTexture(S,z,[Re,...J]),Me=e.renderer.beginFrame(a,I.createView(),{r:0,g:0,b:0,a:0},S,z,"clear");e.renderer.pushTransform(Oe),e.renderer.drawRect(Me,{x:0,y:0,width:T,height:w},"#ffffff",Y),e.renderer.popTransform(),Me.end(),Re=e.renderer.composite(a,Re,I,"mask-in",[Re,I,...J]),Ve=Re.createView()}let it=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,zt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[Re,...J],lr(Oe,T,w)):null;if(it){let I=e.renderer.beginFrame(a,Ve,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(I,it.borderTex,{x:it.ox,y:it.oy,width:it.ow,height:it.oh},{opacity:we}),e.renderer.popTransform(),I.end()}let Ze=l?.motionBlurShutter??r.motionBlurShutter??0;if(Ze>0&&h&&M!==void 0){Tn(rt,M-1,h);let I=H?ot[H]:void 0,Me=I?.x??pt,se=I?.y??q;Tn(rt,M,h);let ye=It-Me,_e=ht-se;Math.hypot(ye,_e)>.5&&(Re=e.renderer.applyMotionBlur(a,Re,ye,_e,Ze,16,[N,i,...F]),Ve=Re.createView())}let Ke=Array.isArray(r.effects)?r.effects.find(I=>I?.op==="TemporalDeflicker"||I?.op==="Deflicker"||I?.constructor?.name==="TemporalDeflicker"):void 0,bt=l?.deflicker??r.deflicker??Ke,$e=typeof bt=="object"&&bt!==null?bt:void 0;if($e){let I=fa(e.device,r.id||`layer_${x}`);M===0&&I.reset(),Re=I.execute(Re,$e,a),Ve=Re.createView()}let xt=Array.isArray(r.effects)?r.effects.find(I=>I?.op==="Relight3D"||I?.constructor?.name==="Relight3D"):void 0,Jt=l?.relighting??r.relighting??(typeof r.relight=="object"?r.relight:void 0)??xt,Be=typeof Jt=="object"&&Jt!==null?Jt:void 0;if(Be){let I=co(e.device,e.renderer.format??"rgba8unorm"),Me=gn(e.device,e.renderer.format??"rgba8unorm",ee),se=pa(Be,An,y,te,h??24),ye=Me.getOrCreateLightsBuffer(se),_e=e.renderer.getTemporaryTexture(S,z,[Re,N,i,...F]),Nt=_e.createView(),jt=Be.normalTexture??Be.normalMap;I.execute(a,Nt,Re,jt,ye,{viewportWidth:S,viewportHeight:z,layerX:0,layerY:0,roughness:Rt(l?.roughness??l?.relightRoughness??Be.specularRoughness??Be.roughness,.35,te,h??24),specularStrength:Rt(l?.specularStrength??l?.relightSpecularStrength??Be.specularStrength,.7,te,h??24),metallic:Rt(l?.metallic??l?.relightMetallic??Be.metallic,0,te,h??24),ambientIntensity:Rt(l?.ambientIntensity??l?.relightAmbientIntensity??Be.ambientIntensity,.15,te,h??24),depthScale:Rt(l?.depthScale??l?.relightDepthScale??Be.depthScale,1,te,h??24),opacity:1},"clear"),Re=_e,Ve=Nt}if(Array.isArray(r.effects)&&r.effects.length>0){let I=R?Ds(r.effects):null,Me=I===null?null:Bs(As(ha(Oe,T,w),I),S,z),se=await Is(Me,r.effects,Re,S,z,e,a,d,m,[N,i,...F],M,te,h??24,L,r.id??`container_${x}`);Re=se.texture,Ve=se.view}let un=[N,i,...F];return it&&un.push(it.borderTex),N=e.renderer.composite(a,N,Re,lt,un),Pe=N.createView(),{finalTex:N,finalView:Pe}}if(!(T>0&&w>0))return{finalTex:N,finalView:Pe};let dr=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2),Ba=Array.isArray(r.effects)?r.effects.find(R=>R?.op==="TemporalDeflicker"||R?.constructor?.name==="TemporalDeflicker"):void 0,mr=l?.deflicker??r.deflicker??Ba,Ia=Array.isArray(r.effects)?r.effects.find(R=>R?.op==="Relight3D"||R?.constructor?.name==="Relight3D"):void 0,zr=l?.relighting??r.relighting??(typeof r.relight=="object"?r.relight:void 0)??Ia,qt=typeof zr=="object"&&zr!==null?zr:void 0,_n=l?.motionBlurShutter??r.motionBlurShutter??0,To=be!=="media"&&Array.isArray(r.effects)&&r.effects.length>0,St=ge||rn||mr||be==="media"&&!Rs(f.children?.[0])?1:lr(Oe,T,w,To?Ps(r.effects):void 0),Nr=new DOMMatrix([St,0,0,St,0,0]),gt=Math.ceil(T*St),yt=Math.ceil(w*St),So=e.renderer.suspendScissors?.()??[],Sn=e.renderer.getTemporaryTexture(gt,yt,[N,i,...F]),fr=Sn.createView();e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"clear").end();let cn,Ur=!1;if(be==="media")cn=f.children?.[0],Ur=cn?.operation?.dataType==="Caption"||r.dataType==="Caption"||cn?.operation?.srtText!==void 0;else if(be==="text"){let R=l?.spans??r.spans,D=h??24,Y=R?.length?_o(R,{frame:te,fps:D,time:te/D,duration:At/1e3,durationMs:At,progress:At>0?Math.min(1,te/D*1e3/At):0,deltaTime:1/D}):void 0,J=Y?jo(Y):r.text??"",he=J,Je=Ne;Array.isArray(Ne)&&Ne.length>0&&(Je=Ne.map((Ve,it)=>{let Ze={...Ve,transform:{...Ve.transform??{}}};if(it===0){let Ke=typeof l?.offset=="number"?l.offset:typeof l?.animatorOffset=="number"?l.animatorOffset:void 0,bt=typeof l?.rangeStart=="number"?l.rangeStart:typeof l?.animatorRangeStart=="number"?l.animatorRangeStart:void 0,$e=typeof l?.rangeEnd=="number"?l.rangeEnd:typeof l?.animatorRangeEnd=="number"?l.animatorRangeEnd:void 0;Ke!==void 0&&(Ze.offset=Ke),bt!==void 0&&(Ze.rangeStart=bt),$e!==void 0&&(Ze.rangeEnd=$e),Array.isArray(Ze.selectors)&&(Ze.selectors=Ze.selectors.map(xt=>xt.type==="range"?{...xt,...Ke!==void 0?{offset:Ke}:{},...bt!==void 0?{start:bt}:{},...$e!==void 0?{end:$e}:{}}:xt))}return Ze}));let Dt=!!(r.typewriter||l?.typewriter),zt=r.animation?.tracks?.find(Ve=>Ve.prop==="text");if(!Dt&&(zt!==void 0||typeof l?.text=="number")&&J.length>0){let Ve=typeof l?.text=="number"?Math.max(0,Math.min(1,l.text)):1,it=typeof l?.text=="number"&&l.text>1.0001;if(Ve>=1&&!it)he=J;else if(Ve<=0)he="";else{let Ze=zt?.keyframes?.find($e=>$e.presetType)?.presetType??"typewriter",Ke=typeof l?.text=="number"?l.text:null,bt=Ke!==null&&Ke>1.0001;if(Ze==="word-reveal"||Ze==="karaoke"){let $e=J.split(/(\s+)/),xt=[];$e.forEach((Be,un)=>{Be.trim().length>0&&xt.push(un)});let Jt=bt&&Ke!==null?Math.min(xt.length,Math.round(Ke)):Math.round(xt.length*Ve);if(Jt===0)he="";else{let Be=xt[Math.min(xt.length-1,Jt-1)];he=$e.slice(0,Be+1).join("")}}else if(Ze==="line-reveal"){let $e=J.split(`
|
|
205
|
+
`),xt=bt&&Ke!==null?Math.min($e.length,Math.round(Ke)):Math.round($e.length*Ve);he=$e.slice(0,Math.max(0,xt)).join(`
|
|
206
|
+
`)}else{let $e=bt&&Ke!==null?Math.min(J.length,Math.round(Ke)):Math.round(J.length*Ve);he=J.slice(0,$e)}}}cn={metadata:{},operation:{op:"text",text:he,spans:Y&&he!==J?Qo(Y,he):Y,animators:Je,pathOptions:l?.pathOptions??r.pathOptions,typewriter:l?.typewriter??r.typewriter,marquee:l?.marquee??r.marquee,textProgress:typeof l?.text=="number"?l.text:void 0,firstMargin:l?.firstMargin??r.firstMargin,lastMargin:l?.lastMargin??r.lastMargin,baselineShift:l?.baselineShift??r.baselineShift,signals:b?.operation?.signals??b?.signals,fontSize:l?.fontSize??r.fontSize,fontFamily:r.fontFamily,fontStyle:r.fontStyle,fontWeight:r.fontWeight,fontVariations:r.fontVariations,fill:l?.fill??l?.color??r.fill,align:r.align,direction:r.direction,verticalAlign:r.verticalAlign,letterSpacing:l?.letterSpacing??r.letterSpacing,lineHeight:r.lineHeight,padding:r.padding,textBackgroundColor:l?.textBackgroundColor??l?.background??r.background,borderRadius:r.borderRadius,stroke:l?.stroke??l?.strokeColor??r.stroke,strokeWidth:l?.strokeWidth??r.strokeWidth,strokeAlign:r.strokeAlign,textShadow:r.textShadow,shadows:r.shadows,x:Ee?0:Z,y:Ee?0:ae,width:Ee?S:r.width!==void 0?y.width:void 0,height:Ee?z:r.height!==void 0?y.height:void 0},children:[]}}let ln=null,Yr=!0;if(cn){let D=Jn(cn)?.durationMs??At,J=Math.max(1,Math.round(D/1e3*(h??24)))/(h??24)*1e3,he=cn.operation?.op==="Compositor"&&cn.operation?.dataType==="Image",Je=ge&&be==="text",Dt=e.renderer.rasterDrawCount;Je&&e.renderer.slugPipeline.beginCapture(),e.renderer.pushTransform(Nr);try{await m(cn,{containerWidth:T,containerHeight:w,renderId:`${d.renderId}-l${x}`,durationMs:J,opacity:1,fps:h,...typeof r.dpr=="number"&&{dpr:r.dpr},excludeTextures:[N,i,...F],isVideoMode:L&&!he,...L&&r.timeRemap&&be==="media"&&r.dataType==="Video"&&{sourceTimeSec:Po(r.timeRemap,Math.max(0,M-(r.startFrame??0)),h??24)},...L&&{frame:r.timeRemap&&be==="media"&&r.dataType==="Video"?Math.max(0,M-(r.startFrame??0)):Math.max(0,M-(r.startFrame??0))+(r.mediaStartFrame??r.trimStartFrames??(r.trimStartSec!=null?Math.round(r.trimStartSec*(h??24)):0))},compositionFrame:te,...Ur&&{fontFamily:r.fontFamily,fontSize:l?.fontSize??r.fontSize,fontWeight:r.fontWeight,fontStyle:r.fontStyle,fill:r.fill,color:r.fill,align:r.align??"center",direction:r.direction,verticalAlign:r.verticalAlign??r.textAlignVertical,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing,textBackgroundColor:r.background??r.textBackgroundColor,borderRadius:r.borderRadius??r.strokeRadius,strokeRadius:r.strokeRadius??r.borderRadius,stroke:r.stroke,strokeWidth:r.strokeWidth,shadows:r.shadows,padding:r.padding,maxWidth:r.maxWidth??T}},fr,Sn,gt,yt)}finally{e.renderer.popTransform(),Je&&(ln=e.renderer.slugPipeline.endCapture())}Yr=e.renderer.rasterDrawCount!==Dt}else if(be==="shape"){let R=e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"load"),Y={shapeType:r.shapeType??r.shape??"rect",width:T,height:w,path:l?.d??r.d??r.path,cornerRadius:l?.cornerRadius??r.cornerRadius??r.borderRadius??r.radius??0,starPoints:r.starPoints??5,starInnerRadiusRatio:l?.starInnerRadiusRatio??r.starInnerRadiusRatio??.5,polygonSides:r.polygonSides??5},J=r.fillType??"solid",he=l?.fillColor??l?.fill??r.fillColor??r.fill??"#38bdf8",Je=l?.gradientEndColor??r.gradientEndColor??r.fillColor2??"#9333ea",Dt=r.fillStartX,zt=r.fillStartY,Re=r.fillEndX,Ve=r.fillEndY;if(J==="linear"&&Dt===void 0&&r.gradientAngle!==void 0){let on=r.gradientAngle*Math.PI/180,I=T/2,Me=w/2,se=(Math.abs(T*Math.cos(on))+Math.abs(w*Math.sin(on)))/2;Dt=I-Math.cos(on)*se,zt=Me-Math.sin(on)*se,Re=I+Math.cos(on)*se,Ve=Me+Math.sin(on)*se}let it={type:J,color:he,color2:Je,startX:Dt,startY:zt,endX:Re,endY:Ve,cx:r.fillCx,cy:r.fillCy,radius:r.fillRadius},Ze=l?.strokeWidth??r.strokeWidth??0,Ke=l?.strokeColor??r.strokeColor??r.stroke??"#ffffff",bt=r.strokeLineCap??"round",$e=Jo(r.strokeDashArray),xt=l?.strokeDashOffset??r.strokeDashOffset??0,Jt=l?.trimStart??r.trimStart??0,Be=l?.trimEnd??r.trimEnd??1,un=l?.trimOffset??r.trimOffset??0;e.renderer.pushTransform(Nr),e.renderer.drawShape(R,Y,it,Ze>0?{color:Ke,width:Ze,cap:bt,trimStart:Jt,trimEnd:Be,trimOffset:un,dashArray:$e,dashOffset:xt}:void 0),e.renderer.popTransform(),R.end()}if(ln&&ln.length>0&&(mr||qt||_n>0||To)){let R=e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.slugPipeline.drawBatches(R,ln,gt,yt),R.end(),ln=null,Yr=!0}let ut=Sn;if(!ge&&dr>0&&!Ur&&be!=="shape"){let R=e.renderer.getTemporaryTexture(gt,yt,[Sn,N,i,...F]),D=R.createView();e.renderer.beginFrame(a,D,{r:0,g:0,b:0,a:0},gt,yt,"clear").end();let J=e.renderer.beginFrame(a,D,{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.pushTransform(Nr),e.renderer.drawRect(J,{x:0,y:0,width:T,height:w},{r:1,g:1,b:1,a:1},dr),e.renderer.popTransform(),J.end(),ut=e.renderer.composite(a,Sn,R,"mask-in",[N,i,...F])}if(mr){let R=fa(e.device,r.id||`layer_${x}`);M===0&&R.reset(),ut=R.execute(ut,mr,a)}if(qt){let R=co(e.device,e.renderer.format??"rgba8unorm"),D=gn(e.device,e.renderer.format??"rgba8unorm",ee),Y=gt/St,J=yt/St,he=pa(qt,An,{x:It,y:ht,width:Y,height:J},te,h??24),Je=D.getOrCreateLightsBuffer(he),Dt=e.renderer.getTemporaryTexture(gt,yt,[ut,N,i,...F]),zt=Dt.createView(),Re=qt.normalTexture??qt.normalMap;R.execute(a,zt,ut,Re,Je,{viewportWidth:Y,viewportHeight:J,layerX:It,layerY:ht,roughness:Rt(l?.roughness??l?.relightRoughness??qt.specularRoughness??qt.roughness,.35,te,h??24),specularStrength:Rt(l?.specularStrength??l?.relightSpecularStrength??qt.specularStrength,.7,te,h??24),metallic:Rt(l?.metallic??l?.relightMetallic??qt.metallic,0,te,h??24),ambientIntensity:Rt(l?.ambientIntensity??l?.relightAmbientIntensity??qt.ambientIntensity,.15,te,h??24),depthScale:Rt(l?.depthScale??l?.relightDepthScale??qt.depthScale,1,te,h??24),opacity:1},"clear"),ut=Dt}let jn=0,Qn=0;if(_n>0&&h&&M!==void 0){Tn(rt,M-1,h);let R=H?ot[H]:void 0,D=R?.x??pt,Y=R?.y??q;Tn(rt,M,h);let J=It-D,he=ht-Y;if(Math.hypot(J,he)>.5){if(!ge&&!(rn&&xn)){let zt=_n/360,Re=e.device.limits.maxTextureDimension2D,Ve=Math.min(Math.ceil(Math.abs(J)*St*zt),Math.max(0,Math.floor((Re-gt)/2))),it=Math.min(Math.ceil(Math.abs(he)*St*zt),Math.max(0,Math.floor((Re-yt)/2)));jn=Ve/St,Qn=it/St;let Ze=e.renderer.getTemporaryTexture(gt+Ve*2,yt+it*2,[ut,N,i,...F]),Ke=e.renderer.beginFrame(a,Ze.createView(),{r:0,g:0,b:0,a:0},Ze.width,Ze.height,"clear");e.renderer.drawTexture(Ke,ut,{x:Ve,y:it,width:gt,height:yt},{opacity:1}),Ke.end(),ut=Ze}let Je=Math.hypot(J,he)*St*(_n/360)*2,Dt=Math.min(128,Math.max(16,Math.ceil(Je/2)));ut=e.renderer.applyMotionBlur(a,ut,J*St,he*St,_n,Dt,[N,i,...F])}}be!=="media"&&Array.isArray(r.effects)&&r.effects.length>0&&(ut=(await ga(r.effects,ut,gt,yt,e,a,d,m,[Sn,N,i,...F],M,te,h??24,L,r.id??`leaf_${x}`,St)).texture);let Va=[Sn,ut,N,i,...F],Ge=!ge&&r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,dr,r.borderWidth,r.borderColor,r.strokeAlign??"inside",Va,St):null;if(So.length>0&&e.renderer.resumeScissors?.(So),ge){let R=ut;if(Ge){let J=e.renderer.beginFrame(a,R.createView(),{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.drawTexture(J,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:1}),J.end()}let D={position:[Ue+T*.5,Tt+w*.5,l?.z??r.z??0],width:T,height:w,textureExtent:[T*St/gt,w*St/yt],rotation:[l?.rotateX??r.rotateX??0,l?.rotateY??r.rotateY??0,(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe],scale:[ct*Vt,ct*Lt,l?.scaleZ??r.scaleZ??1],anchor:[r.anchorX??.5,r.anchorY??.5],borderRadius:dr,borderWidth:r.borderWidth,borderColor:r.borderColor,opacity:we,twoSided:l?.twoSided??r.twoSided??!0,material:l?.material??r.material,shininess:l?.shininess??r.shininess,roughness:l?.roughness??r.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity,ambientIntensity:l?.ambientIntensity??r.ambientIntensity,metallic:l?.metallic??r.metallic,...Xn(l,r),...xo(r.id,Ue,Tt,T,w)};if(Ce){let J=gn(e.device,e.renderer.format??"rgba8unorm",ee);D.modelMatrix=_.multiply(Ce,J.quadModelMatrix({...D,position:[l?.x??r.x??0,l?.y??r.y??0,l?.z??r.z??0]}))}let Y=Yr||!!(D.borderWidth&&D.borderWidth>0&&D.borderColor);return(!ln||Y)&&We.push({owner:r.id,kind:"quad",texture:R,opts:D}),ln&&ln.length>0&&We.push({owner:r.id,kind:"slug",batches:ln,opts:D,stackBase:Y?1:0}),{finalTex:N,finalView:Pe}}if(rn&&xn){let R=ut;if(Ge){let D=e.renderer.beginFrame(a,R.createView(),{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.drawTexture(D,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:1}),D.end()}if(lt==="normal"||lt==="source-over")Br(e,a,Pe,R,xn,S,z,we);else{let D=[N,i,R,...F];Ge&&D.push(Ge.borderTex);let Y=e.renderer.getTemporaryTexture(S,z,D),J=Y.createView();e.renderer.beginFrame(a,J,{r:0,g:0,b:0,a:0},S,z,"clear").end(),Br(e,a,J,R,xn,S,z,we),N=e.renderer.composite(a,N,Y,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}}if(lt==="normal"||lt==="source-over"){let R=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(R,ut,{x:-jn,y:-Qn,width:T+jn*2,height:w+Qn*2},{opacity:we}),Ge&&e.renderer.drawTexture(R,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:we}),e.renderer.popTransform(),R.end()}else{let R=[ut,N,i,...F];Ge&&R.push(Ge.borderTex);let D=e.renderer.getTemporaryTexture(S,z,R),Y=D.createView();e.renderer.beginFrame(a,Y,{r:0,g:0,b:0,a:0},S,z,"clear").end();let he=e.renderer.beginFrame(a,Y,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(he,ut,{x:-jn,y:-Qn,width:T+jn*2,height:w+Qn*2},{opacity:we}),Ge&&e.renderer.drawTexture(he,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:we}),e.renderer.popTransform(),he.end(),N=e.renderer.composite(a,N,D,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}},Sa=[Te,i,...d.excludeTextures||[]];uo=(await bn(b.children??[],Te,mt,Sa,1,new DOMMatrix,null,O,P,null,!0)).finalTex,sn&&me&&sn.recordFrame(M,me),e.renderer.popTransform(),e.renderer.popScissor();let vo=e.renderer.beginFrame(a,o,{r:0,g:0,b:0,a:0},s,c,"load");e.renderer.drawTexture(vo,uo,{x:0,y:0,width:d.containerWidth??s,height:d.containerHeight??c},{opacity:G}),t.pass=vo}}};function Vs(t){return zn(t.children).some(e=>{let n=e.operation;return n?.kind==="camera"&&!!n.motionBlur})}async function Fs(t,e){let{ctx:n,encoder:o,props:i,targetTexture:s,targetWidth:c,targetHeight:a}=t,d=[...i.excludeTextures??[],s],m=n.renderer.getTemporaryTexture(c,a,d),b=m.createView(),h={...t,targetView:b,targetTexture:m,pass:n.renderer.beginFrame(o,b,{r:0,g:0,b:0,a:0},c,a,"clear"),props:{...i,frame:e,...i.compositionFrame!==void 0&&{compositionFrame:i.compositionFrame-1},motionHistoryOnly:!0,excludeTextures:d}};await lo(h),h.pass.end()}var Os=2;function En(t,e,n,o,i,s,c,a,d,m=1){if(n<=0||o<=0||!c||!s||s<=0)return null;let b=0,h=0,C=n,V=o,X=i,ee=i;if(a==="inside"?(b=0,h=0,C=n,V=o,X=i,ee=Math.max(0,i-s)):a==="outside"?(b=-s,h=-s,C=n+2*s,V=o+2*s,X=i+s,ee=i):(b=-s/2,h=-s/2,C=n+s,V=o+s,X=i+s/2,ee=Math.max(0,i-s/2)),i<=0&&(X=0,ee=0),C<=0||V<=0)return null;let W=Os,B=Math.ceil((C+2*W)*m),O=Math.ceil((V+2*W)*m),P=new DOMMatrix([m,0,0,m,0,0]),G=t.renderer.getTemporaryTexture(B,O,d),L=G.createView();t.renderer.beginFrame(e,L,{r:0,g:0,b:0,a:0},B,O,"clear").end();let M=t.renderer.beginFrame(e,L,{r:0,g:0,b:0,a:0},B,O,"load");t.renderer.pushTransform(P),t.renderer.drawRect(M,{x:W,y:W,width:C,height:V},c,X),t.renderer.popTransform(),M.end();let te=C-2*s,ne=V-2*s;if(te>0&&ne>0){let Te=t.renderer.getTemporaryTexture(B,O,[G,...d]),mt=Te.createView();t.renderer.beginFrame(e,mt,{r:0,g:0,b:0,a:0},B,O,"clear").end();let Wt=t.renderer.beginFrame(e,mt,{r:0,g:0,b:0,a:0},B,O,"load");return t.renderer.pushTransform(P),t.renderer.drawRect(Wt,{x:W+s,y:W+s,width:te,height:ne},{r:1,g:1,b:1,a:1},ee),t.renderer.popTransform(),Wt.end(),{borderTex:t.renderer.composite(e,G,Te,"mask-out",d),ox:b-W,oy:h-W,ow:B/m,oh:O/m}}return{borderTex:G,ox:b-W,oy:h-W,ow:B/m,oh:O/m}}ke();var Gs=async(t,e,n,o)=>{let i=n.operation;if(!i)return;let s=t.length;if(s===0)return;let c=t[0].length;if(c===0)return;if(i.op==="Compositor"){let G=_r(i.volume,1);if(G===1)return;for(let L=0;L<s;L++){let u=t[L];for(let M=0;M<u.length;M++)u[M]*=G}return}let a=_r(i.volume,1),d=Do(i.muted,!1),m=i.animation,b=o?.fps??24,h=di(i);if(!h.volume&&!h.muted)return;let{tl:C,stub:V}=Ii(i.id||i.inputHandleId||"layer",m,a,d,b),ee=(o?.elapsedMs??0)/1e3,W=128;C.seek(ee);let B=V.volume,O=V.muted,P=(h.volume?1:a)*(!h.muted&&d?0:1);for(let G=0;G<c;G+=W){let L=Math.min(c,G+W),u=ee+L/e;C.seek(u);let M=V.volume,te=V.muted;for(let ne=G;ne<L;ne++){let Te=(ne-G)/(L-G),mt=Math.min(1,Math.max(0,B+(M-B)*Te)),Wt=(ne-G<(L-G)/2?O:te)?0:mt,rt=P===0?0:Wt/P;if(rt!==1)for(let ot=0;ot<s;ot++)t[ot][ne]*=rt}B=M,O=te}};Vo.register("CompositorLayer",Gs);var al=Ao({WebGPURenderer:lo});export{ze as Transform3DMath,al as default,so as has3DTransform};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{T as Ee,U as Fe,Y as Q,
|
|
1
|
+
import{T as Ee,U as Fe,Y as Q,ea as ee}from"./chunk-SWRGQTVC.mjs";import"./chunk-EAHJZDOJ.mjs";import"./chunk-CJ4CSVU3.mjs";import"./chunk-BREZX5L5.mjs";import"./chunk-6ISHV73H.mjs";import{a as ze,b as L,c as Te,d as $e,e as G,f as te,g,h as M,j as Ce,m as K}from"./chunk-PIHG6HJO.mjs";import"./chunk-CSLSWUUT.mjs";import"./chunk-GH77FX2Y.mjs";import"./chunk-HOV6DDBZ.mjs";import"./chunk-RECQ74RP.mjs";import{a as A}from"./chunk-6FULVULN.mjs";import"./chunk-ULOFDFHJ.mjs";import"./chunk-VEDMJBJV.mjs";import"./chunk-QEWDIPJ7.mjs";import"./chunk-OGPJTUAL.mjs";import"./chunk-5RRKGN2U.mjs";import"./chunk-BDZ3TSOT.mjs";import{f as S,g as y}from"./chunk-Y4NIR77Z.mjs";y();y();var $t="https://github.com/facebookresearch/sam3/blob/main/LICENSE";function Ne(e="SAM 3",t){if(!t?.acceptLicense&&!(typeof S<"u"&&S.env?.FRAMEFIELDS_ACCEPT_SAM_LICENSE==="1"))throw new Error(`Meta SAM License agreement required for ${e}:
|
|
2
2
|
SAM 3's model weights are subject to Meta's SAM License.
|
|
3
3
|
Review terms at: ${$t}
|
|
4
4
|
To download and run SAM 3 in Framefields, you must explicitly accept the terms by:
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>framefields preview</title>
|
|
7
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 512 512%22%3E%3Cg fill=%22none%22 stroke=%22%233B82F6%22 stroke-linecap=%22round%22%3E%3Cpath d=%22M184 56H86q-30 0-30 30v98M328 56h98q30 0 30 30v98M184 456H86q-30 0-30-30v-98M328 456h98q30 0 30-30v-98%22 stroke-width=%2234%22/%3E%3Cpath d=%22M176 182v148m0-148c0 74 60 74 100 74%22 stroke-width=%2228%22/%3E%3C/g%3E%3Cg fill=%22%233B82F6%22%3E%3Ccircle cx=%22176%22 cy=%22172%22 r=%2232%22/%3E%3Ccircle cx=%22176%22 cy=%22340%22 r=%2232%22/%3E%3Cpath d=%22M284 200l78 56-78 56z%22 stroke=%22%233B82F6%22 stroke-width=%2234%22 stroke-linejoin=%22round%22/%3E%3C/g%3E%3C/svg%3E">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
|
|
11
|
+
<link rel="stylesheet" href="/@framefields/ui/main.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<ff-preview></ff-preview>
|
|
15
|
+
<!-- The page first, so it hears the player announce itself. -->
|
|
16
|
+
<script type="module" src="/@framefields/ui/main.js"></script>
|
|
17
|
+
<script type="module" src="/@framefields/player.js"></script>
|
|
18
|
+
</body>
|
|
19
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg: #111214;--surface: #18191c;--surface-2: #1f2024;--surface-3: #2a2b30;--line: #25262a;--line-2: #35363c;--ink: #f1f0ea;--ink-2: #a8a7a0;--ink-3: #6f6e69;--stage: #08080a;--signal: #f5e300;--signal-ink: #111214;--brand: #3b82f6;--ok: #5cc48a;--bad: #f27d8d;--wave: #34353b;--wave-played: #8f8e88;--focus: var(--signal);--shadow: 0 12px 32px rgb(0 0 0 / .4);--radius: 8px;--font: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--pad: 24px;color-scheme:dark}@media(prefers-color-scheme:light){:root{--bg: #f3f1eb;--surface: #faf9f5;--surface-2: #eceae3;--surface-3: #e2dfd6;--line: #e0ddd3;--line-2: #ccc8bc;--ink: #151515;--ink-2: #54524c;--ink-3: #8b887f;--stage: #0b0b0c;--wave: #d2cec3;--wave-played: #54524c;--ok: #23874a;--bad: #cf4057;--focus: var(--ink);--shadow: 0 12px 32px rgb(40 36 20 / .16);color-scheme:light}}:root[data-embed]{--pad: 8px}@media(max-width:640px){:root{--pad: 8px}}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden;background:var(--bg);color:var(--ink)}body{display:flex;flex-direction:column;height:100dvh;font:13px / 1.45 var(--font);-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss03"}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.tnum{font-variant-numeric:tabular-nums}.grow{flex:1}.spinner{width:12px;height:12px;border-radius:50%;flex:none;border:1.5px solid var(--line-2);border-top-color:var(--ink);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}@keyframes arc-rotate{to{transform:rotate(360deg)}}@keyframes arc-dash{0%{stroke-dasharray:1 150;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-35}to{stroke-dasharray:90 150;stroke-dashoffset:-124}}@media(prefers-reduced-motion:reduce){.buffering circle,.play-btn .spin circle{animation:none;stroke-dasharray:70 150}}.badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;display:inline-grid;place-items:center;flex:none;background:var(--ink);color:var(--bg);font-size:10.5px;font-weight:600;font-variant-numeric:tabular-nums}.badge.done{background:var(--surface-3);color:var(--ink-3)}.badge.new{background:var(--signal);color:var(--signal-ink)}.btn{height:32px;padding:0 12px;border-radius:var(--radius);border:0;font-size:12.5px;font-weight:500;display:inline-flex;align-items:center;gap:8px;background:transparent;color:var(--ink-2);white-space:nowrap}.btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.btn.primary{background:var(--ink);color:var(--bg)}.btn.primary:hover:not(:disabled){background:var(--ink);color:var(--bg);opacity:.88}.btn.danger:hover:not(:disabled){color:var(--bad)}.btn:disabled{opacity:.4;cursor:default}.btn svg{width:14px;height:14px}.btn.small{height:24px;padding:0 8px;font-size:12px}.x-btn{width:24px;height:24px;padding:0;justify-content:center}.chip{display:inline-flex;align-items:center;gap:8px;height:24px;padding:0 8px;white-space:nowrap;color:var(--ink-3);font-size:12px}.chip[data-state=ready] .dot{color:var(--ok)}.chip[data-state=error]{color:var(--bad)}ff-preview,ff-header,ff-stage,ff-transport,ff-timeline,ff-notes-panel,ff-note-editor{display:contents}.top{flex:none;display:flex;align-items:center;gap:8px;padding:0 var(--pad);height:48px;min-width:0}.logo{width:20px;height:20px;flex:none;color:var(--brand)}.top h1{font-size:13px;font-weight:600;margin:0 0 0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spec{color:var(--ink-3);font-size:12px;white-space:nowrap}@media(max-width:640px){.spec{display:none}}.player{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px;width:100%;max-width:1680px;margin:0 auto;padding:0 var(--pad) var(--pad)}:root[data-embed] .player{padding-top:var(--pad)}.stage-wrap{flex:1 1 0;min-height:96px;container-type:size;display:grid;place-items:center}.stage{position:relative;background:var(--stage);border-radius:var(--radius);overflow:hidden;user-select:none;-webkit-user-select:none;aspect-ratio:var(--ar, 16 / 9);width:min(100cqw,calc(100cqh * var(--ar-n, 1.7778)))}.stage canvas{display:block;width:100%;height:100%}.stage-msg{position:absolute;inset:0;display:none;place-items:center;padding:24px;text-align:center;color:#fff;background:#000000c2;font-size:13px;line-height:1.5;white-space:pre-wrap;overflow:auto}.stage-msg.on{display:grid}.buffering{position:absolute;left:50%;top:50%;width:clamp(32px,8cqmin,56px);aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;opacity:0;visibility:hidden;transition:opacity .15s,visibility 0s .15s;filter:drop-shadow(0 0 3px rgb(0 0 0 / .45))}.buffering.on{opacity:1;visibility:visible;transition:opacity .2s .25s,visibility 0s .25s}.buffering svg{width:100%;height:100%;animation:arc-rotate 1.4s linear infinite}.buffering circle{fill:none;stroke:#fff;stroke-width:3.2;stroke-linecap:round;stroke-dasharray:1 150;animation:arc-dash 1.4s ease-in-out infinite}.stage.can-note{cursor:crosshair}.overlay{position:absolute;inset:0;pointer-events:none}.pin{position:absolute;width:24px;height:24px;margin:-12px 0 0 -12px;padding:0;border-radius:50%;display:grid;place-items:center;pointer-events:auto;cursor:pointer;border:0;background:#fff;color:#111214;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1;box-shadow:0 0 0 1.5px #0000008c,0 2px 8px #00000073;transition:transform .12s}.pin:hover,.pin.active{transform:scale(1.15)}.pin.active,.pin.draft{background:var(--signal);color:var(--signal-ink)}.pin.done{background:#5d5c58;color:#e6e4dd}.pin.draft{animation:pin-pulse 1.5s ease-out infinite}.pin svg{width:12px;height:12px}@keyframes pin-pulse{0%{box-shadow:0 0 #f5e30099,0 2px 8px #00000073}to{box-shadow:0 0 0 14px #f5e30000,0 2px 8px #00000073}}.area{position:absolute;border:1.5px solid #fff;border-radius:4px;background:#ffffff0f;box-shadow:0 0 0 1px #0006}.area.done{border-color:#8f8e88;background:transparent}.marquee{position:absolute;border:1.5px dashed var(--signal);background:#f5e3001a;border-radius:4px;pointer-events:none}.stage-hint,.toast{position:absolute;left:50%;transform:translate(-50%);pointer-events:none;white-space:nowrap;padding:4px 12px;border-radius:999px;font-size:12px;color:#fff;background:#000000a3;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);opacity:0;transition:opacity .15s}.stage-hint{top:16px}.stage.can-note.hint:hover .stage-hint{opacity:1}.toast{bottom:16px}.toast.on{opacity:1}.transport{position:relative;flex:none;display:flex;align-items:center;gap:8px;min-width:0}.icon-btn{width:32px;height:32px;display:inline-grid;place-items:center;border-radius:var(--radius);border:0;background:transparent;color:var(--ink-2);flex:none}.icon-btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.icon-btn:disabled{opacity:.35;cursor:default}.icon-btn svg{width:16px;height:16px}.play-btn{width:40px;height:40px;border-radius:50%;border:0;display:inline-grid;place-items:center;flex:none;background:var(--ink);color:var(--bg)}.play-btn:hover:not(:disabled){opacity:.88}.play-btn:disabled{opacity:.4;cursor:default}.play-btn svg{width:14px;height:14px}.play-btn .spin{display:none;width:22px;height:22px;animation:arc-rotate 1.4s linear infinite}.play-btn .spin circle{fill:none;stroke:currentColor;stroke-width:5;stroke-linecap:round;stroke-dasharray:1 150;animation:arc-dash 1.4s ease-in-out infinite}.play-btn.loading .spin{display:block}.play-btn.loading svg:not(.spin){display:none}.position{height:32px;padding:0 8px;margin-left:4px;border:0;border-radius:var(--radius);background:transparent;display:inline-flex;align-items:baseline;gap:0;white-space:nowrap;font-variant-numeric:tabular-nums;line-height:32px}.position:hover{background:var(--surface-2)}.position .now{font-size:14px;font-weight:500;color:var(--ink)}.position .dim{color:var(--ink-3);white-space:pre}.fps{color:var(--ink-3);font-size:12px;white-space:nowrap;font-variant-numeric:tabular-nums}input[type=range].slider{-webkit-appearance:none;appearance:none;width:80px;height:4px;border-radius:2px;background:linear-gradient(to right,var(--ink-2) var(--level, 90%),var(--line-2) var(--level, 90%));margin:0}input[type=range].slider::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:var(--ink);border:0}input[type=range].slider::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--ink);border:0}input[type=range].slider:disabled{opacity:.35}.volume{position:relative;display:flex;align-items:center;flex:none}.slider-wrap{display:flex;align-items:center;overflow:hidden;width:0;opacity:0;transition:width .15s,opacity .15s}.slider-wrap .slider{margin:0 8px 0 4px}.volume:hover .slider-wrap,.volume:focus-within .slider-wrap{width:92px;opacity:1}@media(min-width:960px){.slider-wrap{width:92px;opacity:1}}@media(max-width:520px){.slider-wrap,.volume:hover .slider-wrap,.volume:focus-within .slider-wrap{position:absolute;right:0;bottom:100%;width:auto;height:32px;padding:0 4px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow);visibility:hidden}.volume:hover .slider-wrap,.volume:focus-within .slider-wrap{visibility:visible}}.volume .icon-btn[aria-disabled=true]{cursor:default;opacity:.5}.volume.problem .icon-btn{opacity:1;color:var(--ink-3)}.notes-btn{padding:0 8px}.notes-btn svg{width:16px;height:16px}.notes-btn .badge{background:var(--surface-3);color:var(--ink-2)}.notes-btn .badge.open{background:var(--signal);color:var(--signal-ink)}.notes-btn[aria-expanded=true]{background:var(--surface-2);color:var(--ink)}@media(max-width:520px){.fps{display:none}.transport{gap:4px}}@media(max-width:380px){.position .dim{display:none}}.notes-panel{position:absolute;right:0;bottom:calc(100% + 8px);z-index:15;width:min(360px,calc(100vw - 16px));max-height:min(440px,62vh);display:none;flex-direction:column;overflow:hidden;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:var(--shadow)}.notes-panel.on{display:flex}.np-head{flex:none;display:flex;align-items:center;gap:8px;padding:8px 8px 8px 16px;border-bottom:1px solid var(--line)}.np-head h2{margin:0;font-size:13px;font-weight:600}.np-list{overflow:auto;padding:8px}.np-empty{padding:24px 16px;text-align:center;color:var(--ink-3);font-size:12.5px}.note-row{display:grid;grid-template-columns:auto 1fr auto;gap:8px 12px;align-items:start;padding:8px;border-radius:var(--radius);cursor:pointer}.note-row:hover{background:var(--surface-2)}.note-row .when{font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}.note-row .text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}.note-row.done .text{color:var(--ink-3);text-decoration:line-through}.check{width:24px;height:24px;border-radius:50%;padding:0;display:grid;place-items:center;border:1.5px solid var(--line-2);background:transparent;color:transparent}.check:hover{border-color:var(--ink-2);color:var(--ink-2)}.check.on{background:var(--ink-3);border-color:var(--ink-3);color:var(--bg)}.check svg{width:12px;height:12px}.timeline{--lane: 20px;--wave-h: 48px;flex:none;border-radius:var(--radius);background:var(--surface);padding:0 16px 8px;user-select:none;-webkit-user-select:none;touch-action:none;cursor:pointer}:root[data-embed] .timeline{--wave-h: 36px;padding:0 8px 4px}@media(max-height:600px){.timeline{--wave-h: 28px}}.tl-inner{position:relative}.ruler{position:relative;height:24px}.tick{position:absolute;bottom:0;width:1px;height:4px;background:var(--line-2)}.tick.major{height:8px;background:var(--ink-3)}.tick span{position:absolute;bottom:10px;left:0;transform:translate(-50%);font-size:10.5px;line-height:1;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}.tick:first-child span{transform:none}.marks{position:relative;z-index:4;height:calc(var(--lanes, 1) * var(--lane))}.note-mark{position:absolute;width:18px;height:18px;margin:1px 0 0 -9px;padding:0 4px;border:0;border-radius:9px;display:grid;place-items:center;cursor:pointer;background:var(--ink);color:var(--bg);font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;box-shadow:0 0 0 2px var(--surface);z-index:2}.note-mark.done{background:var(--surface-3);color:var(--ink-3)}.note-mark.active{background:var(--signal);color:var(--signal-ink)}.note-mark:hover{transform:scale(1.12)}.wave{position:relative;height:var(--wave-h)}.wave canvas{position:absolute;inset:0;width:100%;height:100%}.wave-played{position:absolute;inset:0 auto 0 0;overflow:hidden}.wave-played canvas{width:var(--track-w, 100%)}.wave-state{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--ink-3);font-size:12px}.wave-state.shimmer{background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--ink) 6%,transparent) 50%,transparent 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.hover-line{position:absolute;top:24px;bottom:0;width:1px;background:var(--ink-3);pointer-events:none;opacity:.6}.hover-time,.playhead-time{position:absolute;top:2px;width:64px;margin-left:-32px;height:20px;display:grid;place-items:center;border-radius:4px;font-size:11px;font-weight:500;font-variant-numeric:tabular-nums;pointer-events:none}.hover-time{background:var(--surface-3);color:var(--ink);z-index:4}.playhead{position:absolute;top:22px;bottom:0;width:2px;margin-left:-1px;background:var(--signal);pointer-events:none;z-index:3;box-shadow:0 0 0 .5px #00000059}.playhead-time{background:var(--signal);color:var(--signal-ink);z-index:3}.timeline:focus-visible{outline-offset:0}.pop{position:fixed;z-index:20;width:min(288px,calc(100vw - 16px));display:none;padding:8px;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:var(--shadow)}.pop.on{display:block}.pop-head{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3);margin-bottom:8px;min-height:24px}.pop textarea{display:block;width:100%;min-height:56px;max-height:180px;resize:none;padding:0;border:0;outline:none;background:transparent;color:var(--ink);line-height:1.45}.pop textarea::placeholder{color:var(--ink-3)}.pop-text{white-space:pre-wrap;overflow-wrap:anywhere;max-height:200px;overflow:auto}.pop-foot{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:12px;color:var(--ink-3)}.pop-foot .err{color:var(--bad)}
|