framefields 2.0.11 → 2.1.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/README.md +22 -5
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +13 -12
- package/dist/{audio-BHanw8Jb.d.mts → audio-C2fLC3Tx.d.mts} +3 -3
- package/dist/{audio-BHanw8Jb.d.mts.map → audio-C2fLC3Tx.d.mts.map} +1 -1
- package/dist/{audio-TAvPwzLR.mjs → audio-DJeVoE8b.mjs} +1 -1
- package/dist/{audio-TAvPwzLR.mjs.map → audio-DJeVoE8b.mjs.map} +1 -1
- package/dist/{audio-COOMNwL5.mjs → audio-D_4SeMRK.mjs} +4 -4
- package/dist/{audio-COOMNwL5.mjs.map → audio-D_4SeMRK.mjs.map} +1 -1
- package/dist/{client-CwRhflHE.mjs → client-dVxUnmHz.mjs} +1 -1
- package/dist/{client-CwRhflHE.mjs.map → client-dVxUnmHz.mjs.map} +1 -1
- package/dist/{dist-C_hjvkdN.mjs → dist-0QGroRYZ.mjs} +1 -1
- package/dist/{dist-C_hjvkdN.mjs.map → dist-0QGroRYZ.mjs.map} +1 -1
- package/dist/{dist-BYqNNwsl.mjs → dist-BY0bIWgr.mjs} +10 -2
- package/dist/dist-BY0bIWgr.mjs.map +1 -0
- package/dist/{dist-Cxi68OuY.mjs → dist-Bun_TUvZ.mjs} +26862 -25638
- package/dist/dist-Bun_TUvZ.mjs.map +1 -0
- package/dist/{dist-BAVZdFEJ.mjs → dist-DlzqyRar.mjs} +75 -618
- package/dist/dist-DlzqyRar.mjs.map +1 -0
- package/dist/{dist-cjs-TsA8LFXC.mjs → dist-cjs-91nR6B7Z.mjs} +3 -3
- package/dist/{dist-cjs-TsA8LFXC.mjs.map → dist-cjs-91nR6B7Z.mjs.map} +1 -1
- package/dist/{dist-cjs-DJ8fcQEe.mjs → dist-cjs-BAIenEMC.mjs} +11 -11
- package/dist/{dist-cjs-DJ8fcQEe.mjs.map → dist-cjs-BAIenEMC.mjs.map} +1 -1
- package/dist/{dist-cjs-BmyyWYWv.mjs → dist-cjs-BEQhh76X.mjs} +2 -2
- package/dist/{dist-cjs-BmyyWYWv.mjs.map → dist-cjs-BEQhh76X.mjs.map} +1 -1
- package/dist/{dist-cjs--pxyGFw2.mjs → dist-cjs-BYPq7pfw.mjs} +1 -1
- package/dist/{dist-cjs--pxyGFw2.mjs.map → dist-cjs-BYPq7pfw.mjs.map} +1 -1
- package/dist/{dist-cjs--lfMLs3U.mjs → dist-cjs-BocDqSCX.mjs} +4 -4
- package/dist/{dist-cjs--lfMLs3U.mjs.map → dist-cjs-BocDqSCX.mjs.map} +1 -1
- package/dist/{dist-cjs-CsU2sZoX.mjs → dist-cjs-CWiNggTl.mjs} +4 -4
- package/dist/{dist-cjs-CsU2sZoX.mjs.map → dist-cjs-CWiNggTl.mjs.map} +1 -1
- package/dist/{dist-cjs-DjzmP0-x.mjs → dist-cjs-CwabutT6.mjs} +13 -13
- package/dist/{dist-cjs-DjzmP0-x.mjs.map → dist-cjs-CwabutT6.mjs.map} +1 -1
- package/dist/{dist-cjs-BDpO-TH_.mjs → dist-cjs-D-EE4Ahy.mjs} +1 -1
- package/dist/{dist-cjs-BDpO-TH_.mjs.map → dist-cjs-D-EE4Ahy.mjs.map} +1 -1
- package/dist/{dist-cjs-CQwmMllY.mjs → dist-cjs-DNtDUWfk.mjs} +6 -6
- package/dist/{dist-cjs-CQwmMllY.mjs.map → dist-cjs-DNtDUWfk.mjs.map} +1 -1
- package/dist/{dist-cjs-CND_ghfH.mjs → dist-cjs-DbZhsgS0.mjs} +1 -1
- package/dist/{dist-cjs-CND_ghfH.mjs.map → dist-cjs-DbZhsgS0.mjs.map} +1 -1
- package/dist/{dist-cjs-CgFzrgj8.mjs → dist-cjs-Dh7REKcN.mjs} +1 -1
- package/dist/{dist-cjs-CgFzrgj8.mjs.map → dist-cjs-Dh7REKcN.mjs.map} +1 -1
- package/dist/{dist-cjs-DT2jJlcK.mjs → dist-cjs-Dobx0Nz-.mjs} +5 -5
- package/dist/{dist-cjs-DT2jJlcK.mjs.map → dist-cjs-Dobx0Nz-.mjs.map} +1 -1
- package/dist/{dist-cjs-DzjrlfbE.mjs → dist-cjs-Du0UpNof.mjs} +14 -14
- package/dist/{dist-cjs-DzjrlfbE.mjs.map → dist-cjs-Du0UpNof.mjs.map} +1 -1
- package/dist/dist-cjs-DyHiUfsr.mjs +6 -0
- package/dist/{dist-cjs-M-8QOgS_.mjs → dist-cjs-HHMfMF5a.mjs} +2 -2
- package/dist/{dist-cjs-M-8QOgS_.mjs.map → dist-cjs-HHMfMF5a.mjs.map} +1 -1
- package/dist/{dist-cjs-BiKQozdJ.mjs → dist-cjs-UJYQzLNT.mjs} +3 -3
- package/dist/{dist-cjs-BiKQozdJ.mjs.map → dist-cjs-UJYQzLNT.mjs.map} +1 -1
- package/dist/{dist-cjs-agQl9T8M.mjs → dist-cjs-UKxm5cFR.mjs} +6 -6
- package/dist/{dist-cjs-agQl9T8M.mjs.map → dist-cjs-UKxm5cFR.mjs.map} +1 -1
- package/dist/{dist-CbG3QxDw.mjs → dist-fjKpBYkc.mjs} +12 -27
- package/dist/dist-fjKpBYkc.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +36 -34
- package/dist/{effects-DzbjFhyA.mjs → effects-FTlu0dri.mjs} +3 -3
- package/dist/{effects-DzbjFhyA.mjs.map → effects-FTlu0dri.mjs.map} +1 -1
- package/dist/{event-streams-BaNGaLxh.mjs → event-streams-DnRe8uwT.mjs} +2 -2
- package/dist/{event-streams-BaNGaLxh.mjs.map → event-streams-DnRe8uwT.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +3 -1
- package/dist/{fonts-C0W6TgJk.mjs → fonts-UM5xaBOx.mjs} +24 -11
- package/dist/fonts-UM5xaBOx.mjs.map +1 -0
- package/dist/gpu-RkpiFGOA.mjs +215 -0
- package/dist/gpu-RkpiFGOA.mjs.map +1 -0
- package/dist/{index-CYGpSVsf.d.mts → index-CHQ39_Oe.d.mts} +2 -2
- package/dist/{index-CYGpSVsf.d.mts.map → index-CHQ39_Oe.d.mts.map} +1 -1
- package/dist/{index-CDoTrMs1.d.mts → index-CzQseCtg.d.mts} +8 -8
- package/dist/{index-CDoTrMs1.d.mts.map → index-CzQseCtg.d.mts.map} +1 -1
- package/dist/{index-DDEPvMww.d.mts → index-D67p-rHX.d.mts} +3452 -1675
- package/dist/index-D67p-rHX.d.mts.map +1 -0
- package/dist/{index-9B8CJowc.d.mts → index-DPicEt8H.d.mts} +10 -2
- package/dist/index-DPicEt8H.d.mts.map +1 -0
- package/dist/{index-DGJp1d30.d.mts → index-Db8Z3AtX.d.mts} +3 -3
- package/dist/{index-DGJp1d30.d.mts.map → index-Db8Z3AtX.d.mts.map} +1 -1
- package/dist/{index-DRZu3ezy.d.mts → index-DsOqONsj.d.mts} +3 -3
- package/dist/{index-DRZu3ezy.d.mts.map → index-DsOqONsj.d.mts.map} +1 -1
- package/dist/{index-DnWsbbuZ.d.mts → index-l03NV8JS.d.mts} +7 -2
- package/dist/index-l03NV8JS.d.mts.map +1 -0
- package/dist/index.d.mts +28 -1841
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +79 -65
- package/dist/index.mjs.map +1 -1
- package/dist/{package-XpCRbTOA.mjs → package-CudzAF-n.mjs} +1 -1
- package/dist/{package-XpCRbTOA.mjs.map → package-CudzAF-n.mjs.map} +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +13 -12
- package/dist/{preview-BV2C4Fk6.mjs → preview-DwClLMlU.mjs} +3 -3
- package/dist/{preview-BV2C4Fk6.mjs.map → preview-DwClLMlU.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-Y6HWYPKX.mjs → chunk-3GNP7TJH.mjs} +3 -3
- package/dist/preview-engine/{chunk-LIHUEYI5.mjs → chunk-44CQSOYE.mjs} +2 -2
- package/dist/preview-engine/{chunk-6JW37VJA.mjs → chunk-5AUB4Y3L.mjs} +3 -23
- package/dist/preview-engine/chunk-5DOD2NVY.mjs +26 -0
- package/dist/preview-engine/chunk-5FC7GOWW.mjs +474 -0
- package/dist/preview-engine/chunk-5W4AFQP7.mjs +97 -0
- package/dist/preview-engine/chunk-63SFBHEH.mjs +1 -0
- package/dist/preview-engine/chunk-7EPIRODI.mjs +91 -0
- package/dist/preview-engine/{chunk-PQD5UPHG.mjs → chunk-7G3XIOP7.mjs} +1 -1
- package/dist/preview-engine/chunk-7J2FWGVD.mjs +1 -0
- package/dist/preview-engine/chunk-AXHB4J37.mjs +147 -0
- package/dist/preview-engine/chunk-AY7UX37L.mjs +450 -0
- package/dist/preview-engine/chunk-B43Z3J7J.mjs +5 -0
- package/dist/preview-engine/chunk-BWJS6G7R.mjs +314 -0
- package/dist/preview-engine/{chunk-24DXIKXL.mjs → chunk-DIGIQ5MJ.mjs} +2 -2
- package/dist/preview-engine/{chunk-AEK5BO3J.mjs → chunk-E4RAFHZM.mjs} +1 -1
- package/dist/preview-engine/chunk-ENKKLU7B.mjs +22 -0
- package/dist/preview-engine/{chunk-XLFYM7KH.mjs → chunk-EVXWDOCL.mjs} +2 -2
- package/dist/preview-engine/{chunk-EQ4QZRXB.mjs → chunk-EYWPOCZW.mjs} +2 -2
- package/dist/preview-engine/{chunk-IYVN2QEL.mjs → chunk-FLPSWDX4.mjs} +1 -1
- package/dist/preview-engine/chunk-FU7AIAMM.mjs +88 -0
- package/dist/preview-engine/{chunk-CBM7B7EW.mjs → chunk-GMGGDADT.mjs} +1 -1
- package/dist/preview-engine/chunk-GSFN4WCH.mjs +62 -0
- package/dist/preview-engine/chunk-HE4R7EZM.mjs +121 -0
- package/dist/preview-engine/chunk-IQC2I5A5.mjs +1 -0
- package/dist/preview-engine/{chunk-RJUAM52F.mjs → chunk-IR5DNNWR.mjs} +3 -23
- package/dist/preview-engine/chunk-IUPDOATX.mjs +114 -0
- package/dist/preview-engine/{chunk-GHMCGTJ2.mjs → chunk-J2R5R7YY.mjs} +3 -23
- package/dist/preview-engine/chunk-JAJOZG5P.mjs +1 -0
- package/dist/preview-engine/chunk-JXNG2ACR.mjs +118 -0
- package/dist/preview-engine/{chunk-V6VU46ZG.mjs → chunk-L6BH5J4P.mjs} +1 -1
- package/dist/preview-engine/chunk-LGVEFPOG.mjs +3 -0
- package/dist/preview-engine/{chunk-MDDF2GCF.mjs → chunk-MLY5M7Y5.mjs} +3 -23
- package/dist/preview-engine/chunk-NPD6W3RP.mjs +1 -0
- package/dist/preview-engine/chunk-OCX5AD23.mjs +1 -0
- package/dist/preview-engine/{chunk-D3TETPLI.mjs → chunk-OG62XGCT.mjs} +1 -1
- package/dist/preview-engine/chunk-OJ2PKBXE.mjs +40 -0
- package/dist/preview-engine/chunk-OKH2VU2U.mjs +97 -0
- package/dist/preview-engine/chunk-PAQNDZQB.mjs +83 -0
- package/dist/preview-engine/chunk-PEWYB6WP.mjs +43 -0
- package/dist/preview-engine/chunk-PL4IH5V4.mjs +89 -0
- package/dist/preview-engine/chunk-PSRQA3QW.mjs +84 -0
- package/dist/preview-engine/{chunk-QYRDQMNB.mjs → chunk-PXT52LEH.mjs} +3 -23
- package/dist/preview-engine/chunk-Q22PJXFJ.mjs +69 -0
- package/dist/preview-engine/chunk-Q4Z54DQ7.mjs +1 -0
- package/dist/preview-engine/{chunk-BHFI3Y4T.mjs → chunk-QBEUICZD.mjs} +1 -1
- package/dist/preview-engine/chunk-RQLMW6MA.mjs +4 -0
- package/dist/preview-engine/chunk-RSMO7NPN.mjs +1 -0
- package/dist/preview-engine/chunk-RW2F3XLQ.mjs +90 -0
- package/dist/preview-engine/{chunk-25IW7NYO.mjs → chunk-S2CTIJSI.mjs} +1 -1
- package/dist/preview-engine/chunk-SGPRLTNF.mjs +52 -0
- package/dist/preview-engine/{chunk-Y6FEU4TV.mjs → chunk-SZW5J72T.mjs} +3 -23
- package/dist/preview-engine/{chunk-ECPP3UG6.mjs → chunk-T2FE5VOW.mjs} +3 -23
- package/dist/preview-engine/{chunk-ZSIJB76A.mjs → chunk-TS3JI3BH.mjs} +2 -2
- package/dist/preview-engine/{chunk-AMBSW6OA.mjs → chunk-U4JIFQRR.mjs} +2 -2
- package/dist/preview-engine/{chunk-BJKH76OM.mjs → chunk-VXS5SIEC.mjs} +3 -23
- package/dist/preview-engine/chunk-WFGJXCZT.mjs +53 -0
- package/dist/preview-engine/chunk-WH5Q2NFN.mjs +32 -0
- package/dist/preview-engine/{chunk-AWTH2WZO.mjs → chunk-WUKH7BD7.mjs} +1 -1
- package/dist/preview-engine/chunk-XC5WZNOY.mjs +1448 -0
- package/dist/preview-engine/chunk-YQZOGEPZ.mjs +186 -0
- package/dist/preview-engine/{chunk-6256GQFP.mjs → chunk-ZDQF3OTC.mjs} +1 -1
- package/dist/preview-engine/chunk-ZIIFTWDH.mjs +58 -0
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +127 -130
- package/dist/preview-engine/player.mjs +6 -6
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -0
- package/dist/preview-engine/renderers-2ILG23ED.mjs +1 -0
- package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -0
- package/dist/preview-engine/renderers-2SVWAB42.mjs +1 -0
- package/dist/preview-engine/renderers-2VN3AH45.mjs +104 -0
- package/dist/preview-engine/renderers-3RC5FDWX.mjs +1 -0
- package/dist/preview-engine/renderers-57WDL6XN.mjs +1 -0
- package/dist/preview-engine/{renderers-CAUWP4XH.mjs → renderers-6OGFUSH6.mjs} +3 -23
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -0
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -0
- package/dist/preview-engine/renderers-A6HM64UZ.mjs +1 -0
- package/dist/preview-engine/{renderers-WLH4HRUE.mjs → renderers-A7VH3ON5.mjs} +1 -1
- package/dist/preview-engine/renderers-B7DSGUMI.mjs +1 -0
- package/dist/preview-engine/renderers-BFNJ7VCI.mjs +1 -0
- package/dist/preview-engine/renderers-BSKZXITT.mjs +35 -0
- package/dist/preview-engine/renderers-CGYIDAVV.mjs +1 -0
- package/dist/preview-engine/renderers-CRRLV7IO.mjs +1 -0
- package/dist/preview-engine/{renderers-JQHUBWLL.mjs → renderers-D6T6IPER.mjs} +3 -23
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -0
- package/dist/preview-engine/renderers-ECA3P4ON.mjs +1 -0
- package/dist/preview-engine/{renderers-W5CVDJVH.mjs → renderers-F55XFVMP.mjs} +1 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -0
- package/dist/preview-engine/renderers-H46TS3IG.mjs +228 -0
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -0
- package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -0
- package/dist/preview-engine/renderers-JHFT27YU.mjs +1 -0
- package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -0
- package/dist/preview-engine/renderers-MON4QFRF.mjs +1 -0
- package/dist/preview-engine/renderers-NQXMYNSY.mjs +1 -0
- package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -0
- package/dist/preview-engine/renderers-ORAIXUL3.mjs +1 -0
- package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -0
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -0
- package/dist/preview-engine/renderers-QVZVEYP5.mjs +1 -0
- package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -0
- package/dist/preview-engine/renderers-RKDPX5JU.mjs +1 -0
- package/dist/preview-engine/{renderers-2US2NIUG.mjs → renderers-RLHTNLRE.mjs} +3 -23
- package/dist/preview-engine/renderers-SBFF7JP5.mjs +1 -0
- package/dist/preview-engine/renderers-SCJ6OKTB.mjs +1 -0
- package/dist/preview-engine/renderers-T4JMJXWL.mjs +1 -0
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -0
- package/dist/preview-engine/renderers-U6KY34TP.mjs +100 -0
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -0
- package/dist/preview-engine/renderers-UNK6I4JJ.mjs +1 -0
- package/dist/preview-engine/renderers-UPTJJE5F.mjs +1 -0
- package/dist/preview-engine/renderers-W773SBPV.mjs +1 -0
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -0
- package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -0
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -0
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -0
- package/dist/preview-engine/renderers-ZHTX73PR.mjs +1 -0
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/skia-canvas-QBXAOGPB.mjs +1 -0
- package/dist/{program-BmNKgzja.mjs → program-BqFVw5Mu.mjs} +93 -2335
- package/dist/program-BqFVw5Mu.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +3 -3
- package/dist/{renderer-CnXW28b9.mjs → renderer-2Nf9ypST.mjs} +85 -279
- package/dist/renderer-2Nf9ypST.mjs.map +1 -0
- package/dist/{renderer-BREIjsUU.mjs → renderer-2uN2cd0y.mjs} +14 -40
- package/dist/renderer-2uN2cd0y.mjs.map +1 -0
- package/dist/renderer-31jAuNzF.mjs +5 -0
- package/dist/renderer-36EI7Rsz.mjs +5 -0
- package/dist/renderer-3io-cjTt.mjs +5 -0
- package/dist/renderer-9_zWTHbg.mjs +5 -0
- package/dist/{renderer-WSGuj_V6.mjs → renderer-B12_76qk.mjs} +4 -3
- package/dist/{renderer-WSGuj_V6.mjs.map → renderer-B12_76qk.mjs.map} +1 -1
- package/dist/{renderer-bsWnRNpJ.mjs → renderer-B4oS8ZFO.mjs} +29 -98
- package/dist/renderer-B4oS8ZFO.mjs.map +1 -0
- package/dist/renderer-B6KnbfdA.mjs +5 -0
- package/dist/renderer-B7Y2bmRc.mjs +5 -0
- package/dist/renderer-BA6miaaI.mjs +5 -0
- package/dist/{renderer-Bv6q84TU.mjs → renderer-BGr_cBKV.mjs} +61 -208
- package/dist/renderer-BGr_cBKV.mjs.map +1 -0
- package/dist/renderer-BHi-Q6Z_.mjs +5 -0
- package/dist/{renderer-Bv21DbWy.mjs → renderer-BLcu9RDt.mjs} +3 -1
- package/dist/{renderer-D2XD4QYk.mjs → renderer-BO2lYmtE.mjs} +34 -147
- package/dist/renderer-BO2lYmtE.mjs.map +1 -0
- package/dist/renderer-BOlN9HeG.mjs +5 -0
- package/dist/renderer-BSitV56h.mjs +268 -0
- package/dist/renderer-BSitV56h.mjs.map +1 -0
- package/dist/renderer-BTOW-ceB.mjs +5 -0
- package/dist/{renderer-Bhdf90Zq.mjs → renderer-BYqfkwLf.mjs} +51 -163
- package/dist/renderer-BYqfkwLf.mjs.map +1 -0
- package/dist/{renderer-bZU_ndxf.mjs → renderer-BajIOuZH.mjs} +2 -2
- package/dist/{renderer-bZU_ndxf.mjs.map → renderer-BajIOuZH.mjs.map} +1 -1
- package/dist/{renderer-DirxsOjq.mjs → renderer-BgnJUx24.mjs} +80 -258
- package/dist/renderer-BgnJUx24.mjs.map +1 -0
- package/dist/renderer-BiQ0PYOp.mjs +5 -0
- package/dist/{renderer-DIgsilTw.mjs → renderer-BjTq3a0L.mjs} +5 -4
- package/dist/{renderer-DIgsilTw.mjs.map → renderer-BjTq3a0L.mjs.map} +1 -1
- package/dist/{renderer-DEJwPRkR.mjs → renderer-BkN20ZKO.mjs} +15 -51
- package/dist/renderer-BkN20ZKO.mjs.map +1 -0
- package/dist/renderer-Bla7GDyV.mjs +5 -0
- package/dist/renderer-BoYyLVKy.mjs +5 -0
- package/dist/{renderer-D7zvPHKn.mjs → renderer-BpZaHFRc.mjs} +18 -28
- package/dist/renderer-BpZaHFRc.mjs.map +1 -0
- package/dist/renderer-BqOgb7bM.mjs +5 -0
- package/dist/{renderer-cgxO2xN6.mjs → renderer-Bq_dO0LG.mjs} +10 -17
- package/dist/renderer-Bq_dO0LG.mjs.map +1 -0
- package/dist/renderer-BqeM8yTJ.mjs +5 -0
- package/dist/{renderer-dncoIVdd.mjs → renderer-BqsV75Ml.mjs} +3 -1
- package/dist/{renderer-ChdLYS-G.mjs → renderer-Bs4tz_pw.mjs} +20 -87
- package/dist/renderer-Bs4tz_pw.mjs.map +1 -0
- package/dist/{renderer-DpGc-N3G.mjs → renderer-Bsaokil3.mjs} +24 -104
- package/dist/renderer-Bsaokil3.mjs.map +1 -0
- package/dist/{renderer-CXn5HAnK.mjs → renderer-BvG1GF1c.mjs} +10 -16
- package/dist/renderer-BvG1GF1c.mjs.map +1 -0
- package/dist/{renderer-CI7sG_cv.mjs → renderer-BvpSIFkw.mjs} +83 -266
- package/dist/renderer-BvpSIFkw.mjs.map +1 -0
- package/dist/{renderer-B8UaFNqb.mjs → renderer-BwAqwTQq.mjs} +62 -209
- package/dist/renderer-BwAqwTQq.mjs.map +1 -0
- package/dist/{renderer-CzPWB0Ss.mjs → renderer-BwVfhrEx.mjs} +13 -45
- package/dist/renderer-BwVfhrEx.mjs.map +1 -0
- package/dist/renderer-BzpRe50i.mjs +5 -0
- package/dist/renderer-C0eAPwpr.mjs +5 -0
- package/dist/{renderer-CtyD_Xju.mjs → renderer-C3RfT8Gv.mjs} +59 -194
- package/dist/renderer-C3RfT8Gv.mjs.map +1 -0
- package/dist/{renderer-B1YMwl2B.mjs → renderer-C3cYDT3m.mjs} +3 -1
- package/dist/{renderer-1VuQTY1Z.mjs → renderer-CEGbqT2m.mjs} +236 -96
- package/dist/renderer-CEGbqT2m.mjs.map +1 -0
- package/dist/{renderer-DxTs4Iyi.mjs → renderer-CGldH-Zx.mjs} +40 -142
- package/dist/renderer-CGldH-Zx.mjs.map +1 -0
- package/dist/renderer-CGn8V63v.mjs +5 -0
- package/dist/{renderer-kwmlLQOO.mjs → renderer-CH9Qtpy7.mjs} +4 -4
- package/dist/{renderer-kwmlLQOO.mjs.map → renderer-CH9Qtpy7.mjs.map} +1 -1
- package/dist/{renderer-ho_jXJ0H.mjs → renderer-CLyuu_19.mjs} +23 -117
- package/dist/renderer-CLyuu_19.mjs.map +1 -0
- package/dist/renderer-CM5Syo9r.mjs +5 -0
- package/dist/{renderer-D2nCGcjv.mjs → renderer-CRIM_XRK.mjs} +3 -3
- package/dist/{renderer-D2nCGcjv.mjs.map → renderer-CRIM_XRK.mjs.map} +1 -1
- package/dist/{renderer-BTdOMMEx.d.mts → renderer-CTGe8SqQ.d.mts} +2 -2
- package/dist/{renderer-BTdOMMEx.d.mts.map → renderer-CTGe8SqQ.d.mts.map} +1 -1
- package/dist/renderer-CWCEW6Wv.mjs +5 -0
- package/dist/{renderer-Dy0utCl7.mjs → renderer-CgyOylPO.mjs} +10 -17
- package/dist/renderer-CgyOylPO.mjs.map +1 -0
- package/dist/{renderer-C_TPMHiH.mjs → renderer-CjT5Zy-J.mjs} +81 -221
- package/dist/renderer-CjT5Zy-J.mjs.map +1 -0
- package/dist/{renderer-_uvdg48N.mjs → renderer-Cjq1s3br.mjs} +24 -93
- package/dist/renderer-Cjq1s3br.mjs.map +1 -0
- package/dist/renderer-Cl70zxkP.mjs +5 -0
- package/dist/renderer-ClJjoVpB.mjs +6 -0
- package/dist/{renderer-BSaYG8aw.mjs → renderer-CpKNqciR.mjs} +3 -1
- package/dist/{renderer-Bfgd4N0O.mjs → renderer-Cwhux4VX.mjs} +9 -16
- package/dist/renderer-Cwhux4VX.mjs.map +1 -0
- package/dist/{renderer-BJ1aTkZf.mjs → renderer-D0nWLogn.mjs} +99 -282
- package/dist/renderer-D0nWLogn.mjs.map +1 -0
- package/dist/{renderer-vqkKWqa5.mjs → renderer-D1lynYuy.mjs} +23 -107
- package/dist/renderer-D1lynYuy.mjs.map +1 -0
- package/dist/{renderer-B8-kzZdP.mjs → renderer-D4sYVV-I.mjs} +41 -140
- package/dist/renderer-D4sYVV-I.mjs.map +1 -0
- package/dist/{renderer-Bc04fivZ.mjs → renderer-D5z3WDkm.mjs} +99 -287
- package/dist/renderer-D5z3WDkm.mjs.map +1 -0
- package/dist/renderer-D8C-pamu.mjs +148 -0
- package/dist/renderer-D8C-pamu.mjs.map +1 -0
- package/dist/{renderer-D_1oDOCP.mjs → renderer-DAtBnNGC.mjs} +14 -69
- package/dist/renderer-DAtBnNGC.mjs.map +1 -0
- package/dist/{renderer-DZGtBUCx.mjs → renderer-DG1NFsSV.mjs} +35 -185
- package/dist/renderer-DG1NFsSV.mjs.map +1 -0
- package/dist/{renderer-BM05sB8m.mjs → renderer-DHAErBtJ.mjs} +11 -74
- package/dist/renderer-DHAErBtJ.mjs.map +1 -0
- package/dist/{renderer-RKsXlF_0.mjs → renderer-DIDSmoFA.mjs} +73 -73
- package/dist/{renderer-RKsXlF_0.mjs.map → renderer-DIDSmoFA.mjs.map} +1 -1
- package/dist/{renderer-BDbTWSpP.mjs → renderer-DKtP7-fr.mjs} +58 -234
- package/dist/renderer-DKtP7-fr.mjs.map +1 -0
- package/dist/renderer-DLnF-V_h.mjs +5 -0
- package/dist/renderer-DN1rjmcL.mjs +5 -0
- package/dist/{renderer-CfC_aiew.mjs → renderer-DOEsFT7Q.mjs} +57 -192
- package/dist/renderer-DOEsFT7Q.mjs.map +1 -0
- package/dist/{renderer-Ctk2zzfy.mjs → renderer-DPYB6ZcB.mjs} +57 -197
- package/dist/renderer-DPYB6ZcB.mjs.map +1 -0
- package/dist/{renderer-CWTpc4ff.mjs → renderer-DRsPCkxr.mjs} +76 -210
- package/dist/renderer-DRsPCkxr.mjs.map +1 -0
- package/dist/renderer-DXTw9Oqb.mjs +5 -0
- package/dist/{renderer-CaaOKMSd.mjs → renderer-DZLJnnU2.mjs} +63 -190
- package/dist/renderer-DZLJnnU2.mjs.map +1 -0
- package/dist/{renderer-B2ieylQ3.mjs → renderer-DZrQffIP.mjs} +56 -167
- package/dist/renderer-DZrQffIP.mjs.map +1 -0
- package/dist/renderer-DbAVSBNI.mjs +5 -0
- package/dist/renderer-Dg8rD--8.mjs +5 -0
- package/dist/{renderer-DML9qpmS.mjs → renderer-DhEyjn6Q.mjs} +52 -202
- package/dist/renderer-DhEyjn6Q.mjs.map +1 -0
- package/dist/{renderer-CdciwwMI.mjs → renderer-Dmv_Aj6x.mjs} +161 -457
- package/dist/renderer-Dmv_Aj6x.mjs.map +1 -0
- package/dist/renderer-DnFxegGu.mjs +5 -0
- package/dist/renderer-DnfmelHn.mjs +5 -0
- package/dist/{renderer-BIIWCg_J.mjs → renderer-Dpj68gTn.mjs} +11 -18
- package/dist/renderer-Dpj68gTn.mjs.map +1 -0
- package/dist/renderer-DuOjzggd.mjs +5 -0
- package/dist/renderer-DuuOlYIG.mjs +3 -0
- package/dist/renderer-DvYql0Cl.mjs +5 -0
- package/dist/{renderer-BfAWZziM.mjs → renderer-DzhRNdBS.mjs} +58 -225
- package/dist/renderer-DzhRNdBS.mjs.map +1 -0
- package/dist/renderer-GSFP7v2z.mjs +3 -0
- package/dist/renderer-LfUdjgjF.mjs +5 -0
- package/dist/{renderer-Djlb4TLO.mjs → renderer-Q63y7HP_.mjs} +8 -15
- package/dist/renderer-Q63y7HP_.mjs.map +1 -0
- package/dist/renderer-SecCv3U8.mjs +5 -0
- package/dist/{renderer-BhZZEyFX.mjs → renderer-mp1NN5zk.mjs} +4 -4
- package/dist/{renderer-BhZZEyFX.mjs.map → renderer-mp1NN5zk.mjs.map} +1 -1
- package/dist/renderer-oZyoB4CT.mjs +5 -0
- package/dist/renderer-rzci_kTy.mjs +5 -0
- package/dist/{renderer-CpkiHRhh.mjs → renderer-to9DwqXK.mjs} +17 -99
- package/dist/renderer-to9DwqXK.mjs.map +1 -0
- package/dist/{renderer-CepMDQ06.mjs → renderer-v0vuUUUI.mjs} +19 -106
- package/dist/renderer-v0vuUUUI.mjs.map +1 -0
- package/dist/renderer-vLaZuZbX.mjs +5 -0
- package/dist/{renderers-CP8CFWDs-DwQTx8S7.mjs → renderers-CP8CFWDs-DlFq8jmz.mjs} +4 -4
- package/dist/{renderers-CP8CFWDs-DwQTx8S7.mjs.map → renderers-CP8CFWDs-DlFq8jmz.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +7 -7
- package/dist/{signals-Bv1OweKd.mjs → signals-BDkO0xcZ.mjs} +3 -3
- package/dist/{signals-Bv1OweKd.mjs.map → signals-BDkO0xcZ.mjs.map} +1 -1
- package/dist/{signin-Db08vl-g.mjs → signin-SVSXQw9i.mjs} +9 -9
- package/dist/{signin-Db08vl-g.mjs.map → signin-SVSXQw9i.mjs.map} +1 -1
- package/dist/{sso-oidc-CpLz_lIu.mjs → sso-oidc-B3Sagl43.mjs} +9 -9
- package/dist/{sso-oidc-CpLz_lIu.mjs.map → sso-oidc-B3Sagl43.mjs.map} +1 -1
- package/dist/{sts-BQefGuml.mjs → sts-CYeWec9i.mjs} +2 -2
- package/dist/{sts-Dgl0kH-t.mjs → sts-ClVtt-bV.mjs} +9 -9
- package/dist/{sts-Dgl0kH-t.mjs.map → sts-ClVtt-bV.mjs.map} +1 -1
- package/package.json +55 -55
- package/dist/dist-BAVZdFEJ.mjs.map +0 -1
- package/dist/dist-BYqNNwsl.mjs.map +0 -1
- package/dist/dist-CbG3QxDw.mjs.map +0 -1
- package/dist/dist-Cxi68OuY.mjs.map +0 -1
- package/dist/dist-cjs-3pon9kTt.mjs +0 -6
- package/dist/fonts-C0W6TgJk.mjs.map +0 -1
- package/dist/index-9B8CJowc.d.mts.map +0 -1
- package/dist/index-DDEPvMww.d.mts.map +0 -1
- package/dist/index-DnWsbbuZ.d.mts.map +0 -1
- package/dist/preview-engine/chunk-36YGYLKD.mjs +0 -58
- package/dist/preview-engine/chunk-7O24H4YT.mjs +0 -117
- package/dist/preview-engine/chunk-AUFSM5KI.mjs +0 -141
- package/dist/preview-engine/chunk-BQ65MU6H.mjs +0 -138
- package/dist/preview-engine/chunk-BWDARDO6.mjs +0 -117
- package/dist/preview-engine/chunk-DLXQDDIN.mjs +0 -46
- package/dist/preview-engine/chunk-EJGLUZMW.mjs +0 -1
- package/dist/preview-engine/chunk-FE6RSVKZ.mjs +0 -73
- package/dist/preview-engine/chunk-FGHOHCFG.mjs +0 -110
- package/dist/preview-engine/chunk-HPIULG7P.mjs +0 -111
- package/dist/preview-engine/chunk-HRIKNYPF.mjs +0 -60
- package/dist/preview-engine/chunk-IMV5SBQV.mjs +0 -1
- package/dist/preview-engine/chunk-JPXQPP6J.mjs +0 -1
- package/dist/preview-engine/chunk-K52S5DJX.mjs +0 -109
- package/dist/preview-engine/chunk-L3IEJZ5S.mjs +0 -474
- package/dist/preview-engine/chunk-M7NMFDJ3.mjs +0 -3
- package/dist/preview-engine/chunk-MJM3NFEC.mjs +0 -315
- package/dist/preview-engine/chunk-NFAGEP43.mjs +0 -1448
- package/dist/preview-engine/chunk-NRHSNPZV.mjs +0 -182
- package/dist/preview-engine/chunk-OWOSYNMF.mjs +0 -104
- package/dist/preview-engine/chunk-Q66QQI6N.mjs +0 -8
- package/dist/preview-engine/chunk-QGBSLNFI.mjs +0 -52
- package/dist/preview-engine/chunk-QM3XFEJN.mjs +0 -63
- package/dist/preview-engine/chunk-R3ZH7YF3.mjs +0 -89
- package/dist/preview-engine/chunk-R6YNSBKL.mjs +0 -108
- package/dist/preview-engine/chunk-S4CSX6K5.mjs +0 -610
- package/dist/preview-engine/chunk-SNYAHQ25.mjs +0 -186
- package/dist/preview-engine/chunk-SRT2OCQW.mjs +0 -1
- package/dist/preview-engine/chunk-SUUUYXXT.mjs +0 -1
- package/dist/preview-engine/chunk-T6COGNOW.mjs +0 -134
- package/dist/preview-engine/chunk-XFYXT76H.mjs +0 -52
- package/dist/preview-engine/chunk-XUM42I4R.mjs +0 -1
- package/dist/preview-engine/chunk-YITWSOG4.mjs +0 -103
- package/dist/preview-engine/chunk-ZDCA6NVT.mjs +0 -82
- package/dist/preview-engine/chunk-ZNGOAGAI.mjs +0 -1
- package/dist/preview-engine/renderers-27Q5X3U6.mjs +0 -1
- package/dist/preview-engine/renderers-4AHH6BHF.mjs +0 -1
- package/dist/preview-engine/renderers-5BV6JGTU.mjs +0 -248
- package/dist/preview-engine/renderers-6PRVCTYV.mjs +0 -1
- package/dist/preview-engine/renderers-76PQY2SO.mjs +0 -1
- package/dist/preview-engine/renderers-7X2W6QWX.mjs +0 -1
- package/dist/preview-engine/renderers-B52QT6MT.mjs +0 -55
- package/dist/preview-engine/renderers-BE6RVJSE.mjs +0 -1
- package/dist/preview-engine/renderers-BMM2BH56.mjs +0 -1
- package/dist/preview-engine/renderers-CHOGQHVQ.mjs +0 -1
- package/dist/preview-engine/renderers-CRKRWR2Y.mjs +0 -1
- package/dist/preview-engine/renderers-DEYDSGJX.mjs +0 -1
- package/dist/preview-engine/renderers-DZTNRCR7.mjs +0 -1
- package/dist/preview-engine/renderers-ELO3KWTK.mjs +0 -1
- package/dist/preview-engine/renderers-EOJMPPAQ.mjs +0 -1
- package/dist/preview-engine/renderers-F2KJNDWA.mjs +0 -124
- package/dist/preview-engine/renderers-FCV4COVB.mjs +0 -1
- package/dist/preview-engine/renderers-G5KQISVL.mjs +0 -1
- package/dist/preview-engine/renderers-GJSUN5HU.mjs +0 -1
- package/dist/preview-engine/renderers-GMX2ZQDG.mjs +0 -1
- package/dist/preview-engine/renderers-GXCRINGC.mjs +0 -1
- package/dist/preview-engine/renderers-IHKORHMT.mjs +0 -1
- package/dist/preview-engine/renderers-JA4SLMG3.mjs +0 -1
- package/dist/preview-engine/renderers-JLN77CFZ.mjs +0 -1
- package/dist/preview-engine/renderers-KBFW7B5F.mjs +0 -1
- package/dist/preview-engine/renderers-LJRJMFCR.mjs +0 -1
- package/dist/preview-engine/renderers-LPAPZ5QS.mjs +0 -1
- package/dist/preview-engine/renderers-NQUDQEHY.mjs +0 -1
- package/dist/preview-engine/renderers-NS3AIJVG.mjs +0 -1
- package/dist/preview-engine/renderers-NSY2SDIE.mjs +0 -1
- package/dist/preview-engine/renderers-PW4OJWHF.mjs +0 -120
- package/dist/preview-engine/renderers-PWLWOZY4.mjs +0 -1
- package/dist/preview-engine/renderers-Q3MD34JN.mjs +0 -1
- package/dist/preview-engine/renderers-RXGNA2Q7.mjs +0 -1
- package/dist/preview-engine/renderers-TVTQ2R74.mjs +0 -1
- package/dist/preview-engine/renderers-VTTGFO55.mjs +0 -1
- package/dist/preview-engine/renderers-W3VVM5HB.mjs +0 -1
- package/dist/preview-engine/renderers-WG7QBD4D.mjs +0 -1
- package/dist/preview-engine/renderers-WLLJFZTF.mjs +0 -1
- package/dist/preview-engine/renderers-WN4SYFCU.mjs +0 -1
- package/dist/preview-engine/renderers-WSMLLSWX.mjs +0 -1
- package/dist/preview-engine/renderers-XFBSGTHU.mjs +0 -1
- package/dist/preview-engine/renderers-XFC6ZPO5.mjs +0 -1
- package/dist/preview-engine/renderers-XUHRY3XH.mjs +0 -1
- package/dist/preview-engine/renderers-YAOB5XU6.mjs +0 -1
- package/dist/preview-engine/renderers-YTB4FOHT.mjs +0 -1
- package/dist/preview-engine/renderers-ZIMBODX6.mjs +0 -1
- package/dist/program-BmNKgzja.mjs.map +0 -1
- package/dist/renderer-1VuQTY1Z.mjs.map +0 -1
- package/dist/renderer-6oMSare3.mjs +0 -3
- package/dist/renderer-B1ComPb2.mjs +0 -3
- package/dist/renderer-B2XzjK0z.mjs +0 -3
- package/dist/renderer-B2ieylQ3.mjs.map +0 -1
- package/dist/renderer-B8-kzZdP.mjs.map +0 -1
- package/dist/renderer-B8UaFNqb.mjs.map +0 -1
- package/dist/renderer-BDbTWSpP.mjs.map +0 -1
- package/dist/renderer-BIIWCg_J.mjs.map +0 -1
- package/dist/renderer-BJ1aTkZf.mjs.map +0 -1
- package/dist/renderer-BM05sB8m.mjs.map +0 -1
- package/dist/renderer-BQ5Bz5D0.mjs +0 -3
- package/dist/renderer-BREIjsUU.mjs.map +0 -1
- package/dist/renderer-BTu2EVhF.mjs +0 -3
- package/dist/renderer-BZcn_iBl.mjs +0 -3
- package/dist/renderer-Bc04fivZ.mjs.map +0 -1
- package/dist/renderer-BfAWZziM.mjs.map +0 -1
- package/dist/renderer-BfJSUjPN.mjs +0 -3
- package/dist/renderer-Bfgd4N0O.mjs.map +0 -1
- package/dist/renderer-Bhdf90Zq.mjs.map +0 -1
- package/dist/renderer-Bp6sDMa6.mjs +0 -3
- package/dist/renderer-Bt7_sb_Y.mjs +0 -3
- package/dist/renderer-Bv6q84TU.mjs.map +0 -1
- package/dist/renderer-C-H680_l.mjs +0 -3
- package/dist/renderer-C606ZPUn.mjs +0 -3
- package/dist/renderer-C9jyKn1i.mjs +0 -3
- package/dist/renderer-CDLrNgfo.mjs +0 -3
- package/dist/renderer-CERfcxgv.mjs +0 -3
- package/dist/renderer-CG5PzNkv.mjs +0 -3
- package/dist/renderer-CI7sG_cv.mjs.map +0 -1
- package/dist/renderer-CPoIMVdk.mjs +0 -3
- package/dist/renderer-CQdVj2JS.mjs +0 -3
- package/dist/renderer-CQiTodg9.mjs +0 -337
- package/dist/renderer-CQiTodg9.mjs.map +0 -1
- package/dist/renderer-CWTpc4ff.mjs.map +0 -1
- package/dist/renderer-CXn5HAnK.mjs.map +0 -1
- package/dist/renderer-CZgB5st8.mjs +0 -3
- package/dist/renderer-C_TPMHiH.mjs.map +0 -1
- package/dist/renderer-Ca7L1EOp.mjs +0 -3
- package/dist/renderer-CaaOKMSd.mjs.map +0 -1
- package/dist/renderer-CdciwwMI.mjs.map +0 -1
- package/dist/renderer-CepMDQ06.mjs.map +0 -1
- package/dist/renderer-CfC_aiew.mjs.map +0 -1
- package/dist/renderer-ChdLYS-G.mjs.map +0 -1
- package/dist/renderer-CkykdR_D.mjs +0 -3
- package/dist/renderer-Cl6GkeHx.mjs +0 -3
- package/dist/renderer-ClcjrFyo.mjs +0 -3
- package/dist/renderer-CnXW28b9.mjs.map +0 -1
- package/dist/renderer-CpkiHRhh.mjs.map +0 -1
- package/dist/renderer-CtVkU_GA.mjs +0 -44
- package/dist/renderer-CtVkU_GA.mjs.map +0 -1
- package/dist/renderer-Ctk2zzfy.mjs.map +0 -1
- package/dist/renderer-CtyD_Xju.mjs.map +0 -1
- package/dist/renderer-CySUP_wk.mjs +0 -3
- package/dist/renderer-CzPWB0Ss.mjs.map +0 -1
- package/dist/renderer-D2XD4QYk.mjs.map +0 -1
- package/dist/renderer-D2l_Odyg.mjs +0 -3
- package/dist/renderer-D7zvPHKn.mjs.map +0 -1
- package/dist/renderer-D9NnIx7o.mjs +0 -3
- package/dist/renderer-DCPCYySt.mjs +0 -3
- package/dist/renderer-DEJwPRkR.mjs.map +0 -1
- package/dist/renderer-DIkpJEOZ.mjs +0 -3
- package/dist/renderer-DML9qpmS.mjs.map +0 -1
- package/dist/renderer-DNSXPkf_.mjs +0 -3
- package/dist/renderer-DP-CvZ_Z.mjs +0 -3
- package/dist/renderer-DZGtBUCx.mjs.map +0 -1
- package/dist/renderer-D_1oDOCP.mjs.map +0 -1
- package/dist/renderer-DeXb8R6h.mjs +0 -3
- package/dist/renderer-DezO-ZaP.mjs +0 -4
- package/dist/renderer-DhXe04fC.mjs +0 -3
- package/dist/renderer-DirxsOjq.mjs.map +0 -1
- package/dist/renderer-Djlb4TLO.mjs.map +0 -1
- package/dist/renderer-DnH3SI7w.mjs +0 -3
- package/dist/renderer-DpGc-N3G.mjs.map +0 -1
- package/dist/renderer-Dpw4oi33.mjs +0 -3
- package/dist/renderer-DxTs4Iyi.mjs.map +0 -1
- package/dist/renderer-Dy0utCl7.mjs.map +0 -1
- package/dist/renderer-Md-ytU0v.mjs +0 -3
- package/dist/renderer-U-bhWO9Q.mjs +0 -3
- package/dist/renderer-_uvdg48N.mjs.map +0 -1
- package/dist/renderer-bsWnRNpJ.mjs.map +0 -1
- package/dist/renderer-cgxO2xN6.mjs.map +0 -1
- package/dist/renderer-d5-F_48R.mjs +0 -3
- package/dist/renderer-ho_jXJ0H.mjs.map +0 -1
- package/dist/renderer-vqkKWqa5.mjs.map +0 -1
- package/dist/renderer-zA5okHds.mjs +0 -3
- /package/dist/{renderer-C2n-EHxg.mjs → renderer-B-BcgA6d.mjs} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dist-BAVZdFEJ.mjs","names":[],"sources":["../../renderers/dist/index.mjs","../../compositions/dist/layer-logic-DBs4NHoi.mjs","../../compositions/dist/index.mjs"],"sourcesContent":["import { GetFontAssetUrl } from \"@framefields/client-utils\";\nimport { SlugFontCache, SlugGeometry, getHeadlessFontPath, registerHeadlessFont } from \"@framefields/webgpu-renderers\";\n\n//#region src/blend.ts\nconst mapBlendModeToSkia = (mode) => {\n\tif (!mode) return \"srcOver\";\n\tswitch (mode) {\n\t\tcase \"source-over\": return \"srcOver\";\n\t\tcase \"source-in\": return \"srcIn\";\n\t\tcase \"source-out\": return \"srcOut\";\n\t\tcase \"source-atop\": return \"srcATop\";\n\t\tcase \"destination-over\": return \"dstOver\";\n\t\tcase \"destination-in\": return \"dstIn\";\n\t\tcase \"destination-out\": return \"dstOut\";\n\t\tcase \"destination-atop\": return \"dstATop\";\n\t\tcase \"copy\": return \"src\";\n\t\tcase \"xor\": return \"xor\";\n\t\tcase \"multiply\": return \"multiply\";\n\t\tcase \"screen\": return \"screen\";\n\t\tcase \"overlay\": return \"overlay\";\n\t\tcase \"darken\": return \"darken\";\n\t\tcase \"lighten\":\n\t\tcase \"lighter\": return \"lighten\";\n\t\tcase \"color-dodge\": return \"colorDodge\";\n\t\tcase \"color-burn\": return \"colorBurn\";\n\t\tcase \"hard-light\": return \"hardLight\";\n\t\tcase \"soft-light\": return \"softLight\";\n\t\tcase \"difference\": return \"difference\";\n\t\tcase \"exclusion\": return \"exclusion\";\n\t\tcase \"hue\": return \"hue\";\n\t\tcase \"saturation\": return \"saturation\";\n\t\tcase \"color\": return \"color\";\n\t\tcase \"luminosity\": return \"luminosity\";\n\t\tdefault: return \"srcOver\";\n\t}\n};\nconst requiresIsolation = (mode) => {\n\treturn mode === \"destination-in\" || mode === \"source-in\";\n};\n\n//#endregion\n//#region src/geometry.ts\nfunction computeStrokeRect(w, h, cornerRadius, strokeWidth, align = \"outside\") {\n\tif (align === \"inside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: half,\n\t\t\ty: half,\n\t\t\twidth: Math.max(0, w - strokeWidth),\n\t\t\theight: Math.max(0, h - strokeWidth),\n\t\t\tradius: cornerRadius === 0 ? 0 : Math.max(0, cornerRadius - half)\n\t\t};\n\t}\n\tif (align === \"outside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: -half,\n\t\t\ty: -half,\n\t\t\twidth: w + strokeWidth,\n\t\t\theight: h + strokeWidth,\n\t\t\tradius: cornerRadius === 0 ? 0 : cornerRadius + half\n\t\t};\n\t}\n\treturn {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: w,\n\t\theight: h,\n\t\tradius: cornerRadius\n\t};\n}\n\n//#endregion\n//#region src/interpolate.ts\nconst { cbrt, sqrt, PI: π } = Math;\nconst x2t = (x, a, b, c, d) => {\n\tconst q = a + b * x;\n\tconst s = q ** 2 + c;\n\tif (s > 0) {\n\t\tconst root = sqrt(s);\n\t\treturn cbrt(q + root) + cbrt(q - root) - d;\n\t}\n\tconst l = cbrt(sqrt(q * q - s));\n\tconst angle = q ? Math.atan(sqrt(-s) / q) : -π / 2;\n\tlet φ;\n\tif (b < 0) φ = (q > 0 ? 2 * π : π) - angle;\n\telse if (d < 0) φ = (q > 0 ? 2 * π : -3 * π) + angle;\n\telse φ = (q > 0 ? 0 : π) + angle;\n\treturn 2 * l * Math.cos(φ / 3) - d;\n};\nconst Y = (t, ay, by, cy) => ((ay * t + 3 * by) * t + cy) * t;\nconst linearEasing = (x) => x;\nfunction bezier(mX1, mY1, mX2, mY2) {\n\tif (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) throw new Error(\"bezier x values must be in [0, 1] range\");\n\tif (mX1 === mY1 && mX2 === mY2) return linearEasing;\n\tconst a = 6 * (3 * mX1 - 3 * mX2 + 1);\n\tconst b = 6 * (mX2 - 2 * mX1);\n\tconst c = 3 * mX1;\n\tconst a2 = a * a;\n\tconst b2 = b * b;\n\tconst d = b / a;\n\tconst e = 3 * b * c / a2 - b2 * b / (a2 * a);\n\tconst w1 = 2 * c / a - b2 / a2;\n\tconst w = w1 * w1 * w1;\n\tconst o = 3 / a;\n\tconst ay = 3 * mY1 - 3 * mY2 + 1;\n\tconst by = mY2 - 2 * mY1;\n\tconst cy = 3 * mY1;\n\tconst X2T = a ? x2t : linearEasing;\n\treturn function BezierEasing(x) {\n\t\tif (x === 0 || x === 1) return x;\n\t\treturn Y(X2T(x, e, o, w, d), ay, by, cy);\n\t};\n}\nconst Easing = {\n\tlinear: linearEasing,\n\tease: bezier(.25, .1, .25, 1),\n\tquad: (t) => t * t,\n\tcubic: (t) => t * t * t,\n\tpoly: (n) => (t) => t ** n,\n\tsin: (t) => 1 - Math.cos(t * Math.PI / 2),\n\tcircle: (t) => 1 - Math.sqrt(1 - t * t),\n\texp: (t) => 2 ** (10 * (t - 1)),\n\telastic: (bounciness = 1) => {\n\t\tconst p = bounciness * Math.PI;\n\t\treturn (t) => 1 - Math.cos(t * Math.PI / 2) ** 3 * Math.cos(t * p);\n\t},\n\tback: (s = 1.70158) => (t) => t * t * ((s + 1) * t - s),\n\tbounce: (t) => {\n\t\tif (t < 1 / 2.75) return 7.5625 * t * t;\n\t\tif (t < 2 / 2.75) {\n\t\t\tconst t2$1 = t - 1.5 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .75;\n\t\t}\n\t\tif (t < 2.5 / 2.75) {\n\t\t\tconst t2$1 = t - 2.25 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .9375;\n\t\t}\n\t\tconst t2 = t - 2.625 / 2.75;\n\t\treturn 7.5625 * t2 * t2 + .984375;\n\t},\n\tbezier,\n\tin: (fn) => fn,\n\tout: (fn) => (t) => 1 - fn(1 - t),\n\tinOut: (fn) => (t) => t < .5 ? fn(t * 2) / 2 : 1 - fn((1 - t) * 2) / 2\n};\nfunction interpolate(value, inputRange, outputRange, options) {\n\tconst extrapolateLeft = options?.extrapolateLeft ?? \"extend\";\n\tconst extrapolateRight = options?.extrapolateRight ?? \"extend\";\n\tif (inputRange.length !== outputRange.length) throw new Error(\"inputRange and outputRange must have the same length\");\n\tif (inputRange.length < 2) throw new Error(\"inputRange must have at least 2 elements\");\n\tconst firstInput = inputRange[0];\n\tconst lastInput = inputRange[inputRange.length - 1];\n\tif (value < firstInput) {\n\t\tif (extrapolateLeft === \"clamp\") return outputRange[0];\n\t\tif (extrapolateLeft === \"identity\") return value;\n\t}\n\tif (value > lastInput) {\n\t\tif (extrapolateRight === \"clamp\") return outputRange[outputRange.length - 1];\n\t\tif (extrapolateRight === \"identity\") return value;\n\t}\n\tlet i = 1;\n\tfor (; i < inputRange.length - 1; i++) if (value < inputRange[i]) break;\n\tconst x0 = inputRange[i - 1];\n\tconst x1 = inputRange[i];\n\tconst y0 = outputRange[i - 1];\n\tconst y1 = outputRange[i];\n\tif (x0 === x1) return y0;\n\tlet progress = (value - x0) / (x1 - x0);\n\tif (options?.easing) progress = options.easing(progress);\n\treturn y0 + progress * (y1 - y0);\n}\n\n//#endregion\n//#region src/math3d/vector3.ts\nconst Vector3Math = {\n\tcreate(x = 0, y = 0, z = 0) {\n\t\treturn [\n\t\t\tx,\n\t\t\ty,\n\t\t\tz\n\t\t];\n\t},\n\tcopy(v) {\n\t\treturn [\n\t\t\tv[0],\n\t\t\tv[1],\n\t\t\tv[2]\n\t\t];\n\t},\n\tset(out, x, y, z) {\n\t\tout[0] = x;\n\t\tout[1] = y;\n\t\tout[2] = z;\n\t\treturn out;\n\t},\n\tadd(a, b) {\n\t\treturn [\n\t\t\ta[0] + b[0],\n\t\t\ta[1] + b[1],\n\t\t\ta[2] + b[2]\n\t\t];\n\t},\n\tsubtract(a, b) {\n\t\treturn [\n\t\t\ta[0] - b[0],\n\t\t\ta[1] - b[1],\n\t\t\ta[2] - b[2]\n\t\t];\n\t},\n\tmultiplyScalar(v, s) {\n\t\treturn [\n\t\t\tv[0] * s,\n\t\t\tv[1] * s,\n\t\t\tv[2] * s\n\t\t];\n\t},\n\tdot(a, b) {\n\t\treturn a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t},\n\tcross(a, b) {\n\t\treturn [\n\t\t\ta[1] * b[2] - a[2] * b[1],\n\t\t\ta[2] * b[0] - a[0] * b[2],\n\t\t\ta[0] * b[1] - a[1] * b[0]\n\t\t];\n\t},\n\tlengthSq(v) {\n\t\treturn v[0] * v[0] + v[1] * v[1] + v[2] * v[2];\n\t},\n\tlength(v) {\n\t\treturn Math.hypot(v[0], v[1], v[2]);\n\t},\n\tdistance(a, b) {\n\t\treturn Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);\n\t},\n\tnormalize(v) {\n\t\tconst len = Math.hypot(v[0], v[1], v[2]);\n\t\tif (len === 0) return [\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tconst inv = 1 / len;\n\t\treturn [\n\t\t\tv[0] * inv,\n\t\t\tv[1] * inv,\n\t\t\tv[2] * inv\n\t\t];\n\t},\n\tlerp(a, b, t) {\n\t\treturn [\n\t\t\ta[0] + (b[0] - a[0]) * t,\n\t\t\ta[1] + (b[1] - a[1]) * t,\n\t\t\ta[2] + (b[2] - a[2]) * t\n\t\t];\n\t},\n\tequals(a, b, epsilon = 1e-6) {\n\t\treturn Math.abs(a[0] - b[0]) <= epsilon && Math.abs(a[1] - b[1]) <= epsilon && Math.abs(a[2] - b[2]) <= epsilon;\n\t}\n};\n\n//#endregion\n//#region src/math3d/matrix4.ts\n/**\n* Column-major 4x4 matrix mathematics for WebGPU 3D rendering and camera projections.\n* Memory layout matches WGSL `mat4x4<f32>`:\n* [ 0, 4, 8, 12 ]\n* [ 1, 5, 9, 13 ]\n* [ 2, 6, 10, 14 ]\n* [ 3, 7, 11, 15 ]\n*/\nconst Matrix4Math = {\n\tidentity() {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tcopy(m) {\n\t\treturn [...m];\n\t},\n\tmultiply(a, b) {\n\t\tconst out = new Array(16);\n\t\tfor (let row = 0; row < 4; row++) for (let col = 0; col < 4; col++) out[col * 4 + row] = a[0 + row] * b[col * 4 + 0] + a[4 + row] * b[col * 4 + 1] + a[8 + row] * b[col * 4 + 2] + a[12 + row] * b[col * 4 + 3];\n\t\treturn out;\n\t},\n\ttranslate(tx, ty, tz = 0) {\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\ttx,\n\t\t\tty,\n\t\t\ttz,\n\t\t\t1\n\t\t];\n\t},\n\tscale(sx, sy, sz = 1) {\n\t\treturn [\n\t\t\tsx,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsy,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tsz,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateX(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateY(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\t0,\n\t\t\t-s,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\ts,\n\t\t\t0,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateZ(rad) {\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\treturn [\n\t\t\tc,\n\t\t\ts,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-s,\n\t\t\tc,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\trotateAxis(axis, rad) {\n\t\tconst norm = Vector3Math.normalize(axis);\n\t\tconst x = norm[0];\n\t\tconst y = norm[1];\n\t\tconst z = norm[2];\n\t\tconst c = Math.cos(rad);\n\t\tconst s = Math.sin(rad);\n\t\tconst t = 1 - c;\n\t\treturn [\n\t\t\tt * x * x + c,\n\t\t\tt * x * y + s * z,\n\t\t\tt * x * z - s * y,\n\t\t\t0,\n\t\t\tt * x * y - s * z,\n\t\t\tt * y * y + c,\n\t\t\tt * y * z + s * x,\n\t\t\t0,\n\t\t\tt * x * z + s * y,\n\t\t\tt * y * z - s * x,\n\t\t\tt * z * z + c,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tlookAt(eye, target, up = [\n\t\t0,\n\t\t-1,\n\t\t0\n\t]) {\n\t\tlet f = Vector3Math.subtract(target, eye);\n\t\tif (Vector3Math.lengthSq(f) === 0) f = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\telse f = Vector3Math.normalize(f);\n\t\tlet r = Vector3Math.cross(f, up);\n\t\tif (Vector3Math.lengthSq(r) === 0) r = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\telse r = Vector3Math.normalize(r);\n\t\tconst u = Vector3Math.cross(r, f);\n\t\treturn [\n\t\t\tr[0],\n\t\t\tu[0],\n\t\t\tf[0],\n\t\t\t0,\n\t\t\tr[1],\n\t\t\tu[1],\n\t\t\tf[1],\n\t\t\t0,\n\t\t\tr[2],\n\t\t\tu[2],\n\t\t\tf[2],\n\t\t\t0,\n\t\t\t-Vector3Math.dot(r, eye),\n\t\t\t-Vector3Math.dot(u, eye),\n\t\t\t-Vector3Math.dot(f, eye),\n\t\t\t1\n\t\t];\n\t},\n\tperspective(fovYRad, aspect, near, far) {\n\t\tconst f = 1 / Math.tan(fovYRad / 2);\n\t\tconst rangeInv = 1 / (far - near);\n\t\treturn [\n\t\t\tf / aspect,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tf,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tfar * rangeInv,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-near * far * rangeInv,\n\t\t\t0\n\t\t];\n\t},\n\torthographic(left, right, bottom, top, near, far) {\n\t\tconst lr = 1 / (right - left);\n\t\tconst bt = 1 / (top - bottom);\n\t\tconst nf = 1 / (far - near);\n\t\treturn [\n\t\t\t2 * lr,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t2 * bt,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\tnf,\n\t\t\t0,\n\t\t\t-(right + left) * lr,\n\t\t\t-(top + bottom) * bt,\n\t\t\t-near * nf,\n\t\t\t1\n\t\t];\n\t},\n\tinvert(m) {\n\t\tconst inv = new Array(16);\n\t\tinv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10];\n\t\tinv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10];\n\t\tinv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9];\n\t\tinv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] - m[12] * m[5] * m[10] + m[12] * m[6] * m[9];\n\t\tinv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] - m[13] * m[2] * m[11] + m[13] * m[3] * m[10];\n\t\tinv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] + m[12] * m[2] * m[11] - m[12] * m[3] * m[10];\n\t\tinv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] - m[12] * m[1] * m[11] + m[12] * m[3] * m[9];\n\t\tinv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] + m[12] * m[1] * m[10] - m[12] * m[2] * m[9];\n\t\tinv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] + m[13] * m[2] * m[7] - m[13] * m[3] * m[6];\n\t\tinv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] - m[12] * m[2] * m[7] + m[12] * m[3] * m[6];\n\t\tinv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] + m[12] * m[1] * m[7] - m[12] * m[3] * m[5];\n\t\tinv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] - m[12] * m[1] * m[6] + m[12] * m[2] * m[5];\n\t\tinv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] - m[9] * m[2] * m[7] + m[9] * m[3] * m[6];\n\t\tinv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] + m[8] * m[2] * m[7] - m[8] * m[3] * m[6];\n\t\tinv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] - m[8] * m[1] * m[7] + m[8] * m[3] * m[5];\n\t\tinv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];\n\t\tlet det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];\n\t\tif (Math.abs(det) < 1e-12) return null;\n\t\tdet = 1 / det;\n\t\tfor (let i = 0; i < 16; i++) inv[i] *= det;\n\t\treturn inv;\n\t},\n\ttranspose(m) {\n\t\treturn [\n\t\t\tm[0],\n\t\t\tm[4],\n\t\t\tm[8],\n\t\t\tm[12],\n\t\t\tm[1],\n\t\t\tm[5],\n\t\t\tm[9],\n\t\t\tm[13],\n\t\t\tm[2],\n\t\t\tm[6],\n\t\t\tm[10],\n\t\t\tm[14],\n\t\t\tm[3],\n\t\t\tm[7],\n\t\t\tm[11],\n\t\t\tm[15]\n\t\t];\n\t},\n\tprojectPoint(m, p) {\n\t\tconst x = p[0];\n\t\tconst y = p[1];\n\t\tconst z = p[2];\n\t\tconst X = m[0] * x + m[4] * y + m[8] * z + m[12];\n\t\tconst Y$1 = m[1] * x + m[5] * y + m[9] * z + m[13];\n\t\tconst Z = m[2] * x + m[6] * y + m[10] * z + m[14];\n\t\tconst W = m[3] * x + m[7] * y + m[11] * z + m[15];\n\t\tconst wInv = Math.abs(W) > 1e-6 ? 1 / W : 1;\n\t\treturn [\n\t\t\tX * wInv,\n\t\t\tY$1 * wInv,\n\t\t\tZ * wInv\n\t\t];\n\t},\n\tprojectRectangle(m, width, height) {\n\t\treturn [\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\t0,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t]),\n\t\t\tMatrix4Math.projectPoint(m, [\n\t\t\t\t0,\n\t\t\t\theight,\n\t\t\t\t0\n\t\t\t])\n\t\t];\n\t},\n\ttoFloat32Array(m) {\n\t\treturn new Float32Array(m);\n\t}\n};\n\n//#endregion\n//#region src/math3d/camera3d.ts\n/**\n* Camera 3D mathematics, kinematics, and projection solver.\n* Provides unified View-Projection matrices, LookAt target tracking,\n* spherical orbit turntable, multi-octave camera shake, and rack-focus CoC solvers.\n*/\n/** Smooth multi-harmonic procedural continuous noise */\nfunction smoothHarmonicNoise(t, seed, octaves = 3) {\n\tlet total = 0;\n\tlet frequency = 1;\n\tlet amplitude = 1;\n\tlet maxAmp = 0;\n\tfor (let i = 0; i < octaves; i++) {\n\t\tconst s1 = Math.sin(t * frequency * 2 * Math.PI + seed + i * 1.7);\n\t\tconst s2 = Math.cos(t * frequency * 1.414 * Math.PI + seed * 2.1 + i * .9);\n\t\ttotal += (s1 * .6 + s2 * .4) * amplitude;\n\t\tmaxAmp += amplitude;\n\t\tfrequency *= 2;\n\t\tamplitude *= .5;\n\t}\n\treturn maxAmp > 0 ? total / maxAmp : 0;\n}\nconst Camera3D = {\n\tcreateDefaultCamera(width, height, fovDegrees = 50) {\n\t\tconst fovRad = fovDegrees * Math.PI / 180;\n\t\tconst distance = height / 2 / Math.tan(fovRad / 2);\n\t\treturn {\n\t\t\teye: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t-distance\n\t\t\t],\n\t\t\ttarget: [\n\t\t\t\twidth / 2,\n\t\t\t\theight / 2,\n\t\t\t\t0\n\t\t\t],\n\t\t\tup: [\n\t\t\t\t0,\n\t\t\t\t-1,\n\t\t\t\t0\n\t\t\t],\n\t\t\tfov: fovDegrees,\n\t\t\taspect: Math.max(1e-4, width / height),\n\t\t\tnear: 1,\n\t\t\tfar: 5e4,\n\t\t\tzoom: 1,\n\t\t\tfocusDistance: distance,\n\t\t\tfStop: 2.8,\n\t\t\tmaxBlurRadius: 32\n\t\t};\n\t},\n\tcomputeViewMatrix(camera) {\n\t\treturn Matrix4Math.lookAt(camera.eye, camera.target, camera.up);\n\t},\n\tcomputeProjectionMatrix(camera) {\n\t\tconst fovRad = camera.fov * Math.PI / 180;\n\t\tconst p = Matrix4Math.perspective(fovRad, camera.aspect, camera.near, camera.far);\n\t\tif (camera.zoom !== 1 && camera.zoom > 0) {\n\t\t\tp[0] *= camera.zoom;\n\t\t\tp[5] *= camera.zoom;\n\t\t}\n\t\treturn p;\n\t},\n\tcomputeViewProjectionMatrix(camera) {\n\t\tconst v = Camera3D.computeViewMatrix(camera);\n\t\tconst p = Camera3D.computeProjectionMatrix(camera);\n\t\treturn Matrix4Math.multiply(p, v);\n\t},\n\tdolly(eye, target, deltaDistance) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst move = Vector3Math.multiplyScalar(forward, deltaDistance);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, move),\n\t\t\ttarget\n\t\t};\n\t},\n\ttruckPedestal(eye, target, up, deltaX, deltaY) {\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(target, eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst moveX = Vector3Math.multiplyScalar(right, deltaX);\n\t\tconst moveY = Vector3Math.multiplyScalar(trueUp, deltaY);\n\t\tconst totalMove = Vector3Math.add(moveX, moveY);\n\t\treturn {\n\t\t\teye: Vector3Math.add(eye, totalMove),\n\t\t\ttarget: Vector3Math.add(target, totalMove)\n\t\t};\n\t},\n\torbit(target, radius, azimuthDeg, elevationDeg) {\n\t\tconst azRad = azimuthDeg * Math.PI / 180;\n\t\tconst elRad = elevationDeg * Math.PI / 180;\n\t\tconst cosEl = Math.cos(elRad);\n\t\tconst sinEl = Math.sin(elRad);\n\t\tconst cosAz = Math.cos(azRad);\n\t\tconst sinAz = Math.sin(azRad);\n\t\treturn [\n\t\t\ttarget[0] + radius * cosEl * sinAz,\n\t\t\ttarget[1] - radius * sinEl,\n\t\t\ttarget[2] - radius * cosEl * cosAz\n\t\t];\n\t},\n\tapplyOrientation(pose, pitchDeg, yawDeg, rollDeg) {\n\t\tif (pitchDeg === 0 && yawDeg === 0 && rollDeg === 0) return pose;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst dist = Vector3Math.distance(pose.eye, pose.target);\n\t\tlet fwd = forward;\n\t\tlet up = trueUp;\n\t\tif (yawDeg !== 0) {\n\t\t\tconst yawRad = yawDeg * Math.PI / 180;\n\t\t\tconst cosY = Math.cos(yawRad);\n\t\t\tconst sinY = Math.sin(yawRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.subtract(Vector3Math.multiplyScalar(fwd, cosY), Vector3Math.multiplyScalar(right, sinY)));\n\t\t}\n\t\tconst currentRight = Vector3Math.normalize(Vector3Math.cross(fwd, up));\n\t\tif (pitchDeg !== 0) {\n\t\t\tconst pitchRad = pitchDeg * Math.PI / 180;\n\t\t\tconst cosP = Math.cos(pitchRad);\n\t\t\tconst sinP = Math.sin(pitchRad);\n\t\t\tfwd = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(fwd, cosP), Vector3Math.multiplyScalar(up, sinP)));\n\t\t\tup = Vector3Math.normalize(Vector3Math.cross(currentRight, fwd));\n\t\t}\n\t\tif (rollDeg !== 0) {\n\t\t\tconst rollRad = rollDeg * Math.PI / 180;\n\t\t\tconst cosR = Math.cos(rollRad);\n\t\t\tconst sinR = Math.sin(rollRad);\n\t\t\tup = Vector3Math.normalize(Vector3Math.add(Vector3Math.multiplyScalar(up, cosR), Vector3Math.multiplyScalar(currentRight, sinR)));\n\t\t}\n\t\tconst newTarget = Vector3Math.add(pose.eye, Vector3Math.multiplyScalar(fwd, dist));\n\t\treturn {\n\t\t\t...pose,\n\t\t\ttarget: newTarget,\n\t\t\tup\n\t\t};\n\t},\n\tapplyCameraShake(pose, timeSeconds, options) {\n\t\tconst { translationAmplitude, rotationAmplitude, frequency = 2.5, octaves = 3, seed = 42 } = options;\n\t\tif (translationAmplitude <= 0 && rotationAmplitude <= 0) return pose;\n\t\tconst t = timeSeconds * frequency;\n\t\tconst dx = smoothHarmonicNoise(t, seed, octaves) * translationAmplitude;\n\t\tconst dy = smoothHarmonicNoise(t, seed + 101.5, octaves) * translationAmplitude;\n\t\tconst dz = smoothHarmonicNoise(t, seed + 203.7, octaves) * (translationAmplitude * .5);\n\t\tconst rotX = smoothHarmonicNoise(t, seed + 307.1, octaves) * rotationAmplitude;\n\t\tconst rotY = smoothHarmonicNoise(t, seed + 409.3, octaves) * rotationAmplitude;\n\t\tconst forward = Vector3Math.normalize(Vector3Math.subtract(pose.target, pose.eye));\n\t\tconst right = Vector3Math.normalize(Vector3Math.cross(forward, pose.up));\n\t\tconst trueUp = Vector3Math.cross(right, forward);\n\t\tconst disp = Vector3Math.add(Vector3Math.multiplyScalar(right, dx), Vector3Math.add(Vector3Math.multiplyScalar(trueUp, dy), Vector3Math.multiplyScalar(forward, dz)));\n\t\tconst newEye = Vector3Math.add(pose.eye, disp);\n\t\tconst newTarget = Vector3Math.add(pose.target, Vector3Math.add(Vector3Math.multiplyScalar(right, rotY * 10), Vector3Math.multiplyScalar(trueUp, rotX * 10)));\n\t\treturn {\n\t\t\t...pose,\n\t\t\teye: newEye,\n\t\t\ttarget: newTarget\n\t\t};\n\t},\n\tcomputeCircleOfConfusion(depth, focusDistance, focalLengthMm, fStop, maxBlurRadius = 32) {\n\t\tif (focusDistance <= 0 || fStop <= 0 || depth <= 0) return 0;\n\t\tconst delta = Math.abs(depth - focusDistance);\n\t\tconst aperture = focalLengthMm / fStop;\n\t\tconst coc = delta / depth * aperture * .5;\n\t\treturn Math.min(maxBlurRadius, Math.max(0, coc));\n\t},\n\tcomputeCameraFrustumPlanes(vp) {\n\t\tconst normalizePlane = (p) => {\n\t\t\tconst len = Math.hypot(p[0], p[1], p[2]);\n\t\t\tif (len === 0) return p;\n\t\t\treturn [\n\t\t\t\tp[0] / len,\n\t\t\t\tp[1] / len,\n\t\t\t\tp[2] / len,\n\t\t\t\tp[3] / len\n\t\t\t];\n\t\t};\n\t\treturn {\n\t\t\tleft: normalizePlane([\n\t\t\t\tvp[3] + vp[0],\n\t\t\t\tvp[7] + vp[4],\n\t\t\t\tvp[11] + vp[8],\n\t\t\t\tvp[15] + vp[12]\n\t\t\t]),\n\t\t\tright: normalizePlane([\n\t\t\t\tvp[3] - vp[0],\n\t\t\t\tvp[7] - vp[4],\n\t\t\t\tvp[11] - vp[8],\n\t\t\t\tvp[15] - vp[12]\n\t\t\t]),\n\t\t\tbottom: normalizePlane([\n\t\t\t\tvp[3] + vp[1],\n\t\t\t\tvp[7] + vp[5],\n\t\t\t\tvp[11] + vp[9],\n\t\t\t\tvp[15] + vp[13]\n\t\t\t]),\n\t\t\ttop: normalizePlane([\n\t\t\t\tvp[3] - vp[1],\n\t\t\t\tvp[7] - vp[5],\n\t\t\t\tvp[11] - vp[9],\n\t\t\t\tvp[15] - vp[13]\n\t\t\t]),\n\t\t\tnear: normalizePlane([\n\t\t\t\tvp[2],\n\t\t\t\tvp[6],\n\t\t\t\tvp[10],\n\t\t\t\tvp[14]\n\t\t\t]),\n\t\t\tfar: normalizePlane([\n\t\t\t\tvp[3] - vp[2],\n\t\t\t\tvp[7] - vp[6],\n\t\t\t\tvp[11] - vp[10],\n\t\t\t\tvp[15] - vp[14]\n\t\t\t])\n\t\t};\n\t},\n\tisBoxInFrustum(min, max, planes) {\n\t\tconst planeList = [\n\t\t\tplanes.left,\n\t\t\tplanes.right,\n\t\t\tplanes.bottom,\n\t\t\tplanes.top,\n\t\t\tplanes.near,\n\t\t\tplanes.far\n\t\t];\n\t\tfor (const p of planeList) {\n\t\t\tconst px = p[0] > 0 ? max[0] : min[0];\n\t\t\tconst py = p[1] > 0 ? max[1] : min[1];\n\t\t\tconst pz = p[2] > 0 ? max[2] : min[2];\n\t\t\tif (p[0] * px + p[1] * py + p[2] * pz + p[3] < 0) return false;\n\t\t}\n\t\treturn true;\n\t}\n};\n\n//#endregion\n//#region src/math3d/light3d.ts\n/**\n* WebGPU 3D Lighting & Material Shading engine.\n* Supports Ambient, Directional, Point, and Spot light sources,\n* normal matrix computation for non-uniform surface scaling,\n* and binary uniform buffer packing for WGSL shaders.\n*/\nconst MAX_LIGHTS = 8;\nconst LIGHT_UNIFORM_SIZE_BYTES = 544;\n/**\n* Parses CSS / hex / rgb color strings, arrays, or color objects into normalized linear [r, g, b] floats in [0, 1].\n*/\nfunction parseColorToRgb(color) {\n\tif (!color) return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tif (Array.isArray(color)) {\n\t\tconst r = color[0] ?? 1;\n\t\tconst g = color[1] ?? 1;\n\t\tconst b = color[2] ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg > 1 ? g / 255 : g,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color === \"object\" && color !== null) {\n\t\tconst r = color.r ?? 1;\n\t\tconst g = color.g ?? 1;\n\t\tconst b = color.b ?? 1;\n\t\treturn [\n\t\t\tr > 1 ? r / 255 : r,\n\t\t\tg > 1 ? g / 255 : g,\n\t\t\tb > 1 ? b / 255 : b\n\t\t];\n\t}\n\tif (typeof color !== \"string\") return [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst str = color.trim().toLowerCase();\n\tif (str.startsWith(\"#\")) {\n\t\tconst hex = str.slice(1);\n\t\tif (hex.length === 3) return [\n\t\t\tNumber.parseInt(hex[0] + hex[0], 16) / 255,\n\t\t\tNumber.parseInt(hex[1] + hex[1], 16) / 255,\n\t\t\tNumber.parseInt(hex[2] + hex[2], 16) / 255\n\t\t];\n\t\tif (hex.length >= 6) return [\n\t\t\tNumber.parseInt(hex.slice(0, 2), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(2, 4), 16) / 255,\n\t\t\tNumber.parseInt(hex.slice(4, 6), 16) / 255\n\t\t];\n\t}\n\tconst rgbMatch = str.match(/rgba?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/);\n\tif (rgbMatch) {\n\t\tconst r = Number.parseFloat(rgbMatch[1]) / 255;\n\t\tconst g = Number.parseFloat(rgbMatch[2]) / 255;\n\t\tconst b = Number.parseFloat(rgbMatch[3]) / 255;\n\t\treturn [\n\t\t\tMath.max(0, Math.min(1, r)),\n\t\t\tMath.max(0, Math.min(1, g)),\n\t\t\tMath.max(0, Math.min(1, b))\n\t\t];\n\t}\n\tconst hslMatch = str.match(/hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%?\\s*,\\s*([\\d.]+)%?/);\n\tif (hslMatch) return hslToRgb(Number.parseFloat(hslMatch[1]) / 360, Number.parseFloat(hslMatch[2]) / 100, Number.parseFloat(hslMatch[3]) / 100);\n\treturn [\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n}\nfunction hslToRgb(h, s, l) {\n\tif (s === 0) return [\n\t\tl,\n\t\tl,\n\t\tl\n\t];\n\tconst hue2rgb = (p$1, q$1, t) => {\n\t\tlet tt = t;\n\t\tif (tt < 0) tt += 1;\n\t\tif (tt > 1) tt -= 1;\n\t\tif (tt < 1 / 6) return p$1 + (q$1 - p$1) * 6 * tt;\n\t\tif (tt < 1 / 2) return q$1;\n\t\tif (tt < 2 / 3) return p$1 + (q$1 - p$1) * (2 / 3 - tt) * 6;\n\t\treturn p$1;\n\t};\n\tconst q = l < .5 ? l * (1 + s) : l + s - l * s;\n\tconst p = 2 * l - q;\n\treturn [\n\t\thue2rgb(p, q, h + 1 / 3),\n\t\thue2rgb(p, q, h),\n\t\thue2rgb(p, q, h - 1 / 3)\n\t];\n}\nconst Light3D = {\n\tcomputeNormalMatrix(modelMatrix) {\n\t\tconst inv = Matrix4Math.invert(modelMatrix);\n\t\tif (!inv) return Matrix4Math.identity();\n\t\treturn [\n\t\t\tinv[0],\n\t\t\tinv[4],\n\t\t\tinv[8],\n\t\t\t0,\n\t\t\tinv[1],\n\t\t\tinv[5],\n\t\t\tinv[9],\n\t\t\t0,\n\t\t\tinv[2],\n\t\t\tinv[6],\n\t\t\tinv[10],\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t},\n\tprocessLight(opt) {\n\t\tconst color = parseColorToRgb(opt.color);\n\t\tconst intensity = opt.intensity ?? 1;\n\t\tconst posX = opt.position ? opt.position[0] : opt.x ?? 0;\n\t\tconst posY = opt.position ? opt.position[1] : opt.y ?? 0;\n\t\tconst posZ = opt.position ? opt.position[2] : opt.z ?? 0;\n\t\tconst kind = opt.lightType ?? opt.type ?? \"directional\";\n\t\tlet typeVal = 1;\n\t\tif (kind === \"ambient\") typeVal = 0;\n\t\telse if (kind === \"directional\") typeVal = 1;\n\t\telse if (kind === \"point\") typeVal = 2;\n\t\telse if (kind === \"spot\") typeVal = 3;\n\t\tlet dir = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t-1\n\t\t];\n\t\tif (opt.direction) dir = Vector3Math.normalize(opt.direction);\n\t\telse if (opt.target || opt.targetX !== void 0 || opt.targetY !== void 0 || opt.targetZ !== void 0) {\n\t\t\tconst target = [\n\t\t\t\topt.target ? opt.target[0] : opt.targetX ?? posX,\n\t\t\t\topt.target ? opt.target[1] : opt.targetY ?? posY,\n\t\t\t\topt.target ? opt.target[2] : opt.targetZ ?? posZ\n\t\t\t];\n\t\t\tconst fromLight = Vector3Math.subtract(target, [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ\n\t\t\t]);\n\t\t\tif (Vector3Math.length(fromLight) > 1e-4) dir = Vector3Math.normalize(fromLight);\n\t\t}\n\t\tconst radius = Math.max(1, opt.radius ?? 1e3);\n\t\tconst decay = opt.decay ?? 2;\n\t\tconst angleDeg = Math.max(.1, Math.min(180, opt.angle ?? 45));\n\t\tconst penumbraFrac = Math.max(0, Math.min(1, opt.penumbra ?? .2));\n\t\tconst outerRad = angleDeg * Math.PI / 180;\n\t\tconst innerRad = outerRad * (1 - penumbraFrac);\n\t\tconst cosOuter = Math.cos(outerRad);\n\t\tconst cosInner = Math.cos(innerRad);\n\t\treturn {\n\t\t\tposType: [\n\t\t\t\tposX,\n\t\t\t\tposY,\n\t\t\t\tposZ,\n\t\t\t\ttypeVal\n\t\t\t],\n\t\t\tdirRadius: [\n\t\t\t\tdir[0],\n\t\t\t\tdir[1],\n\t\t\t\tdir[2],\n\t\t\t\tradius\n\t\t\t],\n\t\t\tcolorIntensity: [\n\t\t\t\tcolor[0],\n\t\t\t\tcolor[1],\n\t\t\t\tcolor[2],\n\t\t\t\tintensity\n\t\t\t],\n\t\t\tspotParams: [\n\t\t\t\tcosOuter,\n\t\t\t\tcosInner,\n\t\t\t\tdecay,\n\t\t\t\t0\n\t\t\t]\n\t\t};\n\t},\n\tpackLightsUniforms(lights) {\n\t\tconst buffer = new Float32Array(LIGHT_UNIFORM_SIZE_BYTES / 4);\n\t\tif (!lights || lights.length === 0) {\n\t\t\tbuffer[4] = 0;\n\t\t\tbuffer[5] = 0;\n\t\t\treturn buffer;\n\t\t}\n\t\tlet ambientR = 0;\n\t\tlet ambientG = 0;\n\t\tlet ambientB = 0;\n\t\tconst directLights = [];\n\t\tfor (const l of lights) if ((l.lightType ?? l.type) === \"ambient\") {\n\t\t\tconst col = parseColorToRgb(l.color);\n\t\t\tconst int = l.intensity ?? 1;\n\t\t\tambientR += col[0] * int;\n\t\t\tambientG += col[1] * int;\n\t\t\tambientB += col[2] * int;\n\t\t} else if (directLights.length < MAX_LIGHTS) directLights.push(Light3D.processLight(l));\n\t\tbuffer[0] = ambientR;\n\t\tbuffer[1] = ambientG;\n\t\tbuffer[2] = ambientB;\n\t\tbuffer[3] = 1;\n\t\tbuffer[4] = directLights.length;\n\t\tbuffer[5] = 1;\n\t\tbuffer[6] = 0;\n\t\tbuffer[7] = 0;\n\t\tlet offset = 8;\n\t\tfor (let i = 0; i < MAX_LIGHTS; i++) {\n\t\t\tif (i < directLights.length) {\n\t\t\t\tconst dl = directLights[i];\n\t\t\t\tbuffer[offset + 0] = dl.posType[0];\n\t\t\t\tbuffer[offset + 1] = dl.posType[1];\n\t\t\t\tbuffer[offset + 2] = dl.posType[2];\n\t\t\t\tbuffer[offset + 3] = dl.posType[3];\n\t\t\t\tbuffer[offset + 4] = dl.dirRadius[0];\n\t\t\t\tbuffer[offset + 5] = dl.dirRadius[1];\n\t\t\t\tbuffer[offset + 6] = dl.dirRadius[2];\n\t\t\t\tbuffer[offset + 7] = dl.dirRadius[3];\n\t\t\t\tbuffer[offset + 8] = dl.colorIntensity[0];\n\t\t\t\tbuffer[offset + 9] = dl.colorIntensity[1];\n\t\t\t\tbuffer[offset + 10] = dl.colorIntensity[2];\n\t\t\t\tbuffer[offset + 11] = dl.colorIntensity[3];\n\t\t\t\tbuffer[offset + 12] = dl.spotParams[0];\n\t\t\t\tbuffer[offset + 13] = dl.spotParams[1];\n\t\t\t\tbuffer[offset + 14] = dl.spotParams[2];\n\t\t\t\tbuffer[offset + 15] = dl.spotParams[3];\n\t\t\t} else for (let j = 0; j < 16; j++) buffer[offset + j] = 0;\n\t\t\toffset += 16;\n\t\t}\n\t\treturn buffer;\n\t}\n};\n\n//#endregion\n//#region src/math3d/path3d.ts\n/**\n* 3D Path Mathematical Curves, Arc-Length Lookup Tables, and Rotation-Minimizing Frames (RMF).\n* Provides uniform-velocity parameterization and smooth tangent/normal kinematics along 3D curves.\n*/\nvar Path3D = class Path3D {\n\tsamples = [];\n\tframes = [];\n\ttotalLength = 0;\n\tconstructor(samples) {\n\t\tif (samples.length < 2) throw new Error(\"Path3D requires at least 2 coordinate samples\");\n\t\tthis.samples = samples;\n\t\tthis.totalLength = samples[samples.length - 1].distance;\n\t\tthis.computeRotationMinimizingFrames();\n\t}\n\t/**\n\t* Computes continuous Rotation-Minimizing Frames (RMF) along the path\n\t* using the Double Reflection Method (Wang et al. 2008), preventing gimbal flips.\n\t*/\n\tcomputeRotationMinimizingFrames() {\n\t\tconst count = this.samples.length;\n\t\tthis.frames = new Array(count);\n\t\tconst t0 = this.samples[0].tangent;\n\t\tlet upRef = [\n\t\t\t0,\n\t\t\t-1,\n\t\t\t0\n\t\t];\n\t\tif (Math.abs(Vector3Math.dot(t0, upRef)) > .95) upRef = [\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t];\n\t\tlet n0 = Vector3Math.normalize(Vector3Math.subtract(upRef, Vector3Math.multiplyScalar(t0, Vector3Math.dot(upRef, t0))));\n\t\tif (Vector3Math.lengthSq(n0) < 1e-4) n0 = [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t\tconst b0 = Vector3Math.normalize(Vector3Math.cross(t0, n0));\n\t\tthis.frames[0] = {\n\t\t\tnormal: n0,\n\t\t\tbinormal: b0,\n\t\t\trotation: this.eulerFromFrame(t0, n0, b0)\n\t\t};\n\t\tfor (let i = 0; i < count - 1; i++) {\n\t\t\tconst x0 = this.samples[i].position;\n\t\t\tconst x1 = this.samples[i + 1].position;\n\t\t\tconst t_i = this.samples[i].tangent;\n\t\t\tconst t_next = this.samples[i + 1].tangent;\n\t\t\tconst n_i = this.frames[i].normal;\n\t\t\tconst v1 = Vector3Math.subtract(x1, x0);\n\t\t\tconst c1 = Vector3Math.dot(v1, v1);\n\t\t\tlet n_next;\n\t\t\tif (c1 > 1e-8) {\n\t\t\t\tconst t_i_L = Vector3Math.subtract(t_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, t_i) / c1));\n\t\t\t\tconst n_i_L = Vector3Math.subtract(n_i, Vector3Math.multiplyScalar(v1, 2 * Vector3Math.dot(v1, n_i) / c1));\n\t\t\t\tconst v2 = Vector3Math.subtract(t_next, t_i_L);\n\t\t\t\tconst c2 = Vector3Math.dot(v2, v2);\n\t\t\t\tif (c2 > 1e-8) n_next = Vector3Math.subtract(n_i_L, Vector3Math.multiplyScalar(v2, 2 * Vector3Math.dot(v2, n_i_L) / c2));\n\t\t\t\telse n_next = n_i_L;\n\t\t\t} else n_next = n_i;\n\t\t\tn_next = Vector3Math.normalize(Vector3Math.subtract(n_next, Vector3Math.multiplyScalar(t_next, Vector3Math.dot(t_next, n_next))));\n\t\t\tconst b_next = Vector3Math.normalize(Vector3Math.cross(t_next, n_next));\n\t\t\tthis.frames[i + 1] = {\n\t\t\t\tnormal: n_next,\n\t\t\t\tbinormal: b_next,\n\t\t\t\trotation: this.eulerFromFrame(t_next, n_next, b_next)\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t* Extracts pitch, yaw, roll Euler angles in degrees from the orthonormal frame.\n\t*/\n\teulerFromFrame(tangent, normal, binormal) {\n\t\treturn [\n\t\t\tMath.asin(Math.max(-1, Math.min(1, -tangent[1]))) * (180 / Math.PI),\n\t\t\tMath.atan2(tangent[0], tangent[2]) * (180 / Math.PI),\n\t\t\tMath.atan2(normal[0], normal[1]) * (180 / Math.PI)\n\t\t];\n\t}\n\t/**\n\t* Evaluates point, tangent, normal, binormal, and rotation at normalized progress u in [0, 1].\n\t* Progression moves with constant velocity along the arc length of the path.\n\t*/\n\tgetPointAt(u) {\n\t\tconst targetDist = Math.max(0, Math.min(1, u)) * this.totalLength;\n\t\treturn this.getPointAtDistance(targetDist);\n\t}\n\t/**\n\t* Evaluates point along path by absolute arc-length distance in pixels.\n\t*/\n\tgetPointAtDistance(distance) {\n\t\tconst d = Math.max(0, Math.min(this.totalLength, distance));\n\t\tconst count = this.samples.length;\n\t\tlet low = 0;\n\t\tlet high = count - 1;\n\t\twhile (low < high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (this.samples[mid].distance < d) low = mid + 1;\n\t\t\telse high = mid;\n\t\t}\n\t\tconst idx1 = Math.max(1, low);\n\t\tconst idx0 = idx1 - 1;\n\t\tconst s0 = this.samples[idx0];\n\t\tconst s1 = this.samples[idx1];\n\t\tconst segLen = s1.distance - s0.distance;\n\t\tconst alpha = segLen > 1e-6 ? (d - s0.distance) / segLen : 0;\n\t\tconst position = Vector3Math.lerp(s0.position, s1.position, alpha);\n\t\tconst tangent = Vector3Math.normalize(Vector3Math.lerp(s0.tangent, s1.tangent, alpha));\n\t\tconst f0 = this.frames[idx0];\n\t\tconst f1 = this.frames[idx1];\n\t\tconst normal = Vector3Math.normalize(Vector3Math.lerp(f0.normal, f1.normal, alpha));\n\t\tconst binormal = Vector3Math.normalize(Vector3Math.cross(tangent, normal));\n\t\tconst rotation = [\n\t\t\tf0.rotation[0] + (f1.rotation[0] - f0.rotation[0]) * alpha,\n\t\t\tf0.rotation[1] + (f1.rotation[1] - f0.rotation[1]) * alpha,\n\t\t\tf0.rotation[2] + (f1.rotation[2] - f0.rotation[2]) * alpha\n\t\t];\n\t\treturn {\n\t\t\tposition,\n\t\t\ttangent,\n\t\t\tnormal,\n\t\t\tbinormal,\n\t\t\tdistance: d,\n\t\t\tt: this.totalLength > 0 ? d / this.totalLength : 0,\n\t\t\trotation\n\t\t};\n\t}\n\t/**\n\t* Creates a smooth Catmull-Rom spline path interpolating through 3D waypoints.\n\t*/\n\tstatic catmullRom(waypoints, options = {}) {\n\t\tif (waypoints.length < 2) throw new Error(\"Catmull-Rom spline requires at least 2 waypoints\");\n\t\tconst closed = Boolean(options.closed);\n\t\tconst samplesPerSegment = options.samplesPerSegment ?? 40;\n\t\tconst pts = [];\n\t\tif (closed) {\n\t\t\tpts.push(waypoints[waypoints.length - 1]);\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(waypoints[0]);\n\t\t\tpts.push(waypoints[1]);\n\t\t} else {\n\t\t\tconst pFirst = waypoints[0];\n\t\t\tconst pSecond = waypoints[1];\n\t\t\tconst pLast = waypoints[waypoints.length - 1];\n\t\t\tconst pPrevLast = waypoints[waypoints.length - 2];\n\t\t\tpts.push(Vector3Math.subtract(pFirst, Vector3Math.subtract(pSecond, pFirst)));\n\t\t\tpts.push(...waypoints);\n\t\t\tpts.push(Vector3Math.add(pLast, Vector3Math.subtract(pLast, pPrevLast)));\n\t\t}\n\t\tconst numSegments = closed ? waypoints.length : waypoints.length - 1;\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < numSegments; s++) {\n\t\t\tconst p0 = pts[s];\n\t\t\tconst p1 = pts[s + 1];\n\t\t\tconst p2 = pts[s + 2];\n\t\t\tconst p3 = pts[s + 3];\n\t\t\tconst steps = s === numSegments - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\tconst a0 = -.5 * t3 + t2 - .5 * t;\n\t\t\t\tconst a1 = 1.5 * t3 - 2.5 * t2 + 1;\n\t\t\t\tconst a2 = -1.5 * t3 + 2 * t2 + .5 * t;\n\t\t\t\tconst a3 = .5 * t3 - .5 * t2;\n\t\t\t\tconst pos = [\n\t\t\t\t\ta0 * p0[0] + a1 * p1[0] + a2 * p2[0] + a3 * p3[0],\n\t\t\t\t\ta0 * p0[1] + a1 * p1[1] + a2 * p2[1] + a3 * p3[1],\n\t\t\t\t\ta0 * p0[2] + a1 * p1[2] + a2 * p2[2] + a3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst da0 = -1.5 * t2 + 2 * t - .5;\n\t\t\t\tconst da1 = 4.5 * t2 - 5 * t;\n\t\t\t\tconst da2 = -4.5 * t2 + 4 * t + .5;\n\t\t\t\tconst da3 = 1.5 * t2 - 1 * t;\n\t\t\t\tconst tanVel = [\n\t\t\t\t\tda0 * p0[0] + da1 * p1[0] + da2 * p2[0] + da3 * p3[0],\n\t\t\t\t\tda0 * p0[1] + da1 * p1[1] + da2 * p2[1] + da3 * p3[1],\n\t\t\t\t\tda0 * p0[2] + da1 * p1[2] + da2 * p2[2] + da3 * p3[2]\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tconst d = Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tcumulativeDist += d;\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a continuous 3D path from a chain of cubic Bezier segments.\n\t*/\n\tstatic bezier(segments, samplesPerSegment = 50) {\n\t\tif (segments.length === 0) throw new Error(\"Bezier path requires at least 1 segment\");\n\t\tconst rawSamples = [];\n\t\tfor (let s = 0; s < segments.length; s++) {\n\t\t\tconst seg = segments[s];\n\t\t\tconst steps = s === segments.length - 1 ? samplesPerSegment : samplesPerSegment - 1;\n\t\t\tfor (let step = 0; step <= steps; step++) {\n\t\t\t\tconst t = step / samplesPerSegment;\n\t\t\t\tconst u = 1 - t;\n\t\t\t\tconst uu = u * u;\n\t\t\t\tconst uuu = uu * u;\n\t\t\t\tconst tt = t * t;\n\t\t\t\tconst ttt = tt * t;\n\t\t\t\tconst pos = [\n\t\t\t\t\tuuu * seg.p0[0] + 3 * uu * t * seg.p1[0] + 3 * u * tt * seg.p2[0] + ttt * seg.p3[0],\n\t\t\t\t\tuuu * seg.p0[1] + 3 * uu * t * seg.p1[1] + 3 * u * tt * seg.p2[1] + ttt * seg.p3[1],\n\t\t\t\t\tuuu * seg.p0[2] + 3 * uu * t * seg.p1[2] + 3 * u * tt * seg.p2[2] + ttt * seg.p3[2]\n\t\t\t\t];\n\t\t\t\tconst tanVel = [\n\t\t\t\t\t3 * uu * (seg.p1[0] - seg.p0[0]) + 6 * u * t * (seg.p2[0] - seg.p1[0]) + 3 * tt * (seg.p3[0] - seg.p2[0]),\n\t\t\t\t\t3 * uu * (seg.p1[1] - seg.p0[1]) + 6 * u * t * (seg.p2[1] - seg.p1[1]) + 3 * tt * (seg.p3[1] - seg.p2[1]),\n\t\t\t\t\t3 * uu * (seg.p1[2] - seg.p0[2]) + 6 * u * t * (seg.p2[2] - seg.p1[2]) + 3 * tt * (seg.p3[2] - seg.p2[2])\n\t\t\t\t];\n\t\t\t\tconst tangent = Vector3Math.normalize(tanVel);\n\t\t\t\trawSamples.push({\n\t\t\t\t\tposition: pos,\n\t\t\t\t\ttangent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a 3D volumetric helix / spiral path.\n\t*/\n\tstatic helix(options) {\n\t\tconst { center, radius, pitch, turns, axis = \"z\", samplesPerTurn = 60 } = options;\n\t\tconst totalSamples = Math.max(10, Math.round(turns * samplesPerTurn));\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= totalSamples; i++) {\n\t\t\tconst progress = i / totalSamples;\n\t\t\tconst theta = progress * turns * Math.PI * 2;\n\t\t\tconst axial = (progress - .5) * pitch * turns;\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tlet pos;\n\t\t\tlet tanVel;\n\t\t\tif (axis === \"z\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + radius * s,\n\t\t\t\t\tcenter[2] + axial\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2)\n\t\t\t\t];\n\t\t\t} else if (axis === \"y\") {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + radius * c,\n\t\t\t\t\tcenter[1] + axial,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tpos = [\n\t\t\t\t\tcenter[0] + axial,\n\t\t\t\t\tcenter[1] + radius * c,\n\t\t\t\t\tcenter[2] + radius * s\n\t\t\t\t];\n\t\t\t\ttanVel = [\n\t\t\t\t\tpitch * turns / (turns * Math.PI * 2),\n\t\t\t\t\t-radius * s,\n\t\t\t\t\tradius * c\n\t\t\t\t];\n\t\t\t}\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst samples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tsamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(samples);\n\t}\n\t/**\n\t* Creates a 3D circular or arc orbit path.\n\t*/\n\tstatic circle(options) {\n\t\tconst { center, radius, startAngleDeg = 0, endAngleDeg = 360, samples = 128 } = options;\n\t\tconst startRad = startAngleDeg * Math.PI / 180;\n\t\tconst endRad = endAngleDeg * Math.PI / 180;\n\t\tconst rawSamples = [];\n\t\tfor (let i = 0; i <= samples; i++) {\n\t\t\tconst theta = startRad + (endRad - startRad) * (i / samples);\n\t\t\tconst c = Math.cos(theta);\n\t\t\tconst s = Math.sin(theta);\n\t\t\tconst pos = [\n\t\t\t\tcenter[0] + radius * c,\n\t\t\t\tcenter[1],\n\t\t\t\tcenter[2] + radius * s\n\t\t\t];\n\t\t\tconst tanVel = [\n\t\t\t\t-radius * s,\n\t\t\t\t0,\n\t\t\t\tradius * c\n\t\t\t];\n\t\t\trawSamples.push({\n\t\t\t\tposition: pos,\n\t\t\t\ttangent: Vector3Math.normalize(tanVel)\n\t\t\t});\n\t\t}\n\t\tlet cumulativeDist = 0;\n\t\tconst pathSamples = [{\n\t\t\tposition: rawSamples[0].position,\n\t\t\ttangent: rawSamples[0].tangent,\n\t\t\tdistance: 0\n\t\t}];\n\t\tfor (let i = 1; i < rawSamples.length; i++) {\n\t\t\tcumulativeDist += Vector3Math.distance(rawSamples[i].position, rawSamples[i - 1].position);\n\t\t\tpathSamples.push({\n\t\t\t\tposition: rawSamples[i].position,\n\t\t\t\ttangent: rawSamples[i].tangent,\n\t\t\t\tdistance: cumulativeDist\n\t\t\t});\n\t\t}\n\t\treturn new Path3D(pathSamples);\n\t}\n};\n\n//#endregion\n//#region src/utils.ts\n/**\n* Preloads a font into the browser or headless environment.\n*/\nasync function preloadFont(family, url) {\n\tif (typeof window !== \"undefined\" && typeof FontFace !== \"undefined\") try {\n\t\tconst loadedFace = await new FontFace(family, `url(${url})`).load();\n\t\tdocument.fonts.add(loadedFace);\n\t\tawait document.fonts.ready;\n\t} catch (e) {\n\t\tconsole.warn(`[preloadFont] Failed to load font \"${family}\" from ${url}:`, e);\n\t}\n\telse await registerHeadlessFont(family, url);\n}\n\n//#endregion\n//#region src/preload-fonts.ts\nconst EMOJI_REGEX = /\\p{Extended_Pictographic}/gu;\nlet warnedNoEmojiFont = false;\n/**\n* Loads every font a composition's text uses (for layout and for drawing) and\n* the emoji it draws. The browser preview and the export both call this, so\n* they start each render from the same glyphs.\n*/\nasync function preloadCompositionFonts(media, device, onError = (err, what) => console.warn(`[framefields] ${what}`, err)) {\n\tconst families = /* @__PURE__ */ new Set();\n\tconst emoji = /* @__PURE__ */ new Map();\n\t(function walk(node) {\n\t\tconst op = node.operation;\n\t\tif (op) {\n\t\t\tconst isText = op.op === \"text\" || op.kind === \"text\" || op.op === \"caption\" || op.kind === \"caption\" || typeof op.text === \"string\";\n\t\t\tconst family = op.fontFamily || (isText ? \"Inter\" : \"\");\n\t\t\tif (family) families.add(family);\n\t\t\tif (op.op === \"text\" && typeof op.text === \"string\") {\n\t\t\t\tconst fontSize = op.fontSize ?? 48;\n\t\t\t\tfor (const char of op.text.match(EMOJI_REGEX) ?? []) emoji.set(`${char}-${fontSize}`, fontSize);\n\t\t\t}\n\t\t}\n\t\tfor (const child of node.children ?? []) walk(child);\n\t})(media);\n\tconst tasks = [];\n\tfor (const family of families) {\n\t\tconst url = getHeadlessFontPath(family) ?? GetFontAssetUrl(family);\n\t\ttasks.push(preloadFont(family, url).catch((err) => onError(err, `font \"${family}\" from ${url}`)));\n\t\tif (device) tasks.push(SlugFontCache.preloadSlugFont(device, family, url).catch((err) => onError(err, `Slug font \"${family}\" from ${url}`)));\n\t}\n\tif (device && emoji.size > 0) {\n\t\tif (!SlugFontCache.hasEmojiFont() && !warnedNoEmojiFont) {\n\t\t\twarnedNoEmojiFont = true;\n\t\t\tconsole.warn(\"[framefields] Text uses emoji but no emoji font is registered, so exports draw nothing for them. Register a color emoji font (e.g. Noto Color Emoji) with FontManager.registerEmojiFont(path).\");\n\t\t}\n\t\tfor (const [key, fontSize] of emoji) {\n\t\t\tconst char = key.slice(0, key.lastIndexOf(\"-\"));\n\t\t\ttasks.push(SlugFontCache.preloadEmoji(device, char, fontSize).catch((err) => {\n\t\t\t\tif (SlugFontCache.hasEmojiFont()) onError(err, `emoji \"${char}\"`);\n\t\t\t}));\n\t\t}\n\t}\n\tawait Promise.all(tasks);\n}\n\n//#endregion\n//#region src/spring.ts\nconst defaultSpringConfig = {\n\tdamping: 10,\n\tmass: 1,\n\tstiffness: 100,\n\tovershootClamping: false\n};\nconst advanceCache = {};\nfunction advance({ animation, now, config }) {\n\tconst { toValue, lastTimestamp, current, velocity } = animation;\n\tconst deltaTime = Math.min(now - lastTimestamp, 64);\n\tif (config.damping <= 0) throw new Error(\"Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.\");\n\tif (config.stiffness <= 0) throw new Error(\"Spring stiffness must be greater than 0.\");\n\tif (config.mass <= 0) throw new Error(\"Spring mass must be greater than 0.\");\n\tconst c = config.damping;\n\tconst m = config.mass;\n\tconst k = config.stiffness;\n\tconst cacheKey = [\n\t\ttoValue,\n\t\tlastTimestamp,\n\t\tcurrent,\n\t\tvelocity,\n\t\tc,\n\t\tm,\n\t\tk,\n\t\tnow\n\t].join(\"-\");\n\tif (advanceCache[cacheKey]) return advanceCache[cacheKey];\n\tconst v0 = -velocity;\n\tconst x0 = toValue - current;\n\tconst zeta = c / (2 * Math.sqrt(k * m));\n\tconst omega0 = Math.sqrt(k / m);\n\tconst omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\tconst t = deltaTime / 1e3;\n\tconst sin1 = Math.sin(omega1 * t);\n\tconst cos1 = Math.cos(omega1 * t);\n\tconst underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n\tconst underDampedFrag1 = underDampedEnvelope * (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\tconst underDampedPosition = toValue - underDampedFrag1;\n\tconst underDampedVelocity = zeta * omega0 * underDampedFrag1 - underDampedEnvelope * (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\tconst criticallyDampedEnvelope = Math.exp(-omega0 * t);\n\tconst criticallyDampedPosition = toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\tconst criticallyDampedVelocity = criticallyDampedEnvelope * (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\tconst animationNode = {\n\t\ttoValue,\n\t\tprevPosition: current,\n\t\tlastTimestamp: now,\n\t\tcurrent: zeta < 1 ? underDampedPosition : criticallyDampedPosition,\n\t\tvelocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity\n\t};\n\tadvanceCache[cacheKey] = animationNode;\n\treturn animationNode;\n}\nconst calculationCache = {};\nfunction springCalculation({ frame, fps, config = {} }) {\n\tconst from = 0;\n\tconst to = 1;\n\tconst cacheKey = [\n\t\tframe,\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness\n\t].join(\"-\");\n\tif (calculationCache[cacheKey]) return calculationCache[cacheKey];\n\tlet animation = {\n\t\tlastTimestamp: 0,\n\t\tcurrent: from,\n\t\ttoValue: to,\n\t\tvelocity: 0,\n\t\tprevPosition: 0\n\t};\n\tconst frameClamped = Math.max(0, frame);\n\tconst unevenRest = frameClamped % 1;\n\tfor (let f = 0; f <= Math.floor(frameClamped); f++) {\n\t\tif (f === Math.floor(frameClamped)) f += unevenRest;\n\t\tconst time = f / fps * 1e3;\n\t\tanimation = advance({\n\t\t\tanimation,\n\t\t\tnow: time,\n\t\t\tconfig: {\n\t\t\t\t...defaultSpringConfig,\n\t\t\t\t...config\n\t\t\t}\n\t\t});\n\t}\n\tcalculationCache[cacheKey] = animation;\n\treturn animation;\n}\nconst measureCache = /* @__PURE__ */ new Map();\nfunction measureSpring({ fps, config = {}, threshold = .005 }) {\n\tif (typeof threshold !== \"number\") throw new TypeError(`threshold must be a number, got ${threshold}`);\n\tif (threshold === 0) return Infinity;\n\tif (threshold === 1) return 0;\n\tif (Number.isNaN(threshold)) throw new TypeError(\"Threshold is NaN\");\n\tif (!Number.isFinite(threshold)) throw new TypeError(\"Threshold is not finite\");\n\tif (threshold < 0) throw new TypeError(\"Threshold is below 0\");\n\tconst cacheKey = [\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness,\n\t\tthreshold\n\t].join(\"-\");\n\tif (measureCache.has(cacheKey)) return measureCache.get(cacheKey);\n\tlet frame = 0;\n\tlet finishedFrame = 0;\n\tconst calc = () => {\n\t\treturn springCalculation({\n\t\t\tfps,\n\t\t\tframe,\n\t\t\tconfig\n\t\t});\n\t};\n\tlet animation = calc();\n\tconst calcDifference = () => {\n\t\treturn Math.abs(animation.current - animation.toValue);\n\t};\n\tlet difference = calcDifference();\n\twhile (difference >= threshold) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t}\n\tfinishedFrame = frame;\n\tfor (let i = 0; i < 20; i++) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t\tif (difference >= threshold) {\n\t\t\ti = 0;\n\t\t\tfinishedFrame = frame + 1;\n\t\t}\n\t}\n\tmeasureCache.set(cacheKey, finishedFrame);\n\treturn finishedFrame;\n}\nfunction spring({ frame: passedFrame, fps, config = {}, from = 0, to = 1, durationInFrames: passedDurationInFrames, durationRestThreshold, delay = 0, reverse = false }) {\n\tconst needsToCalculateNaturalDuration = reverse || typeof passedDurationInFrames !== \"undefined\";\n\tconst naturalDuration = needsToCalculateNaturalDuration ? measureSpring({\n\t\tfps,\n\t\tconfig,\n\t\tthreshold: durationRestThreshold\n\t}) : void 0;\n\tconst naturalDurationGetter = needsToCalculateNaturalDuration ? { get: () => naturalDuration } : { get: () => {\n\t\tthrow new Error(\"did not calculate natural duration\");\n\t} };\n\tconst delayProcessed = (reverse ? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame : passedFrame) + (reverse ? delay : -delay);\n\tconst durationProcessed = passedDurationInFrames === void 0 ? delayProcessed : delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());\n\tif (passedDurationInFrames && delayProcessed > passedDurationInFrames) return to;\n\tconst spr = springCalculation({\n\t\tfps,\n\t\tframe: durationProcessed,\n\t\tconfig\n\t});\n\tconst inner = config.overshootClamping ? to >= from ? Math.min(spr.current, to) : Math.max(spr.current, to) : spr.current;\n\treturn from === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);\n}\n\n//#endregion\n//#region src/text-measurer.ts\nconst cache = /* @__PURE__ */ new Map();\nfunction getCacheKey(text, style) {\n\treturn JSON.stringify({\n\t\ttext,\n\t\t...style\n\t});\n}\n/**\n* Shared text measurer that uses SlugGeometry.measure for all environments.\n*/\nfunction measureText(text, style) {\n\tconst safeText = text ? String(text) : \" \";\n\tconst cacheKey = getCacheKey(safeText, style);\n\tconst cached = cache.get(cacheKey);\n\tif (cached) return cached;\n\tconst fontSize = style.fontSize ?? 48;\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\tconst calculatedLineHeight = style.lineHeight !== void 0 && style.lineHeight < 10 ? style.lineHeight * fontSize : style.lineHeight ?? fontSize * 1.2;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, style.fontWeight, null);\n\tconst padding = style.padding ?? 0;\n\tif (!slugFont) {\n\t\tif (!SlugFontCache.isFailed(fontFamily)) {\n\t\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\t\tSlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).catch(() => {});\n\t\t}\n\t\tconst lines = safeText.split(\"\\n\");\n\t\tlet totalWrappedLines = 0;\n\t\tconst maxW = style.width !== void 0 ? Math.max(10, style.width - padding * 2) : 0;\n\t\tfor (const line of lines) if (maxW > 0) {\n\t\t\tconst estLineWidth = line.length * fontSize * .55 + letterSpacing * line.length;\n\t\t\tconst wrapCount = Math.max(1, Math.ceil(estLineWidth / maxW));\n\t\t\ttotalWrappedLines += wrapCount;\n\t\t} else totalWrappedLines += 1;\n\t\tconst letterGaps = Math.max(0, safeText.length - 1);\n\t\tconst result$1 = {\n\t\t\twidth: style.width !== void 0 ? style.width : Math.ceil(safeText.length * fontSize * .6 + letterSpacing * letterGaps) + padding * 2,\n\t\t\theight: style.height !== void 0 ? style.height : Math.ceil(totalWrappedLines * calculatedLineHeight) + padding * 2\n\t\t};\n\t\tcache.set(cacheKey, result$1);\n\t\treturn result$1;\n\t}\n\tconst measured = SlugGeometry.measure(safeText, slugFont, fontSize, letterSpacing, calculatedLineHeight, style.width !== void 0 ? Math.max(0, style.width - padding * 2) : void 0, style.spans);\n\tconst result = {\n\t\twidth: style.width !== void 0 && !style.keepNaturalWidth ? style.width : Math.ceil(measured.width) + padding * 2,\n\t\theight: style.height !== void 0 ? style.height : Math.ceil(measured.height) + padding * 2\n\t};\n\tcache.set(cacheKey, result);\n\treturn result;\n}\n/**\n* Async variant of measureText. Preloads the Slug font and yields to the browser.\n*/\nfunction measureTextAsync(text, style) {\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return Promise.resolve(measureText(text, style));\n\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\treturn SlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).then(() => measureText(text, style)).catch(() => measureText(text, style));\n}\n\n//#endregion\nexport { Camera3D, Easing, LIGHT_UNIFORM_SIZE_BYTES, Light3D, MAX_LIGHTS, Matrix4Math, Path3D, Vector3Math, bezier, computeStrokeRect, interpolate, mapBlendModeToSkia, measureSpring, measureText, measureTextAsync, parseColorToRgb, preloadCompositionFonts, preloadFont, requiresIsolation, spring, springCalculation };\n//# sourceMappingURL=index.mjs.map","import { DEFAULT_DURATION_MS, getActiveMediaMetadata, resolveMediaMimeType } from \"@framefields/core\";\nimport { getEnv, resolveMediaSourceUrl } from \"@framefields/client-utils\";\nimport { interpolate, spring } from \"@framefields/renderers\";\n\n//#region src/utils/apply-operations.ts\nconst BASE_URL = getEnv(\"BASE_URL\");\nconst CDN_DOMAIN = getEnv(\"R2_CUSTOM_DOMAIN\");\nfunction getFontUrl(name) {\n\tif (CDN_DOMAIN) return `https://${CDN_DOMAIN}/fonts/${name}/font_file.ttf`;\n\treturn `${BASE_URL}/api/v1/fonts/load/${name}`;\n}\n/**\n* Compute render parameters for the CURRENT node only — does NOT recurse into\n* children. Each node in the VirtualMedia tree is responsible for exactly its\n* own operation; `SingleClipComposition` drives traversal via React recursion.\n*\n* This is the correct function to use inside the renderer.\n*/\nfunction computeRenderParams(vv) {\n\tconst op = vv.operation;\n\tconst baseMeta = getActiveMediaMetadata(vv);\n\tconst params = {\n\t\tsourceUrl: void 0,\n\t\ttrimStartSec: 0,\n\t\ttrimEndSec: null,\n\t\tspeed: 1,\n\t\tcropRegion: null,\n\t\tflipH: false,\n\t\tflipV: false,\n\t\trotation: 0,\n\t\teffectiveDurationSec: 0,\n\t\tmimeType: resolveMediaMimeType(vv) || null\n\t};\n\tswitch (op.op) {\n\t\tcase \"text\":\n\t\t\tparams.sourceUrl = void 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tparams.sourceUrl = resolveMediaSourceUrl(vv);\n\t\t\tbreak;\n\t}\n\tconst sourceDurationSec = (baseMeta?.durationMs ?? 0) / 1e3;\n\tparams.effectiveDurationSec = ((params.trimEndSec ?? sourceDurationSec) - params.trimStartSec) / params.speed;\n\treturn params;\n}\n\n//#endregion\n//#region src/utils/timing.ts\nfunction framesToSeconds(frames, fps) {\n\treturn frames / fps;\n}\nfunction secondsToFrames(seconds, fps) {\n\treturn Math.round(seconds * fps);\n}\nfunction formatTimecode(seconds) {\n\tconst mins = Math.floor(seconds / 60);\n\tconst secs = Math.floor(seconds % 60);\n\tconst ms = Math.floor(seconds % 1 * 100);\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}.${ms.toString().padStart(2, \"0\")}`;\n}\n\n//#endregion\n//#region src/utils/layer-logic.ts\nconst isStaticVisualMedia = (type) => type === \"Image\" || type === \"SVG\" || type === \"Text\";\nconst resolveLayerDuration = (layerDurationInMS, metaDurationMs, defaultDuration = DEFAULT_DURATION_MS, type) => {\n\tif (type === \"Caption\") return metaDurationMs && metaDurationMs > 0 ? metaDurationMs : layerDurationInMS || defaultDuration;\n\tconst isStatic = isStaticVisualMedia(type);\n\tif (layerDurationInMS && metaDurationMs && !isStatic) return Math.min(layerDurationInMS, metaDurationMs);\n\treturn layerDurationInMS || metaDurationMs || defaultDuration;\n};\nconst calculateLayerTransform = (layer, frame, fps, viewport) => {\n\tconst relativeFrame = frame - (layer.startFrame ?? 0);\n\tlet x = layer.x ?? 0;\n\tlet y = layer.y ?? 0;\n\tlet scale = layer.scale ?? 1;\n\tlet rotation = layer.rotation ?? 0;\n\tlet opacity = layer.opacity ?? 1;\n\tconst volume = layer.volume ?? 1;\n\tconst layerDurationMs = resolveLayerDuration(layer.durationInMS, layer.virtualMedia?.metadata?.durationMs ?? void 0, DEFAULT_DURATION_MS, layer.type);\n\tconst duration = Math.round(layerDurationMs / 1e3 * fps);\n\tconst animations = layer.type === \"Text\" || layer.type === \"Caption\" ? [] : layer.animations ?? [];\n\tif (animations.length === 0) return {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n\tanimations.forEach((anim) => {\n\t\tconst durFrames = anim.value * fps;\n\t\tconst isOut = anim.type.includes(\"-out\");\n\t\tconst startAnimFrame = isOut ? duration - durFrames : 0;\n\t\tconst endAnimFrame = isOut ? duration : durFrames;\n\t\tif (relativeFrame < startAnimFrame || relativeFrame > endAnimFrame) return;\n\t\tconst progress = interpolate(relativeFrame, [startAnimFrame, endAnimFrame], [0, 1], {\n\t\t\textrapolateLeft: \"clamp\",\n\t\t\textrapolateRight: \"clamp\"\n\t\t});\n\t\tswitch (anim.type) {\n\t\t\tcase \"fade-in\":\n\t\t\t\topacity *= progress;\n\t\t\t\tbreak;\n\t\t\tcase \"fade-out\":\n\t\t\t\topacity *= 1 - progress;\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-left\":\n\t\t\t\tx += -1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-right\":\n\t\t\t\tx += 1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-top\":\n\t\t\t\ty += -1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-bottom\":\n\t\t\t\ty += 1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-in\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [0, 1]);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-out\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [1, 0]);\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-cw\":\n\t\t\t\trotation += 360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-ccw\":\n\t\t\t\trotation += -360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"bounce\": {\n\t\t\t\tconst bounceVal = spring({\n\t\t\t\t\tframe: relativeFrame - startAnimFrame,\n\t\t\t\t\tfps,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdamping: 10,\n\t\t\t\t\t\tmass: .5,\n\t\t\t\t\t\tstiffness: 100\n\t\t\t\t\t},\n\t\t\t\t\tdurationInFrames: durFrames\n\t\t\t\t});\n\t\t\t\tscale *= bounceVal;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"shake\":\n\t\t\t\tx += 20 * Math.sin(relativeFrame * 10 * 2 * Math.PI / durFrames) * (1 - progress);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\treturn {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n};\n\n//#endregion\nexport { framesToSeconds as a, getFontUrl as c, formatTimecode as i, isStaticVisualMedia as n, secondsToFrames as o, resolveLayerDuration as r, computeRenderParams as s, calculateLayerTransform as t };\n//# sourceMappingURL=layer-logic-DBs4NHoi.mjs.map","import { a as framesToSeconds, c as getFontUrl, i as formatTimecode, n as isStaticVisualMedia, o as secondsToFrames, r as resolveLayerDuration, s as computeRenderParams, t as calculateLayerTransform } from \"./layer-logic-DBs4NHoi.mjs\";\nimport { getActiveMediaMetadata, getMediaType, isSignal, updateClockSignals } from \"@framefields/core\";\nimport { audioRegistry, webgpuRegistry } from \"@framefields/node-sdk\";\nimport { drawCaptionNode, drawGifNode, drawImageNode, drawLottieNode, drawParagraphNode, drawSignalNode, drawSvgNode, drawVideoNode, inputStore, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { AudioSampleSink } from \"mediabunny\";\n\n//#region src/compositions/canvas-composition.ts\nconst segmentRangeCache = /* @__PURE__ */ new WeakMap();\nfunction getCachedSegmentRanges(segments, fps) {\n\tconst cached = segmentRangeCache.get(segments);\n\tif (cached && cached.fps === fps) return cached.ranges;\n\tlet currentStart = 0;\n\tconst ranges = segments.map((seg) => {\n\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\tconst start = currentStart;\n\t\tcurrentStart += durFrames;\n\t\treturn {\n\t\t\tseg,\n\t\t\tstart,\n\t\t\tduration: durFrames\n\t\t};\n\t});\n\tsegmentRangeCache.set(segments, {\n\t\tfps,\n\t\tranges\n\t});\n\treturn ranges;\n}\nconst frameCtxPool = [];\nfunction acquireFrameContext() {\n\treturn frameCtxPool.pop() ?? {};\n}\n/**\n* Effect operations carry every config field as a signal. Hand node renderers\n* the plain value for this frame (nested objects/arrays included), keeping only\n* GPU-bound signals intact since those are consumed as textures.\n*/\nfunction resolveSignalOperation(virtualMedia, frameCtx) {\n\tconst op = virtualMedia.operation;\n\tconst resolved = { ...op };\n\tfor (const [key, sig] of Object.entries(op.signals)) if (isSignal(sig) && !sig.gpuBinding) resolved[key] = sig.get(frameCtx);\n\treturn {\n\t\t...virtualMedia,\n\t\toperation: resolved\n\t};\n}\nasync function drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, virtualMedia, props, inheritedSeekOffset = 0, inheritedClockOffset = 0) {\n\tconst fps = props.fps ?? 24;\n\tconst op = virtualMedia.operation;\n\tif (!op) return;\n\tconst isCompositor = op.op === \"Compositor\";\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst segments = op.timeline?.segments || [];\n\tconst localFrame = frame - (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\tconst isTimelineProvider = op.timeline !== void 0 || op.startFrame !== void 0 || op.op === \"compose\";\n\tconst resolvedDurationMs = isTimelineProvider ? getActiveMediaMetadata(virtualMedia)?.durationMs ?? props.durationMs ?? void 0 : props.durationMs ?? getActiveMediaMetadata(virtualMedia)?.durationMs ?? void 0;\n\tif (!(op.op === \"source\" || op.op === \"text\" || op.op === \"caption\")) updateClockSignals(compositionFrame, fps, resolvedDurationMs);\n\tconst frameCtx = acquireFrameContext();\n\tframeCtx.frame = compositionFrame;\n\tframeCtx.fps = fps;\n\tframeCtx.time = fps > 0 ? compositionFrame / fps : 0;\n\tframeCtx.duration = (resolvedDurationMs ?? 0) / 1e3;\n\tframeCtx.durationMs = resolvedDurationMs ?? 0;\n\tframeCtx.progress = resolvedDurationMs && resolvedDurationMs > 0 ? Math.max(0, Math.min(1, compositionFrame / fps * 1e3 / resolvedDurationMs)) : 0;\n\tframeCtx.deltaTime = fps > 0 ? 1 / fps : 0;\n\tconst resolvedElapsedMs = isTimelineProvider ? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0) ?? props.elapsedMs : props.elapsedMs ?? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0);\n\tconst effectiveLocalFrame = localFrame + Math.round(inheritedSeekOffset * fps);\n\tlet activeSeg = null;\n\tlet windowStartFrame = 0;\n\tif (segments.length > 0) {\n\t\tconst active = getCachedSegmentRanges(segments, fps).find(({ start, duration }) => effectiveLocalFrame >= start && effectiveLocalFrame < start + duration);\n\t\tif (active) {\n\t\t\tactiveSeg = active.seg;\n\t\t\twindowStartFrame = active.start;\n\t\t} else return;\n\t}\n\tconst segmentLocalFrame = localFrame - windowStartFrame;\n\tconst accumulatedSeekOffsetSec = inheritedSeekOffset + (activeSeg ? activeSeg.startSec - windowStartFrame / fps : 0);\n\tconst accumulatedClockOffsetSec = inheritedClockOffset + windowStartFrame / fps;\n\tif (typeof op.onRequestFrame === \"function\") op.onRequestFrame(frameCtx);\n\telse if (op.effect && typeof op.effect.notifyFrame === \"function\") op.effect.notifyFrame(frameCtx);\n\tconst CustomRenderer = webgpuRegistry.get(op.op);\n\tif (CustomRenderer) {\n\t\tif (op.signals) virtualMedia = resolveSignalOperation(virtualMedia, frameCtx);\n\t\tconst inputs = op?.inputs;\n\t\tif (inputs) {\n\t\t\tfor (const entry of Object.values(inputs)) if (entry?.connectionValid && entry?.outputItem?.type === \"LUT\") {\n\t\t\t\tconst lutVirtualMedia = entry.outputItem.data;\n\t\t\t\tif (lutVirtualMedia && typeof lutVirtualMedia === \"object\" && lutVirtualMedia.operation) {\n\t\t\t\t\tconst lutW = lutVirtualMedia.metadata?.width ?? targetWidth;\n\t\t\t\t\tconst lutH = lutVirtualMedia.metadata?.height ?? targetHeight;\n\t\t\t\t\tconst dummyTex = ctx.renderer.getTemporaryTexture(lutW, lutH);\n\t\t\t\t\tawait drawCompositionTree(ctx, encoder, dummyTex.createView(), dummyTex, lutW, lutH, lutVirtualMedia, {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tcompositionFrame,\n\t\t\t\t\t\tvirtualMedia: lutVirtualMedia\n\t\t\t\t\t}, accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t\t}\n\t\t\t} else if (entry?.connectionValid && entry?.outputItem?.type === \"Signal\") {\n\t\t\t\tconst sigData = entry.outputItem.data;\n\t\t\t\tif (sigData && typeof sigData === \"object\") await signalRegistry.ensureAudioSourcesExtracted(ctx.device, sigData.signalConfig ?? sigData, fps, props.renderId);\n\t\t\t}\n\t\t}\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tlet passEnded = false;\n\t\tconst originalEnd = pass.end.bind(pass);\n\t\tpass.end = () => {\n\t\t\tif (!passEnded) {\n\t\t\t\toriginalEnd();\n\t\t\t\tpassEnded = true;\n\t\t\t}\n\t\t};\n\t\tconst renderArgs = {\n\t\t\tctx,\n\t\t\tencoder,\n\t\t\tpass,\n\t\t\ttargetView,\n\t\t\ttargetTexture,\n\t\t\ttargetWidth,\n\t\t\ttargetHeight,\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tcompositionFrame,\n\t\t\t\tvirtualMedia,\n\t\t\t\tinheritedSeekOffset: accumulatedSeekOffsetSec,\n\t\t\t\tinheritedClockOffset: accumulatedClockOffsetSec,\n\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t},\n\t\t\tdrawChild: async (child, overrides, targetViewOverride, targetTextureOverride, targetWidthOverride, targetHeightOverride) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, targetViewOverride ?? targetView, targetTextureOverride ?? targetTexture, targetWidthOverride ?? targetWidth, targetHeightOverride ?? targetHeight, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\tvirtualMedia: child,\n\t\t\t\t\t...overrides,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...overrides?.excludeTextures || [],\n\t\t\t\t\t\ttargetTextureOverride ?? targetTexture\n\t\t\t\t\t]\n\t\t\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t}\n\t\t};\n\t\tawait CustomRenderer(renderArgs);\n\t\trenderArgs.pass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"LUT\") return;\n\tif (op.op === \"Signal\" || op.op === \"SignalMath\" || op.dataType === \"Signal\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tawait drawSignalNode(ctx, encoder, pass, {\n\t\t\tnodeId: op.nodeId || op.signalConfig?.nodeId || props.renderId,\n\t\t\tfunc: op.func,\n\t\t\tamplitude: Number(op.amplitude ?? 1),\n\t\t\tfrequency: Number(op.frequency ?? 1),\n\t\t\tphase: Number(op.phase ?? 0),\n\t\t\toffset: Number(op.offset ?? 0),\n\t\t\tsignalConfig: {\n\t\t\t\t...op.signalConfig,\n\t\t\t\t...op\n\t\t\t},\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tdurationMs: resolvedDurationMs ?? 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight,\n\t\t\tdrawChild: async (child, childProps, childView, childTex, childW, childH) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, childView, childTex, childW, childH, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\t...childProps,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...childProps?.excludeTextures || [],\n\t\t\t\t\t\tchildTex\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"source\" || op.op === \"text\" || op.op === \"caption\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tif (op.op === \"source\") {\n\t\t\tconst mediaType = getMediaType(virtualMedia);\n\t\t\tconst params = computeRenderParams(virtualMedia);\n\t\t\tif (params.sourceUrl) {\n\t\t\t\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\t\t\t\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\t\t\t\tif (mediaType === \"Image\") await drawImageNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"SVG\") await drawSvgNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Lottie\") await drawLottieNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"GIF\") await drawGifNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Text\") {\n\t\t\t\t\tconst opText = { ...op };\n\t\t\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\t\t\ttext: opText.text || \"\",\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: Number(opText.x ?? 0),\n\t\t\t\t\t\t\ty: Number(opText.y ?? 0),\n\t\t\t\t\t\t\twidth: Number(opText.width ?? containerWidth),\n\t\t\t\t\t\t\theight: Number(opText.height ?? containerHeight)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfontFamily: opText.fontFamily,\n\t\t\t\t\t\tfontSize: Number(opText.fontSize ?? 48),\n\t\t\t\t\t\tcolor: opText.fill ?? opText.color ?? \"white\",\n\t\t\t\t\t\twidth: opText.width ? Number(opText.width) : void 0,\n\t\t\t\t\t\theight: opText.height ? Number(opText.height) : void 0,\n\t\t\t\t\t\tlineHeight: Number(opText.lineHeight ?? 1.2),\n\t\t\t\t\t\talign: opText.align,\n\t\t\t\t\t\tverticalAlign: opText.verticalAlign,\n\t\t\t\t\t\tfontWeight: opText.fontWeight,\n\t\t\t\t\t\tfontStyle: opText.fontStyle,\n\t\t\t\t\t\tletterSpacing: opText.letterSpacing,\n\t\t\t\t\t\tshadows: opText.shadows,\n\t\t\t\t\t\ttextBackgroundColor: opText.textBackgroundColor,\n\t\t\t\t\t\tborderRadius: opText.borderRadius != null ? Number(opText.borderRadius) : void 0,\n\t\t\t\t\t\tpadding: opText.padding != null ? Number(opText.padding) : void 0,\n\t\t\t\t\t\tstroke: opText.stroke,\n\t\t\t\t\t\tstrokeWidth: opText.strokeWidth ?? opText.strokeThickness ? Number(opText.strokeWidth ?? opText.strokeThickness) : void 0,\n\t\t\t\t\t\tstrokeAlign: opText.strokeAlign,\n\t\t\t\t\t\topacity: Number(opText.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tanimation: opText.animation ?? opText.textAnimation,\n\t\t\t\t\t\tanimators: opText.animators,\n\t\t\t\t\t\tpathOptions: opText.pathOptions,\n\t\t\t\t\t\ttypewriter: opText.typewriter,\n\t\t\t\t\t\tmarquee: opText.marquee,\n\t\t\t\t\t\ttextProgress: opText.textProgress != null ? Number(opText.textProgress) : void 0,\n\t\t\t\t\t\tsignals: props.signals ?? opText.signals,\n\t\t\t\t\t\tfirstMargin: opText.firstMargin != null ? Number(opText.firstMargin) : void 0,\n\t\t\t\t\t\tlastMargin: opText.lastMargin != null ? Number(opText.lastMargin) : void 0,\n\t\t\t\t\t\tbaselineShift: opText.baselineShift != null ? Number(opText.baselineShift) : void 0,\n\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\t\tisVideoMode: props.isVideoMode\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Video\") {\n\t\t\t\t\tconst finalPlaybackRate = Math.max(.01, (Number(props.playbackRateOverride) || 1) * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(props.trimStartOverride) || 0) + (Number(params.trimStartSec) || 0) + accumulatedSeekOffsetSec);\n\t\t\t\t\tconst rawTimestampSec = segmentLocalFrame / fps * finalPlaybackRate + effectiveTrimSec;\n\t\t\t\t\tconst timestampSec = Math.max(0, Number.isFinite(rawTimestampSec) ? rawTimestampSec : 0);\n\t\t\t\t\tawait drawVideoNode(ctx, pass, {\n\t\t\t\t\t\tnodeId: props.renderId,\n\t\t\t\t\t\tframeKey: `${props.renderId ?? \"video\"}-${params.sourceUrl}-${Math.round(timestampSec * fps)}`,\n\t\t\t\t\t\tsourceUrl: params.sourceUrl,\n\t\t\t\t\t\ttimestampSec,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisPlaying: props.isPlaying,\n\t\t\t\t\t\tforceWait: props.forceWait\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Caption\") {\n\t\t\t\t\tconst opCap = {\n\t\t\t\t\t\t...op,\n\t\t\t\t\t\t...props\n\t\t\t\t\t};\n\t\t\t\t\tawait drawCaptionNode(ctx, pass, {\n\t\t\t\t\t\trenderId: props.renderId,\n\t\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\tfontFamily: opCap.fontFamily,\n\t\t\t\t\t\tfontSize: Number(opCap.fontSize ?? 48),\n\t\t\t\t\t\tcolor: opCap.fill ?? opCap.color ?? \"white\",\n\t\t\t\t\t\tlineHeight: Number(opCap.lineHeight ?? 1.2),\n\t\t\t\t\t\talign: opCap.align === \"start\" ? \"left\" : opCap.align === \"end\" ? \"right\" : opCap.align ?? \"center\",\n\t\t\t\t\t\ttextAlignVertical: opCap.verticalAlign ?? opCap.textAlignVertical,\n\t\t\t\t\t\tfontWeight: opCap.fontWeight,\n\t\t\t\t\t\tfontStyle: opCap.fontStyle,\n\t\t\t\t\t\tletterSpacing: opCap.letterSpacing,\n\t\t\t\t\t\tshadows: opCap.shadows,\n\t\t\t\t\t\ttextBackgroundColor: opCap.background ?? opCap.textBackgroundColor,\n\t\t\t\t\t\tborderRadius: (opCap.borderRadius ?? opCap.strokeRadius) != null ? Number(opCap.borderRadius ?? opCap.strokeRadius) : void 0,\n\t\t\t\t\t\tstrokeRadius: (opCap.strokeRadius ?? opCap.borderRadius) != null ? Number(opCap.strokeRadius ?? opCap.borderRadius) : void 0,\n\t\t\t\t\t\tstroke: opCap.stroke,\n\t\t\t\t\t\tstrokeWidth: (opCap.strokeWidth ?? opCap.strokeThickness) != null ? Number(opCap.strokeWidth ?? opCap.strokeThickness) : void 0,\n\t\t\t\t\t\tmaxWidth: opCap.maxWidth,\n\t\t\t\t\t\tpadding: opCap.padding != null ? Number(opCap.padding) : void 0,\n\t\t\t\t\t\topacity: Number(opCap.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisVideoMode: props.isVideoMode\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (op.op === \"text\") {\n\t\t\tconst opText = { ...op };\n\t\t\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\t\t\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\trenderId: props.renderId,\n\t\t\t\ttext: opText.text || \"\",\n\t\t\t\tdstRect: {\n\t\t\t\t\tx: Number(opText.x ?? 0),\n\t\t\t\t\ty: Number(opText.y ?? 0),\n\t\t\t\t\twidth: Number(opText.width ?? containerWidth),\n\t\t\t\t\theight: Number(opText.height ?? containerHeight)\n\t\t\t\t},\n\t\t\t\tspans: opText.spans,\n\t\t\t\tfontFamily: opText.fontFamily,\n\t\t\t\tfontSize: Number(opText.fontSize ?? 48),\n\t\t\t\tcolor: opText.fill ?? opText.color ?? \"white\",\n\t\t\t\twidth: opText.width ? Number(opText.width) : void 0,\n\t\t\t\theight: opText.height ? Number(opText.height) : void 0,\n\t\t\t\tlineHeight: Number(opText.lineHeight ?? 1.2),\n\t\t\t\talign: opText.align,\n\t\t\t\tverticalAlign: opText.verticalAlign,\n\t\t\t\tfontWeight: opText.fontWeight,\n\t\t\t\tfontStyle: opText.fontStyle,\n\t\t\t\tletterSpacing: opText.letterSpacing,\n\t\t\t\tshadows: opText.shadows,\n\t\t\t\ttextBackgroundColor: opText.textBackgroundColor,\n\t\t\t\tborderRadius: (opText.borderRadius ?? opText.strokeRadius) != null ? Number(opText.borderRadius ?? opText.strokeRadius) : void 0,\n\t\t\t\tstrokeRadius: (opText.strokeRadius ?? opText.borderRadius) != null ? Number(opText.strokeRadius ?? opText.borderRadius) : void 0,\n\t\t\t\tpadding: opText.padding != null ? Number(opText.padding) : void 0,\n\t\t\t\tstroke: opText.stroke,\n\t\t\t\tstrokeWidth: opText.strokeWidth ?? opText.strokeThickness ? Number(opText.strokeWidth ?? opText.strokeThickness) : void 0,\n\t\t\t\tstrokeAlign: opText.strokeAlign,\n\t\t\t\topacity: Number(opText.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\tanimation: opText.animation ?? opText.textAnimation,\n\t\t\t\tanimators: opText.animators,\n\t\t\t\tpathOptions: opText.pathOptions,\n\t\t\t\ttypewriter: opText.typewriter,\n\t\t\t\tmarquee: opText.marquee,\n\t\t\t\tsignals: props.signals ?? opText.signals,\n\t\t\t\tfirstMargin: opText.firstMargin != null ? Number(opText.firstMargin) : void 0,\n\t\t\t\tlastMargin: opText.lastMargin != null ? Number(opText.lastMargin) : void 0,\n\t\t\t\tbaselineShift: opText.baselineShift != null ? Number(opText.baselineShift) : void 0,\n\t\t\t\tframe: localFrame,\n\t\t\t\tfps,\n\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\tisVideoMode: props.isVideoMode\n\t\t\t});\n\t\t}\n\t\tpass.end();\n\t}\n\tif (virtualMedia.children && virtualMedia.children.length > 0) for (let i = 0; i < virtualMedia.children.length; i++) {\n\t\tconst child = virtualMedia.children[i];\n\t\tif (child) await drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, child, {\n\t\t\t...props,\n\t\t\tcompositionFrame,\n\t\t\tdurationMs: resolvedDurationMs,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tvirtualMedia: child,\n\t\t\trenderId: `${props.renderId}-c${i}`\n\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t}\n}\n\n//#endregion\n//#region src/compositions/composition-state.ts\nconst DEFAULT_STATE = {\n\tframe: 0,\n\tfps: 30,\n\tisPlaying: false\n};\nvar CompositionStateStore = class {\n\tstates = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Map();\n\tsetState(key, frame, fps, isPlaying) {\n\t\tconst current = this.states.get(key);\n\t\tconst resolvedPlaying = isPlaying !== void 0 ? isPlaying : current?.isPlaying ?? false;\n\t\tif (current?.frame === frame && current?.fps === fps && current?.isPlaying === resolvedPlaying) return;\n\t\tthis.states.set(key, {\n\t\t\tframe,\n\t\t\tfps,\n\t\t\tisPlaying: resolvedPlaying\n\t\t});\n\t\tthis.notify(key);\n\t}\n\tgetState(key) {\n\t\tif (this.states.has(key)) return this.states.get(key);\n\t\tfor (const [storeKey, value] of this.states.entries()) if (key.startsWith(storeKey)) return value;\n\t\treturn DEFAULT_STATE;\n\t}\n\tsubscribe(key, listener) {\n\t\tif (!this.listeners.has(key)) this.listeners.set(key, /* @__PURE__ */ new Set());\n\t\tthis.listeners.get(key).add(listener);\n\t\treturn () => {\n\t\t\tconst set = this.listeners.get(key);\n\t\t\tset?.delete(listener);\n\t\t\tif (set?.size === 0) {\n\t\t\t\tthis.listeners.delete(key);\n\t\t\t\tthis.states.delete(key);\n\t\t\t}\n\t\t};\n\t}\n\tclearKey(key) {\n\t\tthis.states.delete(key);\n\t}\n\tnotify(key) {\n\t\tfor (const [listenerKey, set] of this.listeners.entries()) if (listenerKey === key || listenerKey.startsWith(key)) set.forEach((l) => l());\n\t}\n};\nconst compositionStateStore = new CompositionStateStore();\n\n//#endregion\n//#region src/utils/normalization.ts\n/**\n* normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n* generic timeline-shifting operations into standard properties\n* of their children.\n*/\nfunction normalizeTimeline(vv, fps, context = { timeOffsetSec: 0 }) {\n\tif (!vv) return vv;\n\tconst { operation, metadata = {}, children = [] } = vv;\n\tconst { timeOffsetSec, durationLimitMs } = context;\n\tif (!operation) return {\n\t\t...vv,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, context))\n\t};\n\tconst timeline = operation.timeline;\n\tconst segments = timeline?.segments || [];\n\tlet totalDurationMs = getActiveMediaMetadata(vv)?.durationMs ?? 0;\n\tif (segments.length > 0) {\n\t\tconst totalSegmentsFrames = segments.reduce((acc, seg) => {\n\t\t\tconst durSec = seg.endSec != null ? seg.endSec - seg.startSec : 0;\n\t\t\treturn acc + Math.max(1, Math.round(durSec * fps));\n\t\t}, 0);\n\t\tif (totalSegmentsFrames > 0) totalDurationMs = totalSegmentsFrames / fps * 1e3;\n\t}\n\tconst newOperation = { ...operation };\n\tconst rawStartFrame = timeline?.startFrame ?? newOperation.startFrame;\n\tif (typeof rawStartFrame === \"number\") newOperation.startFrame = rawStartFrame - secondsToFrames(timeOffsetSec, fps);\n\tconst newMetadata = {\n\t\t...metadata,\n\t\tdurationMs: totalDurationMs\n\t};\n\tconst childContext = typeof rawStartFrame === \"number\" || newOperation.op === \"compose\" ? {\n\t\ttimeOffsetSec: 0,\n\t\tdurationLimitMs: void 0\n\t} : {\n\t\ttimeOffsetSec,\n\t\tdurationLimitMs\n\t};\n\treturn {\n\t\tmetadata: newMetadata,\n\t\toperation: newOperation,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, childContext))\n\t};\n}\n\n//#endregion\n//#region src/utils/audio-extractor.ts\nconst verbose = typeof process !== \"undefined\" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? \"\");\nlet mediaLogger = {\n\tdebug: (msg, ...args) => {\n\t\tif (!verbose) return;\n\t\tif (typeof msg === \"object\" && msg !== null) console.info(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.info(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\twarn: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.warn(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.warn(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\terror: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.error(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.error(`[AudioExtractor] ${msg}`, ...args);\n\t}\n};\nif (typeof window === \"undefined\" || typeof process !== \"undefined\" && process.versions?.node) import(\n\t/* webpackIgnore: true */\n\t/* @vite-ignore */\n\t\"@framefields/server-utils\"\n).then((m) => {\n\tif (m.mediaLogger) mediaLogger = m.mediaLogger;\n}).catch(() => {});\nconst yieldToMain = () => {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tconst sched = globalThis.scheduler;\n\treturn typeof sched?.yield === \"function\" ? sched.yield() : new Promise((resolve) => setTimeout(resolve, 0));\n};\nconst waitForDelayRender = async (timeoutMs = 3e4) => {\n\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\tconst start = Date.now();\n\treturn new Promise((resolve) => {\n\t\tconst check = () => {\n\t\t\tconst browserHandles = typeof window !== \"undefined\" && window.renderer_delayRenderHandles ? window.renderer_delayRenderHandles : [];\n\t\t\tconst globalDelays = typeof globalThis !== \"undefined\" ? globalThis.__GATEWAI_DELAYS__ : null;\n\t\t\tconst hasBrowserDelays = browserHandles.length > 0;\n\t\t\tconst hasGlobalDelays = globalDelays instanceof Set && globalDelays.size > 0;\n\t\t\tif (!hasBrowserDelays && !hasGlobalDelays) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Date.now() - start > timeoutMs) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] waitForDelayRender timed out waiting for handles: ${JSON.stringify({\n\t\t\t\t\tbrowserHandles,\n\t\t\t\t\tglobalDelays: globalDelays ? Array.from(globalDelays) : []\n\t\t\t\t})}`);\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTimeout(check, 50);\n\t\t};\n\t\tcheck();\n\t});\n};\n/**\n* Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n*/\nasync function decodeAudioSource(url) {\n\tmediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);\n\ttry {\n\t\tif (typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && !(typeof process !== \"undefined\" && process.versions && process.versions.node)) {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Browser detected. Fetching arrayBuffer for ${url}...`);\n\t\t\tconst AudioContextClass = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (!AudioContextClass) throw new Error(\"AudioContext is not supported in this browser\");\n\t\t\tconst audioCtx = new AudioContextClass();\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetch response status for ${url}: ${response.status} (${response.statusText})`);\n\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch audio source: ${response.statusText}`);\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetched ${arrayBuffer.byteLength} bytes. Decoding audio data...`);\n\t\t\t\tconst audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Decoded successfully: ${audioBuffer.numberOfChannels} channels, sampleRate: ${audioBuffer.sampleRate}, duration: ${audioBuffer.duration}s`);\n\t\t\t\tconst channels = [];\n\t\t\t\tfor (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));\n\t\t\t\treturn {\n\t\t\t\t\tchannels,\n\t\t\t\t\tsampleRate: audioBuffer.sampleRate\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\taudioCtx.close();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] AudioContext closed for ${url}`);\n\t\t\t}\n\t\t}\n\t\tlet inputAcquired = false;\n\t\ttry {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Server / Node.js detected. Acquiring from inputStore for ${url}...`);\n\t\t\tconst input = await inputStore.acquire(url);\n\t\t\tinputAcquired = true;\n\t\t\tmediaLogger.debug(`[AudioExtractor] inputStore acquired. Retrieving primary audio track...`);\n\t\t\tconst track = await input.getPrimaryAudioTrack();\n\t\t\tif (!track) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] No primary audio track found in input for ${url}`);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst generator = new AudioSampleSink(track).samples(0);\n\t\t\tconst decodedPlanes = [];\n\t\t\tlet totalFrames = 0;\n\t\t\tlet sampleRate = 48e3;\n\t\t\tlet numChannels = 1;\n\t\t\tmediaLogger.debug(`[AudioExtractor] Starting mediabunny generator loop for ${url}...`);\n\t\t\tfor await (const sample of generator) {\n\t\t\t\tsampleRate = sample.sampleRate;\n\t\t\t\tnumChannels = sample.numberOfChannels;\n\t\t\t\tconst sampleFrames = sample.numberOfFrames;\n\t\t\t\tif (decodedPlanes.length === 0) for (let c = 0; c < numChannels; c++) decodedPlanes.push([]);\n\t\t\t\tfor (let c = 0; c < numChannels; c++) {\n\t\t\t\t\tlet planeBuffer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\tsample.copyTo(planeBuffer, {\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({ planeIndex: c });\n\t\t\t\t\t\tif (sample.format === \"s16\" || sample.format === \"s16-planar\") {\n\t\t\t\t\t\t\tconst int16Buffer = new Int16Array(allocSize / 2);\n\t\t\t\t\t\t\tsample.copyTo(int16Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int16Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int16Buffer.length; i++) planeBuffer[i] = (int16Buffer[i] ?? 0) / 32768;\n\t\t\t\t\t\t} else if (sample.format === \"s32\" || sample.format === \"s32-planar\") {\n\t\t\t\t\t\t\tconst int32Buffer = new Int32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(int32Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int32Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int32Buffer.length; i++) planeBuffer[i] = (int32Buffer[i] ?? 0) / 2147483648;\n\t\t\t\t\t\t} else if (sample.format === \"u8\" || sample.format === \"u8-planar\") {\n\t\t\t\t\t\t\tconst u8Buffer = new Uint8Array(allocSize);\n\t\t\t\t\t\t\tsample.copyTo(u8Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(u8Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < u8Buffer.length; i++) planeBuffer[i] = ((u8Buffer[i] ?? 128) - 128) / 128;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(planeBuffer, { planeIndex: c });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdecodedPlanes[c].push(planeBuffer);\n\t\t\t\t}\n\t\t\t\ttotalFrames += sampleFrames;\n\t\t\t\tsample.close();\n\t\t\t}\n\t\t\tmediaLogger.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${totalFrames}`);\n\t\t\tif (totalFrames === 0 || decodedPlanes.length === 0) return null;\n\t\t\treturn {\n\t\t\t\tchannels: decodedPlanes.map((planes) => {\n\t\t\t\t\tconst merged = new Float32Array(totalFrames);\n\t\t\t\t\tlet offset = 0;\n\t\t\t\t\tfor (const plane of planes) {\n\t\t\t\t\t\tmerged.set(plane, offset);\n\t\t\t\t\t\toffset += plane.length;\n\t\t\t\t\t}\n\t\t\t\t\treturn merged;\n\t\t\t\t}),\n\t\t\t\tsampleRate\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tif (typeof process !== \"undefined\" && process.versions?.node) try {\n\t\t\t\tconst { execSync } = await import(\"node:child_process\");\n\t\t\t\tconst stdout = execSync(`ffmpeg -v error -i \"${url}\" -f f32le -ar 48000 -ac 2 pipe:1`, { maxBuffer: 100 * 1024 * 1024 });\n\t\t\t\tconst totalSamples = stdout.byteLength / 4;\n\t\t\t\tconst numFrames = totalSamples / 2;\n\t\t\t\tconst interleaved = new Float32Array(stdout.buffer, stdout.byteOffset, totalSamples);\n\t\t\t\tconst left = new Float32Array(numFrames);\n\t\t\t\tconst right = new Float32Array(numFrames);\n\t\t\t\tfor (let i = 0; i < numFrames; i++) {\n\t\t\t\t\tleft[i] = interleaved[i * 2];\n\t\t\t\t\tright[i] = interleaved[i * 2 + 1];\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tchannels: [left, right],\n\t\t\t\t\tsampleRate: 48e3\n\t\t\t\t};\n\t\t\t} catch (ffmpegErr) {\n\t\t\t\tmediaLogger.warn({ ffmpegErr }, `[AudioExtractor] ffmpeg fallback decode failed for ${url}`);\n\t\t\t}\n\t\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tif (inputAcquired) inputStore.release(url);\n\t\t}\n\t} catch (err) {\n\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\treturn null;\n\t}\n}\n/**\n* Resamples a PCM buffer using linear interpolation to target sample rate & speed.\n*/\nasync function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples) {\n\tconst output = new Float32Array(outputLength);\n\tconst factor = sourceSampleRate / targetSampleRate * speed;\n\tconst YIELD_INTERVAL = 1e5;\n\tfor (let i = 0; i < outputLength; i++) {\n\t\tif (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();\n\t\tconst srcIndex = trimOffsetSamples + i * factor;\n\t\tconst indexFloor = Math.floor(srcIndex);\n\t\tconst indexCeil = Math.ceil(srcIndex);\n\t\tif (indexFloor < 0) {\n\t\t\toutput[i] = 0;\n\t\t\tcontinue;\n\t\t}\n\t\tif (indexFloor >= inputChannel.length) break;\n\t\tconst weight = srcIndex - indexFloor;\n\t\tconst sampleFloor = inputChannel[indexFloor] ?? 0;\n\t\tconst val = sampleFloor + weight * ((indexCeil >= 0 && indexCeil < inputChannel.length ? inputChannel[indexCeil] ?? sampleFloor : sampleFloor) - sampleFloor);\n\t\toutput[i] = Number.isFinite(val) ? val : 0;\n\t}\n\treturn output;\n}\n/**\n* Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n* into a single unified stereo PCM stream (Float32Array channels).\n*/\nasync function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId) {\n\tmediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);\n\tawait waitForDelayRender();\n\tshaderStore.registerSignalsFromComposition(renderId, virtualMedia);\n\tconst durationMs = getActiveMediaMetadata(virtualMedia)?.durationMs || 1e3;\n\tconst totalDurationSec = durationMs / 1e3;\n\tconst totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);\n\tmediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);\n\tconst outputLeft = new Float32Array(totalTargetSamples);\n\tconst outputRight = new Float32Array(totalTargetSamples);\n\tconst mixedChannels = [outputLeft, outputRight];\n\tconst decodedCache = /* @__PURE__ */ new Map();\n\tasync function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {\n\t\tif (!node) return null;\n\t\tconst op = node.operation;\n\t\tif (!op) {\n\t\t\tconst durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\t\tconst durationFrames = Math.round(durationMs$1 / 1e3 * fps);\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;\n\t\t\tconst localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);\n\t\t\tif (localSamplesCount$1 <= 0) return null;\n\t\t\tconst localChannels$1 = [new Float32Array(localSamplesCount$1), new Float32Array(localSamplesCount$1)];\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst childStartSample = Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tfor (let c = 0; c < 2; c++) {\n\t\t\t\t\t\tconst dest = localChannels$1[c];\n\t\t\t\t\t\tconst src = childChannels[c];\n\t\t\t\t\t\tconst len = Math.min(src.length, dest.length - childStartSample);\n\t\t\t\t\t\tfor (let i = 0; i < len; i++) if (childStartSample + i >= 0) dest[childStartSample + i] += src[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn localChannels$1;\n\t\t}\n\t\tconst volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);\n\t\tconst speedMultiplier = inheritedSpeed;\n\t\tconst localClockFrames = inheritedClockFrames + (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\t\tconst segments = op.timeline?.segments || [];\n\t\tconst layer = op;\n\t\tconst layerTrimSec = layer.op === \"CompositorLayer\" ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? null) !== null ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? 0) / fps : Math.round((layer.trimStartSec ?? 0) * fps) / fps : 0;\n\t\tconst nodeDurationMs = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\tconst nodeDurationFrames = Math.round(nodeDurationMs / 1e3 * fps);\n\t\tconst nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;\n\t\tconst localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);\n\t\tif (localSamplesCount <= 0) return null;\n\t\tconst localLeft = new Float32Array(localSamplesCount);\n\t\tconst localRight = new Float32Array(localSamplesCount);\n\t\tconst localChannels = [localLeft, localRight];\n\t\tconst processSegment = async (seg, windowStartFrameOffset) => {\n\t\t\tconst segSeekSec = seg ? seg.startSec : 0;\n\t\t\tconst totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;\n\t\t\tconst totalClockFrames = localClockFrames + windowStartFrameOffset;\n\t\t\tlet segDurationFrames = 0;\n\t\t\tif (seg) segDurationFrames = Math.max(1, Math.round(((seg.endSec ?? 0) - seg.startSec) * fps));\n\t\t\telse segDurationFrames = nodeDurationFrames;\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? Math.min(inheritedDurationFrames, segDurationFrames) : segDurationFrames;\n\t\t\tconst segmentStartSample = Math.round(windowStartFrameOffset / fps * targetSampleRate);\n\t\t\tif (op.op === \"source\") {\n\t\t\t\tconst mediaType = getMediaType(node);\n\t\t\t\tconst params = computeRenderParams(node);\n\t\t\t\tif (params.sourceUrl && (mediaType === \"Audio\" || mediaType === \"Video\") && volume > 0) {\n\t\t\t\t\tconst finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);\n\t\t\t\t\tlet decoded = decodedCache.get(params.sourceUrl);\n\t\t\t\t\tif (decoded === void 0) {\n\t\t\t\t\t\tdecoded = await decodeAudioSource(params.sourceUrl);\n\t\t\t\t\t\tdecodedCache.set(params.sourceUrl, decoded);\n\t\t\t\t\t}\n\t\t\t\t\tif (decoded) {\n\t\t\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\t\t\tif (clipSamplesCount > 0 && segmentStartSample < localSamplesCount) {\n\t\t\t\t\t\t\tconst trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);\n\t\t\t\t\t\t\tconst srcLeft = decoded.channels[0];\n\t\t\t\t\t\t\tconst srcRight = decoded.channels.length > 1 ? decoded.channels[1] : decoded.channels[0];\n\t\t\t\t\t\t\tconst stretchedLeft = await resampleAndStretchPCM(srcLeft, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);\n\t\t\t\t\t\t\tconst stretchedRight = await resampleAndStretchPCM(srcRight, decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples);\n\t\t\t\t\t\t\tfor (let i = 0; i < clipSamplesCount; i++) {\n\t\t\t\t\t\t\t\tconst outIndex = segmentStartSample + i;\n\t\t\t\t\t\t\t\tlocalLeft[outIndex] += stretchedLeft[i] * volume;\n\t\t\t\t\t\t\t\tlocalRight[outIndex] += stretchedRight[i] * volume;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait yieldToMain();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children) for (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst destStartSample = segmentStartSample + Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tfor (let c = 0; c < 2; c++) {\n\t\t\t\t\t\tconst dest = localChannels[c];\n\t\t\t\t\t\tconst src = childChannels[c];\n\t\t\t\t\t\tconst len = Math.min(src.length, dest.length - destStartSample);\n\t\t\t\t\t\tfor (let i = 0; i < len; i++) if (destStartSample + i >= 0) dest[destStartSample + i] += src[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst pluginProcessor = audioRegistry.get(op.op);\n\t\t\tif (pluginProcessor) try {\n\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\tif (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(localChannels.map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {\n\t\t\t\t\tdevice,\n\t\t\t\t\tframe: totalClockFrames,\n\t\t\t\t\tfps,\n\t\t\t\t\trenderId,\n\t\t\t\t\telapsedMs: (totalClockFrames / fps + totalSeekSec - layerTrimSec) * 1e3,\n\t\t\t\t\tdurationMs: getActiveMediaMetadata(node)?.durationMs ?? void 0\n\t\t\t\t});\n\t\t\t} catch (pluginErr) {\n\t\t\t\tmediaLogger.error({ err: pluginErr }, `[AudioExtractor] Custom plugin for operation '${op.op}' failed`);\n\t\t\t}\n\t\t};\n\t\tif (segments.length > 0) {\n\t\t\tlet currentStart = 0;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\t\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\t\t\tawait processSegment(seg, currentStart);\n\t\t\t\tcurrentStart += durFrames;\n\t\t\t}\n\t\t} else await processSegment(null, 0);\n\t\treturn localChannels;\n\t}\n\tconst rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);\n\tif (rootChannels) for (let c = 0; c < 2; c++) {\n\t\tconst dest = mixedChannels[c];\n\t\tconst src = rootChannels[c];\n\t\tconst len = Math.min(src.length, dest.length);\n\t\tfor (let i = 0; i < len; i++) dest[i] = src[i];\n\t}\n\tdecodedCache.clear();\n\tlet mixPeak = 0;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = Math.abs(outputLeft[i] ?? 0);\n\t\tconst r = Math.abs(outputRight[i] ?? 0);\n\t\tif (l > mixPeak) mixPeak = l;\n\t\tif (r > mixPeak) mixPeak = r;\n\t}\n\tconst autoGain = mixPeak > .95 ? .92 / mixPeak : 1;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = (outputLeft[i] ?? 0) * autoGain;\n\t\tconst r = (outputRight[i] ?? 0) * autoGain;\n\t\toutputLeft[i] = Number.isFinite(l) ? Math.tanh(l) : 0;\n\t\toutputRight[i] = Number.isFinite(r) ? Math.tanh(r) : 0;\n\t}\n\treturn {\n\t\tchannels: mixedChannels,\n\t\tsampleRate: targetSampleRate\n\t};\n}\n\n//#endregion\nexport { calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, getFontUrl, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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AM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5I,MAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC1I,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC5I,MAAI,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3I,MAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACxI,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACzI,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AAC1I,MAAI,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dist-BYqNNwsl.mjs","names":["ConfigBuilder"],"sources":["../../node-sdk/dist/index.mjs"],"sourcesContent":["import { WebGPURegistry, audioRegistry, defineRenderer, isSignal, registerWebGPURenderer, resolveBoolean, resolveNumber, resolveParam, resolveString, webgpuRegistry } from \"./renderer.mjs\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.ts\nvar ConfigBuilder = class ConfigBuilder {\n\tconstructor(shape = {}, options = { strict: true }) {\n\t\tthis.shape = shape;\n\t\tthis.options = options;\n\t}\n\tfield(key, schema, options) {\n\t\tconst withMeta = options ? schema.meta({ ...options }) : schema;\n\t\treturn new ConfigBuilder({\n\t\t\t...this.shape,\n\t\t\t[key]: withMeta\n\t\t}, this.options);\n\t}\n\tbuild() {\n\t\tconst base = z.object(this.shape);\n\t\treturn { schema: this.options.strict !== false ? base.strict() : base };\n\t}\n};\nfunction configBuilder(options = { strict: true }) {\n\treturn new ConfigBuilder({}, options);\n}\n\n//#endregion\n//#region shared/schemas.ts\nconst COMPOSITE_OPERATIONS = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\"\n];\nconst GlobalCompositeOperation = z.enum(COMPOSITE_OPERATIONS);\nconst ColorSchema = z.string().optional();\nconst PercentageSchema = z.number().min(0).max(100);\nconst DimensionSchema = z.number().min(0).optional();\nconst AnimationSchema = z.object({ animations: z.array(z.object({\n\tid: z.string(),\n\ttype: z.enum([\n\t\t\"fade-in\",\n\t\t\"fade-out\",\n\t\t\"slide-in-left\",\n\t\t\"slide-in-right\",\n\t\t\"slide-in-top\",\n\t\t\"slide-in-bottom\",\n\t\t\"zoom-in\",\n\t\t\"zoom-out\",\n\t\t\"rotate-cw\",\n\t\t\"rotate-ccw\",\n\t\t\"bounce\",\n\t\t\"shake\"\n\t]),\n\tvalue: z.number()\n})).optional() });\nconst StrokeSchema = z.object({\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional().default(\"inside\"),\n\tstrokeRadius: z.number().min(0).optional()\n});\nconst ImageResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Image\"), FileDataSchema));\nconst VideoResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Video\"), VirtualMediaDataSchema));\nconst AudioResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Audio\"), VirtualMediaDataSchema));\nconst TextResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Text\"), z.string()));\nconst NumberResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Number\"), z.number()));\nconst SignalResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Signal\"), z.unknown()));\n\n//#endregion\nexport { AnimationSchema, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, FileDataSchema, GlobalCompositeOperation, ImageResultSchema, MultiOutputGenericSchema, NumberResultSchema, PercentageSchema, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResultSchema, VideoResultSchema, VirtualMediaDataSchema, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, isSignal, registerWebGPURenderer, resolveBoolean, resolveNumber, resolveParam, resolveString, webgpuRegistry };\n//# sourceMappingURL=index.mjs.map"],"mappings":";;;;AAKA,IAAI,gBAAgB,MAAMA,gBAAc;CACvC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,MAAM,EAAE;AACnD,OAAK,QAAQ;AACb,OAAK,UAAU;;CAEhB,MAAM,KAAK,QAAQ,SAAS;EAC3B,MAAM,WAAW,UAAU,OAAO,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG;AACzD,SAAO,IAAIA,gBAAc;GACxB,GAAG,KAAK;IACP,MAAM;GACP,EAAE,KAAK,QAAQ;;CAEjB,QAAQ;EACP,MAAM,OAAO,EAAE,OAAO,KAAK,MAAM;AACjC,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,QAAQ,GAAG,MAAM;;;AAGzE,SAAS,cAAc,UAAU,EAAE,QAAQ,MAAM,EAAE;AAClD,QAAO,IAAI,cAAc,EAAE,EAAE,QAAQ;;AAKtC,MAAM,uBAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,2BAA2B,EAAE,KAAK,qBAAqB;AAC7D,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU;AACzC,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AACnD,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;AACpD,MAAM,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;CAC/D,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACjB,MAAM,eAAe,EAAE,OAAO;CAC7B,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,aAAa,EAAE,KAAK;EACnB;EACA;EACA;EACA,CAAC,CAAC,UAAU,CAAC,QAAQ,SAAS;CAC/B,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1C,CAAC;AACF,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,eAAe,CAAC;AAC/G,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,mBAAmB,0BAA0B,uBAAuB,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7G,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC"}
|