framefields 2.4.0 → 2.4.2
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 +11 -33
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-DXwNhi1z.mjs → audio-Bb31xJuX.mjs} +4 -4
- package/dist/{audio-DXwNhi1z.mjs.map → audio-Bb31xJuX.mjs.map} +1 -1
- package/dist/{audio-C6toT7F3.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
- package/dist/{audio-C6toT7F3.d.mts.map → audio-DHuEMOtQ.d.mts.map} +1 -1
- package/dist/{dist-fjKpBYkc.mjs → dist-ClyC_d66.mjs} +9 -2
- package/dist/dist-ClyC_d66.mjs.map +1 -0
- package/dist/{dist-DRB6Vg5u.mjs → dist-CspOG4V1.mjs} +25 -8
- package/dist/dist-CspOG4V1.mjs.map +1 -0
- package/dist/{dist-Cl0mvShy.mjs → dist-CxGfrigI.mjs} +222 -60
- package/dist/dist-CxGfrigI.mjs.map +1 -0
- package/dist/{dist-BY0bIWgr.mjs → dist-SB9qfAko.mjs} +2 -2
- package/dist/{dist-BY0bIWgr.mjs.map → dist-SB9qfAko.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-lBqG-vd1.mjs → effects-BOk_2kzM.mjs} +3 -3
- package/dist/{effects-lBqG-vd1.mjs.map → effects-BOk_2kzM.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DlRJD6NS.mjs → fonts-CsMDfqv9.mjs} +2 -2
- package/dist/{fonts-DlRJD6NS.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
- package/dist/{gpu-DOQX1W2q.mjs → gpu-DtT5I4ME.mjs} +2 -2
- package/dist/{gpu-DOQX1W2q.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
- package/dist/{index-CaiZ5p6q.d.mts → index-B1XcyMm8.d.mts} +2 -2
- package/dist/{index-CaiZ5p6q.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
- package/dist/{index-Cf1pVxn0.d.mts → index-B2Xesdug.d.mts} +4 -4
- package/dist/{index-Cf1pVxn0.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
- package/dist/{index-BONyHjZX.d.mts → index-B3-gwjK6.d.mts} +16 -4
- package/dist/index-B3-gwjK6.d.mts.map +1 -0
- package/dist/{index-BHqdtJbN.d.mts → index-BTPLbjt4.d.mts} +41 -12
- package/dist/index-BTPLbjt4.d.mts.map +1 -0
- package/dist/{index-DN9oXO-X.d.mts → index-D-l-yCv6.d.mts} +3 -3
- package/dist/{index-DN9oXO-X.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
- package/dist/{index-DEODKaL6.d.mts → index-DujpgUUq.d.mts} +7 -2
- package/dist/index-DujpgUUq.d.mts.map +1 -0
- package/dist/index.d.mts +15 -11
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +52 -52
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-Ca4tF5Ro.mjs → preview-DyGw2b3_.mjs} +2 -2
- package/dist/{preview-Ca4tF5Ro.mjs.map → preview-DyGw2b3_.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-SZW5J72T.mjs → chunk-2DDBSI75.mjs} +1 -1
- package/dist/preview-engine/{chunk-QXCY2ATH.mjs → chunk-2GIWWDE4.mjs} +1 -1
- package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-34ACEGNW.mjs} +1 -1
- package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-3ACCCPBN.mjs} +1 -1
- package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-5RQHNB6Y.mjs} +1 -1
- package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-67SSYK7D.mjs} +1 -1
- package/dist/preview-engine/{chunk-PL4IH5V4.mjs → chunk-6K7US2WD.mjs} +1 -1
- package/dist/preview-engine/{chunk-PEWYB6WP.mjs → chunk-7LVOSEGN.mjs} +1 -1
- package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-A5OVKZ52.mjs} +1 -1
- package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-AQNTIWTK.mjs} +1 -1
- package/dist/preview-engine/{chunk-PXT52LEH.mjs → chunk-C6Z7H2RZ.mjs} +1 -1
- package/dist/preview-engine/chunk-CPFPY35C.mjs +1 -0
- package/dist/preview-engine/{chunk-7EPIRODI.mjs → chunk-DOCSX45C.mjs} +1 -1
- package/dist/preview-engine/{chunk-GSFN4WCH.mjs → chunk-FFGBUS76.mjs} +1 -1
- package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-FFMPC7QA.mjs} +1 -1
- package/dist/preview-engine/{chunk-IUPDOATX.mjs → chunk-FHKBALVI.mjs} +1 -1
- package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-G4J662EL.mjs} +1 -1
- package/dist/preview-engine/{chunk-5W4AFQP7.mjs → chunk-GNG4YH2W.mjs} +1 -1
- package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-GQLZXCW3.mjs} +1 -1
- package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-HDGFNBYK.mjs} +1 -1
- package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-HNNIVJ2K.mjs} +1 -1
- package/dist/preview-engine/{chunk-FU7AIAMM.mjs → chunk-HUKAC5MJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-JX22B2FS.mjs} +1 -1
- package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-KAQUNOVB.mjs} +1 -1
- package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-KT35IPCF.mjs} +1 -1
- package/dist/preview-engine/{chunk-VXS5SIEC.mjs → chunk-LIQA5OOU.mjs} +1 -1
- package/dist/preview-engine/{chunk-SGPRLTNF.mjs → chunk-LK3T65RB.mjs} +1 -1
- package/dist/preview-engine/{chunk-YQZOGEPZ.mjs → chunk-LLDIDE5Q.mjs} +1 -1
- package/dist/preview-engine/chunk-NNQUIVTE.mjs +5 -0
- package/dist/preview-engine/{chunk-5AUB4Y3L.mjs → chunk-NRAZV5OA.mjs} +1 -1
- package/dist/preview-engine/{chunk-BSOJR4JU.mjs → chunk-O6NRIXS5.mjs} +1 -1
- package/dist/preview-engine/{chunk-OKH2VU2U.mjs → chunk-PZF6T7DM.mjs} +1 -1
- package/dist/preview-engine/{chunk-OJ2PKBXE.mjs → chunk-QJZKIY4H.mjs} +1 -1
- package/dist/preview-engine/{chunk-WFGJXCZT.mjs → chunk-R26SY5D4.mjs} +1 -1
- package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-RDP6QROU.mjs} +1 -1
- package/dist/preview-engine/{chunk-VK2CVMWJ.mjs → chunk-RHRMEBNK.mjs} +1 -1
- package/dist/preview-engine/{chunk-J2R5R7YY.mjs → chunk-RKVB47IA.mjs} +1 -1
- package/dist/preview-engine/{chunk-PAQNDZQB.mjs → chunk-SWXVITCQ.mjs} +1 -1
- package/dist/preview-engine/{chunk-KERW7QJ4.mjs → chunk-UZBVCYRY.mjs} +1 -1
- package/dist/preview-engine/chunk-VONDRBA2.mjs +1 -0
- package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-WACWOKEP.mjs} +1 -1
- package/dist/preview-engine/{chunk-AXHB4J37.mjs → chunk-WCZ5DKZ4.mjs} +1 -1
- package/dist/preview-engine/{chunk-WH5Q2NFN.mjs → chunk-WJJIISQJ.mjs} +1 -1
- package/dist/preview-engine/chunk-XDMZP3E2.mjs +1 -0
- package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-Z6UKUHPU.mjs} +1 -1
- package/dist/preview-engine/{chunk-WUKH7BD7.mjs → chunk-ZKPQGQE3.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +4 -4
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-2P6KXWEZ.mjs → renderers-3CXFGRE7.mjs} +1 -1
- package/dist/preview-engine/{renderers-KZWGSKRF.mjs → renderers-3FC3WCJN.mjs} +1 -1
- package/dist/preview-engine/renderers-3S2FM33K.mjs +1 -0
- package/dist/preview-engine/{renderers-5FQA2DP4.mjs → renderers-4AJWVIJG.mjs} +1 -1
- package/dist/preview-engine/renderers-53ZTBI3C.mjs +1 -0
- package/dist/preview-engine/renderers-5USBVCMQ.mjs +1 -0
- package/dist/preview-engine/renderers-65G6BLEA.mjs +1 -0
- package/dist/preview-engine/{renderers-PYWXELLG.mjs → renderers-6JZ4HYIU.mjs} +1 -1
- package/dist/preview-engine/{renderers-3GHEWWVX.mjs → renderers-75TL7RLS.mjs} +1 -1
- package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-7CPYTCNW.mjs} +1 -1
- package/dist/preview-engine/renderers-7XU7BXE7.mjs +1 -0
- package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-AZYJFJLO.mjs} +1 -1
- package/dist/preview-engine/{renderers-TR2V2HZ2.mjs → renderers-BDWVXYTW.mjs} +1 -1
- package/dist/preview-engine/renderers-BFXM32BC.mjs +1 -0
- package/dist/preview-engine/renderers-CDXHCWWK.mjs +1 -0
- package/dist/preview-engine/{renderers-N7FR54V2.mjs → renderers-CK3ZL3GM.mjs} +1 -1
- package/dist/preview-engine/renderers-CLUN7WU6.mjs +1 -0
- package/dist/preview-engine/renderers-DTB4HEXU.mjs +1 -0
- package/dist/preview-engine/renderers-EFKNRLYF.mjs +1 -0
- package/dist/preview-engine/{renderers-HQEKSUNR.mjs → renderers-EI6MQ2EL.mjs} +1 -1
- package/dist/preview-engine/{renderers-UPTJJE5F.mjs → renderers-FADYGSLK.mjs} +1 -1
- package/dist/preview-engine/{renderers-I5E2RSV4.mjs → renderers-FKH5S64C.mjs} +1 -1
- package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-FM6A5YR4.mjs} +1 -1
- package/dist/preview-engine/renderers-G2K7ZA5O.mjs +1 -0
- package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-GAIUTII6.mjs} +1 -1
- package/dist/preview-engine/renderers-GTUO5LIV.mjs +1 -0
- package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-GUPEJK3O.mjs} +1 -1
- package/dist/preview-engine/{renderers-IWQ3V6AJ.mjs → renderers-HSJIVP57.mjs} +1 -1
- package/dist/preview-engine/{renderers-4GRVAW2W.mjs → renderers-HZHEGONW.mjs} +1 -1
- package/dist/preview-engine/{renderers-NWHS7N2L.mjs → renderers-IHACBWXI.mjs} +1 -1
- package/dist/preview-engine/{renderers-3YCJOINH.mjs → renderers-IHRFEZNP.mjs} +1 -1
- package/dist/preview-engine/{renderers-A7VH3ON5.mjs → renderers-IJDQJEE5.mjs} +1 -1
- package/dist/preview-engine/{renderers-OT7D3BUA.mjs → renderers-IO3BVVJ7.mjs} +1 -1
- package/dist/preview-engine/renderers-IR772VSN.mjs +1 -0
- package/dist/preview-engine/{renderers-EJWPVVQR.mjs → renderers-K7B5PQBT.mjs} +1 -1
- package/dist/preview-engine/renderers-L6TRJOXA.mjs +1 -0
- package/dist/preview-engine/{renderers-N7TS5562.mjs → renderers-LVLVJHOL.mjs} +1 -1
- package/dist/preview-engine/{renderers-FK72LKQC.mjs → renderers-MBSOKWKB.mjs} +1 -1
- package/dist/preview-engine/{renderers-NC64EQDE.mjs → renderers-N6H6RSF2.mjs} +1 -1
- package/dist/preview-engine/{renderers-ZHZMGMLN.mjs → renderers-NJLGPPX7.mjs} +1 -1
- package/dist/preview-engine/renderers-O5NFQYRQ.mjs +1 -0
- package/dist/preview-engine/renderers-O6V3OEKX.mjs +1 -0
- package/dist/preview-engine/renderers-OODA27UH.mjs +1 -0
- package/dist/preview-engine/{renderers-6CG7DBTB.mjs → renderers-R4WMM6IX.mjs} +1 -1
- package/dist/preview-engine/renderers-RIGW33ZI.mjs +1 -0
- package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-RKZGYWDG.mjs} +1 -1
- package/dist/preview-engine/renderers-RUZRBQ4K.mjs +1 -0
- package/dist/preview-engine/renderers-SKB2GGKS.mjs +1 -0
- package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-SW7FIEKO.mjs} +1 -1
- package/dist/preview-engine/renderers-T4D2TASM.mjs +1 -0
- package/dist/preview-engine/renderers-T74XV36Q.mjs +1 -0
- package/dist/preview-engine/{renderers-F55XFVMP.mjs → renderers-TCNPEANL.mjs} +1 -1
- package/dist/preview-engine/renderers-TOPW2UM3.mjs +1 -0
- package/dist/preview-engine/{renderers-5YEIUTVN.mjs → renderers-TY7DVI7E.mjs} +1 -1
- package/dist/preview-engine/{renderers-YMPXGYRU.mjs → renderers-UDOBX433.mjs} +1 -1
- package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-UMPOVFRA.mjs} +1 -1
- package/dist/preview-engine/renderers-UO5G3Y2G.mjs +1 -0
- package/dist/preview-engine/renderers-UOV7VOJJ.mjs +1 -0
- package/dist/preview-engine/{renderers-MON4QFRF.mjs → renderers-UWKSTSTA.mjs} +1 -1
- package/dist/preview-engine/renderers-VHPAOUTA.mjs +1 -0
- package/dist/preview-engine/{renderers-E76OKK66.mjs → renderers-WR6MKT5S.mjs} +1 -1
- package/dist/preview-engine/{renderers-MCECHPCL.mjs → renderers-XKHNBARD.mjs} +1 -1
- package/dist/preview-engine/renderers-YEQRQJFC.mjs +1 -0
- package/dist/preview-engine/{renderers-RJO6H4FC.mjs → renderers-YRZ3WODX.mjs} +1 -1
- package/dist/preview-engine/renderers-YUTFGVRY.mjs +1 -0
- package/dist/preview-engine/{renderers-3SRG77SC.mjs → renderers-YXOTRKPA.mjs} +1 -1
- package/dist/preview-engine/renderers-ZOU5ARVD.mjs +1 -0
- package/dist/preview-engine/renderers-ZW75LQTR.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-CJEg2wMa.mjs → program-C2cJayA1.mjs} +4 -4
- package/dist/{program-CJEg2wMa.mjs.map → program-C2cJayA1.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-CCu1Q8ib.mjs → renderer--ruTGlPo.mjs} +3 -3
- package/dist/{renderer-CCu1Q8ib.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
- package/dist/{renderer-D-IcBLT0.mjs → renderer-7y5Cj8rV.mjs} +3 -3
- package/dist/{renderer-D-IcBLT0.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
- package/dist/{renderer-Dg5yLAM9.mjs → renderer-92eLJg24.mjs} +4 -4
- package/dist/{renderer-Dg5yLAM9.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
- package/dist/{renderer-CduDa1qf.mjs → renderer-B0gPTXhe.mjs} +3 -3
- package/dist/{renderer-CduDa1qf.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
- package/dist/{renderer-CjTxu89O.mjs → renderer-B1QREs7J.mjs} +3 -3
- package/dist/{renderer-CjTxu89O.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
- package/dist/{renderer-DVaVVz-D.mjs → renderer-B3e4LSE6.mjs} +3 -3
- package/dist/{renderer-DVaVVz-D.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
- package/dist/{renderer-CxSH3F_n.mjs → renderer-B4RpSd4A.mjs} +2 -2
- package/dist/{renderer-CxSH3F_n.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
- package/dist/renderer-BAhZeUUn.mjs +5 -0
- package/dist/{renderer-BZCLdb8F.mjs → renderer-BBAbZfBl.mjs} +4 -4
- package/dist/{renderer-BZCLdb8F.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
- package/dist/{renderer-DZndEvZN.mjs → renderer-BDCy8NgT.mjs} +3 -3
- package/dist/{renderer-DZndEvZN.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
- package/dist/renderer-BHAE_dKq.mjs +5 -0
- package/dist/{renderer-i4RJ-_sx.mjs → renderer-BMKFzfSQ.mjs} +3 -3
- package/dist/{renderer-i4RJ-_sx.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
- package/dist/renderer-BNYZY3FE.mjs +5 -0
- package/dist/{renderer-BtJ6XYN7.mjs → renderer-BPixWnmY.mjs} +3 -3
- package/dist/{renderer-BtJ6XYN7.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
- package/dist/renderer-BSvubMvI.mjs +5 -0
- package/dist/{renderer-CoN2JgLO.mjs → renderer-BTd2sWDC.mjs} +3 -3
- package/dist/{renderer-CoN2JgLO.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
- package/dist/{renderer-DautVsW4.mjs → renderer-BTigwMQp.mjs} +3 -3
- package/dist/{renderer-DautVsW4.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
- package/dist/{renderer-B8v8iEkB.mjs → renderer-BV48PFjX.mjs} +6 -6
- package/dist/{renderer-B8v8iEkB.mjs.map → renderer-BV48PFjX.mjs.map} +1 -1
- package/dist/renderer-B_M_yhTc.mjs +5 -0
- package/dist/renderer-B_xSsTuy.mjs +5 -0
- package/dist/renderer-BePHurAU.mjs +5 -0
- package/dist/renderer-BfZquJrW.mjs +5 -0
- package/dist/{renderer-DAFi5TC_.mjs → renderer-Bi6W4RSn.mjs} +2 -2
- package/dist/{renderer-DAFi5TC_.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
- package/dist/{renderer-Edn9xltT.mjs → renderer-BjCHW9Jp.mjs} +2 -2
- package/dist/{renderer-CJmZURPQ.mjs → renderer-BjvNEbML.mjs} +2 -2
- package/dist/{renderer-CJmZURPQ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
- package/dist/{renderer-C2ZIAhdJ.mjs → renderer-BkWd4-YO.mjs} +2 -2
- package/dist/{renderer-C2ZIAhdJ.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
- package/dist/{renderer-Cfto0m0-.mjs → renderer-Bkrk0M0r.mjs} +3 -3
- package/dist/{renderer-Cfto0m0-.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
- package/dist/{renderer-h9sJnoxw.mjs → renderer-BljMOvry.mjs} +3 -3
- package/dist/{renderer-h9sJnoxw.mjs.map → renderer-BljMOvry.mjs.map} +1 -1
- package/dist/renderer-BuY5ypB2.mjs +5 -0
- package/dist/renderer-BvOQgFHo.mjs +5 -0
- package/dist/{renderer-DqgduGiO.mjs → renderer-BwpgDLYO.mjs} +3 -3
- package/dist/{renderer-DqgduGiO.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
- package/dist/{renderer-DaV95CAd.mjs → renderer-BwwZB2mt.mjs} +4 -4
- package/dist/{renderer-DaV95CAd.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
- package/dist/{renderer-DA1brg35.mjs → renderer-ByCX4JYg.mjs} +3 -3
- package/dist/{renderer-DA1brg35.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
- package/dist/{renderer-Tf1AS1aO.mjs → renderer-C1E5Rt5q.mjs} +3 -3
- package/dist/{renderer-Tf1AS1aO.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
- package/dist/renderer-C7NkSvUz.mjs +5 -0
- package/dist/{renderer-CG4TmDWH.mjs → renderer-CCGzT6bX.mjs} +2 -2
- package/dist/{renderer-wFyrVuuj.mjs → renderer-CDOobs18.mjs} +3 -3
- package/dist/{renderer-wFyrVuuj.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
- package/dist/{renderer-BaHEN_Kv.mjs → renderer-CDUxAtsk.mjs} +4 -4
- package/dist/{renderer-BaHEN_Kv.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
- package/dist/renderer-CIuxV2q1.mjs +5 -0
- package/dist/{renderer-DY8fPeH3.mjs → renderer-CJ4bxCld.mjs} +2 -2
- package/dist/renderer-CKp97tSQ.mjs +5 -0
- package/dist/{renderer-BTJyO6ov.mjs → renderer-CNuVJ4nG.mjs} +2 -2
- package/dist/{renderer-BTJyO6ov.mjs.map → renderer-CNuVJ4nG.mjs.map} +1 -1
- package/dist/renderer-CY89dTFR.mjs +5 -0
- package/dist/renderer-C_B_4Bl0.mjs +5 -0
- package/dist/{renderer-Dk0dnuHr.mjs → renderer-Cbsnj9vV.mjs} +3 -3
- package/dist/{renderer-Dk0dnuHr.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
- package/dist/{renderer-B6UqWjtH.mjs → renderer-CcoUNzlQ.mjs} +3 -3
- package/dist/{renderer-B6UqWjtH.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
- package/dist/renderer-Cd87JOjP.mjs +5 -0
- package/dist/{renderer-BZF48o1T.mjs → renderer-CeiCJCg4.mjs} +3 -3
- package/dist/{renderer-BZF48o1T.mjs.map → renderer-CeiCJCg4.mjs.map} +1 -1
- package/dist/renderer-Cev6orIK.mjs +6 -0
- package/dist/renderer-Cewf6UPh.mjs +5 -0
- package/dist/renderer-CnHsMLIv.mjs +5 -0
- package/dist/{renderer-TyZu7nQ2.mjs → renderer-CoWfz-9p.mjs} +441 -177
- package/dist/renderer-CoWfz-9p.mjs.map +1 -0
- package/dist/renderer-CoxuAr7b.mjs +5 -0
- package/dist/{renderer-D4E8Yf61.mjs → renderer-CqtIbe5n.mjs} +2 -2
- package/dist/{renderer-D4E8Yf61.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
- package/dist/renderer-CrdG7trA.mjs +5 -0
- package/dist/{renderer-C-La-IAt.mjs → renderer-Csss5GFQ.mjs} +2 -2
- package/dist/{renderer-C-La-IAt.mjs.map → renderer-Csss5GFQ.mjs.map} +1 -1
- package/dist/renderer-Cu5MFgbk.mjs +5 -0
- package/dist/renderer-CuOjhtoo.mjs +5 -0
- package/dist/{renderer-BhZutM8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
- package/dist/{renderer-BhZutM8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
- package/dist/{renderer-CgZ1G37H.mjs → renderer-Cw6Sagih.mjs} +3 -3
- package/dist/{renderer-CgZ1G37H.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
- package/dist/{renderer-Dim2ZlfK.d.mts → renderer-CxqPeATd.d.mts} +2 -2
- package/dist/{renderer-Dim2ZlfK.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
- package/dist/{renderer-yGARXwV0.mjs → renderer-CzRqzp8P.mjs} +3 -3
- package/dist/{renderer-yGARXwV0.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
- package/dist/{renderer-eWBBsCv2.mjs → renderer-D0vom99O.mjs} +2 -2
- package/dist/{renderer-eWBBsCv2.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
- package/dist/{renderer-C9pl21Zb.mjs → renderer-D2-V9nQq.mjs} +3 -3
- package/dist/{renderer-C9pl21Zb.mjs.map → renderer-D2-V9nQq.mjs.map} +1 -1
- package/dist/renderer-D2_0g6Oi.mjs +5 -0
- package/dist/renderer-D62FwolD.mjs +5 -0
- package/dist/{renderer-445i0uxs.mjs → renderer-D6BXR7P4.mjs} +2 -2
- package/dist/{renderer-445i0uxs.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
- package/dist/renderer-DDNY9N7I.mjs +5 -0
- package/dist/{renderer-5tQ7ImPk.mjs → renderer-DFJQ6v0F.mjs} +2 -2
- package/dist/{renderer-5tQ7ImPk.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
- package/dist/renderer-DF_ONJ3v.mjs +5 -0
- package/dist/{renderer-CoO2j8AC.mjs → renderer-DILUmb-e.mjs} +3 -3
- package/dist/{renderer-CoO2j8AC.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
- package/dist/{renderer-CduL1AOK.mjs → renderer-DKfwlE4e.mjs} +3 -3
- package/dist/{renderer-CduL1AOK.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
- package/dist/{renderer-DFX2V9Dp.mjs → renderer-DScyMHpJ.mjs} +2 -2
- package/dist/{renderer-DFX2V9Dp.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
- package/dist/{renderer-BZvWlGsa.mjs → renderer-DTw-W0Yz.mjs} +3 -3
- package/dist/{renderer-BZvWlGsa.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
- package/dist/{renderer-BFWRUTov.mjs → renderer-DZJJHCtm.mjs} +3 -3
- package/dist/{renderer-BFWRUTov.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
- package/dist/{renderer-Cz9fzS11.mjs → renderer-DaSxr9fM.mjs} +3 -3
- package/dist/{renderer-Cz9fzS11.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
- package/dist/{renderer-CoX23zo_.mjs → renderer-DaqWTx7s.mjs} +3 -3
- package/dist/{renderer-CoX23zo_.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
- package/dist/renderer-DbzrVHEE.mjs +5 -0
- package/dist/{renderer-CN3iCli4.mjs → renderer-DcBGYN3V.mjs} +3 -3
- package/dist/{renderer-CN3iCli4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
- package/dist/{renderer-CCCitH4J.mjs → renderer-DjBCWxYy.mjs} +3 -3
- package/dist/{renderer-CCCitH4J.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
- package/dist/{renderer-gbBgGPNL.mjs → renderer-DjwITRvg.mjs} +2 -2
- package/dist/renderer-DlYchp1v.mjs +5 -0
- package/dist/renderer-DqcUNP8J.mjs +5 -0
- package/dist/renderer-DqvFhEQj.mjs +5 -0
- package/dist/{renderer-B4JmNa_T.mjs → renderer-DwVOxdzC.mjs} +3 -3
- package/dist/{renderer-B4JmNa_T.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
- package/dist/{renderer-BZWiY6Jw.mjs → renderer-Dwu_zfdL.mjs} +3 -3
- package/dist/{renderer-BZWiY6Jw.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
- package/dist/renderer-DxBav2bE.mjs +5 -0
- package/dist/{renderer-DkYiOWPJ.mjs → renderer-DyyIXLQK.mjs} +3 -3
- package/dist/{renderer-DkYiOWPJ.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
- package/dist/{renderer-D-e3vDnO.mjs → renderer-DzSMeQBC.mjs} +3 -3
- package/dist/{renderer-D-e3vDnO.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
- package/dist/{renderer-DOZJeWM4.mjs → renderer-EZp_IIPK.mjs} +3 -3
- package/dist/{renderer-DOZJeWM4.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
- package/dist/{renderer-DkM_wN8j.mjs → renderer-G1pMJH5C.mjs} +2 -2
- package/dist/{renderer-DkM_wN8j.mjs.map → renderer-G1pMJH5C.mjs.map} +1 -1
- package/dist/renderer-GvSRoQje.mjs +5 -0
- package/dist/{renderer-DQtk282o.mjs → renderer-If8JOkBi.mjs} +2 -2
- package/dist/{renderer-DQtk282o.mjs.map → renderer-If8JOkBi.mjs.map} +1 -1
- package/dist/{renderer-BL36f2IQ.mjs → renderer-JvcR1vYI.mjs} +2 -2
- package/dist/{renderer-BL36f2IQ.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
- package/dist/renderer-KP7Ita9g.mjs +5 -0
- package/dist/{renderer-DOkEalxy.mjs → renderer-NizuhHsH.mjs} +3 -3
- package/dist/{renderer-DOkEalxy.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
- package/dist/renderer-Pc8dyNXt.mjs +5 -0
- package/dist/{renderer-fXRwAdO2.mjs → renderer-RDCax5CK.mjs} +3 -3
- package/dist/{renderer-fXRwAdO2.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
- package/dist/{renderer-BOvCstdU.mjs → renderer-UcdqCarR.mjs} +3 -3
- package/dist/{renderer-BOvCstdU.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
- package/dist/{renderer-BaBluD-r.mjs → renderer-V5uEyDFz.mjs} +3 -3
- package/dist/{renderer-BaBluD-r.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
- package/dist/{renderer-BzgnTEvf.mjs → renderer-X0eKSD7v.mjs} +3 -3
- package/dist/{renderer-BzgnTEvf.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
- package/dist/{renderer-Ai5nZsof.mjs → renderer-Za4D9hej.mjs} +3 -3
- package/dist/{renderer-Ai5nZsof.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
- package/dist/{renderer-q971j1BW.mjs → renderer-apeDrNXM.mjs} +3 -3
- package/dist/{renderer-q971j1BW.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
- package/dist/renderer-ezRCmU09.mjs +3 -0
- package/dist/{renderer-CNS8LA2_.mjs → renderer-gRMkQabv.mjs} +3 -3
- package/dist/{renderer-CNS8LA2_.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
- package/dist/renderer-h6ev1ogx.mjs +5 -0
- package/dist/{renderer-nMnE_T2y.mjs → renderer-rXgqgAjw.mjs} +3 -3
- package/dist/{renderer-nMnE_T2y.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
- package/dist/{renderer-BPsi7Q7Z.mjs → renderer-ut1GqW89.mjs} +3 -3
- package/dist/{renderer-BPsi7Q7Z.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
- package/dist/{renderer-DH0wkQkR.mjs → renderer-yyUpCeWb.mjs} +2 -2
- package/dist/{renderer-DH0wkQkR.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs.map → renderers-CP8CFWDs-DzGXDs5p.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-DGRs6ddH.mjs → signals-C5nOrRmn.mjs} +3 -3
- package/dist/{signals-DGRs6ddH.mjs.map → signals-C5nOrRmn.mjs.map} +1 -1
- package/package.json +57 -57
- package/dist/dist-Cl0mvShy.mjs.map +0 -1
- package/dist/dist-DRB6Vg5u.mjs.map +0 -1
- package/dist/dist-fjKpBYkc.mjs.map +0 -1
- package/dist/index-BHqdtJbN.d.mts.map +0 -1
- package/dist/index-BONyHjZX.d.mts.map +0 -1
- package/dist/index-DEODKaL6.d.mts.map +0 -1
- package/dist/preview-engine/chunk-63SFBHEH.mjs +0 -1
- package/dist/preview-engine/chunk-7J2FWGVD.mjs +0 -1
- package/dist/preview-engine/chunk-M5HZPZHQ.mjs +0 -1
- package/dist/preview-engine/chunk-OG62XGCT.mjs +0 -5
- package/dist/preview-engine/renderers-2H7YEUTD.mjs +0 -1
- package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
- package/dist/preview-engine/renderers-3RC5FDWX.mjs +0 -1
- package/dist/preview-engine/renderers-6WH7NZCC.mjs +0 -1
- package/dist/preview-engine/renderers-7VJN5L3Z.mjs +0 -1
- package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
- package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
- package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
- package/dist/preview-engine/renderers-DXHJAMZR.mjs +0 -1
- package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
- package/dist/preview-engine/renderers-FWGMNPYB.mjs +0 -1
- package/dist/preview-engine/renderers-HUW2ZMS3.mjs +0 -1
- package/dist/preview-engine/renderers-HXFRTIJD.mjs +0 -1
- package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
- package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
- package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
- package/dist/preview-engine/renderers-Q4OFCMXI.mjs +0 -1
- package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
- package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
- package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
- package/dist/preview-engine/renderers-TAWT3ZSS.mjs +0 -1
- package/dist/preview-engine/renderers-UHTO6BQA.mjs +0 -1
- package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
- package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
- package/dist/preview-engine/renderers-XHTMRXC5.mjs +0 -1
- package/dist/preview-engine/renderers-YECY2YFT.mjs +0 -1
- package/dist/preview-engine/renderers-YMN6QXK7.mjs +0 -1
- package/dist/preview-engine/renderers-ZANPE3OK.mjs +0 -1
- package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
- package/dist/preview-engine/renderers-ZJTRANIX.mjs +0 -1
- package/dist/renderer--IHe-yqK.mjs +0 -5
- package/dist/renderer-B16iwR0_.mjs +0 -5
- package/dist/renderer-B3EEYpx6.mjs +0 -5
- package/dist/renderer-B3Si5IB4.mjs +0 -5
- package/dist/renderer-BARst3ZD.mjs +0 -3
- package/dist/renderer-BH8vZKmX.mjs +0 -5
- package/dist/renderer-BHZie6Pa.mjs +0 -5
- package/dist/renderer-BHpJ1e15.mjs +0 -5
- package/dist/renderer-BPJ79b47.mjs +0 -5
- package/dist/renderer-BPbM_6WR.mjs +0 -5
- package/dist/renderer-Bn-WnRh9.mjs +0 -5
- package/dist/renderer-BqHvDAUe.mjs +0 -5
- package/dist/renderer-CAtXDNsh.mjs +0 -5
- package/dist/renderer-C_5nfVce.mjs +0 -5
- package/dist/renderer-Cie7KKeQ.mjs +0 -5
- package/dist/renderer-CuoxvPsX.mjs +0 -5
- package/dist/renderer-Cvd3oIJQ.mjs +0 -5
- package/dist/renderer-CxAgpBrJ.mjs +0 -5
- package/dist/renderer-D-cWBX0r.mjs +0 -5
- package/dist/renderer-D0q2VyJR.mjs +0 -5
- package/dist/renderer-D6NXn3Ky.mjs +0 -5
- package/dist/renderer-D9bp2jor.mjs +0 -5
- package/dist/renderer-DEzIOIB7.mjs +0 -5
- package/dist/renderer-DSSTVulw.mjs +0 -5
- package/dist/renderer-DUmTURPu.mjs +0 -5
- package/dist/renderer-DXCAgI9m.mjs +0 -5
- package/dist/renderer-DZ9j3fQj.mjs +0 -5
- package/dist/renderer-Dd1G_VKM.mjs +0 -5
- package/dist/renderer-Dee8079X.mjs +0 -5
- package/dist/renderer-DgWh5noB.mjs +0 -5
- package/dist/renderer-DuD9QRix.mjs +0 -5
- package/dist/renderer-KtG5p44R.mjs +0 -5
- package/dist/renderer-TyZu7nQ2.mjs.map +0 -1
- package/dist/renderer-fdVdNIhL.mjs +0 -5
- package/dist/renderer-gBKWL0_E.mjs +0 -5
- package/dist/renderer-hmWhsR6C.mjs +0 -5
- package/dist/renderer-jkL9FU2W.mjs +0 -6
- package/dist/renderer-yAWv-daq.mjs +0 -5
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dist-fjKpBYkc.mjs","names":["ProgrammaticSignal","ConfigSchemaRegistry"],"sources":["../../core/dist/index.mjs"],"sourcesContent":["import { nanoid } from \"nanoid\";\nimport z$1, { z } from \"zod\";\n\n//#region src/signals/programmatic.ts\nvar ProgrammaticSignal = class ProgrammaticSignal {\n\tgpuBinding;\n\tlabel;\n\t_evaluator;\n\t_samples;\n\t_fps;\n\t_durationFrames;\n\t_cachedFrame = -1;\n\t_cachedValue = 0;\n\t_seekedFrame = -1;\n\t_subscribers = /* @__PURE__ */ new Set();\n\t_children = /* @__PURE__ */ new Set();\n\tget fps() {\n\t\treturn this._fps;\n\t}\n\tconstructor(source, options = {}) {\n\t\tthis._fps = options.fps ?? 24;\n\t\tthis._durationFrames = options.durationFrames;\n\t\tthis.gpuBinding = options.gpuBinding;\n\t\tthis.label = options.label;\n\t\tif (typeof source === \"number\") {\n\t\t\tconst constVal = source;\n\t\t\tthis._evaluator = () => constVal;\n\t\t\tthis._cachedValue = constVal;\n\t\t} else if (typeof source === \"function\") this._evaluator = source;\n\t\telse if (isSignal(source)) this._evaluator = (ctx) => Number(source.get(ctx)) || 0;\n\t\telse {\n\t\t\tconst arr = source;\n\t\t\tthis._samples = arr instanceof Float32Array ? arr : new Float32Array(Array.from(arr));\n\t\t\tthis._durationFrames = this._samples.length;\n\t\t\tthis._cachedValue = this._samples.length > 0 ? this._samples[0] : 0;\n\t\t\tthis._evaluator = (ctx) => {\n\t\t\t\tif (!this._samples || this._samples.length === 0) return 0;\n\t\t\t\tconst compFps = ctx.fps ?? this._fps;\n\t\t\t\tconst targetFrame = compFps !== this._fps && compFps > 0 ? ctx.frame / compFps * this._fps : ctx.frame;\n\t\t\t\tconst idx = Math.max(0, Math.min(this._samples.length - 1, Math.round(targetFrame)));\n\t\t\t\treturn this._samples[idx];\n\t\t\t};\n\t\t}\n\t}\n\tget value() {\n\t\treturn this.get();\n\t}\n\tget(ctx) {\n\t\tregisterSignalDependency(this._subscribers);\n\t\tframeSignal.get();\n\t\tconst currentFrame = ctx?.frame ?? (this._seekedFrame >= 0 ? this._seekedFrame : frameSignal.value);\n\t\tif (this._cachedFrame === currentFrame) return this._cachedValue;\n\t\tconst fps = ctx?.fps ?? this._fps;\n\t\tconst time = ctx?.time ?? (fps > 0 ? currentFrame / fps : 0);\n\t\tconst duration = ctx?.duration ?? this._durationFrames ?? 100;\n\t\tconst resolvedCtx = {\n\t\t\tframe: currentFrame,\n\t\t\tfps,\n\t\t\ttime,\n\t\t\tduration,\n\t\t\tdurationMs: ctx?.durationMs ?? duration / fps * 1e3,\n\t\t\tprogress: duration > 0 ? currentFrame / duration : 0,\n\t\t\tdeltaTime: ctx?.deltaTime ?? (fps > 0 ? 1 / fps : .0416)\n\t\t};\n\t\tthis._cachedFrame = currentFrame;\n\t\tthis._cachedValue = this._evaluator(resolvedCtx);\n\t\treturn this._cachedValue;\n\t}\n\tpeek() {\n\t\treturn this._cachedValue;\n\t}\n\tregisterChild(child) {\n\t\tthis._children.add(child);\n\t}\n\t_derive(evaluator, options, other) {\n\t\tconst child = new ProgrammaticSignal(evaluator, {\n\t\t\tfps: this._fps,\n\t\t\tdurationFrames: this._durationFrames,\n\t\t\t...options\n\t\t});\n\t\tthis._children.add(child);\n\t\tif (other instanceof ProgrammaticSignal) other.registerChild(child);\n\t\treturn child;\n\t}\n\tseekFrame(frame) {\n\t\tthis._seekedFrame = frame;\n\t\tthis._cachedFrame = -1;\n\t\tfor (const sub of this._subscribers) sub.markDirty();\n\t\tfor (const child of this._children) child.seekFrame(frame);\n\t}\n\tinvalidate() {\n\t\tthis._cachedFrame = -1;\n\t\tfor (const sub of this._subscribers) sub.markDirty();\n\t\tfor (const child of this._children) child.invalidate();\n\t}\n\tvalueOf() {\n\t\treturn this.get();\n\t}\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === \"number\") return Number(this.get());\n\t\tif (hint === \"string\") return String(this.get());\n\t\treturn this.get();\n\t}\n\tsmooth(windowFrames) {\n\t\tconst window = Math.max(1, Math.round(windowFrames));\n\t\tif (window <= 1) return this;\n\t\treturn this._derive((ctx) => {\n\t\t\tlet sum = 0;\n\t\t\tlet count = 0;\n\t\t\tconst startF = Math.max(0, ctx.frame - window + 1);\n\t\t\tfor (let f = startF; f <= ctx.frame; f++) {\n\t\t\t\tsum += this.get({\n\t\t\t\t\t...ctx,\n\t\t\t\t\tframe: f,\n\t\t\t\t\ttime: f / ctx.fps\n\t\t\t\t});\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count > 0 ? sum / count : 0;\n\t\t}, { label: `${this.label ?? \"sig\"}_smoothed(${window})` });\n\t}\n\tremap(inMin, inMax, outMin, outMax, clamp = false) {\n\t\tconst inRange = inMax - inMin;\n\t\tconst outRange = outMax - outMin;\n\t\treturn this._derive((ctx) => {\n\t\t\tconst val = this.get(ctx);\n\t\t\tconst remapped = outMin + (inRange !== 0 ? (val - inMin) / inRange : 0) * outRange;\n\t\t\tif (clamp) {\n\t\t\t\tconst lo = Math.min(outMin, outMax);\n\t\t\t\tconst hi = Math.max(outMin, outMax);\n\t\t\t\treturn Math.max(lo, Math.min(hi, remapped));\n\t\t\t}\n\t\t\treturn remapped;\n\t\t}, { label: `${this.label ?? \"sig\"}_remap` });\n\t}\n\tclamp(min, max) {\n\t\tconst lo = Math.min(min, max);\n\t\tconst hi = Math.max(min, max);\n\t\treturn this._derive((ctx) => Math.max(lo, Math.min(hi, this.get(ctx))), { label: `${this.label ?? \"sig\"}_clamped` });\n\t}\n\tgate(threshold, options = {}) {\n\t\tconst mode = options.mode ?? \"gate\";\n\t\tconst debounce = Math.max(1, options.debounceFrames ?? 2);\n\t\tconst hold = Math.max(1, options.holdFrames ?? 4);\n\t\tconst invert = Boolean(options.invert);\n\t\treturn this._derive((ctx) => {\n\t\t\tconst currentF = ctx.frame;\n\t\t\tlet out = 0;\n\t\t\tif (mode === \"gate\") out = this.get(ctx) >= threshold ? 1 : 0;\n\t\t\telse if (mode === \"trigger\") {\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tconst startF = Math.max(0, currentF - 120);\n\t\t\t\tfor (let f = startF; f <= currentF; f++) {\n\t\t\t\t\tconst v = this.get({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\tframe: f,\n\t\t\t\t\t\ttime: f / ctx.fps\n\t\t\t\t\t});\n\t\t\t\t\tconst prev = f > 0 ? this.get({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\tframe: f - 1,\n\t\t\t\t\t\ttime: (f - 1) / ctx.fps\n\t\t\t\t\t}) : 0;\n\t\t\t\t\tif (v >= threshold && prev < threshold && f - lastTrigger >= debounce) lastTrigger = f;\n\t\t\t\t}\n\t\t\t\tout = currentF >= lastTrigger && currentF < lastTrigger + hold ? 1 : 0;\n\t\t\t} else if (mode === \"toggle\") {\n\t\t\t\tlet toggleCount = 0;\n\t\t\t\tlet lastTrigger = -Infinity;\n\t\t\t\tfor (let f = 0; f <= currentF; f++) {\n\t\t\t\t\tconst v = this.get({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\tframe: f,\n\t\t\t\t\t\ttime: f / ctx.fps\n\t\t\t\t\t});\n\t\t\t\t\tconst prev = f > 0 ? this.get({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\tframe: f - 1,\n\t\t\t\t\t\ttime: (f - 1) / ctx.fps\n\t\t\t\t\t}) : 0;\n\t\t\t\t\tif (v >= threshold && prev < threshold && f - lastTrigger >= debounce) {\n\t\t\t\t\t\ttoggleCount++;\n\t\t\t\t\t\tlastTrigger = f;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tout = toggleCount % 2 === 1 ? 1 : 0;\n\t\t\t}\n\t\t\treturn invert ? 1 - out : out;\n\t\t}, { label: `${this.label ?? \"sig\"}_gate(${threshold})` });\n\t}\n\tvelocity(dt = 1) {\n\t\tconst step = Math.max(1, Math.round(dt));\n\t\treturn this._derive((ctx) => {\n\t\t\tconst curr = this.get(ctx);\n\t\t\tconst prevF = Math.max(0, ctx.frame - step);\n\t\t\tconst prev = this.get({\n\t\t\t\t...ctx,\n\t\t\t\tframe: prevF,\n\t\t\t\ttime: prevF / ctx.fps\n\t\t\t});\n\t\t\tconst deltaSec = step / ctx.fps;\n\t\t\treturn deltaSec > 0 ? (curr - prev) / deltaSec : curr - prev;\n\t\t}, { label: `${this.label ?? \"sig\"}_velocity` });\n\t}\n\tdelay(frames) {\n\t\tconst shift = Math.max(0, Math.round(frames));\n\t\treturn this._derive((ctx) => {\n\t\t\tconst delayedF = Math.max(0, ctx.frame - shift);\n\t\t\treturn this.get({\n\t\t\t\t...ctx,\n\t\t\t\tframe: delayedF,\n\t\t\t\ttime: delayedF / ctx.fps\n\t\t\t});\n\t\t}, { label: `${this.label ?? \"sig\"}_delay(${shift})` });\n\t}\n\tspring(stiffness = 150, damping = 12) {\n\t\treturn this._derive((ctx) => {\n\t\t\tconst targetFrame = ctx.frame;\n\t\t\tif (targetFrame <= 0) return this.get(ctx);\n\t\t\tlet pos = this.get({\n\t\t\t\t...ctx,\n\t\t\t\tframe: 0,\n\t\t\t\ttime: 0\n\t\t\t});\n\t\t\tlet vel = 0;\n\t\t\tconst dt = 1 / Math.max(1, ctx.fps);\n\t\t\tfor (let f = 1; f <= targetFrame; f++) {\n\t\t\t\tconst targetVal = this.get({\n\t\t\t\t\t...ctx,\n\t\t\t\t\tframe: f,\n\t\t\t\t\ttime: f / ctx.fps\n\t\t\t\t});\n\t\t\t\tconst displacement = pos - targetVal;\n\t\t\t\tconst force = -stiffness * displacement - damping * vel;\n\t\t\t\tvel += force * dt;\n\t\t\t\tpos += vel * dt;\n\t\t\t}\n\t\t\treturn pos;\n\t\t}, { label: `${this.label ?? \"sig\"}_spring` });\n\t}\n\tadd(other) {\n\t\tif (typeof other === \"number\") return this._derive((ctx) => this.get(ctx) + other);\n\t\treturn this._derive((ctx) => this.get(ctx) + (Number(other.get(ctx)) || 0), void 0, other);\n\t}\n\tsubtract(other) {\n\t\tif (typeof other === \"number\") return this._derive((ctx) => this.get(ctx) - other);\n\t\treturn this._derive((ctx) => this.get(ctx) - (Number(other.get(ctx)) || 0), void 0, other);\n\t}\n\tmultiply(factor) {\n\t\tif (typeof factor === \"number\") return this._derive((ctx) => this.get(ctx) * factor);\n\t\treturn this._derive((ctx) => this.get(ctx) * (Number(factor.get(ctx)) || 0), void 0, factor);\n\t}\n\tinvert() {\n\t\treturn this._derive((ctx) => 1 - this.get(ctx), { label: `${this.label ?? \"sig\"}_inverted` });\n\t}\n\tpow(exponent) {\n\t\treturn this._derive((ctx) => this.get(ctx) ** exponent);\n\t}\n\tmap(fn) {\n\t\treturn this._derive((ctx) => fn(this.get(ctx), ctx));\n\t}\n\ttoFrameArray(totalFrames, fps) {\n\t\tconst count = Math.max(1, totalFrames);\n\t\tconst f = fps ?? this._fps;\n\t\tconst out = new Float32Array(count);\n\t\tfor (let i = 0; i < count; i++) out[i] = this.get({\n\t\t\tframe: i,\n\t\t\tfps: f,\n\t\t\ttime: i / f,\n\t\t\tduration: count,\n\t\t\tdurationMs: count / f * 1e3,\n\t\t\tprogress: i / count,\n\t\t\tdeltaTime: 1 / f\n\t\t});\n\t\treturn out;\n\t}\n};\nfunction programmaticSignal(source, options) {\n\treturn new ProgrammaticSignal(source, options);\n}\n\n//#endregion\n//#region src/signals/resolve.ts\n/**\n* Unwraps a potential Signal, Signal-like object with `.peek()`,\n* or object with `.value`. Returns the raw value or the original object.\n*/\nfunction unwrapValue(val) {\n\tif (val === null || typeof val !== \"object\") return val;\n\tif (isSignal(val)) return val.peek();\n\tif (\"peek\" in val && typeof val.peek === \"function\") return val.peek();\n\tif (\"value\" in val) return val.value;\n\treturn val;\n}\n/**\n* Extracts a numeric value from a primitive, Signal, or wrapper object.\n* Returns the fallback if undefined, null, NaN, or non-numeric.\n*/\nfunction resolveNumber(val, fallback) {\n\tconst unwrapped = unwrapValue(val);\n\treturn typeof unwrapped === \"number\" && !Number.isNaN(unwrapped) ? unwrapped : fallback;\n}\n/**\n* Extracts a string value from a primitive, Signal, or wrapper object.\n* Returns the fallback if undefined, null, or non-string.\n*/\nfunction resolveString(val, fallback) {\n\tconst unwrapped = unwrapValue(val);\n\treturn typeof unwrapped === \"string\" ? unwrapped : fallback;\n}\n/**\n* Extracts a boolean value from a primitive, Signal, or wrapper object.\n* Returns the fallback if undefined, null, or non-boolean.\n*/\nfunction resolveBoolean(val, fallback) {\n\tconst unwrapped = unwrapValue(val);\n\treturn typeof unwrapped === \"boolean\" ? unwrapped : fallback;\n}\n/**\n* Generic parameter resolver matching the fallback value's type.\n*/\nfunction resolveParam(val, fallback) {\n\tif (typeof fallback === \"number\") return resolveNumber(val, fallback);\n\tif (typeof fallback === \"string\") return resolveString(val, fallback);\n\tif (typeof fallback === \"boolean\") return resolveBoolean(val, fallback);\n\tconst unwrapped = unwrapValue(val);\n\treturn unwrapped !== void 0 && unwrapped !== null ? unwrapped : fallback;\n}\n\n//#endregion\n//#region src/signals/index.ts\nlet activeComputed = null;\nfunction registerSignalDependency(subscribers) {\n\tif (activeComputed !== null) {\n\t\tsubscribers.add(activeComputed);\n\t\tactiveComputed.deps.add(subscribers);\n\t}\n}\nfunction isSignal(val) {\n\treturn val !== null && typeof val === \"object\" && \"get\" in val && typeof val.get === \"function\" && \"value\" in val;\n}\nvar StateSignalImpl = class {\n\t_value;\n\t_subscribers = /* @__PURE__ */ new Set();\n\tconstructor(initialValue) {\n\t\tthis._value = initialValue;\n\t}\n\tget value() {\n\t\treturn this.get();\n\t}\n\tset value(nextValue) {\n\t\tthis.set(nextValue);\n\t}\n\tget() {\n\t\tif (activeComputed !== null) {\n\t\t\tthis._subscribers.add(activeComputed);\n\t\t\tactiveComputed.deps.add(this._subscribers);\n\t\t}\n\t\treturn this._value;\n\t}\n\tpeek() {\n\t\treturn this._value;\n\t}\n\tset(nextValue) {\n\t\tif (Object.is(this._value, nextValue)) return;\n\t\tthis._value = nextValue;\n\t\tthis.notifySubscribers();\n\t}\n\tupdate(fn) {\n\t\tthis.set(fn(this._value));\n\t}\n\tnotifySubscribers() {\n\t\tif (this._subscribers.size === 0) return;\n\t\tconst toNotify = Array.from(this._subscribers);\n\t\tfor (const sub of toNotify) sub.markDirty();\n\t}\n\tvalueOf() {\n\t\treturn this.get();\n\t}\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === \"number\") return Number(this.get());\n\t\tif (hint === \"string\") return String(this.get());\n\t\treturn this.get();\n\t}\n};\nvar ComputedImpl = class {\n\t_fn;\n\t_value;\n\t_dirty = true;\n\t_evaluating = false;\n\tdeps = /* @__PURE__ */ new Set();\n\t_subscribers = /* @__PURE__ */ new Set();\n\tconstructor(fn) {\n\t\tthis._fn = fn;\n\t}\n\tget value() {\n\t\treturn this.get();\n\t}\n\tget() {\n\t\tif (activeComputed !== null && activeComputed !== this) {\n\t\t\tthis._subscribers.add(activeComputed);\n\t\t\tactiveComputed.deps.add(this._subscribers);\n\t\t}\n\t\tif (this._dirty) this.compute();\n\t\treturn this._value;\n\t}\n\tpeek() {\n\t\tif (this._dirty) this.compute();\n\t\treturn this._value;\n\t}\n\tmarkDirty() {\n\t\tif (this._dirty) return;\n\t\tthis._dirty = true;\n\t\tconst toNotify = Array.from(this._subscribers);\n\t\tfor (const sub of toNotify) sub.markDirty();\n\t}\n\tcompute() {\n\t\tif (this._evaluating) throw new Error(\"Cyclic dependency detected in computed signal\");\n\t\tfor (const depSubSet of this.deps) depSubSet.delete(this);\n\t\tthis.deps.clear();\n\t\tconst prevActive = activeComputed;\n\t\tactiveComputed = this;\n\t\tthis._evaluating = true;\n\t\ttry {\n\t\t\tthis._value = this._fn();\n\t\t\tthis._dirty = false;\n\t\t} finally {\n\t\t\tthis._evaluating = false;\n\t\t\tactiveComputed = prevActive;\n\t\t}\n\t}\n\tvalueOf() {\n\t\treturn this.get();\n\t}\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === \"number\") return Number(this.get());\n\t\tif (hint === \"string\") return String(this.get());\n\t\treturn this.get();\n\t}\n};\nvar FrameArraySignalImpl = class {\n\tgpuBinding;\n\tfps;\n\t_samples;\n\t_cachedFrame = -1;\n\t_cachedValue = 0;\n\t_seekedFrame = -1;\n\t_subscribers = /* @__PURE__ */ new Set();\n\tconstructor(samples, fps = 24, gpuBinding) {\n\t\tthis._samples = samples;\n\t\tthis.fps = fps;\n\t\tthis.gpuBinding = gpuBinding;\n\t\tif (samples.length > 0) this._cachedValue = samples[0];\n\t}\n\tget value() {\n\t\treturn this.get();\n\t}\n\tget(ctx) {\n\t\tif (activeComputed !== null) {\n\t\t\tthis._subscribers.add(activeComputed);\n\t\t\tactiveComputed.deps.add(this._subscribers);\n\t\t}\n\t\tframeSignal.get();\n\t\tconst currentFrame = ctx?.frame ?? (this._seekedFrame >= 0 ? this._seekedFrame : frameSignal.value);\n\t\tif (this._cachedFrame === currentFrame) return this._cachedValue;\n\t\tthis._cachedFrame = currentFrame;\n\t\tif (!this._samples || this._samples.length === 0) {\n\t\t\tthis._cachedValue = 0;\n\t\t\treturn 0;\n\t\t}\n\t\tconst compFps = ctx?.fps ?? this.fps;\n\t\tconst targetFrame = compFps !== this.fps && compFps > 0 ? currentFrame / compFps * this.fps : currentFrame;\n\t\tconst idx = Math.max(0, Math.min(this._samples.length - 1, Math.round(targetFrame)));\n\t\tthis._cachedValue = Number(this._samples[idx]) || 0;\n\t\treturn this._cachedValue;\n\t}\n\tpeek() {\n\t\treturn this._cachedValue;\n\t}\n\tseekFrame(frame) {\n\t\tthis._seekedFrame = frame;\n\t\tthis._cachedFrame = frame;\n\t\tif (!this._samples || this._samples.length === 0) this._cachedValue = 0;\n\t\telse {\n\t\t\tconst idx = Math.max(0, Math.min(this._samples.length - 1, Math.round(frame)));\n\t\t\tthis._cachedValue = Number(this._samples[idx]) || 0;\n\t\t}\n\t\tfor (const sub of this._subscribers) sub.markDirty();\n\t}\n\tvalueOf() {\n\t\treturn this.get();\n\t}\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === \"number\") return Number(this.get());\n\t\tif (hint === \"string\") return String(this.get());\n\t\treturn this.get();\n\t}\n};\nfunction signal(initialValue) {\n\treturn new StateSignalImpl(initialValue);\n}\nfunction computed(fn) {\n\treturn new ComputedImpl(fn);\n}\nfunction frameArraySignal(samples, fps = 24, gpuBinding) {\n\treturn new FrameArraySignalImpl(samples, fps, gpuBinding);\n}\nconst frameSignal = signal(0);\nconst timeSignal = signal(0);\nconst progressSignal = signal(0);\nfunction updateClockSignals(frame, fps = 24, durationMs) {\n\tframeSignal.set(frame);\n\tconst timeSec = fps > 0 ? frame / fps : 0;\n\ttimeSignal.set(timeSec);\n\tif (durationMs && durationMs > 0) {\n\t\tconst durSec = durationMs / 1e3;\n\t\tprogressSignal.set(Math.max(0, Math.min(1, timeSec / durSec)));\n\t} else progressSignal.set(0);\n}\nvar ProceduralSignalImpl = class {\n\tgpuBinding;\n\t_config;\n\tconstructor(config) {\n\t\tthis._config = {\n\t\t\ttype: \"sine\",\n\t\t\tfrequency: 1,\n\t\t\tamplitude: 1,\n\t\t\toffset: 0,\n\t\t\tphase: 0,\n\t\t\t...config\n\t\t};\n\t\tthis.gpuBinding = config.gpuBinding;\n\t}\n\tget value() {\n\t\treturn this.get();\n\t}\n\tget(ctx) {\n\t\tframeSignal.get();\n\t\tconst frame = ctx?.frame ?? frameSignal.value;\n\t\tconst fps = ctx?.fps ?? 24;\n\t\tconst time = ctx?.time ?? (fps > 0 ? frame / fps : 0);\n\t\tif (this._config.fn) return this._config.fn(ctx ?? {\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime,\n\t\t\tduration: 0,\n\t\t\tdurationMs: 0,\n\t\t\tprogress: 0,\n\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t});\n\t\tconst freq = this._config.frequency ?? 1;\n\t\tconst amp = this._config.amplitude ?? 1;\n\t\tconst off = this._config.offset ?? 0;\n\t\tconst phase = this._config.phase ?? 0;\n\t\tswitch (this._config.type ?? \"sine\") {\n\t\t\tcase \"sine\": return off + amp * Math.sin(2 * Math.PI * freq * time + phase);\n\t\t\tcase \"triangle\": return off + amp * (2 * Math.abs(2 * (time * freq + phase / (2 * Math.PI) - Math.floor(time * freq + phase / (2 * Math.PI) + .5))) - 1);\n\t\t\tcase \"sawtooth\": return off + amp * (2 * (time * freq + phase / (2 * Math.PI) - Math.floor(time * freq + phase / (2 * Math.PI) + .5)));\n\t\t\tcase \"square\": return off + (Math.sin(2 * Math.PI * freq * time + phase) >= 0 ? amp : -amp);\n\t\t\tcase \"bounce\": {\n\t\t\t\tconst cycle = time * freq % 1;\n\t\t\t\treturn off + amp * Math.abs(Math.sin(Math.PI * cycle));\n\t\t\t}\n\t\t\tdefault: return off + amp * Math.sin(2 * Math.PI * freq * time + phase);\n\t\t}\n\t}\n\tpeek() {\n\t\treturn this.get();\n\t}\n\tvalueOf() {\n\t\treturn this.get();\n\t}\n\t[Symbol.toPrimitive](hint) {\n\t\tif (hint === \"number\") return Number(this.get());\n\t\tif (hint === \"string\") return String(this.get());\n\t\treturn this.get();\n\t}\n};\nfunction signalBuilder(config) {\n\treturn new ProceduralSignalImpl(config);\n}\nfunction periodicSignal(wave, options) {\n\tconst min = options.min;\n\tconst max = options.max;\n\tlet amplitude = options.amplitude ?? 1;\n\tlet offset = options.offset ?? 0;\n\tif (min !== void 0 && max !== void 0) {\n\t\toffset = (min + max) / 2;\n\t\tamplitude = (max - min) / 2;\n\t} else if (min !== void 0) offset = min + amplitude;\n\telse if (max !== void 0) offset = max - amplitude;\n\tconst period = options.period;\n\tconst frequency = options.frequency;\n\tconst phase = options.phase ?? 0;\n\treturn signalBuilder({\n\t\ttype: \"custom\",\n\t\tfn: (ctx) => {\n\t\t\tlet angle;\n\t\t\tif (period !== void 0 && period > 0) angle = 2 * Math.PI * ctx.frame / period + phase;\n\t\t\telse {\n\t\t\t\tconst freq = frequency ?? 1;\n\t\t\t\tangle = 2 * Math.PI * freq * ctx.time + phase;\n\t\t\t}\n\t\t\treturn offset + amplitude * wave(angle);\n\t\t}\n\t});\n}\nfunction sineSignal(options = {}) {\n\treturn periodicSignal(Math.sin, options);\n}\nfunction cosineSignal(options = {}) {\n\treturn periodicSignal(Math.cos, options);\n}\nconst Signal = {\n\tstate: signal,\n\tcomputed,\n\tbuilder: signalBuilder,\n\tfromArray: frameArraySignal,\n\tprogrammatic: programmaticSignal,\n\tframe: frameSignal,\n\ttime: timeSignal,\n\tprogress: progressSignal,\n\tsine: sineSignal,\n\tcosine: cosineSignal\n};\n\n//#endregion\n//#region src/effects/index.ts\nvar Effect = class {\n\tsignals;\n\tconfig;\n\t_frameHooks = [];\n\tconstructor(initialConfig) {\n\t\tthis.config = { ...initialConfig };\n\t\tthis.signals = {};\n\t\tfor (const [key, val] of Object.entries(initialConfig)) if (isSignal(val)) this.signals[key] = val;\n\t\telse this.signals[key] = signal(val);\n\t\treturn new Proxy(this, {\n\t\t\tget(target, prop, receiver) {\n\t\t\t\tif (typeof prop === \"string\" && prop in target.signals) {\n\t\t\t\t\tconst sig = target.signals[prop];\n\t\t\t\t\treturn sig ? sig.value : void 0;\n\t\t\t\t}\n\t\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t\t},\n\t\t\tset(target, prop, val, receiver) {\n\t\t\t\tif (typeof prop === \"string\" && prop in target.signals) {\n\t\t\t\t\tconst currentSig = target.signals[prop];\n\t\t\t\t\tif (isSignal(val)) {\n\t\t\t\t\t\ttarget.signals[prop] = val;\n\t\t\t\t\t\ttarget.config[prop] = val;\n\t\t\t\t\t} else if (currentSig && typeof currentSig.set === \"function\") {\n\t\t\t\t\t\tcurrentSig.set(val);\n\t\t\t\t\t\ttarget.config[prop] = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.signals[prop] = signal(val);\n\t\t\t\t\t\ttarget.config[prop] = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn Reflect.set(target, prop, val, receiver);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Game-engine per-frame lifecycle hook.\n\t* Invoked before rendering each frame so scripts or agents can mutate properties.\n\t*/\n\tonRequestFrame(callback) {\n\t\tthis._frameHooks.push(callback);\n\t\treturn this;\n\t}\n\tnotifyFrame(ctx) {\n\t\tfor (const hook of this._frameHooks) hook(ctx);\n\t}\n\t/**\n\t* Samples concrete scalar / config values for the current frame.\n\t*/\n\tresolveUniforms(ctx) {\n\t\tconst out = {};\n\t\tfor (const [k, sig] of Object.entries(this.signals)) out[k] = sig.get(ctx);\n\t\treturn out;\n\t}\n\t/**\n\t* Returns WebGPU texture bindings attached to any property signal.\n\t*/\n\tresolveTextures() {\n\t\tconst out = {};\n\t\tfor (const [k, sig] of Object.entries(this.signals)) {\n\t\t\tconst gpu = sig.gpuBinding;\n\t\t\tif (gpu?.textureView) out[`${k}TextureView`] = gpu.textureView;\n\t\t\tif (gpu?.texture) out[`${k}Texture`] = gpu.texture;\n\t\t}\n\t\treturn out;\n\t}\n\t/**\n\t* Converts the effect into an operation node for the VirtualMediaData AST.\n\t*/\n\ttoOperation() {\n\t\tconst opPayload = {\n\t\t\top: this.op,\n\t\t\teffect: this,\n\t\t\tonRequestFrame: (ctx) => this.notifyFrame(ctx),\n\t\t\tsignals: this.signals,\n\t\t\t...this.config\n\t\t};\n\t\tfor (const [k, sig] of Object.entries(this.signals)) {\n\t\t\tconst orig = this.config[k];\n\t\t\tif (!isSignal(orig) && (typeof orig === \"string\" || typeof orig === \"boolean\")) opPayload[k] = sig.value;\n\t\t\telse opPayload[k] = sig;\n\t\t}\n\t\treturn opPayload;\n\t}\n};\n\n//#endregion\n//#region src/errors.ts\nvar ModerationError = class extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = \"ModerationError\";\n\t}\n};\nvar ModerationUnrefundableError = class extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = \"ModerationUnrefundableError\";\n\t}\n};\n\n//#endregion\n//#region src/id-gen.ts\n/**\n* Generates a unique ID using nanoid.\n* This function is cross-platform compatible (Node.js and Browser).\n*\n* @param size - Optional size of the ID (default is 21)\n* @returns A unique string ID\n*/\nconst generateId = (size) => {\n\treturn nanoid(size);\n};\n\n//#endregion\n//#region src/node-metadata.ts\nconst HandleDefinitionSchema = z$1.object({\n\tdataTypes: z$1.custom(),\n\tlabel: z$1.string(),\n\trequired: z$1.boolean().optional(),\n\torder: z$1.number(),\n\tdescription: z$1.string().optional()\n});\nconst ConfigHandleSchema = z$1.object({\n\tconfigKey: z$1.string(),\n\tdataTypes: z$1.custom(),\n\tlabel: z$1.string(),\n\tdescription: z$1.string().optional()\n});\n/**\n* Metadata defining the interface and identity of a node.\n* This is safe to import in any environment.\n*/\nconst NodeMetadataSchema = z$1.object({\n\ttype: z$1.string().min(1),\n\tversion: z$1.number().int().positive().optional(),\n\tbaseType: z$1.string().optional(),\n\tdisplayName: z$1.string().min(1),\n\tdescription: z$1.string().optional(),\n\tshowInQuickAccess: z$1.boolean().optional(),\n\tshowInSidebar: z$1.boolean().optional(),\n\tadvanced: z$1.boolean().optional(),\n\tcategory: z$1.string().min(1),\n\tsubcategory: z$1.string().optional(),\n\tdefaultDimensions: z$1.object({\n\t\twidth: z$1.number().positive().optional(),\n\t\theight: z$1.number().positive().optional()\n\t}).optional(),\n\thandles: z$1.object({\n\t\tinputs: z$1.array(HandleDefinitionSchema),\n\t\toutputs: z$1.array(HandleDefinitionSchema)\n\t}),\n\tvariableInputs: z$1.discriminatedUnion(\"enabled\", [z$1.object({\n\t\tenabled: z$1.literal(true),\n\t\tdataTypes: z$1.custom()\n\t}), z$1.object({\n\t\tenabled: z$1.literal(false),\n\t\tdataTypes: z$1.custom().optional()\n\t})]).optional(),\n\tvariableOutputs: z$1.discriminatedUnion(\"enabled\", [z$1.object({\n\t\tenabled: z$1.literal(true),\n\t\tdataTypes: z$1.custom()\n\t}), z$1.object({\n\t\tenabled: z$1.literal(false),\n\t\tdataTypes: z$1.custom().optional()\n\t})]).optional(),\n\tisTerminal: z$1.boolean().optional(),\n\tisTransient: z$1.boolean().optional(),\n\tconfigSchema: z$1.custom().optional(),\n\tdefaultConfig: z$1.record(z$1.string(), z$1.unknown()).optional(),\n\tvalidation: z$1.any().optional(),\n\tresultSchema: z$1.custom().optional(),\n\tconfigHandles: z$1.array(ConfigHandleSchema).optional()\n});\n\n//#endregion\n//#region src/render-diagnostics.ts\nconst STORE_KEY = Symbol.for(\"framefields.renderDiagnostics\");\nconst diagnosticsByRender = globalThis[STORE_KEY] ?? (globalThis[STORE_KEY] = /* @__PURE__ */ new Map());\nconst MAX_TRACKED_RENDERS = 256;\n/** Record a diagnostic for a render; repeats (same code, layer and message) are kept once. */\nfunction reportRenderDiagnostic(renderId, diagnostic) {\n\tlet forRender = diagnosticsByRender.get(renderId);\n\tif (!forRender) {\n\t\tif (diagnosticsByRender.size >= MAX_TRACKED_RENDERS) {\n\t\t\tconst oldest = diagnosticsByRender.keys().next().value;\n\t\t\tif (oldest !== void 0) diagnosticsByRender.delete(oldest);\n\t\t}\n\t\tforRender = /* @__PURE__ */ new Map();\n\t\tdiagnosticsByRender.set(renderId, forRender);\n\t}\n\tconst key = `${diagnostic.code}|${diagnostic.layerId ?? \"\"}|${diagnostic.message}`;\n\tif (!forRender.has(key)) forRender.set(key, diagnostic);\n}\n/**\n* Everything reported for a render, including its nested compositions (they\n* render under derived ids, `${renderId}-…`), removing it from the store.\n*/\nfunction takeRenderDiagnostics(renderId) {\n\tconst collected = /* @__PURE__ */ new Map();\n\tfor (const [id, forRender] of diagnosticsByRender) {\n\t\tif (id !== renderId && !id.startsWith(`${renderId}-`)) continue;\n\t\tfor (const [key, diagnostic] of forRender) collected.set(key, diagnostic);\n\t\tdiagnosticsByRender.delete(id);\n\t}\n\treturn [...collected.values()];\n}\n\n//#endregion\n//#region src/types/base.ts\nconst DataTypeVal = {\n\tText: \"Text\",\n\tNumber: \"Number\",\n\tBoolean: \"Boolean\",\n\tImage: \"Image\",\n\tVideo: \"Video\",\n\tAudio: \"Audio\",\n\tSVG: \"SVG\",\n\tCaption: \"Caption\",\n\tLottie: \"Lottie\",\n\tThreeD: \"ThreeD\",\n\tGIF: \"GIF\",\n\tSignal: \"Signal\",\n\tLUT: \"LUT\"\n};\nconst DataType = DataTypeVal;\nconst DataTypes = Object.values(DataTypeVal);\nconst HandleTypeVal = {\n\tInput: \"Input\",\n\tOutput: \"Output\"\n};\nconst JsonValueSchema = z$1.lazy(() => z$1.union([\n\tz$1.string(),\n\tz$1.number(),\n\tz$1.boolean(),\n\tz$1.null(),\n\tz$1.array(JsonValueSchema),\n\tz$1.record(z$1.string(), JsonValueSchema.optional())\n]));\n/**\n* Zod schema for the FileAsset model\n* Matches the Prisma schema definitions for types and nullability.\n*/\nconst FileAssetSchema = z$1.object({\n\tid: z$1.cuid2(),\n\tname: z$1.string(),\n\tcreatedAt: z$1.coerce.date(),\n\tupdatedAt: z$1.coerce.date(),\n\tuserId: z$1.cuid2().nullable(),\n\twidth: z$1.number().int().nullable(),\n\theight: z$1.number().int().nullable(),\n\tbucket: z$1.string(),\n\tsize: z$1.number().int(),\n\tmimeType: z$1.string(),\n\tkey: z$1.string(),\n\tisUploaded: z$1.boolean().default(true),\n\tduration: z$1.number().int().nullable(),\n\tsampleRate: z$1.number().int().nullable().optional(),\n\tchannels: z$1.number().int().nullable().optional(),\n\tbitDepth: z$1.number().int().nullable().optional(),\n\taudioCodec: z$1.string().nullable().optional(),\n\taudioBitrate: z$1.number().int().nullable().optional(),\n\tfps: z$1.number().int().nullable(),\n\tfingerprint: z$1.string().nullable()\n});\nconst NodeVisualConfigSchema = z$1.object({\n\tposition: z$1.object({\n\t\tx: z$1.number(),\n\t\ty: z$1.number()\n\t}).optional(),\n\twidth: z$1.number().nullish(),\n\theight: z$1.number().nullish(),\n\tlocked: z$1.boolean().optional().default(false),\n\tcollapsed: z$1.boolean().optional().default(false)\n}).passthrough();\n\n//#endregion\n//#region src/types/config/colors.ts\nconst dataTypeColors = {\n\tText: {\n\t\tbg: \"bg-blue-500\",\n\t\tstroke: \"stroke-blue-500\",\n\t\thex: \"#3b82f6\",\n\t\ttext: \"text-blue-500\",\n\t\tborder: \"border-blue-500\"\n\t},\n\tImage: {\n\t\tbg: \"bg-purple-500\",\n\t\tstroke: \"stroke-purple-500\",\n\t\thex: \"#a855f7\",\n\t\ttext: \"text-purple-500\",\n\t\tborder: \"border-purple-500\"\n\t},\n\tVideo: {\n\t\tbg: \"bg-teal-500\",\n\t\tstroke: \"stroke-teal-500\",\n\t\thex: \"oklch(60% 0.118 184.704)\",\n\t\ttext: \"text-teal-500\",\n\t\tborder: \"border-teal-500\"\n\t},\n\tAudio: {\n\t\tbg: \"bg-orange-500\",\n\t\tstroke: \"stroke-orange-500\",\n\t\thex: \"#f97316\",\n\t\ttext: \"text-orange-500\",\n\t\tborder: \"border-orange-500\"\n\t},\n\tNumber: {\n\t\tbg: \"bg-green-600\",\n\t\tstroke: \"stroke-green-600\",\n\t\thex: \"#16a34a\",\n\t\ttext: \"text-green-600\",\n\t\tborder: \"border-green-600\"\n\t},\n\tBoolean: {\n\t\tbg: \"bg-amber-600\",\n\t\tstroke: \"stroke-amber-600\",\n\t\thex: \"#d97706\",\n\t\ttext: \"text-amber-600\",\n\t\tborder: \"border-amber-600\"\n\t},\n\tSVG: {\n\t\tbg: \"bg-lime-600\",\n\t\tstroke: \"stroke-lime-600\",\n\t\thex: \"#65a30d\",\n\t\ttext: \"text-lime-600\",\n\t\tborder: \"border-lime-600\"\n\t},\n\tCaption: {\n\t\tbg: \"bg-rose-500\",\n\t\tstroke: \"stroke-rose-500\",\n\t\thex: \"#f43f5e\",\n\t\ttext: \"text-rose-500\",\n\t\tborder: \"border-rose-500\"\n\t},\n\tGIF: {\n\t\tbg: \"bg-pink-500\",\n\t\tstroke: \"stroke-pink-500\",\n\t\thex: \"#ec4899\",\n\t\ttext: \"text-pink-500\",\n\t\tborder: \"border-pink-500\"\n\t},\n\tLottie: {\n\t\tbg: \"bg-indigo-500\",\n\t\tstroke: \"stroke-indigo-500\",\n\t\thex: \"#6366f1\",\n\t\ttext: \"text-indigo-500\",\n\t\tborder: \"border-indigo-500\"\n\t},\n\tSignal: {\n\t\tbg: \"bg-fuchsia-500\",\n\t\tstroke: \"stroke-fuchsia-500\",\n\t\thex: \"#d946ef\",\n\t\ttext: \"text-fuchsia-500\",\n\t\tborder: \"border-fuchsia-500\"\n\t},\n\tLUT: {\n\t\tbg: \"bg-cyan-600\",\n\t\tstroke: \"stroke-cyan-600\",\n\t\thex: \"#0891b2\",\n\t\ttext: \"text-cyan-600\",\n\t\tborder: \"border-cyan-600\"\n\t}\n};\n\n//#endregion\n//#region src/types/config/schemas.ts\nconst DATA_TYPE_EXTENSIONS = {\n\tImage: \"png\",\n\tVideo: \"mp4\",\n\tAudio: \"mp3\",\n\tText: \"txt\",\n\tNumber: \"txt\",\n\tBoolean: \"txt\",\n\tSVG: \"svg\",\n\tCaption: \"srt\",\n\tLottie: \"json\",\n\tThreeD: \"glb\",\n\tGIF: \"gif\",\n\tSignal: \"txt\",\n\tLUT: \"cube\"\n};\nconst MIME_TYPES = {\n\tpng: \"image/png\",\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tgif: \"image/gif\",\n\twebp: \"image/webp\",\n\tsvg: \"image/svg+xml\",\n\tmp4: \"video/mp4\",\n\twebm: \"video/webm\",\n\tmov: \"video/quicktime\",\n\tmp3: \"audio/mpeg\",\n\twav: \"audio/wav\",\n\togg: \"audio/ogg\",\n\tpdf: \"application/pdf\",\n\tjson: \"application/json\",\n\ttxt: \"text/plain\",\n\tsrt: \"text/srt\",\n\taac: \"audio/aac\",\n\tflac: \"audio/flac\"\n};\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);\nvar ConfigSchemaRegistry = class ConfigSchemaRegistry {\n\tstatic schemas = /* @__PURE__ */ new Map();\n\tstatic register(type, schema) {\n\t\tConfigSchemaRegistry.schemas.set(type, schema);\n\t}\n\tstatic get(type) {\n\t\treturn ConfigSchemaRegistry.schemas.get(type);\n\t}\n\tstatic clear() {\n\t\tConfigSchemaRegistry.schemas.clear();\n\t}\n};\n\n//#endregion\n//#region src/types/constants.ts\nconst COMPOSITOR_DEFAULTS = {\n\tFONT_FAMILY: \"Inter\",\n\tFONT_SIZE: 64,\n\tFILL: \"#ffffff\",\n\tLINE_HEIGHT: 1.1,\n\tALIGN: \"left\",\n\tVERTICAL_ALIGN: \"top\",\n\tLETTER_SPACING: 0,\n\tSTROKE_WIDTH: 0,\n\tSTROKE: \"#000000\",\n\tCORNER_RADIUS: 0,\n\tPADDING: 0\n};\n\n//#endregion\n//#region src/types/node-result.ts\nconst FileDataSchema = z$1.object({ entity: z$1.custom().optional() });\nconst SignalStatsSchema = z$1.object({\n\tmin: z$1.number().optional(),\n\tmax: z$1.number().optional(),\n\tmean: z$1.number().optional(),\n\trms: z$1.number().optional(),\n\tpeak: z$1.number().optional(),\n\tbeats: z$1.array(z$1.number()).optional(),\n\ttempo: z$1.number().optional()\n});\nconst SignalChannelMetaSchema = z$1.object({\n\tid: z$1.string(),\n\tname: z$1.string(),\n\tindex: z$1.number(),\n\tstats: SignalStatsSchema.optional()\n});\nconst GeneratorSignalDataSchema = z$1.object({\n\tv: z$1.literal(2).optional(),\n\ttype: z$1.literal(\"generator\"),\n\tnodeId: z$1.string().optional(),\n\tbaseType: z$1.string().optional(),\n\tfunc: z$1.enum([\n\t\t\"sine\",\n\t\t\"triangle\",\n\t\t\"sawtooth\",\n\t\t\"square\",\n\t\t\"custom\"\n\t]).or(z$1.string()).default(\"sine\"),\n\tfrequency: z$1.number().default(1),\n\tamplitude: z$1.number().default(1),\n\tphase: z$1.number().default(0),\n\toffset: z$1.number().default(0),\n\twaveform: z$1.string().optional(),\n\tbpm: z$1.number().optional(),\n\tsyncToBpm: z$1.boolean().optional(),\n\tfmFrequency: z$1.number().optional(),\n\tfmDepth: z$1.number().optional(),\n\tenvelope: z$1.string().optional(),\n\tfnBody: z$1.string().optional(),\n\tfnParams: z$1.array(z$1.record(z$1.string(), z$1.unknown())).optional(),\n\tcustomWGSL: z$1.string().optional(),\n\tsignalFnName: z$1.string().optional(),\n\toutputType: z$1.string().optional(),\n\tfps: z$1.number().optional(),\n\tdurationMs: z$1.number().optional(),\n\tstats: SignalStatsSchema.optional()\n}).passthrough();\nconst AudioExtractorSignalDataSchema = z$1.object({\n\tv: z$1.literal(2).optional(),\n\ttype: z$1.literal(\"audio_extractor\"),\n\tnodeId: z$1.string().optional(),\n\tsourceUrl: z$1.string().optional(),\n\tchannel: z$1.enum([\n\t\t\"primary\",\n\t\t\"beat\",\n\t\t\"bass\",\n\t\t\"energy\",\n\t\t\"spectral_flux\"\n\t]).or(z$1.string()).optional(),\n\tchannelIndex: z$1.number().optional(),\n\tchannels: z$1.array(SignalChannelMetaSchema).optional(),\n\textractionMode: z$1.string().optional(),\n\tattackMs: z$1.number().optional(),\n\treleaseMs: z$1.number().optional(),\n\tsensitivity: z$1.number().optional(),\n\tnoiseFloorDb: z$1.number().optional(),\n\tdynamicRangeDb: z$1.number().optional(),\n\tautoRange: z$1.boolean().optional(),\n\tsmoothing: z$1.number().optional(),\n\tcurve: z$1.string().optional(),\n\tbeatThreshold: z$1.number().optional(),\n\tbeatDecayMs: z$1.number().optional(),\n\tpreviewMode: z$1.string().optional(),\n\tsamples: z$1.union([z$1.array(z$1.number()), z$1.instanceof(Float32Array)]).optional(),\n\tfps: z$1.number().optional(),\n\tdurationMs: z$1.number().optional(),\n\tstats: SignalStatsSchema.optional(),\n\tstate: z$1.enum([\n\t\t\"pending\",\n\t\t\"ready\",\n\t\t\"failed\"\n\t]).optional(),\n\terror: z$1.string().optional(),\n\tvirtualMedia: z$1.record(z$1.string(), z$1.unknown()).optional(),\n\tsignalFnName: z$1.string().optional(),\n\tcustomWGSL: z$1.string().optional()\n}).passthrough();\nconst SignalMathDataSchema = z$1.object({\n\tv: z$1.literal(2).optional(),\n\ttype: z$1.literal(\"signal_math\"),\n\tnodeId: z$1.string().optional(),\n\top: z$1.string().optional(),\n\toperation: z$1.string().optional(),\n\tsignalA: z$1.unknown().optional(),\n\tsignalB: z$1.unknown().optional(),\n\tbValue: z$1.number().optional(),\n\tinMin: z$1.number().optional(),\n\tinMax: z$1.number().optional(),\n\toutMin: z$1.number().optional(),\n\toutMax: z$1.number().optional(),\n\tclampMin: z$1.number().optional(),\n\tclampMax: z$1.number().optional(),\n\texponent: z$1.number().optional(),\n\tedge0: z$1.number().optional(),\n\tedge1: z$1.number().optional(),\n\tcustomWGSL: z$1.string().optional(),\n\tstats: SignalStatsSchema.optional()\n}).passthrough();\nconst SignalGateDataSchema = z$1.object({\n\tv: z$1.literal(2).optional(),\n\ttype: z$1.literal(\"gate\"),\n\tnodeId: z$1.string().optional(),\n\tsourceSignal: z$1.unknown().optional(),\n\tthreshold: z$1.number().optional(),\n\tdebounceMs: z$1.number().optional(),\n\tmode: z$1.enum([\n\t\t\"gate\",\n\t\t\"trigger\",\n\t\t\"toggle\"\n\t]).optional(),\n\tholdFrames: z$1.number().optional(),\n\tinvert: z$1.boolean().optional(),\n\tstats: SignalStatsSchema.optional()\n}).passthrough();\nconst SignalDataSchema = z$1.union([\n\tGeneratorSignalDataSchema,\n\tAudioExtractorSignalDataSchema,\n\tSignalMathDataSchema,\n\tSignalGateDataSchema,\n\tz$1.object({ type: z$1.string() }).passthrough()\n]);\nfunction serializeSignalData(data) {\n\treturn JSON.stringify(data, (_key, value) => {\n\t\tif (value instanceof Float32Array) return Array.from(value);\n\t\treturn value;\n\t});\n}\nfunction deserializeSignalData(raw) {\n\tif (typeof raw === \"string\") try {\n\t\treturn SignalDataSchema.parse(JSON.parse(raw));\n\t} catch {\n\t\treturn { type: \"unknown\" };\n\t}\n\treturn SignalDataSchema.parse(raw);\n}\nconst OutputItemSchema = z$1.object({\n\ttype: z$1.custom(),\n\tdata: z$1.any(),\n\toutputHandleId: z$1.string().optional()\n});\nconst createOutputItemSchema = (type, dataSchema) => {\n\treturn z$1.object({\n\t\ttype,\n\t\tdata: dataSchema,\n\t\toutputHandleId: z$1.string().optional()\n\t});\n};\nconst SingleOutputGenericSchema = (outputItemSchema) => z$1.object({\n\tselectedOutputIndex: z$1.literal(0),\n\toutputs: z$1.tuple([z$1.object({ items: z$1.tuple([outputItemSchema]) })])\n});\nconst MultiOutputGenericSchema = (outputItemSchema) => z$1.object({\n\tselectedOutputIndex: z$1.number(),\n\toutputs: z$1.array(z$1.object({ items: z$1.array(outputItemSchema) })),\n\tsourceFingerprint: z$1.string().optional()\n});\nconst AnyOutputUnionSchema = z$1.object({\n\ttype: z$1.custom(),\n\tdata: z$1.any(),\n\toutputHandleId: z$1.string().optional()\n});\nconst NodeResultSchema = z$1.object({\n\tselectedOutputIndex: z$1.number(),\n\toutputs: z$1.array(z$1.object({ items: z$1.array(AnyOutputUnionSchema) }))\n});\nconst ExportResultSchema = MultiOutputGenericSchema(AnyOutputUnionSchema);\n\n//#endregion\n//#region src/types/video/base-layer-schema.ts\nconst AnimationTypeSchema = z.enum([\n\t\"fade-in\",\n\t\"fade-out\",\n\t\"slide-in-left\",\n\t\"slide-in-right\",\n\t\"slide-in-top\",\n\t\"slide-in-bottom\",\n\t\"zoom-in\",\n\t\"zoom-out\",\n\t\"rotate-cw\",\n\t\"rotate-ccw\",\n\t\"bounce\",\n\t\"shake\"\n]);\nconst VideoAnimationSchema = z.object({\n\tid: z.string(),\n\ttype: AnimationTypeSchema,\n\tvalue: z.number()\n});\nconst VideoSpatialPropsSchema = z.object({\n\tx: z.number().default(0),\n\ty: z.number().default(0),\n\twidth: z.number().optional(),\n\theight: z.number().optional(),\n\trotation: z.number().default(0),\n\tscale: z.number().min(0).default(1),\n\topacity: z.number().min(0).max(1).default(1),\n\tzIndex: z.number().int().optional(),\n\tblendMode: GlobalCompositeOperation.optional()\n});\nconst VideoTimingPropsSchema = z.object({\n\tstartFrame: z.number().int().min(0).default(0),\n\tdurationInMS: z.number().int().min(1).optional(),\n\ttrimStart: z.number().int().min(0).optional(),\n\ttrimEnd: z.number().int().min(0).optional(),\n\tspeed: z.number().min(.25).max(4).optional()\n});\nconst VideoTextPropsSchema = z.object({\n\ttext: z.string().optional(),\n\tfontSize: z.number().optional(),\n\tfontFamily: z.string().optional(),\n\tfontStyle: z.string().optional(),\n\tfontWeight: z.union([z.number(), z.string()]).optional(),\n\tfill: z.string().optional(),\n\talign: z.string().optional(),\n\tdirection: z.enum([\n\t\t\"ltr\",\n\t\t\"rtl\",\n\t\t\"auto\"\n\t]).optional(),\n\tverticalAlign: z.string().optional(),\n\tletterSpacing: z.number().optional(),\n\tlineHeight: z.number().optional(),\n\tpadding: z.number().optional(),\n\tstroke: z.string().optional(),\n\tstrokeWidth: z.number().optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional(),\n\ttextShadow: z.string().optional(),\n\ttextBackgroundColor: z.string().optional(),\n\tshadows: z.array(z.object({\n\t\tcolor: z.string(),\n\t\toffset: z.object({\n\t\t\tx: z.number(),\n\t\t\ty: z.number()\n\t\t}).optional(),\n\t\tblurRadius: z.number().optional()\n\t})).optional(),\n\ttextAnimation: z.any().optional(),\n\tbottomPadding: z.number().optional(),\n\tmaxWidth: z.number().optional()\n});\nconst VideoStylePropsSchema = z.object({\n\tbackgroundColor: z.string().optional(),\n\tborderColor: z.string().optional(),\n\tborderWidth: z.number().optional(),\n\tstrokeRadius: z.number().optional(),\n\tautoDimensions: z.boolean().optional()\n});\nconst VideoLayerTypeSchema = z.enum([\n\t\"Video\",\n\t\"Image\",\n\t\"Audio\",\n\t\"Text\",\n\t\"Caption\",\n\t\"SVG\",\n\t\"GIF\",\n\t\"Lottie\"\n]);\nconst BaseVideoLayerPropsSchema = VideoSpatialPropsSchema.merge(VideoTimingPropsSchema).merge(VideoTextPropsSchema).merge(VideoStylePropsSchema).extend({\n\ttype: VideoLayerTypeSchema.optional(),\n\tanimations: z.array(VideoAnimationSchema).optional()\n});\n\n//#endregion\n//#region src/types/video/transition-schema.ts\nconst TransitionTypeSchema = z.enum([\n\t\"none\",\n\t\"crossfade\",\n\t\"wipe-left\",\n\t\"wipe-right\",\n\t\"slide-up\",\n\t\"slide-down\"\n]);\nconst TransitionSchema = z.object({\n\ttype: TransitionTypeSchema,\n\tdurationFrames: z.number().min(1)\n});\n\n//#endregion\n//#region src/types/video/virtual-video.ts\nconst MediaSourceSchema = z.object({ entity: FileAssetSchema.optional() });\nconst MediaMetadataSchema = z.object({\n\twidth: z.number().optional().nullable(),\n\theight: z.number().optional().nullable(),\n\tfps: z.number().optional().nullable(),\n\tdurationMs: z.number().optional().nullable(),\n\tsampleRate: z.number().optional().nullable(),\n\tchannels: z.number().optional().nullable(),\n\tbitDepth: z.number().optional().nullable(),\n\taudioCodec: z.string().optional().nullable(),\n\taudioBitrate: z.number().optional().nullable()\n});\nconst TimelineSegmentSchema = z.object({\n\tstartSec: z.number(),\n\tendSec: z.number().optional()\n});\nconst TimelineTransformSchema = z.object({\n\tstartFrame: z.number().optional(),\n\tsegments: z.array(TimelineSegmentSchema).optional()\n});\nconst BaseMediaOperationPropsSchema = z.object({\n\tvolume: z.number().optional(),\n\topacity: z.number().optional(),\n\tstartFrame: z.number().optional(),\n\ttimeline: TimelineTransformSchema.optional()\n});\n/** Original source file (leaf node) */\nconst SourceOperationSchema = BaseMediaOperationPropsSchema.extend({\n\top: z.literal(\"source\"),\n\tsource: MediaSourceSchema,\n\tsourceMeta: MediaMetadataSchema,\n\tdataType: z.enum(Object.values(DataTypeVal))\n});\n/** Text content (leaf node) */\nconst TextOperationSchema = BaseMediaOperationPropsSchema.extend({\n\top: z.literal(\"text\"),\n\ttext: z.string(),\n\tmetadata: MediaMetadataSchema.optional(),\n\tdataType: z.enum(Object.values(DataTypeVal))\n}).passthrough();\nconst MediaOperationSchema = z.union([\n\tSourceOperationSchema,\n\tTextOperationSchema,\n\tBaseMediaOperationPropsSchema.extend({\n\t\top: z.string(),\n\t\tmetadata: MediaMetadataSchema.optional(),\n\t\tdataType: z.enum(Object.values(DataTypeVal))\n\t}).passthrough()\n]);\nconst VirtualMediaDataSchema = z.lazy(() => z.object({\n\tmetadata: MediaMetadataSchema,\n\toperation: MediaOperationSchema,\n\tchildren: z.array(VirtualMediaDataSchema).default([])\n}));\n\n//#endregion\n//#region src/types/video/layer-schema.ts\nconst ExtendedLayerSchema = BaseVideoLayerPropsSchema.extend({\n\tid: z.string(),\n\tname: z.string().optional(),\n\ttype: VideoLayerTypeSchema,\n\tvirtualMedia: VirtualMediaDataSchema.optional(),\n\ttransitionIn: TransitionSchema.optional(),\n\ttransitionOut: TransitionSchema.optional(),\n\tdurationInMS: z.number(),\n\tmaxDurationInMS: z.number().optional(),\n\tsrc: z.string().optional(),\n\tvolume: z.number().default(1),\n\tinputHandleId: z.string().optional(),\n\tisPlaceholder: z.boolean().optional(),\n\tlockAspect: z.boolean().optional(),\n\tlockRatio: z.boolean().optional(),\n\tzIndex: z.number().optional()\n}).strict();\n\n//#endregion\n//#region src/types/video/rendering-defaults.ts\nconst DEFAULT_FPS = 60;\nconst DEFAULT_DURATION_MS = 3e3;\nconst DEFAULT_MEDIA_DIMENSION = 1080;\n/** Default styling applied to new Text layers. */\nconst TEXT_LAYER_DEFAULTS = {\n\tfontSize: 60,\n\tfontFamily: \"Inter\",\n\tfill: \"#ffffff\",\n\tfontStyle: \"normal\",\n\talign: \"start\",\n\tpadding: 0\n};\n/** Default styling applied to new Caption layers. */\nconst CAPTION_LAYER_DEFAULTS = {\n\tfontSize: 48,\n\tfontFamily: \"Inter\",\n\tfill: \"#ffffff\",\n\talign: \"center\",\n\tverticalAlign: \"bottom\",\n\tpadding: 0,\n\tlineHeight: 1.1,\n\ttextAnimation: {\n\t\tin: \"none\",\n\t\tout: \"none\",\n\t\tentranceMs: 0,\n\t\texitMs: 0,\n\t\tkinetic: \"none\",\n\t\tapplyBy: \"word\",\n\t\tsmoothing: true\n\t},\n\tbottomPadding: 60\n};\n\n//#endregion\n//#region src/types/video/resolve-media.ts\n/**\n* Identify the actual leaf media type (Video, Image, etc) by walking down the tree.\n* This can differ from getMediaType() if an operation (like Ken Burns) upgrades\n* an Image to a Video.\n*/\nfunction getLeafMediaType(vv) {\n\tif (!vv) return void 0;\n\tif (vv.operation?.op === \"source\") return vv.operation.dataType;\n\tif (vv.children && vv.children.length > 0) return getLeafMediaType(vv.children[0]);\n\treturn vv.operation.dataType;\n}\n/**\n* Resolve the MIME type of the leaf source media.\n*/\nfunction resolveMediaMimeType(vv) {\n\tif (!vv) return void 0;\n\tif (vv.operation?.op === \"source\") {\n\t\tconst op = vv.operation;\n\t\tif (op.mimeType) return op.mimeType;\n\t\tif (op.sourceMeta?.mimeType) return op.sourceMeta.mimeType;\n\t\tif (op.source?.entity?.mimeType) return op.source.entity.mimeType;\n\t\tconst url = typeof op.source === \"string\" ? op.source : op.url ?? op.source?.url;\n\t\tif (typeof url === \"string\") {\n\t\t\tconst ext = url.split(\".\").pop()?.toLowerCase();\n\t\t\tif (ext === \"mp4\") return \"video/mp4\";\n\t\t\tif (ext === \"webm\") return \"video/webm\";\n\t\t\tif (ext === \"mov\") return \"video/quicktime\";\n\t\t\tif (ext === \"png\") return \"image/png\";\n\t\t\tif (ext === \"jpg\" || ext === \"jpeg\") return \"image/jpeg\";\n\t\t\tif (ext === \"webp\") return \"image/webp\";\n\t\t\tif (ext === \"svg\") return \"image/svg+xml\";\n\t\t\tif (ext === \"mp3\") return \"audio/mpeg\";\n\t\t\tif (ext === \"wav\") return \"audio/wav\";\n\t\t\tif (ext === \"aac\") return \"audio/aac\";\n\t\t}\n\t}\n\tif (vv.children && vv.children.length > 0) return resolveMediaMimeType(vv.children[0]);\n}\n/**\n* Create a VirtualMediaData from a FileData source or Text.\n* Used by Import, VideoGen, and Text nodes to wrap concrete content.\n*/\nfunction createVirtualMedia(source, type = \"Video\") {\n\tif (source && typeof source === \"object\" && \"operation\" in source && \"metadata\" in source) return source;\n\tif (typeof source === \"string\") {\n\t\tconst url = source;\n\t\tconst sourceMeta$1 = {\n\t\t\twidth: void 0,\n\t\t\theight: void 0,\n\t\t\tdurationMs: type === \"Image\" || /\\.(png|jpg|jpeg|webp|gif|svg)$/i.test(url) ? DEFAULT_DURATION_MS : void 0,\n\t\t\tfps: void 0\n\t\t};\n\t\treturn {\n\t\t\tmetadata: sourceMeta$1,\n\t\t\toperation: {\n\t\t\t\top: \"source\",\n\t\t\t\turl,\n\t\t\t\tsource: url,\n\t\t\t\tsourceMeta: sourceMeta$1,\n\t\t\t\tdataType: type\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t}\n\tif (typeof source === \"object\" && source !== null && (\"url\" in source || \"path\" in source)) {\n\t\tconst desc = source;\n\t\tconst url = desc.url ?? desc.path;\n\t\tconst isImage = type === \"Image\" || /\\.(png|jpg|jpeg|webp|gif|svg)$/i.test(url);\n\t\tconst durationMs = desc.durationMs ?? (isImage ? DEFAULT_DURATION_MS : void 0);\n\t\tconst sourceMeta$1 = {\n\t\t\twidth: desc.width,\n\t\t\theight: desc.height,\n\t\t\tdurationMs,\n\t\t\tfps: desc.fps,\n\t\t\tsampleRate: desc.sampleRate,\n\t\t\tchannels: desc.channels,\n\t\t\tbitDepth: desc.bitDepth,\n\t\t\taudioCodec: desc.audioCodec,\n\t\t\taudioBitrate: desc.audioBitrate\n\t\t};\n\t\treturn {\n\t\t\tmetadata: sourceMeta$1,\n\t\t\toperation: {\n\t\t\t\top: \"source\",\n\t\t\t\turl,\n\t\t\t\tsource: url,\n\t\t\t\tsourceMeta: sourceMeta$1,\n\t\t\t\tdataType: type\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t}\n\tconst sourceMeta = getFileDataMetadata(source) || {\n\t\twidth: void 0,\n\t\theight: void 0,\n\t\tdurationMs: void 0,\n\t\tfps: void 0\n\t};\n\treturn {\n\t\tmetadata: sourceMeta,\n\t\toperation: {\n\t\t\top: \"source\",\n\t\t\tsource: { entity: source?.entity },\n\t\t\tsourceMeta,\n\t\t\tdataType: type\n\t\t},\n\t\tchildren: []\n\t};\n}\n/**\n* Identify if a VirtualMediaData node is intended to be Video, Audio, Image, or Text.\n*/\nfunction getMediaType(vv) {\n\tif (!vv) throw new Error(\"No media data provided\");\n\treturn vv.operation.dataType;\n}\n/**\n* Append an operation to an existing VirtualMediaData (recursive).\n* This creates a new parent node wrapping the current one as a child.\n*/\nfunction appendOperation(vv, operation) {\n\treturn {\n\t\tmetadata: computeNextMetadata(getActiveMediaMetadata(vv) ?? {}, operation),\n\t\toperation,\n\t\tchildren: [vv]\n\t};\n}\n/**\n* Helper to compute the metadata of the NEXT node in the operator tree.\n*/\nfunction computeNextMetadata(baseMeta, op) {\n\tlet { width, height, durationMs, fps, sampleRate, channels, bitDepth, audioCodec, audioBitrate } = baseMeta;\n\tif (\"metadata\" in op && op.metadata) {\n\t\twidth = op.metadata.width ?? width;\n\t\theight = op.metadata.height ?? height;\n\t\tdurationMs = op.metadata.durationMs ?? durationMs;\n\t\tfps = op.metadata.fps ?? fps;\n\t\tsampleRate = op.metadata.sampleRate ?? sampleRate;\n\t\tchannels = op.metadata.channels ?? channels;\n\t\tbitDepth = op.metadata.bitDepth ?? bitDepth;\n\t\taudioCodec = op.metadata.audioCodec ?? audioCodec;\n\t\taudioBitrate = op.metadata.audioBitrate ?? audioBitrate;\n\t}\n\tif (op.dataType === \"Audio\" || op.dataType === \"Text\" || op.dataType === \"Caption\") {\n\t\twidth = void 0;\n\t\theight = void 0;\n\t\tfps = void 0;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tdurationMs,\n\t\tfps,\n\t\tsampleRate,\n\t\tchannels,\n\t\tbitDepth,\n\t\taudioCodec,\n\t\taudioBitrate\n\t};\n}\nfunction getFileDataMetadata(filedata) {\n\tif (!filedata) return null;\n\tconst { entity } = filedata;\n\tconst width = entity?.width;\n\tconst height = entity?.height;\n\tlet durationMs = entity?.duration;\n\tconst fps = entity?.fps;\n\tconst sampleRate = entity?.sampleRate;\n\tconst channels = entity?.channels;\n\tconst bitDepth = entity?.bitDepth;\n\tconst audioCodec = entity?.audioCodec;\n\tconst audioBitrate = entity?.audioBitrate;\n\tif (durationMs === void 0 || durationMs === null) {\n\t\tconst mimeType = entity?.mimeType ?? \"\";\n\t\tif (mimeType.startsWith(\"image/\") || mimeType === \"image/svg+xml\") durationMs = DEFAULT_DURATION_MS;\n\t}\n\tif (width === void 0 && height === void 0 && durationMs === void 0 && sampleRate === void 0 && channels === void 0) return null;\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tdurationMs: durationMs === 0 ? void 0 : durationMs,\n\t\tfps,\n\t\tsampleRate,\n\t\tchannels,\n\t\tbitDepth,\n\t\taudioCodec,\n\t\taudioBitrate\n\t};\n}\n/**\n* Get the active metadata from the VirtualMediaData node.\n* Simply returns the metadata property of the node.\n* Supports legacy formats (sourceMeta) and extracts from source if needed.\n*/\nfunction getActiveMediaMetadata(vv) {\n\tif (!vv) return null;\n\tlet width = vv.metadata?.width;\n\tlet height = vv.metadata?.height;\n\tlet durationMs = vv.metadata?.durationMs;\n\tlet fps = vv.metadata?.fps;\n\tlet sampleRate = vv.metadata?.sampleRate;\n\tlet channels = vv.metadata?.channels;\n\tlet bitDepth = vv.metadata?.bitDepth;\n\tlet audioCodec = vv.metadata?.audioCodec;\n\tlet audioBitrate = vv.metadata?.audioBitrate;\n\tconst op = vv.operation;\n\tif (op?.op === \"source\") {\n\t\tconst sm = op.sourceMeta || {};\n\t\tconst fdm = op.source ? getFileDataMetadata(op.source) : null;\n\t\twidth = width ?? sm.width ?? fdm?.width;\n\t\theight = height ?? sm.height ?? fdm?.height;\n\t\tdurationMs = durationMs ?? sm.durationMs ?? fdm?.durationMs;\n\t\tfps = fps ?? sm.fps ?? fdm?.fps;\n\t\tsampleRate = sampleRate ?? sm.sampleRate ?? fdm?.sampleRate;\n\t\tchannels = channels ?? sm.channels ?? fdm?.channels;\n\t\tbitDepth = bitDepth ?? sm.bitDepth ?? fdm?.bitDepth;\n\t\taudioCodec = audioCodec ?? sm.audioCodec ?? fdm?.audioCodec;\n\t\taudioBitrate = audioBitrate ?? sm.audioBitrate ?? fdm?.audioBitrate;\n\t}\n\tif (width === void 0 && height === void 0 && durationMs === void 0 && sampleRate === void 0 && channels === void 0) return null;\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tdurationMs: durationMs === 0 ? void 0 : durationMs,\n\t\tfps,\n\t\tsampleRate,\n\t\tchannels,\n\t\tbitDepth,\n\t\taudioCodec,\n\t\taudioBitrate\n\t};\n}\n/**\n* Compute the dimensions and offsets for rendering a cropped video.\n* Traverses the VirtualMediaData tree to find nested crops and source dimensions.\n*/\nfunction computeVideoCropRenderProps(virtualMedia) {\n\tlet totalOffsetX = 0;\n\tlet totalOffsetY = 0;\n\tlet hasCrop = false;\n\tlet sourceMetaFound = null;\n\tlet currentNode = virtualMedia;\n\twhile (currentNode) {\n\t\tconst op = currentNode.operation;\n\t\tif (op.op === \"Crop\") {\n\t\t\thasCrop = true;\n\t\t\tconst anyOp = op;\n\t\t\tconst inputMeta = currentNode.children[0]?.metadata;\n\t\t\tconst inputW = inputMeta?.width ?? 0;\n\t\t\tconst inputH = inputMeta?.height ?? 0;\n\t\t\tif (inputW > 0 && inputH > 0) {\n\t\t\t\tconst cropLeftPx = anyOp.leftPercentage / 100 * inputW;\n\t\t\t\tconst cropTopPx = anyOp.topPercentage / 100 * inputH;\n\t\t\t\ttotalOffsetX += cropLeftPx;\n\t\t\t\ttotalOffsetY += cropTopPx;\n\t\t\t}\n\t\t}\n\t\tif (op.op === \"source\") sourceMetaFound = op.sourceMeta ?? currentNode.metadata;\n\t\tcurrentNode = currentNode.children[0];\n\t}\n\tif (!hasCrop || !sourceMetaFound) return null;\n\tconst sourceW = sourceMetaFound.width ?? 1;\n\tconst sourceH = sourceMetaFound.height ?? 1;\n\treturn {\n\t\tvideoNaturalWidth: sourceW,\n\t\tvideoNaturalHeight: sourceH,\n\t\tcropTranslatePercentageX: -(totalOffsetX / sourceW) * 100,\n\t\tcropTranslatePercentageY: -(totalOffsetY / sourceH) * 100\n\t};\n}\n\n//#endregion\n//#region src/utils/color.ts\nconst NAMED = {\n\ttransparent: \"#00000000\",\n\tblack: \"#000000\",\n\twhite: \"#ffffff\",\n\tred: \"#ff0000\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tblue: \"#0000ff\",\n\tyellow: \"#ffff00\",\n\tcyan: \"#00ffff\",\n\taqua: \"#00ffff\",\n\tmagenta: \"#ff00ff\",\n\tfuchsia: \"#ff00ff\",\n\torange: \"#ffa500\",\n\tpurple: \"#800080\",\n\tpink: \"#ffc0cb\",\n\tgray: \"#808080\",\n\tgrey: \"#808080\",\n\tsilver: \"#c0c0c0\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tteal: \"#008080\",\n\tolive: \"#808000\",\n\tgold: \"#ffd700\",\n\tcoral: \"#ff7f50\",\n\tsalmon: \"#fa8072\",\n\tcrimson: \"#dc143c\",\n\tindigo: \"#4b0082\",\n\tviolet: \"#ee82ee\",\n\tturquoise: \"#40e0d0\",\n\ttomato: \"#ff6347\",\n\tchocolate: \"#d2691e\",\n\ttan: \"#d2b48c\",\n\tbeige: \"#f5f5dc\",\n\tivory: \"#fffff0\",\n\tkhaki: \"#f0e68c\",\n\tlavender: \"#e6e6fa\",\n\tmint: \"#98ff98\",\n\tskyblue: \"#87ceeb\",\n\tslategray: \"#708090\",\n\tdimgray: \"#696969\",\n\tlightgray: \"#d3d3d3\",\n\tdarkgray: \"#a9a9a9\",\n\twhitesmoke: \"#f5f5f5\",\n\thotpink: \"#ff69b4\",\n\tdeeppink: \"#ff1493\",\n\tdodgerblue: \"#1e90ff\",\n\troyalblue: \"#4169e1\",\n\tsteelblue: \"#4682b4\",\n\tmidnightblue: \"#191970\",\n\tlimegreen: \"#32cd32\",\n\tforestgreen: \"#228b22\",\n\tseagreen: \"#2e8b57\",\n\tdarkorange: \"#ff8c00\",\n\torangered: \"#ff4500\",\n\tfirebrick: \"#b22222\",\n\trebeccapurple: \"#663399\"\n};\nconst clamp01 = (v) => v < 0 ? 0 : v > 1 ? 1 : v;\nfunction parseHex(h) {\n\tif (!/^[0-9a-f]+$/i.test(h)) return null;\n\tconst x = (i, n) => parseInt(n === 1 ? h[i] + h[i] : h.slice(i, i + 2), 16) / 255;\n\tswitch (h.length) {\n\t\tcase 3: return [\n\t\t\tx(0, 1),\n\t\t\tx(1, 1),\n\t\t\tx(2, 1),\n\t\t\t1\n\t\t];\n\t\tcase 4: return [\n\t\t\tx(0, 1),\n\t\t\tx(1, 1),\n\t\t\tx(2, 1),\n\t\t\tx(3, 1)\n\t\t];\n\t\tcase 6: return [\n\t\t\tx(0, 2),\n\t\t\tx(2, 2),\n\t\t\tx(4, 2),\n\t\t\t1\n\t\t];\n\t\tcase 8: return [\n\t\t\tx(0, 2),\n\t\t\tx(2, 2),\n\t\t\tx(4, 2),\n\t\t\tx(6, 2)\n\t\t];\n\t\tdefault: return null;\n\t}\n}\n/** Splits `rgb(1 2 3 / 50%)` or `rgb(1, 2, 3, .5)` into its argument tokens. */\nfunction fnArgs(body) {\n\treturn body.replace(/\\s*\\/\\s*/, \" \").split(/[\\s,]+/).filter(Boolean);\n}\n/** A number, or a percentage scaled so 100% = `pct100`. */\nfunction num(tok, pct100) {\n\tif (tok === void 0 || tok === \"none\") return 0;\n\tif (tok.endsWith(\"%\")) return parseFloat(tok) / 100 * pct100;\n\treturn parseFloat(tok);\n}\nfunction hue(tok) {\n\tif (tok === void 0) return 0;\n\tif (tok.endsWith(\"turn\")) return parseFloat(tok) * 360;\n\tif (tok.endsWith(\"rad\")) return parseFloat(tok) * 180 / Math.PI;\n\treturn parseFloat(tok);\n}\nfunction alpha(tok) {\n\treturn tok === void 0 ? 1 : clamp01(num(tok, 1));\n}\nfunction hslToRgb(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n) => {\n\t\tconst k = (n + h / 30) % 12;\n\t\treturn l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n\t};\n\treturn [\n\t\tf(0),\n\t\tf(8),\n\t\tf(4)\n\t];\n}\nconst toLinear = (c) => c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;\nconst toGamma = (c) => c <= .0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - .055;\n/** sRGB (0..1) → OKLab [L, a, b]. */\nfunction rgbToOklab(r, g, b) {\n\tconst lr = toLinear(r);\n\tconst lg = toLinear(g);\n\tconst lb = toLinear(b);\n\tconst l = Math.cbrt(.4122214708 * lr + .5363325363 * lg + .0514459929 * lb);\n\tconst m = Math.cbrt(.2119034982 * lr + .6806995451 * lg + .1073969566 * lb);\n\tconst s = Math.cbrt(.0883024619 * lr + .2817188376 * lg + .6299787005 * lb);\n\treturn [\n\t\t.2104542553 * l + .793617785 * m - .0040720468 * s,\n\t\t1.9779984951 * l - 2.428592205 * m + .4505937099 * s,\n\t\t.0259040371 * l + .7827717662 * m - .808675766 * s\n\t];\n}\n/** OKLab → sRGB (0..1, clamped to gamut). */\nfunction oklabToRgb(L, a, b) {\n\tconst l = (L + .3963377774 * a + .2158037573 * b) ** 3;\n\tconst m = (L - .1055613458 * a - .0638541728 * b) ** 3;\n\tconst s = (L - .0894841775 * a - 1.291485548 * b) ** 3;\n\treturn [\n\t\tclamp01(toGamma(4.0767416621 * l - 3.3077115913 * m + .2309699292 * s)),\n\t\tclamp01(toGamma(-1.2684380046 * l + 2.6097574011 * m - .3413193965 * s)),\n\t\tclamp01(toGamma(-.0041960863 * l - .7034186147 * m + 1.707614701 * s))\n\t];\n}\n/**\n* Parses any CSS color this engine accepts: hex (3/4/6/8), `rgb()`/`rgba()`,\n* `hsl()`/`hsla()`, `oklch()`, `oklab()` (comma or space syntax, `/ alpha`)\n* and common named colors. Returns `null` when the string is not a color.\n*/\nfunction parseCssColor(input) {\n\tconst s = input.trim().toLowerCase();\n\tif (!s) return null;\n\tif (s.startsWith(\"#\")) return parseHex(s.slice(1));\n\tconst named = NAMED[s];\n\tif (named) return parseHex(named.slice(1));\n\tconst m = /^([a-z]+)\\((.*)\\)$/.exec(s);\n\tif (!m) return null;\n\tconst [, fn, body] = m;\n\tconst t = fnArgs(body);\n\tswitch (fn) {\n\t\tcase \"rgb\":\n\t\tcase \"rgba\": return [\n\t\t\tclamp01(num(t[0], 255) / 255),\n\t\t\tclamp01(num(t[1], 255) / 255),\n\t\t\tclamp01(num(t[2], 255) / 255),\n\t\t\talpha(t[3])\n\t\t];\n\t\tcase \"hsl\":\n\t\tcase \"hsla\": {\n\t\t\tconst [r, g, b] = hslToRgb((hue(t[0]) % 360 + 360) % 360, clamp01(num(t[1], 100) / 100), clamp01(num(t[2], 100) / 100));\n\t\t\treturn [\n\t\t\t\tr,\n\t\t\t\tg,\n\t\t\t\tb,\n\t\t\t\talpha(t[3])\n\t\t\t];\n\t\t}\n\t\tcase \"oklch\": {\n\t\t\tconst L = num(t[0], 1);\n\t\t\tconst C = num(t[1], .4);\n\t\t\tconst H = hue(t[2]) * Math.PI / 180;\n\t\t\tconst [r, g, b] = oklabToRgb(L, C * Math.cos(H), C * Math.sin(H));\n\t\t\treturn [\n\t\t\t\tr,\n\t\t\t\tg,\n\t\t\t\tb,\n\t\t\t\talpha(t[3])\n\t\t\t];\n\t\t}\n\t\tcase \"oklab\": {\n\t\t\tconst [r, g, b] = oklabToRgb(num(t[0], 1), num(t[1], .4), num(t[2], .4));\n\t\t\treturn [\n\t\t\t\tr,\n\t\t\t\tg,\n\t\t\t\tb,\n\t\t\t\talpha(t[3])\n\t\t\t];\n\t\t}\n\t\tdefault: return null;\n\t}\n}\n/** Formats straight sRGB as `#rrggbb` (or `#rrggbbaa` when translucent). */\nfunction formatHex([r, g, b, a]) {\n\tconst h = (v) => Math.round(clamp01(v) * 255).toString(16).padStart(2, \"0\");\n\treturn `#${h(r)}${h(g)}${h(b)}${a < .999 ? h(a) : \"\"}`;\n}\nconst parseOr = (c) => parseCssColor(c) ?? [\n\t0,\n\t0,\n\t0,\n\t0\n];\n/**\n* Mixes two colors perceptually (in OKLab), `t` = 0 → `a`, 1 → `b`.\n* Midpoints keep their lightness and saturation instead of going muddy\n* the way a plain sRGB lerp does.\n*/\nfunction mixColors(a, b, t) {\n\tconst ca = parseOr(a);\n\tconst cb = parseOr(b);\n\tconst pa = ca[3] < 1e-4 ? cb : ca;\n\tconst pb = cb[3] < 1e-4 ? ca : cb;\n\tconst la = rgbToOklab(pa[0], pa[1], pa[2]);\n\tconst lb = rgbToOklab(pb[0], pb[1], pb[2]);\n\tconst k = clamp01(t);\n\tconst [r, g, bl] = oklabToRgb(la[0] + (lb[0] - la[0]) * k, la[1] + (lb[1] - la[1]) * k, la[2] + (lb[2] - la[2]) * k);\n\treturn formatHex([\n\t\tr,\n\t\tg,\n\t\tbl,\n\t\tca[3] + (cb[3] - ca[3]) * k\n\t]);\n}\n/** Samples a multi-stop gradient (stops in any order) at `t` ∈ [0, 1]. */\nfunction sampleColorStops(stops, t) {\n\tconst list = normalizeColorStops(stops);\n\tif (list.length === 0) return \"#00000000\";\n\tif (t <= list[0].offset) return list[0].color;\n\tfor (let i = 1; i < list.length; i++) {\n\t\tconst b = list[i];\n\t\tif (t <= b.offset) {\n\t\t\tconst a = list[i - 1];\n\t\t\tconst span = b.offset - a.offset;\n\t\t\treturn mixColors(a.color, b.color, span > 0 ? (t - a.offset) / span : 1);\n\t\t}\n\t}\n\treturn list[list.length - 1].color;\n}\n/** Bare color strings become evenly spaced stops; result is sorted by offset. */\nfunction normalizeColorStops(stops) {\n\tconst n = stops.length;\n\treturn stops.map((s, i) => typeof s === \"string\" ? {\n\t\toffset: n > 1 ? i / (n - 1) : 0,\n\t\tcolor: s\n\t} : {\n\t\toffset: clamp01(s.offset),\n\t\tcolor: s.color\n\t}).sort((a, b) => a.offset - b.offset);\n}\nfunction oklchOf(c) {\n\tconst [r, g, b, a] = parseOr(c);\n\tconst [L, A, B] = rgbToOklab(r, g, b);\n\treturn [\n\t\tL,\n\t\tMath.hypot(A, B),\n\t\tMath.atan2(B, A) * 180 / Math.PI,\n\t\ta\n\t];\n}\nfunction fromOklch(L, C, H, a) {\n\tconst h = H * Math.PI / 180;\n\tconst [r, g, b] = oklabToRgb(L, C * Math.cos(h), C * Math.sin(h));\n\treturn formatHex([\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t]);\n}\n/**\n* Authoring helpers for colors. Every function returns a hex string, so the\n* result drops straight into any color prop or keyframe.\n*\n* ```ts\n* Color.oklch(0.7, 0.15, 250) // perceptual: equal L reads equally bright\n* Color.hsl(212, 0.95, 0.74)\n* Color.mix(\"#ff5a1f\", \"#1f6bff\", 0.5) // OKLab, no muddy midpoint\n* const wave = Color.ramp([\"#3b82f6\", \"#8b5cf6\", \"#ec4899\"]);\n* wave(0.5) // sample a gradient\n* Color.lighten(\"#ff5a1f\", 0.1), Color.alpha(\"#000\", 0.4)\n* ```\n*/\nconst Color = {\n\tparse: parseCssColor,\n\thex(c) {\n\t\treturn formatHex(parseOr(c));\n\t},\n\trgb(r, g, b, a = 1) {\n\t\treturn formatHex([\n\t\t\tr / 255,\n\t\t\tg / 255,\n\t\t\tb / 255,\n\t\t\ta\n\t\t]);\n\t},\n\thsl(h, s, l, a = 1) {\n\t\tconst [r, g, b] = hslToRgb((h % 360 + 360) % 360, clamp01(s), clamp01(l));\n\t\treturn formatHex([\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\ta\n\t\t]);\n\t},\n\toklch(l, c, h, a = 1) {\n\t\treturn fromOklch(l, c, h, a);\n\t},\n\tmix: mixColors,\n\tramp(stops) {\n\t\tconst list = normalizeColorStops(stops);\n\t\treturn (t) => sampleColorStops(list, t);\n\t},\n\tsteps(stops, n) {\n\t\tconst list = normalizeColorStops(stops);\n\t\treturn Array.from({ length: n }, (_, i) => sampleColorStops(list, n > 1 ? i / (n - 1) : 0));\n\t},\n\tlighten(c, amount) {\n\t\tconst [L, C, H, a] = oklchOf(c);\n\t\treturn fromOklch(clamp01(L + amount), C, H, a);\n\t},\n\tdarken(c, amount) {\n\t\tconst [L, C, H, a] = oklchOf(c);\n\t\treturn fromOklch(clamp01(L - amount), C, H, a);\n\t},\n\tsaturate(c, factor) {\n\t\tconst [L, C, H, a] = oklchOf(c);\n\t\treturn fromOklch(L, C * factor, H, a);\n\t},\n\trotate(c, degrees) {\n\t\tconst [L, C, H, a] = oklchOf(c);\n\t\treturn fromOklch(L, C, H + degrees, a);\n\t},\n\talpha(c, a) {\n\t\tconst [r, g, b] = parseOr(c);\n\t\treturn formatHex([\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tclamp01(a)\n\t\t]);\n\t},\n\tcontrast(a, b) {\n\t\tconst lum = (c) => {\n\t\t\tconst [r, g, bl] = parseOr(c);\n\t\t\treturn .2126 * toLinear(r) + .7152 * toLinear(g) + .0722 * toLinear(bl);\n\t\t};\n\t\tconst [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);\n\t\treturn (hi + .05) / (lo + .05);\n\t},\n\treadableOn(background) {\n\t\treturn Color.contrast(background, \"#ffffff\") >= Color.contrast(background, \"#000000\") ? \"#ffffff\" : \"#000000\";\n\t}\n};\n\n//#endregion\n//#region src/utils/gradient.ts\n/**\n* CSS gradients (`linear-gradient`, `radial-gradient`, `conic-gradient`) as\n* values for any `background` or shape `fill`, plus `Gradient` helpers that\n* write them. Colors blend perceptually (OKLab), not through muddy sRGB.\n*/\n/** Gradients this renderer draws at most this many stops (extra ones are resampled). */\nconst MAX_GRADIENT_STOPS = 8;\nconst GRADIENT_RE = /^\\s*(linear|radial|conic)-gradient\\(\\s*([\\s\\S]*)\\)\\s*$/i;\nfunction isCssGradient(value) {\n\treturn typeof value === \"string\" && GRADIENT_RE.test(value);\n}\n/** Splits on commas that are not inside parentheses. */\nfunction splitTopLevel(s) {\n\tconst out = [];\n\tlet depth = 0;\n\tlet cur = \"\";\n\tfor (const ch of s) {\n\t\tif (ch === \"(\") depth++;\n\t\tif (ch === \")\") depth--;\n\t\tif (ch === \",\" && depth === 0) {\n\t\t\tout.push(cur.trim());\n\t\t\tcur = \"\";\n\t\t} else cur += ch;\n\t}\n\tif (cur.trim()) out.push(cur.trim());\n\treturn out;\n}\nfunction parseAngle(tok) {\n\tconst m = /^(-?[\\d.]+)(deg|turn|rad|grad)?$/i.exec(tok.trim());\n\tif (!m) return null;\n\tconst v = parseFloat(m[1]);\n\tswitch ((m[2] ?? \"deg\").toLowerCase()) {\n\t\tcase \"turn\": return v * 360;\n\t\tcase \"rad\": return v * 180 / Math.PI;\n\t\tcase \"grad\": return v * .9;\n\t\tdefault: return v;\n\t}\n}\nconst SIDE_ANGLES = {\n\ttop: 0,\n\tright: 90,\n\tbottom: 180,\n\tleft: 270,\n\t\"top right\": 45,\n\t\"right top\": 45,\n\t\"bottom right\": 135,\n\t\"right bottom\": 135,\n\t\"bottom left\": 225,\n\t\"left bottom\": 225,\n\t\"top left\": 315,\n\t\"left top\": 315\n};\nconst POSITION_KEYWORDS = {\n\tleft: 0,\n\ttop: 0,\n\tcenter: .5,\n\tright: 1,\n\tbottom: 1\n};\n/** `at 30% 70%`, `at left top`, `at center`. */\nfunction parsePosition(tokens) {\n\tconst vals = tokens.map((t) => t in POSITION_KEYWORDS ? {\n\t\tv: POSITION_KEYWORDS[t],\n\t\taxis: t === \"top\" || t === \"bottom\" ? \"y\" : t === \"left\" || t === \"right\" ? \"x\" : \"any\"\n\t} : {\n\t\tv: t.endsWith(\"%\") ? parseFloat(t) / 100 : .5,\n\t\taxis: \"any\"\n\t});\n\tlet x = .5;\n\tlet y = .5;\n\tif (vals.length === 1) if (vals[0].axis === \"y\") y = vals[0].v;\n\telse x = vals[0].v;\n\telse if (vals.length >= 2) if (vals[0].axis === \"y\" || vals[1].axis === \"x\") {\n\t\ty = vals[0].v;\n\t\tx = vals[1].v;\n\t} else {\n\t\tx = vals[0].v;\n\t\ty = vals[1].v;\n\t}\n\treturn [x, y];\n}\n/** Parses one `color [pos] [pos]` stop list entry; positions in 0..1 (or px later). */\nfunction parseStop(s) {\n\tconst m = /^((?:[a-z]+\\([^)]*\\))|#[0-9a-f]+|[a-z]+)\\s*(.*)$/i.exec(s.trim());\n\tif (!m) return null;\n\tconst color = parseCssColor(m[1]);\n\tif (!color) return null;\n\tconst positions = [];\n\tfor (const p of m[2].split(/\\s+/).filter(Boolean)) if (p.endsWith(\"%\")) positions.push(parseFloat(p) / 100);\n\telse if (p === \"0\") positions.push(0);\n\telse if (/(deg|turn|rad|grad)$/i.test(p)) {\n\t\tconst a = parseAngle(p);\n\t\tif (a !== null) positions.push(a / 360);\n\t}\n\treturn {\n\t\tcolor,\n\t\tpositions: positions.filter((p) => Number.isFinite(p))\n\t};\n}\n/** CSS stop fixup: clamp ascending, spread unpositioned stops evenly. */\nfunction resolveStops(raw) {\n\tconst n = raw.length;\n\tif (n === 0) return [];\n\tconst pos = raw.map((r) => r.position);\n\tif (pos[0] === void 0) pos[0] = 0;\n\tif (pos[n - 1] === void 0) pos[n - 1] = 1;\n\tlet maxSoFar = -Infinity;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst p = pos[i];\n\t\tif (p !== void 0) {\n\t\t\tpos[i] = Math.max(p, maxSoFar);\n\t\t\tmaxSoFar = pos[i];\n\t\t}\n\t}\n\tfor (let i = 1; i < n; i++) {\n\t\tif (pos[i] !== void 0) continue;\n\t\tlet j = i;\n\t\twhile (pos[j] === void 0) j++;\n\t\tconst a = pos[i - 1];\n\t\tconst b = pos[j];\n\t\tfor (let k = i; k < j; k++) pos[k] = a + (b - a) * (k - i + 1) / (j - i + 1);\n\t}\n\treturn raw.map((r, i) => ({\n\t\toffset: pos[i],\n\t\tcolor: r.color\n\t}));\n}\nconst cache = /* @__PURE__ */ new Map();\n/** Parses a CSS gradient string; `null` when it is not one this engine draws. */\nfunction parseCssGradient(input) {\n\tconst hit = cache.get(input);\n\tif (hit !== void 0) return hit;\n\tconst result = parseUncached(input);\n\tif (cache.size > 512) cache.clear();\n\tcache.set(input, result);\n\treturn result;\n}\nfunction parseUncached(input) {\n\tconst m = GRADIENT_RE.exec(input);\n\tif (!m) return null;\n\tconst type = m[1].toLowerCase();\n\tconst parts = splitTopLevel(m[2]);\n\tconst g = {\n\t\ttype,\n\t\tangle: 180,\n\t\tcenter: [.5, .5],\n\t\tshape: \"ellipse\",\n\t\tfrom: 0,\n\t\tstops: []\n\t};\n\tconst first = parts[0]?.toLowerCase().trim() ?? \"\";\n\tlet consumedFirst = false;\n\tif (type === \"linear\") if (first.startsWith(\"to \")) {\n\t\tconst side = first.slice(3).trim().replace(/\\s+/g, \" \");\n\t\tif (side in SIDE_ANGLES) {\n\t\t\tg.angle = SIDE_ANGLES[side];\n\t\t\tconsumedFirst = true;\n\t\t}\n\t} else {\n\t\tconst a = parseAngle(first);\n\t\tif (a !== null) {\n\t\t\tg.angle = a;\n\t\t\tconsumedFirst = true;\n\t\t}\n\t}\n\telse {\n\t\tconst tokens = first.split(/\\s+/).filter(Boolean);\n\t\tconst at = tokens.indexOf(\"at\");\n\t\tconst before = at >= 0 ? tokens.slice(0, at) : tokens;\n\t\tif (at >= 0 || before.some((t) => t === \"circle\" || t === \"ellipse\" || t === \"from\" || /^closest|^farthest/.test(t) || type === \"radial\" && /px$/.test(t))) {\n\t\t\tconsumedFirst = true;\n\t\t\tif (at >= 0) g.center = parsePosition(tokens.slice(at + 1));\n\t\t\tif (type === \"radial\") {\n\t\t\t\tif (before.includes(\"circle\")) g.shape = \"circle\";\n\t\t\t\tconst px = before.filter((t) => /px$/.test(t)).map((t) => parseFloat(t));\n\t\t\t\tif (px.length === 1) {\n\t\t\t\t\tg.shape = \"circle\";\n\t\t\t\t\tg.radius = [px[0], px[0]];\n\t\t\t\t} else if (px.length >= 2) g.radius = [px[0], px[1]];\n\t\t\t} else {\n\t\t\t\tconst f = before.indexOf(\"from\");\n\t\t\t\tif (f >= 0 && before[f + 1]) g.from = parseAngle(before[f + 1]) ?? 0;\n\t\t\t}\n\t\t}\n\t}\n\tconst raw = [];\n\tfor (const p of consumedFirst ? parts.slice(1) : parts) {\n\t\tconst stop = parseStop(p);\n\t\tif (!stop) return null;\n\t\tif (stop.positions.length === 0) raw.push({ color: stop.color });\n\t\tfor (const pos of stop.positions) raw.push({\n\t\t\tcolor: stop.color,\n\t\t\tposition: pos\n\t\t});\n\t}\n\tif (raw.length === 0) return null;\n\tif (raw.length === 1) raw.push({ ...raw[0] });\n\tg.stops = resolveStops(raw);\n\treturn g;\n}\n/** Up to MAX_GRADIENT_STOPS stops: longer lists are resampled evenly. */\nfunction limitGradientStops(stops) {\n\tif (stops.length <= MAX_GRADIENT_STOPS) return stops;\n\tconst out = [];\n\tconst lo = stops[0].offset;\n\tconst hi = stops[stops.length - 1].offset;\n\tfor (let i = 0; i < MAX_GRADIENT_STOPS; i++) {\n\t\tconst t = lo + (hi - lo) * i / (MAX_GRADIENT_STOPS - 1);\n\t\tlet k = 1;\n\t\twhile (k < stops.length - 1 && stops[k].offset < t) k++;\n\t\tconst a = stops[k - 1];\n\t\tconst b = stops[k];\n\t\tconst span = b.offset - a.offset;\n\t\tconst f = span > 0 ? Math.min(1, Math.max(0, (t - a.offset) / span)) : 1;\n\t\tout.push({\n\t\t\toffset: t,\n\t\t\tcolor: a.color.map((v, j) => v + (b.color[j] - v) * f)\n\t\t});\n\t}\n\treturn out;\n}\n/**\n* Stops as OKLab + alpha for the GPU. A transparent stop borrows its\n* neighbor's color, so fading to `transparent` keeps the hue instead of\n* passing through grey (CSS premultiplied interpolation does the same).\n*/\nfunction gradientStopsToOklab(stops) {\n\tconst lab = stops.map((s) => rgbToOklab(s.color[0], s.color[1], s.color[2]));\n\treturn stops.map((s, i) => {\n\t\tlet src = lab[i];\n\t\tif (s.color[3] < 1e-4) {\n\t\t\tconst prev = stops.slice(0, i).reverse().findIndex((p) => p.color[3] > 1e-4);\n\t\t\tconst next = stops.slice(i + 1).findIndex((p) => p.color[3] > 1e-4);\n\t\t\tconst pi = prev >= 0 ? i - 1 - prev : -1;\n\t\t\tconst ni = next >= 0 ? i + 1 + next : -1;\n\t\t\tif (pi >= 0 && ni >= 0) {\n\t\t\t\tconst a = lab[pi];\n\t\t\t\tconst b = lab[ni];\n\t\t\t\tsrc = [\n\t\t\t\t\t(a[0] + b[0]) / 2,\n\t\t\t\t\t(a[1] + b[1]) / 2,\n\t\t\t\t\t(a[2] + b[2]) / 2\n\t\t\t\t];\n\t\t\t} else if (pi >= 0) src = lab[pi];\n\t\t\telse if (ni >= 0) src = lab[ni];\n\t\t}\n\t\treturn [\n\t\t\tsrc[0],\n\t\t\tsrc[1],\n\t\t\tsrc[2],\n\t\t\ts.color[3]\n\t\t];\n\t});\n}\nfunction stopList(stops) {\n\treturn stops.map((s) => typeof s === \"string\" ? s : `${s.color} ${Math.round(s.offset * 1e4) / 100}%`).join(\", \");\n}\n/**\n* Writes CSS gradient strings for `background` / `fill`:\n*\n* ```ts\n* Layer.box({ background: Gradient.linear([\"#ff5a1f\", \"#7c3aed\"], 135) })\n* Layer.shape(\"circle\", { fill: Gradient.radial([\"#fff\", \"transparent\"]) })\n* Gradient.conic([\"red\", \"yellow\", \"lime\", \"aqua\", \"blue\", \"magenta\", \"red\"])\n* ```\n* Plain strings work too: `\"linear-gradient(to right, #000, #fff 80%)\"`.\n*/\nconst Gradient = {\n\tlinear(stops, angle = 180) {\n\t\treturn `linear-gradient(${angle}deg, ${stopList(stops)})`;\n\t},\n\tradial(stops, options = {}) {\n\t\tconst at = options.at ?? [.5, .5];\n\t\treturn `radial-gradient(${options.radius !== void 0 ? `${options.radius}px` : options.circle ? \"circle\" : \"ellipse\"} at ${at[0] * 100}% ${at[1] * 100}%, ${stopList(stops)})`;\n\t},\n\tconic(stops, options = {}) {\n\t\tconst at = options.at ?? [.5, .5];\n\t\treturn `conic-gradient(from ${options.from ?? 0}deg at ${at[0] * 100}% ${at[1] * 100}%, ${stopList(stops)})`;\n\t},\n\tparse: parseCssGradient,\n\tis: isCssGradient\n};\n\n//#endregion\n//#region src/utils/is-equal.ts\n/**\n* Performs a deep comparison between two values to determine if they are equivalent.\n* Handles primitives, objects, arrays, Dates, and NaNs.\n*/\nfunction isEqual(a, b) {\n\tif (a === b) return true;\n\tif (typeof a === \"number\" && typeof b === \"number\" && Number.isNaN(a) && Number.isNaN(b)) return true;\n\tif (a && b && typeof a === \"object\" && typeof b === \"object\") {\n\t\tif (a.constructor !== b.constructor) return false;\n\t\tif (Array.isArray(a)) {\n\t\t\tif (a.length !== b.length) return false;\n\t\t\tfor (let i = 0; i < a.length; i++) if (!isEqual(a[i], b[i])) return false;\n\t\t\treturn true;\n\t\t}\n\t\tif (a instanceof Date) return a.getTime() === b.getTime();\n\t\tif (a instanceof RegExp) return a.toString() === b.toString();\n\t\tconst keys = Object.keys(a);\n\t\tif (keys.length !== Object.keys(b).length) return false;\n\t\tfor (const key of keys) {\n\t\t\tif (!Object.hasOwn(b, key)) return false;\n\t\t\tif (!isEqual(a[key], b[key])) return false;\n\t\t}\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n//#endregion\n//#region src/utils/virtual-media.ts\n/**\n* Gets a stable object for hashing/fingerprinting by sorting keys and skipping volatile fields.\n*/\nfunction getStableData(data) {\n\tif (typeof data !== \"object\" || data === null) return data;\n\tif (Array.isArray(data)) return data.map(getStableData);\n\tconst result = {};\n\tconst keys = Object.keys(data).sort();\n\tfor (const key of keys) {\n\t\tconst val = data[key];\n\t\tif (key === \"createdAt\" || key === \"updatedAt\" || key === \"dataUrl\" || key === \"filePath\") continue;\n\t\tif (typeof val === \"string\" && val.startsWith(\"blob:\")) continue;\n\t\tif (key === \"entity\" && val && typeof val === \"object\" && val.id) {\n\t\t\tresult.entity = { id: val.id };\n\t\t\tcontinue;\n\t\t}\n\t\tresult[key] = getStableData(val);\n\t}\n\treturn result;\n}\n/**\n* Generates a fingerprint for the given data.\n*/\nfunction getFingerprint(data) {\n\tconst stableData = getStableData(data);\n\tconst str = JSON.stringify(stableData);\n\tif (str.length === 0) return \"0\";\n\tconst getHash = (seed) => {\n\t\tlet h1 = 3735928559 ^ seed;\n\t\tlet h2 = 1103547991 ^ seed;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tconst ch = str.charCodeAt(i);\n\t\t\th1 = Math.imul(h1 ^ ch, 2654435761);\n\t\t\th2 = Math.imul(h2 ^ ch, 1597334677);\n\t\t}\n\t\th1 = Math.imul(h1 ^ h1 >>> 16, 2246822519);\n\t\th1 = Math.imul(h1 ^ h1 >>> 13, 3266489917);\n\t\th1 = h1 ^ h1 >>> 16;\n\t\th2 = Math.imul(h2 ^ h2 >>> 16, 2246822519);\n\t\th2 = Math.imul(h2 ^ h2 >>> 13, 3266489917);\n\t\th2 = h2 ^ h2 >>> 16;\n\t\treturn (h1 >>> 0).toString(36).padStart(7, \"0\") + (h2 >>> 0).toString(36).padStart(7, \"0\");\n\t};\n\treturn getHash(0) + getHash(1);\n}\n/**\n* Generates a version-aware fingerprint for render caching.\n* Includes app version so cached renders are invalidated on version bumps.\n*/\nfunction getRenderFingerprint(data, appVersion, extra) {\n\treturn getFingerprint({\n\t\t__v: appVersion,\n\t\tdata,\n\t\t...extra\n\t});\n}\n/**\n* Checks if data is VirtualMediaData.\n*/\nfunction isVirtualMediaData(data) {\n\treturn typeof data === \"object\" && data !== null && \"metadata\" in data && \"operation\" in data && \"children\" in data;\n}\n/**\n* Checks if the virtual media is just a raw source without any significant operations\n* that would require a rendering step (like transformations, trimming, or effects).\n*/\nfunction hasOnlySingleSource(data) {\n\tif (!isVirtualMediaData(data)) return false;\n\tif (data.operation.op === \"source\") {\n\t\tif (data.children && data.children.length > 0) return false;\n\t\tconst op = data.operation;\n\t\treturn !(op.volume !== void 0 && op.volume !== 1 || op.opacity !== void 0 && op.opacity !== 1 || op.startFrame !== void 0 && op.startFrame !== 0 || op.timeline && (op.timeline.startFrame !== void 0 && op.timeline.startFrame !== 0 || op.timeline.segments && op.timeline.segments.length > 0));\n\t}\n\tif (data.operation.op === \"compose\") return false;\n\tif (data.operation.op === \"layer\" && data.children.length === 1) {\n\t\tconst op = data.operation;\n\t\tif (!(op.x !== void 0 && op.x !== 0 || op.y !== void 0 && op.y !== 0 || op.rotation !== void 0 && op.rotation !== 0 || op.scale !== void 0 && op.scale !== 1 || op.opacity !== void 0 && op.opacity !== 1 || op.volume !== void 0 && op.volume !== 1 || op.zIndex !== void 0 || op.blendMode !== void 0 || op.filters !== void 0 || op.transitionIn !== void 0 || op.transitionOut !== void 0 || op.animations && op.animations.length > 0 || op.trimStart !== void 0 || op.trimEnd !== void 0 || op.speed !== void 0 || op.backgroundColor !== void 0 || op.borderColor !== void 0 || op.borderWidth !== void 0 || op.strokeRadius !== void 0)) return hasOnlySingleSource(data.children[0]);\n\t}\n\treturn false;\n}\n/**\n* Finds the source asset in a virtual media tree.\n*/\nfunction findSourceAsset(vm) {\n\tif (vm.operation.op === \"source\") return vm.operation.source;\n\tif (vm.children && vm.children.length > 0) return findSourceAsset(vm.children[0]);\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/result-cache.ts\n/**\n* Checks if a cached node result can be reused based on source fingerprint.\n* Returns the valid cached result, or null if the cache is stale.\n*/\nfunction checkNodeResultCache(currentResult, input) {\n\tif (!currentResult?.sourceFingerprint) return null;\n\tconst inputFingerprint = getFingerprint(input);\n\tif (currentResult.sourceFingerprint !== inputFingerprint) return null;\n\treturn currentResult;\n}\n/**\n* Creates a fresh result with a source fingerprint stamp.\n*/\nfunction stampResult(result, input) {\n\treturn {\n\t\t...result,\n\t\tsourceFingerprint: getFingerprint(input)\n\t};\n}\n\n//#endregion\n//#region src/utils/svg.ts\n/**\n* Attempts to parse the width and height of an SVG from its buffer.\n* Falls back to viewBox ratios if explicitly defined sizes are missing.\n*/\nfunction extractSvgDimensions(buffer) {\n\ttry {\n\t\tconst match = buffer.toString(\"utf-8\").match(/<svg[^>]*>/i);\n\t\tif (!match) return null;\n\t\tconst svgTag = match[0];\n\t\tconst getAttr = (name) => {\n\t\t\tconst attrMatch = svgTag.match(new RegExp(`${name}=[\"']([^\"']+)[\"']`, \"i\"));\n\t\t\tif (!attrMatch) return null;\n\t\t\tconst val = parseFloat(attrMatch[1].replace(/[a-z%]/gi, \"\"));\n\t\t\treturn isNaN(val) ? null : val;\n\t\t};\n\t\tlet w = getAttr(\"width\");\n\t\tlet h = getAttr(\"height\");\n\t\tconst viewBoxMatch = svgTag.match(/viewBox=[\"']([^\"']+)[\"']/i);\n\t\tif (viewBoxMatch) {\n\t\t\tconst parts = viewBoxMatch[1].split(/[\\s,]+/).map(parseFloat);\n\t\t\tif (parts.length >= 4 && !isNaN(parts[2]) && !isNaN(parts[3])) {\n\t\t\t\tconst vbW = parts[2];\n\t\t\t\tconst vbH = parts[3];\n\t\t\t\tif (w == null && h == null) {\n\t\t\t\t\tw = vbW;\n\t\t\t\t\th = vbH;\n\t\t\t\t} else if (w != null && h == null) h = w * (vbH / vbW);\n\t\t\t\telse if (h != null && w == null) w = h * (vbW / vbH);\n\t\t\t}\n\t\t}\n\t\tif (w != null && h != null && w > 0 && h > 0) return {\n\t\t\tw,\n\t\t\th\n\t\t};\n\t\treturn null;\n\t} catch (error) {\n\t\tconsole.error(\"Error parsing SVG dimensions\", error);\n\t\treturn null;\n\t}\n}\n\n//#endregion\nexport { AnimationTypeSchema, AnyOutputUnionSchema, AudioExtractorSignalDataSchema, BaseMediaOperationPropsSchema, BaseVideoLayerPropsSchema, CAPTION_LAYER_DEFAULTS, COMPOSITE_OPERATIONS, COMPOSITOR_DEFAULTS, Color, ConfigHandleSchema, ConfigSchemaRegistry, DATA_TYPE_EXTENSIONS, DEFAULT_DURATION_MS, DEFAULT_FPS, DEFAULT_MEDIA_DIMENSION, DataType, DataTypeVal, DataTypes, Effect, ExportResultSchema, ExtendedLayerSchema, FileAssetSchema, FileDataSchema, GeneratorSignalDataSchema, GlobalCompositeOperation, Gradient, HandleTypeVal, JsonValueSchema, MAX_GRADIENT_STOPS, MIME_TYPES, MediaMetadataSchema, MediaOperationSchema, MediaSourceSchema, ModerationError, ModerationUnrefundableError, MultiOutputGenericSchema, NodeMetadataSchema, NodeResultSchema, NodeVisualConfigSchema, OutputItemSchema, ProgrammaticSignal, Signal, SignalChannelMetaSchema, SignalDataSchema, SignalGateDataSchema, SignalMathDataSchema, SignalStatsSchema, SingleOutputGenericSchema, SourceOperationSchema, TEXT_LAYER_DEFAULTS, TextOperationSchema, TimelineSegmentSchema, TimelineTransformSchema, TransitionSchema, TransitionTypeSchema, VideoAnimationSchema, VideoLayerTypeSchema, VideoSpatialPropsSchema, VideoStylePropsSchema, VideoTextPropsSchema, VideoTimingPropsSchema, VirtualMediaDataSchema, appendOperation, checkNodeResultCache, computeVideoCropRenderProps, computed, cosineSignal, createOutputItemSchema, createVirtualMedia, dataTypeColors, deserializeSignalData, extractSvgDimensions, findSourceAsset, formatHex, frameArraySignal, frameSignal, generateId, getActiveMediaMetadata, getFileDataMetadata, getFingerprint, getLeafMediaType, getMediaType, getRenderFingerprint, gradientStopsToOklab, hasOnlySingleSource, isCssGradient, isEqual, isSignal, isVirtualMediaData, limitGradientStops, mixColors, normalizeColorStops, oklabToRgb, parseCssColor, parseCssGradient, programmaticSignal, progressSignal, registerSignalDependency, reportRenderDiagnostic, resolveBoolean, resolveMediaMimeType, resolveNumber, resolveParam, resolveString, rgbToOklab, sampleColorStops, serializeSignalData, signal, signalBuilder, sineSignal, stampResult, takeRenderDiagnostics, timeSignal, updateClockSignals };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BHqdtJbN.d.mts","names":["pino","VideoColorPrimaries","VideoFrame","VideoMatrixCoefficients","VideoTransferCharacteristics","RenderDiagnostic","VirtualMediaData","VideoSampleSource","preloadFonts","GPUDevice","Promise","StagingSlotStatus","VideoColorSpaceConfig","DmaStagingRingOptions","GPUTextureFormat","StagingSlotInfo","DmaStagingRing","GPUCommandEncoder","GPUTexture","Uint8Array","findNodesDir","discoverAndRegisterNodeRenderers","VideoQaOptions","QaSegment","QaIssue","VideoQaStats","AudioQaStats","VideoQaReport","FrameInspector","analyzeAudio","Float32Array","integratedLoudness","buildQaReport","formatQaReport","WorkerInput","WorkerMessage","Array","RenderSemaphore","renderSemaphore","HeadlessWebGPURenderer","Buffer","AbortSignal","RenderProgress","HeadlessMediaRenderer","resetRenderCaches","rendererLogger","Logger","NODE_KINDS","NodeKind","NodeRendererExports","NodeManifest","NodeManifestError","Error","parseNodeManifest","loadNodeManifests","ZeroCopyWebCodecsPipelineOptions","WebCodecsPipelineStats","ZeroCopyWebCodecsPipeline"],"sources":["../../renderer/dist/index.d.mts","../src/renderer/framegrid.ts"],"sourcesContent":["import pino from \"pino\";\nimport { VideoColorPrimaries, VideoFrame, VideoMatrixCoefficients, VideoTransferCharacteristics } from \"@napi-rs/webcodecs\";\nimport { RenderDiagnostic, VirtualMediaData } from \"@framefields/core\";\nimport { VideoSampleSource } from \"mediabunny\";\n\n//#region src/asset-preloader.d.ts\n\n/**\n * Preloads only the fonts (and emoji) a VirtualMediaData tree's text uses, so\n * typography renders correctly on Node.js without loading its media. Shared\n * with the browser preview; emoji need a font set with\n * `FontManager.registerEmojiFont()`.\n */\ndeclare function preloadFonts(media: VirtualMediaData, device?: GPUDevice | null): Promise<void>;\n//#endregion\n//#region src/dma-staging-ring.d.ts\ntype StagingSlotStatus = \"idle\" | \"rendering\" | \"mapping\" | \"mapped\";\ninterface VideoColorSpaceConfig {\n readonly primaries?: VideoColorPrimaries;\n readonly transfer?: VideoTransferCharacteristics;\n readonly matrix?: VideoMatrixCoefficients;\n readonly fullRange?: boolean;\n}\ninterface DmaStagingRingOptions {\n readonly width: number;\n readonly height: number;\n readonly capacity?: number;\n readonly format?: GPUTextureFormat;\n}\ninterface StagingSlotInfo {\n readonly index: number;\n readonly status: StagingSlotStatus;\n readonly inFlightFrame: number | null;\n}\n/**\n * Pipelined Asynchronous DMA Staging Ring for WebGPU.\n *\n * Implements double-buffered (or N-buffered) GPU staging buffers to overlap\n * GPU render passes with asynchronous DMA host transfers and WebCodecs hardware encoding.\n * Eliminates GPU stalls by allowing Frame i+1 to execute on the GPU while Frame i\n * is asynchronously mapped and consumed by the hardware video encoder.\n */\ndeclare class DmaStagingRing {\n readonly width: number;\n readonly height: number;\n readonly capacity: number;\n readonly bytesPerRow: number;\n readonly unpaddedBytesPerRow: number;\n readonly bufferSize: number;\n readonly format: GPUTextureFormat;\n readonly device: GPUDevice;\n private readonly slots;\n private isDestroyed;\n constructor(device: GPUDevice, options: DmaStagingRingOptions);\n /**\n * Prepares the staging buffer slot for writing by ensuring any prior mapping\n * from a previous cycle has been completed and unmapped.\n */\n prepareSlot(frameIndex: number): Promise<void>;\n /**\n * Records a GPU-to-buffer DMA copy command into the provided command encoder.\n */\n stageTexture(encoder: GPUCommandEncoder, texture: GPUTexture, frameIndex: number): void;\n /**\n * Initiates asynchronous DMA mapping on the slot for the specified frame.\n * Must be called immediately after submitting the command encoder to the device queue.\n */\n scheduleMap(frameIndex: number): Promise<void>;\n /**\n * Awaits asynchronous mapping and extracts pixels into a tightly packed Uint8Array.\n * The slot remains in the \"mapped\" state until releaseFrame() is called.\n */\n readFramePixels(frameIndex: number): Promise<Uint8Array>;\n /**\n * Awaits asynchronous mapping, extracts pixels, and immediately unmaps the staging buffer,\n * returning the slot to \"idle\" state so it can be reused immediately.\n */\n readAndReleaseFrame(frameIndex: number): Promise<Uint8Array>;\n /**\n * Directly reads the mapped staging buffer into a WebCodecs VideoFrame,\n * bypassing redundant intermediate JS allocations when row pitches align,\n * and immediately unmaps the buffer.\n */\n readFrameToVideoFrame(frameIndex: number, timestampUs: number, colorSpace?: VideoColorSpaceConfig, /** Sees the tightly packed RGBA pixels while they are mapped; must not keep them. */\n inspect?: (rgba: Uint8Array) => void): Promise<VideoFrame>;\n /**\n * Unmaps the staging buffer for the specified frame and marks the slot idle.\n */\n releaseFrame(frameIndex: number): void;\n /**\n * Returns current status info for each slot in the ring.\n */\n getSlotInfos(): readonly StagingSlotInfo[];\n /**\n * Destroys all staging buffers and releases resources.\n */\n destroy(): void;\n private checkDestroyed;\n}\n//#endregion\n//#region src/dynamic-node-discovery.d.ts\n/** Locates the workspace `nodes/` directory by climbing up from this file. */\ndeclare function findNodesDir(startDir?: string): string | null;\n/**\n * Registers the built-in node renderers, then any extra nodes found in the\n * directory named by `FRAMEFIELDS_NODES_DIR` (local node development). A node in\n * that directory overrides the built-in renderer for the same op.\n */\ndeclare function discoverAndRegisterNodeRenderers(): Promise<void>;\n//#endregion\n//#region src/video-qa.d.ts\n/**\n * Quality checks run on a video while it renders: frames are measured as\n * they are read back for the encoder and audio as it is mixed, so the report\n * describes exactly what was encoded without decoding the file again.\n */\ninterface VideoQaOptions {\n /** Luma (0-1) at or below which a pixel counts as black. Default 0.1. */\n readonly blackPixelThreshold?: number;\n /** Share of black pixels that makes a frame black. Default 0.98. */\n readonly blackFrameRatio?: number;\n /** Shortest run of black frames reported. Default 0.5 s. */\n readonly minBlackSec?: number;\n /** Shortest run of unchanging frames reported. Default 2 s. */\n readonly minFrozenSec?: number;\n /** Level (dBFS, 100 ms windows) below which audio counts as silent. Default -60. */\n readonly silenceDbfs?: number;\n /** Shortest silent stretch reported. Default 2 s. */\n readonly minSilenceSec?: number;\n /** Integrated loudness to hit, e.g. -14 for most streaming platforms. Unchecked when unset. */\n readonly targetLufs?: number;\n /** Allowed distance from `targetLufs`, in LU. Default 1. */\n readonly lufsTolerance?: number;\n}\ninterface QaSegment {\n readonly startSec: number;\n readonly endSec: number;\n}\ninterface QaIssue {\n readonly severity: \"error\" | \"warning\" | \"info\";\n /** Stable machine-readable kind, e.g. \"black_frames\", \"audio_clipping\" */\n readonly code: string;\n readonly message: string;\n readonly startSec?: number;\n readonly endSec?: number;\n readonly layerId?: string;\n}\ninterface VideoQaStats {\n readonly expectedFrames: number;\n readonly encodedFrames: number;\n readonly fps: number;\n readonly width: number;\n readonly height: number;\n /** Average luma over the whole video, 0-1 */\n readonly meanLuma: number;\n readonly blackSegments: readonly QaSegment[];\n readonly frozenSegments: readonly QaSegment[];\n}\ninterface AudioQaStats {\n readonly sampleRate: number;\n readonly channels: number;\n readonly durationSec: number;\n /** Highest sample, dBFS (sample peak, not true peak) */\n readonly peakDbfs: number;\n /** Mean level over the whole track, dBFS */\n readonly rmsDbfs: number;\n /** ITU-R BS.1770 integrated loudness; null when the track is silent */\n readonly integratedLufs: number | null;\n /** Samples at or beyond full scale */\n readonly clippedSamples: number;\n readonly silentSegments: readonly QaSegment[];\n}\ninterface VideoQaReport {\n /** No errors or warnings (info issues do not fail a render) */\n readonly passed: boolean;\n readonly video?: VideoQaStats;\n readonly audio?: AudioQaStats;\n readonly issues: readonly QaIssue[];\n}\n/** Measures frames handed to it in order, as RGBA bytes. */\ndeclare class FrameInspector {\n private readonly blackLuma;\n private readonly blackRatio;\n private readonly black;\n private readonly sameAsPrevious;\n private lumaSum;\n private previous;\n constructor(options?: VideoQaOptions);\n get frameCount(): number;\n inspect(rgba: Uint8Array, width: number, height: number): void;\n stats(expectedFrames: number, encodedFrames: number, fps: number, width: number, height: number, options?: VideoQaOptions): VideoQaStats;\n}\n/** Measures a mixed audio track (one Float32Array per channel). */\ndeclare function analyzeAudio(channels: readonly Float32Array[], sampleRate: number, options?: VideoQaOptions): AudioQaStats;\n/**\n * ITU-R BS.1770-4 integrated loudness (LUFS): K-weighted mean square in\n * 400 ms blocks with 75% overlap, gated at -70 LUFS and then at 10 LU below\n * the mean of what passed. Channels weigh 1 (stereo and mono layouts).\n */\ndeclare function integratedLoudness(channels: readonly Float32Array[], sampleRate: number): number | null;\n/** Turn measurements and document diagnostics into a report with issues. */\ndeclare function buildQaReport(parts: {\n video?: VideoQaStats;\n audio?: AudioQaStats;\n diagnostics?: readonly RenderDiagnostic[];\n options?: VideoQaOptions;\n}): VideoQaReport;\n/** A short human- and agent-readable summary of a report. */\ndeclare function formatQaReport(report: VideoQaReport): string;\n//#endregion\n//#region src/headless-webgpu-renderer.d.ts\ninterface WorkerInput {\n virtualMedia: VirtualMediaData;\n width: number;\n height: number;\n fps: number;\n startFrame: number;\n endFrame: number;\n renderId: string;\n outputFormat: \"png\" | \"pixels\";\n workerIndex: number;\n}\ntype WorkerMessage = {\n type: \"frame\";\n renderId: string;\n frameIndex: number;\n pixels: Uint8Array;\n} | {\n type: \"png\";\n renderId: string;\n data: Uint8Array;\n} | {\n type: \"done\";\n renderId: string;\n} | {\n type: \"lut\";\n renderId: string;\n raw: {\n points: Array<[number, number, number]>;\n size: number;\n type: \"1D\" | \"3D\";\n };\n} | {\n type: \"error\";\n renderId?: string;\n error: string;\n};\ndeclare class RenderSemaphore {\n private _running;\n private readonly _max;\n private readonly _queue;\n constructor(max: number);\n acquire(timeoutMs?: number): Promise<void>;\n release(): void;\n get stats(): {\n active: number;\n queued: number;\n max: number;\n };\n}\ndeclare const renderSemaphore: RenderSemaphore;\ndeclare class HeadlessWebGPURenderer {\n private static isInitialized;\n private static initPromise;\n private static initFailureCount;\n private static readonly MAX_INIT_FAILURES;\n private static nextRetryAt;\n static initialize(): Promise<void>;\n renderImage(virtualMedia: VirtualMediaData, frame?: number, fps?: number, options?: {\n renderId?: string;\n /** \"rgba\" skips PNG encoding and returns width*height*4 raw pixels. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Renders a single frame to a PNG buffer at a specified timestamp in milliseconds or frame index.\n */\n renderFrame(source: VirtualMediaData | {\n toVirtualMedia(): VirtualMediaData;\n }, options?: {\n atMs?: number;\n frame?: number;\n fps?: number;\n /** Reuse compiled state across calls; see `renderImage`. */\n renderId?: string;\n /** \"rgba\" returns raw width*height*4 pixels instead of a PNG. */\n format?: \"png\" | \"rgba\";\n }): Promise<Buffer>;\n /**\n * Mixes the composition's full audio timeline (clips, effects, synthesized\n * tracks) to stereo PCM, exactly as `renderVideo` muxes it.\n */\n renderAudio(virtualMedia: VirtualMediaData, options?: {\n fps?: number;\n sampleRate?: number;\n }): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n }>;\n renderLut(virtualMedia: VirtualMediaData, frame?: number, fps?: number): Promise<Buffer>;\n private resolveMediaDuration;\n renderVideo(virtualMedia: VirtualMediaData, options?: {\n codec?: string;\n audioCodec?: string;\n quality?: string;\n concurrency?: number;\n /**\n * Depth of the DMA staging ring (default 2, clamped 2–8). A deeper\n * ring overlaps more encoder latency at the cost of VRAM\n * (~8.3MB/slot at 1080p RGBA). Also settable via\n * `FRAMEFIELDS_RING_CAPACITY`.\n */\n ringCapacity?: number;\n /**\n * Measure the output while it renders (black and frozen frames,\n * dropped frames, loudness, clipping, silence, document warnings)\n * and return the findings as `qa`. `true` uses default thresholds.\n */\n qa?: boolean | VideoQaOptions;\n /**\n * Aborts the render between frames; the promise rejects with\n * `signal.reason` and the partial output is deleted.\n */\n signal?: AbortSignal;\n /** Called after each frame is queued for encoding, then once for audio. */\n onProgress?: (progress: RenderProgress) => void;\n }): Promise<{\n filePath: string;\n cleanup: () => Promise<void>;\n qa?: VideoQaReport;\n }>;\n}\n/** Progress reported by `renderVideo({ onProgress })`. */\ninterface RenderProgress {\n /** \"render\" while frames are drawn and encoded, \"audio\" while mixing. */\n phase: \"render\" | \"audio\";\n /** Frames finished so far (1-based). */\n frame: number;\n totalFrames: number;\n}\ndeclare const HeadlessMediaRenderer: typeof HeadlessWebGPURenderer;\ntype HeadlessMediaRenderer = HeadlessWebGPURenderer;\n//#endregion\n//#region src/job-reset.d.ts\n/**\n * Drops every cache keyed by a file path or URL: media inputs and decoders,\n * textures, LUTs, fonts and downloaded font files. A long-lived worker calls this between jobs,\n * because the next checkout may hold different bytes at the same path. The\n * GPU device and compiled pipelines stay warm.\n */\ndeclare function resetRenderCaches(): void;\n//#endregion\n//#region src/logger.d.ts\ndeclare const rendererLogger: pino.Logger<never, boolean>;\n//#endregion\n//#region src/node-manifest.d.ts\n/**\n * The `framefields` block of a node package's `package.json`.\n *\n * This is the single declaration of a node's op: renderer discovery, the\n * effects generator (`scripts/generate-effects.ts`) and the skill catalog all\n * read it from here. There is deliberately no fallback that derives an op from\n * the package name. See `spec/sync-node.md` §5.1.\n */\ndeclare const NODE_KINDS: readonly [\"effect\", \"audio\", \"source\", \"signal\", \"utility\"];\ntype NodeKind = (typeof NODE_KINDS)[number];\ninterface NodeRendererExports {\n development?: string;\n import?: string;\n default?: string;\n}\ninterface NodeManifest {\n /** Directory name under `nodes/`, e.g. `node-apply-lut`. */\n dir: string;\n /** Absolute path of the node package. */\n path: string;\n /** npm package name, e.g. `@framefields/node-lut`. */\n packageName: string;\n /** Canonical op literal used in the operation AST and the renderer registry. */\n type: string;\n kind: NodeKind;\n /** Legacy ops that resolve to the same renderer. */\n aliases: readonly string[];\n /** Named zod schema export of `src/shared/config.ts`. */\n schema?: string;\n /** Authoring class name. Defaults to `type`. */\n className?: string;\n /** Key on `Effect.*`. Defaults to `className` with a lower-cased first letter. */\n factory?: string;\n /** A hand-written subclass exists under `effects/custom/`. */\n custom: boolean;\n /** `false` when the package opts out of discovery. */\n enabled: boolean;\n rendererExports?: NodeRendererExports;\n}\ndeclare class NodeManifestError extends Error {\n readonly problems: readonly string[];\n constructor(problems: readonly string[]);\n}\n/**\n * Validates one parsed `package.json`. Returns the manifest, or the list of\n * problems that make it unusable. Never throws.\n */\ndeclare function parseNodeManifest(pkg: unknown, dir: string, nodePath?: string): {\n manifest?: NodeManifest;\n problems: string[];\n};\n/**\n * Reads every `nodes/node-*` package and returns its manifest, sorted by\n * directory name. Throws a single {@link NodeManifestError} listing every\n * problem: a missing or malformed block, or an op/alias claimed twice.\n */\ndeclare function loadNodeManifests(nodesDir: string): NodeManifest[];\n//#endregion\n//#region src/zero-copy-webcodecs-pipeline.d.ts\ninterface ZeroCopyWebCodecsPipelineOptions {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly videoSource: VideoSampleSource;\n readonly ringCapacity?: number;\n readonly colorSpace?: VideoColorSpaceConfig;\n readonly directCanvasSource?: unknown;\n /**\n * Called with each frame's RGBA pixels, in frame order, just before it is\n * encoded (staging-ring path only). The buffer is reused: read, don't keep.\n */\n readonly onFrame?: (rgba: Uint8Array, frameIndex: number) => void;\n}\ninterface WebCodecsPipelineStats {\n readonly totalFramesEnqueued: number;\n readonly totalFramesEncoded: number;\n readonly averageGpuSubmitTimeMs: number;\n readonly averageEncodeTimeMs: number;\n readonly averageCycleTimeMs: number;\n readonly maxCycleTimeMs: number;\n readonly minCycleTimeMs: number;\n readonly throughputFps: number;\n readonly ringCapacity: number;\n readonly isDirectZeroCopy: boolean;\n}\n/**\n * High-performance hardware video encoding pipeline integrating WebGPU textures with WebCodecs.\n *\n * Provides:\n * 1. Direct hardware acceleration when running with WebCodecs / OffscreenCanvas.\n * 2. Pipelined asynchronous double-buffered DMA staging ring for headless Node.js (Dawn native),\n * allowing GPU Frame i+1 rendering to overlap concurrently with Frame i hardware encoding.\n */\ndeclare class ZeroCopyWebCodecsPipeline {\n readonly width: number;\n readonly height: number;\n readonly fps: number;\n readonly ringCapacity: number;\n private readonly device;\n private readonly videoSource;\n private readonly stagingRing;\n private readonly colorSpace?;\n private readonly directCanvasSource?;\n private readonly onFrame?;\n private readonly inFlightFrames;\n private readonly cycleStartTimes;\n private totalFramesEnqueued;\n private totalFramesEncoded;\n private totalGpuSubmitTimeMs;\n private totalEncodeTimeMs;\n private totalCycleTimeMs;\n private maxCycleTimeMs;\n private minCycleTimeMs;\n private pipelineStartTime;\n constructor(device: GPUDevice, options: ZeroCopyWebCodecsPipelineOptions);\n /**\n * Returns true if direct zero-copy from an OffscreenCanvas or texture is active.\n */\n canDirectZeroCopy(): boolean;\n /**\n * Enqueues a rendered GPU texture frame into the pipeline.\n *\n * Uses double-buffered DMA staging: if the staging ring has reached capacity,\n * the oldest in-flight frame is asynchronously consumed and added to the video encoder\n * before staging the new frame, guaranteeing constant bounded VRAM usage and zero GPU stalls.\n */\n enqueueFrame(frameIndex: number, targetTexture: GPUTexture, encoder: GPUCommandEncoder): Promise<void>;\n /**\n * Drains all remaining in-flight frames in the pipeline, ensuring every enqueued\n * frame has been encoded and added to the video sample source.\n */\n drain(): Promise<void>;\n /**\n * Returns runtime throughput, latency, and pipeline statistics.\n */\n getStats(): WebCodecsPipelineStats;\n /**\n * Destroys the pipeline and releases all staging buffers.\n */\n destroy(): void;\n private consumeAndEncode;\n}\n//#endregion\nexport { AudioQaStats, DmaStagingRing, DmaStagingRingOptions, FrameInspector, HeadlessMediaRenderer, HeadlessWebGPURenderer, NODE_KINDS, NodeKind, NodeManifest, NodeManifestError, NodeRendererExports, QaIssue, QaSegment, RenderProgress, StagingSlotInfo, StagingSlotStatus, VideoColorSpaceConfig, VideoQaOptions, VideoQaReport, VideoQaStats, WebCodecsPipelineStats, WorkerInput, WorkerMessage, ZeroCopyWebCodecsPipeline, ZeroCopyWebCodecsPipelineOptions, analyzeAudio, buildQaReport, discoverAndRegisterNodeRenderers, findNodesDir, formatQaReport, integratedLoudness, loadNodeManifests, parseNodeManifest, preloadFonts, renderSemaphore, rendererLogger, resetRenderCaches };\n//# sourceMappingURL=index.d.mts.map"],"mappings":";;;;;;;;;;;;;;UAoHUsB,cAAAA;;;;;;;;;;;;;;;;;;UAkBAC,SAAAA;;;;UAIAC,OAAAA;;;;;;;;;UASAC,YAAAA;;;;;;;;mCAQyBF;oCACCA;;UAE1BG,YAAAA;;;;;;;;;;;;oCAY0BH;;UAE1BI,aAAAA;;;mBAGSF;mBACAC;4BACSF;;;;;iBA+BXS,cAAAA,SAAuBN;;;;cAuC1BU,eAAAA;;;;;+BAKiB3B;;;;;;;;cAQjB4B,iBAAiBD;cACjBE,sBAAAA;;;;;;uBAMS7B;4BACKJ;;;;MAItBI,QAAQ8B;;;;sBAIQlC;sBACAA;;;;;;;;;MAShBI,QAAQ8B;;;;;4BAKclC;;;MAGtBI;cACQoB;;;0BAGYxB,iDAAiDI,QAAQ8B;;4BAEvDlC;;;;;;;;;;;;;;;;;mBAiBTgB;;;;;aAKNmB;;4BAEeC;MACtBhC;;mBAEaA;SACViB;;;;UAICe,cAAAA;;;;;;;cAOIC,8BAA8BJ;KACvCI,qBAAAA,GAAwBJ;;;;;;;;;iBASZK,iBAAAA,CAAAA;;;;;UCxVA,gBAAA;;;;AD+GPtB,UC1GO,gBAAA,CD0GO;EAkBdC;AAAS;AAIF;EAoBPG,UAAAA,CAAAA,EAAAA,MAAY;EAcZC;;;EAKkBH,QAAAA,CAAAA,EAAAA,MAAAA;EAAO;AA6BlB;AAgCA;EAsBHc,UAAAA,CAAAA,EAAAA,MAAgC;EAChCC;;;EAWAC,MAAAA,CAAAA,EAAAA,MAAAA,EAAAA;EAAR9B;;;EAcQ8B,OAAAA,CAAAA,EAAAA,MAAAA;EAAR9B;;;EAQAA,KAAAA,CAAAA,EAAAA,MAAAA;EAIoBJ;;;EAEEA,MAAAA,CAAAA,EAAAA,MAAAA;EAiBTgB;;;EAUAZ,OAAAA,CAAAA,EAAAA,MAAAA,EAAAA;EACViB;;;EAICe,GAAAA,CAAAA,EAAAA,MAAAA;EAOIC;AAAoD;AACf;;;;AC/UnD;AAKA;EA0HgB,SAAA,CAAA,EAAA,MAAA;EAsGA;AAiFhB;;EAMa,UAAA,CAAA,EAAA,MAAA;EACA;;;EAWS,GAAA,CAAA,EAAA,MAAA;EACb;;;EAEN,OAAA,CAAA,EAAA,MAAA;EAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAlNE;;;;;iBAMI,mBAAA,UACN;WAGI;;;;;;iBAkGE,iBAAA,mDAGN;;;;;;;;;;;KA8EE,mBAAA;oBACO;;;;;eAKN;MACR,QAAQ;;;;;;;;;;iBAWS,eAAA,SACb,+BACC,mBACP,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BONyHjZX.d.mts","names":["a","isStaticVisualMedia","c","RenderParams","i","calculateLayerTransform","l","computeRenderParams","n","framesToSeconds","o","resolveLayerDuration","r","secondsToFrames","s","CropRegion","t","formatTimecode","VirtualMediaData","GPUCommandEncoder","GPUTexture","GPUTextureView","NodeRenderProps","RenderContextValue","drawCompositionTree","Promise","CompositionStateStore","compositionStateStore","SceneProps","AudioClip","decodeAudioSource","Float32Array","mixAudioTracks","GPUDevice","NormalizationContext","normalizeTimeline","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default","_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../compositions/dist/index.d.mts","../../../nodes/node-audio-compressor/dist/renderer.d.mts","../../../nodes/node-audio-delay/dist/renderer.d.mts","../../../nodes/node-audio-fade/dist/renderer.d.mts","../../../nodes/node-audio-noise-gate/dist/renderer.d.mts","../../../nodes/node-audio-parametric-eq/dist/renderer.d.mts","../../../nodes/node-audio-reverb/dist/renderer.d.mts","../../../nodes/node-stereo-panning/dist/renderer.d.mts","../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["import { a as isStaticVisualMedia, c as RenderParams, i as calculateLayerTransform, l as computeRenderParams, n as framesToSeconds, o as resolveLayerDuration, r as secondsToFrames, s as CropRegion, t as formatTimecode } from \"./timing-CluwdKGr.mjs\";\nimport { VirtualMediaData } from \"@framefields/core\";\nimport { GPUCommandEncoder, GPUTexture, GPUTextureView, NodeRenderProps } from \"@framefields/node-sdk\";\nimport { RenderContextValue } from \"@framefields/webgpu-renderers\";\n\n//#region src/compositions/canvas-composition.d.ts\ndeclare function drawCompositionTree(ctx: RenderContextValue, encoder: GPUCommandEncoder, targetView: GPUTextureView, targetTexture: GPUTexture, targetWidth: number, targetHeight: number, virtualMedia: VirtualMediaData, props: NodeRenderProps, inheritedSeekOffset?: number, inheritedClockOffset?: number): Promise<void>;\n//#endregion\n//#region src/compositions/composition-state.d.ts\ndeclare class CompositionStateStore {\n private states;\n private listeners;\n setState(key: string, frame: number, fps: number, isPlaying?: boolean): void;\n getState(key: string): {\n frame: number;\n fps: number;\n isPlaying: boolean;\n };\n subscribe(key: string, listener: () => void): () => void;\n clearKey(key: string): void;\n private notify;\n}\ndeclare const compositionStateStore: CompositionStateStore;\ninterface SceneProps {\n viewportWidth: number;\n viewportHeight: number;\n containerWidth?: number;\n containerHeight?: number;\n virtualMedia?: VirtualMediaData;\n backgroundColor?: string;\n type?: \"Video\" | \"Audio\" | \"Image\";\n volume?: number;\n renderId?: string;\n frame?: number;\n fps?: number;\n [key: string]: unknown;\n}\n//#endregion\n//#region src/utils/audio-extractor.d.ts\ninterface AudioClip {\n sourceUrl: string;\n destStartFrame: number;\n trimStartSec: number;\n durationFrames: number;\n speed: number;\n volume: number;\n}\n/**\n * Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n */\ndeclare function decodeAudioSource(url: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n} | null>;\n/**\n * Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n * into a single unified stereo PCM stream (Float32Array channels).\n */\ndeclare function mixAudioTracks(virtualMedia: VirtualMediaData, fps: number, targetSampleRate?: number, device?: GPUDevice, renderId?: string): Promise<{\n channels: Float32Array[];\n sampleRate: number;\n}>;\n//#endregion\n//#region src/utils/normalization.d.ts\n/**\n * NormalizationContext carries the accumulated offsets and limits\n * as we traverse down the virtual media tree.\n */\ninterface NormalizationContext {\n timeOffsetSec: number;\n durationLimitMs?: number;\n}\n/**\n * normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n * generic timeline-shifting operations into standard properties\n * of their children.\n */\ndeclare function normalizeTimeline(vv: VirtualMediaData, fps: number, context?: NormalizationContext): VirtualMediaData;\n//#endregion\nexport { AudioClip, CropRegion, RenderParams, SceneProps, calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map","import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;;ASKA;AAOA;;iBT8CiBgC,cAAAA,CS7CS,YAAA,ET6CoBd,gBS7CpB,EAAA,GAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,ET6CuFe,SS7CvF,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,ET6CsHR,OS7CtH,CAAA;EAChB,QAAA,ET6CEM,YS7CF,EAAA;EACP,UAAA,EAAA,MAAA;CAAM,CAAA;;;;;;;;;;cRZKM,YAAUE,SAASH;AD+CuB;;;;cE/C1CM,YAAUE,SAASH;AF+CuB;;;;cG/C1CM,YAAUE,SAASH;AH+CuB;;;;cI/C1CM,YAAUE,SAASH;AJ+CuB;;;;cK/C1CM,YAAUE,SAASH;AL+CuB;;;;cM/C1CM,YAAUE,SAASH;AN+CuB;;;;cO/C1CM,UAAUE,SAASH;AP+CuB;;;;;;;;AAAA;;;;;AAQ+F,UQhDtI,UAAA,CRgDsI;;;;ECvDzI7B,WAAAA,CAAAA,EAAsE,MAAA;;;KOexE,YAAA,IAAgB,cAAc;ANf5BK,UMiBG,WAAA,CNjBgBD;;;YMoBtB;ALvBuE;UK0BjE,gBAAA;;;EJvBHW;;;;ACHoE;;;;ACGpEU,iBEsLE,SAAA,CFtLiBD,OAAAA,EEuLvB,UFvLcG,EAAAA,GAAQ,EEwL1B,gBFxL0B,CAAA,EEyL7B,WFzL6B;;iBEiOhB,UAAA,SACP,gCACU;;ADtO+D;;;iBC6PlE,SAAA,SACP;;;;;;;ARpMQhC,USrDA,gBAAA,CTqDc;EAAed,UAAAA,CAAAA,EAAAA,MAAAA;;;;;iBS9C9B,eAAA,YACJ,cAAc,yBAChB,mBACP"}
|