framefields 2.4.0 → 2.4.1

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.
Files changed (424) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-DXwNhi1z.mjs → audio-CPApYcWF.mjs} +4 -4
  4. package/dist/{audio-DXwNhi1z.mjs.map → audio-CPApYcWF.mjs.map} +1 -1
  5. package/dist/{audio-C6toT7F3.d.mts → audio-DHuEMOtQ.d.mts} +3 -3
  6. package/dist/{audio-C6toT7F3.d.mts.map → audio-DHuEMOtQ.d.mts.map} +1 -1
  7. package/dist/{dist-fjKpBYkc.mjs → dist-ClyC_d66.mjs} +9 -2
  8. package/dist/dist-ClyC_d66.mjs.map +1 -0
  9. package/dist/{dist-Cl0mvShy.mjs → dist-CrK3rmyN.mjs} +180 -58
  10. package/dist/dist-CrK3rmyN.mjs.map +1 -0
  11. package/dist/{dist-DRB6Vg5u.mjs → dist-CspOG4V1.mjs} +25 -8
  12. package/dist/dist-CspOG4V1.mjs.map +1 -0
  13. package/dist/{dist-BY0bIWgr.mjs → dist-SB9qfAko.mjs} +2 -2
  14. package/dist/{dist-BY0bIWgr.mjs.map → dist-SB9qfAko.mjs.map} +1 -1
  15. package/dist/effects/index.d.mts +4 -4
  16. package/dist/effects/index.mjs +35 -35
  17. package/dist/{effects-lBqG-vd1.mjs → effects-DxylPSuI.mjs} +3 -3
  18. package/dist/{effects-lBqG-vd1.mjs.map → effects-DxylPSuI.mjs.map} +1 -1
  19. package/dist/fonts/index.mjs +2 -2
  20. package/dist/{fonts-DlRJD6NS.mjs → fonts-CsMDfqv9.mjs} +2 -2
  21. package/dist/{fonts-DlRJD6NS.mjs.map → fonts-CsMDfqv9.mjs.map} +1 -1
  22. package/dist/{gpu-DOQX1W2q.mjs → gpu-DtT5I4ME.mjs} +2 -2
  23. package/dist/{gpu-DOQX1W2q.mjs.map → gpu-DtT5I4ME.mjs.map} +1 -1
  24. package/dist/{index-CaiZ5p6q.d.mts → index-B1XcyMm8.d.mts} +2 -2
  25. package/dist/{index-CaiZ5p6q.d.mts.map → index-B1XcyMm8.d.mts.map} +1 -1
  26. package/dist/{index-Cf1pVxn0.d.mts → index-B2Xesdug.d.mts} +4 -4
  27. package/dist/{index-Cf1pVxn0.d.mts.map → index-B2Xesdug.d.mts.map} +1 -1
  28. package/dist/{index-BHqdtJbN.d.mts → index-BxARm93R.d.mts} +2 -2
  29. package/dist/{index-BHqdtJbN.d.mts.map → index-BxARm93R.d.mts.map} +1 -1
  30. package/dist/{index-BONyHjZX.d.mts → index-C0o3lLyA.d.mts} +3 -3
  31. package/dist/{index-BONyHjZX.d.mts.map → index-C0o3lLyA.d.mts.map} +1 -1
  32. package/dist/{index-DN9oXO-X.d.mts → index-D-l-yCv6.d.mts} +3 -3
  33. package/dist/{index-DN9oXO-X.d.mts.map → index-D-l-yCv6.d.mts.map} +1 -1
  34. package/dist/{index-DEODKaL6.d.mts → index-DujpgUUq.d.mts} +7 -2
  35. package/dist/index-DujpgUUq.d.mts.map +1 -0
  36. package/dist/index.d.mts +10 -10
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +52 -52
  39. package/dist/preview/index.d.mts +2 -2
  40. package/dist/preview/index.mjs +10 -10
  41. package/dist/{preview-Ca4tF5Ro.mjs → preview-D2dMmokw.mjs} +2 -2
  42. package/dist/{preview-Ca4tF5Ro.mjs.map → preview-D2dMmokw.mjs.map} +1 -1
  43. package/dist/preview-engine/audio.mjs +1 -1
  44. package/dist/preview-engine/chunk-266DECPQ.mjs +1 -0
  45. package/dist/preview-engine/{chunk-SZW5J72T.mjs → chunk-2DDBSI75.mjs} +1 -1
  46. package/dist/preview-engine/{chunk-QXCY2ATH.mjs → chunk-2GIWWDE4.mjs} +1 -1
  47. package/dist/preview-engine/{chunk-U4JIFQRR.mjs → chunk-34ACEGNW.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-AY7UX37L.mjs → chunk-3ACCCPBN.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-VK2CVMWJ.mjs → chunk-5E5J4KT4.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-T2FE5VOW.mjs → chunk-5RQHNB6Y.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-TS3JI3BH.mjs → chunk-67SSYK7D.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-PL4IH5V4.mjs → chunk-6K7US2WD.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-PEWYB6WP.mjs → chunk-7LVOSEGN.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-PSRQA3QW.mjs → chunk-A5OVKZ52.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-PXT52LEH.mjs → chunk-C6Z7H2RZ.mjs} +1 -1
  56. package/dist/preview-engine/chunk-CPFPY35C.mjs +1 -0
  57. package/dist/preview-engine/{chunk-7EPIRODI.mjs → chunk-DOCSX45C.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-GSFN4WCH.mjs → chunk-FFGBUS76.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-IR5DNNWR.mjs → chunk-FFMPC7QA.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-IUPDOATX.mjs → chunk-FHKBALVI.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-HE4R7EZM.mjs → chunk-G4J662EL.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-5W4AFQP7.mjs → chunk-GNG4YH2W.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-L6BH5J4P.mjs → chunk-GQLZXCW3.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-EVXWDOCL.mjs → chunk-HDGFNBYK.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-JXNG2ACR.mjs → chunk-HNNIVJ2K.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-FU7AIAMM.mjs → chunk-HUKAC5MJ.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-44CQSOYE.mjs → chunk-JX22B2FS.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-DIGIQ5MJ.mjs → chunk-KAQUNOVB.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-MLY5M7Y5.mjs → chunk-KT35IPCF.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-VXS5SIEC.mjs → chunk-LIQA5OOU.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-SGPRLTNF.mjs → chunk-LK3T65RB.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-YQZOGEPZ.mjs → chunk-LLDIDE5Q.mjs} +1 -1
  73. package/dist/preview-engine/chunk-NNQUIVTE.mjs +5 -0
  74. package/dist/preview-engine/{chunk-5AUB4Y3L.mjs → chunk-NRAZV5OA.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-VGZZSPDN.mjs → chunk-NTVDL3RS.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-BSOJR4JU.mjs → chunk-O6NRIXS5.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-OKH2VU2U.mjs → chunk-PZF6T7DM.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-OJ2PKBXE.mjs → chunk-QJZKIY4H.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-WFGJXCZT.mjs → chunk-R26SY5D4.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-EYWPOCZW.mjs → chunk-RDP6QROU.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-J2R5R7YY.mjs → chunk-RKVB47IA.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-PAQNDZQB.mjs → chunk-SWXVITCQ.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-KERW7QJ4.mjs → chunk-UZBVCYRY.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-Q22PJXFJ.mjs → chunk-WACWOKEP.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-AXHB4J37.mjs → chunk-WCZ5DKZ4.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-WH5Q2NFN.mjs → chunk-WJJIISQJ.mjs} +1 -1
  87. package/dist/preview-engine/chunk-XDMZP3E2.mjs +1 -0
  88. package/dist/preview-engine/{chunk-7G3XIOP7.mjs → chunk-Z6UKUHPU.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-WUKH7BD7.mjs → chunk-ZKPQGQE3.mjs} +1 -1
  90. package/dist/preview-engine/effects.mjs +1 -1
  91. package/dist/preview-engine/framefields.mjs +4 -4
  92. package/dist/preview-engine/player.mjs +1 -1
  93. package/dist/preview-engine/{renderers-2P6KXWEZ.mjs → renderers-3CXFGRE7.mjs} +1 -1
  94. package/dist/preview-engine/{renderers-KZWGSKRF.mjs → renderers-3FC3WCJN.mjs} +1 -1
  95. package/dist/preview-engine/renderers-3S2FM33K.mjs +1 -0
  96. package/dist/preview-engine/{renderers-5FQA2DP4.mjs → renderers-4AJWVIJG.mjs} +1 -1
  97. package/dist/preview-engine/renderers-53ZTBI3C.mjs +1 -0
  98. package/dist/preview-engine/renderers-5USBVCMQ.mjs +1 -0
  99. package/dist/preview-engine/renderers-65G6BLEA.mjs +1 -0
  100. package/dist/preview-engine/{renderers-PYWXELLG.mjs → renderers-6JZ4HYIU.mjs} +1 -1
  101. package/dist/preview-engine/{renderers-3GHEWWVX.mjs → renderers-75TL7RLS.mjs} +1 -1
  102. package/dist/preview-engine/{renderers-U6KY34TP.mjs → renderers-7CPYTCNW.mjs} +1 -1
  103. package/dist/preview-engine/renderers-7XU7BXE7.mjs +1 -0
  104. package/dist/preview-engine/{renderers-2VN3AH45.mjs → renderers-AZYJFJLO.mjs} +1 -1
  105. package/dist/preview-engine/{renderers-TR2V2HZ2.mjs → renderers-BDWVXYTW.mjs} +1 -1
  106. package/dist/preview-engine/renderers-BFXM32BC.mjs +1 -0
  107. package/dist/preview-engine/renderers-CDXHCWWK.mjs +1 -0
  108. package/dist/preview-engine/{renderers-N7FR54V2.mjs → renderers-CK3ZL3GM.mjs} +1 -1
  109. package/dist/preview-engine/renderers-CLUN7WU6.mjs +1 -0
  110. package/dist/preview-engine/renderers-DTB4HEXU.mjs +1 -0
  111. package/dist/preview-engine/renderers-EFKNRLYF.mjs +1 -0
  112. package/dist/preview-engine/{renderers-UPTJJE5F.mjs → renderers-FADYGSLK.mjs} +1 -1
  113. package/dist/preview-engine/{renderers-I5E2RSV4.mjs → renderers-FKH5S64C.mjs} +1 -1
  114. package/dist/preview-engine/{renderers-BSKZXITT.mjs → renderers-FM6A5YR4.mjs} +1 -1
  115. package/dist/preview-engine/renderers-G2K7ZA5O.mjs +1 -0
  116. package/dist/preview-engine/{renderers-D6T6IPER.mjs → renderers-GAIUTII6.mjs} +1 -1
  117. package/dist/preview-engine/renderers-GTUO5LIV.mjs +1 -0
  118. package/dist/preview-engine/{renderers-A6HM64UZ.mjs → renderers-GUPEJK3O.mjs} +1 -1
  119. package/dist/preview-engine/{renderers-IWQ3V6AJ.mjs → renderers-HSJIVP57.mjs} +1 -1
  120. package/dist/preview-engine/{renderers-4GRVAW2W.mjs → renderers-HZHEGONW.mjs} +1 -1
  121. package/dist/preview-engine/{renderers-NWHS7N2L.mjs → renderers-IHACBWXI.mjs} +1 -1
  122. package/dist/preview-engine/{renderers-3YCJOINH.mjs → renderers-IHRFEZNP.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-A7VH3ON5.mjs → renderers-IJDQJEE5.mjs} +1 -1
  124. package/dist/preview-engine/{renderers-OT7D3BUA.mjs → renderers-IO3BVVJ7.mjs} +1 -1
  125. package/dist/preview-engine/renderers-IR772VSN.mjs +1 -0
  126. package/dist/preview-engine/{renderers-EJWPVVQR.mjs → renderers-K7B5PQBT.mjs} +1 -1
  127. package/dist/preview-engine/renderers-L6TRJOXA.mjs +1 -0
  128. package/dist/preview-engine/{renderers-N7TS5562.mjs → renderers-LVLVJHOL.mjs} +1 -1
  129. package/dist/preview-engine/{renderers-FK72LKQC.mjs → renderers-MBSOKWKB.mjs} +1 -1
  130. package/dist/preview-engine/{renderers-NC64EQDE.mjs → renderers-N6H6RSF2.mjs} +1 -1
  131. package/dist/preview-engine/{renderers-ZHZMGMLN.mjs → renderers-NJLGPPX7.mjs} +1 -1
  132. package/dist/preview-engine/renderers-O5NFQYRQ.mjs +1 -0
  133. package/dist/preview-engine/renderers-O6V3OEKX.mjs +1 -0
  134. package/dist/preview-engine/renderers-OODA27UH.mjs +1 -0
  135. package/dist/preview-engine/{renderers-6CG7DBTB.mjs → renderers-R4WMM6IX.mjs} +1 -1
  136. package/dist/preview-engine/renderers-RIGW33ZI.mjs +1 -0
  137. package/dist/preview-engine/{renderers-RLHTNLRE.mjs → renderers-RKZGYWDG.mjs} +1 -1
  138. package/dist/preview-engine/renderers-RUZRBQ4K.mjs +1 -0
  139. package/dist/preview-engine/renderers-SKB2GGKS.mjs +1 -0
  140. package/dist/preview-engine/{renderers-6OGFUSH6.mjs → renderers-SW7FIEKO.mjs} +1 -1
  141. package/dist/preview-engine/renderers-T4D2TASM.mjs +1 -0
  142. package/dist/preview-engine/renderers-T74XV36Q.mjs +1 -0
  143. package/dist/preview-engine/{renderers-F55XFVMP.mjs → renderers-TCNPEANL.mjs} +1 -1
  144. package/dist/preview-engine/renderers-TOPW2UM3.mjs +1 -0
  145. package/dist/preview-engine/{renderers-5YEIUTVN.mjs → renderers-TY7DVI7E.mjs} +1 -1
  146. package/dist/preview-engine/{renderers-HQEKSUNR.mjs → renderers-U55KRIOV.mjs} +1 -1
  147. package/dist/preview-engine/{renderers-YMPXGYRU.mjs → renderers-UDOBX433.mjs} +1 -1
  148. package/dist/preview-engine/{renderers-CRRLV7IO.mjs → renderers-UMPOVFRA.mjs} +1 -1
  149. package/dist/preview-engine/renderers-UO5G3Y2G.mjs +1 -0
  150. package/dist/preview-engine/renderers-UOV7VOJJ.mjs +1 -0
  151. package/dist/preview-engine/{renderers-MON4QFRF.mjs → renderers-UWKSTSTA.mjs} +1 -1
  152. package/dist/preview-engine/renderers-VHPAOUTA.mjs +1 -0
  153. package/dist/preview-engine/{renderers-E76OKK66.mjs → renderers-WR6MKT5S.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-MCECHPCL.mjs → renderers-XKHNBARD.mjs} +1 -1
  155. package/dist/preview-engine/renderers-YEQRQJFC.mjs +1 -0
  156. package/dist/preview-engine/{renderers-RJO6H4FC.mjs → renderers-YRZ3WODX.mjs} +1 -1
  157. package/dist/preview-engine/renderers-YUTFGVRY.mjs +1 -0
  158. package/dist/preview-engine/{renderers-3SRG77SC.mjs → renderers-YXOTRKPA.mjs} +1 -1
  159. package/dist/preview-engine/renderers-ZOU5ARVD.mjs +1 -0
  160. package/dist/preview-engine/renderers-ZW75LQTR.mjs +1 -0
  161. package/dist/preview-engine/signals.mjs +1 -1
  162. package/dist/{program-CJEg2wMa.mjs → program-C2cJayA1.mjs} +4 -4
  163. package/dist/{program-CJEg2wMa.mjs.map → program-C2cJayA1.mjs.map} +1 -1
  164. package/dist/renderer/index.d.mts +2 -2
  165. package/dist/renderer/index.mjs +2 -2
  166. package/dist/{renderer-CCu1Q8ib.mjs → renderer--ruTGlPo.mjs} +3 -3
  167. package/dist/{renderer-CCu1Q8ib.mjs.map → renderer--ruTGlPo.mjs.map} +1 -1
  168. package/dist/{renderer-D-IcBLT0.mjs → renderer-7y5Cj8rV.mjs} +3 -3
  169. package/dist/{renderer-D-IcBLT0.mjs.map → renderer-7y5Cj8rV.mjs.map} +1 -1
  170. package/dist/{renderer-Dg5yLAM9.mjs → renderer-92eLJg24.mjs} +4 -4
  171. package/dist/{renderer-Dg5yLAM9.mjs.map → renderer-92eLJg24.mjs.map} +1 -1
  172. package/dist/{renderer-CduDa1qf.mjs → renderer-B0gPTXhe.mjs} +3 -3
  173. package/dist/{renderer-CduDa1qf.mjs.map → renderer-B0gPTXhe.mjs.map} +1 -1
  174. package/dist/{renderer-CjTxu89O.mjs → renderer-B1QREs7J.mjs} +3 -3
  175. package/dist/{renderer-CjTxu89O.mjs.map → renderer-B1QREs7J.mjs.map} +1 -1
  176. package/dist/{renderer-DVaVVz-D.mjs → renderer-B3e4LSE6.mjs} +3 -3
  177. package/dist/{renderer-DVaVVz-D.mjs.map → renderer-B3e4LSE6.mjs.map} +1 -1
  178. package/dist/{renderer-CxSH3F_n.mjs → renderer-B4RpSd4A.mjs} +2 -2
  179. package/dist/{renderer-CxSH3F_n.mjs.map → renderer-B4RpSd4A.mjs.map} +1 -1
  180. package/dist/renderer-BAhZeUUn.mjs +5 -0
  181. package/dist/{renderer-BZCLdb8F.mjs → renderer-BBAbZfBl.mjs} +4 -4
  182. package/dist/{renderer-BZCLdb8F.mjs.map → renderer-BBAbZfBl.mjs.map} +1 -1
  183. package/dist/{renderer-DZndEvZN.mjs → renderer-BDCy8NgT.mjs} +3 -3
  184. package/dist/{renderer-DZndEvZN.mjs.map → renderer-BDCy8NgT.mjs.map} +1 -1
  185. package/dist/renderer-BHAE_dKq.mjs +5 -0
  186. package/dist/{renderer-i4RJ-_sx.mjs → renderer-BMKFzfSQ.mjs} +3 -3
  187. package/dist/{renderer-i4RJ-_sx.mjs.map → renderer-BMKFzfSQ.mjs.map} +1 -1
  188. package/dist/renderer-BNYZY3FE.mjs +5 -0
  189. package/dist/{renderer-BtJ6XYN7.mjs → renderer-BPixWnmY.mjs} +3 -3
  190. package/dist/{renderer-BtJ6XYN7.mjs.map → renderer-BPixWnmY.mjs.map} +1 -1
  191. package/dist/renderer-BSvubMvI.mjs +5 -0
  192. package/dist/{renderer-CoN2JgLO.mjs → renderer-BTd2sWDC.mjs} +3 -3
  193. package/dist/{renderer-CoN2JgLO.mjs.map → renderer-BTd2sWDC.mjs.map} +1 -1
  194. package/dist/{renderer-DautVsW4.mjs → renderer-BTigwMQp.mjs} +3 -3
  195. package/dist/{renderer-DautVsW4.mjs.map → renderer-BTigwMQp.mjs.map} +1 -1
  196. package/dist/renderer-B_M_yhTc.mjs +5 -0
  197. package/dist/renderer-B_xSsTuy.mjs +5 -0
  198. package/dist/renderer-BePHurAU.mjs +5 -0
  199. package/dist/renderer-BfZquJrW.mjs +5 -0
  200. package/dist/{renderer-DAFi5TC_.mjs → renderer-Bi6W4RSn.mjs} +2 -2
  201. package/dist/{renderer-DAFi5TC_.mjs.map → renderer-Bi6W4RSn.mjs.map} +1 -1
  202. package/dist/{renderer-Edn9xltT.mjs → renderer-BjCHW9Jp.mjs} +2 -2
  203. package/dist/{renderer-CJmZURPQ.mjs → renderer-BjvNEbML.mjs} +2 -2
  204. package/dist/{renderer-CJmZURPQ.mjs.map → renderer-BjvNEbML.mjs.map} +1 -1
  205. package/dist/{renderer-C2ZIAhdJ.mjs → renderer-BkWd4-YO.mjs} +2 -2
  206. package/dist/{renderer-C2ZIAhdJ.mjs.map → renderer-BkWd4-YO.mjs.map} +1 -1
  207. package/dist/{renderer-Cfto0m0-.mjs → renderer-Bkrk0M0r.mjs} +3 -3
  208. package/dist/{renderer-Cfto0m0-.mjs.map → renderer-Bkrk0M0r.mjs.map} +1 -1
  209. package/dist/{renderer-h9sJnoxw.mjs → renderer-BljMOvry.mjs} +3 -3
  210. package/dist/{renderer-h9sJnoxw.mjs.map → renderer-BljMOvry.mjs.map} +1 -1
  211. package/dist/renderer-BuY5ypB2.mjs +5 -0
  212. package/dist/renderer-BvOQgFHo.mjs +5 -0
  213. package/dist/{renderer-DqgduGiO.mjs → renderer-BwpgDLYO.mjs} +3 -3
  214. package/dist/{renderer-DqgduGiO.mjs.map → renderer-BwpgDLYO.mjs.map} +1 -1
  215. package/dist/{renderer-DaV95CAd.mjs → renderer-BwwZB2mt.mjs} +4 -4
  216. package/dist/{renderer-DaV95CAd.mjs.map → renderer-BwwZB2mt.mjs.map} +1 -1
  217. package/dist/{renderer-DA1brg35.mjs → renderer-ByCX4JYg.mjs} +3 -3
  218. package/dist/{renderer-DA1brg35.mjs.map → renderer-ByCX4JYg.mjs.map} +1 -1
  219. package/dist/{renderer-Tf1AS1aO.mjs → renderer-C1E5Rt5q.mjs} +3 -3
  220. package/dist/{renderer-Tf1AS1aO.mjs.map → renderer-C1E5Rt5q.mjs.map} +1 -1
  221. package/dist/renderer-C7NkSvUz.mjs +5 -0
  222. package/dist/{renderer-CG4TmDWH.mjs → renderer-CCGzT6bX.mjs} +2 -2
  223. package/dist/{renderer-wFyrVuuj.mjs → renderer-CDOobs18.mjs} +3 -3
  224. package/dist/{renderer-wFyrVuuj.mjs.map → renderer-CDOobs18.mjs.map} +1 -1
  225. package/dist/{renderer-BaHEN_Kv.mjs → renderer-CDUxAtsk.mjs} +4 -4
  226. package/dist/{renderer-BaHEN_Kv.mjs.map → renderer-CDUxAtsk.mjs.map} +1 -1
  227. package/dist/renderer-CIuxV2q1.mjs +5 -0
  228. package/dist/{renderer-DY8fPeH3.mjs → renderer-CJ4bxCld.mjs} +2 -2
  229. package/dist/renderer-CKp97tSQ.mjs +5 -0
  230. package/dist/{renderer-TyZu7nQ2.mjs → renderer-CNb-DG00.mjs} +71 -71
  231. package/dist/{renderer-TyZu7nQ2.mjs.map → renderer-CNb-DG00.mjs.map} +1 -1
  232. package/dist/{renderer-BTJyO6ov.mjs → renderer-CNuVJ4nG.mjs} +2 -2
  233. package/dist/{renderer-BTJyO6ov.mjs.map → renderer-CNuVJ4nG.mjs.map} +1 -1
  234. package/dist/renderer-CY89dTFR.mjs +5 -0
  235. package/dist/renderer-C_B_4Bl0.mjs +5 -0
  236. package/dist/{renderer-Dk0dnuHr.mjs → renderer-Cbsnj9vV.mjs} +3 -3
  237. package/dist/{renderer-Dk0dnuHr.mjs.map → renderer-Cbsnj9vV.mjs.map} +1 -1
  238. package/dist/{renderer-B6UqWjtH.mjs → renderer-CcoUNzlQ.mjs} +3 -3
  239. package/dist/{renderer-B6UqWjtH.mjs.map → renderer-CcoUNzlQ.mjs.map} +1 -1
  240. package/dist/renderer-Cd87JOjP.mjs +5 -0
  241. package/dist/{renderer-BZF48o1T.mjs → renderer-CeiCJCg4.mjs} +3 -3
  242. package/dist/{renderer-BZF48o1T.mjs.map → renderer-CeiCJCg4.mjs.map} +1 -1
  243. package/dist/renderer-Cev6orIK.mjs +6 -0
  244. package/dist/renderer-Cewf6UPh.mjs +5 -0
  245. package/dist/renderer-CnHsMLIv.mjs +5 -0
  246. package/dist/renderer-CoxuAr7b.mjs +5 -0
  247. package/dist/{renderer-D4E8Yf61.mjs → renderer-CqtIbe5n.mjs} +2 -2
  248. package/dist/{renderer-D4E8Yf61.mjs.map → renderer-CqtIbe5n.mjs.map} +1 -1
  249. package/dist/renderer-CrdG7trA.mjs +5 -0
  250. package/dist/{renderer-C-La-IAt.mjs → renderer-Csss5GFQ.mjs} +2 -2
  251. package/dist/{renderer-C-La-IAt.mjs.map → renderer-Csss5GFQ.mjs.map} +1 -1
  252. package/dist/renderer-Cu5MFgbk.mjs +5 -0
  253. package/dist/renderer-CuOjhtoo.mjs +5 -0
  254. package/dist/{renderer-BhZutM8K.mjs → renderer-Cv4lchUP.mjs} +3 -3
  255. package/dist/{renderer-BhZutM8K.mjs.map → renderer-Cv4lchUP.mjs.map} +1 -1
  256. package/dist/{renderer-CgZ1G37H.mjs → renderer-Cw6Sagih.mjs} +3 -3
  257. package/dist/{renderer-CgZ1G37H.mjs.map → renderer-Cw6Sagih.mjs.map} +1 -1
  258. package/dist/{renderer-Dim2ZlfK.d.mts → renderer-CxqPeATd.d.mts} +2 -2
  259. package/dist/{renderer-Dim2ZlfK.d.mts.map → renderer-CxqPeATd.d.mts.map} +1 -1
  260. package/dist/{renderer-yGARXwV0.mjs → renderer-CzRqzp8P.mjs} +3 -3
  261. package/dist/{renderer-yGARXwV0.mjs.map → renderer-CzRqzp8P.mjs.map} +1 -1
  262. package/dist/{renderer-B8v8iEkB.mjs → renderer-Czxgaygb.mjs} +6 -6
  263. package/dist/{renderer-B8v8iEkB.mjs.map → renderer-Czxgaygb.mjs.map} +1 -1
  264. package/dist/{renderer-eWBBsCv2.mjs → renderer-D0vom99O.mjs} +2 -2
  265. package/dist/{renderer-eWBBsCv2.mjs.map → renderer-D0vom99O.mjs.map} +1 -1
  266. package/dist/{renderer-C9pl21Zb.mjs → renderer-D2-V9nQq.mjs} +3 -3
  267. package/dist/{renderer-C9pl21Zb.mjs.map → renderer-D2-V9nQq.mjs.map} +1 -1
  268. package/dist/renderer-D2_0g6Oi.mjs +5 -0
  269. package/dist/renderer-D62FwolD.mjs +5 -0
  270. package/dist/{renderer-445i0uxs.mjs → renderer-D6BXR7P4.mjs} +2 -2
  271. package/dist/{renderer-445i0uxs.mjs.map → renderer-D6BXR7P4.mjs.map} +1 -1
  272. package/dist/renderer-DDNY9N7I.mjs +5 -0
  273. package/dist/{renderer-5tQ7ImPk.mjs → renderer-DFJQ6v0F.mjs} +2 -2
  274. package/dist/{renderer-5tQ7ImPk.mjs.map → renderer-DFJQ6v0F.mjs.map} +1 -1
  275. package/dist/renderer-DF_ONJ3v.mjs +5 -0
  276. package/dist/{renderer-CoO2j8AC.mjs → renderer-DILUmb-e.mjs} +3 -3
  277. package/dist/{renderer-CoO2j8AC.mjs.map → renderer-DILUmb-e.mjs.map} +1 -1
  278. package/dist/{renderer-CduL1AOK.mjs → renderer-DKfwlE4e.mjs} +3 -3
  279. package/dist/{renderer-CduL1AOK.mjs.map → renderer-DKfwlE4e.mjs.map} +1 -1
  280. package/dist/{renderer-DFX2V9Dp.mjs → renderer-DScyMHpJ.mjs} +2 -2
  281. package/dist/{renderer-DFX2V9Dp.mjs.map → renderer-DScyMHpJ.mjs.map} +1 -1
  282. package/dist/{renderer-BZvWlGsa.mjs → renderer-DTw-W0Yz.mjs} +3 -3
  283. package/dist/{renderer-BZvWlGsa.mjs.map → renderer-DTw-W0Yz.mjs.map} +1 -1
  284. package/dist/{renderer-BFWRUTov.mjs → renderer-DZJJHCtm.mjs} +3 -3
  285. package/dist/{renderer-BFWRUTov.mjs.map → renderer-DZJJHCtm.mjs.map} +1 -1
  286. package/dist/{renderer-Cz9fzS11.mjs → renderer-DaSxr9fM.mjs} +3 -3
  287. package/dist/{renderer-Cz9fzS11.mjs.map → renderer-DaSxr9fM.mjs.map} +1 -1
  288. package/dist/{renderer-CoX23zo_.mjs → renderer-DaqWTx7s.mjs} +3 -3
  289. package/dist/{renderer-CoX23zo_.mjs.map → renderer-DaqWTx7s.mjs.map} +1 -1
  290. package/dist/renderer-DbzrVHEE.mjs +5 -0
  291. package/dist/{renderer-CN3iCli4.mjs → renderer-DcBGYN3V.mjs} +3 -3
  292. package/dist/{renderer-CN3iCli4.mjs.map → renderer-DcBGYN3V.mjs.map} +1 -1
  293. package/dist/{renderer-CCCitH4J.mjs → renderer-DjBCWxYy.mjs} +3 -3
  294. package/dist/{renderer-CCCitH4J.mjs.map → renderer-DjBCWxYy.mjs.map} +1 -1
  295. package/dist/{renderer-gbBgGPNL.mjs → renderer-DjwITRvg.mjs} +2 -2
  296. package/dist/renderer-DlYchp1v.mjs +5 -0
  297. package/dist/renderer-DqcUNP8J.mjs +5 -0
  298. package/dist/renderer-DqvFhEQj.mjs +5 -0
  299. package/dist/{renderer-B4JmNa_T.mjs → renderer-DwVOxdzC.mjs} +3 -3
  300. package/dist/{renderer-B4JmNa_T.mjs.map → renderer-DwVOxdzC.mjs.map} +1 -1
  301. package/dist/{renderer-BZWiY6Jw.mjs → renderer-Dwu_zfdL.mjs} +3 -3
  302. package/dist/{renderer-BZWiY6Jw.mjs.map → renderer-Dwu_zfdL.mjs.map} +1 -1
  303. package/dist/renderer-DxBav2bE.mjs +5 -0
  304. package/dist/{renderer-DkYiOWPJ.mjs → renderer-DyyIXLQK.mjs} +3 -3
  305. package/dist/{renderer-DkYiOWPJ.mjs.map → renderer-DyyIXLQK.mjs.map} +1 -1
  306. package/dist/{renderer-D-e3vDnO.mjs → renderer-DzSMeQBC.mjs} +3 -3
  307. package/dist/{renderer-D-e3vDnO.mjs.map → renderer-DzSMeQBC.mjs.map} +1 -1
  308. package/dist/{renderer-DOZJeWM4.mjs → renderer-EZp_IIPK.mjs} +3 -3
  309. package/dist/{renderer-DOZJeWM4.mjs.map → renderer-EZp_IIPK.mjs.map} +1 -1
  310. package/dist/{renderer-DkM_wN8j.mjs → renderer-G1pMJH5C.mjs} +2 -2
  311. package/dist/{renderer-DkM_wN8j.mjs.map → renderer-G1pMJH5C.mjs.map} +1 -1
  312. package/dist/renderer-GvSRoQje.mjs +5 -0
  313. package/dist/{renderer-DQtk282o.mjs → renderer-If8JOkBi.mjs} +2 -2
  314. package/dist/{renderer-DQtk282o.mjs.map → renderer-If8JOkBi.mjs.map} +1 -1
  315. package/dist/{renderer-BL36f2IQ.mjs → renderer-JvcR1vYI.mjs} +2 -2
  316. package/dist/{renderer-BL36f2IQ.mjs.map → renderer-JvcR1vYI.mjs.map} +1 -1
  317. package/dist/renderer-KP7Ita9g.mjs +5 -0
  318. package/dist/{renderer-DOkEalxy.mjs → renderer-NizuhHsH.mjs} +3 -3
  319. package/dist/{renderer-DOkEalxy.mjs.map → renderer-NizuhHsH.mjs.map} +1 -1
  320. package/dist/renderer-Pc8dyNXt.mjs +5 -0
  321. package/dist/{renderer-fXRwAdO2.mjs → renderer-RDCax5CK.mjs} +3 -3
  322. package/dist/{renderer-fXRwAdO2.mjs.map → renderer-RDCax5CK.mjs.map} +1 -1
  323. package/dist/{renderer-BOvCstdU.mjs → renderer-UcdqCarR.mjs} +3 -3
  324. package/dist/{renderer-BOvCstdU.mjs.map → renderer-UcdqCarR.mjs.map} +1 -1
  325. package/dist/{renderer-BaBluD-r.mjs → renderer-V5uEyDFz.mjs} +3 -3
  326. package/dist/{renderer-BaBluD-r.mjs.map → renderer-V5uEyDFz.mjs.map} +1 -1
  327. package/dist/{renderer-BzgnTEvf.mjs → renderer-X0eKSD7v.mjs} +3 -3
  328. package/dist/{renderer-BzgnTEvf.mjs.map → renderer-X0eKSD7v.mjs.map} +1 -1
  329. package/dist/{renderer-Ai5nZsof.mjs → renderer-Za4D9hej.mjs} +3 -3
  330. package/dist/{renderer-Ai5nZsof.mjs.map → renderer-Za4D9hej.mjs.map} +1 -1
  331. package/dist/{renderer-q971j1BW.mjs → renderer-apeDrNXM.mjs} +3 -3
  332. package/dist/{renderer-q971j1BW.mjs.map → renderer-apeDrNXM.mjs.map} +1 -1
  333. package/dist/renderer-ezRCmU09.mjs +3 -0
  334. package/dist/{renderer-CNS8LA2_.mjs → renderer-gRMkQabv.mjs} +3 -3
  335. package/dist/{renderer-CNS8LA2_.mjs.map → renderer-gRMkQabv.mjs.map} +1 -1
  336. package/dist/renderer-h6ev1ogx.mjs +5 -0
  337. package/dist/{renderer-nMnE_T2y.mjs → renderer-rXgqgAjw.mjs} +3 -3
  338. package/dist/{renderer-nMnE_T2y.mjs.map → renderer-rXgqgAjw.mjs.map} +1 -1
  339. package/dist/{renderer-BPsi7Q7Z.mjs → renderer-ut1GqW89.mjs} +3 -3
  340. package/dist/{renderer-BPsi7Q7Z.mjs.map → renderer-ut1GqW89.mjs.map} +1 -1
  341. package/dist/{renderer-DH0wkQkR.mjs → renderer-yyUpCeWb.mjs} +2 -2
  342. package/dist/{renderer-DH0wkQkR.mjs.map → renderer-yyUpCeWb.mjs.map} +1 -1
  343. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs → renderers-CP8CFWDs-DzGXDs5p.mjs} +3 -3
  344. package/dist/{renderers-CP8CFWDs-DoVn7dbW.mjs.map → renderers-CP8CFWDs-DzGXDs5p.mjs.map} +1 -1
  345. package/dist/signals/index.d.mts +5 -5
  346. package/dist/signals/index.mjs +6 -6
  347. package/dist/{signals-DGRs6ddH.mjs → signals-C5nOrRmn.mjs} +3 -3
  348. package/dist/{signals-DGRs6ddH.mjs.map → signals-C5nOrRmn.mjs.map} +1 -1
  349. package/package.json +57 -57
  350. package/dist/dist-Cl0mvShy.mjs.map +0 -1
  351. package/dist/dist-DRB6Vg5u.mjs.map +0 -1
  352. package/dist/dist-fjKpBYkc.mjs.map +0 -1
  353. package/dist/index-DEODKaL6.d.mts.map +0 -1
  354. package/dist/preview-engine/chunk-63SFBHEH.mjs +0 -1
  355. package/dist/preview-engine/chunk-7J2FWGVD.mjs +0 -1
  356. package/dist/preview-engine/chunk-M5HZPZHQ.mjs +0 -1
  357. package/dist/preview-engine/chunk-OG62XGCT.mjs +0 -5
  358. package/dist/preview-engine/renderers-2H7YEUTD.mjs +0 -1
  359. package/dist/preview-engine/renderers-2ILG23ED.mjs +0 -1
  360. package/dist/preview-engine/renderers-3RC5FDWX.mjs +0 -1
  361. package/dist/preview-engine/renderers-6WH7NZCC.mjs +0 -1
  362. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +0 -1
  363. package/dist/preview-engine/renderers-B7DSGUMI.mjs +0 -1
  364. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +0 -1
  365. package/dist/preview-engine/renderers-CGYIDAVV.mjs +0 -1
  366. package/dist/preview-engine/renderers-DXHJAMZR.mjs +0 -1
  367. package/dist/preview-engine/renderers-ECA3P4ON.mjs +0 -1
  368. package/dist/preview-engine/renderers-FWGMNPYB.mjs +0 -1
  369. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +0 -1
  370. package/dist/preview-engine/renderers-HXFRTIJD.mjs +0 -1
  371. package/dist/preview-engine/renderers-JHFT27YU.mjs +0 -1
  372. package/dist/preview-engine/renderers-NQXMYNSY.mjs +0 -1
  373. package/dist/preview-engine/renderers-ORAIXUL3.mjs +0 -1
  374. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +0 -1
  375. package/dist/preview-engine/renderers-QVZVEYP5.mjs +0 -1
  376. package/dist/preview-engine/renderers-RKDPX5JU.mjs +0 -1
  377. package/dist/preview-engine/renderers-SBFF7JP5.mjs +0 -1
  378. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +0 -1
  379. package/dist/preview-engine/renderers-UHTO6BQA.mjs +0 -1
  380. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +0 -1
  381. package/dist/preview-engine/renderers-W773SBPV.mjs +0 -1
  382. package/dist/preview-engine/renderers-XHTMRXC5.mjs +0 -1
  383. package/dist/preview-engine/renderers-YECY2YFT.mjs +0 -1
  384. package/dist/preview-engine/renderers-YMN6QXK7.mjs +0 -1
  385. package/dist/preview-engine/renderers-ZANPE3OK.mjs +0 -1
  386. package/dist/preview-engine/renderers-ZHTX73PR.mjs +0 -1
  387. package/dist/preview-engine/renderers-ZJTRANIX.mjs +0 -1
  388. package/dist/renderer--IHe-yqK.mjs +0 -5
  389. package/dist/renderer-B16iwR0_.mjs +0 -5
  390. package/dist/renderer-B3EEYpx6.mjs +0 -5
  391. package/dist/renderer-B3Si5IB4.mjs +0 -5
  392. package/dist/renderer-BARst3ZD.mjs +0 -3
  393. package/dist/renderer-BH8vZKmX.mjs +0 -5
  394. package/dist/renderer-BHZie6Pa.mjs +0 -5
  395. package/dist/renderer-BHpJ1e15.mjs +0 -5
  396. package/dist/renderer-BPJ79b47.mjs +0 -5
  397. package/dist/renderer-BPbM_6WR.mjs +0 -5
  398. package/dist/renderer-Bn-WnRh9.mjs +0 -5
  399. package/dist/renderer-BqHvDAUe.mjs +0 -5
  400. package/dist/renderer-CAtXDNsh.mjs +0 -5
  401. package/dist/renderer-C_5nfVce.mjs +0 -5
  402. package/dist/renderer-Cie7KKeQ.mjs +0 -5
  403. package/dist/renderer-CuoxvPsX.mjs +0 -5
  404. package/dist/renderer-Cvd3oIJQ.mjs +0 -5
  405. package/dist/renderer-CxAgpBrJ.mjs +0 -5
  406. package/dist/renderer-D-cWBX0r.mjs +0 -5
  407. package/dist/renderer-D0q2VyJR.mjs +0 -5
  408. package/dist/renderer-D6NXn3Ky.mjs +0 -5
  409. package/dist/renderer-D9bp2jor.mjs +0 -5
  410. package/dist/renderer-DEzIOIB7.mjs +0 -5
  411. package/dist/renderer-DSSTVulw.mjs +0 -5
  412. package/dist/renderer-DUmTURPu.mjs +0 -5
  413. package/dist/renderer-DXCAgI9m.mjs +0 -5
  414. package/dist/renderer-DZ9j3fQj.mjs +0 -5
  415. package/dist/renderer-Dd1G_VKM.mjs +0 -5
  416. package/dist/renderer-Dee8079X.mjs +0 -5
  417. package/dist/renderer-DgWh5noB.mjs +0 -5
  418. package/dist/renderer-DuD9QRix.mjs +0 -5
  419. package/dist/renderer-KtG5p44R.mjs +0 -5
  420. package/dist/renderer-fdVdNIhL.mjs +0 -5
  421. package/dist/renderer-gBKWL0_E.mjs +0 -5
  422. package/dist/renderer-hmWhsR6C.mjs +0 -5
  423. package/dist/renderer-jkL9FU2W.mjs +0 -6
  424. package/dist/renderer-yAWv-daq.mjs +0 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-CrK3rmyN.mjs","names":[],"sources":["../../renderers/dist/index.mjs","../../compositions/dist/layer-logic-C4ls-aB4.mjs","../../compositions/dist/index.mjs"],"sourcesContent":["import { GetFontAssetUrl } from \"@framefields/client-utils\";\nimport { SlugFontCache, SlugGeometry, getHeadlessFontPath, registerHeadlessFont } from \"@framefields/webgpu-renderers\";\n\nexport * from \"@framefields/webgpu-renderers/math3d\"\n\n//#region src/blend.ts\nconst mapBlendModeToSkia = (mode) => {\n\tif (!mode) return \"srcOver\";\n\tswitch (mode) {\n\t\tcase \"source-over\": return \"srcOver\";\n\t\tcase \"source-in\": return \"srcIn\";\n\t\tcase \"source-out\": return \"srcOut\";\n\t\tcase \"source-atop\": return \"srcATop\";\n\t\tcase \"destination-over\": return \"dstOver\";\n\t\tcase \"destination-in\": return \"dstIn\";\n\t\tcase \"destination-out\": return \"dstOut\";\n\t\tcase \"destination-atop\": return \"dstATop\";\n\t\tcase \"copy\": return \"src\";\n\t\tcase \"xor\": return \"xor\";\n\t\tcase \"multiply\": return \"multiply\";\n\t\tcase \"screen\": return \"screen\";\n\t\tcase \"overlay\": return \"overlay\";\n\t\tcase \"darken\": return \"darken\";\n\t\tcase \"lighten\":\n\t\tcase \"lighter\": return \"lighten\";\n\t\tcase \"color-dodge\": return \"colorDodge\";\n\t\tcase \"color-burn\": return \"colorBurn\";\n\t\tcase \"hard-light\": return \"hardLight\";\n\t\tcase \"soft-light\": return \"softLight\";\n\t\tcase \"difference\": return \"difference\";\n\t\tcase \"exclusion\": return \"exclusion\";\n\t\tcase \"hue\": return \"hue\";\n\t\tcase \"saturation\": return \"saturation\";\n\t\tcase \"color\": return \"color\";\n\t\tcase \"luminosity\": return \"luminosity\";\n\t\tdefault: return \"srcOver\";\n\t}\n};\nconst requiresIsolation = (mode) => {\n\treturn mode === \"destination-in\" || mode === \"source-in\";\n};\n\n//#endregion\n//#region src/geometry.ts\nfunction computeStrokeRect(w, h, cornerRadius, strokeWidth, align = \"outside\") {\n\tif (align === \"inside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: half,\n\t\t\ty: half,\n\t\t\twidth: Math.max(0, w - strokeWidth),\n\t\t\theight: Math.max(0, h - strokeWidth),\n\t\t\tradius: cornerRadius === 0 ? 0 : Math.max(0, cornerRadius - half)\n\t\t};\n\t}\n\tif (align === \"outside\") {\n\t\tconst half = strokeWidth / 2;\n\t\treturn {\n\t\t\tx: -half,\n\t\t\ty: -half,\n\t\t\twidth: w + strokeWidth,\n\t\t\theight: h + strokeWidth,\n\t\t\tradius: cornerRadius === 0 ? 0 : cornerRadius + half\n\t\t};\n\t}\n\treturn {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: w,\n\t\theight: h,\n\t\tradius: cornerRadius\n\t};\n}\n\n//#endregion\n//#region src/interpolate.ts\nconst { cbrt, sqrt, PI: π } = Math;\nconst x2t = (x, a, b, c, d) => {\n\tconst q = a + b * x;\n\tconst s = q ** 2 + c;\n\tif (s > 0) {\n\t\tconst root = sqrt(s);\n\t\treturn cbrt(q + root) + cbrt(q - root) - d;\n\t}\n\tconst l = cbrt(sqrt(q * q - s));\n\tconst angle = q ? Math.atan(sqrt(-s) / q) : -π / 2;\n\tlet φ;\n\tif (b < 0) φ = (q > 0 ? 2 * π : π) - angle;\n\telse if (d < 0) φ = (q > 0 ? 2 * π : -3 * π) + angle;\n\telse φ = (q > 0 ? 0 : π) + angle;\n\treturn 2 * l * Math.cos(φ / 3) - d;\n};\nconst Y = (t, ay, by, cy) => ((ay * t + 3 * by) * t + cy) * t;\nconst linearEasing = (x) => x;\nfunction bezier(mX1, mY1, mX2, mY2) {\n\tif (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) throw new Error(\"bezier x values must be in [0, 1] range\");\n\tif (mX1 === mY1 && mX2 === mY2) return linearEasing;\n\tconst a = 6 * (3 * mX1 - 3 * mX2 + 1);\n\tconst b = 6 * (mX2 - 2 * mX1);\n\tconst c = 3 * mX1;\n\tconst a2 = a * a;\n\tconst b2 = b * b;\n\tconst d = b / a;\n\tconst e = 3 * b * c / a2 - b2 * b / (a2 * a);\n\tconst w1 = 2 * c / a - b2 / a2;\n\tconst w = w1 * w1 * w1;\n\tconst o = 3 / a;\n\tconst ay = 3 * mY1 - 3 * mY2 + 1;\n\tconst by = mY2 - 2 * mY1;\n\tconst cy = 3 * mY1;\n\tconst X2T = a ? x2t : linearEasing;\n\treturn function BezierEasing(x) {\n\t\tif (x === 0 || x === 1) return x;\n\t\treturn Y(X2T(x, e, o, w, d), ay, by, cy);\n\t};\n}\nconst Easing = {\n\tlinear: linearEasing,\n\tease: bezier(.25, .1, .25, 1),\n\tquad: (t) => t * t,\n\tcubic: (t) => t * t * t,\n\tpoly: (n) => (t) => t ** n,\n\tsin: (t) => 1 - Math.cos(t * Math.PI / 2),\n\tcircle: (t) => 1 - Math.sqrt(1 - t * t),\n\texp: (t) => 2 ** (10 * (t - 1)),\n\telastic: (bounciness = 1) => {\n\t\tconst p = bounciness * Math.PI;\n\t\treturn (t) => 1 - Math.cos(t * Math.PI / 2) ** 3 * Math.cos(t * p);\n\t},\n\tback: (s = 1.70158) => (t) => t * t * ((s + 1) * t - s),\n\tbounce: (t) => {\n\t\tif (t < 1 / 2.75) return 7.5625 * t * t;\n\t\tif (t < 2 / 2.75) {\n\t\t\tconst t2$1 = t - 1.5 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .75;\n\t\t}\n\t\tif (t < 2.5 / 2.75) {\n\t\t\tconst t2$1 = t - 2.25 / 2.75;\n\t\t\treturn 7.5625 * t2$1 * t2$1 + .9375;\n\t\t}\n\t\tconst t2 = t - 2.625 / 2.75;\n\t\treturn 7.5625 * t2 * t2 + .984375;\n\t},\n\tbezier,\n\tin: (fn) => fn,\n\tout: (fn) => (t) => 1 - fn(1 - t),\n\tinOut: (fn) => (t) => t < .5 ? fn(t * 2) / 2 : 1 - fn((1 - t) * 2) / 2\n};\nfunction interpolate(value, inputRange, outputRange, options) {\n\tconst extrapolateLeft = options?.extrapolateLeft ?? \"extend\";\n\tconst extrapolateRight = options?.extrapolateRight ?? \"extend\";\n\tif (inputRange.length !== outputRange.length) throw new Error(\"inputRange and outputRange must have the same length\");\n\tif (inputRange.length < 2) throw new Error(\"inputRange must have at least 2 elements\");\n\tconst firstInput = inputRange[0];\n\tconst lastInput = inputRange[inputRange.length - 1];\n\tif (value < firstInput) {\n\t\tif (extrapolateLeft === \"clamp\") return outputRange[0];\n\t\tif (extrapolateLeft === \"identity\") return value;\n\t}\n\tif (value > lastInput) {\n\t\tif (extrapolateRight === \"clamp\") return outputRange[outputRange.length - 1];\n\t\tif (extrapolateRight === \"identity\") return value;\n\t}\n\tlet i = 1;\n\tfor (; i < inputRange.length - 1; i++) if (value < inputRange[i]) break;\n\tconst x0 = inputRange[i - 1];\n\tconst x1 = inputRange[i];\n\tconst y0 = outputRange[i - 1];\n\tconst y1 = outputRange[i];\n\tif (x0 === x1) return y0;\n\tlet progress = (value - x0) / (x1 - x0);\n\tif (options?.easing) progress = options.easing(progress);\n\treturn y0 + progress * (y1 - y0);\n}\n\n//#endregion\n//#region src/utils.ts\n/**\n* Preloads a font into the browser or headless environment.\n*/\nasync function preloadFont(family, url) {\n\tif (typeof window !== \"undefined\" && typeof FontFace !== \"undefined\") try {\n\t\tconst loadedFace = await new FontFace(family, `url(${url})`).load();\n\t\tdocument.fonts.add(loadedFace);\n\t\tawait document.fonts.ready;\n\t} catch (e) {\n\t\tconsole.warn(`[preloadFont] Failed to load font \"${family}\" from ${url}:`, e);\n\t}\n\telse await registerHeadlessFont(family, url);\n}\n\n//#endregion\n//#region src/preload-fonts.ts\nconst EMOJI_REGEX = /\\p{Extended_Pictographic}/gu;\nlet warnedNoEmojiFont = false;\n/**\n* Loads every font a composition's text uses (for layout and for drawing) and\n* the emoji it draws. The browser preview and the export both call this, so\n* they start each render from the same glyphs.\n*/\nasync function preloadCompositionFonts(media, device, onError = (err, what) => console.warn(`[framefields] ${what}`, err)) {\n\tconst families = /* @__PURE__ */ new Set();\n\tconst emoji = /* @__PURE__ */ new Map();\n\t(function walk(node) {\n\t\tconst op = node.operation;\n\t\tif (op) {\n\t\t\tconst isText = op.op === \"text\" || op.kind === \"text\" || op.op === \"caption\" || op.kind === \"caption\" || typeof op.text === \"string\";\n\t\t\tconst family = op.fontFamily || (isText ? \"Inter\" : \"\");\n\t\t\tif (family) families.add(family);\n\t\t\tif (op.op === \"text\" && typeof op.text === \"string\") {\n\t\t\t\tconst fontSize = op.fontSize ?? 48;\n\t\t\t\tfor (const char of op.text.match(EMOJI_REGEX) ?? []) emoji.set(`${char}-${fontSize}`, fontSize);\n\t\t\t}\n\t\t}\n\t\tfor (const child of node.children ?? []) walk(child);\n\t})(media);\n\tconst tasks = [];\n\tfor (const family of families) {\n\t\tconst url = getHeadlessFontPath(family) ?? GetFontAssetUrl(family);\n\t\ttasks.push(preloadFont(family, url).catch((err) => onError(err, `font \"${family}\" from ${url}`)));\n\t\tif (device) tasks.push(SlugFontCache.preloadSlugFont(device, family, url).catch((err) => onError(err, `Slug font \"${family}\" from ${url}`)));\n\t}\n\tif (device && emoji.size > 0) {\n\t\tif (!SlugFontCache.hasEmojiFont() && !warnedNoEmojiFont) {\n\t\t\twarnedNoEmojiFont = true;\n\t\t\tconsole.warn(\"[framefields] Text uses emoji but no emoji font is registered, so exports draw nothing for them. Register a color emoji font (e.g. Noto Color Emoji) with FontManager.registerEmojiFont(path).\");\n\t\t}\n\t\tfor (const [key, fontSize] of emoji) {\n\t\t\tconst char = key.slice(0, key.lastIndexOf(\"-\"));\n\t\t\ttasks.push(SlugFontCache.preloadEmoji(device, char, fontSize).catch((err) => {\n\t\t\t\tif (SlugFontCache.hasEmojiFont()) onError(err, `emoji \"${char}\"`);\n\t\t\t}));\n\t\t}\n\t}\n\tawait Promise.all(tasks);\n}\n\n//#endregion\n//#region src/spring.ts\nconst defaultSpringConfig = {\n\tdamping: 10,\n\tmass: 1,\n\tstiffness: 100,\n\tovershootClamping: false\n};\nconst advanceCache = {};\nfunction advance({ animation, now, config }) {\n\tconst { toValue, lastTimestamp, current, velocity } = animation;\n\tconst deltaTime = Math.min(now - lastTimestamp, 64);\n\tif (config.damping <= 0) throw new Error(\"Spring damping must be greater than 0, otherwise the spring() animation will never end, causing an infinite loop.\");\n\tif (config.stiffness <= 0) throw new Error(\"Spring stiffness must be greater than 0.\");\n\tif (config.mass <= 0) throw new Error(\"Spring mass must be greater than 0.\");\n\tconst c = config.damping;\n\tconst m = config.mass;\n\tconst k = config.stiffness;\n\tconst cacheKey = [\n\t\ttoValue,\n\t\tlastTimestamp,\n\t\tcurrent,\n\t\tvelocity,\n\t\tc,\n\t\tm,\n\t\tk,\n\t\tnow\n\t].join(\"-\");\n\tif (advanceCache[cacheKey]) return advanceCache[cacheKey];\n\tconst v0 = -velocity;\n\tconst x0 = toValue - current;\n\tconst zeta = c / (2 * Math.sqrt(k * m));\n\tconst omega0 = Math.sqrt(k / m);\n\tconst omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\tconst t = deltaTime / 1e3;\n\tconst sin1 = Math.sin(omega1 * t);\n\tconst cos1 = Math.cos(omega1 * t);\n\tconst underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n\tconst underDampedFrag1 = underDampedEnvelope * (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\tconst underDampedPosition = toValue - underDampedFrag1;\n\tconst underDampedVelocity = zeta * omega0 * underDampedFrag1 - underDampedEnvelope * (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\tconst criticallyDampedEnvelope = Math.exp(-omega0 * t);\n\tconst criticallyDampedPosition = toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\tconst criticallyDampedVelocity = criticallyDampedEnvelope * (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\tconst animationNode = {\n\t\ttoValue,\n\t\tprevPosition: current,\n\t\tlastTimestamp: now,\n\t\tcurrent: zeta < 1 ? underDampedPosition : criticallyDampedPosition,\n\t\tvelocity: zeta < 1 ? underDampedVelocity : criticallyDampedVelocity\n\t};\n\tadvanceCache[cacheKey] = animationNode;\n\treturn animationNode;\n}\nconst calculationCache = {};\nfunction springCalculation({ frame, fps, config = {} }) {\n\tconst from = 0;\n\tconst to = 1;\n\tconst cacheKey = [\n\t\tframe,\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness\n\t].join(\"-\");\n\tif (calculationCache[cacheKey]) return calculationCache[cacheKey];\n\tlet animation = {\n\t\tlastTimestamp: 0,\n\t\tcurrent: from,\n\t\ttoValue: to,\n\t\tvelocity: 0,\n\t\tprevPosition: 0\n\t};\n\tconst frameClamped = Math.max(0, frame);\n\tconst unevenRest = frameClamped % 1;\n\tfor (let f = 0; f <= Math.floor(frameClamped); f++) {\n\t\tif (f === Math.floor(frameClamped)) f += unevenRest;\n\t\tconst time = f / fps * 1e3;\n\t\tanimation = advance({\n\t\t\tanimation,\n\t\t\tnow: time,\n\t\t\tconfig: {\n\t\t\t\t...defaultSpringConfig,\n\t\t\t\t...config\n\t\t\t}\n\t\t});\n\t}\n\tcalculationCache[cacheKey] = animation;\n\treturn animation;\n}\nconst measureCache = /* @__PURE__ */ new Map();\nfunction measureSpring({ fps, config = {}, threshold = .005 }) {\n\tif (typeof threshold !== \"number\") throw new TypeError(`threshold must be a number, got ${threshold}`);\n\tif (threshold === 0) return Infinity;\n\tif (threshold === 1) return 0;\n\tif (Number.isNaN(threshold)) throw new TypeError(\"Threshold is NaN\");\n\tif (!Number.isFinite(threshold)) throw new TypeError(\"Threshold is not finite\");\n\tif (threshold < 0) throw new TypeError(\"Threshold is below 0\");\n\tconst cacheKey = [\n\t\tfps,\n\t\tconfig.damping,\n\t\tconfig.mass,\n\t\tconfig.overshootClamping,\n\t\tconfig.stiffness,\n\t\tthreshold\n\t].join(\"-\");\n\tif (measureCache.has(cacheKey)) return measureCache.get(cacheKey);\n\tlet frame = 0;\n\tlet finishedFrame = 0;\n\tconst calc = () => {\n\t\treturn springCalculation({\n\t\t\tfps,\n\t\t\tframe,\n\t\t\tconfig\n\t\t});\n\t};\n\tlet animation = calc();\n\tconst calcDifference = () => {\n\t\treturn Math.abs(animation.current - animation.toValue);\n\t};\n\tlet difference = calcDifference();\n\twhile (difference >= threshold) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t}\n\tfinishedFrame = frame;\n\tfor (let i = 0; i < 20; i++) {\n\t\tframe++;\n\t\tanimation = calc();\n\t\tdifference = calcDifference();\n\t\tif (difference >= threshold) {\n\t\t\ti = 0;\n\t\t\tfinishedFrame = frame + 1;\n\t\t}\n\t}\n\tmeasureCache.set(cacheKey, finishedFrame);\n\treturn finishedFrame;\n}\nfunction spring({ frame: passedFrame, fps, config = {}, from = 0, to = 1, durationInFrames: passedDurationInFrames, durationRestThreshold, delay = 0, reverse = false }) {\n\tconst needsToCalculateNaturalDuration = reverse || typeof passedDurationInFrames !== \"undefined\";\n\tconst naturalDuration = needsToCalculateNaturalDuration ? measureSpring({\n\t\tfps,\n\t\tconfig,\n\t\tthreshold: durationRestThreshold\n\t}) : void 0;\n\tconst naturalDurationGetter = needsToCalculateNaturalDuration ? { get: () => naturalDuration } : { get: () => {\n\t\tthrow new Error(\"did not calculate natural duration\");\n\t} };\n\tconst delayProcessed = (reverse ? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame : passedFrame) + (reverse ? delay : -delay);\n\tconst durationProcessed = passedDurationInFrames === void 0 ? delayProcessed : delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());\n\tif (passedDurationInFrames && delayProcessed > passedDurationInFrames) return to;\n\tconst spr = springCalculation({\n\t\tfps,\n\t\tframe: durationProcessed,\n\t\tconfig\n\t});\n\tconst inner = config.overshootClamping ? to >= from ? Math.min(spr.current, to) : Math.max(spr.current, to) : spr.current;\n\treturn from === 0 && to === 1 ? inner : interpolate(inner, [0, 1], [from, to]);\n}\n\n//#endregion\n//#region src/text-measurer.ts\nconst cache = /* @__PURE__ */ new Map();\nfunction getCacheKey(text, style) {\n\treturn JSON.stringify({\n\t\ttext,\n\t\t...style\n\t});\n}\n/**\n* Shared text measurer that uses SlugGeometry.measure for all environments.\n*/\nfunction measureText(text, style) {\n\tconst safeText = text ? String(text) : \" \";\n\tconst cacheKey = getCacheKey(safeText, style);\n\tconst cached = cache.get(cacheKey);\n\tif (cached) return cached;\n\tconst fontSize = style.fontSize ?? 48;\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\tconst calculatedLineHeight = style.lineHeight !== void 0 && style.lineHeight < 10 ? style.lineHeight * fontSize : style.lineHeight ?? fontSize * 1.2;\n\tconst slugFont = SlugFontCache.getFont(fontFamily, style.fontWeight, null, void 0, fontSize);\n\tconst padding = style.padding ?? 0;\n\tif (!slugFont) {\n\t\tif (!SlugFontCache.isFailed(fontFamily)) {\n\t\t\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\t\t\tSlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).catch(() => {});\n\t\t}\n\t\tconst lines = safeText.split(\"\\n\");\n\t\tlet totalWrappedLines = 0;\n\t\tconst maxW = style.width !== void 0 ? Math.max(10, style.width - padding * 2) : 0;\n\t\tfor (const line of lines) if (maxW > 0) {\n\t\t\tconst estLineWidth = line.length * fontSize * .55 + letterSpacing * line.length;\n\t\t\tconst wrapCount = Math.max(1, Math.ceil(estLineWidth / maxW));\n\t\t\ttotalWrappedLines += wrapCount;\n\t\t} else totalWrappedLines += 1;\n\t\tconst letterGaps = Math.max(0, safeText.length - 1);\n\t\tconst result$1 = {\n\t\t\twidth: style.width !== void 0 ? style.width : Math.ceil(safeText.length * fontSize * .6 + letterSpacing * letterGaps) + padding * 2,\n\t\t\theight: style.height !== void 0 ? style.height : Math.ceil(totalWrappedLines * calculatedLineHeight) + padding * 2\n\t\t};\n\t\tcache.set(cacheKey, result$1);\n\t\treturn result$1;\n\t}\n\tconst measured = SlugGeometry.measure(safeText, slugFont, fontSize, letterSpacing, calculatedLineHeight, style.width !== void 0 ? Math.max(0, style.width - padding * 2) : void 0, style.spans, style.direction);\n\tconst result = {\n\t\twidth: style.width !== void 0 && !style.keepNaturalWidth ? style.width : Math.ceil(measured.width) + padding * 2,\n\t\theight: style.height !== void 0 ? style.height : Math.ceil(measured.height) + padding * 2\n\t};\n\tcache.set(cacheKey, result);\n\treturn result;\n}\n/**\n* Async variant of measureText. Preloads the Slug font and yields to the browser.\n*/\nfunction measureTextAsync(text, style) {\n\tlet fontFamily = style.fontFamily ?? \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) fontFamily = \"Inter\";\n\tif (SlugFontCache.isFailed(fontFamily)) return Promise.resolve(measureText(text, style));\n\tconst fontUrl = GetFontAssetUrl(fontFamily);\n\treturn SlugFontCache.preloadSlugFont(null, fontFamily, fontUrl).then(() => measureText(text, style)).catch(() => measureText(text, style));\n}\n\n//#endregion\nexport { Easing, bezier, computeStrokeRect, interpolate, mapBlendModeToSkia, measureSpring, measureText, measureTextAsync, preloadCompositionFonts, preloadFont, requiresIsolation, spring, springCalculation };\n//# sourceMappingURL=index.mjs.map","import { DEFAULT_DURATION_MS, getActiveMediaMetadata, resolveMediaMimeType } from \"@framefields/core\";\nimport { resolveMediaSourceUrl } from \"@framefields/client-utils\";\nimport { interpolate, spring } from \"@framefields/renderers\";\n\n//#region src/utils/apply-operations.ts\n/**\n* Compute render parameters for the CURRENT node only — does NOT recurse into\n* children. Each node in the VirtualMedia tree is responsible for exactly its\n* own operation; `SingleClipComposition` drives traversal via React recursion.\n*\n* This is the correct function to use inside the renderer.\n*/\nfunction computeRenderParams(vv) {\n\tconst op = vv.operation;\n\tconst baseMeta = getActiveMediaMetadata(vv);\n\tconst params = {\n\t\tsourceUrl: void 0,\n\t\ttrimStartSec: 0,\n\t\ttrimEndSec: null,\n\t\tspeed: 1,\n\t\tcropRegion: null,\n\t\tflipH: false,\n\t\tflipV: false,\n\t\trotation: 0,\n\t\teffectiveDurationSec: 0,\n\t\tmimeType: resolveMediaMimeType(vv) || null\n\t};\n\tswitch (op.op) {\n\t\tcase \"text\":\n\t\t\tparams.sourceUrl = void 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tparams.sourceUrl = resolveMediaSourceUrl(vv);\n\t\t\tbreak;\n\t}\n\tconst sourceDurationSec = (baseMeta?.durationMs ?? 0) / 1e3;\n\tparams.effectiveDurationSec = ((params.trimEndSec ?? sourceDurationSec) - params.trimStartSec) / params.speed;\n\treturn params;\n}\n\n//#endregion\n//#region src/utils/timing.ts\nfunction framesToSeconds(frames, fps) {\n\treturn frames / fps;\n}\nfunction secondsToFrames(seconds, fps) {\n\treturn Math.round(seconds * fps);\n}\nfunction formatTimecode(seconds) {\n\tconst mins = Math.floor(seconds / 60);\n\tconst secs = Math.floor(seconds % 60);\n\tconst ms = Math.floor(seconds % 1 * 100);\n\treturn `${mins.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}.${ms.toString().padStart(2, \"0\")}`;\n}\n\n//#endregion\n//#region src/utils/layer-logic.ts\nconst isStaticVisualMedia = (type) => type === \"Image\" || type === \"SVG\" || type === \"Text\";\nconst resolveLayerDuration = (layerDurationInMS, metaDurationMs, defaultDuration = DEFAULT_DURATION_MS, type) => {\n\tif (type === \"Caption\") return metaDurationMs && metaDurationMs > 0 ? metaDurationMs : layerDurationInMS || defaultDuration;\n\tconst isStatic = isStaticVisualMedia(type);\n\tif (layerDurationInMS && metaDurationMs && !isStatic) return Math.min(layerDurationInMS, metaDurationMs);\n\treturn layerDurationInMS || metaDurationMs || defaultDuration;\n};\nconst calculateLayerTransform = (layer, frame, fps, viewport) => {\n\tconst relativeFrame = frame - (layer.startFrame ?? 0);\n\tlet x = layer.x ?? 0;\n\tlet y = layer.y ?? 0;\n\tlet scale = layer.scale ?? 1;\n\tlet rotation = layer.rotation ?? 0;\n\tlet opacity = layer.opacity ?? 1;\n\tconst volume = layer.volume ?? 1;\n\tconst layerDurationMs = resolveLayerDuration(layer.durationInMS, layer.virtualMedia?.metadata?.durationMs ?? void 0, DEFAULT_DURATION_MS, layer.type);\n\tconst duration = Math.round(layerDurationMs / 1e3 * fps);\n\tconst animations = layer.type === \"Text\" || layer.type === \"Caption\" ? [] : layer.animations ?? [];\n\tif (animations.length === 0) return {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n\tanimations.forEach((anim) => {\n\t\tconst durFrames = anim.value * fps;\n\t\tconst isOut = anim.type.includes(\"-out\");\n\t\tconst startAnimFrame = isOut ? duration - durFrames : 0;\n\t\tconst endAnimFrame = isOut ? duration : durFrames;\n\t\tif (relativeFrame < startAnimFrame || relativeFrame > endAnimFrame) return;\n\t\tconst progress = interpolate(relativeFrame, [startAnimFrame, endAnimFrame], [0, 1], {\n\t\t\textrapolateLeft: \"clamp\",\n\t\t\textrapolateRight: \"clamp\"\n\t\t});\n\t\tswitch (anim.type) {\n\t\t\tcase \"fade-in\":\n\t\t\t\topacity *= progress;\n\t\t\t\tbreak;\n\t\t\tcase \"fade-out\":\n\t\t\t\topacity *= 1 - progress;\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-left\":\n\t\t\t\tx += -1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-right\":\n\t\t\t\tx += 1 * viewport.w * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-top\":\n\t\t\t\ty += -1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"slide-in-bottom\":\n\t\t\t\ty += 1 * viewport.h * (1 - progress);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-in\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [0, 1]);\n\t\t\t\tbreak;\n\t\t\tcase \"zoom-out\":\n\t\t\t\tscale *= interpolate(progress, [0, 1], [1, 0]);\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-cw\":\n\t\t\t\trotation += 360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"rotate-ccw\":\n\t\t\t\trotation += -360 * progress;\n\t\t\t\tbreak;\n\t\t\tcase \"bounce\": {\n\t\t\t\tconst bounceVal = spring({\n\t\t\t\t\tframe: relativeFrame - startAnimFrame,\n\t\t\t\t\tfps,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdamping: 10,\n\t\t\t\t\t\tmass: .5,\n\t\t\t\t\t\tstiffness: 100\n\t\t\t\t\t},\n\t\t\t\t\tdurationInFrames: durFrames\n\t\t\t\t});\n\t\t\t\tscale *= bounceVal;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"shake\":\n\t\t\t\tx += 20 * Math.sin(relativeFrame * 10 * 2 * Math.PI / durFrames) * (1 - progress);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\treturn {\n\t\tx,\n\t\ty,\n\t\tscale,\n\t\trotation,\n\t\topacity,\n\t\tvolume\n\t};\n};\n\n//#endregion\nexport { framesToSeconds as a, formatTimecode as i, isStaticVisualMedia as n, secondsToFrames as o, resolveLayerDuration as r, computeRenderParams as s, calculateLayerTransform as t };\n//# sourceMappingURL=layer-logic-C4ls-aB4.mjs.map","import { a as framesToSeconds, i as formatTimecode, n as isStaticVisualMedia, o as secondsToFrames, r as resolveLayerDuration, s as computeRenderParams, t as calculateLayerTransform } from \"./layer-logic-C4ls-aB4.mjs\";\nimport { getActiveMediaMetadata, getMediaType, isSignal, updateClockSignals } from \"@framefields/core\";\nimport { audioRegistry, webgpuRegistry } from \"@framefields/node-sdk\";\nimport { drawCaptionNode, drawGifNode, drawImageNode, drawLottieNode, drawParagraphNode, drawSignalNode, drawSvgNode, drawVideoNode, inputStore, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { AudioSampleSink } from \"mediabunny\";\n\n//#region src/compositions/canvas-composition.ts\nconst segmentRangeCache = /* @__PURE__ */ new WeakMap();\nfunction getCachedSegmentRanges(segments, fps) {\n\tconst cached = segmentRangeCache.get(segments);\n\tif (cached && cached.fps === fps) return cached.ranges;\n\tlet currentStart = 0;\n\tconst ranges = segments.map((seg) => {\n\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\tconst start = currentStart;\n\t\tcurrentStart += durFrames;\n\t\treturn {\n\t\t\tseg,\n\t\t\tstart,\n\t\t\tduration: durFrames\n\t\t};\n\t});\n\tsegmentRangeCache.set(segments, {\n\t\tfps,\n\t\tranges\n\t});\n\treturn ranges;\n}\nconst frameCtxPool = [];\nfunction acquireFrameContext() {\n\treturn frameCtxPool.pop() ?? {};\n}\n/**\n* Effect operations carry every config field as a signal. Hand node renderers\n* the plain value for this frame (nested objects/arrays included), keeping only\n* GPU-bound signals intact since those are consumed as textures.\n*/\nfunction resolveSignalOperation(virtualMedia, frameCtx) {\n\tconst op = virtualMedia.operation;\n\tconst resolved = { ...op };\n\tfor (const [key, sig] of Object.entries(op.signals)) if (isSignal(sig) && !sig.gpuBinding) resolved[key] = sig.get(frameCtx);\n\treturn {\n\t\t...virtualMedia,\n\t\toperation: resolved\n\t};\n}\n/** The paragraph props a text operation maps to, shared by both text paths. */\nfunction paragraphPropsFromTextOp(opText, props, timing) {\n\treturn {\n\t\ttext: opText.text || \"\",\n\t\tdstRect: {\n\t\t\tx: Number(opText.x ?? 0),\n\t\t\ty: Number(opText.y ?? 0),\n\t\t\twidth: Number(opText.width ?? timing.containerWidth),\n\t\t\theight: Number(opText.height ?? timing.containerHeight)\n\t\t},\n\t\tfontFamily: opText.fontFamily,\n\t\tfontSize: Number(opText.fontSize ?? 48),\n\t\tcolor: opText.fill ?? opText.color ?? \"white\",\n\t\twidth: opText.width ? Number(opText.width) : void 0,\n\t\theight: opText.height ? Number(opText.height) : void 0,\n\t\tlineHeight: Number(opText.lineHeight ?? 1.2),\n\t\talign: opText.align,\n\t\tdirection: opText.direction,\n\t\tverticalAlign: opText.verticalAlign,\n\t\tfontWeight: opText.fontWeight,\n\t\tfontStyle: opText.fontStyle,\n\t\tletterSpacing: opText.letterSpacing,\n\t\tshadows: opText.shadows,\n\t\ttextBackgroundColor: opText.textBackgroundColor,\n\t\tpadding: opText.padding != null ? Number(opText.padding) : void 0,\n\t\tstroke: opText.stroke,\n\t\tstrokeWidth: opText.strokeWidth ?? opText.strokeThickness ? Number(opText.strokeWidth ?? opText.strokeThickness) : void 0,\n\t\tstrokeAlign: opText.strokeAlign,\n\t\topacity: Number(opText.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\tisHeadless: props.isHeadless,\n\t\tanimation: opText.animation ?? opText.textAnimation,\n\t\tanimators: opText.animators,\n\t\tpathOptions: opText.pathOptions,\n\t\ttypewriter: opText.typewriter,\n\t\tmarquee: opText.marquee,\n\t\tsignals: props.signals ?? opText.signals,\n\t\tfirstMargin: opText.firstMargin != null ? Number(opText.firstMargin) : void 0,\n\t\tlastMargin: opText.lastMargin != null ? Number(opText.lastMargin) : void 0,\n\t\tbaselineShift: opText.baselineShift != null ? Number(opText.baselineShift) : void 0,\n\t\tframe: timing.frame,\n\t\tfps: timing.fps,\n\t\tdurationMs: timing.durationMs,\n\t\telapsedMs: timing.elapsedMs,\n\t\tisVideoMode: props.isVideoMode\n\t};\n}\nasync function drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, virtualMedia, props, inheritedSeekOffset = 0, inheritedClockOffset = 0) {\n\tconst fps = props.fps ?? 24;\n\tconst op = virtualMedia.operation;\n\tif (!op) return;\n\tconst isCompositor = op.op === \"Compositor\";\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst segments = op.timeline?.segments || [];\n\tconst localFrame = frame - (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\tconst isTimelineProvider = op.timeline !== void 0 || op.startFrame !== void 0 || op.op === \"compose\";\n\tconst resolvedDurationMs = isTimelineProvider ? getActiveMediaMetadata(virtualMedia)?.durationMs ?? props.durationMs ?? void 0 : props.durationMs ?? getActiveMediaMetadata(virtualMedia)?.durationMs ?? void 0;\n\tif (!(op.op === \"source\" || op.op === \"text\" || op.op === \"caption\")) updateClockSignals(compositionFrame, fps, resolvedDurationMs);\n\tconst frameCtx = acquireFrameContext();\n\tframeCtx.frame = compositionFrame;\n\tframeCtx.fps = fps;\n\tframeCtx.time = fps > 0 ? compositionFrame / fps : 0;\n\tframeCtx.duration = (resolvedDurationMs ?? 0) / 1e3;\n\tframeCtx.durationMs = resolvedDurationMs ?? 0;\n\tframeCtx.progress = resolvedDurationMs && resolvedDurationMs > 0 ? Math.max(0, Math.min(1, compositionFrame / fps * 1e3 / resolvedDurationMs)) : 0;\n\tframeCtx.deltaTime = fps > 0 ? 1 / fps : 0;\n\tconst resolvedElapsedMs = isTimelineProvider ? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0) ?? props.elapsedMs : props.elapsedMs ?? (localFrame !== void 0 && fps !== void 0 ? localFrame / fps * 1e3 : void 0);\n\tconst effectiveLocalFrame = localFrame + Math.round(inheritedSeekOffset * fps);\n\tlet activeSeg = null;\n\tlet windowStartFrame = 0;\n\tif (segments.length > 0) {\n\t\tconst active = getCachedSegmentRanges(segments, fps).find(({ start, duration }) => effectiveLocalFrame >= start && effectiveLocalFrame < start + duration);\n\t\tif (active) {\n\t\t\tactiveSeg = active.seg;\n\t\t\twindowStartFrame = active.start;\n\t\t} else return;\n\t}\n\tconst segmentLocalFrame = localFrame - windowStartFrame;\n\tconst accumulatedSeekOffsetSec = inheritedSeekOffset + (activeSeg ? activeSeg.startSec - windowStartFrame / fps : 0);\n\tconst accumulatedClockOffsetSec = inheritedClockOffset + windowStartFrame / fps;\n\tif (typeof op.onRequestFrame === \"function\") {\n\t\tconst pending = op.onRequestFrame(frameCtx);\n\t\tif (pending && typeof pending.then === \"function\") await pending;\n\t} else if (op.effect && typeof op.effect.notifyFrame === \"function\") op.effect.notifyFrame(frameCtx);\n\tconst CustomRenderer = webgpuRegistry.get(op.op);\n\tif (CustomRenderer) {\n\t\tif (op.signals) virtualMedia = resolveSignalOperation(virtualMedia, frameCtx);\n\t\tconst inputs = op?.inputs;\n\t\tif (inputs) {\n\t\t\tfor (const entry of Object.values(inputs)) if (entry?.connectionValid && entry?.outputItem?.type === \"LUT\") {\n\t\t\t\tconst lutVirtualMedia = entry.outputItem.data;\n\t\t\t\tif (lutVirtualMedia && typeof lutVirtualMedia === \"object\" && lutVirtualMedia.operation) {\n\t\t\t\t\tconst lutW = lutVirtualMedia.metadata?.width ?? targetWidth;\n\t\t\t\t\tconst lutH = lutVirtualMedia.metadata?.height ?? targetHeight;\n\t\t\t\t\tconst dummyTex = ctx.renderer.getTemporaryTexture(lutW, lutH);\n\t\t\t\t\tawait drawCompositionTree(ctx, encoder, dummyTex.createView(), dummyTex, lutW, lutH, lutVirtualMedia, {\n\t\t\t\t\t\t...props,\n\t\t\t\t\t\tcompositionFrame,\n\t\t\t\t\t\tvirtualMedia: lutVirtualMedia\n\t\t\t\t\t}, accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t\t}\n\t\t\t} else if (entry?.connectionValid && entry?.outputItem?.type === \"Signal\") {\n\t\t\t\tconst sigData = entry.outputItem.data;\n\t\t\t\tif (sigData && typeof sigData === \"object\") await signalRegistry.ensureAudioSourcesExtracted(ctx.device, sigData.signalConfig ?? sigData, fps, props.renderId);\n\t\t\t}\n\t\t}\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tlet passEnded = false;\n\t\tconst originalEnd = pass.end.bind(pass);\n\t\tpass.end = () => {\n\t\t\tif (!passEnded) {\n\t\t\t\toriginalEnd();\n\t\t\t\tpassEnded = true;\n\t\t\t}\n\t\t};\n\t\tconst renderArgs = {\n\t\t\tctx,\n\t\t\tencoder,\n\t\t\tpass,\n\t\t\ttargetView,\n\t\t\ttargetTexture,\n\t\t\ttargetWidth,\n\t\t\ttargetHeight,\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tcompositionFrame,\n\t\t\t\tvirtualMedia,\n\t\t\t\tinheritedSeekOffset: accumulatedSeekOffsetSec,\n\t\t\t\tinheritedClockOffset: accumulatedClockOffsetSec,\n\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t},\n\t\t\tdrawChild: async (child, overrides, targetViewOverride, targetTextureOverride, targetWidthOverride, targetHeightOverride) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, targetViewOverride ?? targetView, targetTextureOverride ?? targetTexture, targetWidthOverride ?? targetWidth, targetHeightOverride ?? targetHeight, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\tvirtualMedia: child,\n\t\t\t\t\t...overrides,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...overrides?.excludeTextures || [],\n\t\t\t\t\t\ttargetTextureOverride ?? targetTexture\n\t\t\t\t\t]\n\t\t\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t\t\t}\n\t\t};\n\t\tawait CustomRenderer(renderArgs);\n\t\trenderArgs.pass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"LUT\") return;\n\tif (op.op === \"Signal\" || op.op === \"SignalMath\" || op.dataType === \"Signal\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tawait drawSignalNode(ctx, encoder, pass, {\n\t\t\tnodeId: op.nodeId || op.signalConfig?.nodeId || props.renderId,\n\t\t\tfunc: op.func,\n\t\t\tamplitude: Number(op.amplitude ?? 1),\n\t\t\tfrequency: Number(op.frequency ?? 1),\n\t\t\tphase: Number(op.phase ?? 0),\n\t\t\toffset: Number(op.offset ?? 0),\n\t\t\tsignalConfig: {\n\t\t\t\t...op.signalConfig,\n\t\t\t\t...op\n\t\t\t},\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tdurationMs: resolvedDurationMs ?? 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight,\n\t\t\tdrawChild: async (child, childProps, childView, childTex, childW, childH) => {\n\t\t\t\tawait drawCompositionTree(ctx, encoder, childView, childTex, childW, childH, child, {\n\t\t\t\t\t...props,\n\t\t\t\t\tcompositionFrame,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\t\t\t...childProps,\n\t\t\t\t\texcludeTextures: [\n\t\t\t\t\t\t...props.excludeTextures || [],\n\t\t\t\t\t\t...childProps?.excludeTextures || [],\n\t\t\t\t\t\tchildTex\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tpass.end();\n\t\treturn;\n\t}\n\tif (op.op === \"source\" || op.op === \"text\" || op.op === \"caption\") {\n\t\tconst pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tif (op.op === \"source\") {\n\t\t\tconst mediaType = getMediaType(virtualMedia);\n\t\t\tconst params = computeRenderParams(virtualMedia);\n\t\t\tif (params.sourceUrl) {\n\t\t\t\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\t\t\t\tconst containerHeight = props.containerHeight ?? ctx.surface.height;\n\t\t\t\tif (mediaType === \"Image\") await drawImageNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"SVG\") await drawSvgNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\topacity: Number(op.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Lottie\") await drawLottieNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\tdpr: typeof props.dpr === \"number\" ? props.dpr : typeof op.dpr === \"number\" ? op.dpr : void 0\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"GIF\") await drawGifNode(ctx, pass, {\n\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\tdstRect: {\n\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t},\n\t\t\t\t\tframe: segmentLocalFrame + Math.round(accumulatedSeekOffsetSec * fps),\n\t\t\t\t\tfps,\n\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\tisHeadless: props.isHeadless\n\t\t\t\t});\n\t\t\t\telse if (mediaType === \"Text\") {\n\t\t\t\t\tconst opText = { ...op };\n\t\t\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\t\t\t...paragraphPropsFromTextOp(opText, props, {\n\t\t\t\t\t\t\tcontainerWidth,\n\t\t\t\t\t\t\tcontainerHeight,\n\t\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\t\tfps,\n\t\t\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tborderRadius: opText.borderRadius != null ? Number(opText.borderRadius) : void 0,\n\t\t\t\t\t\ttextProgress: opText.textProgress != null ? Number(opText.textProgress) : void 0\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Video\") {\n\t\t\t\t\tconst finalPlaybackRate = Math.max(.01, (Number(props.playbackRateOverride) || 1) * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(props.trimStartOverride) || 0) + (Number(params.trimStartSec) || 0) + accumulatedSeekOffsetSec);\n\t\t\t\t\tconst rawTimestampSec = segmentLocalFrame / fps * finalPlaybackRate + effectiveTrimSec;\n\t\t\t\t\tconst timestampSec = Math.max(0, Number.isFinite(rawTimestampSec) ? rawTimestampSec : 0);\n\t\t\t\t\tawait drawVideoNode(ctx, pass, {\n\t\t\t\t\t\tnodeId: props.renderId,\n\t\t\t\t\t\tframeKey: `${props.renderId ?? \"video\"}-${params.sourceUrl}-${Math.round(timestampSec * fps)}`,\n\t\t\t\t\t\tsourceUrl: params.sourceUrl,\n\t\t\t\t\t\ttimestampSec,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\topacity: Number(op.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisPlaying: props.isPlaying,\n\t\t\t\t\t\tforceWait: props.forceWait\n\t\t\t\t\t});\n\t\t\t\t} else if (mediaType === \"Caption\") {\n\t\t\t\t\tconst opCap = {\n\t\t\t\t\t\t...op,\n\t\t\t\t\t\t...props\n\t\t\t\t\t};\n\t\t\t\t\tawait drawCaptionNode(ctx, pass, {\n\t\t\t\t\t\trenderId: props.renderId,\n\t\t\t\t\t\tsrc: params.sourceUrl,\n\t\t\t\t\t\tdstRect: {\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\twidth: containerWidth,\n\t\t\t\t\t\t\theight: containerHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\tframe: localFrame,\n\t\t\t\t\t\tfps,\n\t\t\t\t\t\tfontFamily: opCap.fontFamily,\n\t\t\t\t\t\tfontSize: Number(opCap.fontSize ?? 48),\n\t\t\t\t\t\tcolor: opCap.fill ?? opCap.color ?? \"white\",\n\t\t\t\t\t\tlineHeight: Number(opCap.lineHeight ?? 1.2),\n\t\t\t\t\t\talign: opCap.align ?? \"center\",\n\t\t\t\t\t\tdirection: opCap.direction,\n\t\t\t\t\t\ttextAlignVertical: opCap.verticalAlign ?? opCap.textAlignVertical,\n\t\t\t\t\t\tfontWeight: opCap.fontWeight,\n\t\t\t\t\t\tfontStyle: opCap.fontStyle,\n\t\t\t\t\t\tletterSpacing: opCap.letterSpacing,\n\t\t\t\t\t\tshadows: opCap.shadows,\n\t\t\t\t\t\ttextBackgroundColor: opCap.background ?? opCap.textBackgroundColor,\n\t\t\t\t\t\tborderRadius: (opCap.borderRadius ?? opCap.strokeRadius) != null ? Number(opCap.borderRadius ?? opCap.strokeRadius) : void 0,\n\t\t\t\t\t\tstrokeRadius: (opCap.strokeRadius ?? opCap.borderRadius) != null ? Number(opCap.strokeRadius ?? opCap.borderRadius) : void 0,\n\t\t\t\t\t\tstroke: opCap.stroke,\n\t\t\t\t\t\tstrokeWidth: (opCap.strokeWidth ?? opCap.strokeThickness) != null ? Number(opCap.strokeWidth ?? opCap.strokeThickness) : void 0,\n\t\t\t\t\t\tmaxWidth: opCap.maxWidth,\n\t\t\t\t\t\tpadding: opCap.padding != null ? Number(opCap.padding) : void 0,\n\t\t\t\t\t\topacity: Number(opCap.opacity ?? 1) * Number(props.opacity ?? 1),\n\t\t\t\t\t\tisHeadless: props.isHeadless,\n\t\t\t\t\t\tisVideoMode: props.isVideoMode\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (op.op === \"text\") {\n\t\t\tconst opText = { ...op };\n\t\t\tdrawParagraphNode(ctx, pass, {\n\t\t\t\t...paragraphPropsFromTextOp(opText, props, {\n\t\t\t\t\tcontainerWidth: props.containerWidth ?? ctx.surface.width,\n\t\t\t\t\tcontainerHeight: props.containerHeight ?? ctx.surface.height,\n\t\t\t\t\tframe: localFrame,\n\t\t\t\t\tfps,\n\t\t\t\t\tdurationMs: resolvedDurationMs,\n\t\t\t\t\telapsedMs: resolvedElapsedMs\n\t\t\t\t}),\n\t\t\t\trenderId: props.renderId,\n\t\t\t\tspans: opText.spans,\n\t\t\t\tborderRadius: (opText.borderRadius ?? opText.strokeRadius) != null ? Number(opText.borderRadius ?? opText.strokeRadius) : void 0,\n\t\t\t\tstrokeRadius: (opText.strokeRadius ?? opText.borderRadius) != null ? Number(opText.strokeRadius ?? opText.borderRadius) : void 0\n\t\t\t});\n\t\t}\n\t\tpass.end();\n\t}\n\tif (virtualMedia.children && virtualMedia.children.length > 0) for (let i = 0; i < virtualMedia.children.length; i++) {\n\t\tconst child = virtualMedia.children[i];\n\t\tif (child) await drawCompositionTree(ctx, encoder, targetView, targetTexture, targetWidth, targetHeight, child, {\n\t\t\t...props,\n\t\t\tcompositionFrame,\n\t\t\tdurationMs: resolvedDurationMs,\n\t\t\telapsedMs: resolvedElapsedMs,\n\t\t\tvirtualMedia: child,\n\t\t\trenderId: `${props.renderId}-c${i}`\n\t\t}, isCompositor ? 0 : accumulatedSeekOffsetSec, accumulatedClockOffsetSec);\n\t}\n}\n\n//#endregion\n//#region src/compositions/composition-state.ts\nconst DEFAULT_STATE = {\n\tframe: 0,\n\tfps: 30,\n\tisPlaying: false\n};\nvar CompositionStateStore = class {\n\tstates = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Map();\n\tsetState(key, frame, fps, isPlaying) {\n\t\tconst current = this.states.get(key);\n\t\tconst resolvedPlaying = isPlaying !== void 0 ? isPlaying : current?.isPlaying ?? false;\n\t\tif (current?.frame === frame && current?.fps === fps && current?.isPlaying === resolvedPlaying) return;\n\t\tthis.states.set(key, {\n\t\t\tframe,\n\t\t\tfps,\n\t\t\tisPlaying: resolvedPlaying\n\t\t});\n\t\tthis.notify(key);\n\t}\n\tgetState(key) {\n\t\tif (this.states.has(key)) return this.states.get(key);\n\t\tfor (const [storeKey, value] of this.states.entries()) if (key.startsWith(storeKey)) return value;\n\t\treturn DEFAULT_STATE;\n\t}\n\tsubscribe(key, listener) {\n\t\tif (!this.listeners.has(key)) this.listeners.set(key, /* @__PURE__ */ new Set());\n\t\tthis.listeners.get(key).add(listener);\n\t\treturn () => {\n\t\t\tconst set = this.listeners.get(key);\n\t\t\tset?.delete(listener);\n\t\t\tif (set?.size === 0) {\n\t\t\t\tthis.listeners.delete(key);\n\t\t\t\tthis.states.delete(key);\n\t\t\t}\n\t\t};\n\t}\n\tclearKey(key) {\n\t\tthis.states.delete(key);\n\t}\n\tnotify(key) {\n\t\tfor (const [listenerKey, set] of this.listeners.entries()) if (listenerKey === key || listenerKey.startsWith(key)) set.forEach((l) => l());\n\t}\n};\nconst compositionStateStore = new CompositionStateStore();\n\n//#endregion\n//#region src/utils/normalization.ts\n/**\n* normalizeTimeline recurses through the virtual media tree and \"absorbs\"\n* generic timeline-shifting operations into standard properties\n* of their children.\n*/\nfunction normalizeTimeline(vv, fps, context = { timeOffsetSec: 0 }) {\n\tif (!vv) return vv;\n\tconst { operation, metadata = {}, children = [] } = vv;\n\tconst { timeOffsetSec, durationLimitMs } = context;\n\tif (!operation) return {\n\t\t...vv,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, context))\n\t};\n\tconst timeline = operation.timeline;\n\tconst segments = timeline?.segments || [];\n\tlet totalDurationMs = getActiveMediaMetadata(vv)?.durationMs ?? 0;\n\tif (segments.length > 0) {\n\t\tconst totalSegmentsFrames = segments.reduce((acc, seg) => {\n\t\t\tconst durSec = seg.endSec != null ? seg.endSec - seg.startSec : 0;\n\t\t\treturn acc + Math.max(1, Math.round(durSec * fps));\n\t\t}, 0);\n\t\tif (totalSegmentsFrames > 0) totalDurationMs = totalSegmentsFrames / fps * 1e3;\n\t}\n\tconst newOperation = { ...operation };\n\tconst rawStartFrame = timeline?.startFrame ?? newOperation.startFrame;\n\tif (typeof rawStartFrame === \"number\") newOperation.startFrame = rawStartFrame - secondsToFrames(timeOffsetSec, fps);\n\tconst newMetadata = {\n\t\t...metadata,\n\t\tdurationMs: totalDurationMs\n\t};\n\tconst childContext = typeof rawStartFrame === \"number\" || newOperation.op === \"compose\" ? {\n\t\ttimeOffsetSec: 0,\n\t\tdurationLimitMs: void 0\n\t} : {\n\t\ttimeOffsetSec,\n\t\tdurationLimitMs\n\t};\n\treturn {\n\t\tmetadata: newMetadata,\n\t\toperation: newOperation,\n\t\tchildren: (children || []).map((child) => normalizeTimeline(child, fps, childContext))\n\t};\n}\n\n//#endregion\n//#region src/utils/audio-extractor.ts\nconst verbose = typeof process !== \"undefined\" && /^(debug|trace)$/i.test(process.env?.LOG_LEVEL ?? \"\");\nconst mediaLogger = {\n\tdebug: (msg, ...args) => {\n\t\tif (!verbose) return;\n\t\tif (typeof msg === \"object\" && msg !== null) console.info(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.info(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\twarn: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.warn(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.warn(`[AudioExtractor] ${msg}`, ...args);\n\t},\n\terror: (msg, ...args) => {\n\t\tif (typeof msg === \"object\" && msg !== null) console.error(\"[AudioExtractor]\", msg, ...args);\n\t\telse console.error(`[AudioExtractor] ${msg}`, ...args);\n\t}\n};\nconst yieldToMain = () => {\n\tif (typeof window === \"undefined\") return Promise.resolve();\n\tconst sched = globalThis.scheduler;\n\treturn typeof sched?.yield === \"function\" ? sched.yield() : new Promise((resolve) => setTimeout(resolve, 0));\n};\nconst waitForDelayRender = async (timeoutMs = 3e4) => {\n\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\tconst start = Date.now();\n\treturn new Promise((resolve) => {\n\t\tconst check = () => {\n\t\t\tconst browserHandles = typeof window !== \"undefined\" && window.renderer_delayRenderHandles ? window.renderer_delayRenderHandles : [];\n\t\t\tconst globalDelays = typeof globalThis !== \"undefined\" ? globalThis.__GATEWAI_DELAYS__ : null;\n\t\t\tconst hasBrowserDelays = browserHandles.length > 0;\n\t\t\tconst hasGlobalDelays = globalDelays instanceof Set && globalDelays.size > 0;\n\t\t\tif (!hasBrowserDelays && !hasGlobalDelays) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (Date.now() - start > timeoutMs) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] waitForDelayRender timed out waiting for handles: ${JSON.stringify({\n\t\t\t\t\tbrowserHandles,\n\t\t\t\t\tglobalDelays: globalDelays ? Array.from(globalDelays) : []\n\t\t\t\t})}`);\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTimeout(check, 50);\n\t\t};\n\t\tcheck();\n\t});\n};\n/**\n* Decodes all audio samples from a given source URL into raw Float32 mono/stereo channel buffers.\n*/\nasync function decodeAudioSource(url) {\n\tconst decoded = await decodeAudioRange(url);\n\treturn decoded ? {\n\t\tchannels: decoded.channels,\n\t\tsampleRate: decoded.sampleRate\n\t} : null;\n}\n/**\n* Seconds decoded ahead of a requested range: a compressed stream (MP3, AAC)\n* decoded from mid-file only matches a whole-file decode once the decoder has\n* warmed up on the packets before it.\n*/\nconst DECODE_PREROLL_SEC = .5;\n/**\n* Decodes [range.startSec, range.endSec) of a source (the whole file without\n* a range), so a short clip from a long file decodes only what it plays.\n*/\nasync function decodeAudioRange(url, range) {\n\tmediaLogger.debug(`[AudioExtractor] decodeAudioSource started for url: ${url}`);\n\ttry {\n\t\tif (typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && !(typeof process !== \"undefined\" && process.versions && process.versions.node)) {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Browser detected. Fetching arrayBuffer for ${url}...`);\n\t\t\tconst AudioContextClass = window.AudioContext || window.webkitAudioContext;\n\t\t\tif (!AudioContextClass) throw new Error(\"AudioContext is not supported in this browser\");\n\t\t\tconst audioCtx = new AudioContextClass();\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(url);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetch response status for ${url}: ${response.status} (${response.statusText})`);\n\t\t\t\tif (!response.ok) throw new Error(`Failed to fetch audio source: ${response.statusText}`);\n\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Fetched ${arrayBuffer.byteLength} bytes. Decoding audio data...`);\n\t\t\t\tconst audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] Decoded successfully: ${audioBuffer.numberOfChannels} channels, sampleRate: ${audioBuffer.sampleRate}, duration: ${audioBuffer.duration}s`);\n\t\t\t\tconst channels = [];\n\t\t\t\tfor (let c = 0; c < audioBuffer.numberOfChannels; c++) channels.push(new Float32Array(audioBuffer.getChannelData(c)));\n\t\t\t\treturn {\n\t\t\t\t\tchannels,\n\t\t\t\t\tsampleRate: audioBuffer.sampleRate,\n\t\t\t\t\tstartIndex: 0,\n\t\t\t\t\tvalidFromSec: 0,\n\t\t\t\t\tvalidToSec: Number.POSITIVE_INFINITY\n\t\t\t\t};\n\t\t\t} finally {\n\t\t\t\taudioCtx.close();\n\t\t\t\tmediaLogger.debug(`[AudioExtractor] AudioContext closed for ${url}`);\n\t\t\t}\n\t\t}\n\t\tlet inputAcquired = false;\n\t\ttry {\n\t\t\tmediaLogger.debug(`[AudioExtractor] Server / Node.js detected. Acquiring from inputStore for ${url}...`);\n\t\t\tconst input = await inputStore.acquire(url);\n\t\t\tinputAcquired = true;\n\t\t\tmediaLogger.debug(`[AudioExtractor] inputStore acquired. Retrieving primary audio track...`);\n\t\t\tconst track = await input.getPrimaryAudioTrack();\n\t\t\tif (!track) {\n\t\t\t\tmediaLogger.warn(`[AudioExtractor] No primary audio track found in input for ${url}`);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst sink = new AudioSampleSink(track);\n\t\t\tconst decodeFromSec = range ? Math.max(0, range.startSec - DECODE_PREROLL_SEC) : 0;\n\t\t\tconst generator = sink.samples(decodeFromSec, range?.endSec);\n\t\t\tconst decodedPlanes = [];\n\t\t\tlet totalFrames = 0;\n\t\t\tlet sampleRate = 48e3;\n\t\t\tlet numChannels = 1;\n\t\t\tlet firstTimestamp = null;\n\t\t\tmediaLogger.debug(`[AudioExtractor] Starting mediabunny generator loop for ${url}...`);\n\t\t\tfor await (const sample of generator) {\n\t\t\t\tif (firstTimestamp === null) firstTimestamp = sample.timestamp;\n\t\t\t\tsampleRate = sample.sampleRate;\n\t\t\t\tnumChannels = sample.numberOfChannels;\n\t\t\t\tconst sampleFrames = sample.numberOfFrames;\n\t\t\t\tif (decodedPlanes.length === 0) for (let c = 0; c < numChannels; c++) decodedPlanes.push([]);\n\t\t\t\tfor (let c = 0; c < numChannels; c++) {\n\t\t\t\t\tlet planeBuffer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\tsample.copyTo(planeBuffer, {\n\t\t\t\t\t\t\tplaneIndex: c,\n\t\t\t\t\t\t\tformat: \"f32-planar\"\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tconst allocSize = sample.allocationSize({ planeIndex: c });\n\t\t\t\t\t\tif (sample.format === \"s16\" || sample.format === \"s16-planar\") {\n\t\t\t\t\t\t\tconst int16Buffer = new Int16Array(allocSize / 2);\n\t\t\t\t\t\t\tsample.copyTo(int16Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int16Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int16Buffer.length; i++) planeBuffer[i] = (int16Buffer[i] ?? 0) / 32768;\n\t\t\t\t\t\t} else if (sample.format === \"s32\" || sample.format === \"s32-planar\") {\n\t\t\t\t\t\t\tconst int32Buffer = new Int32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(int32Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(int32Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < int32Buffer.length; i++) planeBuffer[i] = (int32Buffer[i] ?? 0) / 2147483648;\n\t\t\t\t\t\t} else if (sample.format === \"u8\" || sample.format === \"u8-planar\") {\n\t\t\t\t\t\t\tconst u8Buffer = new Uint8Array(allocSize);\n\t\t\t\t\t\t\tsample.copyTo(u8Buffer, { planeIndex: c });\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(u8Buffer.length);\n\t\t\t\t\t\t\tfor (let i = 0; i < u8Buffer.length; i++) planeBuffer[i] = ((u8Buffer[i] ?? 128) - 128) / 128;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaneBuffer = new Float32Array(allocSize / 4);\n\t\t\t\t\t\t\tsample.copyTo(planeBuffer, { planeIndex: c });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdecodedPlanes[c].push(planeBuffer);\n\t\t\t\t}\n\t\t\t\ttotalFrames += sampleFrames;\n\t\t\t\tsample.close();\n\t\t\t}\n\t\t\tmediaLogger.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${totalFrames}`);\n\t\t\tif (totalFrames === 0 || decodedPlanes.length === 0) return null;\n\t\t\tconst channels = decodedPlanes.map((planes) => {\n\t\t\t\tconst merged = new Float32Array(totalFrames);\n\t\t\t\tlet offset = 0;\n\t\t\t\tfor (const plane of planes) {\n\t\t\t\t\tmerged.set(plane, offset);\n\t\t\t\t\toffset += plane.length;\n\t\t\t\t}\n\t\t\t\treturn merged;\n\t\t\t});\n\t\t\tlet startIndex = 0;\n\t\t\tif (decodeFromSec > 0 && firstTimestamp !== null) {\n\t\t\t\tconst origin = await sink.getSample(0);\n\t\t\t\tconst originTimestamp = origin?.timestamp ?? await track.getFirstTimestamp();\n\t\t\t\torigin?.close();\n\t\t\t\tstartIndex = Math.round((firstTimestamp - originTimestamp) * sampleRate);\n\t\t\t}\n\t\t\tconst endedEarly = !range || (startIndex + totalFrames) / sampleRate < range.endSec;\n\t\t\treturn {\n\t\t\t\tchannels,\n\t\t\t\tsampleRate,\n\t\t\t\tstartIndex,\n\t\t\t\tvalidFromSec: decodeFromSec > 0 && range ? range.startSec : 0,\n\t\t\t\tvalidToSec: endedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error && err.message.includes(\"Cannot open local media file\")) throw err;\n\t\t\tif (typeof process !== \"undefined\" && process.versions?.node) try {\n\t\t\t\tconst { execFileSync } = await import(\"node:child_process\");\n\t\t\t\tconst ffStartIndex = range ? Math.round(Math.max(0, range.startSec) * 48e3) : 0;\n\t\t\t\tconst ffStartSec = ffStartIndex / 48e3;\n\t\t\t\tconst stdout = execFileSync(\"ffmpeg\", [\n\t\t\t\t\t\"-v\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t...ffStartSec > 0 ? [\"-ss\", String(ffStartSec)] : [],\n\t\t\t\t\t\"-i\",\n\t\t\t\t\turl,\n\t\t\t\t\t...range ? [\"-t\", String(range.endSec - ffStartSec)] : [],\n\t\t\t\t\t\"-f\",\n\t\t\t\t\t\"f32le\",\n\t\t\t\t\t\"-ar\",\n\t\t\t\t\t\"48000\",\n\t\t\t\t\t\"-ac\",\n\t\t\t\t\t\"2\",\n\t\t\t\t\t\"pipe:1\"\n\t\t\t\t], { maxBuffer: Number.POSITIVE_INFINITY });\n\t\t\t\tconst totalSamples = stdout.byteLength / 4;\n\t\t\t\tconst numFrames = totalSamples / 2;\n\t\t\t\tconst interleaved = new Float32Array(stdout.buffer, stdout.byteOffset, totalSamples);\n\t\t\t\tconst left = new Float32Array(numFrames);\n\t\t\t\tconst right = new Float32Array(numFrames);\n\t\t\t\tfor (let i = 0; i < numFrames; i++) {\n\t\t\t\t\tleft[i] = interleaved[i * 2];\n\t\t\t\t\tright[i] = interleaved[i * 2 + 1];\n\t\t\t\t}\n\t\t\t\tconst ffEndedEarly = !range || ffStartSec + numFrames / 48e3 < range.endSec;\n\t\t\t\treturn {\n\t\t\t\t\tchannels: [left, right],\n\t\t\t\t\tsampleRate: 48e3,\n\t\t\t\t\tstartIndex: ffStartIndex,\n\t\t\t\t\tvalidFromSec: ffStartSec,\n\t\t\t\t\tvalidToSec: ffEndedEarly || !range ? Number.POSITIVE_INFINITY : range.endSec\n\t\t\t\t};\n\t\t\t} catch (ffmpegErr) {\n\t\t\t\tmediaLogger.warn({ ffmpegErr }, `[AudioExtractor] ffmpeg fallback decode failed for ${url}`);\n\t\t\t}\n\t\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tif (inputAcquired) inputStore.release(url);\n\t\t}\n\t} catch (err) {\n\t\tif (err instanceof Error && err.message.includes(\"Cannot open local media file\")) throw err;\n\t\tmediaLogger.error({ err }, `[AudioExtractor] Failed to decode source ${url}`);\n\t\treturn null;\n\t}\n}\n/**\n* Resamples a PCM buffer using linear interpolation to target sample rate & speed.\n* `trimOffsetSamples` is a whole-file index; `inputStartIndex` is the\n* whole-file index of `inputChannel[0]` when it holds only a range.\n*/\nasync function resampleAndStretchPCM(inputChannel, sourceSampleRate, targetSampleRate, speed, outputLength, trimOffsetSamples, inputStartIndex = 0) {\n\tconst output = new Float32Array(outputLength);\n\tconst factor = sourceSampleRate / targetSampleRate * speed;\n\tconst YIELD_INTERVAL = 1e5;\n\tfor (let i = 0; i < outputLength; i++) {\n\t\tif (i > 0 && i % YIELD_INTERVAL === 0) await yieldToMain();\n\t\tconst srcIndex = trimOffsetSamples + i * factor - inputStartIndex;\n\t\tconst indexFloor = Math.floor(srcIndex);\n\t\tconst indexCeil = Math.ceil(srcIndex);\n\t\tif (indexFloor < 0) {\n\t\t\toutput[i] = 0;\n\t\t\tcontinue;\n\t\t}\n\t\tif (indexFloor >= inputChannel.length) break;\n\t\tconst weight = srcIndex - indexFloor;\n\t\tconst sampleFloor = inputChannel[indexFloor] ?? 0;\n\t\tconst val = sampleFloor + weight * ((indexCeil >= 0 && indexCeil < inputChannel.length ? inputChannel[indexCeil] ?? sampleFloor : sampleFloor) - sampleFloor);\n\t\toutput[i] = Number.isFinite(val) ? val : 0;\n\t}\n\treturn output;\n}\n/** Seconds decoded past a clip's last source sample, for interpolation. */\nconst RANGE_MARGIN_SEC = .05;\n/** Processors that only scale what is already there, so silence stays silence. */\nconst GAIN_ONLY_PROCESSORS = new Set([\"Compositor\", \"CompositorLayer\"]);\n/** Adds `src` into `dest` starting at `destStart` (which may be negative). */\nfunction addInto(dest, src, destStart) {\n\tconst from = Math.max(0, -destStart);\n\tconst to = Math.min(src.length, dest.length - destStart);\n\tfor (let i = from; i < to; i++) dest[destStart + i] += src[i];\n}\n/**\n* A node's stereo mix, allocated on first write. A child that covers the\n* whole bus while it is still silent is taken over instead of copied (adding\n* into silence changes nothing), so a chain of single-child nodes passes one\n* buffer up instead of allocating and summing a full-length copy per level.\n*/\nvar MixBus = class {\n\tchannels = null;\n\tconstructor(length) {\n\t\tthis.length = length;\n\t}\n\t/** The bus channels, allocated (silent) if nothing was written yet. */\n\tget() {\n\t\tthis.channels ??= [new Float32Array(this.length), new Float32Array(this.length)];\n\t\treturn this.channels;\n\t}\n\t/** Whether `src` written at `start` could replace the bus outright. */\n\tcanAdopt(src, start) {\n\t\treturn this.channels === null && start === 0 && src.every((ch) => ch.length === this.length);\n\t}\n\t/** Mixes `src` into the bus starting at sample `start`. */\n\tadd(src, start) {\n\t\tif (this.canAdopt(src, start) && src[0] !== src[1]) {\n\t\t\tthis.channels = src;\n\t\t\treturn;\n\t\t}\n\t\tconst dest = this.get();\n\t\tfor (let c = 0; c < 2; c++) addInto(dest[c], src[c], start);\n\t}\n};\n/**\n* Recursively parses the VirtualMediaData tree and mixes all active audio tracks\n* into a single unified stereo PCM stream (Float32Array channels).\n*/\nasync function mixAudioTracks(virtualMedia, fps, targetSampleRate = 48e3, device, renderId) {\n\tmediaLogger.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${fps}, targetSampleRate: ${targetSampleRate}`);\n\tawait waitForDelayRender();\n\tshaderStore.registerSignalsFromComposition(renderId, virtualMedia);\n\tconst durationMs = getActiveMediaMetadata(virtualMedia)?.durationMs || 1e3;\n\tconst totalDurationSec = durationMs / 1e3;\n\tconst totalTargetSamples = Math.ceil(totalDurationSec * targetSampleRate);\n\tmediaLogger.debug(`[AudioExtractor] Composition total duration: ${durationMs}ms (${totalDurationSec}s). Total mixed samples to allocate: ${totalTargetSamples}`);\n\tconst decodedCache = /* @__PURE__ */ new Map();\n\tconst undecodable = /* @__PURE__ */ new Set();\n\tasync function getDecodedRange(url, startSec, endSec) {\n\t\tif (undecodable.has(url)) return null;\n\t\tlet ranges = decodedCache.get(url);\n\t\tconst hit = ranges?.find((r) => r.validFromSec <= startSec && r.validToSec >= endSec);\n\t\tif (hit) return hit;\n\t\tconst decoded = await decodeAudioRange(url, {\n\t\t\tstartSec,\n\t\t\tendSec\n\t\t});\n\t\tif (!decoded) {\n\t\t\tundecodable.add(url);\n\t\t\treturn null;\n\t\t}\n\t\tif (!ranges) {\n\t\t\tranges = [];\n\t\t\tdecodedCache.set(url, ranges);\n\t\t}\n\t\tranges.push(decoded);\n\t\treturn decoded;\n\t}\n\tconst audibleCache = /* @__PURE__ */ new WeakMap();\n\tfunction isAudible(node) {\n\t\tconst cached = audibleCache.get(node);\n\t\tif (cached !== void 0) return cached;\n\t\tconst op = node.operation;\n\t\tlet audible = false;\n\t\tif (op?.op === \"source\") {\n\t\t\tconst mediaType = getMediaType(node);\n\t\t\taudible = mediaType === \"Audio\" || mediaType === \"Video\";\n\t\t} else if (op?.op && !GAIN_ONLY_PROCESSORS.has(op.op) && audioRegistry.get(op.op)) audible = true;\n\t\tif (!audible && node.children) audible = node.children.some((child) => child && isAudible(child));\n\t\taudibleCache.set(node, audible);\n\t\treturn audible;\n\t}\n\tasync function traverse(node, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, inheritedDurationFrames) {\n\t\tif (!node || !isAudible(node)) return null;\n\t\tconst op = node.operation;\n\t\tif (!op) {\n\t\t\tconst durationMs$1 = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\t\tconst durationFrames = Math.round(durationMs$1 / 1e3 * fps);\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? durationFrames > 0 ? Math.min(inheritedDurationFrames, durationFrames) : inheritedDurationFrames : durationFrames;\n\t\t\tconst localSamplesCount$1 = Math.ceil(actualDurationFrames / fps * targetSampleRate);\n\t\t\tif (localSamplesCount$1 <= 0) return null;\n\t\t\tconst bus$1 = new MixBus(localSamplesCount$1);\n\t\t\tfor (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, inheritedSeekSec, inheritedClockFrames, inheritedVolume, inheritedSpeed, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst childStartSample = Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tbus$1.add(childChannels, childStartSample);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn bus$1.channels;\n\t\t}\n\t\tconst volume = inheritedVolume * (op.volume ?? 1) * (op.opacity === 0 ? 0 : 1) * (op.muted ? 0 : 1);\n\t\tconst speedMultiplier = inheritedSpeed;\n\t\tconst localClockFrames = inheritedClockFrames + (op.startFrame ?? op.timeline?.startFrame ?? 0);\n\t\tconst segments = op.timeline?.segments || [];\n\t\tconst layer = op;\n\t\tconst layerTrimSec = layer.op === \"CompositorLayer\" ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? null) !== null ? (layer.mediaStartFrame ?? layer.trimStartFrames ?? 0) / fps : Math.round((layer.trimStartSec ?? 0) * fps) / fps : 0;\n\t\tconst nodeDurationMs = getActiveMediaMetadata(node)?.durationMs ?? 0;\n\t\tconst nodeDurationFrames = Math.round(nodeDurationMs / 1e3 * fps);\n\t\tconst nodeActualDurationFrames = inheritedDurationFrames !== null ? nodeDurationFrames > 0 ? Math.min(inheritedDurationFrames, nodeDurationFrames) : inheritedDurationFrames : nodeDurationFrames;\n\t\tconst localSamplesCount = Math.ceil(nodeActualDurationFrames / fps * targetSampleRate);\n\t\tif (localSamplesCount <= 0) return null;\n\t\tconst bus = new MixBus(localSamplesCount);\n\t\tconst processSegment = async (seg, windowStartFrameOffset) => {\n\t\t\tconst segSeekSec = seg ? seg.startSec : 0;\n\t\t\tconst totalSeekSec = inheritedSeekSec + layerTrimSec + segSeekSec;\n\t\t\tconst totalClockFrames = localClockFrames + windowStartFrameOffset;\n\t\t\tlet segDurationFrames = 0;\n\t\t\tif (seg) segDurationFrames = Math.max(1, Math.round(((seg.endSec ?? 0) - seg.startSec) * fps));\n\t\t\telse segDurationFrames = nodeDurationFrames;\n\t\t\tconst actualDurationFrames = inheritedDurationFrames !== null ? Math.min(inheritedDurationFrames, segDurationFrames) : segDurationFrames;\n\t\t\tconst segmentStartSample = Math.round(windowStartFrameOffset / fps * targetSampleRate);\n\t\t\tif (op.op === \"source\") {\n\t\t\t\tconst mediaType = getMediaType(node);\n\t\t\t\tconst params = computeRenderParams(node);\n\t\t\t\tif (params.sourceUrl && (mediaType === \"Audio\" || mediaType === \"Video\") && volume > 0) {\n\t\t\t\t\tconst finalSpeed = Math.max(.5, speedMultiplier * (Number(params.speed) || 1));\n\t\t\t\t\tconst effectiveTrimSec = Math.max(0, (Number(params.trimStartSec) || 0) + totalSeekSec);\n\t\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\t\tconst decoded = clipSamplesCount > 0 && segmentStartSample < localSamplesCount ? await getDecodedRange(params.sourceUrl, effectiveTrimSec, effectiveTrimSec + clipSamplesCount / targetSampleRate * finalSpeed + RANGE_MARGIN_SEC) : null;\n\t\t\t\t\tif (decoded) {\n\t\t\t\t\t\tconst trimOffsetSamples = Math.round(effectiveTrimSec * decoded.sampleRate);\n\t\t\t\t\t\tconst stretchedLeft = await resampleAndStretchPCM(decoded.channels[0], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex);\n\t\t\t\t\t\tconst stretchedRight = decoded.channels.length > 1 ? await resampleAndStretchPCM(decoded.channels[1], decoded.sampleRate, targetSampleRate, finalSpeed, clipSamplesCount, trimOffsetSamples, decoded.startIndex) : stretchedLeft;\n\t\t\t\t\t\tconst stretched = [stretchedLeft, stretchedRight];\n\t\t\t\t\t\tif (bus.canAdopt(stretched, segmentStartSample)) {\n\t\t\t\t\t\t\tif (volume !== 1) {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < clipSamplesCount; i++) stretchedLeft[i] *= volume;\n\t\t\t\t\t\t\t\tif (stretchedRight !== stretchedLeft) for (let i = 0; i < clipSamplesCount; i++) stretchedRight[i] *= volume;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbus.channels = [stretchedLeft, stretchedRight === stretchedLeft ? stretchedLeft.slice() : stretchedRight];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [localLeft, localRight] = bus.get();\n\t\t\t\t\t\t\tfor (let i = 0; i < clipSamplesCount; i++) {\n\t\t\t\t\t\t\t\tconst outIndex = segmentStartSample + i;\n\t\t\t\t\t\t\t\tlocalLeft[outIndex] += stretchedLeft[i] * volume;\n\t\t\t\t\t\t\t\tlocalRight[outIndex] += stretchedRight[i] * volume;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait yieldToMain();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.children) for (const child of node.children) {\n\t\t\t\tconst childChannels = await traverse(child, totalSeekSec, totalClockFrames, volume, speedMultiplier, actualDurationFrames);\n\t\t\t\tif (childChannels) {\n\t\t\t\t\tconst childOp = child.operation;\n\t\t\t\t\tconst childStartFrame = childOp?.startFrame ?? childOp?.timeline?.startFrame ?? 0;\n\t\t\t\t\tconst childStartSample = Math.round(childStartFrame / fps * targetSampleRate);\n\t\t\t\t\tbus.add(childChannels, segmentStartSample + childStartSample);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst pluginProcessor = audioRegistry.get(op.op);\n\t\t\tif (pluginProcessor) try {\n\t\t\t\tconst clipDurationSec = actualDurationFrames / fps;\n\t\t\t\tconst clipSamplesCount = Math.min(localSamplesCount - segmentStartSample, Math.ceil(clipDurationSec * targetSampleRate));\n\t\t\t\tif (clipSamplesCount > 0 && segmentStartSample < localSamplesCount && segmentStartSample >= 0) await pluginProcessor(bus.get().map((ch) => ch.subarray(segmentStartSample, segmentStartSample + clipSamplesCount)), targetSampleRate, node, {\n\t\t\t\t\tdevice,\n\t\t\t\t\tframe: totalClockFrames,\n\t\t\t\t\tfps,\n\t\t\t\t\trenderId,\n\t\t\t\t\telapsedMs: ((totalClockFrames - (op.op === \"CompositorLayer\" ? localClockFrames : 0)) / fps + totalSeekSec - layerTrimSec) * 1e3,\n\t\t\t\t\tdurationMs: getActiveMediaMetadata(node)?.durationMs ?? void 0\n\t\t\t\t});\n\t\t\t} catch (pluginErr) {\n\t\t\t\tmediaLogger.error({ err: pluginErr }, `[AudioExtractor] Custom plugin for operation '${op.op}' failed`);\n\t\t\t}\n\t\t};\n\t\tif (segments.length > 0) {\n\t\t\tlet currentStart = 0;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst durSec = (seg.endSec ?? 0) - seg.startSec;\n\t\t\t\tconst durFrames = Math.max(1, Math.round(durSec * fps));\n\t\t\t\tawait processSegment(seg, currentStart);\n\t\t\t\tcurrentStart += durFrames;\n\t\t\t}\n\t\t} else await processSegment(null, 0);\n\t\treturn bus.channels;\n\t}\n\tconst rootChannels = await traverse(normalizeTimeline(virtualMedia, fps), 0, 0, 1, 1, null);\n\tconst mixedChannels = rootChannels?.every((ch) => ch.length === totalTargetSamples) && rootChannels[0] !== rootChannels[1] ? rootChannels : [new Float32Array(totalTargetSamples), new Float32Array(totalTargetSamples)];\n\tconst [outputLeft, outputRight] = mixedChannels;\n\tif (rootChannels && mixedChannels !== rootChannels) for (let c = 0; c < 2; c++) {\n\t\tconst dest = mixedChannels[c];\n\t\tconst src = rootChannels[c];\n\t\tconst len = Math.min(src.length, dest.length);\n\t\tfor (let i = 0; i < len; i++) dest[i] = src[i];\n\t}\n\tdecodedCache.clear();\n\tlet mixPeak = 0;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = Math.abs(outputLeft[i] ?? 0);\n\t\tconst r = Math.abs(outputRight[i] ?? 0);\n\t\tif (l > mixPeak) mixPeak = l;\n\t\tif (r > mixPeak) mixPeak = r;\n\t}\n\tconst autoGain = mixPeak > .95 ? .92 / mixPeak : 1;\n\tfor (let i = 0; i < totalTargetSamples; i++) {\n\t\tconst l = (outputLeft[i] ?? 0) * autoGain;\n\t\tconst r = (outputRight[i] ?? 0) * autoGain;\n\t\toutputLeft[i] = Number.isFinite(l) ? Math.tanh(l) : 0;\n\t\toutputRight[i] = Number.isFinite(r) ? Math.tanh(r) : 0;\n\t}\n\treturn {\n\t\tchannels: mixedChannels,\n\t\tsampleRate: targetSampleRate\n\t};\n}\n\n//#endregion\nexport { calculateLayerTransform, compositionStateStore, computeRenderParams, decodeAudioSource, drawCompositionTree, formatTimecode, framesToSeconds, isStaticVisualMedia, mixAudioTracks, normalizeTimeline, resolveLayerDuration, secondsToFrames };\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM, t as __commonJSMin } from "./chunk-GBe2k3y8.mjs";
2
- import { At as gradientStopsToOklab, Bt as parseCssColor, It as limitGradientStops, Pt as isSignal, Vt as parseCssGradient } from "./dist-fjKpBYkc.mjs";
2
+ import { At as gradientStopsToOklab, Ft as isValueSignal, Ht as parseCssGradient, Lt as limitGradientStops, Pt as isSignal, Vt as parseCssColor } from "./dist-ClyC_d66.mjs";
3
3
  import { ALL_FORMATS, AudioBufferSink, CanvasSink, FilePathSource, Input, UrlSource, VideoSampleSink } from "mediabunny";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -11836,7 +11836,8 @@ var WebGPUAudioProcessor = class WebGPUAudioProcessor$1 {
11836
11836
  if (isSignal(directVal)) {
11837
11837
  const signalData = new Float32Array(numSamples);
11838
11838
  const durationSec = durationSeconds > 0 ? durationSeconds : numSamples / _sampleRate;
11839
- for (let s = 0; s < numSamples; s++) {
11839
+ if (isValueSignal(directVal)) signalData.fill(Number(directVal.get()) || 0);
11840
+ else for (let s = 0; s < numSamples; s++) {
11840
11841
  const t = elapsedSeconds + s / _sampleRate;
11841
11842
  const f = t * fps;
11842
11843
  const progress = durationSec > 0 ? t / durationSec : 0;
@@ -11910,6 +11911,19 @@ var WebGPUAudioProcessor = class WebGPUAudioProcessor$1 {
11910
11911
  deviceCache.set(cacheKey, cached$1);
11911
11912
  } else if (stateUpdate) device.queue.writeBuffer(cached$1.stateBuffer, 0, stateUpdate);
11912
11913
  const CHUNK_SIZE = 65536;
11914
+ const MAX_CHUNKS_IN_FLIGHT = 8;
11915
+ const pending = [];
11916
+ const readBackOldest = async () => {
11917
+ const chunk = pending.shift();
11918
+ if (!chunk) return;
11919
+ const { stagingBuffer, offset, chunkSamples } = chunk;
11920
+ await stagingBuffer.mapAsync(GPUMapMode.READ);
11921
+ const mappedRange = new Float32Array(stagingBuffer.getMappedRange());
11922
+ for (let c = 0; c < numChannels; c++) channels[c].set(mappedRange.subarray(c * chunkSamples, (c + 1) * chunkSamples), offset);
11923
+ stagingBuffer.unmap();
11924
+ stagingBuffer.destroy();
11925
+ await yieldToMain();
11926
+ };
11913
11927
  try {
11914
11928
  for (let offset = 0; offset < numSamples; offset += CHUNK_SIZE) {
11915
11929
  const chunkSamples = Math.min(CHUNK_SIZE, numSamples - offset);
@@ -12022,13 +12036,16 @@ var WebGPUAudioProcessor = class WebGPUAudioProcessor$1 {
12022
12036
  passEncoder.end();
12023
12037
  commandEncoder.copyBufferToBuffer(outputBuffer, 0, stagingBuffer, 0, numChannels * chunkSamples * 4);
12024
12038
  device.queue.submit([commandEncoder.finish()]);
12025
- await stagingBuffer.mapAsync(GPUMapMode.READ);
12026
- const mappedRange = new Float32Array(stagingBuffer.getMappedRange());
12027
- for (let c = 0; c < numChannels; c++) channels[c].set(mappedRange.subarray(c * chunkSamples, (c + 1) * chunkSamples), offset);
12028
- stagingBuffer.unmap();
12029
- await yieldToMain();
12039
+ pending.push({
12040
+ stagingBuffer,
12041
+ offset,
12042
+ chunkSamples
12043
+ });
12044
+ if (pending.length >= MAX_CHUNKS_IN_FLIGHT) await readBackOldest();
12030
12045
  }
12046
+ while (pending.length > 0) await readBackOldest();
12031
12047
  } finally {
12048
+ for (const { stagingBuffer } of pending) stagingBuffer.destroy();
12032
12049
  for (const b of createdBuffers) b.destroy();
12033
12050
  }
12034
12051
  }
@@ -31652,4 +31669,4 @@ if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThi
31652
31669
 
31653
31670
  //#endregion
31654
31671
  export { resolveTextSpans as $, TextSelectorSchema as $t, ensureDevice as A, sampleAudioSpectrumScale as An, GlyphAnchorGroupingSchema as At, loadModel3D as B, SignalRegistry as Bt, drawGifNode as C, evaluateTypewriterState as Cn, AudioSpectrumTypographySchema as Ct, drawSignalNode as D, getScramblePool as Dn, EnhancedTextNodeSchema as Dt, drawParagraphNode as E, generatePathSegments as En, DynamicStrokePropertiesSchema as Et, getRenderer2D as F, ParticleDissolveConfigSchema as Ft, parseColor as G, TextAnimatorBuilder as Gt, lutStore as H, Spatial3DPropertiesSchema as Ht, initHeadlessWebGPU as I, SelectorBasedOnSchema as It, parseOBJ as J, TextPathBuilder as Jt, parseFBX as K, TextCursorConfigSchema as Kt, inputStore as L, SelectorModeSchema as Lt, generateExtrudedTextGeometry as M, samplePathChainGeometry as Mn, KineticMarqueeConfigSchema as Mt, getHeadlessFontPath as N, signalRegistry as Nn, LineSpacingDynamicsSchema as Nt, drawSvgNode as O, getShuffledOrder as On, ExpressionSelectorSchema as Ot, getPrimitiveGeometry as P, waveToCubicBeziers as Pn, LongShadowConfigSchema as Pt, registerHeadlessFont as Q, TextScrambleConfigSchema as Qt, jointMatrices as R, SelectorShapeSchema as Rt, drawCaptionNode as S, evaluateSpringProgress as Sn, AudioSignalComputePipeline as St, drawLottieNode as T, generateArcLengthLUT as Tn, CubicBezierSegmentSchema as Tt, measureMaxCaptionHeight as U, SpringPhysicsSchema as Ut, loadOBJ as V, SkewPropertiesSchema as Vt, mediaDecoderCache as W, TextAnchorConfigSchema as Wt, poseNodes as X, TextPathSourceSchema as Xt, parseSvgPathToSegments as Y, TextPathOptionsSchema as Yt, probeVideoSize as Z, TextRangeSelectorSchema as Zt, buildShapeSvgPath as _, evaluateCubicBezierDerivative as _n, AdvancedTextAnimatorBuilder as _t, GlassPipeline as a, Vec2Schema as an, resolveMediaSourceUrl as at, colorMatrixWgsl as b, evaluateSelectorCombination as bn, AnchorPresetSchema as bt, Renderer2D as c, buildPathLUT as cn, LIGHT_UNIFORM_SIZE_BYTES as ct, ScreenSpaceRelightPipeline as d, computeLineLeadingDisplacement as dn, Matrix4Math as dt, TextSignalSelectorSchema as en, shaderStore as et, ShadowPipeline as f, computeRangeSelectorWeight as fn, Path3D as ft, WebGPUAudioProcessor as g, evaluateCubicBezier as gn, AETextAnimatorSchema as gt, SlugPipeline as h, ellipseToCubicBeziers as hn, resolveEnvironment as ht, EffectPipeline as i, VariableFontAxesSchema as in, GetFontAssetUrl as it, fitSpansToText as j, sampleCurveGeometry as jn, GlyphAnchorPointSchema as jt, drawVideoNode as k, parseSvgPathToCubicBeziers as kn, ExtendedGlyphPropertiesSchema as kt, Renderer3D as l, buildWGSLSignalFn as ln, Light3D as lt, SlugGeometry as m, distanceToCurveParameter as mn, parseColorToRgb as mt, AudioLatentTrackCache as n, TypewriterAnimatorSchema as nn, srtLoader as nt, MotionBlurPipeline as o, VolumetricFormationConfigSchema as on, Camera3D as ot, SlugFontCache as p, deterministicWigglyNoise as pn, Vector3Math as pt, parseMTL as q, TextCursorStyleSchema as qt, AudioMeshDeformPipeline as r, TypingCadenceSchema as rn, textureCache as rt, NodeSurfaceProvider as s, VolumetricFormationModeSchema as sn, ENVIRONMENT_PRESETS as st, AudioLatentEngine as t, TextWigglySelectorSchema as tn, spansText as tt, SSAOPipeline as u, computeAnchorPivotOffset as un, MAX_LIGHTS as ut, clearAllVideoCache as v, evaluateExpressionSelector as vn, AdvancedTextAnimatorSchema as vt, drawImageNode as w, evaluateVolumetricFormation as wn, ChromaticGlitchConfigSchema as wt, describeGpu as x, evaluateSkewMatrix as xn, AnimatableGlyphPropsSchema as xt, clearHeadlessFonts as y, evaluateMarqueeOffset as yn, AnchorGroupingSchema as yt, loadFBX as z, SelectorUnitsSchema as zt };
31655
- //# sourceMappingURL=dist-DRB6Vg5u.mjs.map
31672
+ //# sourceMappingURL=dist-CspOG4V1.mjs.map