framefields 2.14.0 → 2.15.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.d.mts.map +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-Bv7gxGK1.d.mts → index-BnB_Ou2y.d.mts} +2 -2
- package/dist/index-BnB_Ou2y.d.mts.map +1 -0
- 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-C7-p9zwU.d.mts → index-DhL7ckvs.d.mts} +5 -5
- package/dist/index-DhL7ckvs.d.mts.map +1 -0
- package/dist/{index-9xte4JgL.d.mts → index-DkAjKnhW.d.mts} +1464 -559
- package/dist/index-DkAjKnhW.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 +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/preview-BeGF1Bb1.mjs +1002 -0
- package/dist/preview-BeGF1Bb1.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-VM2ZBPLM.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 +2 -2
- 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 +327 -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,327 @@
|
|
|
1
|
+
async function Se(n,e){let t=await n.snapshot(e.frame),r=Math.min(1,1600/t.width),i=Math.round(t.width*r),s=Math.round(t.height*r),o=document.createElement("canvas");o.width=i,o.height=s;let a=o.getContext("2d");if(!a)throw new Error("no 2D canvas to draw the note's picture");a.drawImage(t,0,0,i,s),t.close();let l=Math.max(3,i/400),p=f=>{for(let[m,x]of[[l+5,"rgba(0,0,0,0.5)"],[l+2.5,"#fff"],[l,"#3b82f6"]])a.lineWidth=m,a.strokeStyle=x,f()},{x:c,y:h}=e;if(e.w!=null&&e.h!=null){let{w:f,h:m}=e;p(()=>a.strokeRect(c*i,h*s,f*i,m*s))}else{let f=Math.max(16,i/40);p(()=>{a.beginPath(),a.arc(c*i,h*s,f,0,Math.PI*2),a.stroke()}),a.fillStyle="#3b82f6",a.beginPath(),a.arc(c*i,h*s,l,0,Math.PI*2),a.fill()}return o.toDataURL("image/jpeg",.88)}function v(n,e){let t=n/e,r=Math.floor(t/60);return`${r}:${(t-r*60).toFixed(2).padStart(5,"0")}`}function _(n,e){return Math.max(0,Math.min(e-1,Math.round(n)))}function le(n,e){return e>1?n/(e-1)*100:0}function pe(n,e,t){let r=/[#&]t=([\d.]+)/.exec(n);if(r)return _(Number(r[1])*e,t);let i=/[#&]frame=(\d+)/.exec(n);return i?_(Number(i[1]),t):null}function Me(n,e){return n>0?`#t=${Number((n/e).toFixed(3))}`:""}var Pt=[.5,1,2,5,10,15,30,60,120,300,600];function _e(n,e){if(n<=0)return[];let r=(Pt.find(s=>s/n*e>=80)??1200)/5,i=[];for(let s=0;s*r<=n+1e-6;s++){let o=s*r,a=s%5===0,l=o/n*e,p={left:o/n*100,major:a};if(a&&l<e-34){let c=Math.floor(o/60),h=Math.round((o-c*60)*10)/10;p.label=`${c}:${h<10?"0":""}${h}`}i.push(p)}return i}function U(n,e){return n.frame-e.frame||n.id-e.id}function Ce(n,e,t){let r=[];return[...n].sort(U).map(i=>{let s=le(i.frame,e),o=s/100*t,a=r.findIndex(l=>o-l>=16);return a<0&&(a=r.length<3?r.length:2),r[a]=o,{note:i,lane:a,left:s}})}function M(n){return`${Math.round(n*100)}%`}function At(n){return n.w!=null&&n.h!=null?`area ${M(n.x)},${M(n.y)} to ${M(n.x+n.w)},${M(n.y+n.h)}`:`spot ${M(n.x)},${M(n.y)}`}function Te(n,e,t){let r=[`Notes on the preview of ${JSON.stringify(n)}:`];for(let i of e.filter(s=>!s.done).sort(U))r.push(`- Note ${i.id} at ${v(i.frame,t)} (frame ${i.frame}), ${At(i)}: ${i.text}${i.image?` [picture: ${i.image}]`:""}`);return r.join(`
|
|
2
|
+
`)}function Ne(n){return n?n.split("/").slice(-2).join("/"):""}var z=class{constructor(e=()=>Number.POSITIVE_INFINITY,t=()=>performance.now()){this.cap=e;this.now=t}cap;now;#e=null;#t=null;#i=[];#r=null;read(){if(this.#e===null)return{state:"paused",fps:this.#r};let e=this.now(),t=Math.min(2e3,e-this.#e);return this.#i=this.#i.filter(r=>r>e-2e3),t<1e3?{state:"measuring",fps:null}:{state:"playing",fps:Math.min(this.cap(),this.#i.length*1e3/t)}}start(){this.#e=this.now(),this.#t=null,this.#i=[]}stop(){if(this.#e===null)return;let e=this.read();this.#r=e.state==="playing"?e.fps:null,this.#e=null,this.#i=[]}record(e){this.#e===null||e===this.#t||(this.#t=e,this.#i.push(this.now()))}};function Et(n){if(n instanceof Error||typeof n=="object"&&n&&"message"in n){let{message:e,stack:t}=n,r=String(e);if(typeof t=="string"&&t.includes(r))return t.split(`
|
|
3
|
+
`).slice(0,4).join(`
|
|
4
|
+
`);if(r)return r}return typeof n=="string"?n:String(n)}function Re(n){let e=new Set;return(t,r)=>{let i=r.map(Et).join(" ").trim(),s=t+i.replace(/\d+/g,"#");!i||e.has(s)||e.size>100||(e.add(s),n({level:t,message:i.slice(0,4e3)}))}}function Le(n,e){let t=n.error.bind(n),r=n.warn.bind(n);n.error=(...i)=>{t(...i),e("error",i)},n.warn=(...i)=>{r(...i),typeof i[0]=="string"&&i[0].startsWith("[framefields]")&&e("warning",i)}}var He="/@framefields/player.js";async function he(n){let e=await n;if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}function Oe(n,e,t=!1){return fetch(n,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e),keepalive:t})}function Be(){return{meta:()=>he(fetch("/meta")),listNotes:async()=>{let n=await he(fetch("/@framefields/notes"));return Array.isArray(n)?n:[]},changeNote:n=>he(Oe("/@framefields/notes",n)),log(n){Oe("/@framefields/log",n,!0).catch(()=>{})},mixAudio(){fetch("/audio/mix",{method:"POST"}).catch(()=>{})},async audio(){let n=await fetch("/audio");if(!n.ok)throw new Error(`HTTP ${n.status}`);return n.arrayBuffer()},events(n){let e=new EventSource("/events"),t=r=>JSON.parse(r.data);return e.addEventListener("hello",r=>n.hello(t(r).session)),e.addEventListener("error",()=>n.lost()),e.addEventListener("notes",r=>n.notes(t(r))),e.addEventListener("audio",r=>n.audio(t(r))),()=>e.close()}}}var C=1200,De=.001;var F={mixing:"Mixing audio",loading:"Loading audio",ready:"Audio ready",none:"No audio",error:"Audio failed"},b=2,St=4,Mt=64;function _t(){let n;try{n=new Worker(He,{type:"module"})}catch{return null}let e=new Map,t=0,r=null,i=o=>{r??=o;for(let a of e.values())a.reject(r);e.clear()},s=new Promise((o,a)=>{n.onmessage=l=>{let p=l.data;if("ready"in p){if(p.ready)o();else{let h=new Error(p.error);a(h),i(h)}return}let c=e.get(p.id);c&&(e.delete(p.id),"error"in p?c.reject(new Error(p.error)):c.resolve(p.mix))},n.onerror=l=>{let p=new Error(l.message||"the mixing worker failed");a(p),i(p)}});return s.catch(()=>{}),{async mix(o,a){if(await s,r)throw r;return new Promise((l,p)=>{let c=++t;e.set(c,{resolve:l,reject:p}),n.postMessage({id:c,range:o,chain:a})})},stop(){n.terminate(),i(new Error("stopped"))}}}var de=class{constructor(e,t){this.player=e;this.total=Math.max(1,Math.ceil(t/b))}player;worker=_t();blocks=new Map;order=[];pending=new Map;queue=[];busy=!1;seen=new Set;peak=0;gain=1;fill=0;filling=!1;total;mix(e,t){let r=this.worker;return r?r.mix(e,t).catch(i=>(this.worker&&(console.warn("The soundtrack's mixing worker failed, so the page mixes it:",i),this.worker.stop(),this.worker=null),this.player.mixAudio(e,t))):this.player.mixAudio(e,t)}};function Ie(n,e){let t=new Float32Array(n.length);for(let r=0;r<n.length;r++){let i=Math.tanh(n[r]*e);t[r]=Number.isNaN(i)?0:i}return t}var q=class{constructor(e){this.host=e}host;mode="browser";state="mixing";error="";buffer=null;peaks=null;peaksVersion=0;muted=!1;volume=.9;#e=null;#t=null;#i=null;#r=null;#s=null;#o=null;get usable(){return this.state==="ready"&&(!!this.buffer||!!this.#r)}get durationSec(){return this.buffer?this.buffer.duration:null}get mixed(){let e=this.#r;if(!e)return null;let t=0;for(let r of e.blocks.values())r.exact&&t++;return{blocks:e.seen.size,of:e.total,exact:t}}get mixer(){return this.#r?this.#r.worker?"worker":"page":this.mode==="server"?"server":null}attach(e,t){this.#o=e,this.mode==="browser"&&this.#f(e,t)}load(e,t){if(e?.state==="browser"){this.mode="browser",this.#n("mixing"),this.#o&&this.#f(this.#o,t);return}if(this.mode="server",this.stopClock(),this.buffer=null,this.#l(null),e?.state!=="ready"){this.#n(e?.state??"none",e?.state==="error"?e.error:"");return}this.#l(e.peaks),this.#n("loading");let r=this.#c();this.host.server.audio().then(i=>r.decodeAudioData(i)).then(i=>{this.buffer=i,this.#n("ready")},i=>this.#n("error",String(i?.message??i)))}async ready(e){let t=this.#r;!t||this.state==="none"||(await this.#d(t,this.#p(e),!0).catch(()=>{}),this.#r&&this.state==="mixing"&&this.#n("ready"))}get waitsBeforePlay(){return!!this.#r&&this.state!=="none"}setMuted(e){this.muted=e,this.#h()}setVolume(e){this.volume=e,this.muted=e===0,this.#h()}startClock(e,t){let r=this.#e;if(this.#r&&r&&this.state==="ready")return this.#k(this.#r,r,e/t);if(this.buffer&&r&&this.#t){r.resume();let s=r.createBufferSource();s.buffer=this.buffer,s.connect(this.#t);let o=r.currentTime+.06,a=e/t;return a<this.buffer.duration&&s.start(o,a),this.#i=s,()=>Math.max(0,r.currentTime-o)}let i=performance.now();return()=>(performance.now()-i)/1e3}stopClock(){this.#m();let e=this.#i;if(e){try{e.stop()}catch{}e.disconnect(),this.#i=null}}#n(e,t=""){this.state=e,this.error=t,this.host.changed()}#l(e){this.peaks=e,this.peaksVersion++}#a(){let e=this.host.film();return e?e.frameCount/e.fps:0}#p(e){let t=this.host.film()?.fps??30;return Math.floor(e/t/b)}#c(){if(this.#e)return this.#e;let e=window.AudioContext??window.webkitAudioContext,t=new e;return this.#t=t.createGain(),this.#t.connect(t.destination),this.#e=t,this.#h(),t}#h(){this.#t&&(this.#t.gain.value=this.muted?0:this.volume),this.host.changed()}#f(e,t){this.#r?.worker?.stop(),this.stopClock(),this.buffer=null,this.#l(new Array(C).fill(0));let r=new de(e,this.#a());this.#r=r,this.#c(),this.#n("mixing"),this.#d(r,this.#p(t),!0).then(()=>{this.#r===r&&this.state==="mixing"&&this.#n("ready")},()=>{})}#d(e,t,r){let i=e.blocks.get(t);if(i)return Promise.resolve(i);let s=e.pending.get(t);if(s)return r&&Ct(e,t),s;let o=je(e,t,t===e.fill?"fill":"play",r,!0);return this.#u(e),o}#u(e){if(e.busy||this.#r!==e||!e.queue.length&&(!e.filling&&e.fill<e.total&&je(e,e.fill,"fill",!1,!e.pending.has(e.fill)),!e.queue.length))return;e.busy=!0;let t=e.queue.shift(),r=this.#a(),i={startSec:t.i*b,endSec:Math.min(r,(t.i+1)*b)};e.mix(i,t.chain).then(s=>{this.#r===e&&this.#y(e,t.i,s),t.chain==="fill"&&(e.fill=t.i+1,e.filling=!1),t.resolve(e.blocks.get(t.i))},s=>{t.chain==="fill"&&(e.filling=!1),t.reject(s),this.#w(e,s)}).then(()=>{t.own&&e.pending.delete(t.i),e.busy=!1,this.#u(e)})}#y(e,t,r){let i={left:r.left,right:r.right,sampleRate:r.sampleRate,exact:r.exact},s=e.blocks.get(t);if(!s||!s.exact||i.exact)for(e.blocks.set(t,i),e.order.push(t);e.order.length>Mt;)e.blocks.delete(e.order.shift());if(!e.seen.has(t)){if(e.seen.add(t),e.peak=Math.max(e.peak,r.peak),this.#g(t,i),e.seen.size<e.total){this.host.changed();return}e.gain=e.peak>.95?.92/e.peak:1,e.peak<De?this.#n("none"):this.host.changed()}}#g(e,t){let r=this.peaks;if(!r)return;let i=this.#a(),s=Math.floor(e*b/i*C),o=Math.min(C,Math.ceil(Math.min(i,(e+1)*b)/i*C)),a=i/C*t.sampleRate,l=e*b*t.sampleRate;for(let p=s;p<o;p++){let c=Math.max(0,Math.floor(p*a-l)),h=Math.min(t.left.length,Math.floor((p+1)*a-l)),f=r[p];for(let m=c;m<h;m++)f=Math.max(f,Math.abs(t.left[m]),Math.abs(t.right[m]));r[p]=Math.min(1,f)}this.peaksVersion++}#w(e,t){this.#r===e&&(e.worker?.stop(),this.#r=null,this.stopClock(),console.warn("Mixing the soundtrack in the browser failed, so the preview server mixes it:",t),this.mode="server",this.#n("mixing"),this.host.server.mixAudio())}#k(e,t,r){t.resume();let i={t0:r,startAt:t.currentTime+.08,next:Math.floor(r/b),sources:[],timer:void 0};this.#s=i;let s=()=>{if(this.#s!==i||this.#r!==e)return;let o=t.currentTime-i.startAt+i.t0;for(;i.next<e.total&&i.next*b<o+St;){let a=e.blocks.get(i.next);if(!a){this.#d(e,i.next,!0).then(s,()=>{});return}this.#$(t,i,i.next,a,e.gain),i.next++}};return i.timer=setInterval(s,250),s(),()=>Math.max(0,t.currentTime-i.startAt)}#$(e,t,r,i,s){if(!this.#t)return;let o=e.createBuffer(2,i.left.length,i.sampleRate);o.copyToChannel(Ie(i.left,s),0),o.copyToChannel(Ie(i.right,s),1);let a=e.createBufferSource();a.buffer=o,a.connect(this.#t);let l=t.startAt+(r*b-t.t0),p=Math.max(l,e.currentTime+.02),c=p-l;c>=o.duration||(a.start(p,c),t.sources.push(a),a.onended=()=>{t.sources=t.sources.filter(h=>h!==a)})}#m(){let e=this.#s;if(this.#s=null,!!e){clearInterval(e.timer);for(let t of e.sources){try{t.stop()}catch{}t.disconnect()}}}};function je(n,e,t,r,i){t==="fill"&&(n.filling=!0);let s=new Promise((o,a)=>{let l={i:e,chain:t,own:i,resolve:o,reject:a};r?n.queue.unshift(l):n.queue.push(l)});return i?n.pending.set(e,s):s.catch(()=>{}),s}function Ct(n,e){let t=n.queue.findIndex(r=>r.i===e);t>0&&n.queue.unshift(n.queue.splice(t,1)[0])}function Tt(n,e,t){return t&&t.w>.01&&t.h>.01?{frame:n,...t,text:""}:{frame:n,x:e.x,y:e.y,text:""}}var ce=n=>new Promise(e=>setTimeout(e,n)),W=class extends EventTarget{meta=null;player=null;pageState="loading";error=null;frame=0;playing=!1;stalled=!1;offline=!1;fps={state:"paused",fps:null};notesOn=!1;notes=[];draft=null;openId=null;saving=!1;saveError=!1;panelOpen=!1;toastText="";toastOn=!1;soundtrack;report;server;#e;#t;#i;#r=null;#s=!1;#o=0;#n;#l=0;#a=new Set;#p=[];#c;#h;#f=new AbortController;#d=!1;constructor(e={}){super(),this.server=e.server??Be(),this.#e=e.win??window,this.#t=e.embedder!==void 0?e.embedder:this.#e.parent!==this.#e?this.#e.parent:null,this.report=Re(t=>this.server.log(t)),this.#i=new z(()=>this.meta?.fps??1/0),this.soundtrack=new q({server:this.server,film:()=>this.meta,changed:()=>this.changed()})}get lastFrame(){return(this.meta?.frameCount??1)-1}get buffering(){return this.pageState!=="error"&&(this.#s||this.stalled)}noteById(e){return this.notes.find(t=>t.id===e)}get openCount(){return this.notes.filter(e=>!e.done).length}get canNote(){return this.notesOn&&!!this.player&&!this.playing}changed(){this.#d||(this.#d=!0,queueMicrotask(()=>{this.#d=!1,this.dispatchEvent(new Event("change"))}))}subscribe(e){return this.addEventListener("change",e),()=>this.removeEventListener("change",e)}async start(){let e=this.#e,t=this.#f.signal,r=this.server.events({hello:l=>this.#w(l),lost:()=>this.#k(),notes:l=>this.#S(l),audio:l=>this.#$(l)});t.addEventListener("abort",r);let i={signal:t};e.addEventListener("framefields:player",()=>{this.meta&&this.#u()},i),e.addEventListener("error",l=>{this.player?this.report("error",[l.error??l.message]):this.showError(l.error??l.message)},i),e.addEventListener("unhandledrejection",l=>this.report("error",[l.reason]),i),e.addEventListener("hashchange",()=>this.#_(),i),e.document.addEventListener("visibilitychange",()=>{e.document.hidden&&this.playing&&this.pause()},i),e.framefieldsPreview=this.api();let s=await this.server.meta(),{audio:o,...a}=s;this.#r=a.session,this.meta=a,e.document.title=`${a.title} \xB7 preview`,this.notesOn=!!a.notesDir,this.#N(),this.soundtrack.load(o,this.frame),this.#m(pe(e.location.hash,a.fps,a.frameCount)??0),this.#s=!0,this.#u()}close(){this.#f.abort(),this.#b()}#u(){let e=this.#e.framefieldsPlayer;e&&e.then(t=>{this.player=t,this.soundtrack.attach(t,this.frame),this.changed(),this.#P(this.frame).then(()=>this.#y())},t=>{this.showError(t),this.#e.document.documentElement.dataset.preview="error",this.#g(t instanceof Error?t:new Error(String(t)))})}#y(){this.pageState="ready",this.#e.document.documentElement.dataset.preview="ready",this.#g(),this.#v(),this.changed(),this.#t?.postMessage({type:"framefields-preview:ready",seekByHash:!0},"*")}whenReady(){return this.player?Promise.resolve():this.pageState==="error"?Promise.reject(new Error(this.error??"the preview failed")):new Promise((e,t)=>this.#p.push([e,t]))}#g(e){for(let[t,r]of this.#p.splice(0))e?r(e):t()}showError(e){this.report("error",[e]),this.pageState="error",this.error=String(e?.message??e),this.changed()}#w(e){if(this.#r&&e!==this.#r){this.#e.location.reload();return}this.offline=!1,this.changed()}#k(){this.meta&&(this.playing&&(this.#b(),this.#A()),this.offline=!0,this.changed())}#$(e){this.meta&&this.soundtrack.load(e,this.frame)}#m(e){this.frame=e,this.changed()}#P(e){this.#m(e);let t=this.player;return t?(this.#s=!0,t.render(e).then(()=>{this.#s=!1,this.changed()})):Promise.resolve()}seek(e){this.#b();let t=this.#P(_(e,this.meta?.frameCount??1));return this.#A(),this.#v(),t}step(e){return this.seek(this.frame+e)}#A(){if(!this.meta)return;let{location:e,history:t}=this.#e,r=Me(this.frame,this.meta.fps)||e.pathname+e.search;try{t.replaceState(null,"",r)}catch{}}#_(){let e=this.meta;if(!e)return;let t=pe(this.#e.location.hash,e.fps,e.frameCount);t!==null&&(this.playing&&this.pause(),t!==this.frame&&this.seek(t))}#v(){clearTimeout(this.#n),this.#l++,!(!this.player?.hasVision||this.playing)&&(this.#n=setTimeout(()=>{this.#C()},1e3))}async#C(){let e=this.player,t=this.meta;if(!e||!t)return;let r=++this.#l,i=Math.min(this.lastFrame,this.frame+Math.round(t.fps*20));for(let s=this.frame+1;s<=i&&r===this.#l&&!this.playing;s++)if(!this.#a.has(s)){if(!await e.warm(s)){this.#v();return}this.#a.add(s),await ce(0)}}play(){if(this.playing||!this.player)return;this.playing=!0,clearTimeout(this.#n),this.#l++;let e=++this.#o,t=()=>this.playing&&e===this.#o;this.openId!=null&&this.closePop(),this.draft&&!this.draft.text.trim()&&this.cancelDraft(),this.frame>=this.lastFrame&&(this.frame=0),this.changed(),this.#T(this.player,t).catch(r=>this.report("error",[r])).finally(()=>{e===this.#o&&this.playing&&this.pause()})}pause(){this.#b(),this.#A(),this.#P(this.frame).then(()=>this.#v())}togglePlay(){this.playing?this.pause():this.play()}#b(){this.playing=!1,this.soundtrack.stopClock(),this.stalled=!1,this.#i.stop(),clearInterval(this.#h),this.#h=void 0,this.#E()}#E(){this.fps=this.#i.read(),this.changed()}#x(e){this.stalled=e,this.changed()}async#T(e,t){let r=this.meta?.fps??30;if(this.#i.start(),this.#E(),this.#h=setInterval(()=>this.#E(),500),this.soundtrack.waitsBeforePlay){if(this.#x(!0),await this.soundtrack.ready(this.frame),!t())return;this.#x(!1)}if(this.soundtrack.state==="loading"){for(this.#x(!0);t()&&this.soundtrack.state==="loading";)await ce(50);if(!t())return;this.#x(!1)}let i=this.frame,s=this.soundtrack.startClock(i,r),o=-1;for(;t();){let a=Math.min(this.lastFrame,i+Math.floor(s()*r));if(a===o){await ce(4);continue}this.#m(a);let l=await e.render(a,{cache:!1});if(!t()||(o=l,this.#i.record(l),l>=this.lastFrame))return}}#N(){this.notesOn&&this.server.listNotes().then(e=>this.#S(e),()=>{})}#S(e){this.notes=e,this.openId!=null&&!this.noteById(this.openId)&&this.closePop(),this.changed()}#M(e){let t=this.notes.findIndex(r=>r.id===e.id);t>=0?this.notes[t]=e:this.notes.push(e),this.changed()}beginDraft(e,t){this.openId=null,this.saveError=!1,this.draft=Tt(this.frame,e,t),this.changed()}setDraftText(e){this.draft&&(this.draft.text=e,this.changed())}cancelDraft(){this.draft&&(this.draft=null,this.closePop())}async saveDraft(){let e=this.draft,t=this.meta,r=e?.text.trim();if(!e||!t||!r||this.saving)return!1;this.saving=!0,this.saveError=!1,this.changed();try{let i;try{this.player&&(i=await Se(this.player,e))}catch(o){this.report("warning",["[framefields] no picture for the note:",o])}let s=await this.server.changeNote({op:"add",note:{frame:e.frame,time:e.frame/t.fps,x:e.x,y:e.y,w:e.w,h:e.h,text:r,image:i}});return this.draft===e&&(this.draft=null),this.closePop(),this.#M(s),this.toast(`Note ${s.id} saved`),!0}catch{return this.saveError=!0,!1}finally{this.saving=!1,this.changed()}}openCard(e){this.noteById(e)&&(this.draft&&this.cancelDraft(),this.openId=e,this.changed())}closePop(){this.openId=null,this.changed()}setDone(e,t){this.server.changeNote({op:"update",id:e,done:t}).then(r=>this.#M(r),()=>this.toast("Couldn't save. Is the preview running?"))}removeNote(e){this.server.changeNote({op:"remove",id:e}).then(()=>{this.notes=this.notes.filter(t=>t.id!==e),this.closePop()},()=>this.toast("Couldn't delete. Is the preview running?"))}goToNote(e){let t=this.noteById(e);t&&(this.panelOpen=!1,this.seek(t.frame).then(()=>this.openCard(e)))}setPanel(e){this.panelOpen=e,this.changed()}toast(e){this.toastText=e,this.toastOn=!0,clearTimeout(this.#c),this.#c=setTimeout(()=>{this.toastOn=!1,this.changed()},2200),this.changed()}api(){return{seek:async e=>(await this.whenReady(),this.seek(Number(e)*(this.meta?.fps??30))),seekFrame:async e=>(await this.whenReady(),this.seek(e)),play:async()=>{await this.whenReady(),this.play()},pause:()=>{this.playing&&this.pause()},notes:()=>this.notes.slice(),state:()=>this.snapshot()}}snapshot(){let e=this.meta,t=this.#i.read().fps;return{state:this.pageState,error:this.pageState==="error"?this.error:null,frame:this.frame,time:e?Number((this.frame/e.fps).toFixed(3)):0,playing:this.playing,buffering:this.stalled,audio:this.soundtrack.state,audioMixed:this.soundtrack.mixed,audioMixer:this.soundtrack.mixer,connected:!this.offline,playbackFps:t==null?null:Number(t.toFixed(1)),renderMs:this.player?Math.round(this.player.lastRenderMs):null,meta:e&&{title:e.title,width:e.width,height:e.height,fps:e.fps,frameCount:e.frameCount,duration:Number((this.lastFrame/e.fps).toFixed(3))}}}};var V=globalThis,X=V.ShadowRoot&&(V.ShadyCSS===void 0||V.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,ze=Symbol(),Ue=new WeakMap,K=class{constructor(e,t,r){if(this._$cssResult$=!0,r!==ze)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(X&&e===void 0){let r=t!==void 0&&t.length===1;r&&(e=Ue.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),r&&Ue.set(t,e))}return e}toString(){return this.cssText}},qe=n=>new K(typeof n=="string"?n:n+"",void 0,ze);var Fe=(n,e)=>{if(X)n.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(let t of e){let r=document.createElement("style"),i=V.litNonce;i!==void 0&&r.setAttribute("nonce",i),r.textContent=t.cssText,n.appendChild(r)}},ue=X?n=>n:n=>n instanceof CSSStyleSheet?(e=>{let t="";for(let r of e.cssRules)t+=r.cssText;return qe(t)})(n):n;var{is:Nt,defineProperty:Rt,getOwnPropertyDescriptor:Lt,getOwnPropertyNames:Ot,getOwnPropertySymbols:Ht,getPrototypeOf:Bt}=Object,J=globalThis,We=J.trustedTypes,Dt=We?We.emptyScript:"",It=J.reactiveElementPolyfillSupport,L=(n,e)=>n,fe={toAttribute(n,e){switch(e){case Boolean:n=n?Dt:null;break;case Object:case Array:n=n==null?n:JSON.stringify(n)}return n},fromAttribute(n,e){let t=n;switch(e){case Boolean:t=n!==null;break;case Number:t=n===null?null:Number(n);break;case Object:case Array:try{t=JSON.parse(n)}catch{t=null}}return t}},Ke=(n,e)=>!Nt(n,e),Ve={attribute:!0,type:String,converter:fe,reflect:!1,useDefault:!1,hasChanged:Ke};Symbol.metadata??=Symbol("metadata"),J.litPropertyMetadata??=new WeakMap;var y=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Ve){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let r=Symbol(),i=this.getPropertyDescriptor(e,r,t);i!==void 0&&Rt(this.prototype,e,i)}}static getPropertyDescriptor(e,t,r){let{get:i,set:s}=Lt(this.prototype,e)??{get(){return this[t]},set(o){this[t]=o}};return{get:i,set(o){let a=i?.call(this);s?.call(this,o),this.requestUpdate(e,a,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Ve}static _$Ei(){if(this.hasOwnProperty(L("elementProperties")))return;let e=Bt(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(L("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(L("properties"))){let t=this.properties,r=[...Ot(t),...Ht(t)];for(let i of r)this.createProperty(i,t[i])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[r,i]of t)this.elementProperties.set(r,i)}this._$Eh=new Map;for(let[t,r]of this.elementProperties){let i=this._$Eu(t,r);i!==void 0&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let r=new Set(e.flat(1/0).reverse());for(let i of r)t.unshift(ue(i))}else e!==void 0&&t.push(ue(e));return t}static _$Eu(e,t){let r=t.attribute;return r===!1?void 0:typeof r=="string"?r:typeof e=="string"?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let r of t.keys())this.hasOwnProperty(r)&&(e.set(r,this[r]),delete this[r]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Fe(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,r){this._$AK(e,r)}_$ET(e,t){let r=this.constructor.elementProperties.get(e),i=this.constructor._$Eu(e,r);if(i!==void 0&&r.reflect===!0){let s=(r.converter?.toAttribute!==void 0?r.converter:fe).toAttribute(t,r.type);this._$Em=e,s==null?this.removeAttribute(i):this.setAttribute(i,s),this._$Em=null}}_$AK(e,t){let r=this.constructor,i=r._$Eh.get(e);if(i!==void 0&&this._$Em!==i){let s=r.getPropertyOptions(i),o=typeof s.converter=="function"?{fromAttribute:s.converter}:s.converter?.fromAttribute!==void 0?s.converter:fe;this._$Em=i;let a=o.fromAttribute(t,s.type);this[i]=a??this._$Ej?.get(i)??a,this._$Em=null}}requestUpdate(e,t,r,i=!1,s){if(e!==void 0){let o=this.constructor;if(i===!1&&(s=this[e]),r??=o.getPropertyOptions(e),!((r.hasChanged??Ke)(s,t)||r.useDefault&&r.reflect&&s===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,r))))return;this.C(e,t,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,t,{useDefault:r,reflect:i,wrapped:s},o){r&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),s!==!0||o!==void 0)||(this._$AL.has(e)||(this.hasUpdated||r||(t=void 0),this._$AL.set(e,t)),i===!0&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[i,s]of this._$Ep)this[i]=s;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[i,s]of r){let{wrapped:o}=s,a=this[i];o!==!0||this._$AL.has(i)||a===void 0||this.C(i,void 0,s,a)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(t)):this._$EM()}catch(r){throw e=!1,this._$EM(),r}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(e){}firstUpdated(e){}};y.elementStyles=[],y.shadowRootOptions={mode:"open"},y[L("elementProperties")]=new Map,y[L("finalized")]=new Map,It?.({ReactiveElement:y}),(J.reactiveElementVersions??=[]).push("2.1.2");var we=globalThis,Xe=n=>n,Y=we.trustedTypes,Je=Y?Y.createPolicy("lit-html",{createHTML:n=>n}):void 0,tt="$lit$",k=`lit$${Math.random().toFixed(9).slice(2)}$`,rt="?"+k,jt=`<${rt}>`,E=document,H=()=>E.createComment(""),B=n=>n===null||typeof n!="object"&&typeof n!="function",ke=Array.isArray,Ut=n=>ke(n)||typeof n?.[Symbol.iterator]=="function",me=`[
|
|
5
|
+
\f\r]`,O=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ye=/-->/g,Ge=/>/g,P=RegExp(`>|${me}(?:([^\\s"'>=/]+)(${me}*=${me}*(?:[^
|
|
6
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Ze=/'/g,Qe=/"/g,it=/^(?:script|style|textarea|title)$/i,$e=n=>(e,...t)=>({_$litType$:n,strings:e,values:t}),d=$e(1),nt=$e(2),_r=$e(3),w=Symbol.for("lit-noChange"),u=Symbol.for("lit-nothing"),et=new WeakMap,A=E.createTreeWalker(E,129);function st(n,e){if(!ke(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return Je!==void 0?Je.createHTML(e):e}var zt=(n,e)=>{let t=n.length-1,r=[],i,s=e===2?"<svg>":e===3?"<math>":"",o=O;for(let a=0;a<t;a++){let l=n[a],p,c,h=-1,f=0;for(;f<l.length&&(o.lastIndex=f,c=o.exec(l),c!==null);)f=o.lastIndex,o===O?c[1]==="!--"?o=Ye:c[1]!==void 0?o=Ge:c[2]!==void 0?(it.test(c[2])&&(i=RegExp("</"+c[2],"g")),o=P):c[3]!==void 0&&(o=P):o===P?c[0]===">"?(o=i??O,h=-1):c[1]===void 0?h=-2:(h=o.lastIndex-c[2].length,p=c[1],o=c[3]===void 0?P:c[3]==='"'?Qe:Ze):o===Qe||o===Ze?o=P:o===Ye||o===Ge?o=O:(o=P,i=void 0);let m=o===P&&n[a+1].startsWith("/>")?" ":"";s+=o===O?l+jt:h>=0?(r.push(p),l.slice(0,h)+tt+l.slice(h)+k+m):l+k+(h===-2?a:m)}return[st(n,s+(n[t]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),r]},D=class n{constructor({strings:e,_$litType$:t},r){let i;this.parts=[];let s=0,o=0,a=e.length-1,l=this.parts,[p,c]=zt(e,t);if(this.el=n.createElement(p,r),A.currentNode=this.el.content,t===2||t===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(i=A.nextNode())!==null&&l.length<a;){if(i.nodeType===1){if(i.hasAttributes())for(let h of i.getAttributeNames())if(h.endsWith(tt)){let f=c[o++],m=i.getAttribute(h).split(k),x=/([.?@])?(.*)/.exec(f);l.push({type:1,index:s,name:x[2],strings:m,ctor:x[1]==="."?ve:x[1]==="?"?be:x[1]==="@"?xe:N}),i.removeAttribute(h)}else h.startsWith(k)&&(l.push({type:6,index:s}),i.removeAttribute(h));if(it.test(i.tagName)){let h=i.textContent.split(k),f=h.length-1;if(f>0){i.textContent=Y?Y.emptyScript:"";for(let m=0;m<f;m++)i.append(h[m],H()),A.nextNode(),l.push({type:2,index:++s});i.append(h[f],H())}}}else if(i.nodeType===8)if(i.data===rt)l.push({type:2,index:s});else{let h=-1;for(;(h=i.data.indexOf(k,h+1))!==-1;)l.push({type:7,index:s}),h+=k.length-1}s++}}static createElement(e,t){let r=E.createElement("template");return r.innerHTML=e,r}};function T(n,e,t=n,r){if(e===w)return e;let i=r!==void 0?t._$Co?.[r]:t._$Cl,s=B(e)?void 0:e._$litDirective$;return i?.constructor!==s&&(i?._$AO?.(!1),s===void 0?i=void 0:(i=new s(n),i._$AT(n,t,r)),r!==void 0?(t._$Co??=[])[r]=i:t._$Cl=i),i!==void 0&&(e=T(n,i._$AS(n,e.values),i,r)),e}var ge=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:r}=this._$AD,i=(e?.creationScope??E).importNode(t,!0);A.currentNode=i;let s=A.nextNode(),o=0,a=0,l=r[0];for(;l!==void 0;){if(o===l.index){let p;l.type===2?p=new I(s,s.nextSibling,this,e):l.type===1?p=new l.ctor(s,l.name,l.strings,this,e):l.type===6&&(p=new ye(s,this,e)),this._$AV.push(p),l=r[++a]}o!==l?.index&&(s=A.nextNode(),o++)}return A.currentNode=E,i}p(e){let t=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,t),t+=r.strings.length-2):r._$AI(e[t])),t++}},I=class n{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,r,i){this.type=2,this._$AH=u,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=r,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=T(this,e,t),B(e)?e===u||e==null||e===""?(this._$AH!==u&&this._$AR(),this._$AH=u):e!==this._$AH&&e!==w&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Ut(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==u&&B(this._$AH)?this._$AA.nextSibling.data=e:this.T(E.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:r}=e,i=typeof r=="number"?this._$AC(e):(r.el===void 0&&(r.el=D.createElement(st(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===i)this._$AH.p(t);else{let s=new ge(i,this),o=s.u(this.options);s.p(t),this.T(o),this._$AH=s}}_$AC(e){let t=et.get(e.strings);return t===void 0&&et.set(e.strings,t=new D(e)),t}k(e){ke(this._$AH)||(this._$AH=[],this._$AR());let t=this._$AH,r,i=0;for(let s of e)i===t.length?t.push(r=new n(this.O(H()),this.O(H()),this,this.options)):r=t[i],r._$AI(s),i++;i<t.length&&(this._$AR(r&&r._$AB.nextSibling,i),t.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let r=Xe(e).nextSibling;Xe(e).remove(),e=r}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},N=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,r,i,s){this.type=1,this._$AH=u,this._$AN=void 0,this.element=e,this.name=t,this._$AM=i,this.options=s,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=u}_$AI(e,t=this,r,i){let s=this.strings,o=!1;if(s===void 0)e=T(this,e,t,0),o=!B(e)||e!==this._$AH&&e!==w,o&&(this._$AH=e);else{let a=e,l,p;for(e=s[0],l=0;l<s.length-1;l++)p=T(this,a[r+l],t,l),p===w&&(p=this._$AH[l]),o||=!B(p)||p!==this._$AH[l],p===u?e=u:e!==u&&(e+=(p??"")+s[l+1]),this._$AH[l]=p}o&&!i&&this.j(e)}j(e){e===u?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}},ve=class extends N{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===u?void 0:e}},be=class extends N{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==u)}},xe=class extends N{constructor(e,t,r,i,s){super(e,t,r,i,s),this.type=5}_$AI(e,t=this){if((e=T(this,e,t,0)??u)===w)return;let r=this._$AH,i=e===u&&r!==u||e.capture!==r.capture||e.once!==r.once||e.passive!==r.passive,s=e!==u&&(r===u||i);i&&this.element.removeEventListener(this.name,this,r),s&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},ye=class{constructor(e,t,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){T(this,e)}};var qt=we.litHtmlPolyfillSupport;qt?.(D,I),(we.litHtmlVersions??=[]).push("3.3.3");var ot=(n,e,t)=>{let r=t?.renderBefore??e,i=r._$litPart$;if(i===void 0){let s=t?.renderBefore??null;r._$litPart$=i=new I(e.insertBefore(H(),s),s,void 0,t??{})}return i._$AI(n),i};var Pe=globalThis,$=class extends y{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=ot(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return w}};$._$litElement$=!0,$.finalized=!0,Pe.litElementHydrateSupport?.({LitElement:$});var Ft=Pe.litElementPolyfillSupport;Ft?.({LitElement:$});(Pe.litElementVersions??=[]).push("4.2.2");var g=class extends ${static properties={app:{attribute:!1}};#e;createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.#t()}disconnectedCallback(){super.disconnectedCallback(),this.#e?.(),this.#e=void 0}willUpdate(e){e.has("app")&&this.#t()}#t(){this.#e?.(),this.#e=this.app?.subscribe(()=>this.requestUpdate())}};var at=nt`<g fill="none" stroke="currentColor" stroke-linecap="round"><path d="M184 56H86q-30 0-30 30v98M328 56h98q30 0 30 30v98M184 456H86q-30 0-30-30v-98M328 456h98q30 0 30-30v-98" stroke-width="34" stroke-linejoin="round"/><path d="M176 182v148m0-148c0 74 60 74 100 74" stroke-width="28"/></g><g fill="currentColor"><circle cx="176" cy="172" r="32"/><circle cx="176" cy="340" r="32"/><path d="M284 200l78 56-78 56z" stroke="currentColor" stroke-width="34" stroke-linejoin="round"/></g>`,R=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 8.5l3 3 6-7"/></svg>`,G=d`<svg viewBox="0 0 16 16" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="M4 4l8 8M12 4l-8 8"/></svg>`,lt=d`<svg viewBox="0 0 16 16" fill="currentColor"><path d="M3 3h1.6v10H3zM13 3.6v8.8a.6.6 0 0 1-.92.5L5.8 8.5a.6.6 0 0 1 0-1l6.28-4.4a.6.6 0 0 1 .92.5z"/></svg>`,pt=d`<svg viewBox="0 0 16 16" fill="currentColor"><path d="M11.4 3H13v10h-1.6zM3 3.6v8.8a.6.6 0 0 0 .92.5l6.28-4.4a.6.6 0 0 0 0-1L3.92 3.1A.6.6 0 0 0 3 3.6z"/></svg>`,ht=d`<svg viewBox="0 0 16 16" fill="currentColor"><path d="M4.5 2.9v10.2a.7.7 0 0 0 1.06.6l8.1-5.1a.7.7 0 0 0 0-1.2l-8.1-5.1a.7.7 0 0 0-1.06.6z"/></svg>`,dt=d`<svg viewBox="0 0 16 16" fill="currentColor"><rect x="3.5" y="2.5" width="3.2" height="11" rx=".8"/><rect x="9.3" y="2.5" width="3.2" height="11" rx=".8"/></svg>`,ct=d`<svg class="spin" viewBox="0 0 50 50" aria-hidden="true"><circle cx="25" cy="25" r="18"/></svg>`,ut=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"><path d="M3 2.75h10a1.25 1.25 0 0 1 1.25 1.25v6.5A1.25 1.25 0 0 1 13 11.75H7.5L4.5 14v-2.25H3A1.25 1.25 0 0 1 1.75 10.5V4A1.25 1.25 0 0 1 3 2.75z"/></svg>`,ft=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4"><rect x="5.25" y="5.25" width="8" height="8" rx="1.5"/><path d="M10.75 3.5V3.25a1.5 1.5 0 0 0-1.5-1.5h-5.5a1.5 1.5 0 0 0-1.5 1.5v5.5a1.5 1.5 0 0 0 1.5 1.5H4"/></svg>`,mt=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 6h2.2L8 3.2v9.6L4.7 10H2.5z" fill="currentColor" stroke="none"/><path d="M10.6 5.6a3.4 3.4 0 0 1 0 4.8M12.4 3.9a5.8 5.8 0 0 1 0 8.2"/></svg>`,gt=d`<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"><path d="M2.5 6h2.2L8 3.2v9.6L4.7 10H2.5z" fill="currentColor" stroke="none"/><path d="M10.5 6l3.5 4M14 6l-3.5 4"/></svg>`,vt=d`<svg viewBox="0 0 50 50"><circle cx="25" cy="25" r="20"/></svg>`;var Z=class extends g{render(){let t=this.app?.meta;return d`<header class="top">
|
|
7
|
+
<svg class="logo" viewBox="0 0 512 512" aria-label="framefields" role="img">${at}</svg>
|
|
8
|
+
<span class="sep" aria-hidden="true"></span>
|
|
9
|
+
<h1>${t?.title??"framefields preview"}</h1>
|
|
10
|
+
<span class="grow"></span>
|
|
11
|
+
<span class="spec tnum"
|
|
12
|
+
>${t?`${t.width}\xD7${t.height} \xB7 ${t.fps} fps \xB7 ${v(t.frameCount-1,t.fps)}`:""}</span
|
|
13
|
+
>
|
|
14
|
+
${this.#e()}
|
|
15
|
+
</header>`}#e(){let e=this.app,t=e?.soundtrack;if(e?.offline)return d`<span
|
|
16
|
+
class="chip"
|
|
17
|
+
data-state="offline"
|
|
18
|
+
role="status"
|
|
19
|
+
aria-live="polite"
|
|
20
|
+
title="The preview command isn't running. This tab reconnects when it starts again."
|
|
21
|
+
><span class="dot"></span><span>Preview stopped</span></span
|
|
22
|
+
>`;let r=t?.state??"mixing",i=r==="mixing"||r==="loading";return d`<span
|
|
23
|
+
class="chip"
|
|
24
|
+
data-state=${r}
|
|
25
|
+
role="status"
|
|
26
|
+
aria-live="polite"
|
|
27
|
+
title=${t?.error??""}
|
|
28
|
+
><span class=${i?"spinner":"dot"}></span
|
|
29
|
+
><span>${F[r]}</span></span
|
|
30
|
+
>`}};var Q=class extends g{#e=null;#t=new ResizeObserver(()=>this.#a());connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.#a)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this.#a),this.#t.disconnect()}get#i(){let e=this.app;if(e)return e.draft?e.draft:e.openId==null?void 0:e.noteById(e.openId)}render(){let e=this.app,t=this.#i,r=e?.meta?e.draft?this.#r(e.draft,e.meta.fps):t?this.#s(t,e.meta.fps):u:u;return d`<div class="pop ${t?"on":""}" role="dialog" aria-label="Note">
|
|
31
|
+
${r}
|
|
32
|
+
</div>`}updated(){let e=this.#l();e&&this.#t.observe(e),this.#a();let t=this.app?.draft??null;t&&t!==this.#e&&this.querySelector("textarea")?.focus(),this.#e=t}#r(e,t){let r=this.app;if(!r)return u;let i=r.saving?"Saving\u2026":r.saveError?"Couldn't save. Is the preview running?":"Enter to add";return d`<div class="pop-head">
|
|
33
|
+
<span class="badge">+</span>
|
|
34
|
+
<span class="tnum"
|
|
35
|
+
>${v(e.frame,t)} · ${e.w!=null?"area":"spot"}</span
|
|
36
|
+
>
|
|
37
|
+
</div>
|
|
38
|
+
<textarea
|
|
39
|
+
placeholder="What should change here?"
|
|
40
|
+
rows="2"
|
|
41
|
+
aria-label="Note"
|
|
42
|
+
.value=${e.text}
|
|
43
|
+
?readonly=${r.saving}
|
|
44
|
+
@input=${this.#o}
|
|
45
|
+
@keydown=${this.#n}
|
|
46
|
+
></textarea>
|
|
47
|
+
<div class="pop-foot">
|
|
48
|
+
<span class="grow ${r.saveError?"err":""}">${i}</span>
|
|
49
|
+
<button class="btn" @click=${()=>r.cancelDraft()}>Cancel</button>
|
|
50
|
+
<button
|
|
51
|
+
class="btn primary"
|
|
52
|
+
?disabled=${!e.text.trim()||r.saving}
|
|
53
|
+
@click=${()=>{r.saveDraft()}}
|
|
54
|
+
>
|
|
55
|
+
Add note
|
|
56
|
+
</button>
|
|
57
|
+
</div>`}#s(e,t){let r=this.app;return r?d`<div class="pop-head">
|
|
58
|
+
<span class="badge ${e.done?"done":""}">${e.id}</span>
|
|
59
|
+
<span class="tnum grow">${v(e.frame,t)} · frame ${e.frame}</span>
|
|
60
|
+
<button
|
|
61
|
+
class="btn x-btn"
|
|
62
|
+
title="Close"
|
|
63
|
+
aria-label="Close"
|
|
64
|
+
@click=${()=>r.closePop()}
|
|
65
|
+
>
|
|
66
|
+
${G}
|
|
67
|
+
</button>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="pop-text">${e.text}</div>
|
|
70
|
+
<div class="pop-foot">
|
|
71
|
+
<button class="btn" @click=${()=>r.setDone(e.id,!e.done)}>
|
|
72
|
+
${R}${e.done?"Reopen":"Mark done"}
|
|
73
|
+
</button>
|
|
74
|
+
<span class="grow"></span>
|
|
75
|
+
<button class="btn danger" @click=${()=>r.removeNote(e.id)}>
|
|
76
|
+
Delete
|
|
77
|
+
</button>
|
|
78
|
+
</div>`:u}#o=e=>{let t=e.target;this.app?.setDraftText(t.value),t.style.height="auto",t.style.height=`${Math.min(180,t.scrollHeight)}px`};#n=e=>{e.key==="Enter"&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),this.app?.saveDraft()),e.key==="Escape"&&(e.preventDefault(),this.app?.cancelDraft())};#l(){return this.closest("ff-preview")?.querySelector("ff-stage .stage")??null}#a=()=>{let e=this.querySelector(".pop"),t=this.#l(),r=this.#i;if(!e||!t||!r)return;let i=t.getBoundingClientRect(),s=(r.w??0)*i.width,o=(r.h??0)*i.height,a=i.left+r.x*i.width+s,l=i.top+r.y*i.height+o,p=e.offsetWidth,c=e.offsetHeight,h=16,f=a+h+p<=innerWidth-8?a+h:a-h-p-s,m=l+h+c<=innerHeight-8?l+h/2:l-c-h/2-o;e.style.left=`${Math.max(8,Math.min(innerWidth-p-8,f))}px`,e.style.top=`${Math.max(8,Math.min(innerHeight-c-8,m))}px`}};var ee=class extends g{#e=!1;render(){let e=this.app;if(!e)return d``;let t=e.meta?.fps??30,r=[...e.notes].sort(U);return d`<div
|
|
79
|
+
class="notes-panel ${e.panelOpen?"on":""}"
|
|
80
|
+
role="dialog"
|
|
81
|
+
aria-label="Notes"
|
|
82
|
+
>
|
|
83
|
+
<div class="np-head">
|
|
84
|
+
<h2>Notes</h2>
|
|
85
|
+
<span class="grow"></span>
|
|
86
|
+
<button
|
|
87
|
+
class="btn"
|
|
88
|
+
title="Copy the open notes, to paste into a chat"
|
|
89
|
+
?disabled=${e.openCount===0}
|
|
90
|
+
@click=${this.#t}
|
|
91
|
+
>
|
|
92
|
+
${ft}<span>${this.#e?"Copied":"Copy"}</span>
|
|
93
|
+
</button>
|
|
94
|
+
<button
|
|
95
|
+
class="btn x-btn"
|
|
96
|
+
title="Close"
|
|
97
|
+
aria-label="Close"
|
|
98
|
+
@click=${()=>e.setPanel(!1)}
|
|
99
|
+
>
|
|
100
|
+
${G}
|
|
101
|
+
</button>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="np-list">
|
|
104
|
+
${r.length?r.map(i=>{let s=i.done?"Reopen":"Mark done";return d`<div
|
|
105
|
+
class="note-row ${i.done?"done":""}"
|
|
106
|
+
@click=${()=>e.goToNote(i.id)}
|
|
107
|
+
>
|
|
108
|
+
<span class="badge ${i.done?"done":""}">${i.id}</span>
|
|
109
|
+
<div>
|
|
110
|
+
<div class="when tnum">
|
|
111
|
+
${v(i.frame,t)} · frame ${i.frame}
|
|
112
|
+
</div>
|
|
113
|
+
<div class="text">${i.text}</div>
|
|
114
|
+
</div>
|
|
115
|
+
<button
|
|
116
|
+
class="check ${i.done?"on":""}"
|
|
117
|
+
title=${s}
|
|
118
|
+
aria-label=${s}
|
|
119
|
+
@click=${o=>{o.stopPropagation(),e.setDone(i.id,!i.done)}}
|
|
120
|
+
>
|
|
121
|
+
${R}
|
|
122
|
+
</button>
|
|
123
|
+
</div>`}):d`<div class="np-empty">
|
|
124
|
+
Pause and click the picture to pin a note to that spot and
|
|
125
|
+
moment. Drag to mark an area.
|
|
126
|
+
</div>`}
|
|
127
|
+
</div>
|
|
128
|
+
<div class="np-foot">
|
|
129
|
+
Saved in ${Ne(e.meta?.notesDir??null)} with a picture of each
|
|
130
|
+
spot. Ask your agent to go through them.
|
|
131
|
+
</div>
|
|
132
|
+
</div>`}#t=async()=>{let e=this.app;if(!e?.meta)return;let t=Te(e.meta.title,e.notes,e.meta.fps);try{await navigator.clipboard.writeText(t)}catch{let r=document.createElement("textarea");r.value=t,document.body.append(r),r.select();let i=document.execCommand("copy");if(r.remove(),!i)return}this.#e=!0,this.requestUpdate(),setTimeout(()=>{this.#e=!1,this.requestUpdate()},1600)}};var te=class extends g{connectedCallback(){super.connectedCallback(),document.addEventListener("pointerdown",this.#e),document.addEventListener("keydown",this.#t)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("pointerdown",this.#e),document.removeEventListener("keydown",this.#t)}render(){let e=this.app;return d`<ff-header .app=${e}></ff-header>
|
|
133
|
+
<main class="player" aria-label="Player">
|
|
134
|
+
<ff-stage .app=${e}></ff-stage>
|
|
135
|
+
<ff-transport .app=${e}></ff-transport>
|
|
136
|
+
<ff-timeline .app=${e}></ff-timeline>
|
|
137
|
+
</main>
|
|
138
|
+
<ff-note-editor .app=${e}></ff-note-editor>`}#e=e=>{let t=this.app,r=e.target;if(!t||!r)return;let i=this.querySelector(".pop"),s=this.querySelector("ff-stage"),o=!!i?.contains(r)||!!s?.contains(r);i?.classList.contains("on")&&!o&&!r.closest(".note-mark, .note-row")&&(t.openId!=null?t.closePop():t.draft&&!t.draft.text.trim()&&t.cancelDraft());let a=this.querySelector(".notes-panel"),l=this.querySelector(".notes-btn");t.panelOpen&&!a?.contains(r)&&!l?.contains(r)&&t.setPanel(!1)};#t=e=>{e.key!=="Escape"||!this.app||(this.app.openId!=null&&this.app.closePop(),this.app.setPanel(!1))}};var bt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},xt=n=>(...e)=>({_$litDirective$:n,values:e}),re=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,r){this._$Ct=e,this._$AM=t,this._$Ci=r}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};var yt="important",Wt=" !"+yt,S=xt(class extends re{constructor(n){if(super(n),n.type!==bt.ATTRIBUTE||n.name!=="style"||n.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(n){return Object.keys(n).reduce((e,t)=>{let r=n[t];return r==null?e:e+`${t=t.includes("-")?t:t.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`},"")}update(n,[e]){let{style:t}=n.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(e)),this.render(e);for(let r of this.ft)e[r]==null&&(this.ft.delete(r),r.includes("-")?t.removeProperty(r):t[r]=null);for(let r in e){let i=e[r];if(i!=null){this.ft.add(r);let s=typeof i=="string"&&i.endsWith(Wt);r.includes("-")||s?t.setProperty(r,s?i.slice(0,-11):i,s?yt:""):t[r]=i}}return w}});var Vt=6,ie=n=>S({left:`${n.x*100}%`,top:`${n.y*100}%`,width:n.w==null?void 0:`${n.w*100}%`,height:n.h==null?void 0:`${n.h*100}%`}),ne=class extends g{#e=null;render(){let e=this.app,t=e?.meta,r=["stage",e?.canNote?"can-note":"",e&&e.notes.length===0&&!e.draft?"hint":""].join(" "),i=t?{"--ar":`${t.width} / ${t.height}`,"--ar-n":String(t.width/t.height)}:{},s=this.#e?.area;return d`<div class="stage-wrap">
|
|
139
|
+
<div
|
|
140
|
+
class=${r}
|
|
141
|
+
style=${S(i)}
|
|
142
|
+
@pointerdown=${this.#r}
|
|
143
|
+
@pointermove=${this.#s}
|
|
144
|
+
@pointerup=${this.#o}
|
|
145
|
+
@pointercancel=${this.#n}
|
|
146
|
+
>
|
|
147
|
+
<canvas id="canvas" aria-label="Rendered frame"></canvas>
|
|
148
|
+
<div class="stage-msg ${e?.pageState==="error"?"on":""}" role="alert">
|
|
149
|
+
${e?.pageState==="error"?e.error:""}
|
|
150
|
+
</div>
|
|
151
|
+
<div class="overlay">${this.#t()}</div>
|
|
152
|
+
<div
|
|
153
|
+
class="marquee"
|
|
154
|
+
style=${s?ie(s):S({display:"none"})}
|
|
155
|
+
></div>
|
|
156
|
+
<div class="stage-hint">Click to pin a note · drag to mark an area</div>
|
|
157
|
+
<div class="toast ${e?.toastOn?"on":""}" role="status" aria-live="polite">
|
|
158
|
+
${e?.toastText}
|
|
159
|
+
</div>
|
|
160
|
+
<div
|
|
161
|
+
class="buffering ${e?.buffering?"on":""}"
|
|
162
|
+
role="status"
|
|
163
|
+
aria-label="Loading"
|
|
164
|
+
>
|
|
165
|
+
${vt}
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>`}get picture(){return this.querySelector(".stage")}#t(){let e=this.app;if(!e?.meta||e.playing)return u;let t=e.notes.filter(r=>r.frame===e.frame);return e.draft&&e.draft.frame===e.frame&&t.push(e.draft),t.map(r=>{let i="done"in r&&r.done,s=r.w!=null?d`<div class="area ${i?"done":""}" style=${ie(r)}></div>`:u;if(!("id"in r))return d`${s}<button
|
|
169
|
+
class="pin draft"
|
|
170
|
+
style=${ie({x:r.x,y:r.y})}
|
|
171
|
+
aria-label="New note"
|
|
172
|
+
></button>`;let o=["pin",i?"done":"",r.id===e.openId?"active":""];return d`${s}<button
|
|
173
|
+
class=${o.join(" ")}
|
|
174
|
+
style=${ie({x:r.x,y:r.y})}
|
|
175
|
+
title=${r.text}
|
|
176
|
+
aria-label="Note ${r.id}"
|
|
177
|
+
@click=${a=>{a.stopPropagation(),e.openCard(r.id)}}
|
|
178
|
+
>
|
|
179
|
+
${i?R:String(r.id)}
|
|
180
|
+
</button>`})}#i(e){let t=e.currentTarget.getBoundingClientRect();return{x:Math.min(1,Math.max(0,(e.clientX-t.left)/t.width)),y:Math.min(1,Math.max(0,(e.clientY-t.top)/t.height))}}#r=e=>{let t=this.app,r=e.target;if(e.button!==0||!t?.player||r.closest(".pin"))return;if(t.playing){t.pause();return}if(!t.notesOn)return;if(t.draft?.text.trim()){this.closest("ff-preview")?.querySelector(".pop textarea")?.focus();return}t.cancelDraft();let i=this.#i(e);this.#e={...i,cx:e.clientX,cy:e.clientY,area:null},e.currentTarget.setPointerCapture(e.pointerId),e.preventDefault()};#s=e=>{let t=this.#e;if(!t||!t.area&&Math.hypot(e.clientX-t.cx,e.clientY-t.cy)<Vt)return;let r=this.#i(e);t.area={x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),w:Math.abs(r.x-t.x),h:Math.abs(r.y-t.y)},this.requestUpdate()};#o=()=>{let e=this.#e;e&&(this.#e=null,this.app?.beginDraft({x:e.x,y:e.y},e.area))};#n=()=>{this.#e=null,this.requestUpdate()}};var Kt=3,se=class extends g{#e=800;#t=null;#i=!1;#r="";#s=new ResizeObserver(()=>{let e=this.#o()?.clientWidth;e&&e!==this.#e&&(this.#e=e,this.requestUpdate()),this.#a(!0)});connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>{let e=this.#o();e&&this.#s.observe(e)})}disconnectedCallback(){super.disconnectedCallback(),this.#s.disconnect()}render(){let e=this.app,t=e?.meta,r=t?.frameCount??1,i=t?.fps??30,s=this.#t===null?null:this.#p(this.#t/Math.max(1,this.#e));return d`<div
|
|
181
|
+
class="timeline"
|
|
182
|
+
aria-label="Timeline"
|
|
183
|
+
@pointerdown=${this.#h}
|
|
184
|
+
@pointermove=${this.#f}
|
|
185
|
+
@pointerleave=${this.#d}
|
|
186
|
+
@pointerup=${this.#u}
|
|
187
|
+
@pointercancel=${this.#u}
|
|
188
|
+
>
|
|
189
|
+
<div class="tl-inner">
|
|
190
|
+
<div class="ruler">
|
|
191
|
+
${t?_e((r-1)/i,this.#e).map(o=>d`<div
|
|
192
|
+
class="tick ${o.major?"major":""}"
|
|
193
|
+
style="left:${o.left}%"
|
|
194
|
+
>
|
|
195
|
+
${o.label?d`<span>${o.label}</span>`:u}
|
|
196
|
+
</div>`):u}
|
|
197
|
+
</div>
|
|
198
|
+
<div class="note-marks">${this.#n()}</div>
|
|
199
|
+
<div class="wave-lane">
|
|
200
|
+
<canvas></canvas>
|
|
201
|
+
${this.#l()}
|
|
202
|
+
</div>
|
|
203
|
+
<div
|
|
204
|
+
class="hover-line"
|
|
205
|
+
style=${S(this.#t===null?{}:{display:"block",left:`${this.#t}px`})}
|
|
206
|
+
></div>
|
|
207
|
+
<div
|
|
208
|
+
class="hover-time"
|
|
209
|
+
style=${S(this.#t===null?{}:{display:"block",left:`${this.#t}px`})}
|
|
210
|
+
>
|
|
211
|
+
${s===null?"":v(s,i)}
|
|
212
|
+
</div>
|
|
213
|
+
<div
|
|
214
|
+
class="playhead"
|
|
215
|
+
style="left:${le(e?.frame??0,r)}%"
|
|
216
|
+
></div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>`}updated(){this.#a(!1)}#o(){return this.querySelector(".tl-inner")}#n(){let e=this.app,t=e?.meta;return!e||!t?u:Ce(e.notes,t.frameCount,this.#e).map(({note:r,lane:i,left:s})=>d`<button
|
|
219
|
+
class="note-mark ${r.done?"done":""} ${i?"stacked":""}"
|
|
220
|
+
style="left:${s}%;top:${4+i*15}px"
|
|
221
|
+
title="${r.id} · ${v(r.frame,t.fps)} · ${r.text}"
|
|
222
|
+
@pointerdown=${o=>o.stopPropagation()}
|
|
223
|
+
@click=${o=>{o.stopPropagation(),e.goToNote(r.id)}}
|
|
224
|
+
>
|
|
225
|
+
${r.id}
|
|
226
|
+
</button>`)}#l(){let e=this.app?.soundtrack.state??"mixing";if(e==="ready")return u;let t=e==="mixing"||e==="loading",r=e==="none"?"No audio in this composition":e==="error"?"Audio could not be mixed":F[e];return d`<div class="wave-state ${t?"shimmer":""}">
|
|
227
|
+
${t?d`<span class="spinner"></span>`:u}${r}
|
|
228
|
+
</div>`}#a(e){let t=this.app,r=this.querySelector(".wave-lane canvas");if(!t||!r)return;let i=t.soundtrack,s=window.devicePixelRatio||1,o=r.clientWidth,a=r.clientHeight,l=`${i.peaksVersion}:${o}x${a}@${s}:${t.meta?.frameCount}:${i.durationSec}`;if(!e&&l===this.#r)return;this.#r=l,r.width=Math.round(o*s),r.height=Math.round(a*s);let p=r.getContext("2d");if(!p)return;p.setTransform(s,0,0,s,0,0),p.clearRect(0,0,o,a);let c=i.peaks,h=t.meta;if(!c?.length||!h)return;let f=Math.max(1e-6,(h.frameCount-1)/h.fps),m=i.durationSec??f,x=Math.min(1,m/f)*o,kt=a/2;p.fillStyle=getComputedStyle(document.documentElement).getPropertyValue("--wave").trim();for(let j=0;j<x;j+=Kt){let $t=Math.max(c[Math.floor(j/x*c.length)]||0,.015),Ee=Math.max(1,Math.sqrt($t)*(a-8));p.fillRect(j,kt-Ee/2,2,Ee)}}#p(e){let t=this.app?.meta?.frameCount??1;return _(Math.min(1,Math.max(0,e))*(t-1),t)}#c(e){let t=this.#o()?.getBoundingClientRect();return t?(e-t.left)/t.width:0}#h=e=>{!this.app?.meta||e.button!==0||(e.currentTarget.setPointerCapture(e.pointerId),this.#i=!0,this.app.seek(this.#p(this.#c(e.clientX))))};#f=e=>{let t=this.app;if(!t?.meta)return;let r=this.#o()?.getBoundingClientRect();if(!r)return;this.#t=Math.min(r.width,Math.max(0,e.clientX-r.left));let i=this.#p(this.#c(e.clientX));this.#i&&i!==t.frame&&t.seek(i),this.requestUpdate()};#d=()=>{this.#t=null,this.requestUpdate()};#u=()=>{this.#i=!1}};var oe=class extends g{render(){let e=this.app,t=e?.meta?.fps??30,r=!!e?.playing,i=e?.soundtrack,s=!!i?.usable,o=!!i?.muted,a=r?"Pause":"Play",l=o?"Unmute":"Mute";return d`<div class="transport">
|
|
229
|
+
<button
|
|
230
|
+
class="icon-btn"
|
|
231
|
+
title="Previous frame"
|
|
232
|
+
aria-label="Previous frame"
|
|
233
|
+
@click=${()=>e?.step(-1)}
|
|
234
|
+
>
|
|
235
|
+
${lt}
|
|
236
|
+
</button>
|
|
237
|
+
<button
|
|
238
|
+
class="play-btn ${e?.stalled?"loading":""}"
|
|
239
|
+
title=${a}
|
|
240
|
+
aria-label=${a}
|
|
241
|
+
?disabled=${!e?.player}
|
|
242
|
+
@click=${()=>e?.togglePlay()}
|
|
243
|
+
>
|
|
244
|
+
${r?dt:ht}${ct}
|
|
245
|
+
</button>
|
|
246
|
+
<button
|
|
247
|
+
class="icon-btn"
|
|
248
|
+
title="Next frame"
|
|
249
|
+
aria-label="Next frame"
|
|
250
|
+
@click=${()=>e?.step(1)}
|
|
251
|
+
>
|
|
252
|
+
${pt}
|
|
253
|
+
</button>
|
|
254
|
+
<div class="timecode tnum">
|
|
255
|
+
<span>${v(e?.frame??0,t)}</span><span class="dim">/</span
|
|
256
|
+
><span class="dim">${v(e?.lastFrame??0,t)}</span>
|
|
257
|
+
<span class="frame">frame ${e?.frame??0}</span>
|
|
258
|
+
</div>
|
|
259
|
+
${this.#e()}
|
|
260
|
+
<span class="grow"></span>
|
|
261
|
+
${e?.notesOn?this.#t():u}
|
|
262
|
+
<ff-notes-panel .app=${e}></ff-notes-panel>
|
|
263
|
+
<button
|
|
264
|
+
class="icon-btn"
|
|
265
|
+
title=${l}
|
|
266
|
+
aria-label=${l}
|
|
267
|
+
?disabled=${!s}
|
|
268
|
+
@click=${()=>i?.setMuted(!i.muted)}
|
|
269
|
+
>
|
|
270
|
+
${o?gt:mt}
|
|
271
|
+
</button>
|
|
272
|
+
<input
|
|
273
|
+
class="slider"
|
|
274
|
+
type="range"
|
|
275
|
+
min="0"
|
|
276
|
+
max="1"
|
|
277
|
+
step="0.01"
|
|
278
|
+
.value=${String(i?.volume??.9)}
|
|
279
|
+
aria-label="Volume"
|
|
280
|
+
?disabled=${!s}
|
|
281
|
+
@input=${p=>i?.setVolume(Number(p.target.value))}
|
|
282
|
+
/>
|
|
283
|
+
</div>`}#e(){let e=this.app,t=e?.fps;if(!t||t.state==="paused"&&t.fps===null)return u;let r=(t.state==="paused"?"Frame rate the last playback reached":"Frame rate playback reaches")+(e?.meta?`; the film runs at ${e.meta.fps} fps`:"");return d`<span class="fps tnum" role="status" title=${r}
|
|
284
|
+
>${t.fps===null?"\u2026 fps":`${t.fps.toFixed(1)} fps`}</span
|
|
285
|
+
>`}#t(){let e=this.app;if(!e)return u;let t=e.openCount;return d`<button
|
|
286
|
+
class="btn notes-btn"
|
|
287
|
+
title="${t} open of ${e.notes.length}"
|
|
288
|
+
aria-haspopup="dialog"
|
|
289
|
+
aria-expanded=${String(e.panelOpen)}
|
|
290
|
+
@click=${()=>e.setPanel(!e.panelOpen)}
|
|
291
|
+
>
|
|
292
|
+
${ut} Notes
|
|
293
|
+
<span class="badge ${t>0?"open":""}">${t||e.notes.length}</span>
|
|
294
|
+
</button>`}};var Xt={"ff-header":Z,"ff-stage":ne,"ff-transport":oe,"ff-timeline":se,"ff-notes-panel":ee,"ff-note-editor":Q,"ff-preview":te};function wt(n=customElements){for(let[e,t]of Object.entries(Xt))n.get(e)||n.define(e,t)}wt();var ae=new W;Le(console,ae.report);var Jt=document.querySelector("ff-preview")??document.body.appendChild(document.createElement("ff-preview"));Jt.app=ae;ae.start().catch(n=>ae.showError(n));
|
|
295
|
+
/*! Bundled license information:
|
|
296
|
+
|
|
297
|
+
@lit/reactive-element/css-tag.js:
|
|
298
|
+
(**
|
|
299
|
+
* @license
|
|
300
|
+
* Copyright 2019 Google LLC
|
|
301
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
302
|
+
*)
|
|
303
|
+
|
|
304
|
+
@lit/reactive-element/reactive-element.js:
|
|
305
|
+
lit-html/lit-html.js:
|
|
306
|
+
lit-element/lit-element.js:
|
|
307
|
+
lit-html/directive.js:
|
|
308
|
+
(**
|
|
309
|
+
* @license
|
|
310
|
+
* Copyright 2017 Google LLC
|
|
311
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
312
|
+
*)
|
|
313
|
+
|
|
314
|
+
lit-html/is-server.js:
|
|
315
|
+
(**
|
|
316
|
+
* @license
|
|
317
|
+
* Copyright 2022 Google LLC
|
|
318
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
319
|
+
*)
|
|
320
|
+
|
|
321
|
+
lit-html/directives/style-map.js:
|
|
322
|
+
(**
|
|
323
|
+
* @license
|
|
324
|
+
* Copyright 2018 Google LLC
|
|
325
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
326
|
+
*)
|
|
327
|
+
*/
|