framefields 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/dist/audio/index.mjs +10 -10
  2. package/dist/{audio-ChRqnFwB.mjs → audio-C7Kn5xBm.mjs} +3 -3
  3. package/dist/{audio-ChRqnFwB.mjs.map → audio-C7Kn5xBm.mjs.map} +1 -1
  4. package/dist/{dist-t-NLlnhM.mjs → dist-CPUIfrtw.mjs} +2 -2
  5. package/dist/{dist-t-NLlnhM.mjs.map → dist-CPUIfrtw.mjs.map} +1 -1
  6. package/dist/{dist-PwT_Vmax.mjs → dist-CturBK2Z.mjs} +245 -91
  7. package/dist/dist-CturBK2Z.mjs.map +1 -0
  8. package/dist/effects/index.mjs +34 -34
  9. package/dist/{effects-Duoqc_Oa.mjs → effects-CW1VgdI5.mjs} +2 -2
  10. package/dist/{effects-Duoqc_Oa.mjs.map → effects-CW1VgdI5.mjs.map} +1 -1
  11. package/dist/fonts/index.mjs +2 -2
  12. package/dist/{fonts-CgNmeFXh.mjs → fonts-EgMNL8KE.mjs} +2 -2
  13. package/dist/{fonts-CgNmeFXh.mjs.map → fonts-EgMNL8KE.mjs.map} +1 -1
  14. package/dist/{gpu-1ZpAuQOR.mjs → gpu-CN14e7Bi.mjs} +2 -2
  15. package/dist/{gpu-1ZpAuQOR.mjs.map → gpu-CN14e7Bi.mjs.map} +1 -1
  16. package/dist/index-AdrZIWT0.d.mts.map +1 -1
  17. package/dist/index-CeRv1KC0.d.mts.map +1 -1
  18. package/dist/index.mjs +48 -48
  19. package/dist/preview/index.mjs +10 -10
  20. package/dist/{preview-CArsjmkd.mjs → preview-1sjnhHQL.mjs} +2 -2
  21. package/dist/{preview-CArsjmkd.mjs.map → preview-1sjnhHQL.mjs.map} +1 -1
  22. package/dist/preview-engine/audio.mjs +1 -1
  23. package/dist/preview-engine/{chunk-VO2R3DWV.mjs → chunk-44CQSOYE.mjs} +1 -1
  24. package/dist/preview-engine/{chunk-FNE22WGA.mjs → chunk-6AEU4DC7.mjs} +4 -4
  25. package/dist/preview-engine/{chunk-PR2BUYCL.mjs → chunk-7G3XIOP7.mjs} +1 -1
  26. package/dist/preview-engine/{chunk-AXQZX3TC.mjs → chunk-AY7UX37L.mjs} +1 -1
  27. package/dist/preview-engine/{chunk-FPRXK2WD.mjs → chunk-DIGIQ5MJ.mjs} +1 -1
  28. package/dist/preview-engine/{chunk-K773AOF3.mjs → chunk-EVXWDOCL.mjs} +1 -1
  29. package/dist/preview-engine/{chunk-ZNL4W4DK.mjs → chunk-EYWPOCZW.mjs} +1 -1
  30. package/dist/preview-engine/{chunk-WSIURGP2.mjs → chunk-HE4R7EZM.mjs} +1 -1
  31. package/dist/preview-engine/{chunk-L3CHEZMZ.mjs → chunk-IR5DNNWR.mjs} +1 -1
  32. package/dist/preview-engine/{chunk-2MZXSWVT.mjs → chunk-JXNG2ACR.mjs} +1 -1
  33. package/dist/preview-engine/{chunk-O2RNIQXT.mjs → chunk-L6BH5J4P.mjs} +1 -1
  34. package/dist/preview-engine/{chunk-BVA5NGSH.mjs → chunk-M5HZPZHQ.mjs} +1 -1
  35. package/dist/preview-engine/{chunk-PFA427ZC.mjs → chunk-MLY5M7Y5.mjs} +1 -1
  36. package/dist/preview-engine/{chunk-ZH5MZQTZ.mjs → chunk-OG62XGCT.mjs} +1 -1
  37. package/dist/preview-engine/{chunk-LBRVQ4GE.mjs → chunk-PSRQA3QW.mjs} +1 -1
  38. package/dist/preview-engine/{chunk-3UPI4EPV.mjs → chunk-Q22PJXFJ.mjs} +1 -1
  39. package/dist/preview-engine/{chunk-E3HC4GRQ.mjs → chunk-T2FE5VOW.mjs} +1 -1
  40. package/dist/preview-engine/{chunk-Q2DPNVIA.mjs → chunk-TS3JI3BH.mjs} +1 -1
  41. package/dist/preview-engine/{chunk-NEE3KQTX.mjs → chunk-U4JIFQRR.mjs} +1 -1
  42. package/dist/preview-engine/{chunk-DLAHSLNX.mjs → chunk-U7NIY7UC.mjs} +14 -14
  43. package/dist/preview-engine/{chunk-BQY4BUMN.mjs → chunk-VGZZSPDN.mjs} +1 -1
  44. package/dist/preview-engine/{chunk-TPAEN6VV.mjs → chunk-VK2CVMWJ.mjs} +1 -1
  45. package/dist/preview-engine/effects.mjs +1 -1
  46. package/dist/preview-engine/framefields.mjs +3 -3
  47. package/dist/preview-engine/player.mjs +5 -5
  48. package/dist/preview-engine/renderers-2H7YEUTD.mjs +1 -1
  49. package/dist/preview-engine/renderers-2ILG23ED.mjs +1 -0
  50. package/dist/preview-engine/renderers-2P6KXWEZ.mjs +1 -1
  51. package/dist/preview-engine/{renderers-P4S7GL64.mjs → renderers-2VN3AH45.mjs} +1 -1
  52. package/dist/preview-engine/{renderers-LLUEOW5T.mjs → renderers-3GHEWWVX.mjs} +1 -1
  53. package/dist/preview-engine/renderers-3SRG77SC.mjs +1 -1
  54. package/dist/preview-engine/{renderers-YNFKFM7D.mjs → renderers-3YCJOINH.mjs} +1 -1
  55. package/dist/preview-engine/{renderers-WP67KK5K.mjs → renderers-4GRVAW2W.mjs} +1 -1
  56. package/dist/preview-engine/{renderers-BGGRPAVV.mjs → renderers-5FQA2DP4.mjs} +1 -1
  57. package/dist/preview-engine/{renderers-FGHOLJJK.mjs → renderers-5YEIUTVN.mjs} +1 -1
  58. package/dist/preview-engine/{renderers-JLFGBYN4.mjs → renderers-6CG7DBTB.mjs} +1 -1
  59. package/dist/preview-engine/{renderers-O2DZPBOJ.mjs → renderers-6OGFUSH6.mjs} +1 -1
  60. package/dist/preview-engine/renderers-6WH7NZCC.mjs +1 -1
  61. package/dist/preview-engine/renderers-7VJN5L3Z.mjs +1 -1
  62. package/dist/preview-engine/{renderers-7JTNJE7M.mjs → renderers-A6HM64UZ.mjs} +1 -1
  63. package/dist/preview-engine/renderers-B7DSGUMI.mjs +1 -0
  64. package/dist/preview-engine/renderers-BFNJ7VCI.mjs +1 -0
  65. package/dist/preview-engine/{renderers-XCMVZ2XG.mjs → renderers-BSKZXITT.mjs} +1 -1
  66. package/dist/preview-engine/renderers-CGYIDAVV.mjs +1 -0
  67. package/dist/preview-engine/{renderers-LVDUZZ75.mjs → renderers-CRRLV7IO.mjs} +1 -1
  68. package/dist/preview-engine/{renderers-TFZST6WW.mjs → renderers-D6T6IPER.mjs} +1 -1
  69. package/dist/preview-engine/renderers-DXHJAMZR.mjs +1 -1
  70. package/dist/preview-engine/{renderers-6ODPWZ2R.mjs → renderers-E76OKK66.mjs} +1 -1
  71. package/dist/preview-engine/renderers-ECA3P4ON.mjs +1 -0
  72. package/dist/preview-engine/{renderers-7NCG6BYS.mjs → renderers-EJWPVVQR.mjs} +1 -1
  73. package/dist/preview-engine/renderers-FWGMNPYB.mjs +1 -1
  74. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -1
  75. package/dist/preview-engine/renderers-HXFRTIJD.mjs +1 -1
  76. package/dist/preview-engine/{renderers-ZSENYGIY.mjs → renderers-I5E2RSV4.mjs} +1 -1
  77. package/dist/preview-engine/renderers-IWQ3V6AJ.mjs +1 -1
  78. package/dist/preview-engine/renderers-JHFT27YU.mjs +1 -0
  79. package/dist/preview-engine/renderers-KZWGSKRF.mjs +1 -1
  80. package/dist/preview-engine/{renderers-FQWWAETX.mjs → renderers-MCECHPCL.mjs} +1 -1
  81. package/dist/preview-engine/renderers-MON4QFRF.mjs +1 -0
  82. package/dist/preview-engine/{renderers-UJ4YVJZT.mjs → renderers-N7FR54V2.mjs} +1 -1
  83. package/dist/preview-engine/{renderers-PVYP2ONH.mjs → renderers-N7TS5562.mjs} +1 -1
  84. package/dist/preview-engine/renderers-NQXMYNSY.mjs +1 -0
  85. package/dist/preview-engine/renderers-NWHS7N2L.mjs +1 -1
  86. package/dist/preview-engine/renderers-ORAIXUL3.mjs +1 -0
  87. package/dist/preview-engine/renderers-OT7D3BUA.mjs +1 -1
  88. package/dist/preview-engine/{renderers-WHBDHTRI.mjs → renderers-PYWXELLG.mjs} +1 -1
  89. package/dist/preview-engine/renderers-Q4OFCMXI.mjs +1 -1
  90. package/dist/preview-engine/renderers-QVZVEYP5.mjs +1 -0
  91. package/dist/preview-engine/renderers-RJO6H4FC.mjs +1 -1
  92. package/dist/preview-engine/renderers-RKDPX5JU.mjs +1 -0
  93. package/dist/preview-engine/{renderers-D2EJULOJ.mjs → renderers-RLHTNLRE.mjs} +1 -1
  94. package/dist/preview-engine/renderers-SBFF7JP5.mjs +1 -0
  95. package/dist/preview-engine/renderers-TAWT3ZSS.mjs +1 -1
  96. package/dist/preview-engine/{renderers-HMR2NAD7.mjs → renderers-TR2V2HZ2.mjs} +1 -1
  97. package/dist/preview-engine/{renderers-UPKB5OLS.mjs → renderers-U6KY34TP.mjs} +1 -1
  98. package/dist/preview-engine/renderers-UHTO6BQA.mjs +1 -1
  99. package/dist/preview-engine/renderers-UNK6I4JJ.mjs +1 -0
  100. package/dist/preview-engine/renderers-W773SBPV.mjs +1 -0
  101. package/dist/preview-engine/{renderers-527ONFIA.mjs → renderers-WP2LBR5U.mjs} +1 -1
  102. package/dist/preview-engine/renderers-XHTMRXC5.mjs +1 -1
  103. package/dist/preview-engine/renderers-YECY2YFT.mjs +1 -1
  104. package/dist/preview-engine/renderers-YMN6QXK7.mjs +1 -1
  105. package/dist/preview-engine/{renderers-DN2GF3I7.mjs → renderers-YMPXGYRU.mjs} +1 -1
  106. package/dist/preview-engine/renderers-ZANPE3OK.mjs +1 -1
  107. package/dist/preview-engine/renderers-ZHTX73PR.mjs +1 -0
  108. package/dist/preview-engine/{renderers-TPBPNXWH.mjs → renderers-ZHZMGMLN.mjs} +1 -1
  109. package/dist/preview-engine/renderers-ZJTRANIX.mjs +1 -1
  110. package/dist/preview-engine/signals.mjs +1 -1
  111. package/dist/{program-Dd9tJFkY.mjs → program-DtiNMTxO.mjs} +2 -2
  112. package/dist/{program-Dd9tJFkY.mjs.map → program-DtiNMTxO.mjs.map} +1 -1
  113. package/dist/renderer/index.mjs +2 -2
  114. package/dist/{renderer-7OvgLE8w.mjs → renderer--Da6pAJ4.mjs} +2 -2
  115. package/dist/{renderer-yGAk7J9P.mjs → renderer--S2cNYXS.mjs} +3 -3
  116. package/dist/{renderer-yGAk7J9P.mjs.map → renderer--S2cNYXS.mjs.map} +1 -1
  117. package/dist/renderer-1hypa-l7.mjs +5 -0
  118. package/dist/renderer-6D8M4DRu.mjs +5 -0
  119. package/dist/{renderer-257LxOyx.mjs → renderer-6QAlE1Mp.mjs} +3 -3
  120. package/dist/{renderer-257LxOyx.mjs.map → renderer-6QAlE1Mp.mjs.map} +1 -1
  121. package/dist/{renderer-C-Qj0BnT.mjs → renderer-8k-TR_Cy.mjs} +3 -3
  122. package/dist/{renderer-C-Qj0BnT.mjs.map → renderer-8k-TR_Cy.mjs.map} +1 -1
  123. package/dist/renderer-APrj6tdP.mjs +5 -0
  124. package/dist/{renderer-CKpwEo1w.mjs → renderer-B3x-uogM.mjs} +3 -3
  125. package/dist/{renderer-CKpwEo1w.mjs.map → renderer-B3x-uogM.mjs.map} +1 -1
  126. package/dist/{renderer-C4tUATd_.mjs → renderer-B48vtpou.mjs} +3 -3
  127. package/dist/{renderer-C4tUATd_.mjs.map → renderer-B48vtpou.mjs.map} +1 -1
  128. package/dist/{renderer-aCDIEYb3.mjs → renderer-B5Icb0XW.mjs} +2 -2
  129. package/dist/{renderer-aCDIEYb3.mjs.map → renderer-B5Icb0XW.mjs.map} +1 -1
  130. package/dist/{renderer-2BnBo6CX.mjs → renderer-B6c_Rk_2.mjs} +3 -3
  131. package/dist/{renderer-2BnBo6CX.mjs.map → renderer-B6c_Rk_2.mjs.map} +1 -1
  132. package/dist/{renderer-CS-goRD3.mjs → renderer-BAmGO6Hj.mjs} +3 -3
  133. package/dist/{renderer-CS-goRD3.mjs.map → renderer-BAmGO6Hj.mjs.map} +1 -1
  134. package/dist/renderer-BF8wlbN1.mjs +5 -0
  135. package/dist/{renderer-CxP2e6Ov.mjs → renderer-BFHgl-0f.mjs} +2 -2
  136. package/dist/{renderer-CxP2e6Ov.mjs.map → renderer-BFHgl-0f.mjs.map} +1 -1
  137. package/dist/{renderer-D0xLIq1r.mjs → renderer-BI1nmIqA.mjs} +3 -3
  138. package/dist/{renderer-D0xLIq1r.mjs.map → renderer-BI1nmIqA.mjs.map} +1 -1
  139. package/dist/renderer-BOUcMCJB.mjs +5 -0
  140. package/dist/{renderer-D1T7A3NF.mjs → renderer-BRWpn3dT.mjs} +3 -3
  141. package/dist/{renderer-D1T7A3NF.mjs.map → renderer-BRWpn3dT.mjs.map} +1 -1
  142. package/dist/renderer-BSwn6KmG.mjs +5 -0
  143. package/dist/renderer-BUxvuC5A.mjs +5 -0
  144. package/dist/{renderer-72A4SvOE.mjs → renderer-BXCZev4l.mjs} +3 -3
  145. package/dist/{renderer-72A4SvOE.mjs.map → renderer-BXCZev4l.mjs.map} +1 -1
  146. package/dist/renderer-BYOsmJ8F.mjs +5 -0
  147. package/dist/{renderer-D1MOTlWS.mjs → renderer-BYj8x8YM.mjs} +2 -2
  148. package/dist/{renderer-D1MOTlWS.mjs.map → renderer-BYj8x8YM.mjs.map} +1 -1
  149. package/dist/{renderer-UT0CcmMZ.mjs → renderer-BaOC1Pd1.mjs} +3 -3
  150. package/dist/{renderer-UT0CcmMZ.mjs.map → renderer-BaOC1Pd1.mjs.map} +1 -1
  151. package/dist/{renderer-BY08hHFS.mjs → renderer-BebePsG7.mjs} +2 -2
  152. package/dist/{renderer-BY08hHFS.mjs.map → renderer-BebePsG7.mjs.map} +1 -1
  153. package/dist/{renderer-DzOzVxNS.mjs → renderer-Bf4BdBtb.mjs} +2 -2
  154. package/dist/{renderer-DzOzVxNS.mjs.map → renderer-Bf4BdBtb.mjs.map} +1 -1
  155. package/dist/{renderer-zQIB2VZZ.mjs → renderer-BkXqFmNO.mjs} +2 -2
  156. package/dist/{renderer-zQIB2VZZ.mjs.map → renderer-BkXqFmNO.mjs.map} +1 -1
  157. package/dist/{renderer-YyEBKPcE.mjs → renderer-BlafvK-L.mjs} +2 -2
  158. package/dist/{renderer-OxafT7Xm.mjs → renderer-BmWH4dK1.mjs} +5 -5
  159. package/dist/{renderer-OxafT7Xm.mjs.map → renderer-BmWH4dK1.mjs.map} +1 -1
  160. package/dist/renderer-Bp7LqSTt.mjs +5 -0
  161. package/dist/{renderer-D-yNHLG7.mjs → renderer-Bq9jXYJ5.mjs} +3 -3
  162. package/dist/{renderer-D-yNHLG7.mjs.map → renderer-Bq9jXYJ5.mjs.map} +1 -1
  163. package/dist/{renderer-BVR0mEIT.mjs → renderer-BqSiWRoD.mjs} +2 -2
  164. package/dist/{renderer-BVR0mEIT.mjs.map → renderer-BqSiWRoD.mjs.map} +1 -1
  165. package/dist/{renderer-DyPgVl1l.mjs → renderer-ButaUWLr.mjs} +3 -3
  166. package/dist/{renderer-DyPgVl1l.mjs.map → renderer-ButaUWLr.mjs.map} +1 -1
  167. package/dist/{renderer-94byj7Mk.mjs → renderer-C2Ff-9u_.mjs} +2 -2
  168. package/dist/{renderer-94byj7Mk.mjs.map → renderer-C2Ff-9u_.mjs.map} +1 -1
  169. package/dist/{renderer-DpQaiH6C.mjs → renderer-C4puWDLK.mjs} +2 -2
  170. package/dist/{renderer-DpQaiH6C.mjs.map → renderer-C4puWDLK.mjs.map} +1 -1
  171. package/dist/{renderer-D6YcQTLI.mjs → renderer-CBG6ewNf.mjs} +3 -3
  172. package/dist/{renderer-D6YcQTLI.mjs.map → renderer-CBG6ewNf.mjs.map} +1 -1
  173. package/dist/renderer-CD0amH_Q.mjs +5 -0
  174. package/dist/renderer-CIJGjrt7.mjs +5 -0
  175. package/dist/{renderer-CIMI33Yd.mjs → renderer-CJwgsecF.mjs} +2 -2
  176. package/dist/{renderer-CIMI33Yd.mjs.map → renderer-CJwgsecF.mjs.map} +1 -1
  177. package/dist/{renderer-aN60v8jR.mjs → renderer-CMzd3BrW.mjs} +2 -2
  178. package/dist/{renderer-aN60v8jR.mjs.map → renderer-CMzd3BrW.mjs.map} +1 -1
  179. package/dist/renderer-CNFTl94b.mjs +5 -0
  180. package/dist/{renderer-DJQD7tai.mjs → renderer-CPNLkir4.mjs} +2 -2
  181. package/dist/{renderer-DJQD7tai.mjs.map → renderer-CPNLkir4.mjs.map} +1 -1
  182. package/dist/{renderer-CLUyYFqS.mjs → renderer-CRYO5HQw.mjs} +2 -2
  183. package/dist/{renderer-CLUyYFqS.mjs.map → renderer-CRYO5HQw.mjs.map} +1 -1
  184. package/dist/renderer-CTJ0gHPS.mjs +5 -0
  185. package/dist/{renderer-Dju3SEAJ.mjs → renderer-CbNW0KHh.mjs} +3 -3
  186. package/dist/{renderer-Dju3SEAJ.mjs.map → renderer-CbNW0KHh.mjs.map} +1 -1
  187. package/dist/renderer-Cc3INn7w.mjs +5 -0
  188. package/dist/{renderer-BK32cV7E.mjs → renderer-CczmOPAO.mjs} +3 -3
  189. package/dist/{renderer-BK32cV7E.mjs.map → renderer-CczmOPAO.mjs.map} +1 -1
  190. package/dist/renderer-CeHh2lKY.mjs +5 -0
  191. package/dist/renderer-CfjwkQP4.mjs +5 -0
  192. package/dist/{renderer-0L9MEb3A.mjs → renderer-CgEMtLOL.mjs} +2 -2
  193. package/dist/{renderer-0L9MEb3A.mjs.map → renderer-CgEMtLOL.mjs.map} +1 -1
  194. package/dist/{renderer-CWQ-Bct7.mjs → renderer-Ch1rv1XP.mjs} +2 -2
  195. package/dist/{renderer-CWQ-Bct7.mjs.map → renderer-Ch1rv1XP.mjs.map} +1 -1
  196. package/dist/renderer-CiuOB-Md.mjs +5 -0
  197. package/dist/{renderer-DNYSf2Fl.mjs → renderer-ClK7_Yzz.mjs} +2 -2
  198. package/dist/{renderer-DNYSf2Fl.mjs.map → renderer-ClK7_Yzz.mjs.map} +1 -1
  199. package/dist/renderer-Cor66Y2X.mjs +5 -0
  200. package/dist/renderer-CtIM0LWe.mjs +5 -0
  201. package/dist/renderer-CyqgTsnx.mjs +5 -0
  202. package/dist/{renderer-DWcbrx2M.mjs → renderer-Cz11KJmQ.mjs} +2 -2
  203. package/dist/{renderer-DWcbrx2M.mjs.map → renderer-Cz11KJmQ.mjs.map} +1 -1
  204. package/dist/{renderer-B2aXfdW_.mjs → renderer-D-eTVnDS.mjs} +2 -2
  205. package/dist/{renderer-B2aXfdW_.mjs.map → renderer-D-eTVnDS.mjs.map} +1 -1
  206. package/dist/renderer-D2QG9yIW.mjs +5 -0
  207. package/dist/renderer-D2woU27o.mjs +6 -0
  208. package/dist/{renderer-EhCkD11e.mjs → renderer-D8tdGi2P.mjs} +3 -3
  209. package/dist/{renderer-EhCkD11e.mjs.map → renderer-D8tdGi2P.mjs.map} +1 -1
  210. package/dist/{renderer-DuxzqfoE.mjs → renderer-D90PpIKG.mjs} +2 -2
  211. package/dist/renderer-DAhDiQQY.mjs +5 -0
  212. package/dist/{renderer-BmQbSQHf.mjs → renderer-DDBmBmQN.mjs} +2 -2
  213. package/dist/{renderer-BmQbSQHf.mjs.map → renderer-DDBmBmQN.mjs.map} +1 -1
  214. package/dist/renderer-DIjxOQFi.mjs +5 -0
  215. package/dist/{renderer-_AuL8mAi.mjs → renderer-DJWQWN1E.mjs} +3 -3
  216. package/dist/{renderer-_AuL8mAi.mjs.map → renderer-DJWQWN1E.mjs.map} +1 -1
  217. package/dist/{renderer-JiEpssIz.mjs → renderer-DL4oR40b.mjs} +2 -2
  218. package/dist/{renderer-JiEpssIz.mjs.map → renderer-DL4oR40b.mjs.map} +1 -1
  219. package/dist/{renderer-CrUudSLP.mjs → renderer-DNhOjz6C.mjs} +2 -2
  220. package/dist/{renderer-CrUudSLP.mjs.map → renderer-DNhOjz6C.mjs.map} +1 -1
  221. package/dist/renderer-DRzalGhU.mjs +5 -0
  222. package/dist/{renderer-BpdzhZE7.mjs → renderer-DS64UaYK.mjs} +3 -3
  223. package/dist/{renderer-BpdzhZE7.mjs.map → renderer-DS64UaYK.mjs.map} +1 -1
  224. package/dist/renderer-DY6S1jWp.mjs +5 -0
  225. package/dist/{renderer-CSPpKLi3.mjs → renderer-DYo_a5-8.mjs} +2 -2
  226. package/dist/{renderer-CSPpKLi3.mjs.map → renderer-DYo_a5-8.mjs.map} +1 -1
  227. package/dist/{renderer-Ck2pRec0.mjs → renderer-DacnnTjY.mjs} +3 -3
  228. package/dist/{renderer-Ck2pRec0.mjs.map → renderer-DacnnTjY.mjs.map} +1 -1
  229. package/dist/renderer-DeW0KNQV.mjs +5 -0
  230. package/dist/{renderer-CvOzuDX3.mjs → renderer-DjPC9l3w.mjs} +3 -3
  231. package/dist/{renderer-CvOzuDX3.mjs.map → renderer-DjPC9l3w.mjs.map} +1 -1
  232. package/dist/{renderer-BId5hBLb.mjs → renderer-DjwF10p2.mjs} +3 -3
  233. package/dist/{renderer-BId5hBLb.mjs.map → renderer-DjwF10p2.mjs.map} +1 -1
  234. package/dist/{renderer-CraudZUC.mjs → renderer-DmOewVsB.mjs} +3 -3
  235. package/dist/{renderer-CraudZUC.mjs.map → renderer-DmOewVsB.mjs.map} +1 -1
  236. package/dist/{renderer-BHrqEgIA.mjs → renderer-DqlvbOUt.mjs} +3 -3
  237. package/dist/{renderer-BHrqEgIA.mjs.map → renderer-DqlvbOUt.mjs.map} +1 -1
  238. package/dist/renderer-DsVSVFkl.mjs +5 -0
  239. package/dist/{renderer-DIqwz7dV.mjs → renderer-DvoPplvC.mjs} +2 -2
  240. package/dist/{renderer-BEpANdcO.mjs → renderer-Dw1e5phO.mjs} +3 -3
  241. package/dist/{renderer-BEpANdcO.mjs.map → renderer-Dw1e5phO.mjs.map} +1 -1
  242. package/dist/renderer-DxvcIgEU.mjs +5 -0
  243. package/dist/renderer-F0MKqmol.mjs +5 -0
  244. package/dist/{renderer-CKSdl0Xf.mjs → renderer-F410V727.mjs} +3 -3
  245. package/dist/{renderer-CKSdl0Xf.mjs.map → renderer-F410V727.mjs.map} +1 -1
  246. package/dist/{renderer-B3ypX3MH.mjs → renderer-Fm2brScz.mjs} +3 -3
  247. package/dist/{renderer-B3ypX3MH.mjs.map → renderer-Fm2brScz.mjs.map} +1 -1
  248. package/dist/{renderer-CI9Pq77W.mjs → renderer-GlyeFl5R.mjs} +3 -3
  249. package/dist/{renderer-CI9Pq77W.mjs.map → renderer-GlyeFl5R.mjs.map} +1 -1
  250. package/dist/{renderer-DZnUiiBp.mjs → renderer-ITtBRR4o.mjs} +3 -3
  251. package/dist/{renderer-DZnUiiBp.mjs.map → renderer-ITtBRR4o.mjs.map} +1 -1
  252. package/dist/{renderer-CwwmwM7J.mjs → renderer-Kj9AhRCc.mjs} +3 -3
  253. package/dist/{renderer-CwwmwM7J.mjs.map → renderer-Kj9AhRCc.mjs.map} +1 -1
  254. package/dist/{renderer-DNaHFctD.mjs → renderer-MS70wrQB.mjs} +2 -2
  255. package/dist/{renderer-DNaHFctD.mjs.map → renderer-MS70wrQB.mjs.map} +1 -1
  256. package/dist/{renderer-BEdc-7JW.mjs → renderer-Mdyv_W8K.mjs} +3 -3
  257. package/dist/{renderer-BEdc-7JW.mjs.map → renderer-Mdyv_W8K.mjs.map} +1 -1
  258. package/dist/renderer-OkbovcAc.mjs +5 -0
  259. package/dist/{renderer-Dvq11SEA.mjs → renderer-QMGrRiab.mjs} +2 -2
  260. package/dist/{renderer-Dvq11SEA.mjs.map → renderer-QMGrRiab.mjs.map} +1 -1
  261. package/dist/renderer-QyBeWMEL.mjs +5 -0
  262. package/dist/{renderer-B3c-j-e5.mjs → renderer-R0sJId_6.mjs} +2 -2
  263. package/dist/{renderer-B3c-j-e5.mjs.map → renderer-R0sJId_6.mjs.map} +1 -1
  264. package/dist/{renderer-DKXK5hDm.mjs → renderer-Rg1BFv8B.mjs} +2 -2
  265. package/dist/{renderer-DKXK5hDm.mjs.map → renderer-Rg1BFv8B.mjs.map} +1 -1
  266. package/dist/{renderer-BmTDXIUI.mjs → renderer-S6ez0leJ.mjs} +2 -2
  267. package/dist/{renderer-BmTDXIUI.mjs.map → renderer-S6ez0leJ.mjs.map} +1 -1
  268. package/dist/{renderer-ChoYV7Ko.mjs → renderer-YtRSM2cv.mjs} +2 -2
  269. package/dist/{renderer-ChoYV7Ko.mjs.map → renderer-YtRSM2cv.mjs.map} +1 -1
  270. package/dist/{renderer-CC72sZ8l.mjs → renderer-_-MCpvGq.mjs} +91 -73
  271. package/dist/renderer-_-MCpvGq.mjs.map +1 -0
  272. package/dist/{renderer-xezE7IZX.mjs → renderer-_Fh9IBlE.mjs} +3 -3
  273. package/dist/{renderer-xezE7IZX.mjs.map → renderer-_Fh9IBlE.mjs.map} +1 -1
  274. package/dist/{renderer-mpInX4Iy.mjs → renderer-dJcu7WqI.mjs} +3 -3
  275. package/dist/{renderer-mpInX4Iy.mjs.map → renderer-dJcu7WqI.mjs.map} +1 -1
  276. package/dist/renderer-hSh5IrDp.mjs +5 -0
  277. package/dist/{renderer-Dvg5nbgU.mjs → renderer-ktpusVT2.mjs} +3 -3
  278. package/dist/{renderer-Dvg5nbgU.mjs.map → renderer-ktpusVT2.mjs.map} +1 -1
  279. package/dist/renderer-puLncHft.mjs +5 -0
  280. package/dist/{renderer-D8_UYdDb.mjs → renderer-w8LKBg_5.mjs} +2 -2
  281. package/dist/{renderer-D8_UYdDb.mjs.map → renderer-w8LKBg_5.mjs.map} +1 -1
  282. package/dist/renderer-wnFCaw7j.mjs +5 -0
  283. package/dist/renderer-xjtlyGS1.mjs +5 -0
  284. package/dist/{renderer-Cvysm2Jg.mjs → renderer-z3YOOR3k.mjs} +3 -3
  285. package/dist/{renderer-Cvysm2Jg.mjs.map → renderer-z3YOOR3k.mjs.map} +1 -1
  286. package/dist/{renderers-CP8CFWDs-i6u_rhCX.mjs → renderers-CP8CFWDs-DXiR_PLR.mjs} +2 -2
  287. package/dist/{renderers-CP8CFWDs-i6u_rhCX.mjs.map → renderers-CP8CFWDs-DXiR_PLR.mjs.map} +1 -1
  288. package/dist/signals/index.mjs +4 -4
  289. package/package.json +56 -56
  290. package/dist/dist-PwT_Vmax.mjs.map +0 -1
  291. package/dist/preview-engine/chunk-OCX5AD23.mjs +0 -1
  292. package/dist/preview-engine/renderers-3T7Q4SPP.mjs +0 -1
  293. package/dist/preview-engine/renderers-4DV4REGM.mjs +0 -1
  294. package/dist/preview-engine/renderers-CQXQHOW2.mjs +0 -1
  295. package/dist/preview-engine/renderers-IXGM55XK.mjs +0 -1
  296. package/dist/preview-engine/renderers-KVHUVWSN.mjs +0 -1
  297. package/dist/preview-engine/renderers-M7R2ZJUP.mjs +0 -1
  298. package/dist/preview-engine/renderers-PMOO7DLX.mjs +0 -1
  299. package/dist/preview-engine/renderers-QCCPCH73.mjs +0 -1
  300. package/dist/preview-engine/renderers-RRXFJRGI.mjs +0 -1
  301. package/dist/preview-engine/renderers-VLMQR3DW.mjs +0 -1
  302. package/dist/preview-engine/renderers-WVTTRCVI.mjs +0 -1
  303. package/dist/preview-engine/renderers-X5PUIPU5.mjs +0 -1
  304. package/dist/preview-engine/renderers-YDCDY3BR.mjs +0 -1
  305. package/dist/preview-engine/renderers-YJNQ4B7B.mjs +0 -1
  306. package/dist/preview-engine/renderers-Z7YQUFAY.mjs +0 -1
  307. package/dist/preview-engine/skia-canvas-QBXAOGPB.mjs +0 -1
  308. package/dist/renderer-0lp9ClNc.mjs +0 -5
  309. package/dist/renderer-4g_BfiKp.mjs +0 -5
  310. package/dist/renderer-7Aw6AHqW.mjs +0 -5
  311. package/dist/renderer-B82v8PyC.mjs +0 -5
  312. package/dist/renderer-B8BDMJNz.mjs +0 -5
  313. package/dist/renderer-BCPRrhP8.mjs +0 -5
  314. package/dist/renderer-BFhzO6En.mjs +0 -5
  315. package/dist/renderer-BH0KF-y-.mjs +0 -6
  316. package/dist/renderer-BTI5ybyH.mjs +0 -5
  317. package/dist/renderer-Ba7LH8U2.mjs +0 -5
  318. package/dist/renderer-BcQBlfhC.mjs +0 -5
  319. package/dist/renderer-BdMJzCTz.mjs +0 -5
  320. package/dist/renderer-Bxi2j-tG.mjs +0 -5
  321. package/dist/renderer-CC72sZ8l.mjs.map +0 -1
  322. package/dist/renderer-CCn5ISVM.mjs +0 -5
  323. package/dist/renderer-CDRsdhg9.mjs +0 -5
  324. package/dist/renderer-CiCK8ZG_.mjs +0 -5
  325. package/dist/renderer-CsEk9TFz.mjs +0 -5
  326. package/dist/renderer-D1gx_-hi.mjs +0 -5
  327. package/dist/renderer-D5MCGNAF.mjs +0 -5
  328. package/dist/renderer-DD_MzvM-.mjs +0 -5
  329. package/dist/renderer-DP7YoZ0K.mjs +0 -5
  330. package/dist/renderer-DXiWvKij.mjs +0 -5
  331. package/dist/renderer-Dc6fW-o1.mjs +0 -5
  332. package/dist/renderer-DiurlsNT.mjs +0 -5
  333. package/dist/renderer-DvCUdgVz.mjs +0 -5
  334. package/dist/renderer-IiwAh9-K.mjs +0 -5
  335. package/dist/renderer-JlGXqH0E.mjs +0 -5
  336. package/dist/renderer-TZFKKgL1.mjs +0 -5
  337. package/dist/renderer-aEecoNPX.mjs +0 -5
  338. package/dist/renderer-ewhliYYP.mjs +0 -5
  339. package/dist/renderer-hQc6GgTi.mjs +0 -5
  340. package/dist/renderer-iuX0RZIi.mjs +0 -5
  341. package/dist/renderer-j4vkTzHa.mjs +0 -5
  342. package/dist/renderer-msPjwx_9.mjs +0 -5
  343. package/dist/renderer-pI2ndu-b.mjs +0 -5
  344. package/dist/renderer-x1OGMhsC.mjs +0 -5
@@ -20139,7 +20139,7 @@ function decodeBase64(base64$1) {
20139
20139
  }
20140
20140
  function extractFontFamiliesFromLottie(lottieJson) {
20141
20141
  const fonts = /* @__PURE__ */ new Set();
20142
- const fontsList = lottieJson?.fonts?.list;
20142
+ const fontsList = (lottieJson?.fonts)?.list;
20143
20143
  if (Array.isArray(fontsList)) for (const entry of fontsList) {
20144
20144
  if (entry?.fName && typeof entry.fName === "string") fonts.add(entry.fName);
20145
20145
  if (entry?.fFamily && typeof entry.fFamily === "string") fonts.add(entry.fFamily);
@@ -20147,19 +20147,24 @@ function extractFontFamiliesFromLottie(lottieJson) {
20147
20147
  const layers = lottieJson?.layers;
20148
20148
  if (!Array.isArray(layers)) return [...fonts];
20149
20149
  for (const layer of layers) {
20150
- if (layer?.ty !== 5) continue;
20151
- const k = layer?.t?.d?.k ?? layer?.t?.k;
20150
+ const l = layer;
20151
+ if (l?.ty !== 5) continue;
20152
+ const k = l?.t?.d?.k ?? l?.t?.k;
20152
20153
  if (!k) continue;
20153
20154
  const kArr = Array.isArray(k) ? k : [k];
20154
20155
  for (const kf of kArr) {
20156
+ const kfObj = kf;
20155
20157
  const possibleDocs = [
20156
- kf?.s,
20157
- kf?.e,
20158
+ kfObj?.s,
20159
+ kfObj?.e,
20158
20160
  kf
20159
20161
  ].filter(Boolean);
20160
20162
  for (const doc of possibleDocs) {
20161
20163
  const docArr = Array.isArray(doc) ? doc : [doc];
20162
- for (const d of docArr) if (d?.f && typeof d.f === "string") fonts.add(d.f);
20164
+ for (const d of docArr) {
20165
+ const docItem = d;
20166
+ if (docItem?.f && typeof docItem.f === "string") fonts.add(docItem.f);
20167
+ }
20163
20168
  }
20164
20169
  }
20165
20170
  }
@@ -20187,7 +20192,7 @@ async function registerLottieFont(family) {
20187
20192
  if (typeof window !== "undefined" && typeof document !== "undefined" && typeof document.createElement === "function" && typeof document.getElementById === "function") {
20188
20193
  try {
20189
20194
  await localFontManager.loadFont(family, fontUrl);
20190
- } catch (err) {
20195
+ } catch (_err) {
20191
20196
  fontUrl = GetFontAssetUrl(family);
20192
20197
  try {
20193
20198
  await localFontManager.loadFont(family, fontUrl);
@@ -20229,16 +20234,58 @@ async function registerLottieFont(family) {
20229
20234
  if (registered) registeredLottieFonts.add(family);
20230
20235
  else console.warn(`[LottieRenderer] All font registration attempts failed for "${family}". Text using this font will not render.`);
20231
20236
  }
20237
+ var HeadlessLottieCanvas = class {
20238
+ width;
20239
+ height;
20240
+ style = {};
20241
+ constructor(width, height) {
20242
+ this.width = width;
20243
+ this.height = height;
20244
+ }
20245
+ addEventListener() {}
20246
+ removeEventListener() {}
20247
+ getContext(contextId) {
20248
+ if (contextId === "2d") return {
20249
+ fillRect() {},
20250
+ clearRect() {},
20251
+ putImageData() {},
20252
+ createImageData(width, height) {
20253
+ return {
20254
+ width,
20255
+ height,
20256
+ data: new Uint8ClampedArray(width * height * 4)
20257
+ };
20258
+ },
20259
+ getImageData(_sx, _sy, sw, sh) {
20260
+ return {
20261
+ width: sw,
20262
+ height: sh,
20263
+ data: new Uint8ClampedArray(sw * sh * 4)
20264
+ };
20265
+ }
20266
+ };
20267
+ return null;
20268
+ }
20269
+ getBoundingClientRect() {
20270
+ return {
20271
+ left: 0,
20272
+ top: 0,
20273
+ width: this.width,
20274
+ height: this.height
20275
+ };
20276
+ }
20277
+ };
20232
20278
  var LottieInstance = class {
20233
20279
  dotLottie;
20234
20280
  canvas;
20235
20281
  loadPromise;
20236
20282
  _width;
20237
20283
  _height;
20284
+ uploadBuffer = null;
20238
20285
  constructor(src, width, height, data) {
20239
20286
  this._width = width;
20240
20287
  this._height = height;
20241
- this.canvas = new OffscreenCanvas(width, height);
20288
+ this.canvas = typeof window !== "undefined" && typeof document !== "undefined" && typeof document.createElement === "function" && typeof document.getElementById === "function" ? new OffscreenCanvas(width, height) : new HeadlessLottieCanvas(width, height);
20242
20289
  this.dotLottie = new DotLottie({
20243
20290
  canvas: this.canvas,
20244
20291
  ...data ? { data } : { src },
@@ -20281,6 +20328,29 @@ var LottieInstance = class {
20281
20328
  async ready() {
20282
20329
  await this.loadPromise;
20283
20330
  }
20331
+ renderPixels(frame, fit) {
20332
+ const loopedFrame = Math.floor(frame) % Math.max(1, this.totalFrames);
20333
+ this.dotLottie.setLayout({
20334
+ align: [.5, .5],
20335
+ fit: fit || "contain"
20336
+ });
20337
+ this.dotLottie.resize();
20338
+ this.dotLottie.setFrame(loopedFrame);
20339
+ try {
20340
+ this.dotLottie.render?.();
20341
+ } catch (_) {}
20342
+ const core = this.dotLottie._dotLottieCore;
20343
+ if (core && typeof core.get_pixel_buffer === "function") {
20344
+ const buf = core.get_pixel_buffer();
20345
+ const expectedLength = this._width * this._height * 4;
20346
+ if (buf && buf.byteLength === expectedLength) {
20347
+ if (!this.uploadBuffer || this.uploadBuffer.byteLength !== expectedLength) this.uploadBuffer = new Uint8Array(expectedLength);
20348
+ this.uploadBuffer.set(buf);
20349
+ return premultiplyPixels(this.uploadBuffer);
20350
+ }
20351
+ }
20352
+ return null;
20353
+ }
20284
20354
  renderFrame(frame, fit) {
20285
20355
  const loopedFrame = Math.floor(frame) % Math.max(1, this.totalFrames);
20286
20356
  this.dotLottie.setLayout({
@@ -20298,6 +20368,7 @@ var LottieInstance = class {
20298
20368
  try {
20299
20369
  this.dotLottie.destroy();
20300
20370
  } catch (_) {}
20371
+ this.uploadBuffer = null;
20301
20372
  }
20302
20373
  };
20303
20374
  let wasmConfigured = false;
@@ -20329,13 +20400,7 @@ function polyfillHeadlessDOM() {
20329
20400
  async function ensureWasmConfigured() {
20330
20401
  if (wasmConfigured) return;
20331
20402
  if (!(typeof window !== "undefined" && typeof document !== "undefined" && typeof document.createElement === "function" && typeof document.getElementById === "function")) {
20332
- if (typeof globalThis.OffscreenCanvas === "undefined") try {
20333
- const { Canvas: Canvas$1 } = await import(
20334
- /* webpackIgnore: true */
20335
- "skia-canvas"
20336
- );
20337
- globalThis.OffscreenCanvas = Canvas$1;
20338
- } catch {}
20403
+ if (typeof globalThis.OffscreenCanvas === "undefined") globalThis.OffscreenCanvas = HeadlessLottieCanvas;
20339
20404
  polyfillHeadlessDOM();
20340
20405
  if (typeof globalThis.Response === "function") try {
20341
20406
  Object.defineProperty(globalThis.Response, Symbol.hasInstance, {
@@ -20418,7 +20483,7 @@ var LottieLoader = class {
20418
20483
  try {
20419
20484
  const fs$1 = await import(
20420
20485
  /* webpackIgnore: true */
20421
- "fs/promises"
20486
+ "node:fs/promises"
20422
20487
  );
20423
20488
  if (filePath.endsWith(".json")) {
20424
20489
  const jsonContent = await fs$1.readFile(filePath, "utf-8");
@@ -20467,37 +20532,27 @@ async function drawLottieNode(ctx, pass, props) {
20467
20532
  const cacheKey = `${props.src}@@${loopedFrame}@@${resolvedWidth}x${resolvedHeight}@@${fitMode}`;
20468
20533
  let tex = textureCache.acquire(cacheKey);
20469
20534
  if (!tex) {
20470
- const canvas = instance.renderFrame(loopedFrame, fitMode);
20471
20535
  tex = ctx.device.createTexture({
20472
20536
  size: [instance.width, instance.height],
20473
20537
  format: "rgba8unorm",
20474
20538
  usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
20475
20539
  });
20476
- try {
20477
- ctx.device.queue.copyExternalImageToTexture({ source: canvas }, {
20478
- texture: tex,
20479
- premultipliedAlpha: true
20480
- }, [instance.width, instance.height]);
20481
- } catch {
20482
- const c2d = canvas.getContext("2d");
20483
- if (c2d) {
20484
- const imgData = c2d.getImageData(0, 0, instance.width, instance.height);
20485
- const pixelBuffer = premultiplyPixels(new Uint8Array(imgData.data.buffer, imgData.data.byteOffset, imgData.data.byteLength));
20486
- ctx.device.queue.writeTexture({ texture: tex }, pixelBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);
20487
- } else {
20488
- const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
20489
- if (gl) {
20490
- const pixels = new Uint8Array(instance.width * instance.height * 4);
20491
- gl.readPixels(0, 0, instance.width, instance.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
20492
- const flipped = new Uint8Array(pixels.length);
20493
- const bytesPerRow = instance.width * 4;
20494
- for (let y = 0; y < instance.height; y++) {
20495
- const srcOffset = y * bytesPerRow;
20496
- const dstOffset = (instance.height - 1 - y) * bytesPerRow;
20497
- flipped.set(pixels.subarray(srcOffset, srcOffset + bytesPerRow), dstOffset);
20498
- }
20499
- ctx.device.queue.writeTexture({ texture: tex }, flipped, { bytesPerRow }, [instance.width, instance.height]);
20500
- } else console.error("[LottieRenderer] Could not acquire 2D or WebGL context to read pixels.");
20540
+ const pixelBuffer = instance.renderPixels(loopedFrame, fitMode);
20541
+ if (pixelBuffer) ctx.device.queue.writeTexture({ texture: tex }, pixelBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);
20542
+ else {
20543
+ const canvas = instance.renderFrame(loopedFrame, fitMode);
20544
+ try {
20545
+ ctx.device.queue.copyExternalImageToTexture({ source: canvas }, {
20546
+ texture: tex,
20547
+ premultipliedAlpha: true
20548
+ }, [instance.width, instance.height]);
20549
+ } catch {
20550
+ const c2d = canvas.getContext("2d");
20551
+ if (c2d) {
20552
+ const imgData = c2d.getImageData(0, 0, instance.width, instance.height);
20553
+ const fallbackBuffer = premultiplyPixels(new Uint8Array(imgData.data.buffer, imgData.data.byteOffset, imgData.data.byteLength));
20554
+ ctx.device.queue.writeTexture({ texture: tex }, fallbackBuffer, { bytesPerRow: instance.width * 4 }, [instance.width, instance.height]);
20555
+ }
20501
20556
  }
20502
20557
  }
20503
20558
  textureCache.set(cacheKey, tex, ctx.device);
@@ -20823,8 +20878,40 @@ var MediaDecoderCache = class {
20823
20878
  videoDecoders = /* @__PURE__ */ new Map();
20824
20879
  audioDecoders = /* @__PURE__ */ new Map();
20825
20880
  lastAccessed = /* @__PURE__ */ new Map();
20881
+ /** Rendered frames so far (see `tick`), and the frame each decoder was last used on. */
20882
+ ticks = 0;
20883
+ lastTick = /* @__PURE__ */ new Map();
20826
20884
  touchKey(key) {
20827
20885
  this.lastAccessed.set(key, Date.now());
20886
+ this.lastTick.set(key, this.ticks);
20887
+ }
20888
+ dropKey(key) {
20889
+ const videoDecoder = this.videoDecoders.get(key);
20890
+ if (videoDecoder) {
20891
+ try {
20892
+ videoDecoder.destroy();
20893
+ } catch (_) {}
20894
+ this.videoDecoders.delete(key);
20895
+ }
20896
+ const audioDecoder = this.audioDecoders.get(key);
20897
+ if (audioDecoder) {
20898
+ try {
20899
+ audioDecoder.destroy();
20900
+ } catch (_) {}
20901
+ this.audioDecoders.delete(key);
20902
+ }
20903
+ this.lastAccessed.delete(key);
20904
+ this.lastTick.delete(key);
20905
+ }
20906
+ /**
20907
+ * Called once per rendered frame by headless renders. A decoder holds a
20908
+ * full-frame RGBA buffer and native decoder state, so one that no layer has
20909
+ * drawn for `idleFrames` frames (its clip ended, or a still render used a
20910
+ * one-off id) is released instead of waiting for the wall-clock prune.
20911
+ */
20912
+ tick(idleFrames = 120) {
20913
+ this.ticks++;
20914
+ for (const [key, last] of this.lastTick) if (this.ticks - last > idleFrames) this.dropKey(key);
20828
20915
  }
20829
20916
  destroy() {
20830
20917
  for (const decoder of this.videoDecoders.values()) try {
@@ -20836,22 +20923,15 @@ var MediaDecoderCache = class {
20836
20923
  } catch (_) {}
20837
20924
  this.audioDecoders.clear();
20838
20925
  this.lastAccessed.clear();
20926
+ this.lastTick.clear();
20927
+ }
20928
+ /** Decoders currently open (for tests and diagnostics). */
20929
+ get size() {
20930
+ return this.videoDecoders.size + this.audioDecoders.size;
20839
20931
  }
20840
20932
  prune(maxAgeMs = 3e5) {
20841
20933
  const now = Date.now();
20842
- for (const [key, lastTime] of this.lastAccessed.entries()) if (now - lastTime > maxAgeMs) {
20843
- const videoDecoder = this.videoDecoders.get(key);
20844
- if (videoDecoder) {
20845
- videoDecoder.destroy();
20846
- this.videoDecoders.delete(key);
20847
- }
20848
- const audioDecoder = this.audioDecoders.get(key);
20849
- if (audioDecoder) {
20850
- audioDecoder.destroy();
20851
- this.audioDecoders.delete(key);
20852
- }
20853
- this.lastAccessed.delete(key);
20854
- }
20934
+ for (const [key, lastTime] of this.lastAccessed.entries()) if (now - lastTime > maxAgeMs) this.dropKey(key);
20855
20935
  }
20856
20936
  getVideo(url, isHeadless, nodeId) {
20857
20937
  const key = `${url}-${isHeadless}-${nodeId ?? "default"}`;
@@ -20876,16 +20956,8 @@ var MediaDecoderCache = class {
20876
20956
  return decoder;
20877
20957
  }
20878
20958
  clearNode(nodeId) {
20879
- for (const [key, decoder] of this.videoDecoders) if (key.includes(nodeId)) {
20880
- decoder.destroy();
20881
- this.videoDecoders.delete(key);
20882
- this.lastAccessed.delete(key);
20883
- }
20884
- for (const [key, decoder] of this.audioDecoders) if (key.includes(nodeId)) {
20885
- decoder.destroy();
20886
- this.audioDecoders.delete(key);
20887
- this.lastAccessed.delete(key);
20888
- }
20959
+ const keys = [...this.videoDecoders.keys(), ...this.audioDecoders.keys()];
20960
+ for (const key of keys) if (key.includes(nodeId)) this.dropKey(key);
20889
20961
  }
20890
20962
  };
20891
20963
  const mediaDecoderCache = new MediaDecoderCache();
@@ -28205,43 +28277,125 @@ function organizeGlyphPolygons({ contours: glyphContours, simplified }) {
28205
28277
  }
28206
28278
  return polygons;
28207
28279
  }
28280
+ /** Where segments ab and cd cross strictly inside both, or null. */
28281
+ function segmentCrossing(a, b, c, d) {
28282
+ const rx = b.x - a.x;
28283
+ const ry = b.y - a.y;
28284
+ const sx = d.x - c.x;
28285
+ const sy = d.y - c.y;
28286
+ const den = rx * sy - ry * sx;
28287
+ if (Math.abs(den) < 1e-12) return null;
28288
+ const t = ((c.x - a.x) * sy - (c.y - a.y) * sx) / den;
28289
+ const u = ((c.x - a.x) * ry - (c.y - a.y) * rx) / den;
28290
+ const eps = 1e-9;
28291
+ if (t <= eps || t >= 1 - eps || u <= eps || u >= 1 - eps) return null;
28292
+ return {
28293
+ x: a.x + rx * t,
28294
+ y: a.y + ry * t
28295
+ };
28296
+ }
28208
28297
  /**
28209
- * For outlines that may overlap: fonts wind filled contours one way and holes
28210
- * the other, so the winding of the largest contour marks the outlines; each
28211
- * hole goes to the smallest outline around it. Overlapping outlines become
28212
- * separate solids, which look the same once extruded.
28298
+ * Splits a contour that crosses itself into simple loops: at each crossing
28299
+ * the contour is cut into the part between the two crossing edges and the
28300
+ * rest. Font outlines meant to be filled with the nonzero rule (variable
28301
+ * fonts, overlapping strokes) often cross themselves, and a triangulator
28302
+ * given such a contour fills the wrong areas (a "V" with its notch filled).
28303
+ */
28304
+ function untangleContour(contour, depth = 0) {
28305
+ const n = contour.length;
28306
+ if (n < 3) return [];
28307
+ if (depth > 64) return [contour];
28308
+ for (let i = 0; i < n; i++) {
28309
+ const a = contour[i];
28310
+ const b = contour[(i + 1) % n];
28311
+ for (let j = i + 2; j < n; j++) {
28312
+ if (i === 0 && j === n - 1) continue;
28313
+ const x = segmentCrossing(a, b, contour[j], contour[(j + 1) % n]);
28314
+ if (!x) continue;
28315
+ const inner = [x, ...contour.slice(i + 1, j + 1)];
28316
+ const outer = [
28317
+ x,
28318
+ ...contour.slice(j + 1),
28319
+ ...contour.slice(0, i + 1)
28320
+ ];
28321
+ return [...untangleContour(inner, depth + 1), ...untangleContour(outer, depth + 1)];
28322
+ }
28323
+ }
28324
+ return Math.abs(computeContourSignedArea(contour)) > 1e-9 ? [contour] : [];
28325
+ }
28326
+ /** Nonzero winding number of a set of contours around a point. */
28327
+ function windingNumber(p, contours) {
28328
+ let w = 0;
28329
+ for (const c of contours) for (let i = 0; i < c.length; i++) {
28330
+ const a = c[i];
28331
+ const b = c[(i + 1) % c.length];
28332
+ const side = (b.x - a.x) * (p.y - a.y) - (p.x - a.x) * (b.y - a.y);
28333
+ if (a.y <= p.y) {
28334
+ if (b.y > p.y && side > 0) w++;
28335
+ } else if (b.y <= p.y && side < 0) w--;
28336
+ }
28337
+ return w;
28338
+ }
28339
+ /** A point just inside a simple loop, next to its longest edge. */
28340
+ function pointJustInside(loop) {
28341
+ let best = 0;
28342
+ let bestLen = -1;
28343
+ for (let i = 0; i < loop.length; i++) {
28344
+ const a$1 = loop[i];
28345
+ const b$1 = loop[(i + 1) % loop.length];
28346
+ const len = Math.hypot(b$1.x - a$1.x, b$1.y - a$1.y);
28347
+ if (len > bestLen) {
28348
+ bestLen = len;
28349
+ best = i;
28350
+ }
28351
+ }
28352
+ const a = loop[best];
28353
+ const b = loop[(best + 1) % loop.length];
28354
+ const mx = (a.x + b.x) / 2;
28355
+ const my = (a.y + b.y) / 2;
28356
+ const eps = Math.max(1e-4, Math.min(.01, bestLen * .001));
28357
+ const nx = -(b.y - a.y) / bestLen * eps;
28358
+ const ny = (b.x - a.x) / bestLen * eps;
28359
+ const p = {
28360
+ x: mx + nx,
28361
+ y: my + ny
28362
+ };
28363
+ return isPointInsidePolygon(p, loop) ? p : {
28364
+ x: mx - nx,
28365
+ y: my - ny
28366
+ };
28367
+ }
28368
+ /**
28369
+ * For outlines that were not simplified (no skia, as in the browser):
28370
+ * contours may cross themselves and each other, and are meant to be filled
28371
+ * with the nonzero rule. Self-crossings are split into simple loops; a loop
28372
+ * whose inside is filled under the nonzero rule becomes an outline, and one
28373
+ * that is empty (a counter) becomes a hole of the smallest outline around it.
28374
+ * Overlapping outlines become separate solids, which look the same once
28375
+ * extruded.
28213
28376
  */
28214
28377
  function organizeByWinding(glyphContours) {
28215
- const contours = glyphContours.map((contour) => {
28216
- const signed = computeContourSignedArea(contour);
28217
- return {
28218
- contour,
28219
- signed,
28220
- area: Math.abs(signed)
28221
- };
28222
- });
28223
- if (contours.length === 0) return [];
28224
- contours.sort((a, b) => b.area - a.area);
28225
- const filled = Math.sign(contours[0].signed);
28378
+ const loops = glyphContours.flatMap((c) => untangleContour(c));
28226
28379
  const polygons = [];
28227
- for (const c of contours) if (Math.sign(c.signed) === filled) polygons.push({
28228
- outer: c.contour,
28380
+ const holes = [];
28381
+ for (const loop of loops) if (windingNumber(pointJustInside(loop), glyphContours) !== 0) polygons.push({
28382
+ outer: loop,
28229
28383
  holes: []
28230
28384
  });
28231
- for (const c of contours) {
28232
- if (Math.sign(c.signed) === filled) continue;
28233
- const probe = c.contour[0];
28234
- const mid = c.contour[Math.floor(c.contour.length / 2)];
28385
+ else holes.push(loop);
28386
+ for (const hole of holes) {
28387
+ const area = Math.abs(computeContourSignedArea(hole));
28388
+ const probe = pointJustInside(hole);
28235
28389
  let home;
28236
28390
  let homeArea = Number.POSITIVE_INFINITY;
28237
28391
  for (const poly of polygons) {
28238
- const area = Math.abs(computeContourSignedArea(poly.outer));
28239
- if (area > c.area && area < homeArea && (isPointInsidePolygon(probe, poly.outer) || isPointInsidePolygon(mid, poly.outer))) {
28392
+ const outerArea = Math.abs(computeContourSignedArea(poly.outer));
28393
+ if (outerArea > area && outerArea < homeArea && isPointInsidePolygon(probe, poly.outer)) {
28240
28394
  home = poly;
28241
- homeArea = area;
28395
+ homeArea = outerArea;
28242
28396
  }
28243
28397
  }
28244
- home?.holes.push(c.contour);
28398
+ home?.holes.push(hole);
28245
28399
  }
28246
28400
  return polygons;
28247
28401
  }
@@ -31053,4 +31207,4 @@ if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThi
31053
31207
 
31054
31208
  //#endregion
31055
31209
  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 };
31056
- //# sourceMappingURL=dist-PwT_Vmax.mjs.map
31210
+ //# sourceMappingURL=dist-CturBK2Z.mjs.map