framefields 2.1.1 → 2.1.3

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 (227) hide show
  1. package/README.md +3 -0
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-GGuQ_JI0.mjs → audio-DqaHxtG3.mjs} +3 -3
  4. package/dist/{audio-GGuQ_JI0.mjs.map → audio-DqaHxtG3.mjs.map} +1 -1
  5. package/dist/{dist-Bb8BoMiw.mjs → dist-BgFYDCoL.mjs} +5 -3
  6. package/dist/dist-BgFYDCoL.mjs.map +1 -0
  7. package/dist/{dist-DkuDAIrG.mjs → dist-Cog5jyVI.mjs} +42 -40
  8. package/dist/dist-Cog5jyVI.mjs.map +1 -0
  9. package/dist/effects/index.mjs +34 -34
  10. package/dist/{effects-D6wFg2FR.mjs → effects-CXrmO68D.mjs} +2 -2
  11. package/dist/{effects-D6wFg2FR.mjs.map → effects-CXrmO68D.mjs.map} +1 -1
  12. package/dist/fonts/index.mjs +2 -2
  13. package/dist/{fonts-CZMYtbP7.mjs → fonts-BUVSUWXJ.mjs} +3 -3
  14. package/dist/fonts-BUVSUWXJ.mjs.map +1 -0
  15. package/dist/{gpu-DG3gI88-.mjs → gpu-Bj08zUc5.mjs} +2 -2
  16. package/dist/{gpu-DG3gI88-.mjs.map → gpu-Bj08zUc5.mjs.map} +1 -1
  17. package/dist/index-BcA8rep0.d.mts.map +1 -1
  18. package/dist/index-Cpkzy5XR.d.mts.map +1 -1
  19. package/dist/index.mjs +48 -48
  20. package/dist/preview/index.mjs +10 -10
  21. package/dist/{preview--rOXbBxl.mjs → preview-BOqCRCgp.mjs} +2 -2
  22. package/dist/{preview--rOXbBxl.mjs.map → preview-BOqCRCgp.mjs.map} +1 -1
  23. package/dist/preview-engine/audio.mjs +1 -1
  24. package/dist/preview-engine/{chunk-XC5WZNOY.mjs → chunk-5MSAA3DL.mjs} +2 -2
  25. package/dist/preview-engine/{chunk-5FC7GOWW.mjs → chunk-AE2336RK.mjs} +1 -1
  26. package/dist/preview-engine/chunk-AKMCLVJ6.mjs +5 -0
  27. package/dist/preview-engine/{chunk-E4RAFHZM.mjs → chunk-ATLWPS6N.mjs} +1 -1
  28. package/dist/preview-engine/chunk-JJ5EF3EY.mjs +1 -0
  29. package/dist/preview-engine/{chunk-BWJS6G7R.mjs → chunk-LQENNFBA.mjs} +6 -6
  30. package/dist/preview-engine/chunk-N4OG2BHX.mjs +3 -0
  31. package/dist/preview-engine/{chunk-7EPDVSCL.mjs → chunk-NI577OMQ.mjs} +1 -1
  32. package/dist/preview-engine/{chunk-QY7MHWZW.mjs → chunk-USM33CF5.mjs} +1 -1
  33. package/dist/preview-engine/effects.mjs +1 -1
  34. package/dist/preview-engine/fonts.mjs +1 -1
  35. package/dist/preview-engine/framefields.mjs +1 -1
  36. package/dist/preview-engine/player.mjs +5 -5
  37. package/dist/preview-engine/{renderers-YZEVPHPQ.mjs → renderers-BH5MXUTT.mjs} +1 -1
  38. package/dist/preview-engine/signals.mjs +1 -1
  39. package/dist/{program-Cc5AsBHz.mjs → program-D8JoVobr.mjs} +2 -2
  40. package/dist/{program-Cc5AsBHz.mjs.map → program-D8JoVobr.mjs.map} +1 -1
  41. package/dist/renderer/index.mjs +2 -2
  42. package/dist/{renderer-C7UZLOYk.mjs → renderer--2bwnzBi.mjs} +2 -2
  43. package/dist/{renderer-C7UZLOYk.mjs.map → renderer--2bwnzBi.mjs.map} +1 -1
  44. package/dist/{renderer-DzrM1KMN.mjs → renderer--JBbEfTc.mjs} +3 -3
  45. package/dist/{renderer-DzrM1KMN.mjs.map → renderer--JBbEfTc.mjs.map} +1 -1
  46. package/dist/{renderer-NXdm6HLb.mjs → renderer-0dD1VQsz.mjs} +3 -3
  47. package/dist/{renderer-NXdm6HLb.mjs.map → renderer-0dD1VQsz.mjs.map} +1 -1
  48. package/dist/{renderer-BygIYH8s.mjs → renderer-0fRv8mc5.mjs} +2 -2
  49. package/dist/{renderer-BygIYH8s.mjs.map → renderer-0fRv8mc5.mjs.map} +1 -1
  50. package/dist/renderer-3MuT2oZO.mjs +5 -0
  51. package/dist/{renderer-Bb8T5eRX.mjs → renderer-58bVJfZx.mjs} +2 -2
  52. package/dist/{renderer-Bb8T5eRX.mjs.map → renderer-58bVJfZx.mjs.map} +1 -1
  53. package/dist/renderer-AX_fHrXM.mjs +5 -0
  54. package/dist/{renderer-DkyXqrQ6.mjs → renderer-B-QXAPY0.mjs} +2 -2
  55. package/dist/{renderer-DkyXqrQ6.mjs.map → renderer-B-QXAPY0.mjs.map} +1 -1
  56. package/dist/renderer-B2-LQreV.mjs +5 -0
  57. package/dist/renderer-B2QhkksW.mjs +5 -0
  58. package/dist/renderer-B5CoE2Cv.mjs +5 -0
  59. package/dist/renderer-B6Au6f82.mjs +5 -0
  60. package/dist/renderer-B6qAMLXh.mjs +5 -0
  61. package/dist/{renderer-DX2qEJTL.mjs → renderer-B6x_Mmpf.mjs} +53 -53
  62. package/dist/{renderer-DX2qEJTL.mjs.map → renderer-B6x_Mmpf.mjs.map} +1 -1
  63. package/dist/{renderer-BWVsBB3t.mjs → renderer-B7jZuO6k.mjs} +2 -2
  64. package/dist/{renderer-BWVsBB3t.mjs.map → renderer-B7jZuO6k.mjs.map} +1 -1
  65. package/dist/{renderer-c4AorKyw.mjs → renderer-B8Wjov5-.mjs} +2 -2
  66. package/dist/{renderer-Br9BOkQs.mjs → renderer-B9ProG0Z.mjs} +2 -2
  67. package/dist/{renderer-Br9BOkQs.mjs.map → renderer-B9ProG0Z.mjs.map} +1 -1
  68. package/dist/renderer-BEfvyxL_.mjs +5 -0
  69. package/dist/renderer-BH4j4urG.mjs +5 -0
  70. package/dist/renderer-BH4zfzus.mjs +5 -0
  71. package/dist/{renderer-D8-zNjyz.mjs → renderer-BJD6Ouon.mjs} +2 -2
  72. package/dist/{renderer-D8-zNjyz.mjs.map → renderer-BJD6Ouon.mjs.map} +1 -1
  73. package/dist/{renderer-9L0p8IT3.mjs → renderer-BJ_GtjUk.mjs} +2 -2
  74. package/dist/{renderer-D2FFvxsq.mjs → renderer-BNyDJZzl.mjs} +3 -3
  75. package/dist/{renderer-D2FFvxsq.mjs.map → renderer-BNyDJZzl.mjs.map} +1 -1
  76. package/dist/{renderer-_1xGBbxn.mjs → renderer-BPDita2c.mjs} +5 -5
  77. package/dist/{renderer-_1xGBbxn.mjs.map → renderer-BPDita2c.mjs.map} +1 -1
  78. package/dist/renderer-BRjW_pgJ.mjs +6 -0
  79. package/dist/renderer-BVo6W_BO.mjs +5 -0
  80. package/dist/{renderer-Dy-DBU0X.mjs → renderer-BXZo84vM.mjs} +2 -2
  81. package/dist/{renderer-Dy-DBU0X.mjs.map → renderer-BXZo84vM.mjs.map} +1 -1
  82. package/dist/{renderer-Bg7647VN.mjs → renderer-Ba7Rc8DE.mjs} +3 -3
  83. package/dist/{renderer-Bg7647VN.mjs.map → renderer-Ba7Rc8DE.mjs.map} +1 -1
  84. package/dist/{renderer-BKf1qDwL.mjs → renderer-BaYEXoS3.mjs} +3 -3
  85. package/dist/{renderer-BKf1qDwL.mjs.map → renderer-BaYEXoS3.mjs.map} +1 -1
  86. package/dist/renderer-BbxBM7Vh.mjs +5 -0
  87. package/dist/{renderer-DWEvQ-hQ.mjs → renderer-BcFdZx4j.mjs} +3 -3
  88. package/dist/{renderer-DWEvQ-hQ.mjs.map → renderer-BcFdZx4j.mjs.map} +1 -1
  89. package/dist/{renderer-Dno-fujw.mjs → renderer-BeuG4dyz.mjs} +2 -2
  90. package/dist/{renderer-Dno-fujw.mjs.map → renderer-BeuG4dyz.mjs.map} +1 -1
  91. package/dist/{renderer-CoGP4Mvf.mjs → renderer-BlTPu9QT.mjs} +2 -2
  92. package/dist/{renderer-CoGP4Mvf.mjs.map → renderer-BlTPu9QT.mjs.map} +1 -1
  93. package/dist/{renderer-BI5rvAyo.mjs → renderer-Bm0W9qgc.mjs} +3 -3
  94. package/dist/{renderer-BI5rvAyo.mjs.map → renderer-Bm0W9qgc.mjs.map} +1 -1
  95. package/dist/{renderer-DDqwds9R.mjs → renderer-Bos8nRhT.mjs} +2 -2
  96. package/dist/{renderer-DDqwds9R.mjs.map → renderer-Bos8nRhT.mjs.map} +1 -1
  97. package/dist/{renderer-C27RfwXN.mjs → renderer-BqCx28Zb.mjs} +3 -3
  98. package/dist/{renderer-C27RfwXN.mjs.map → renderer-BqCx28Zb.mjs.map} +1 -1
  99. package/dist/{renderer-CMsjnZ0G.mjs → renderer-Br1OuXr_.mjs} +3 -3
  100. package/dist/{renderer-CMsjnZ0G.mjs.map → renderer-Br1OuXr_.mjs.map} +1 -1
  101. package/dist/{renderer-timEC0Gl.mjs → renderer-BwBc5xNu.mjs} +3 -3
  102. package/dist/{renderer-timEC0Gl.mjs.map → renderer-BwBc5xNu.mjs.map} +1 -1
  103. package/dist/{renderer-CydWqyf0.mjs → renderer-ByGPFIu2.mjs} +2 -2
  104. package/dist/{renderer-CydWqyf0.mjs.map → renderer-ByGPFIu2.mjs.map} +1 -1
  105. package/dist/{renderer-B1Zn91xt.mjs → renderer-C-AzyBir.mjs} +3 -3
  106. package/dist/{renderer-B1Zn91xt.mjs.map → renderer-C-AzyBir.mjs.map} +1 -1
  107. package/dist/{renderer-D0aZNkQE.mjs → renderer-C-BjN5HM.mjs} +3 -3
  108. package/dist/{renderer-D0aZNkQE.mjs.map → renderer-C-BjN5HM.mjs.map} +1 -1
  109. package/dist/renderer-C07CnYVd.mjs +5 -0
  110. package/dist/renderer-C2Z3vJCu.mjs +5 -0
  111. package/dist/renderer-C31qkFvm.mjs +5 -0
  112. package/dist/renderer-C3FV8cYm.mjs +5 -0
  113. package/dist/{renderer-DX8aBDqR.mjs → renderer-CATBdL9s.mjs} +2 -2
  114. package/dist/{renderer-DX8aBDqR.mjs.map → renderer-CATBdL9s.mjs.map} +1 -1
  115. package/dist/{renderer-DyzNM721.mjs → renderer-CBBhVrwO.mjs} +2 -2
  116. package/dist/{renderer-DyzNM721.mjs.map → renderer-CBBhVrwO.mjs.map} +1 -1
  117. package/dist/{renderer-DUhXH5Tz.mjs → renderer-CJnIeI0m.mjs} +3 -3
  118. package/dist/{renderer-DUhXH5Tz.mjs.map → renderer-CJnIeI0m.mjs.map} +1 -1
  119. package/dist/{renderer-DYIPWN_B.mjs → renderer-CMOAtGdC.mjs} +3 -3
  120. package/dist/{renderer-DYIPWN_B.mjs.map → renderer-CMOAtGdC.mjs.map} +1 -1
  121. package/dist/renderer-CQXszrAF.mjs +5 -0
  122. package/dist/{renderer-DqjITuT-.mjs → renderer-CVD0oPsf.mjs} +2 -2
  123. package/dist/{renderer-DqjITuT-.mjs.map → renderer-CVD0oPsf.mjs.map} +1 -1
  124. package/dist/renderer-CWK41ajp.mjs +5 -0
  125. package/dist/{renderer-qsg-JMuN.mjs → renderer-CZ7-42SE.mjs} +3 -3
  126. package/dist/{renderer-qsg-JMuN.mjs.map → renderer-CZ7-42SE.mjs.map} +1 -1
  127. package/dist/renderer-C_U225ub.mjs +5 -0
  128. package/dist/renderer-C_nPzKwZ.mjs +5 -0
  129. package/dist/{renderer-C5zpaQed.mjs → renderer-Cd5BLFnS.mjs} +2 -2
  130. package/dist/{renderer-C5zpaQed.mjs.map → renderer-Cd5BLFnS.mjs.map} +1 -1
  131. package/dist/renderer-Cd6I_dsC.mjs +5 -0
  132. package/dist/renderer-Ceb06HuN.mjs +5 -0
  133. package/dist/{renderer-BhKIZDsm.mjs → renderer-CgFs_3gW.mjs} +2 -2
  134. package/dist/{renderer-BhKIZDsm.mjs.map → renderer-CgFs_3gW.mjs.map} +1 -1
  135. package/dist/{renderer-DKqG9Lek.mjs → renderer-ChO8NNw9.mjs} +2 -2
  136. package/dist/{renderer-DKqG9Lek.mjs.map → renderer-ChO8NNw9.mjs.map} +1 -1
  137. package/dist/{renderer-C92mwhZz.mjs → renderer-ClIXn9ZU.mjs} +2 -2
  138. package/dist/{renderer-C92mwhZz.mjs.map → renderer-ClIXn9ZU.mjs.map} +1 -1
  139. package/dist/{renderer-C--Dqe-3.mjs → renderer-CmEvkdNL.mjs} +3 -3
  140. package/dist/{renderer-C--Dqe-3.mjs.map → renderer-CmEvkdNL.mjs.map} +1 -1
  141. package/dist/{renderer-DVnVnS3c.mjs → renderer-CmpV4YNd.mjs} +2 -2
  142. package/dist/{renderer-DVnVnS3c.mjs.map → renderer-CmpV4YNd.mjs.map} +1 -1
  143. package/dist/{renderer-CzBQgGD2.mjs → renderer-Cun5J3z9.mjs} +3 -3
  144. package/dist/{renderer-CzBQgGD2.mjs.map → renderer-Cun5J3z9.mjs.map} +1 -1
  145. package/dist/{renderer-DZD2G76E.mjs → renderer-CxE5__5p.mjs} +2 -2
  146. package/dist/{renderer-DZD2G76E.mjs.map → renderer-CxE5__5p.mjs.map} +1 -1
  147. package/dist/renderer-D3P5SLcx.mjs +5 -0
  148. package/dist/renderer-D9R8QXS7.mjs +5 -0
  149. package/dist/renderer-D9SJ4Fg9.mjs +5 -0
  150. package/dist/{renderer-DGtBOdst.mjs → renderer-D9mf-msP.mjs} +2 -2
  151. package/dist/renderer-DGAypVNj.mjs +5 -0
  152. package/dist/{renderer-FHyZn0em.mjs → renderer-DKmV8F6L.mjs} +2 -2
  153. package/dist/{renderer-FHyZn0em.mjs.map → renderer-DKmV8F6L.mjs.map} +1 -1
  154. package/dist/renderer-DLAAfwg0.mjs +5 -0
  155. package/dist/{renderer-Bc6J0iVG.mjs → renderer-DT1bySqu.mjs} +2 -2
  156. package/dist/{renderer-Bc6J0iVG.mjs.map → renderer-DT1bySqu.mjs.map} +1 -1
  157. package/dist/renderer-DTkBPkBu.mjs +5 -0
  158. package/dist/{renderer-Da06_9FZ.mjs → renderer-D_2Y_tdA.mjs} +2 -2
  159. package/dist/{renderer-Da06_9FZ.mjs.map → renderer-D_2Y_tdA.mjs.map} +1 -1
  160. package/dist/renderer-DbaTMTuo.mjs +5 -0
  161. package/dist/{renderer-CrAqu3Rg.mjs → renderer-Dd9NUd_I.mjs} +2 -2
  162. package/dist/{renderer-CrAqu3Rg.mjs.map → renderer-Dd9NUd_I.mjs.map} +1 -1
  163. package/dist/{renderer-BXQQxeNC.mjs → renderer-Dj_K1f1T.mjs} +3 -3
  164. package/dist/{renderer-BXQQxeNC.mjs.map → renderer-Dj_K1f1T.mjs.map} +1 -1
  165. package/dist/renderer-DsxhQdCp.mjs +5 -0
  166. package/dist/{renderer-CAJe9eLS.mjs → renderer-FSCTtHrt.mjs} +2 -2
  167. package/dist/{renderer-CAJe9eLS.mjs.map → renderer-FSCTtHrt.mjs.map} +1 -1
  168. package/dist/renderer-Hf1pCqoN.mjs +5 -0
  169. package/dist/{renderer-DoYdfDEA.mjs → renderer-KcV0gCO5.mjs} +3 -3
  170. package/dist/{renderer-DoYdfDEA.mjs.map → renderer-KcV0gCO5.mjs.map} +1 -1
  171. package/dist/renderer-V0UuIniZ.mjs +5 -0
  172. package/dist/renderer-VCnMXWqE.mjs +5 -0
  173. package/dist/{renderer-D2BRlqof.mjs → renderer-aw8EsrS9.mjs} +2 -2
  174. package/dist/{renderer-D2BRlqof.mjs.map → renderer-aw8EsrS9.mjs.map} +1 -1
  175. package/dist/{renderer-C5caYAA3.mjs → renderer-cjiONTY_.mjs} +2 -2
  176. package/dist/{renderer-C5caYAA3.mjs.map → renderer-cjiONTY_.mjs.map} +1 -1
  177. package/dist/{renderer-BhhSyHKF.mjs → renderer-hIbXvzPu.mjs} +2 -2
  178. package/dist/renderer-lifu3xIt.mjs +5 -0
  179. package/dist/renderer-mPDgLBi4.mjs +5 -0
  180. package/dist/{renderer-BaaOR3Ao.mjs → renderer-pNxZ_lV2.mjs} +2 -2
  181. package/dist/{renderer-BaaOR3Ao.mjs.map → renderer-pNxZ_lV2.mjs.map} +1 -1
  182. package/dist/{renderers-CP8CFWDs-CMYe4kvZ.mjs → renderers-CP8CFWDs-ZKjdDfYg.mjs} +2 -2
  183. package/dist/{renderers-CP8CFWDs-CMYe4kvZ.mjs.map → renderers-CP8CFWDs-ZKjdDfYg.mjs.map} +1 -1
  184. package/dist/signals/index.mjs +4 -4
  185. package/package.json +56 -56
  186. package/dist/dist-Bb8BoMiw.mjs.map +0 -1
  187. package/dist/dist-DkuDAIrG.mjs.map +0 -1
  188. package/dist/fonts-CZMYtbP7.mjs.map +0 -1
  189. package/dist/preview-engine/chunk-B43Z3J7J.mjs +0 -5
  190. package/dist/preview-engine/chunk-LGVEFPOG.mjs +0 -3
  191. package/dist/preview-engine/chunk-PNB3ERR3.mjs +0 -1
  192. package/dist/renderer-1VSi7Vum.mjs +0 -5
  193. package/dist/renderer-4BlpUHQT.mjs +0 -5
  194. package/dist/renderer-AzSX2-mZ.mjs +0 -5
  195. package/dist/renderer-B-cxK24t.mjs +0 -5
  196. package/dist/renderer-B5d5oM_D.mjs +0 -5
  197. package/dist/renderer-B8BdNjaN.mjs +0 -5
  198. package/dist/renderer-BKEfeg-4.mjs +0 -5
  199. package/dist/renderer-BLLOkeFB.mjs +0 -5
  200. package/dist/renderer-BTvov1NH.mjs +0 -5
  201. package/dist/renderer-BVun05IK.mjs +0 -5
  202. package/dist/renderer-B_3h5nhy.mjs +0 -5
  203. package/dist/renderer-BaZjoFYK.mjs +0 -5
  204. package/dist/renderer-BcApaCVe.mjs +0 -5
  205. package/dist/renderer-C14mKYCw.mjs +0 -5
  206. package/dist/renderer-CFqhAXkH.mjs +0 -5
  207. package/dist/renderer-CK-spD4j.mjs +0 -5
  208. package/dist/renderer-CLLzQTIk.mjs +0 -5
  209. package/dist/renderer-COwa6xlF.mjs +0 -5
  210. package/dist/renderer-CQPuuoVf.mjs +0 -6
  211. package/dist/renderer-CRd-cDqZ.mjs +0 -5
  212. package/dist/renderer-CTVnQAUm.mjs +0 -5
  213. package/dist/renderer-CbiEBSGx.mjs +0 -5
  214. package/dist/renderer-Cl7PruQ1.mjs +0 -5
  215. package/dist/renderer-CmuGGUDR.mjs +0 -5
  216. package/dist/renderer-CoNRrfqx.mjs +0 -5
  217. package/dist/renderer-CvIGa0mE.mjs +0 -5
  218. package/dist/renderer-CwMDPv0p.mjs +0 -5
  219. package/dist/renderer-DOHbhGPu.mjs +0 -5
  220. package/dist/renderer-DOmA6IKc.mjs +0 -5
  221. package/dist/renderer-DmCWc4JL.mjs +0 -5
  222. package/dist/renderer-OLaYikwi.mjs +0 -5
  223. package/dist/renderer-Q75RC5Uz.mjs +0 -5
  224. package/dist/renderer-T0LJ4Po3.mjs +0 -5
  225. package/dist/renderer-VuXt1hfq.mjs +0 -5
  226. package/dist/renderer-hY_2WLt3.mjs +0 -5
  227. package/dist/renderer-y4EqE06a.mjs +0 -5
@@ -1 +0,0 @@
1
- {"version":3,"file":"fonts-CZMYtbP7.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n\tSlugGeometry,\n} from \"@framefields/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tcleanPath = new URL(cleanPath).pathname;\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport interface MeasureTextOptions {\n\tfontFamily: string;\n\tfontSize?: number;\n\tfontWeight?: string | number;\n\t/** Extra px between characters, as on `Layer.text`. */\n\tletterSpacing?: number;\n\t/** Multiplier of fontSize when < 10, else px. Default 1.2. */\n\tlineHeight?: number;\n\t/** Wrap width in px; omit for one line per `\\n`. */\n\twidth?: number;\n\talign?: \"left\" | \"center\" | \"right\";\n\t/** Paragraph base direction, as on `Layer.text`. Default \"auto\". */\n\tdirection?: \"ltr\" | \"rtl\" | \"auto\";\n}\n\nexport interface MeasuredGlyph {\n\tchar: string;\n\t/** Index into the string (code units), matching `text.slice`. */\n\tindex: number;\n\t/** Left edge of the glyph, relative to the text box. */\n\tx: number;\n\t/** Baseline-relative top of the line box. */\n\ty: number;\n\t/** Advance width in px. */\n\twidth: number;\n\tline: number;\n\t/** Part of a right-to-left run: reading continues to the left. */\n\trtl?: boolean;\n}\n\nexport interface TextMetrics {\n\twidth: number;\n\theight: number;\n\tlines: number;\n\t/** Line box height in px. */\n\tlineHeight: number;\n\tglyphs: MeasuredGlyph[];\n\t/**\n\t * X of a caret placed after `count` characters (0 = before the first),\n\t * relative to the text box. In right-to-left text the caret sits on the\n\t * left of the last character. Pair with a `.keys(\"text\", …)` reveal to make\n\t * a cursor follow typing exactly.\n\t */\n\tcaretX(count: number): number;\n\t/** Width of the first `count` characters (same as `caretX` on one line). */\n\twidthOf(count: number): number;\n}\n\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Framefields engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Sets the color emoji font text draws emoji with, for the preview and the\n\t * export alike: a CBDT/CBLC bitmap font such as Noto Color Emoji, as a file\n\t * path, URL or bytes. framefields ships none; without one, exports draw\n\t * nothing for emoji.\n\t */\n\tpublic static async registerEmojiFont(\n\t\tsource: string | Uint8Array,\n\t): Promise<void> {\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(source);\n\t\tconst label =\n\t\t\tfilePath ?? (typeof source === \"string\" ? source : \"Uint8Array\");\n\t\tvalidateFontBinaryHeader(buffer, label);\n\t\tSlugFontCache.setEmojiFont(buffer, filePath);\n\t}\n\n\t/**\n\t * Measures text with the real font, exactly as `Layer.text` lays it out:\n\t * box size, line count, per-glyph positions and caret offsets. Use it to\n\t * size containers, place cursors, underline a word or center by ink\n\t * instead of guessing advances. The family must be registered first.\n\t *\n\t * ```ts\n\t * const m = FontManager.measure(\"Hello\", { fontFamily: \"Inter\", fontSize: 60 });\n\t * m.width; m.caretX(3); m.glyphs[1].x\n\t * ```\n\t */\n\tpublic static measure(\n\t\ttext: string,\n\t\toptions: MeasureTextOptions,\n\t): TextMetrics {\n\t\tconst fontSize = options.fontSize ?? 48;\n\t\tconst font = SlugFontCache.getFont(\n\t\t\toptions.fontFamily,\n\t\t\toptions.fontWeight,\n\t\t\tnull,\n\t\t);\n\t\tif (!font) {\n\t\t\tthrow new Error(\n\t\t\t\t`FontManager.measure: font \"${options.fontFamily}\" is not registered. ` +\n\t\t\t\t\t\"Call `await FontManager.register(...)` first.\",\n\t\t\t);\n\t\t}\n\t\tconst lineHeight =\n\t\t\toptions.lineHeight !== undefined && options.lineHeight < 10\n\t\t\t\t? options.lineHeight * fontSize\n\t\t\t\t: (options.lineHeight ?? fontSize * 1.2);\n\t\tconst letterSpacing = options.letterSpacing ?? 0;\n\t\tconst { width, height, layout } = SlugGeometry.measure(\n\t\t\ttext,\n\t\t\tfont,\n\t\t\tfontSize,\n\t\t\tletterSpacing,\n\t\t\tlineHeight,\n\t\t\toptions.width,\n\t\t\tundefined,\n\t\t\toptions.direction,\n\t\t);\n\t\tconst scale = fontSize / font.unitsPerEm;\n\t\t// One entry per cluster (a letter with its marks, or a ligature), in\n\t\t// reading order; textIndex maps it back to the string.\n\t\tconst glyphs: MeasuredGlyph[] = [];\n\t\tconst seen = new Set<number>();\n\t\tlet cursor = 0;\n\t\tfor (const g of layout.glyphs) {\n\t\t\tlet index = g.textIndex;\n\t\t\tif (index === undefined) {\n\t\t\t\tconst at = text.indexOf(g.char, cursor);\n\t\t\t\tindex = at >= 0 ? at : cursor;\n\t\t\t}\n\t\t\tif (seen.has(index)) continue;\n\t\t\tseen.add(index);\n\t\t\tcursor = index + g.char.length;\n\t\t\tconst advance =\n\t\t\t\tg.clusterAdvance ?? g.cp.advanceWidth * (g.fontScale ?? scale);\n\t\t\tglyphs.push({\n\t\t\t\tchar: g.char,\n\t\t\t\tindex,\n\t\t\t\tx: g.clusterX ?? g.x,\n\t\t\t\ty: g.y,\n\t\t\t\twidth: advance + letterSpacing,\n\t\t\t\tline: g.lineIndex,\n\t\t\t\t...(g.rtl && { rtl: true }),\n\t\t\t});\n\t\t}\n\t\tconst caretX = (count: number): number => {\n\t\t\tif (count <= 0 || glyphs.length === 0) {\n\t\t\t\tconst first = glyphs[0];\n\t\t\t\tif (!first) return 0;\n\t\t\t\treturn first.rtl ? first.x + first.width - letterSpacing : first.x;\n\t\t\t}\n\t\t\tconst before = glyphs.filter((g) => g.index < count);\n\t\t\tconst last = before[before.length - 1];\n\t\t\tif (!last) return 0;\n\t\t\treturn last.rtl ? last.x : last.x + last.width - letterSpacing;\n\t\t};\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tlines: layout.linesCount,\n\t\t\tlineHeight,\n\t\t\tglyphs,\n\t\t\tcaretX,\n\t\t\twidthOf: (count: number) => caretX(count) - (glyphs[0]?.x ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.setParsed(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":";;;;;;AAgCA,MAAM,kBAAkB;AACxB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,oBAAoB;AAC1B,MAAM,kBAAkB;AAExB,SAAS,yBACR,OACA,aAC0B;AAC1B,KAAI,MAAM,SAAS,GAClB,OAAM,IAAI,MACT,4BAA4B,YAAY,gBAAgB,MAAM,OAAO,+DACrE;CAGF,MAAM,OACH,MAAM,MAAM,MAAM,MAClB,MAAM,MAAM,MAAM,MAClB,MAAM,MAAM,MAAM,KACnB,MAAM,MAAM;AAEd,KACC,QAAQ,mBACR,QAAQ,sBACR,QAAQ,sBACR,QAAQ,gBAER,QAAO;AAGR,KAAI,QAAQ,kBACX,QAAO;CAGR,MAAM,UAAU,QAAQ,GAAG,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI;AACxD,OAAM,IAAI,MACT,4BAA4B,YAAY,0FAA0F,OAAO,GACzI;;AAGF,eAAe,oBACd,QAC0B;AAC1B,KAAI,kBAAkB,WACrB,QAAO,EAAE,QAAQ,QAAQ;AAG1B,KAAI,OAAO,WAAW,SACrB,OAAM,IAAI,UACT,mEAAmE,OAAO,SAC1E;CAGF,IAAI,YAAY;AAChB,KAAI,UAAU,WAAW,UAAU,IAAI,UAAU,WAAW,WAAW,EAAE;EACxE,MAAM,MAAM,MAAM,MAAM,UAAU;AAClC,MAAI,CAAC,IAAI,GACR,OAAM,IAAI,MACT,iCAAiC,UAAU,UAAU,IAAI,OAAO,GAAG,IAAI,aACvE;EAEF,MAAM,cAAc,MAAM,IAAI,aAAa;AAC3C,SAAO;GACN,QAAQ,IAAI,WAAW,YAAY;GACnC,UAAU;GACV;;AAGF,KAAI,UAAU,WAAW,UAAU,CAClC,KAAI;AACH,cAAY,IAAI,IAAI,UAAU,CAAC;SACxB;AACP,cAAY,UAAU,QAAQ,cAAc,GAAG;;CAIjD,MAAM,aAAuB;EAC5B;EACA,KAAK,QAAQ,QAAQ,KAAK,EAAE,UAAU;EACtC,KAAK,QAAQ,QAAQ,KAAK,EAAE,gBAAgB,UAAU;EACtD,KAAK,QAAQ,QAAQ,KAAK,EAAE,gBAAgB,KAAK,SAAS,UAAU,CAAC;EACrE;CAGD,IAAI,aAAa,QAAQ,KAAK;AAC9B,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,aAAW,KAAK,KAAK,QAAQ,YAAY,UAAU,CAAC;AACpD,aAAW,KACV,KAAK,QAAQ,YAAY,gBAAgB,KAAK,SAAS,UAAU,CAAC,CAClE;EACD,MAAM,SAAS,KAAK,QAAQ,WAAW;AACvC,MAAI,WAAW,WAAY;AAC3B,eAAa;;CAGd,IAAI,eAA8B;CAClC,IAAI,aAA4B;AAEhC,MAAK,MAAM,aAAa,WACvB,KAAI;AAEH,OADa,MAAM,GAAG,KAAK,UAAU,EAC5B,QAAQ,EAAE;AAClB,kBAAe;AACf,gBAAa,MAAM,GAAG,SAAS,UAAU;AACzC;;SAEM;AAKT,KAAI,CAAC,gBAAgB,CAAC,WACrB,OAAM,IAAI,MACT,yBAAyB,OAAO,uCAAuC,WAAW,KAAK,SAAS,GAChG;AAGF,QAAO;EACN,QAAQ,IAAI,WACX,WAAW,QACX,WAAW,YACX,WAAW,WACX;EACD,UAAU;EACV;;AAsDF,IAAa,cAAb,MAAa,YAAY;CACxB,OAAe,WAA+B;CAC9C,AAAiB,wBAAQ,IAAI,KAA6B;CAE1D,AAAQ,cAAc;;;;CAKtB,OAAc,cAA2B;AACxC,MAAI,CAAC,YAAY,SAChB,aAAY,WAAW,IAAI,aAAa;AAEzC,SAAO,YAAY;;;;;CAMpB,aAAoB,SACnB,yBACA,QAC0B;AAC1B,SAAO,YAAY,aAAa,CAAC,SAAS,yBAAyB,OAAO;;;;;;;;CAS3E,aAAoB,kBACnB,QACgB;EAChB,MAAM,EAAE,QAAQ,aAAa,MAAM,oBAAoB,OAAO;AAG9D,2BAAyB,QADxB,aAAa,OAAO,WAAW,WAAW,SAAS,cACb;AACvC,gBAAc,aAAa,QAAQ,SAAS;;;;;;;;;;;;;CAc7C,OAAc,QACb,MACA,SACc;EACd,MAAM,WAAW,QAAQ,YAAY;EACrC,MAAM,OAAO,cAAc,QAC1B,QAAQ,YACR,QAAQ,YACR,KACA;AACD,MAAI,CAAC,KACJ,OAAM,IAAI,MACT,8BAA8B,QAAQ,WAAW,sEAEjD;EAEF,MAAM,aACL,QAAQ,eAAe,UAAa,QAAQ,aAAa,KACtD,QAAQ,aAAa,WACpB,QAAQ,cAAc,WAAW;EACtC,MAAM,gBAAgB,QAAQ,iBAAiB;EAC/C,MAAM,EAAE,OAAO,QAAQ,WAAW,aAAa,QAC9C,MACA,MACA,UACA,eACA,YACA,QAAQ,OACR,QACA,QAAQ,UACR;EACD,MAAM,QAAQ,WAAW,KAAK;EAG9B,MAAM,SAA0B,EAAE;EAClC,MAAM,uBAAO,IAAI,KAAa;EAC9B,IAAI,SAAS;AACb,OAAK,MAAM,KAAK,OAAO,QAAQ;GAC9B,IAAI,QAAQ,EAAE;AACd,OAAI,UAAU,QAAW;IACxB,MAAM,KAAK,KAAK,QAAQ,EAAE,MAAM,OAAO;AACvC,YAAQ,MAAM,IAAI,KAAK;;AAExB,OAAI,KAAK,IAAI,MAAM,CAAE;AACrB,QAAK,IAAI,MAAM;AACf,YAAS,QAAQ,EAAE,KAAK;GACxB,MAAM,UACL,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,aAAa;AACzD,UAAO,KAAK;IACX,MAAM,EAAE;IACR;IACA,GAAG,EAAE,YAAY,EAAE;IACnB,GAAG,EAAE;IACL,OAAO,UAAU;IACjB,MAAM,EAAE;IACR,GAAI,EAAE,OAAO,EAAE,KAAK,MAAM;IAC1B,CAAC;;EAEH,MAAM,UAAU,UAA0B;AACzC,OAAI,SAAS,KAAK,OAAO,WAAW,GAAG;IACtC,MAAM,QAAQ,OAAO;AACrB,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM,MAAM,MAAM,IAAI,MAAM,QAAQ,gBAAgB,MAAM;;GAElE,MAAM,SAAS,OAAO,QAAQ,MAAM,EAAE,QAAQ,MAAM;GACpD,MAAM,OAAO,OAAO,OAAO,SAAS;AACpC,OAAI,CAAC,KAAM,QAAO;AAClB,UAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ;;AAElD,SAAO;GACN;GACA;GACA,OAAO,OAAO;GACd;GACA;GACA;GACA,UAAU,UAAkB,OAAO,MAAM,IAAI,OAAO,IAAI,KAAK;GAC7D;;;;;CAMF,OAAc,IAAI,QAA4C;AAC7D,SAAO,YAAY,aAAa,CAAC,IAAI,OAAO;;;;;CAM7C,OAAc,IAAI,QAAyB;AAC1C,SAAO,YAAY,aAAa,CAAC,IAAI,OAAO;;;;;CAM7C,OAAc,SAA2B;AACxC,SAAO,YAAY,aAAa,CAAC,QAAQ;;;;;CAM1C,OAAc,yBAAmC;AAChD,SAAO,YAAY,aAAa,CAAC,wBAAwB;;;;;CAM1D,OAAc,QAAc;AAC3B,cAAY,aAAa,CAAC,OAAO;;;;;CAMlC,MAAa,SACZ,yBACA,QAC0B;EAC1B,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;AAEJ,MACC,OAAO,4BAA4B,YACnC,4BAA4B,MAC3B;AACD,YAAS,wBAAwB;AACjC,eAAY,wBAAwB;AACpC,YAAS,wBAAwB;AACjC,WAAQ,wBAAwB;aAEhC,OAAO,4BAA4B,YACnC,WAAW,QACV;AACD,YAAS;AACT,eAAY;aACF,OAAO,4BAA4B,UAAU;AACvD,YAAS;AACT,eAAY;QAEZ,OAAM,IAAI,UAAU,mDAAmD;EAGxE,MAAM,EAAE,QAAQ,aAAa,MAAM,oBAAoB,UAAU;EACjE,MAAM,cACL,aAAa,OAAO,cAAc,WAAW,YAAY;EAC1D,MAAM,SAAS,yBAAyB,QAAQ,YAAY;EAE5D,IAAI;AACJ,MAAI;GACH,MAAM,SAAS,QAAQ,OAAO,OAA4B;AAC1D,OACC,UACA,WAAW,UACX,MAAM,QAAQ,OAAO,MAAM,IAC3B,OAAO,MAAM,SAAS,EAEtB,iBAAgB,OAAO,MAAM;OAE7B,iBAAgB;WAET,KAAK;GACb,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,SAAM,IAAI,MACT,sDAAsD,YAAY,KAAK,MACvE;;EAGF,MAAM,iBACL,cAAc,cACd,cAAc,kBACd,KAAK,MAAM,YAAY,CAAC;EACzB,MAAM,iBAAiB,QAAQ,MAAM,IAAI;EAEzC,MAAM,aAA6B;GAClC,QAAQ;GACR,QAAQ;GACR;GACA;GACA,gBAAgB,cAAc;GAC9B,YAAY,cAAc;GAC1B;GACA;GACA;AAED,OAAK,MAAM,IAAI,gBAAgB,WAAW;AAG1C,MAAI,SACH,OAAM,qBAAqB,gBAAgB,SAAS;AAErD,gBAAc,UAAU,gBAAgB,cAAc;AAEtD,SAAO;;CAGR,AAAO,IAAI,QAA4C;AACtD,SAAO,KAAK,MAAM,IAAI,OAAO;;CAG9B,AAAO,IAAI,QAAyB;AACnC,SAAO,KAAK,MAAM,IAAI,OAAO;;CAG9B,AAAO,SAA2B;AACjC,SAAO,MAAM,KAAK,KAAK,MAAM,QAAQ,CAAC;;CAGvC,AAAO,yBAAmC;EACzC,MAAM,QAAkB,EAAE;AAC1B,OAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,CACrC,KAAI,KAAK,SACR,OAAM,KAAK,KAAK,SAAS;WACf,OAAO,KAAK,WAAW,SACjC,OAAM,KAAK,KAAK,OAAO;AAGzB,SAAO;;CAGR,AAAO,QAAc;AACpB,OAAK,MAAM,OAAO"}
@@ -1,5 +0,0 @@
1
- import{a as $t,b as le,c as ue,d as de,e as fe,f as he,g as me,h as ge,i as xe,j as ye,k as be,l as we,n as Se}from"./chunk-RQLMW6MA.mjs";import{d as ae}from"./chunk-6YJP57MZ.mjs";import{c as se,d as ce,e as B,r as bt}from"./chunk-BWJS6G7R.mjs";import{a as dt}from"./chunk-IQC2I5A5.mjs";import{d as Gt}from"./chunk-HYBAPT6I.mjs";import{d as Rt,e as wt}from"./chunk-BVF64D6H.mjs";wt();function Ee(e){return typeof e=="object"&&e!==null&&typeof e.get=="function"}function Wt(e,n){return Ee(e)?e.get(n):e}function Ce(e,n){return e.map(t=>{let i={...t,text:String(Wt(t.text,n)??"")};return t.fontSize!==void 0&&(i.fontSize=Number(Wt(t.fontSize,n))),t.fill!==void 0&&(i.fill=String(Wt(t.fill,n))),t.opacity!==void 0&&(i.opacity=Number(Wt(t.opacity,n))),t.mark&&(i.mark={...t.mark,background:String(Wt(t.mark.background,n))}),i})}function ze(e){let n="";for(let t of e)n+=typeof t.text=="string"?t.text:"";return n}function Me(e,n){let t=[],i=0;for(let[r,c]of e.entries()){if(i>=n.length)break;let d=typeof c.text=="string"?c.text.length:0,u=r===e.length-1?n.length:i+d;u>i&&t.push({...c,text:n.slice(i,u)}),i=u}return t}wt();function Xe(e,n,t,i,r=0,c=0){let d=ae.getChannelSamples(n,"primary");if(d&&d.length>0){let m=i>0?i:24,C=t/m,h=r!==0?c*r/(2*Math.PI):0,p=Math.max(0,C+h),a=Math.max(0,Math.min(d.length-1,Math.round(p*m)));return Number(d[a])||0}if(!e)return 0;let u=e[n];if(u==null)return 0;if(typeof u=="number")return u;if(typeof u=="function")return Number(u(t,i))||0;if(typeof u=="object"){let m=u;if(typeof m.get=="function"){let C=i>0?t/i:0,h=r!==0?c*r/(2*Math.PI):0;return Number(m.get({frame:t,fps:i,time:C+h}))||0}if(Array.isArray(m.samples)||ArrayBuffer.isView(m.samples)){let C=m.samples,h=Math.max(0,Math.min(C.length-1,Math.round(t)));return Number(C[h])||0}}return 0}function Ie(e){return e<.5?2*e*e:1-(-2*e+2)**2/2}function Ye(e){let n=0;for(let t=0;t<e.length;t++)n=e.charCodeAt(t)+((n<<5)-n);return()=>{let t=Math.sin(n++)*1e4;return t-Math.floor(t)}}function Ge(e,n){let t=Ye(n),i=Array.from({length:e},(r,c)=>c);for(let r=i.length-1;r>0;r--){let c=Math.floor(t()*(r+1)),d=i[r];i[r]=i[c],i[c]=d}return i}function je(e,n,t){let i=`${n}-${t}`,r=B.emojiTextureCache.get(i);if(r)return r;let c=4,d=Math.max(16,Math.ceil(t*1.5*c)),u=Math.ceil(d/4)*4;if(!!globalThis.__IS_HEADLESS_RENDERER__||typeof window>"u"||typeof globalThis.document>"u")return console.warn(`[getOrCreateEmojiTexture] Emoji "${n}" not preloaded. Returning fallback dummy texture.`),r=e.createTexture({label:`Emoji-Dummy-${n}`,size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING}),B.emojiTextureCache.set(i,r),r;let C=new OffscreenCanvas(u,u),h=C.getContext("2d");return h&&(h.font=`${t*c}px "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif`,h.textBaseline="middle",h.textAlign="center",h.fillText(n,u/2,u/2)),r=e.createTexture({label:`Emoji-${n}`,size:[u,u],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),e.queue.copyExternalImageToTexture({source:C},{texture:r,premultipliedAlpha:!0},[u,u]),B.emojiTextureCache.set(i,r),r}function jt(e,n,t,i,r,c,d){if(!d)return{p_in:1,p_out:1};let u=1;if(t>0){let C=t*.5,h=c>1?t*.5/(c-1):0,p=r*h,a=p+C;e<p?u=0:e>a?u=1:u=(e-p)/(a-p)}let m=1;if(i>0){let C=n-i;if(e>C){let h=i*.5,p=c>1?i*.5/(c-1):0,a=C+r*p,A=a+h;e<a?m=1:e>A?m=0:m=1-(e-a)/(A-a)}}return{p_in:u,p_out:m}}function _t(e,n,t,i,r,c,d,u,m,C,h,p,a){let A=t?Ie(e):e,w=t?Ie(n):n,v=A*w;if(A<=0&&i!=="blur"||w<=0&&r!=="blur")return{opacity:0,transX:0,transY:0,rot:0,scale:1,blurAmount:0,visible:!1};let X=p;if(i==="fade"||i==="slideUp"||i==="blur"?X*=A:i==="appear"&&A<.5&&(X=0),r==="fade"||r==="slideUp"||r==="blur"?X*=w:r==="appear"&&w<.5&&(X=0),X<.001)return{opacity:0,transX:0,transY:0,rot:0,scale:1,blurAmount:0,visible:!1};let j=0,P=0,H=0,tt=1;i==="slideUp"&&d<m&&(P+=(1-A)*30),r==="slideUp"&&d>u-C&&(P-=(1-w)*30);let ot=a?1:Math.PI/180;c==="stack"?(tt=.8+.2*v,H=(1-v)*15*ot):c==="wave"?P+=10*Math.sin(d*.005-h*.5):c==="wiggle"?(j+=5*Math.sin(d*.008+h*1.7),P+=5*Math.cos(d*.006+h*1.3),H+=4*Math.sin(d*.005+h*2.1)*ot):c==="shuffle"&&(j+=3*Math.sin(d*.015+h*3.1),P+=3*Math.cos(d*.012+h*2.3),H+=8*Math.sin(d*.02+h*1.1)*ot);let x=0;return i==="blur"&&(x=Math.max(x,(1-A)*20)),r==="blur"&&(x=Math.max(x,(1-w)*20)),{opacity:X,transX:j,transY:P,rot:H,scale:tt,blurAmount:x,visible:!0}}var _e={linear:e=>e,none:e=>e,smoothstep:e=>e,"power1.out":e=>1-(1-e)**2,"quad.out":e=>1-(1-e)**2,"power1.in":e=>e**2,"quad.in":e=>e**2,"power1.inout":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"quad.inout":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"power2.out":e=>1-(1-e)**3,"cubic.out":e=>1-(1-e)**3,"power2.in":e=>e**3,"cubic.in":e=>e**3,"power2.inout":e=>e<.5?4*e**3:1-(-2*e+2)**3/2,"cubic.inout":e=>e<.5?4*e**3:1-(-2*e+2)**3/2,"power3.out":e=>1-(1-e)**4,"quart.out":e=>1-(1-e)**4,"power3.in":e=>e**4,"quart.in":e=>e**4,"power3.inout":e=>e<.5?8*e**4:1-(-2*e+2)**4/2,"quart.inout":e=>e<.5?8*e**4:1-(-2*e+2)**4/2,"power4.out":e=>1-(1-e)**5,"quint.out":e=>1-(1-e)**5,"power4.in":e=>e**5,"quint.in":e=>e**5,"sine.out":e=>Math.sin(e*Math.PI/2),"sine.in":e=>1-Math.cos(e*Math.PI/2),"sine.inout":e=>-(Math.cos(Math.PI*e)-1)/2,"expo.out":e=>e===1?1:1-2**(-10*e),"back.out":e=>1+2.70158*(e-1)**3+1.70158*(e-1)**2};function Oe(e,n){let t=Math.max(0,Math.min(1,n));if(!e)return t;let i=_e[e.toLowerCase().trim()];return i?i(t):t}function He(e,n,t){if(t<=0)return 0;let i=t>1?n/(t-1):.5,r=e.offset??0,c=(e.rangeStart??0)+r,d=(e.rangeEnd??1)+r,u=0;d<=c?u=i>=c?1:0:u=Math.max(0,Math.min(1,(i-c)/(d-c)));let m=u*u*(3-2*u);return Oe(e.easing??"power2.out",m)}function ke(e,n,t,i,r,c){let d=Math.max(1,t.charsCount??1),u=Math.max(1,t.wordsCount??1),m=Math.max(1,t.linesCount??1),C=e.selectors??[];if(C.length===0)return 1;let h=0;for(let p=0;p<C.length;p++){let a=C[p],A=0;if(a.type==="range"){let w=d,v=n.charIndex??0;a.basedOn==="words"?(w=u,v=n.wordIndex??0):a.basedOn==="lines"&&(w=m,v=n.lineIndex??0),a.randomizeOrder&&(v=be(w,a.randomSeed??12345)[v%w]??v);let X=a.units==="index"?v:w>1?v/(w-1):.5,j=a.start??e.rangeStart??0,P=a.end??e.rangeEnd??(a.units==="index"?w:1),H=a.offset??e.offset??0;A=xe(X,j,P,H,a.shape??"smooth",a.easeHigh??0,a.easeLow??0)*(a.amount??1)}else if(a.type==="wiggly"){let w=c>0?r/c:0,v=(a.temporalPhaseDeg??0)*Math.PI/180,X=(a.spatialPhaseDeg??0)*Math.PI/180,j=w*(a.wigglesPerSecond??2)*2*Math.PI+v+X,P=ye(a.randomSeed??42,n.charIndex??0,j,a.correlation??.5),H=a.minAmount??-1,tt=a.maxAmount??1;A=H+(P*.5+.5)*(tt-H)}else if(a.type==="signal")A=Xe(i,a.signalId,r,c,a.phaseSpread??0,n.charIndex??0)*(a.multiplier??1)+(a.offset??0);else if(a.type==="expression"){let w=a,v=c>0?r/c:0,X={charIndex:n.charIndex??0,wordIndex:n.wordIndex??0,lineIndex:n.lineIndex??0,totalChars:d,totalWords:u,totalLines:m,frame:r,fps:c,time:v,signals:i};A=fe(w.expression,X)*(w.amount??1)}p===0?h=A:h=we(h,A,a.mode??"add")}return h}function Ae(e,n,t,i,r=!1,c=0,d=24,u){if(!e||e.length===0)return i;let{transX:m,transY:C,rot:h,scale:p,scaleX:a,scaleY:A,opacity:w,blurAmount:v}=i,X=i.transZ??0,j=i.color,P=i.chromaticShift??0,H=i.dissolveProgress??0,tt=i.vfxParam??0,ot=i.skewM01??0,x=i.skewM10??0,ft=i.anchorConfig,lt=i.fillOpacity??1,rt=i.strokeWidth,U=i.strokeColor,ut=i.longShadow,ht=i.lineSpacing,Z=i.lineAnchor,mt=r?1:Math.PI/180,z=Math.max(1,t.charsCount??1),K=Math.max(1,t.wordsCount??1),at=Math.max(1,t.linesCount??1);for(let nt of e)if("selectors"in nt&&Array.isArray(nt.selectors)){let it=nt,l=it.props??{},et=ke(it,n,{charsCount:z,wordsCount:K,linesCount:at},u,c,d),f=et,Y=1,q=1;if(l.spring){let b=(n.charIndex??0)*.035,D=Math.max(0,(d>0?c/d:0)-b);q=$t(D,l.spring.stiffness,l.spring.damping,l.spring.mass,l.spring.initialVelocity),Y=1-q,f=et*Y}if(f!==0||et!==0){if(l.x!==void 0&&(m+=l.x*f),l.y!==void 0&&(C+=l.y*f),l.scale!==void 0&&(p*=1+(l.scale-1)*f),l.scaleX!==void 0&&(a*=1+(l.scaleX-1)*f),l.scaleY!==void 0&&(A*=1+(l.scaleY-1)*f),l.rotation!==void 0&&(h+=l.rotation*mt*f),l.rotationX!==void 0){let b=l.rotationX*f*Math.PI/180;A*=Math.max(.08,Math.abs(Math.cos(b)))}if(l.rotationY!==void 0){let b=l.rotationY*f*Math.PI/180;a*=Math.max(.08,Math.abs(Math.cos(b)))}if(l.rotationZ!==void 0&&(h+=l.rotationZ*mt*f),l.translateZ!==void 0&&(X+=l.translateZ*f),l.skew!==void 0){let[,b,D]=le(l.skew*f,l.skewAxis??0);ot+=b,x+=D}if(l.formation!==void 0){let b=he(n.charIndex??0,z,l.formation),D=t.layoutCenter?.x??0,Q=t.layoutCenter?.y??0,xt=n.x??0,Ft=n.y??0,Et=D+b.x,Xt=Q+b.y;if(m+=(Et-xt)*f,C+=(Xt-Ft)*f,X+=b.z*f,b.rotX){let yt=b.rotX*f*Math.PI/180;A*=Math.max(.5,Math.abs(Math.cos(yt)))}if(b.rotY){let yt=b.rotY*f*Math.PI/180;a*=Math.max(.5,Math.abs(Math.cos(yt)))}b.rotZ&&(h+=b.rotZ*Math.PI/180*f),b.depthOpacity!==void 0&&(w*=1+(b.depthOpacity-1)*f)}if(l.anchor!==void 0&&(ft=l.anchor),l.opacity!==void 0&&(w*=1+(l.opacity-1)*f),l.blur!==void 0&&(v=Math.max(v,l.blur*f)),l.chromaticGlitch!==void 0){let b=(l.chromaticGlitch.redShiftX??0)*Math.max(0,f),D=l.chromaticGlitch.sliceProbability??.35,Q=Math.sin(c*17.13+(n.charIndex??0)*43.17),xt=Math.abs(Q-Math.floor(Q));xt<D&&(b+=(l.chromaticGlitch.sliceAmplitude??12)*(xt*2-1)),P+=b}if(l.particleDissolve!==void 0&&(H=Math.max(H,(l.particleDissolve.progress??0)*(l.spring?q:Math.max(0,f)))),l.longShadow!==void 0&&(ut=l.longShadow),l.audioSpectrum!==void 0){let b=ge(n.charIndex??0,z,l.audioSpectrum,u,c,d);l.audioSpectrum.scaleAxis==="scaleY"?A*=b:l.audioSpectrum.scaleAxis==="scaleX"?a*=b:p*=b}if(l.stroke!==void 0&&(l.stroke.fillOpacity!==void 0&&(lt*=1-f+l.stroke.fillOpacity*f),l.stroke.strokeWidth!==void 0&&(rt=(l.stroke.strokeWidth??0)*f),l.stroke.strokeColor&&(U=l.stroke.strokeColor)),l.lineSpacing!==void 0&&(ht=l.lineSpacing*(l.spring?q:f),Z=l.lineAnchor??0),l.fillColor){let b=dt(l.fillColor),D=j??{r:1,g:1,b:1,a:1},Q=et;j={r:D.r*(1-Q)+b.r*Q,g:D.g*(1-Q)+b.g*Q,b:D.b*(1-Q)+b.b*Q,a:D.a*(1-Q)+b.a*Q}}}}else{let it=nt,l=n.charIndex??n.unitIndex??0,et=Math.max(1,t.charsCount??1);it.unit==="word"?(l=n.wordIndex??0,et=Math.max(1,t.wordsCount??1)):it.unit==="line"&&(l=n.lineIndex??0,et=Math.max(1,t.linesCount??1));let f=He(it,l,et),Y=it.transform;if(!Y||f<=0)continue;Y.x!==void 0&&(m+=Y.x*f),Y.y!==void 0&&(C+=Y.y*f),Y.rotation!==void 0&&(h+=Y.rotation*mt*f),Y.scale!==void 0&&(p*=1+(Y.scale-1)*f),Y.scaleX!==void 0&&(a*=1+(Y.scaleX-1)*f);let q=1+((Y.scaleY??1)-1)*f;if(Y.rotationX){let b=Y.rotationX*f*Math.PI/180;q*=Math.cos(b)}if(A*=q,Y.opacity!==void 0&&(w*=1+(Y.opacity-1)*f),Y.blur!==void 0&&(v=Math.max(v,Y.blur*f)),Y.color){let b=dt(Y.color),D=j??{r:1,g:1,b:1,a:1};j={r:D.r*(1-f)+b.r*f,g:D.g*(1-f)+b.g*f,b:D.b*(1-f)+b.b*f,a:D.a*(1-f)+b.a*f}}}return{transX:m,transY:C,transZ:X,rot:h,scale:p,scaleX:a,scaleY:A,opacity:Math.max(0,Math.min(1,w)),blurAmount:v,color:j,chromaticShift:P,dissolveProgress:H,vfxParam:tt,skewM01:ot,skewM10:x,anchorConfig:ft,fillOpacity:Math.max(0,Math.min(1,lt)),strokeWidth:rt,strokeColor:U,longShadow:ut,lineSpacing:ht,lineAnchor:Z}}function pe(e,n,t){let i=t.fontFamily??"Inter";if(B.isFailed(i)&&(i="Inter"),B.isFailed(i))return;let r=t.fontSize??48,c=B.getFont(i,t.fontWeight,e.device,void 0,r,t.variableAxes),d=t.stroke&&t.strokeWidth&&t.strokeWidth>0,u=null;if(c&&d&&e.device){let o=t.strokeAlign==="outside"?2:1,y=(t.strokeWidth??0)*o*(c.unitsPerEm/r);u=B.getFont(i,t.fontWeight,e.device,y,r,t.variableAxes)??null}if(!c?.curvesTex||d&&!u?.curvesTex){let o=Gt(i);B.preloadSlugFont(e.device,i,o,void 0,t.renderId).catch(s=>{console.warn(`[drawParagraphNode] Failed to load Slug font for ${i}:`,s)});return}let m=t.letterSpacing??0,C=t.lineHeight!==void 0&&t.lineHeight<10?t.lineHeight*r:t.lineHeight??r*1.2,h=t.align??"start",p=t.direction??"auto",a=t.isCaption?0:t.textBackgroundColor?t.padding??0:0,A=t.text,w;if(t.typewriter){let o=t.fps??24,s=t.durationMs!==void 0?Math.round(t.durationMs/1e3*o):60;w=Se(t.text,t.frame??0,0,s,t.typewriter.cadence,t.typewriter.scramble,t.typewriter.cursor?.blinkFrequency??2,t.typewriter.granularity??"character",t.textProgress),A=w.currentDisplayString}let v=w&&t.spans?.length?Me(Ce(t.spans),A):t.spans,X=t.pathOptions?{...t.pathOptions,firstMargin:t.firstMargin!==void 0?t.firstMargin:t.pathOptions.firstMargin,lastMargin:t.lastMargin!==void 0?t.lastMargin:t.pathOptions.lastMargin,baselineShift:t.baselineShift!==void 0?t.baselineShift:t.pathOptions.baselineShift}:void 0,j,P;t.width!=null?(j=Math.max(0,t.width-a*2),P=bt.measure(A,c,r,m,C,j,v,p)):(P=bt.measure(A,c,r,m,C,void 0,v,p),j=P.width);let H=t.isCaption?t.dstRect.width:j,tt=t.animation?.applyBy??"word",x=(h==="left"||h==="start"&&!P.layout?.hasRtl)&&(H===void 0||H===j)&&!X&&tt==="word"&&!!P?.layout&&P.layout?P.layout:bt.layout(A,c,r,m,C,j,h,tt,H,X,v,p),ft=t.verticalAlign??"top",lt=t.height!=null&&!X&&!t.isCaption?t.height-(P.height+a*2):0,rt={...t.dstRect,y:t.dstRect.y+(ft==="middle"?lt/2:ft==="bottom"?lt:0)},U=t.animation,ut=t.fontWeight==="bold"||typeof t.fontWeight=="number"&&t.fontWeight>=600||typeof t.fontWeight=="string"&&parseInt(t.fontWeight,10)>=600,ht="hasTrueWeight"in c&&!!c.hasTrueWeight,Z=c;if(ut&&!ht&&e.device){let o=ce(t.fontWeight),s=Math.max(0,(o-400)/500)*.055*r;if(s>0){let y=s*(c.unitsPerEm/r),S=B.getFont(i,400,e.device,y,r,t.variableAxes);S?.curvesTex&&(Z=S)}}let mt=x.glyphs.length,z=t.elapsedMs!==void 0?t.elapsedMs:t.frame!==void 0&&t.fps!==void 0?t.frame/t.fps*1e3:0,K=t.durationMs!==void 0?t.durationMs:3e3,at=t.isCaption?U?.in==="none"||!U?.in?0:K:U?.entranceMs?U.entranceMs:U?.in==="none"||!U?.in?0:K,nt=t.isCaption?0:U?.exitMs?U.exitMs:U?.out==="none"||!U?.out?0:K,it=U?.in||"none",l=U?.out||"none",et=U?.kinetic||"none",f=U?.smoothing!==!1,Y=0;for(let o of x.glyphs)!o.isSpace&&o.unitIndex>Y&&(Y=o.unitIndex);let q=Y+1,b=et==="shuffle"||it==="shuffle"?Ge(q,t.text):Array.from({length:q},(o,s)=>s);if(t.textBackgroundColor){let o=t.strokeRadius??t.borderRadius??8,s=0,y=t.opacity??1;if(t.isVideoMode===!1)s=y;else{for(let S of x.glyphs){if(S.isSpace)continue;let I=S.unitIndex,T=b[I]??I,{p_in:M,p_out:g}=jt(z,K,at,nt,T,q,!0),_=_t(M,g,f,it,l,et,z,K,at,nt,T,y,!1);_.visible&&_.opacity>s&&(s=_.opacity)}for(let S of x.emojis){let I=t.animation?.applyBy==="line"?0:Math.floor(S.x/(r+m)),T=b[I%q]??0,{p_in:M,p_out:g}=jt(z,K,at,nt,T,q,!0),_=_t(M,g,f,it,l,et,z,K,at,nt,T,y,!0);_.visible&&_.opacity>s&&(s=_.opacity)}}if(s>.001){let S=t.width!=null?t.width:P.width+a*2,I=t.height!=null?t.height:P.height+a*2;e.renderer.drawRRect(n,{rect:{x:t.dstRect.x,y:t.dstRect.y,width:S,height:I},rx:o,ry:o},t.textBackgroundColor,{opacity:s})}}if(x.marks&&x.marks.length>0)for(let o of x.marks){let s=o.borderRadius??4;e.renderer.drawRRect(n,{rect:{x:t.dstRect.x+a+o.x,y:rt.y+a+o.y,width:o.width,height:o.height},rx:s,ry:s},o.background,{opacity:t.opacity??1})}let D=dt(t.color??"white"),Q=dt(t.highlightColor??"yellow"),xt=new Float32Array(x.glyphs.length),Ft=0,Et=0;if(x.glyphs.length>0){let o=x.glyphs.filter(s=>!s.isSpace);o.length>0&&(Ft=(o[0].x+o[o.length-1].x)/2,Et=(o[0].y+o[o.length-1].y)/2)}let Xt={charsCount:x.charsCount,wordsCount:x.wordsCount,linesCount:x.linesCount,layoutCenter:{x:Ft,y:Et}};if(t.animators&&t.animators.length>0){for(let o of t.animators)if("selectors"in o&&Array.isArray(o.selectors)){let s=o;if(s.props?.tracking!==void 0&&s.props.tracking!==0){let y=s.props.tracking,S=new Map;for(let I=0;I<x.glyphs.length;I++){let M=x.glyphs[I].lineIndex??0,g=S.get(M);g||(g=[],S.set(M,g)),g.push(I)}for(let I of S.values()){let T=new Map;for(let W of I){let O=x.glyphs[W].charIndex,$=T.get(O);$?$.push(W):T.set(O,[W])}let M=Array.from(T.values()),g=W=>{let O=x.glyphs[W[0]];return O.clusterX??O.x};M.sort((W,O)=>g(W)-g(O));let _=[];for(let W of M){let O=x.glyphs[W[0]],$=ke(s,O,Xt,t.signals,t.frame??0,t.fps??24);_.push($)}let G=0;for(let W=0;W<M.length-1;W++)G+=y*_[W];let k=x.glyphs[I[0]]?.baseRtl??!1,R=h==="start"?k?"right":"left":h==="end"?k?"left":"right":h,N=0;for(let W=0;W<M.length;W++){let O=N;R==="center"?O-=G*.5:R==="right"&&(O-=G);for(let $ of M[W])xt[$]+=O;W<M.length-1&&(N+=y*_[W])}}}}}let yt=new Float32Array(Math.max(1024,mt*24)),Kt=(o,s)=>s.cp.glyphId!==void 0&&(s.font??c).fontFamily===o.fontFamily,Qt=new Set,ve=o=>{if(Qt.has(o))return;Qt.add(o);let s=[];for(let y of x.glyphs){let S=y.cp.glyphId;S!==void 0&&(y.font??c)!==o&&Kt(o,y)&&!o.glyphs?.has(S)&&s.push(S)}s.length>0&&se.ensureGlyphs(o,s)},Pe=(o,s)=>{if((s.font??c)===o)return s.cp;if(Kt(o,s)){let y=o.glyphs?.get(s.cp.glyphId);if(y)return y}return o.codePoints.get(s.cp.codePoint)||s.cp},St=(o,s,y=0,S=0,I,T)=>{let M=mt*24;yt.length<M&&(yt=new Float32Array(M));let g=yt,_=0;ve(o);for(let G=0;G<x.glyphs.length;G++){let k=x.glyphs[G];if(k.isSpace||T&&!T(k))continue;let R=Pe(o,k);if(!R||R.width===0||R.height===0)continue;let N=k.unitIndex,W=b[N]??N,O=t.opacity??1,$=0,J=0,st=0,V=1,Ct=I!==void 0?I:0;if(t.isVideoMode!==!1){let{p_in:F,p_out:E}=jt(z,K,at,nt,W,q,!0),L=_t(F,E,f,it,l,et,z,K,at,nt,W,t.opacity??1,!1);if(!L.visible)continue;O=L.opacity,$=L.transX,J=L.transY,st=L.rot,V=L.scale,I===void 0&&(Ct=L.blurAmount)}let Mt=1,Ut=1,ee,Dt=0,ne=0,ie=0,oe=0,Nt=0,Lt=0,Bt,re=1;if(t.animators&&t.animators.length>0){let F=Ae(t.animators,k,Xt,{transX:$,transY:J,rot:st,scale:V,scaleX:Mt,scaleY:Ut,opacity:O,blurAmount:Ct,color:D},!1,t.frame??0,t.fps??24,t.signals);$=F.transX,J=F.transY,st=F.rot,V=F.scale,Mt=F.scaleX,Ut=F.scaleY,O=F.opacity,I===void 0&&(Ct=F.blurAmount),F.color&&(ee=F.color),F.lineSpacing!==void 0&&(J+=de(k.lineIndex,x.linesCount,F.lineSpacing,F.lineAnchor??0)),Dt=F.transZ??0,ne=F.chromaticShift??0,ie=F.dissolveProgress??0,oe=F.vfxParam??0,Nt=F.skewM01??0,Lt=F.skewM10??0,Bt=F.anchorConfig,re=F.fillOpacity??1}$+=xt[G];let zt=k.x;if(t.marquee){let F=(t.frame??0)/(t.fps??24),E=x.glyphs.length>0?x.glyphs[x.glyphs.length-1].x+r:t.dstRect.width;zt=me(k.x,t.dstRect.width,E,t.marquee,F)}let Re=t.highlightWordIndex!==void 0&&k.wordIndex===t.highlightWordIndex,We=k.fill?dt(k.fill):void 0,Yt=ee??s??(Re?Q:We??D);(F=>{let E=_*24,L=k.fontScale??r/o.unitsPerEm,It=R.width*L/2*Mt,At=R.height*L/2*Ut;if(Dt!==0){let ct=Math.max(100,1200-Dt),gt=ct>1?1200/ct:1;It*=gt,At*=gt}let kt=st+(k.pathTangentAngleRad??0),pt,Tt;if(k.pathTangentAngleRad!==void 0){let vt=R.bearingX*L+It,ct=-R.bearingY*L+At,gt=Math.cos(kt),Pt=Math.sin(kt),Vt=vt*gt-ct*Pt,qt=vt*Pt+ct*gt;pt=zt+Vt+t.dstRect.x+a+y+F,Tt=k.y+qt+rt.y+a+S}else pt=zt+R.bearingX*L+It+t.dstRect.x+a+y+F,Tt=k.y-R.bearingY*L+At+rt.y+a+S;if(Bt){let vt={width:R.width*L,height:R.height*L,ascender:(o.ascender??800)*L,descender:(o.descender??-200)*L},ct=ue(vt,Bt),gt=Math.cos(kt),Pt=Math.sin(kt),Vt=ct.px*(1-gt*V)+ct.py*(Pt*V),qt=-ct.px*(Pt*V)+ct.py*(1-gt*V);pt+=Vt,Tt+=qt}(Nt!==0||Lt!==0)&&(pt+=At*Nt,Tt+=It*Lt),g[E+0]=It,g[E+1]=At,g[E+2]=pt,g[E+3]=Tt,g[E+4]=R.width,g[E+5]=R.height,g[E+6]=R.width/R.bandDimX,g[E+7]=R.height/R.bandDimY,g[E+8]=R.bandCount-1,g[E+9]=R.bandCount-1,g[E+10]=R.bandsTexCoordX,g[E+11]=R.bandsTexCoordY,g[E+12]=kt,g[E+13]=V,g[E+14]=$,g[E+15]=J,g[E+16]=Yt.r,g[E+17]=Yt.g,g[E+18]=Yt.b;let Fe=k.opacity??1;g[E+19]=Yt.a*O*re*Fe,g[E+20]=Ct,g[E+21]=ne,g[E+22]=ie,g[E+23]=oe,_++})(0)}return{data:g,visibleCount:_}};if(t.shadows&&t.shadows.length>0)for(let o of t.shadows){let s=dt(o.color),y=o.offset?.x??0,S=o.offset?.y??0,I=o.blurRadius??0,{data:T,visibleCount:M}=St(Z,s,y,S,I);if(M>0){let g=T.subarray(0,M*24),G=t.fontStyle==="italic"?.21:0;e.renderer.slugPipeline.draw(n,e.renderer.getTransformStack(),Z,g,M,o.color,e.renderer.getSurfaceWidth(),e.renderer.getSurfaceHeight(),{opacity:t.opacity??1,transform:t.matrix,customParam:G})}}let Ot=t.animators?.find(o=>"props"in o&&o.props?.longShadow&&(o.props?.longShadow?.length??0)>0);if(Ot&&"props"in Ot){let o=Ot,s=o.props?.longShadow;if(s){let y=o.props?.spring,S=s.length,I=s.angle;if(y){let G=(t.frame??0)/(t.fps??30),k=$t(G,y.stiffness,y.damping,y.mass,y.initialVelocity);S=Math.max(0,s.length*k),I=s.angle+(1-Math.min(1,k))*25}else{let k=1-(1-Math.min(1,(t.frame??0)/36))**3;S=s.length*k}let T=I*Math.PI/180,M=Math.max(4,Math.min(64,s.steps??16)),g=S/M,_=dt(s.color??"#000000");for(let G=1;G<=M;G++){let k=G*g,R=k*Math.cos(T),N=k*Math.sin(T),W=G/M,O=(s.startOpacity??.8)*(1-W)+(s.endOpacity??0)*W,$={..._,a:_.a*O},{data:J,visibleCount:st}=St(c,$,R,N,0);if(st>0){let V=J.subarray(0,st*24),Mt=t.fontStyle==="italic"?.21:0;e.renderer.slugPipeline.draw(n,e.renderer.getTransformStack(),Z,V,st,s.color??"black",e.renderer.getSurfaceWidth(),e.renderer.getSurfaceHeight(),{opacity:(t.opacity??1)*O,transform:t.matrix,customParam:Mt})}}}}if(d&&u){let o=dt(t.stroke),{data:s,visibleCount:y}=St(u,o);if(y>0){let S=s.subarray(0,y*24),T=t.fontStyle==="italic"?.21:0;e.renderer.slugPipeline.draw(n,e.renderer.getTransformStack(),u,S,y,t.stroke??"#000000",e.renderer.getSurfaceWidth(),e.renderer.getSurfaceHeight(),{opacity:t.opacity??1,transform:t.matrix,customParam:T})}}let Ht=new Set,Jt=!1;for(let o of x.glyphs)o.font&&o.font!==Z&&(Ht.add(o.font),Jt=!0);let te=t.fontStyle==="italic"?.21:0;if(Jt){Ht.add(Z);for(let o of Ht){if(e.device&&!o.curvesTex&&B.ensureTextures(e.device,o),!o.curvesTex)continue;let{data:s,visibleCount:y}=St(o,void 0,0,0,void 0,S=>(S.font??Z)===o);if(y>0){let S=s.subarray(0,y*24);e.renderer.slugPipeline.draw(n,e.renderer.getTransformStack(),o,S,y,t.color??"white",e.renderer.getSurfaceWidth(),e.renderer.getSurfaceHeight(),{opacity:t.opacity??1,transform:t.matrix,customParam:te})}}}else{let{data:o,visibleCount:s}=St(Z);if(s>0){let y=o.subarray(0,s*24);e.renderer.slugPipeline.draw(n,e.renderer.getTransformStack(),Z,y,s,t.color??"white",e.renderer.getSurfaceWidth(),e.renderer.getSurfaceHeight(),{opacity:t.opacity??1,transform:t.matrix,customParam:te})}}for(let o of x.emojis){let s=t.animation?.applyBy==="line"?0:Math.floor(o.x/(r+m)),y=b[s%q]??0,S=t.opacity??1,I=0,T=0,M=0,g=1;if(t.isVideoMode!==!1){let{p_in:J,p_out:st}=jt(z,K,at,nt,y,q,!0),V=_t(J,st,f,it,l,et,z,K,at,nt,y,t.opacity??1,!0);if(!V.visible)continue;S=V.opacity,I=V.transX,T=V.transY,M=V.rot,g=V.scale}if(t.animators&&t.animators.length>0){let J=Ae(t.animators,{charIndex:s,wordIndex:0,lineIndex:o.lineIndex},{charsCount:x.charsCount,wordsCount:x.wordsCount,linesCount:x.linesCount},{transX:I,transY:T,rot:M,scale:g,scaleX:1,scaleY:1,opacity:S,blurAmount:0},!0);I=J.transX,T=J.transY,M=J.rot,g=J.scale,S=J.opacity}let _=je(e.device,o.char,o.size),G=o.size*1.5,k=(G-o.size)/2,R={x:t.dstRect.x+o.x+a-k,y:rt.y+o.y+a-k,width:G,height:G},N=new DOMMatrix,W=R.x+G/2,O=R.y+G/2;N=N.translate(W,O),(I!==0||T!==0)&&(N=N.translate(I,T)),M!==0&&(N=N.rotate(M)),g!==1&&(N=N.scale(g)),N=N.translate(-W,-O);let $=t.matrix?t.matrix.multiply(N):N;e.renderer.drawTextureRegion(n,_,{x:0,y:0,width:_.width,height:_.height},R,{opacity:S,transform:$})}if(t.typewriter?.cursor?.enabled&&w&&w.isCursorVisible&&(!t.typewriter.cursor.hideOnComplete||w.visibleChars<t.text.length)){let o=t.typewriter.cursor,s=o.color??t.color??"white",y=o.width??2.5,S=o.spacing??3,I=t.dstRect.x+a,T=rt.y+a;if(x.glyphs.length>0){let M=x.glyphs[x.glyphs.length-1],g=r/c.unitsPerEm,_=M.clusterAdvance??(M.cp?.advanceWidth||0)*g,G=M.clusterX??M.x,k=o.style==="underscore"||o.style==="block"?r*.5:y;I=t.dstRect.x+a+(M.rtl?G-S-k:G+_+S),T=M.y+rt.y+a}o.style==="underscore"?e.renderer.drawRect(n,{x:I,y:T,width:r*.5,height:y},s,0,{opacity:t.opacity??1}):o.style==="block"?e.renderer.drawRect(n,{x:I,y:T-r*.8,width:r*.5,height:r},s,0,{opacity:t.opacity??1}):e.renderer.drawRect(n,{x:I,y:T-r*.8,width:y,height:r},s,0,{opacity:t.opacity??1})}}wt();function Te(e){let t=e.trim().replace(",",".").split(":");if(t.length<2||t.length>3)throw new Error(`Invalid timestamp: ${e}`);if(t.length===2){let[d,u]=t;return parseInt(d,10)*60+parseFloat(u)}let[i,r,c]=t;return parseInt(i,10)*3600+parseInt(r,10)*60+parseFloat(c)}function Ue(e){let n=e.replace(/\r\n/g,`
2
- `).split(`
3
- `),t=[];for(let i=0;i<n.length;i++){let r=n[i],c=n[i+1];if(r?.match(/([0-9]+)/)&&c?.includes(" --> ")){let d=c.split(" --> "),u=Te(d[0]),m=Te(d[1]);t.push({text:"",startMs:u*1e3,endMs:m*1e3,confidence:1,timestampMs:(u+m)/2*1e3})}else r?.includes(" --> ")||(r?.trim()===""?t.length>0&&(t[t.length-1].text=t[t.length-1].text.trim()):t.length>0&&(t[t.length-1].text+=r+`
4
- `))}return{captions:t.map(i=>({...i,text:i.text.trimEnd()}))}}function De(e,n,t=!0){if(!e||e.length===0)return null;let i=e.find(r=>n>=r.startMs&&n<r.endMs);return i||(!t&&e.length>0?e[0]:null)}function un(e,n,t){if(!e||e.length===0)return 160;let i=n.fontSize??48,r=n.letterSpacing??0,c=n.lineHeight!==void 0&&n.lineHeight<10?n.lineHeight*i:n.lineHeight??i*1.2,d=n.padding??(n.background?12:0),u=t?Math.max(10,t-d*2):void 0,m=n.fontFamily??"Inter";B.isFailed(m)&&(m="Inter");let C=B.getFont(m,n.fontWeight,null),h=0;for(let p of e){if(!p.text)continue;let a=0;if(C&&C.codePoints){let w=bt.measure(p.text,C,i,r,c,u);a=Math.ceil(w.height)}else{let w=p.text.split(`
5
- `),v=0;for(let X of w)if(u){let j=X.length*i*.55+r*X.length,P=Math.max(1,Math.ceil(j/u));v+=P}else v+=1;a=Math.ceil(v*c)}let A=a+d*2;A>h&&(h=A)}return Math.max(20,h||160)}var Zt=class{cache=new Map;resolvedCache=new Map;getCached(n){return this.resolvedCache.get(n)}setCached(n,t){this.resolvedCache.set(n,t)}clear(){this.cache.clear(),this.resolvedCache.clear()}async load(n){if(!n)return[];let t=this.resolvedCache.get(n);if(t)return t;let i=this.cache.get(n);return i||(i=(async()=>{let r="";if(n.startsWith("data:")){let d=n.indexOf(",");if(d!==-1){let u=n.substring(0,d),m=n.substring(d+1);r=u.includes(";base64")?typeof Buffer<"u"?Buffer.from(m,"base64").toString("utf-8"):new TextDecoder().decode(Uint8Array.from(atob(m),h=>h.charCodeAt(0))):decodeURIComponent(m)}}else if(n.includes("-->"))r=n;else if(n.startsWith("http://")||n.startsWith("https://")){let d=await fetch(n);if(!d.ok)throw new Error(`Failed to fetch SRT: ${n}`);r=await d.text()}else{let d=n;if(d.startsWith("file://"))try{d=new URL(d).pathname}catch{d=d.replace(/^file:\/\//,"")}if(typeof Rt<"u"&&Rt.versions?.node)try{r=await(await import("./shims/fs-promises.mjs")).readFile(d,"utf-8")}catch{let u=await fetch(n);if(!u.ok)throw new Error(`Failed to fetch SRT: ${n}`);r=await u.text()}else{let u=await fetch(n);if(!u.ok)throw new Error(`Failed to fetch SRT: ${n}`);r=await u.text()}}let c=Ue(r).captions;return this.resolvedCache.set(n,c),c})(),this.cache.set(n,i),i.catch(()=>{this.cache.delete(n),this.resolvedCache.delete(n)})),i}},Ne=new Zt;async function dn(e,n,t){if(!t.src)return;let i=await Ne.load(t.src);if(!i||i.length===0)return;let r=t.frame/t.fps*1e3,c=De(i,r,t.isVideoMode!==!1);if(!c)return;let d=c.text,u=t.dstRect.width,m=t.padding??(t.textBackgroundColor?12:0),C=Math.max(10,u-m*2),h=t.maxWidth!==void 0?Math.min(t.maxWidth,C):C,p=t.fontSize??48,a=t.fontFamily??"Inter";if(B.isFailed(a)&&(a="Inter"),B.isFailed(a))return;let A=t.letterSpacing??0,w=B.getFont(a,t.fontWeight,e.device);if(!w||!w.curvesTex){let z=Gt(a);B.preloadSlugFont(e.device,a,z,void 0,t.renderId).catch(K=>{console.warn(`[drawCaptionNode] Failed to load Slug font for ${a}:`,K)});return}let v=t.lineHeight!==void 0&&t.lineHeight<10?t.lineHeight*p:t.lineHeight??p*1.2,X=bt.measure(d,w,p,A,v,h,void 0,t.direction),j=X.width,P=X.height,H=j+m*2,tt=P+m*2,ot=t.align??"center",x=X.layout?.glyphs[0]?.baseRtl??t.direction==="rtl",ft=ot==="start"?x?"right":"left":ot==="end"?x?"left":"right":ot,lt=0;ft==="center"?lt=Math.max(0,(u-H)/2):ft==="right"&&(lt=Math.max(0,u-H));let rt=t.dstRect.height,U=t.verticalAlign??t.textAlignVertical??"bottom",ut=0;U==="top"?ut=0:U==="middle"?ut=(rt-tt)/2:ut=rt-tt;let ht={x:t.dstRect.x+lt,y:t.dstRect.y+ut,width:H,height:tt},Z=t.opacity??1;if(t.textBackgroundColor){let z=t.strokeRadius??t.borderRadius??8;e.renderer.drawRRect(n,{rect:ht,rx:z,ry:z},t.textBackgroundColor,{opacity:Z})}let mt={x:ht.x+m,y:ht.y+m,width:j,height:P};pe(e,n,{...t,text:d,dstRect:mt,width:h,height:P,align:ot,opacity:Z,isCaption:!0,animation:void 0,textBackgroundColor:void 0})}export{Ce as a,ze as b,Me as c,pe as d,un as e,Ne as f,dn as g};
@@ -1,3 +0,0 @@
1
- import{a as E}from"./chunk-E4RAFHZM.mjs";import{b as R,e as x,r as A}from"./chunk-BWJS6G7R.mjs";import{m as P}from"./chunk-4GEWSUX5.mjs";import{o as g}from"./chunk-YAQFFQPG.mjs";import{d as m,e as F}from"./chunk-BVF64D6H.mjs";F();F();var I=65536,S=1953658213,$=1954115633,N=1330926671,k=1953784678;function U(r,t){if(r.length<12)throw new Error(`Invalid font binary for "${t}": File size (${r.length} bytes) is too small to be a valid TrueType or OpenType font.`);let e=(r[0]??0)<<24|(r[1]??0)<<16|(r[2]??0)<<8|(r[3]??0);if(e===I||e===S||e===$||e===k)return"truetype";if(e===N)return"opentype";let i=(e>>>0).toString(16).padStart(8,"0");throw new Error(`Invalid font format for "${t}": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${i}.`)}async function M(r){if(r instanceof Uint8Array)return{buffer:r};if(typeof r!="string")throw new TypeError(`Font source must be a file path string or Uint8Array, received: ${typeof r}`);let t=r;if(t.startsWith("http://")||t.startsWith("https://")){let s=await fetch(t);if(!s.ok)throw new Error(`Failed to download font from "${t}": HTTP ${s.status} ${s.statusText}`);let c=await s.arrayBuffer();return{buffer:new Uint8Array(c),filePath:t}}if(t.startsWith("file://"))try{t=new URL(t).pathname}catch{t=t.replace(/^file:\/\//,"")}let e=[t,g.resolve(m.cwd(),t),g.resolve(m.cwd(),"assets/fonts",t),g.resolve(m.cwd(),"assets/fonts",g.basename(t))],i=m.cwd();for(let s=0;s<5;s++){e.push(g.resolve(i,t)),e.push(g.resolve(i,"assets/fonts",g.basename(t)));let c=g.dirname(i);if(c===i)break;i=c}let a=null,f=null;for(let s of e)try{if((await P.stat(s)).isFile()){a=s,f=await P.readFile(s);break}}catch{}if(!a||!f)throw new Error(`Font file not found: "${r}". Checked candidate locations:
2
- - ${e.join(`
3
- - `)}`);return{buffer:new Uint8Array(f.buffer,f.byteOffset,f.byteLength),filePath:a}}var v=class r{static instance=null;fonts=new Map;constructor(){}static getInstance(){return r.instance||(r.instance=new r),r.instance}static async register(t,e){return r.getInstance().register(t,e)}static async registerEmojiFont(t){let{buffer:e,filePath:i}=await M(t);U(e,i??(typeof t=="string"?t:"Uint8Array")),x.setEmojiFont(e,i)}static measure(t,e){let i=e.fontSize??48,a=x.getFont(e.fontFamily,e.fontWeight,null);if(!a)throw new Error(`FontManager.measure: font "${e.fontFamily}" is not registered. Call \`await FontManager.register(...)\` first.`);let f=e.lineHeight!==void 0&&e.lineHeight<10?e.lineHeight*i:e.lineHeight??i*1.2,s=e.letterSpacing??0,{width:c,height:p,layout:y}=A.measure(t,a,i,s,f,e.width,void 0,e.direction),T=i/a.unitsPerEm,o=[],w=new Set,d=0;for(let n of y.glyphs){let l=n.textIndex;if(l===void 0){let u=t.indexOf(n.char,d);l=u>=0?u:d}if(w.has(l))continue;w.add(l),d=l+n.char.length;let h=n.clusterAdvance??n.cp.advanceWidth*(n.fontScale??T);o.push({char:n.char,index:l,x:n.clusterX??n.x,y:n.y,width:h+s,line:n.lineIndex,...n.rtl&&{rtl:!0}})}let b=n=>{if(n<=0||o.length===0){let u=o[0];return u?u.rtl?u.x+u.width-s:u.x:0}let l=o.filter(u=>u.index<n),h=l[l.length-1];return h?h.rtl?h.x:h.x+h.width-s:0};return{width:c,height:p,lines:y.linesCount,lineHeight:f,glyphs:o,caretX:b,widthOf:n=>b(n)-(o[0]?.x??0)}}static get(t){return r.getInstance().get(t)}static has(t){return r.getInstance().has(t)}static getAll(){return r.getInstance().getAll()}static getRegisteredFontPaths(){return r.getInstance().getRegisteredFontPaths()}static clear(){r.getInstance().clear()}async register(t,e){let i,a,f,s;if(typeof t=="object"&&t!==null)i=t.family,a=t.source,f=t.weight,s=t.style;else if(typeof t=="string"&&e!==void 0)i=t,a=e;else if(typeof t=="string")i=void 0,a=t;else throw new TypeError("Invalid arguments passed to FontManager.register");let{buffer:c,filePath:p}=await M(a),y=p??(typeof a=="string"?a:"Uint8Array"),T=U(c,y),o;try{let n=R(c);n&&"fonts"in n&&Array.isArray(n.fonts)&&n.fonts.length>0?o=n.fonts[0]:o=n}catch(n){let l=n instanceof Error?n.message:String(n);throw new Error(`Failed to parse TrueType/OpenType font binary for "${y}": ${l}`)}let w=o.familyName||o.postscriptName||g.parse(y).name,d=i?.trim()||w,b={family:d,source:a,filePath:p,format:T,postscriptName:o.postscriptName,unitsPerEm:o.unitsPerEm,weight:f,style:s};return this.fonts.set(d,b),p&&await E(d,p),x.setParsed(d,o),b}get(t){return this.fonts.get(t)}has(t){return this.fonts.has(t)}getAll(){return Array.from(this.fonts.values())}getRegisteredFontPaths(){let t=[];for(let e of this.fonts.values())e.filePath?t.push(e.filePath):typeof e.source=="string"&&t.push(e.source);return t}clear(){this.fonts.clear()}};export{v as a};
@@ -1 +0,0 @@
1
- import{a as dt}from"./chunk-37EFVZWT.mjs";import{a as ft}from"./chunk-4VOHF3FF.mjs";import{i as lt,l as N}from"./chunk-24P6DAB3.mjs";import{c as mt,e as et}from"./chunk-ZIIFTWDH.mjs";import{C as ut}from"./chunk-63SFBHEH.mjs";import{d as L,e as j}from"./chunk-BVF64D6H.mjs";j();j();j();function ht(e,n){return Math.round(e*n)}function X(e,n,i={timeOffsetSec:0}){if(!e)return e;let{operation:b,metadata:u={},children:c=[]}=e,{timeOffsetSec:h,durationLimitMs:s}=i;if(!b)return{...e,children:(c||[]).map(t=>X(t,n,i))};let d=b.timeline,p=d?.segments||[],m=N(e)?.durationMs??0;if(p.length>0){let t=p.reduce((a,A)=>{let z=A.endSec!=null?A.endSec-A.startSec:0,v=Math.max(1,Math.round(z*n));return a+v},0);t>0&&(m=t/n*1e3)}let f={...b},o=d?.startFrame??f.startFrame;if(typeof o=="number"){let t=ht(h,n);f.startFrame=o-t}let g={...u,durationMs:m},r=typeof o=="number"||f.op==="compose"?{timeOffsetSec:0,durationLimitMs:void 0}:{timeOffsetSec:h,durationLimitMs:s},F=(c||[]).map(t=>X(t,n,r));return{metadata:g,operation:f,children:F}}var gt=typeof L<"u"&&/^(debug|trace)$/i.test(L.env?.LOG_LEVEL??""),w={debug:(e,...n)=>{gt&&(typeof e=="object"&&e!==null?console.info("[AudioExtractor]",e,...n):console.info(`[AudioExtractor] ${e}`,...n))},warn:(e,...n)=>{typeof e=="object"&&e!==null?console.warn("[AudioExtractor]",e,...n):console.warn(`[AudioExtractor] ${e}`,...n)},error:(e,...n)=>{typeof e=="object"&&e!==null?console.error("[AudioExtractor]",e,...n):console.error(`[AudioExtractor] ${e}`,...n)}},yt=()=>{if(typeof window>"u")return Promise.resolve();let e=globalThis.scheduler;return typeof e?.yield=="function"?e.yield():new Promise(n=>setTimeout(n,0))},Mt=async(e=3e4)=>{await new Promise(i=>setTimeout(i,100));let n=Date.now();return new Promise(i=>{let b=()=>{let u=typeof window<"u"&&window.renderer_delayRenderHandles?window.renderer_delayRenderHandles:[],c=typeof globalThis<"u"?globalThis.__GATEWAI_DELAYS__:null,h=u.length>0,s=c instanceof Set&&c.size>0;if(!h&&!s){i();return}if(Date.now()-n>e){w.warn(`[AudioExtractor] waitForDelayRender timed out waiting for handles: ${JSON.stringify({browserHandles:u,globalDelays:c?Array.from(c):[]})}`),i();return}setTimeout(b,50)};b()})};async function xt(e){w.debug(`[AudioExtractor] decodeAudioSource started for url: ${e}`);try{if(typeof window<"u"&&typeof window.document<"u"&&!(typeof L<"u"&&L.versions&&L.versions.node)){w.debug(`[AudioExtractor] Browser detected. Fetching arrayBuffer for ${e}...`);let b=window.AudioContext||window.webkitAudioContext;if(!b)throw new Error("AudioContext is not supported in this browser");let u=new b;try{let c=await fetch(e);if(w.debug(`[AudioExtractor] Fetch response status for ${e}: ${c.status} (${c.statusText})`),!c.ok)throw new Error(`Failed to fetch audio source: ${c.statusText}`);let h=await c.arrayBuffer();w.debug(`[AudioExtractor] Fetched ${h.byteLength} bytes. Decoding audio data...`);let s=await u.decodeAudioData(h);w.debug(`[AudioExtractor] Decoded successfully: ${s.numberOfChannels} channels, sampleRate: ${s.sampleRate}, duration: ${s.duration}s`);let d=[];for(let p=0;p<s.numberOfChannels;p++)d.push(new Float32Array(s.getChannelData(p)));return{channels:d,sampleRate:s.sampleRate}}finally{u.close(),w.debug(`[AudioExtractor] AudioContext closed for ${e}`)}}let i=!1;try{w.debug(`[AudioExtractor] Server / Node.js detected. Acquiring from inputStore for ${e}...`);let b=await et.acquire(e);i=!0,w.debug("[AudioExtractor] inputStore acquired. Retrieving primary audio track...");let u=await b.getPrimaryAudioTrack();if(!u)return w.warn(`[AudioExtractor] No primary audio track found in input for ${e}`),null;let h=new mt(u).samples(0),s=[],d=0,p=48e3,m=1;w.debug(`[AudioExtractor] Starting mediabunny generator loop for ${e}...`);for await(let o of h){p=o.sampleRate,m=o.numberOfChannels;let g=o.numberOfFrames;if(s.length===0)for(let l=0;l<m;l++)s.push([]);for(let l=0;l<m;l++){let r;try{let F=o.allocationSize({planeIndex:l,format:"f32-planar"});r=new Float32Array(F/4),o.copyTo(r,{planeIndex:l,format:"f32-planar"})}catch{let F=o.allocationSize({planeIndex:l});if(o.format==="s16"||o.format==="s16-planar"){let t=new Int16Array(F/2);o.copyTo(t,{planeIndex:l}),r=new Float32Array(t.length);for(let a=0;a<t.length;a++)r[a]=(t[a]??0)/32768}else if(o.format==="s32"||o.format==="s32-planar"){let t=new Int32Array(F/4);o.copyTo(t,{planeIndex:l}),r=new Float32Array(t.length);for(let a=0;a<t.length;a++)r[a]=(t[a]??0)/2147483648}else if(o.format==="u8"||o.format==="u8-planar"){let t=new Uint8Array(F);o.copyTo(t,{planeIndex:l}),r=new Float32Array(t.length);for(let a=0;a<t.length;a++)r[a]=((t[a]??128)-128)/128}else r=new Float32Array(F/4),o.copyTo(r,{planeIndex:l})}s[l].push(r)}d+=g,o.close()}return w.debug(`[AudioExtractor] Generator loop finished. Decoded total frames: ${d}`),d===0||s.length===0?null:{channels:s.map(o=>{let g=new Float32Array(d),l=0;for(let r of o)g.set(r,l),l+=r.length;return g}),sampleRate:p}}catch(b){if(typeof L<"u"&&L.versions?.node)try{let{execSync:u}=await import("./child_process-AIL2NBWS.mjs"),c=u(`ffmpeg -v error -i "${e}" -f f32le -ar 48000 -ac 2 pipe:1`,{maxBuffer:100*1024*1024}),h=c.byteLength/4,s=h/2,d=new Float32Array(c.buffer,c.byteOffset,h),p=new Float32Array(s),m=new Float32Array(s);for(let f=0;f<s;f++)p[f]=d[f*2],m[f]=d[f*2+1];return{channels:[p,m],sampleRate:48e3}}catch(u){w.warn({ffmpegErr:u},`[AudioExtractor] ffmpeg fallback decode failed for ${e}`)}return w.error({err:b},`[AudioExtractor] Failed to decode source ${e}`),null}finally{i&&et.release(e)}}catch(n){return w.error({err:n},`[AudioExtractor] Failed to decode source ${e}`),null}}async function pt(e,n,i,b,u,c){let h=new Float32Array(u),d=n/i*b,p=1e5;for(let m=0;m<u;m++){m>0&&m%p===0&&await yt();let f=c+m*d,o=Math.floor(f),g=Math.ceil(f);if(o<0){h[m]=0;continue}if(o>=e.length)break;let l=f-o,r=e[o]??0,F=g>=0&&g<e.length?e[g]??r:r,t=r+l*(F-r);h[m]=Number.isFinite(t)?t:0}return h}async function It(e,n,i=48e3,b,u){w.debug(`[AudioExtractor] mixAudioTracks started. FPS: ${n}, targetSampleRate: ${i}`),await Mt(),dt.registerSignalsFromComposition(u,e);let c=N(e)?.durationMs||1e3,h=c/1e3,s=Math.ceil(h*i);w.debug(`[AudioExtractor] Composition total duration: ${c}ms (${h}s). Total mixed samples to allocate: ${s}`);let d=new Float32Array(s),p=new Float32Array(s),m=[d,p],f=new Map;async function o(t,a,A,z,v,B){if(!t)return null;let C=t.operation;if(!C){let k=N(t)?.durationMs??0,D=Math.round(k/1e3*n),U=B!==null?D>0?Math.min(B,D):B:D,O=Math.ceil(U/n*i);if(O<=0)return null;let q=new Float32Array(O),G=new Float32Array(O),H=[q,G];for(let M of t.children){let Y=await o(M,a,A,z,v,U);if(Y){let x=M.operation,S=x?.startFrame??x?.timeline?.startFrame??0,E=Math.round(S/n*i);for(let P=0;P<2;P++){let y=H[P],R=Y[P],T=Math.min(R.length,y.length-E);for(let $=0;$<T;$++)E+$>=0&&(y[E+$]+=R[$])}}}return H}let W=z*(C.volume??1)*(C.opacity===0?0:1)*(C.muted?0:1),nt=v,wt=C.startFrame??C.timeline?.startFrame??0,bt=A+wt,ot=C.timeline?.segments||[],V=C,rt=V.op==="CompositorLayer"?(V.mediaStartFrame??V.trimStartFrames??null)!==null?(V.mediaStartFrame??V.trimStartFrames??0)/n:Math.round((V.trimStartSec??0)*n)/n:0,At=N(t)?.durationMs??0,K=Math.round(At/1e3*n),St=B!==null?K>0?Math.min(B,K):B:K,I=Math.ceil(St/n*i);if(I<=0)return null;let at=new Float32Array(I),st=new Float32Array(I),Z=[at,st],it=async(k,D)=>{let U=k?k.startSec:0,O=a+rt+U,q=bt+D,G=0;k?G=Math.max(1,Math.round(((k.endSec??0)-k.startSec)*n)):G=K;let H=B!==null?Math.min(B,G):G,M=Math.round(D/n*i);if(C.op==="source"){let x=lt(t),S=ft(t);if(S.sourceUrl&&(x==="Audio"||x==="Video")&&W>0){let E=Math.max(.5,nt*(Number(S.speed)||1)),P=Math.max(0,(Number(S.trimStartSec)||0)+O),y=f.get(S.sourceUrl);if(y===void 0&&(y=await xt(S.sourceUrl),f.set(S.sourceUrl,y)),y){let R=H/n,T=Math.min(I-M,Math.ceil(R*i));if(T>0&&M<I){let $=Math.round(P*y.sampleRate),Q=y.channels[0],tt=y.channels.length>1?y.channels[1]:y.channels[0],_=await pt(Q,y.sampleRate,i,E,T,$),Ft=await pt(tt,y.sampleRate,i,E,T,$);for(let J=0;J<T;J++){let ct=M+J;at[ct]+=_[J]*W,st[ct]+=Ft[J]*W}}}await yt()}}if(t.children)for(let x of t.children){let S=await o(x,O,q,W,nt,H);if(S){let E=x.operation,P=E?.startFrame??E?.timeline?.startFrame??0,y=Math.round(P/n*i),R=M+y;for(let T=0;T<2;T++){let $=Z[T],Q=S[T],tt=Math.min(Q.length,$.length-R);for(let _=0;_<tt;_++)R+_>=0&&($[R+_]+=Q[_])}}}let Y=ut.get(C.op);if(Y)try{let x=H/n,S=Math.min(I-M,Math.ceil(x*i));if(S>0&&M<I&&M>=0){let E=Z.map(R=>R.subarray(M,M+S)),P=(q/n+O-rt)*1e3,y=N(t)?.durationMs??void 0;await Y(E,i,t,{device:b,frame:q,fps:n,renderId:u,elapsedMs:P,durationMs:y})}}catch(x){w.error({err:x},`[AudioExtractor] Custom plugin for operation '${C.op}' failed`)}};if(ot.length>0){let k=0;for(let D of ot){let U=(D.endSec??0)-D.startSec,O=Math.max(1,Math.round(U*n));await it(D,k),k+=O}}else await it(null,0);return Z}let g=X(e,n),l=await o(g,0,0,1,1,null);if(l)for(let t=0;t<2;t++){let a=m[t],A=l[t],z=Math.min(A.length,a.length);for(let v=0;v<z;v++)a[v]=A[v]}f.clear();let r=0;for(let t=0;t<s;t++){let a=Math.abs(d[t]??0),A=Math.abs(p[t]??0);a>r&&(r=a),A>r&&(r=A)}let F=r>.95?.92/r:1;for(let t=0;t<s;t++){let a=(d[t]??0)*F,A=(p[t]??0)*F;d[t]=Number.isFinite(a)?Math.tanh(a):0,p[t]=Number.isFinite(A)?Math.tanh(A):0}return{channels:m,sampleRate:i}}export{xt as a,It as b};
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-BhKIZDsm.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DqjITuT-.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-BXQQxeNC.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-BI5rvAyo.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-CAJe9eLS.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as rendererNode } from "./renderer-BygIYH8s.mjs";
4
-
5
- export { renderers_default as default, rendererNode };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-Br9BOkQs.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-CrAqu3Rg.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-Bb8T5eRX.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-BWVsBB3t.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-C5caYAA3.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as LiquifyWebGPURenderer } from "./renderer-DyzNM721.mjs";
4
-
5
- export { LiquifyWebGPURenderer, renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DWEvQ-hQ.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DKqG9Lek.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-C--Dqe-3.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-D2FFvxsq.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as WebGPURenderer } from "./renderer-C92mwhZz.mjs";
4
-
5
- export { WebGPURenderer, renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-CMsjnZ0G.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,6 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderers-CP8CFWDs-CMYe4kvZ.mjs";
4
- import "./renderer-B-BcgA6d.mjs";
5
-
6
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DX8aBDqR.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DZD2G76E.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-CydWqyf0.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-NXdm6HLb.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as WebGPURenderer } from "./renderer-FHyZn0em.mjs";
4
-
5
- export { WebGPURenderer, renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { n as renderers_default, t as WebGPURenderer } from "./renderer-Dno-fujw.mjs";
4
-
5
- export { WebGPURenderer, renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DkyXqrQ6.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DVnVnS3c.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-Bc6J0iVG.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-CoGP4Mvf.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-BaaOR3Ao.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-D8-zNjyz.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-DzrM1KMN.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-D0aZNkQE.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-C7UZLOYk.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-C5zpaQed.mjs";
4
-
5
- export { renderers_default as default };
@@ -1,5 +0,0 @@
1
- import "./chunk-GBe2k3y8.mjs";
2
- import "./dist-DkuDAIrG.mjs";
3
- import { t as renderers_default } from "./renderer-C27RfwXN.mjs";
4
-
5
- export { renderers_default as default };