framefields 2.12.0 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/README.md +9 -4
  2. package/dist/audio/index.d.mts +6 -5
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-afTBdB3U.d.mts → audio-C4B9p_yq.d.mts} +3 -4
  5. package/dist/audio-C4B9p_yq.d.mts.map +1 -0
  6. package/dist/{audio-DHLoNcxD.mjs → audio-DIvi6hTD.mjs} +4 -4
  7. package/dist/{audio-DHLoNcxD.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
  8. package/dist/{audio-KHBadECb.mjs → audio-DS9Jg2ls.mjs} +1 -1
  9. package/dist/{audio-KHBadECb.mjs.map → audio-DS9Jg2ls.mjs.map} +1 -1
  10. package/dist/{check-result-Culfu7Nx.mjs → check-result-DZWx73V8.mjs} +1 -1
  11. package/dist/{check-result-Culfu7Nx.mjs.map → check-result-DZWx73V8.mjs.map} +1 -1
  12. package/dist/cli/check-worker.mjs +51 -51
  13. package/dist/cli/check-worker.mjs.map +1 -1
  14. package/dist/cli/local-worker.d.mts +28 -0
  15. package/dist/cli/local-worker.d.mts.map +1 -0
  16. package/dist/cli/local-worker.mjs +83 -0
  17. package/dist/cli/local-worker.mjs.map +1 -0
  18. package/dist/cli.mjs +229 -54
  19. package/dist/cli.mjs.map +1 -1
  20. package/dist/cloud/index.d.mts +2 -0
  21. package/dist/cloud/index.d.mts.map +1 -1
  22. package/dist/cloud/index.mjs +1 -1
  23. package/dist/{cloud-COid1Ipa.mjs → cloud-Cj1TIme8.mjs} +306 -7
  24. package/dist/cloud-Cj1TIme8.mjs.map +1 -0
  25. package/dist/components/index.d.mts +15 -14
  26. package/dist/components/index.mjs +47 -47
  27. package/dist/{dist-CySGkG54.mjs → dist-BSKAbyea.mjs} +2 -2
  28. package/dist/{dist-CySGkG54.mjs.map → dist-BSKAbyea.mjs.map} +1 -1
  29. package/dist/{dist-BwtxciN4.mjs → dist-B_rSWeOz.mjs} +1 -1
  30. package/dist/{dist-Bf2_efYP.mjs → dist-C8XSqfTx.mjs} +1 -1
  31. package/dist/{dist-Bf2_efYP.mjs.map → dist-C8XSqfTx.mjs.map} +1 -1
  32. package/dist/{dist-BSqeChht.mjs → dist-CCrYOkcc.mjs} +145 -84
  33. package/dist/dist-CCrYOkcc.mjs.map +1 -0
  34. package/dist/dist-CiTgmfUw.mjs +502 -0
  35. package/dist/dist-CiTgmfUw.mjs.map +1 -0
  36. package/dist/{dist-BIE8fvlv.mjs → dist-DgZpN6IK.mjs} +1 -1
  37. package/dist/{dist-BIE8fvlv.mjs.map → dist-DgZpN6IK.mjs.map} +1 -1
  38. package/dist/{dist-B-OPY7Cs.mjs → dist-DtPPPsZV.mjs} +356 -145
  39. package/dist/dist-DtPPPsZV.mjs.map +1 -0
  40. package/dist/{dist-2_lT3Dwc.mjs → dist-Kbf-JTry.mjs} +2 -2
  41. package/dist/{dist-2_lT3Dwc.mjs.map → dist-Kbf-JTry.mjs.map} +1 -1
  42. package/dist/effects/index.d.mts +6 -6
  43. package/dist/effects/index.mjs +36 -36
  44. package/dist/{effects-C8CL9cOq.mjs → effects-B-L3rLs6.mjs} +3 -3
  45. package/dist/{effects-C8CL9cOq.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
  46. package/dist/fonts/index.d.mts +1 -1
  47. package/dist/fonts/index.mjs +3 -3
  48. package/dist/{fonts-BQrDjnpV.mjs → fonts-k5ll8NTE.mjs} +2 -2
  49. package/dist/{fonts-BQrDjnpV.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
  50. package/dist/{gpu-DHa-3Dou.mjs → gpu-D2HT3KcE.mjs} +2 -2
  51. package/dist/{gpu-DHa-3Dou.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
  52. package/dist/{index-CTv9ZieD.d.mts → index-B08eSpaI.d.mts} +3 -30
  53. package/dist/index-B08eSpaI.d.mts.map +1 -0
  54. package/dist/index-BFTtXosj.d.mts +63 -0
  55. package/dist/index-BFTtXosj.d.mts.map +1 -0
  56. package/dist/{index-Drk6HC2k.d.mts → index-BGlaws7-.d.mts} +3 -3
  57. package/dist/{index-Drk6HC2k.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
  58. package/dist/{index-CAuNuvIg.d.mts → index-ByhlTwxh.d.mts} +5 -5
  59. package/dist/{index-CAuNuvIg.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
  60. package/dist/{index-Fliv2Z-w.d.mts → index-C2yaponf.d.mts} +132 -7
  61. package/dist/index-C2yaponf.d.mts.map +1 -0
  62. package/dist/{index-BW0Q1ygn.d.mts → index-C5sgRLlG.d.mts} +1 -1
  63. package/dist/{index-BW0Q1ygn.d.mts.map → index-C5sgRLlG.d.mts.map} +1 -1
  64. package/dist/{index-CdCrae-I.d.mts → index-CnZhBlob.d.mts} +2 -2
  65. package/dist/index-CnZhBlob.d.mts.map +1 -0
  66. package/dist/{index-BNClElng.d.mts → index-CtKUQ2VG.d.mts} +281 -283
  67. package/dist/index-CtKUQ2VG.d.mts.map +1 -0
  68. package/dist/{index-WwuuX8ZJ.d.mts → index-DBh3WphX.d.mts} +2 -2
  69. package/dist/{index-WwuuX8ZJ.d.mts.map → index-DBh3WphX.d.mts.map} +1 -1
  70. package/dist/{index-gOVtTm-P.d.mts → index-DQ1U3HC3.d.mts} +14 -6
  71. package/dist/index-DQ1U3HC3.d.mts.map +1 -0
  72. package/dist/{index-COYNQ_mf.d.mts → index-a6JrbAK0.d.mts} +1 -1
  73. package/dist/{index-COYNQ_mf.d.mts.map → index-a6JrbAK0.d.mts.map} +1 -1
  74. package/dist/{index-DQa7mhzq.d.mts → index-rtCXNxGO.d.mts} +2 -2
  75. package/dist/{index-DQa7mhzq.d.mts.map → index-rtCXNxGO.d.mts.map} +1 -1
  76. package/dist/index.d.mts +16 -15
  77. package/dist/index.mjs +58 -58
  78. package/dist/preview/index.d.mts +5 -4
  79. package/dist/preview/index.mjs +12 -12
  80. package/dist/preview-engine/audio.mjs +1 -1
  81. package/dist/preview-engine/{chunk-FJTURGJV.mjs → chunk-3C2XT64C.mjs} +1 -1
  82. package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
  83. package/dist/preview-engine/{chunk-4JNIEQS2.mjs → chunk-5ZS46EFB.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-KBCZKIIQ.mjs → chunk-CYM75INB.mjs} +1 -1
  85. package/dist/preview-engine/chunk-FZ4RD7HV.mjs +1 -0
  86. package/dist/preview-engine/chunk-LZNHGH56.mjs +5 -0
  87. package/dist/preview-engine/{chunk-RGKS6YIA.mjs → chunk-N2VISDTG.mjs} +1 -1
  88. package/dist/preview-engine/chunk-N3XTDAL6.mjs +2227 -0
  89. package/dist/preview-engine/{chunk-O75BFM4S.mjs → chunk-NVXFEDJS.mjs} +1 -1
  90. package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
  91. package/dist/preview-engine/{chunk-VUO4K52B.mjs → chunk-PD2HKW2S.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-HTAHYSCW.mjs → chunk-R4H52Q7S.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-6O7UDVNL.mjs → chunk-RYSV44B4.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-TKXOSEIJ.mjs → chunk-SV3ZNZQU.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-JAUMCOOJ.mjs → chunk-UBY2UYEL.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-32WC4FRR.mjs → chunk-UE7Y65C3.mjs} +3 -3
  97. package/dist/preview-engine/{chunk-M4QVCQ3O.mjs → chunk-VMXJZ4KQ.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-EYKN2VET.mjs → chunk-XCPRRMMW.mjs} +31 -31
  99. package/dist/preview-engine/components.mjs +1 -1
  100. package/dist/preview-engine/effects.mjs +1 -1
  101. package/dist/preview-engine/framefields.mjs +1 -1
  102. package/dist/preview-engine/player.mjs +5 -5
  103. package/dist/preview-engine/{renderers-L6GFGHS6.mjs → renderers-AFTUFMQQ.mjs} +1 -1
  104. package/dist/preview-engine/renderers-DU7KPFVV.mjs +1 -1
  105. package/dist/preview-engine/{renderers-PREFONJG.mjs → renderers-EPSF5CSQ.mjs} +1 -1
  106. package/dist/preview-engine/{renderers-R22CDFO4.mjs → renderers-OJWWIVNW.mjs} +1 -1
  107. package/dist/preview-engine/{renderers-TS32FDV7.mjs → renderers-RHMRWX46.mjs} +1 -1
  108. package/dist/preview-engine/renderers-VEHYARKY.mjs +1 -0
  109. package/dist/preview-engine/renderers-VRXAG3FR.mjs +1 -0
  110. package/dist/preview-engine/renderers-ZHSOWEMQ.mjs +1 -0
  111. package/dist/preview-engine/renderers-ZMDRNYSS.mjs +1 -0
  112. package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +228 -0
  113. package/dist/preview-engine/signals.mjs +1 -1
  114. package/dist/preview-engine/{src-GPF7RIBU.mjs → src-YXNX4MLK.mjs} +1 -1
  115. package/dist/{preview-BUtt481A.mjs → preview-lHH8Tv4j.mjs} +323 -35
  116. package/dist/preview-lHH8Tv4j.mjs.map +1 -0
  117. package/dist/{program-Cvv_nb9T.mjs → program-BfiB9ttP.mjs} +17 -4
  118. package/dist/program-BfiB9ttP.mjs.map +1 -0
  119. package/dist/renderer/index.d.mts +4 -3
  120. package/dist/renderer/index.mjs +3 -3
  121. package/dist/renderer-0rLmztAv.mjs +5 -0
  122. package/dist/{renderer-D3QPNBEj.mjs → renderer-4nsuReW2.mjs} +5 -5
  123. package/dist/{renderer-D3QPNBEj.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
  124. package/dist/{renderer-DO1SZ5xY.mjs → renderer-7xQmXXMH.mjs} +5 -5
  125. package/dist/{renderer-DO1SZ5xY.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
  126. package/dist/renderer-B0pjOXFY.mjs +5 -0
  127. package/dist/{renderer-BSsKlcHk.mjs → renderer-B10HDC13.mjs} +5 -5
  128. package/dist/{renderer-BSsKlcHk.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
  129. package/dist/{renderer-DaY04IyU.mjs → renderer-B2IUPjhw.mjs} +5 -5
  130. package/dist/{renderer-DaY04IyU.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
  131. package/dist/{renderer-O4y02xkD.mjs → renderer-B3_GddgJ.mjs} +4 -4
  132. package/dist/{renderer-O4y02xkD.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
  133. package/dist/{renderer-DQJHjU0L.mjs → renderer-B3un4Pdi.mjs} +5 -5
  134. package/dist/{renderer-DQJHjU0L.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
  135. package/dist/{renderer-PnnkUWm-.mjs → renderer-B6bK9rXm.mjs} +4 -4
  136. package/dist/{renderer-PnnkUWm-.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
  137. package/dist/renderer-B7J13reL.mjs +5 -0
  138. package/dist/{renderer-HXw4cJZx.mjs → renderer-BEhZiOT4.mjs} +3 -3
  139. package/dist/{renderer-HXw4cJZx.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
  140. package/dist/{renderer-xNOKSN3V.mjs → renderer-BEuXJY-C.mjs} +5 -5
  141. package/dist/{renderer-xNOKSN3V.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
  142. package/dist/{renderer-IAffbHXx.mjs → renderer-BGchUBW_.mjs} +4 -4
  143. package/dist/{renderer-IAffbHXx.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
  144. package/dist/{renderer-CZClDMgF.mjs → renderer-BIKkxw_Z.mjs} +5 -5
  145. package/dist/{renderer-CZClDMgF.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
  146. package/dist/{renderer-BvRM3OZ6.mjs → renderer-BM19iK8v.mjs} +3 -3
  147. package/dist/{renderer-BvRM3OZ6.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
  148. package/dist/{renderer-CtpEzVBn.mjs → renderer-BOlHW3Mi.mjs} +3 -3
  149. package/dist/{renderer-CtpEzVBn.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
  150. package/dist/renderer-BPGIKGgl.mjs +5 -0
  151. package/dist/{renderer-4uZGSmUD.mjs → renderer-BTwuM9u-.mjs} +5 -5
  152. package/dist/{renderer-4uZGSmUD.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
  153. package/dist/{renderer-DO_zXwMJ.mjs → renderer-BZMh2io2.mjs} +5 -5
  154. package/dist/{renderer-DO_zXwMJ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
  155. package/dist/{renderer-rKw5_EjG.mjs → renderer-BZX932Lj.mjs} +4 -4
  156. package/dist/{renderer-rKw5_EjG.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
  157. package/dist/{renderer-5fGj_tqN.mjs → renderer-BhcTYhaP.mjs} +6 -6
  158. package/dist/{renderer-5fGj_tqN.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
  159. package/dist/{renderer-DL3o_lG1.mjs → renderer-BmyFfvVA.mjs} +5 -5
  160. package/dist/{renderer-DL3o_lG1.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
  161. package/dist/{renderer-DX60Kr20.mjs → renderer-BrEeUw7T.mjs} +3 -3
  162. package/dist/{renderer-DX60Kr20.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
  163. package/dist/{renderer-Bf7Z7WT5.mjs → renderer-BsrKj6Td.mjs} +4 -4
  164. package/dist/{renderer-Bf7Z7WT5.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
  165. package/dist/{renderer-BOg8i8eF.mjs → renderer-BuvKGwk3.mjs} +1 -1
  166. package/dist/{renderer-BOg8i8eF.mjs.map → renderer-BuvKGwk3.mjs.map} +1 -1
  167. package/dist/renderer-Bv-Artj1.mjs +5 -0
  168. package/dist/{renderer-_KIBvES8.mjs → renderer-BvBqTAtk.mjs} +5 -5
  169. package/dist/{renderer-_KIBvES8.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
  170. package/dist/renderer-BvLjbhcL.mjs +5 -0
  171. package/dist/{renderer-BC_Nse6h.mjs → renderer-Bw-_GZVw.mjs} +4 -4
  172. package/dist/{renderer-BC_Nse6h.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
  173. package/dist/{renderer-CLTRTtQ8.mjs → renderer-Bw0O--gW.mjs} +5 -5
  174. package/dist/{renderer-CLTRTtQ8.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
  175. package/dist/renderer-By6awWaf.mjs +5 -0
  176. package/dist/{renderer-DsPLMzy1.mjs → renderer-C-3qhk5x.mjs} +2 -2
  177. package/dist/{renderer-DsPLMzy1.mjs.map → renderer-C-3qhk5x.mjs.map} +1 -1
  178. package/dist/renderer-C0rvsz7m.mjs +5 -0
  179. package/dist/{renderer-DP9ScNM6.mjs → renderer-C4hd6Cqi.mjs} +3 -3
  180. package/dist/{renderer-DP9ScNM6.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
  181. package/dist/{renderer-B09I95bo.mjs → renderer-C64_B8It.mjs} +3 -3
  182. package/dist/{renderer-DrL3J9ci.mjs → renderer-C98XwEIr.mjs} +4 -4
  183. package/dist/{renderer-DrL3J9ci.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
  184. package/dist/{renderer-6g1ri445.mjs → renderer-CC22Djgi.mjs} +5 -5
  185. package/dist/{renderer-6g1ri445.mjs.map → renderer-CC22Djgi.mjs.map} +1 -1
  186. package/dist/renderer-CDgud_HB.mjs +5 -0
  187. package/dist/renderer-CDiRF3bG.mjs +6 -0
  188. package/dist/{renderer-FvvywNvv.mjs → renderer-CHCRcCKw.mjs} +3 -3
  189. package/dist/{renderer-FvvywNvv.mjs.map → renderer-CHCRcCKw.mjs.map} +1 -1
  190. package/dist/renderer-CIIEQd4B.mjs +5 -0
  191. package/dist/renderer-CJblwOA9.mjs +5 -0
  192. package/dist/renderer-CNMOXtXE.mjs +5 -0
  193. package/dist/{renderer-D3YbHjRG.mjs → renderer-CO4NGvAh.mjs} +95 -80
  194. package/dist/renderer-CO4NGvAh.mjs.map +1 -0
  195. package/dist/{renderer-ByFPmHBC.mjs → renderer-CO9vE3sd.mjs} +4 -4
  196. package/dist/{renderer-ByFPmHBC.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
  197. package/dist/renderer-COeSeNGg.mjs +5 -0
  198. package/dist/{renderer-CN-mCIoI.mjs → renderer-CQ4h8n7p.mjs} +5 -5
  199. package/dist/{renderer-CN-mCIoI.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
  200. package/dist/{renderer-DEoerd-j.mjs → renderer-CRhEGqW4.mjs} +4 -4
  201. package/dist/{renderer-DEoerd-j.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
  202. package/dist/{renderer-CiHVnhUk.mjs → renderer-CSu_vYPn.mjs} +5 -5
  203. package/dist/{renderer-CiHVnhUk.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
  204. package/dist/{renderer-BJEexai1.mjs → renderer-CU6WT5jW.mjs} +5 -5
  205. package/dist/{renderer-BJEexai1.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
  206. package/dist/renderer-CUfElmtZ.mjs +5 -0
  207. package/dist/{renderer-BwJ0nXXu.mjs → renderer-CXrnzihz.mjs} +5 -5
  208. package/dist/{renderer-BwJ0nXXu.mjs.map → renderer-CXrnzihz.mjs.map} +1 -1
  209. package/dist/renderer-CYh2lFoJ.mjs +5 -0
  210. package/dist/renderer-CYtVZYMH.mjs +5 -0
  211. package/dist/{renderer-BwV-o_1b.mjs → renderer-CdXBRdFf.mjs} +4 -4
  212. package/dist/{renderer-BwV-o_1b.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
  213. package/dist/{renderer-DrK6pyfz.mjs → renderer-Cfx_FCSf.mjs} +5 -5
  214. package/dist/{renderer-DrK6pyfz.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
  215. package/dist/renderer-CjxZlkjb.mjs +5 -0
  216. package/dist/{renderer-CInMMs5x.mjs → renderer-CkTehyRX.mjs} +6 -6
  217. package/dist/{renderer-CInMMs5x.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
  218. package/dist/{renderer-DGXqspB9.mjs → renderer-CldjJmRR.mjs} +3 -3
  219. package/dist/{renderer-HhJPFidU.mjs → renderer-CoC64eam.mjs} +5 -5
  220. package/dist/{renderer-HhJPFidU.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
  221. package/dist/renderer-Cpd6TvTC.mjs +5 -0
  222. package/dist/{renderer-DLaUT6JZ.mjs → renderer-Cv9CKKWG.mjs} +4 -4
  223. package/dist/{renderer-DLaUT6JZ.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
  224. package/dist/renderer-CzgcZXKH.mjs +3 -0
  225. package/dist/{renderer-DCMoBppL.mjs → renderer-D-GWBoVT.mjs} +3 -3
  226. package/dist/{renderer-DCMoBppL.mjs.map → renderer-D-GWBoVT.mjs.map} +1 -1
  227. package/dist/{renderer-C3CGYjrC.mjs → renderer-D-mX1EVA.mjs} +5 -5
  228. package/dist/{renderer-C3CGYjrC.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
  229. package/dist/{renderer-C2kFIZ4r.mjs → renderer-D0h1hTOo.mjs} +4 -4
  230. package/dist/{renderer-C2kFIZ4r.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
  231. package/dist/{renderer-C_gR2H3R.mjs → renderer-D0xM67cK.mjs} +3 -3
  232. package/dist/{renderer-C_gR2H3R.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
  233. package/dist/renderer-D3ziOPhX.mjs +5 -0
  234. package/dist/renderer-D5yp74NL.mjs +3 -0
  235. package/dist/{renderer-BTd6tFcS.mjs → renderer-DCrKEVjb.mjs} +5 -5
  236. package/dist/{renderer-BTd6tFcS.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
  237. package/dist/{renderer-Dak_wVh9.mjs → renderer-DGOMfyh8.mjs} +2 -2
  238. package/dist/{renderer-Dak_wVh9.mjs.map → renderer-DGOMfyh8.mjs.map} +1 -1
  239. package/dist/renderer-DKJOon6y.d.mts +1 -0
  240. package/dist/renderer-DL-phtL5.mjs +5 -0
  241. package/dist/{renderer-uA0UCxjA.mjs → renderer-DNynPM6X.mjs} +4 -4
  242. package/dist/{renderer-uA0UCxjA.mjs.map → renderer-DNynPM6X.mjs.map} +1 -1
  243. package/dist/renderer-DSnmYnHg.mjs +5 -0
  244. package/dist/renderer-DUGfsT-E.mjs +5 -0
  245. package/dist/renderer-DW5af9x1.mjs +5 -0
  246. package/dist/{renderer-CMCmljb0.mjs → renderer-DWYmJSrl.mjs} +3 -3
  247. package/dist/{renderer-CMCmljb0.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
  248. package/dist/renderer-DYMrol1t.mjs +5 -0
  249. package/dist/{renderer-CGpi8CDT.mjs → renderer-DYeNNc_G.mjs} +4 -4
  250. package/dist/{renderer-CGpi8CDT.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
  251. package/dist/{renderer-DKFaVaRJ.mjs → renderer-DYlx7VHo.mjs} +4 -4
  252. package/dist/{renderer-DKFaVaRJ.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
  253. package/dist/{renderer-DZIxduEt.mjs → renderer-D_m6Qbsi.mjs} +3 -3
  254. package/dist/{renderer-DZIxduEt.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
  255. package/dist/renderer-DekeUHaz.mjs +5 -0
  256. package/dist/{renderer-snjhPaP-.mjs → renderer-DhGZ41hQ.mjs} +4 -4
  257. package/dist/{renderer-snjhPaP-.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
  258. package/dist/{renderer-BXGuCnCJ.mjs → renderer-DiZkZ0Pr.mjs} +4 -4
  259. package/dist/{renderer-BXGuCnCJ.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
  260. package/dist/{renderer-BBjkX0Vt.mjs → renderer-Dm57W73p.mjs} +3 -3
  261. package/dist/renderer-Dt5uyJdZ.mjs +5 -0
  262. package/dist/{renderer-DwH5e3hx.mjs → renderer-DtFZbE1j.mjs} +3 -3
  263. package/dist/{renderer-Bxiiar50.mjs → renderer-DvHi_wXE.mjs} +4 -4
  264. package/dist/{renderer-Bxiiar50.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
  265. package/dist/{renderer-DaLy1dFA.mjs → renderer-Dv_iRIyx.mjs} +21 -21
  266. package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
  267. package/dist/renderer-DwLQAnaK.mjs +5 -0
  268. package/dist/{renderer-qVJdxbXB.mjs → renderer-DzON3wDZ.mjs} +4 -4
  269. package/dist/{renderer-qVJdxbXB.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
  270. package/dist/{renderer-Dj54y3h3.mjs → renderer-GIlQ9lZq.mjs} +3 -3
  271. package/dist/{renderer-Dj54y3h3.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
  272. package/dist/{renderer-b0H3oDae.mjs → renderer-HKv5cBdp.mjs} +3 -3
  273. package/dist/{renderer-b0H3oDae.mjs.map → renderer-HKv5cBdp.mjs.map} +1 -1
  274. package/dist/renderer-IXQP2CWM.mjs +5 -0
  275. package/dist/renderer-K-Pkw63O.mjs +5 -0
  276. package/dist/renderer-MPw2KH9P.mjs +5 -0
  277. package/dist/{renderer-t1sXDiqm.mjs → renderer-QbSrnPZU.mjs} +3 -3
  278. package/dist/{renderer-t1sXDiqm.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
  279. package/dist/renderer-RPu8RMav.mjs +5 -0
  280. package/dist/{renderer-Dp9FQKVP.mjs → renderer-TfeohPxt.mjs} +5 -5
  281. package/dist/{renderer-Dp9FQKVP.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
  282. package/dist/{renderer-BzTj_CeK.mjs → renderer-Y1kjtOto.mjs} +4 -4
  283. package/dist/{renderer-BzTj_CeK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
  284. package/dist/{renderer-LrAldCWN.mjs → renderer-YONlI6W-.mjs} +5 -5
  285. package/dist/{renderer-LrAldCWN.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
  286. package/dist/{renderer-tRi3KNoG.mjs → renderer-_J9JcCMR.mjs} +5 -5
  287. package/dist/{renderer-tRi3KNoG.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
  288. package/dist/renderer-dCqxd5N2.mjs +5 -0
  289. package/dist/{renderer-CcmxR6Fy.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
  290. package/dist/{renderer-CcmxR6Fy.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
  291. package/dist/renderer-lhjmE-Fp.mjs +5 -0
  292. package/dist/{renderer-TiaHrU5z.mjs → renderer-mDBoz0zT.mjs} +5 -5
  293. package/dist/{renderer-TiaHrU5z.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
  294. package/dist/{renderer-smP1F57W.mjs → renderer-pn52dzZz.mjs} +4 -4
  295. package/dist/{renderer-smP1F57W.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
  296. package/dist/renderer-u9cmBuvM.mjs +5 -0
  297. package/dist/{renderer-CNpq7rL-.mjs → renderer-uER8kn7f.mjs} +3 -3
  298. package/dist/{renderer-CNpq7rL-.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
  299. package/dist/{renderer-sMFJtt_H.mjs → renderer-uzU6dsdR.mjs} +3 -3
  300. package/dist/{renderer-sMFJtt_H.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
  301. package/dist/renderer-vH12jcpz.mjs +5 -0
  302. package/dist/{renderer-oBgCEqaM.mjs → renderer-yNWYqvvq.mjs} +4 -4
  303. package/dist/{renderer-oBgCEqaM.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
  304. package/dist/{renderer-Dy1xQOTu.mjs → renderer-zLi2qFGT.mjs} +4 -4
  305. package/dist/{renderer-Dy1xQOTu.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
  306. package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +4 -4
  307. package/dist/{renderers-CP8CFWDs-DWRjjeUg.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
  308. package/dist/sam/index.d.mts +3 -3
  309. package/dist/sam/index.mjs +1 -1
  310. package/dist/signals/index.d.mts +7 -7
  311. package/dist/signals/index.mjs +8 -8
  312. package/dist/{signals-BfJ1aqpT.mjs → signals-tiho_9fp.mjs} +4 -4
  313. package/dist/{signals-BfJ1aqpT.mjs.map → signals-tiho_9fp.mjs.map} +1 -1
  314. package/dist/{src-BU6vm9sP-DFJ3phW0.mjs → src-BU6vm9sP-DdTHmCr4.mjs} +3 -3
  315. package/dist/{src-BU6vm9sP-DFJ3phW0.mjs.map → src-BU6vm9sP-DdTHmCr4.mjs.map} +1 -1
  316. package/dist/{src-D7M8VTzv.mjs → src-DrP7fGJX.mjs} +41 -16
  317. package/dist/{src-D7M8VTzv.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
  318. package/dist/storage/index.d.mts +206 -0
  319. package/dist/storage/index.d.mts.map +1 -0
  320. package/dist/storage/index.mjs +3 -0
  321. package/package.json +67 -59
  322. package/dist/audio-afTBdB3U.d.mts.map +0 -1
  323. package/dist/cloud-COid1Ipa.mjs.map +0 -1
  324. package/dist/dist-B-OPY7Cs.mjs.map +0 -1
  325. package/dist/dist-BSqeChht.mjs.map +0 -1
  326. package/dist/index-BNClElng.d.mts.map +0 -1
  327. package/dist/index-CTv9ZieD.d.mts.map +0 -1
  328. package/dist/index-CdCrae-I.d.mts.map +0 -1
  329. package/dist/index-Fliv2Z-w.d.mts.map +0 -1
  330. package/dist/index-gOVtTm-P.d.mts.map +0 -1
  331. package/dist/preview-BUtt481A.mjs.map +0 -1
  332. package/dist/preview-engine/chunk-5SLBE2FX.mjs +0 -1
  333. package/dist/preview-engine/chunk-74J4DJQA.mjs +0 -1
  334. package/dist/preview-engine/chunk-KIPXBOYG.mjs +0 -1974
  335. package/dist/preview-engine/chunk-P4Y3PMJF.mjs +0 -1
  336. package/dist/preview-engine/chunk-SE2C623Z.mjs +0 -5
  337. package/dist/preview-engine/chunk-UKZVUYB6.mjs +0 -483
  338. package/dist/preview-engine/renderers-PSBTV2DO.mjs +0 -228
  339. package/dist/preview-engine/renderers-TEKHQHCL.mjs +0 -1
  340. package/dist/preview-engine/renderers-U3RLYFCN.mjs +0 -1
  341. package/dist/preview-engine/renderers-V5HM6PZ2.mjs +0 -1
  342. package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +0 -1
  343. package/dist/program-Cvv_nb9T.mjs.map +0 -1
  344. package/dist/renderer--RJepuOy.mjs +0 -5
  345. package/dist/renderer-B1U6YRRV.d.mts +0 -117
  346. package/dist/renderer-B1U6YRRV.d.mts.map +0 -1
  347. package/dist/renderer-B4NFnaty.mjs +0 -5
  348. package/dist/renderer-B6g4ts0e.mjs +0 -5
  349. package/dist/renderer-BGoAr-tl.mjs +0 -5
  350. package/dist/renderer-BSOdBgdE.mjs +0 -5
  351. package/dist/renderer-BU6O0fpM.mjs +0 -5
  352. package/dist/renderer-BZ97iidG.mjs +0 -5
  353. package/dist/renderer-B_Klh1VT.mjs +0 -5
  354. package/dist/renderer-BaWQM1y-.mjs +0 -5
  355. package/dist/renderer-Bc0jvAj0.mjs +0 -5
  356. package/dist/renderer-Bd-NuU3M.mjs +0 -3
  357. package/dist/renderer-Bm077kZ6.mjs +0 -5
  358. package/dist/renderer-BtzE_e_Y.mjs +0 -5
  359. package/dist/renderer-C225eCAo.mjs +0 -5
  360. package/dist/renderer-CC4fhNup.mjs +0 -3
  361. package/dist/renderer-CLXdR4vz.mjs +0 -5
  362. package/dist/renderer-CszM8B3C.mjs +0 -5
  363. package/dist/renderer-Ctp8ZYfk.mjs +0 -5
  364. package/dist/renderer-CxQdSp8I.mjs +0 -5
  365. package/dist/renderer-D3YbHjRG.mjs.map +0 -1
  366. package/dist/renderer-D4GMRtDd.mjs +0 -6
  367. package/dist/renderer-DEsGIvTZ.mjs +0 -5
  368. package/dist/renderer-DIaUQ0EP.mjs +0 -5
  369. package/dist/renderer-DLjqcNzQ.mjs +0 -5
  370. package/dist/renderer-DMuQZa51.mjs +0 -5
  371. package/dist/renderer-DOgi2aF2.mjs +0 -5
  372. package/dist/renderer-DSh7cvi4.mjs +0 -5
  373. package/dist/renderer-DV1LVBBP.mjs +0 -5
  374. package/dist/renderer-DaLy1dFA.mjs.map +0 -1
  375. package/dist/renderer-Dhrj2bJz.mjs +0 -5
  376. package/dist/renderer-DoFUu1R4.mjs +0 -5
  377. package/dist/renderer-DsydX3cx.mjs +0 -5
  378. package/dist/renderer-DxVSoeYi.mjs +0 -5
  379. package/dist/renderer-Nc9bHb0n.mjs +0 -5
  380. package/dist/renderer-TFaSD2Db.mjs +0 -5
  381. package/dist/renderer-Z61ctppe.mjs +0 -5
  382. package/dist/renderer-awXf3sNS.mjs +0 -5
  383. package/dist/renderer-cHT28oYI.mjs +0 -5
  384. package/dist/renderer-g7Y3bFot.mjs +0 -5
  385. package/dist/renderer-qVv0OzVc.mjs +0 -5
  386. /package/dist/{chunk-W71TSjRM.mjs → chunk-DOL2i2sR.mjs} +0 -0
  387. /package/dist/{renderer-B6rZUBwE.mjs → renderer-Co2YqWX0.mjs} +0 -0
@@ -1,5 +1,5 @@
1
- import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-W71TSjRM.mjs";
2
- import { $t as limitGradientStops, Et as emojiPresentation, Ht as gradientStopsToOklab, Xt as isSignal, Zt as isValueSignal, dn as parseCssGradient, un as parseCssColor } from "./dist-Bf2_efYP.mjs";
1
+ import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-DOL2i2sR.mjs";
2
+ import { $t as limitGradientStops, Et as emojiPresentation, Ht as gradientStopsToOklab, Xt as isSignal, Zt as isValueSignal, dn as parseCssGradient, un as parseCssColor } from "./dist-C8XSqfTx.mjs";
3
3
  import { ALL_FORMATS, AudioBufferSink, CanvasSink, FilePathSource, Input, UrlSource, VideoSampleSink } from "mediabunny";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
@@ -1537,15 +1537,15 @@ var SignalRegistry = class {
1537
1537
  res.lastProcessedFrame = cacheFrame;
1538
1538
  res.lastFingerprint = fingerprint;
1539
1539
  if (isSamplesArray(rawSamples) && rawSamples.length > 0) {
1540
- const flat = new Float32Array(numSamples);
1540
+ const flat$1 = new Float32Array(numSamples);
1541
1541
  const total = rawSamples.length;
1542
1542
  const srcFps = Number(normalizedSd?.fps) || 24;
1543
1543
  for (let i = 0; i < numSamples; i++) {
1544
1544
  const t = elapsedTime + i / sampleRate;
1545
1545
  const sIdx = Math.min(total - 1, Math.max(0, Math.round(t * srcFps)));
1546
- flat[i] = Number(rawSamples[sIdx]) || 0;
1546
+ flat$1[i] = Number(rawSamples[sIdx]) || 0;
1547
1547
  }
1548
- device.queue.writeBuffer(res.buffer, 0, flat);
1548
+ device.queue.writeBuffer(res.buffer, 0, flat$1);
1549
1549
  } else if (normalizedSd?.type === "generator" && (normalizedSd.customWGSL || normalizedSd.fnBody)) {
1550
1550
  const signalEncoder = device.createCommandEncoder({ label: `signal_1d_encoder_${nodeId}` });
1551
1551
  this.dispatch1DGenerator(device, signalEncoder, res, elapsedTime, duration$2, normalizedSd, numSamples, sampleRate, frame, fps);
@@ -1560,8 +1560,8 @@ var SignalRegistry = class {
1560
1560
  device.queue.submit([signalEncoder.finish()]);
1561
1561
  } else {
1562
1562
  const val = Number(normalizedSd?.offset ?? 0);
1563
- const flat = new Float32Array(numSamples).fill(val);
1564
- device.queue.writeBuffer(res.buffer, 0, flat);
1563
+ const flat$1 = new Float32Array(numSamples).fill(val);
1564
+ device.queue.writeBuffer(res.buffer, 0, flat$1);
1565
1565
  }
1566
1566
  } else if (normalizedSd?.type === "signal_math") {
1567
1567
  const sigAId = normalizedSd.signalA?.nodeId ?? `${nodeId}_a`;
@@ -1582,8 +1582,8 @@ var SignalRegistry = class {
1582
1582
  device.queue.submit([signalEncoder.finish()]);
1583
1583
  } else {
1584
1584
  const val = Number(normalizedSd?.offset ?? 0);
1585
- const flat = new Float32Array(numSamples).fill(val);
1586
- device.queue.writeBuffer(res.buffer, 0, flat);
1585
+ const flat$1 = new Float32Array(numSamples).fill(val);
1586
+ device.queue.writeBuffer(res.buffer, 0, flat$1);
1587
1587
  }
1588
1588
  return res.buffer;
1589
1589
  }
@@ -1649,7 +1649,7 @@ var SignalRegistry = class {
1649
1649
  device.queue.submit([signalEncoder.finish()]);
1650
1650
  return res.textureView;
1651
1651
  } else if (isSamplesArray(rawSamples) && rawSamples.length > 0) {
1652
- const flat = new Float32Array(targetWidth * targetHeight * 4);
1652
+ const flat$1 = new Float32Array(targetWidth * targetHeight * 4);
1653
1653
  const total = rawSamples.length;
1654
1654
  const baseTime = frame !== void 0 && fps !== void 0 && fps > 0 ? frame / fps : elapsedTime;
1655
1655
  for (let i = 0; i < targetWidth; i++) {
@@ -1659,13 +1659,13 @@ var SignalRegistry = class {
1659
1659
  const val = Number(rawSamples[sIdx]) || 0;
1660
1660
  for (let row = 0; row < targetHeight; row++) {
1661
1661
  const idx = (row * targetWidth + i) * 4;
1662
- flat[idx] = val;
1663
- flat[idx + 1] = val;
1664
- flat[idx + 2] = val;
1665
- flat[idx + 3] = val;
1662
+ flat$1[idx] = val;
1663
+ flat$1[idx + 1] = val;
1664
+ flat$1[idx + 2] = val;
1665
+ flat$1[idx + 3] = val;
1666
1666
  }
1667
1667
  }
1668
- const halfFlat = encodeFloat32ToFloat16(flat);
1668
+ const halfFlat = encodeFloat32ToFloat16(flat$1);
1669
1669
  device.queue.writeTexture({ texture: res.texture }, halfFlat, {
1670
1670
  bytesPerRow: targetWidth * 8,
1671
1671
  rowsPerImage: targetHeight
@@ -1691,14 +1691,14 @@ var SignalRegistry = class {
1691
1691
  device.queue.submit([signalEncoder.finish()]);
1692
1692
  } else {
1693
1693
  const val = Number(normalizedSd?.offset ?? 0);
1694
- const flat = new Float32Array(targetWidth * targetHeight * 4);
1694
+ const flat$1 = new Float32Array(targetWidth * targetHeight * 4);
1695
1695
  for (let i = 0; i < targetWidth * targetHeight; i++) {
1696
- flat[i * 4] = val;
1697
- flat[i * 4 + 1] = val;
1698
- flat[i * 4 + 2] = val;
1699
- flat[i * 4 + 3] = 1;
1696
+ flat$1[i * 4] = val;
1697
+ flat$1[i * 4 + 1] = val;
1698
+ flat$1[i * 4 + 2] = val;
1699
+ flat$1[i * 4 + 3] = 1;
1700
1700
  }
1701
- const halfFlat = encodeFloat32ToFloat16(flat);
1701
+ const halfFlat = encodeFloat32ToFloat16(flat$1);
1702
1702
  device.queue.writeTexture({ texture: res.texture }, halfFlat, {
1703
1703
  bytesPerRow: targetWidth * 8,
1704
1704
  rowsPerImage: targetHeight
@@ -16210,6 +16210,20 @@ var WebGPUAudioProcessor = class WebGPUAudioProcessor$1 {
16210
16210
  const cacheKey = `${renderId ?? "global"}_${nodeId}_${activeSignalsKey}_${stateFloatCount}`;
16211
16211
  return WebGPUAudioProcessor$1.devicePipelineCache.get(device)?.get(cacheKey);
16212
16212
  }
16213
+ /**
16214
+ * Zeroes the state every effect keeps for `renderId` (delay lines,
16215
+ * envelopes, reverb tails), as on its first use. Pipelines and buffers
16216
+ * stay, so a mix that starts again doesn't compile them again.
16217
+ */
16218
+ static resetState(renderId, device) {
16219
+ const cache = WebGPUAudioProcessor$1.devicePipelineCache.get(device);
16220
+ if (!cache) return;
16221
+ const prefix = `${renderId}_`;
16222
+ for (const [key, cached$1] of cache.entries()) {
16223
+ if (!key.startsWith(prefix)) continue;
16224
+ device.queue.writeBuffer(cached$1.stateBuffer, 0, new Float32Array(cached$1.stateBuffer.size / 4));
16225
+ }
16226
+ }
16213
16227
  static clearCache(renderId, device) {
16214
16228
  if (!device) return;
16215
16229
  const cache = WebGPUAudioProcessor$1.devicePipelineCache.get(device);
@@ -17106,10 +17120,13 @@ async function toLocalPath(src) {
17106
17120
  );
17107
17121
  return resolve$1$1(src);
17108
17122
  }
17109
- /** In the browser, local paths are served through the dev server's `/@fs`. */
17123
+ /**
17124
+ * In the browser (a page or a worker), local paths are served through the
17125
+ * dev server's `/@fs`.
17126
+ */
17110
17127
  function resolveInputUrl(url, isNode) {
17111
17128
  let resolvedUrl = url;
17112
- if (!isNode && typeof window !== "undefined") {
17129
+ if (!isNode && typeof location !== "undefined") {
17113
17130
  if (resolvedUrl.startsWith("file://")) resolvedUrl = resolvedUrl.slice(7);
17114
17131
  if (resolvedUrl.startsWith("/") && !resolvedUrl.startsWith("/@fs/") && !resolvedUrl.startsWith("/api/")) resolvedUrl = "/@fs" + resolvedUrl;
17115
17132
  }
@@ -17138,6 +17155,15 @@ async function assertReadableFile(filePath, url) {
17138
17155
  }
17139
17156
  var InputStore = class {
17140
17157
  store = /* @__PURE__ */ new Map();
17158
+ resolveMissing;
17159
+ /**
17160
+ * Reads local files that are missing from disk from the URL `resolver`
17161
+ * gives, with HTTP range requests, so a clip pinned on a bucket plays
17162
+ * without being downloaded. Unset with no argument.
17163
+ */
17164
+ setMissingMediaResolver(resolver) {
17165
+ this.resolveMissing = resolver;
17166
+ }
17141
17167
  async acquire(url) {
17142
17168
  if (!url) throw new Error("Cannot acquire Input for empty URL");
17143
17169
  const resolvedUrl = resolveInputUrl(url, isNodeRuntime());
@@ -17146,10 +17172,8 @@ var InputStore = class {
17146
17172
  const promise = (async () => {
17147
17173
  const filePath = await toLocalPath(resolvedUrl.startsWith("file:") ? resolvedUrl : safeDecode(resolvedUrl));
17148
17174
  let source;
17149
- if (filePath !== null) {
17150
- await assertReadableFile(filePath, url);
17151
- source = new FilePathSource(filePath);
17152
- } else source = new UrlSource(resolvedUrl);
17175
+ if (filePath !== null) source = await this.localSource(filePath, url);
17176
+ else source = new UrlSource(resolvedUrl);
17153
17177
  return new Input({
17154
17178
  source,
17155
17179
  formats: ALL_FORMATS
@@ -17180,6 +17204,16 @@ var InputStore = class {
17180
17204
  } catch (_) {}
17181
17205
  }, () => {});
17182
17206
  }
17207
+ async localSource(filePath, url) {
17208
+ try {
17209
+ await assertReadableFile(filePath, url);
17210
+ return new FilePathSource(filePath);
17211
+ } catch (err) {
17212
+ const remote = await this.resolveMissing?.(filePath);
17213
+ if (remote) return new UrlSource(remote);
17214
+ throw err;
17215
+ }
17216
+ }
17183
17217
  release(url) {
17184
17218
  if (!url) return;
17185
17219
  const resolvedUrl = resolveInputUrl(url, isNodeRuntime());
@@ -27956,6 +27990,118 @@ var ClipStack = class {
27956
27990
  }
27957
27991
  };
27958
27992
  /**
27993
+ * Filling compound paths: every subpath is a contour, contours nest, and a
27994
+ * region is filled by SVG's nonzero rule (the windings of the contours
27995
+ * around it, summed, are not zero). Each filled contour is triangulated with
27996
+ * its direct children as holes, so a map's coastlines and islands, a
27997
+ * letter's counter or a ring fill as drawn instead of being bridged into
27998
+ * one polygon.
27999
+ *
28000
+ * Contours are taken not to cross each other (each pair is nested or
28001
+ * apart), which holds for maps, glyphs and icons; a contour that crosses
28002
+ * itself is still triangulated as well as earcut can.
28003
+ */
28004
+ function signedArea(points) {
28005
+ let area = 0;
28006
+ for (let i = 0; i < points.length; i++) {
28007
+ const a = points[i];
28008
+ const b = points[(i + 1) % points.length];
28009
+ area += a.x * b.y - b.x * a.y;
28010
+ }
28011
+ return area / 2;
28012
+ }
28013
+ function flat(points) {
28014
+ const out = [];
28015
+ for (const p of points) out.push(p.x, p.y);
28016
+ return out;
28017
+ }
28018
+ function boxOf(points) {
28019
+ const box = {
28020
+ x0: Infinity,
28021
+ y0: Infinity,
28022
+ x1: -Infinity,
28023
+ y1: -Infinity
28024
+ };
28025
+ for (const p of points) {
28026
+ box.x0 = Math.min(box.x0, p.x);
28027
+ box.y0 = Math.min(box.y0, p.y);
28028
+ box.x1 = Math.max(box.x1, p.x);
28029
+ box.y1 = Math.max(box.y1, p.y);
28030
+ }
28031
+ return box;
28032
+ }
28033
+ /** The centroid of the contour's largest triangle: inside it, away from its edges. */
28034
+ function insidePoint(points) {
28035
+ const coords = flat(points);
28036
+ const tris = earcut(coords);
28037
+ const at = (k) => ({
28038
+ x: coords[k * 2],
28039
+ y: coords[k * 2 + 1]
28040
+ });
28041
+ let best = -1;
28042
+ let inside = points[0];
28043
+ for (let i = 0; i < tris.length; i += 3) {
28044
+ const a = at(tris[i]);
28045
+ const b = at(tris[i + 1]);
28046
+ const c = at(tris[i + 2]);
28047
+ const size = Math.abs((b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y));
28048
+ if (size > best) {
28049
+ best = size;
28050
+ inside = {
28051
+ x: (a.x + b.x + c.x) / 3,
28052
+ y: (a.y + b.y + c.y) / 3
28053
+ };
28054
+ }
28055
+ }
28056
+ return inside;
28057
+ }
28058
+ function contains(points, p) {
28059
+ let inside = false;
28060
+ for (let i = 0, j = points.length - 1; i < points.length; j = i++) {
28061
+ const a = points[i];
28062
+ const b = points[j];
28063
+ if (a.y > p.y !== b.y > p.y && p.x < (b.x - a.x) * (p.y - a.y) / (b.y - a.y) + a.x) inside = !inside;
28064
+ }
28065
+ return inside;
28066
+ }
28067
+ const encloses = (p, c) => p.box.x0 <= c.box.x0 && p.box.y0 <= c.box.y0 && p.box.x1 >= c.box.x1 && p.box.y1 >= c.box.y1 && contains(p.points, c.inside);
28068
+ /** Triangles filling closed `contours` by the nonzero rule, as flat [x, y, …] vertices. */
28069
+ function fillContours(contours) {
28070
+ const all = contours.map((points) => ({
28071
+ points,
28072
+ area: signedArea(points),
28073
+ box: boxOf(points),
28074
+ inside: insidePoint(points),
28075
+ parent: -1,
28076
+ winding: 0
28077
+ }));
28078
+ const order = all.map((_, i) => i).sort((a, b) => Math.abs(all[b].area) - Math.abs(all[a].area));
28079
+ order.forEach((ci, rank) => {
28080
+ const c = all[ci];
28081
+ for (let r = rank - 1; r >= 0; r--) {
28082
+ const pi = order[r];
28083
+ if (encloses(all[pi], c)) {
28084
+ c.parent = pi;
28085
+ break;
28086
+ }
28087
+ }
28088
+ c.winding = (c.parent >= 0 ? all[c.parent].winding : 0) + Math.sign(c.area);
28089
+ });
28090
+ const out = [];
28091
+ all.forEach((c, ci) => {
28092
+ if (c.winding === 0) return;
28093
+ const coords = flat(c.points);
28094
+ const holeStarts = [];
28095
+ for (const h of all) {
28096
+ if (h.parent !== ci) continue;
28097
+ holeStarts.push(coords.length / 2);
28098
+ for (const p of h.points) coords.push(p.x, p.y);
28099
+ }
28100
+ for (const k of earcut(coords, holeStarts)) out.push(coords[k * 2], coords[k * 2 + 1]);
28101
+ });
28102
+ return new Float32Array(out);
28103
+ }
28104
+ /**
27959
28105
  * Sample a cubic bezier curve into linear segments.
27960
28106
  */
27961
28107
  function sampleCubicBezier(p0, p1, p2, p3, steps = 24) {
@@ -28063,8 +28209,26 @@ function sampleSvgArc(p0, rxIn, ryIn, rotationDeg, largeArc, sweep, p1) {
28063
28209
  * Parse an SVG path string (M, L, H, V, C, S, Q, T, A, Z) into line segments.
28064
28210
  */
28065
28211
  function parseSvgPathToSegments(d) {
28212
+ return parseSvgPath(d).segments;
28213
+ }
28214
+ /**
28215
+ * The path's segments, and for each the subpath it belongs to (every M
28216
+ * starts one): fills need to know where each subpath begins.
28217
+ */
28218
+ function parseSvgPath(d) {
28066
28219
  const segments = [];
28067
- if (!d || typeof d !== "string") return segments;
28220
+ const subpaths = [];
28221
+ if (!d || typeof d !== "string") return {
28222
+ segments,
28223
+ subpaths
28224
+ };
28225
+ let subpath = -1;
28226
+ const emit = (...added) => {
28227
+ for (const seg of added) {
28228
+ segments.push(seg);
28229
+ subpaths.push(subpath);
28230
+ }
28231
+ };
28068
28232
  const tokens = [];
28069
28233
  const regex = /([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi;
28070
28234
  let match;
@@ -28110,9 +28274,10 @@ function parseSvgPathToSegments(d) {
28110
28274
  x,
28111
28275
  y
28112
28276
  };
28277
+ subpath++;
28113
28278
  first = false;
28114
28279
  } else {
28115
- segments.push({
28280
+ emit({
28116
28281
  p0: current,
28117
28282
  p1: {
28118
28283
  x,
@@ -28137,7 +28302,7 @@ function parseSvgPathToSegments(d) {
28137
28302
  x += current.x;
28138
28303
  y += current.y;
28139
28304
  }
28140
- segments.push({
28305
+ emit({
28141
28306
  p0: current,
28142
28307
  p1: {
28143
28308
  x,
@@ -28160,7 +28325,7 @@ function parseSvgPathToSegments(d) {
28160
28325
  x,
28161
28326
  y: current.y
28162
28327
  };
28163
- segments.push({
28328
+ emit({
28164
28329
  p0: current,
28165
28330
  p1: next
28166
28331
  });
@@ -28177,7 +28342,7 @@ function parseSvgPathToSegments(d) {
28177
28342
  x: current.x,
28178
28343
  y
28179
28344
  };
28180
- segments.push({
28345
+ emit({
28181
28346
  p0: current,
28182
28347
  p1: next
28183
28348
  });
@@ -28214,7 +28379,7 @@ function parseSvgPathToSegments(d) {
28214
28379
  x,
28215
28380
  y
28216
28381
  };
28217
- segments.push(...sampleCubicBezier(current, p1, p2, end));
28382
+ emit(...sampleCubicBezier(current, p1, p2, end));
28218
28383
  current = end;
28219
28384
  lastCubicControl = p2;
28220
28385
  }
@@ -28249,7 +28414,7 @@ function parseSvgPathToSegments(d) {
28249
28414
  x,
28250
28415
  y
28251
28416
  };
28252
- segments.push(...sampleCubicBezier(current, p1, p2, end));
28417
+ emit(...sampleCubicBezier(current, p1, p2, end));
28253
28418
  current = end;
28254
28419
  lastCubicControl = p2;
28255
28420
  }
@@ -28275,7 +28440,7 @@ function parseSvgPathToSegments(d) {
28275
28440
  x,
28276
28441
  y
28277
28442
  };
28278
- segments.push(...sampleQuadraticBezier(current, p1, end));
28443
+ emit(...sampleQuadraticBezier(current, p1, end));
28279
28444
  current = end;
28280
28445
  lastQuadControl = p1;
28281
28446
  }
@@ -28302,7 +28467,7 @@ function parseSvgPathToSegments(d) {
28302
28467
  x,
28303
28468
  y
28304
28469
  };
28305
- segments.push(...sampleQuadraticBezier(current, p1, end));
28470
+ emit(...sampleQuadraticBezier(current, p1, end));
28306
28471
  current = end;
28307
28472
  lastQuadControl = p1;
28308
28473
  }
@@ -28325,14 +28490,14 @@ function parseSvgPathToSegments(d) {
28325
28490
  x,
28326
28491
  y
28327
28492
  };
28328
- segments.push(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));
28493
+ emit(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));
28329
28494
  current = end;
28330
28495
  }
28331
28496
  lastCubicControl = null;
28332
28497
  lastQuadControl = null;
28333
28498
  break;
28334
28499
  case "Z":
28335
- if (Math.hypot(current.x - subpathStart.x, current.y - subpathStart.y) > 1e-5) segments.push({
28500
+ if (Math.hypot(current.x - subpathStart.x, current.y - subpathStart.y) > 1e-5) emit({
28336
28501
  p0: current,
28337
28502
  p1: subpathStart
28338
28503
  });
@@ -28343,7 +28508,10 @@ function parseSvgPathToSegments(d) {
28343
28508
  default: break;
28344
28509
  }
28345
28510
  }
28346
- return segments;
28511
+ return {
28512
+ segments,
28513
+ subpaths
28514
+ };
28347
28515
  }
28348
28516
  /**
28349
28517
  * Trim linear path segments using arc-length parameterization.
@@ -28404,6 +28572,19 @@ function trimPathSegments(segments, trimStart, trimEnd, trimOffset = 0) {
28404
28572
  }
28405
28573
  }
28406
28574
  /**
28575
+ * A dash pattern as SVG's `stroke-dasharray` writes it ("16 12", "4,8") or as
28576
+ * numbers, ready for {@link dashPathSegments}. Following SVG, an odd list is
28577
+ * repeated to make it even, and a negative or unreadable entry, or a pattern
28578
+ * of zero length, means a solid stroke (`undefined`).
28579
+ */
28580
+ function parseDashArray(value) {
28581
+ if (value === void 0) return void 0;
28582
+ const parts = typeof value === "string" ? value.trim().split(/[\s,]+/).filter(Boolean).map(Number) : [...value];
28583
+ if (parts.length === 0 || parts.some((n) => !Number.isFinite(n) || n < 0)) return void 0;
28584
+ if (parts.reduce((sum, n) => sum + n, 0) <= 0) return void 0;
28585
+ return parts.length % 2 === 1 ? [...parts, ...parts] : parts;
28586
+ }
28587
+ /**
28407
28588
  * Apply dash patterns along linear path segments.
28408
28589
  */
28409
28590
  function dashPathSegments(segments, dashArray, dashOffset = 0) {
@@ -28615,6 +28796,44 @@ function triangulatePolygon(contour) {
28615
28796
  if (rem.length === 3) triangles.push(rem[0], rem[1], rem[2]);
28616
28797
  return triangles;
28617
28798
  }
28799
+ /** A path's subpaths as closed point lists, degenerate ones dropped. */
28800
+ function pathContours(d) {
28801
+ const bySubpath = /* @__PURE__ */ new Map();
28802
+ const { segments, subpaths } = parseSvgPath(d);
28803
+ segments.forEach((seg, i) => {
28804
+ const id = subpaths[i] ?? 0;
28805
+ let points = bySubpath.get(id);
28806
+ if (!points) {
28807
+ points = [seg.p0];
28808
+ bySubpath.set(id, points);
28809
+ }
28810
+ points.push(seg.p1);
28811
+ });
28812
+ const contours = [];
28813
+ for (const points of bySubpath.values()) {
28814
+ const first = points[0];
28815
+ const last = points[points.length - 1];
28816
+ if (Math.hypot(last.x - first.x, last.y - first.y) < 1e-5) points.pop();
28817
+ if (points.length >= 3 && Math.abs(signedArea(points)) > 1e-6) contours.push(points);
28818
+ }
28819
+ return contours;
28820
+ }
28821
+ /** Path fills are redrawn every frame from the same data: keep the last few. */
28822
+ const PATH_FILL_CACHE = 64;
28823
+ const pathFills = /* @__PURE__ */ new Map();
28824
+ /** Triangles filling path `d` by the nonzero rule (see {@link fillContours}). */
28825
+ function cachedPathFill(d) {
28826
+ const hit = pathFills.get(d);
28827
+ if (hit) {
28828
+ pathFills.delete(d);
28829
+ pathFills.set(d, hit);
28830
+ return hit;
28831
+ }
28832
+ const tris = fillContours(pathContours(d));
28833
+ pathFills.set(d, tris);
28834
+ if (pathFills.size > PATH_FILL_CACHE) pathFills.delete(pathFills.keys().next().value);
28835
+ return tris;
28836
+ }
28618
28837
  /**
28619
28838
  * Triangulate a shape geometry into a flat Float32Array of 2D vertex pairs [x, y, x, y, ...].
28620
28839
  */
@@ -28739,19 +28958,16 @@ function triangulateShape(config$1) {
28739
28958
  yBotHead
28740
28959
  ]);
28741
28960
  }
28742
- if (shapeType === "path" && config$1.path) {
28743
- const segments = parseSvgPathToSegments(config$1.path);
28744
- if (segments.length === 0) return new Float32Array(0);
28745
- const tris = triangulatePolygon(segments.map((s) => s.p0));
28746
- const out = new Float32Array(tris.length * 2);
28747
- for (let i = 0; i < tris.length; i++) {
28748
- out[i * 2] = tris[i].x;
28749
- out[i * 2 + 1] = tris[i].y;
28750
- }
28751
- return out;
28752
- }
28961
+ if (shapeType === "path" && config$1.path) return cachedPathFill(config$1.path);
28753
28962
  return new Float32Array(0);
28754
28963
  }
28964
+ /**
28965
+ * Strokes a path in one instanced draw: each instance is one straight
28966
+ * segment (p0, p1), expanded by the vertex shader into a quad that covers it
28967
+ * plus half the stroke width and 2 px of antialiasing; the fragment shader
28968
+ * shades the segment's capped distance field. Everything shared by the
28969
+ * path (transform, colour, width, cap) is in the uniforms.
28970
+ */
28755
28971
  const pathWgsl = `
28756
28972
  struct Uniforms {
28757
28973
  transformCol0 : vec4<f32>,
@@ -28760,8 +28976,6 @@ struct Uniforms {
28760
28976
  params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
28761
28977
  color : vec4<f32>,
28762
28978
  style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
28763
- p0 : vec2<f32>,
28764
- p1 : vec2<f32>,
28765
28979
  };
28766
28980
 
28767
28981
  @group(0) @binding(0) var<uniform> u : Uniforms;
@@ -28769,17 +28983,30 @@ struct Uniforms {
28769
28983
  struct VSOut {
28770
28984
  @builtin(position) pos : vec4<f32>,
28771
28985
  @location(0) localPos : vec2<f32>,
28986
+ @location(1) @interpolate(flat) p0 : vec2<f32>,
28987
+ @location(2) @interpolate(flat) p1 : vec2<f32>,
28772
28988
  };
28773
28989
 
28774
- @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
28990
+ @vertex fn vs(@builtin(vertex_index) corner : u32, @location(0) seg : vec4<f32>) -> VSOut {
28991
+ let p0 = seg.xy;
28992
+ let p1 = seg.zw;
28993
+ let d = p1 - p0;
28994
+ let len = max(length(d), 1e-6);
28995
+ let padding = u.params.w * 0.5 + 2.0;
28996
+ let along = (d / len) * padding;
28997
+ let across = vec2<f32>(-along.y, along.x);
28998
+ // Triangle strip: p0 −along ∓across, then p1 +along ∓across.
28999
+ let atEnd = corner >= 2u;
29000
+ let side = select(-1.0, 1.0, (corner & 1u) == 1u);
29001
+ let xy = select(p0 - along, p1 + along, atEnd) + across * side;
29002
+
28775
29003
  let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
28776
29004
  let p = transform * vec3<f32>(xy, 1.0);
28777
-
28778
29005
  let surfaceSize = u.params.yz;
28779
29006
  let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
28780
29007
  let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
28781
29008
 
28782
- return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
29009
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy, p0, p1);
28783
29010
  }
28784
29011
 
28785
29012
  fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
@@ -28791,10 +29018,10 @@ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capTy
28791
29018
  let dir = ba / len;
28792
29019
  let normal = vec2<f32>(-dir.y, dir.x);
28793
29020
  let pa = p - a;
28794
-
29021
+
28795
29022
  let proj = dot(pa, dir);
28796
29023
  let perp = abs(dot(pa, normal));
28797
-
29024
+
28798
29025
  if (capType > 0.5 && capType < 1.5) {
28799
29026
  // Butt cap: terminates strictly at endpoints a and b
28800
29027
  let dx = max(-proj, proj - len);
@@ -28818,15 +29045,15 @@ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capTy
28818
29045
 
28819
29046
  @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
28820
29047
  let radius = u.params.w * 0.5;
28821
- let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
28822
-
29048
+ let d = sdSegmentWithCap(in.localPos, in.p0, in.p1, radius, u.style.x);
29049
+
28823
29050
  let fw = max(fwidth(d), 1e-5);
28824
29051
  let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
28825
29052
  let alpha = u.color.a * u.params.x * edgeAlpha;
28826
29053
  if (alpha <= 0.0) {
28827
29054
  discard;
28828
29055
  }
28829
-
29056
+
28830
29057
  return vec4<f32>(u.color.rgb * alpha, alpha);
28831
29058
  }
28832
29059
  `;
@@ -28883,127 +29110,111 @@ function createVec2Pipeline(device, options) {
28883
29110
  primitive: { topology: options.topology }
28884
29111
  });
28885
29112
  }
29113
+ /** A straight segment's two ends, the instance the stroke shader expands into a quad. */
29114
+ const SEGMENT_FLOATS = 4;
28886
29115
  var PathPipeline = class {
28887
29116
  device;
28888
29117
  pipeline;
28889
29118
  maxPipeline;
28890
29119
  uniformLayout;
28891
29120
  uniformPool;
28892
- vertexPool;
29121
+ segmentPool;
28893
29122
  uniformBindGroupCache = new UniformBindGroupCache();
28894
- scratchData = new Float32Array(28);
29123
+ scratchData = new Float32Array(24);
28895
29124
  constructor(device, format) {
28896
29125
  this.device = device;
28897
29126
  this.uniformPool = new BufferPool(4096, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);
28898
- this.vertexPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);
29127
+ this.segmentPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);
28899
29128
  const module$1 = device.createShaderModule({
28900
29129
  label: "path.wgsl",
28901
29130
  code: pathWgsl
28902
29131
  });
28903
29132
  this.uniformLayout = createUniformLayout(device);
28904
- this.pipeline = createVec2Pipeline(device, {
28905
- label: "PathPipeline",
28906
- module: module$1,
28907
- uniformLayout: this.uniformLayout,
28908
- format,
28909
- topology: "triangle-strip"
29133
+ const create = (label, blend) => device.createRenderPipeline({
29134
+ label,
29135
+ layout: device.createPipelineLayout({ bindGroupLayouts: [this.uniformLayout] }),
29136
+ vertex: {
29137
+ module: module$1,
29138
+ entryPoint: "vs",
29139
+ buffers: [{
29140
+ arrayStride: SEGMENT_FLOATS * 4,
29141
+ stepMode: "instance",
29142
+ attributes: [{
29143
+ shaderLocation: 0,
29144
+ offset: 0,
29145
+ format: "float32x4"
29146
+ }]
29147
+ }]
29148
+ },
29149
+ fragment: {
29150
+ module: module$1,
29151
+ entryPoint: "fs",
29152
+ targets: [{
29153
+ format,
29154
+ blend
29155
+ }]
29156
+ },
29157
+ primitive: { topology: "triangle-strip" }
28910
29158
  });
28911
- this.maxPipeline = createVec2Pipeline(device, {
28912
- label: "PathPipeline.max",
28913
- module: module$1,
28914
- uniformLayout: this.uniformLayout,
28915
- format,
28916
- topology: "triangle-strip",
28917
- blend: {
28918
- color: {
28919
- srcFactor: "one",
28920
- dstFactor: "one",
28921
- operation: "max"
28922
- },
28923
- alpha: {
28924
- srcFactor: "one",
28925
- dstFactor: "one",
28926
- operation: "max"
28927
- }
29159
+ this.pipeline = create("PathPipeline", PREMULTIPLIED_OVER);
29160
+ this.maxPipeline = create("PathPipeline.max", {
29161
+ color: {
29162
+ srcFactor: "one",
29163
+ dstFactor: "one",
29164
+ operation: "max"
29165
+ },
29166
+ alpha: {
29167
+ srcFactor: "one",
29168
+ dstFactor: "one",
29169
+ operation: "max"
28928
29170
  }
28929
29171
  });
28930
29172
  }
28931
29173
  resetPools() {
28932
29174
  this.uniformPool.reset();
28933
- this.vertexPool.reset();
29175
+ this.segmentPool.reset();
28934
29176
  }
28935
29177
  drawPath(pass, transformStack, pathStr, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {
28936
- let segments = parseSvgPathToSegments(pathStr);
28937
- if (segments.length === 0) return;
28938
- if (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) segments = trimPathSegments(segments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);
28939
- if (opts?.strokeDashArray && opts.strokeDashArray.length > 0) segments = dashPathSegments(segments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);
28940
- if (segments.length === 0) return;
28941
- const c = parseColor(color);
28942
- const opacity = opts?.opacity ?? 1;
28943
- let capType = 0;
28944
- if (opts?.strokeLineCap === "butt") capType = 1;
28945
- else if (opts?.strokeLineCap === "square") capType = 2;
28946
- for (const segment of segments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);
29178
+ this.drawSegments(pass, transformStack, parseSvgPathToSegments(pathStr), color, strokeWidth, surfaceWidth, surfaceHeight, opts);
28947
29179
  }
28948
29180
  drawSegments(pass, transformStack, segments, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {
28949
29181
  let activeSegments = segments;
28950
29182
  if (opts?.trimStart !== void 0 || opts?.trimEnd !== void 0 || opts?.trimOffset !== void 0) activeSegments = trimPathSegments(activeSegments, opts.trimStart ?? 0, opts.trimEnd ?? 1, opts.trimOffset ?? 0);
28951
29183
  if (opts?.strokeDashArray && opts.strokeDashArray.length > 0) activeSegments = dashPathSegments(activeSegments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);
28952
- if (activeSegments.length === 0) return;
29184
+ const ends = new Float32Array(activeSegments.length * SEGMENT_FLOATS);
29185
+ let count = 0;
29186
+ for (const { p0, p1 } of activeSegments) {
29187
+ if (Math.hypot(p1.x - p0.x, p1.y - p0.y) < 1e-6) continue;
29188
+ const at = count++ * SEGMENT_FLOATS;
29189
+ ends[at] = p0.x;
29190
+ ends[at + 1] = p0.y;
29191
+ ends[at + 2] = p1.x;
29192
+ ends[at + 3] = p1.y;
29193
+ }
29194
+ if (count === 0) return;
28953
29195
  const c = parseColor(color);
28954
- const opacity = opts?.opacity ?? 1;
28955
- let capType = 0;
28956
- if (opts?.strokeLineCap === "butt") capType = 1;
28957
- else if (opts?.strokeLineCap === "square") capType = 2;
28958
- for (const segment of activeSegments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);
28959
- }
28960
- drawSegment(pass, transformStack, p0, p1, color, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts) {
28961
29196
  const data = this.scratchData;
28962
- transformStack.packIntoBuffer(data, opacity, surfaceWidth, surfaceHeight, opts?.transform);
29197
+ transformStack.packIntoBuffer(data, opts?.opacity ?? 1, surfaceWidth, surfaceHeight, opts?.transform);
28963
29198
  data[15] = strokeWidth;
28964
- data[16] = color.r;
28965
- data[17] = color.g;
28966
- data[18] = color.b;
28967
- data[19] = color.a;
28968
- data[20] = capType;
29199
+ data[16] = c.r;
29200
+ data[17] = c.g;
29201
+ data[18] = c.b;
29202
+ data[19] = c.a;
29203
+ data[20] = opts?.strokeLineCap === "butt" ? 1 : opts?.strokeLineCap === "square" ? 2 : 0;
28969
29204
  data[21] = 0;
28970
29205
  data[22] = 0;
28971
29206
  data[23] = 0;
28972
- data[24] = p0.x;
28973
- data[25] = p0.y;
28974
- data[26] = p1.x;
28975
- data[27] = p1.y;
28976
29207
  const uniformBuffer = this.uniformPool.getBuffer(this.device, data);
28977
- const dx = p1.x - p0.x;
28978
- const dy = p1.y - p0.y;
28979
- const len = Math.sqrt(dx * dx + dy * dy);
28980
- if (len < 1e-6) return;
28981
- const padding = strokeWidth * .5 + 2;
28982
- const nx = dx / len * padding;
28983
- const ny = dy / len * padding;
28984
- const px = -ny;
28985
- const py = nx;
28986
- const vertexData = new Float32Array([
28987
- p0.x - nx - px,
28988
- p0.y - ny - py,
28989
- p0.x - nx + px,
28990
- p0.y - ny + py,
28991
- p1.x + nx - px,
28992
- p1.y + ny - py,
28993
- p1.x + nx + px,
28994
- p1.y + ny + py
28995
- ]);
28996
- const vertexBuffer = this.vertexPool.getBuffer(this.device, vertexData);
28997
- const pipeline = opts?.blendMode === "max" ? this.maxPipeline : this.pipeline;
28998
- pass.setPipeline(pipeline);
28999
- const uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);
29000
- pass.setBindGroup(0, uniformBindGroup);
29001
- pass.setVertexBuffer(0, vertexBuffer);
29002
- pass.draw(4);
29208
+ const segmentBuffer = this.segmentPool.getBuffer(this.device, ends.subarray(0, count * SEGMENT_FLOATS));
29209
+ const useMax = opts?.blendMode === "max";
29210
+ pass.setPipeline(useMax ? this.maxPipeline : this.pipeline);
29211
+ pass.setBindGroup(0, this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer));
29212
+ pass.setVertexBuffer(0, segmentBuffer);
29213
+ pass.draw(4, count);
29003
29214
  }
29004
29215
  destroy() {
29005
29216
  this.uniformPool.destroy();
29006
- this.vertexPool.destroy();
29217
+ this.segmentPool.destroy();
29007
29218
  this.uniformBindGroupCache.destroy();
29008
29219
  }
29009
29220
  };
@@ -41574,5 +41785,5 @@ var NodeSurfaceProvider = class {
41574
41785
  if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();
41575
41786
 
41576
41787
  //#endregion
41577
- export { probeVideoSize as $, TextCursorConfigSchema as $t, emojiGraphemes as A, evaluateTypewriterState as An, AudioSpectrumTypographySchema as At, jointMatrices as B, signalRegistry as Bn, LineSpacingDynamicsSchema as Bt, drawGifNode as C, evaluateCubicBezier as Cn, AETextAnimatorSchema as Ct, drawSignalNode as D, evaluateSelectorCombination as Dn, AnchorPresetSchema as Dt, drawParagraphNode as E, evaluateMarqueeOffset as En, AnchorGroupingSchema as Et, getPrimitiveGeometry as F, getShuffledOrder as Fn, ExpressionSelectorSchema as Ft, measureMaxCaptionHeight as G, SelectorShapeSchema as Gt, loadModel3D as H, ParticleDissolveConfigSchema as Ht, getRegisteredFontSource as I, parseSvgPathToCubicBeziers as In, ExtendedGlyphPropertiesSchema as It, parseFBX as J, SkewPropertiesSchema as Jt, mediaDecoderCache as K, SelectorUnitsSchema as Kt, getRenderer2D as L, sampleAudioSpectrumScale as Ln, GlyphAnchorGroupingSchema as Lt, fitSpansToText as M, generateArcLengthLUT as Mn, CubicBezierSegmentSchema as Mt, generateExtrudedTextGeometry as N, generatePathSegments as Nn, DynamicStrokePropertiesSchema as Nt, drawSvgNode as O, evaluateSkewMatrix as On, AnimatableGlyphPropsSchema as Ot, getHeadlessFontPath as P, getScramblePool as Pn, EnhancedTextNodeSchema as Pt, poseNodes as Q, TextAnimatorBuilder as Qt, initHeadlessWebGPU as R, sampleCurveGeometry as Rn, GlyphAnchorPointSchema as Rt, drawCaptionNode as S, ellipseToCubicBeziers as Sn, resolveEnvironment as St, drawLottieNode as T, evaluateExpressionSelector as Tn, AdvancedTextAnimatorSchema as Tt, loadOBJ as U, SelectorBasedOnSchema as Ut, loadFBX as V, waveToCubicBeziers as Vn, LongShadowConfigSchema as Vt, lutStore as W, SelectorModeSchema as Wt, parseOBJ as X, SpringPhysicsSchema as Xt, parseMTL as Y, Spatial3DPropertiesSchema as Yt, parseSvgPathToSegments as Z, TextAnchorConfigSchema as Zt, buildShapeSvgPath as _, computeAnchorPivotOffset as _n, Matrix4Math as _t, GlassPipeline as a, TextScrambleConfigSchema as an, spansText as at, colorMatrixWgsl as b, deterministicWigglyNoise as bn, linearRgb as bt, Renderer2D as c, TextWigglySelectorSchema as cn, trackAudioPitch as ct, ScreenSpaceRelightPipeline as d, VariableFontAxesSchema as dn, resolveMediaSourceUrl as dt, TextCursorStyleSchema as en, registerHeadlessFont as et, ShadowPipeline as f, Vec2Schema as fn, Camera3D as ft, WebGPUAudioProcessor as g, buildWGSLSignalFn as gn, MAX_LIGHTS as gt, SlugPipeline as h, buildPathLUT as hn, Light3D as ht, EffectPipeline as i, TextRangeSelectorSchema as in, shaderStore as it, ensureDevice as j, evaluateVolumetricFormation as jn, ChromaticGlitchConfigSchema as jt, drawVideoNode as k, evaluateSpringProgress as kn, AudioSignalComputePipeline as kt, Renderer3D as l, TypewriterAnimatorSchema as ln, transformScale as lt, SlugGeometry as m, VolumetricFormationModeSchema as mn, LIGHT_UNIFORM_SIZE_BYTES as mt, AudioLatentTrackCache as n, TextPathOptionsSchema as nn, sampleMorphWeights as nt, MotionBlurPipeline as o, TextSelectorSchema as on, srtLoader as ot, SlugFontCache as p, VolumetricFormationConfigSchema as pn, ENVIRONMENT_PRESETS as pt, parseColor as q, SignalRegistry as qt, AudioMeshDeformPipeline as r, TextPathSourceSchema as rn, setRegisteredFontSource as rt, NodeSurfaceProvider as s, TextSignalSelectorSchema as sn, textureCache as st, AudioLatentEngine as t, TextPathBuilder as tn, resolveTextSpans as tt, SSAOPipeline as u, TypingCadenceSchema as un, GetFontAssetUrl as ut, clearAllVideoCache as v, computeLineLeadingDisplacement as vn, Path3D as vt, drawImageNode as w, evaluateCubicBezierDerivative as wn, AdvancedTextAnimatorBuilder as wt, describeGpu as x, distanceToCurveParameter as xn, parseColorToRgb as xt, clearHeadlessFonts as y, computeRangeSelectorWeight as yn, Vector3Math as yt, inputStore as z, samplePathChainGeometry as zn, KineticMarqueeConfigSchema as zt };
41578
- //# sourceMappingURL=dist-B-OPY7Cs.mjs.map
41788
+ export { poseNodes as $, TextAnchorConfigSchema as $t, emojiGraphemes as A, evaluateSkewMatrix as An, AnimatableGlyphPropsSchema as At, jointMatrices as B, sampleCurveGeometry as Bn, GlyphAnchorPointSchema as Bt, drawGifNode as C, distanceToCurveParameter as Cn, parseColorToRgb as Ct, drawSignalNode as D, evaluateExpressionSelector as Dn, AdvancedTextAnimatorSchema as Dt, drawParagraphNode as E, evaluateCubicBezierDerivative as En, AdvancedTextAnimatorBuilder as Et, getPrimitiveGeometry as F, generatePathSegments as Fn, DynamicStrokePropertiesSchema as Ft, measureMaxCaptionHeight as G, SelectorBasedOnSchema as Gt, loadModel3D as H, signalRegistry as Hn, LineSpacingDynamicsSchema as Ht, getRegisteredFontSource as I, getScramblePool as In, EnhancedTextNodeSchema as It, parseDashArray as J, SelectorUnitsSchema as Jt, mediaDecoderCache as K, SelectorModeSchema as Kt, getRenderer2D as L, getShuffledOrder as Ln, ExpressionSelectorSchema as Lt, fitSpansToText as M, evaluateTypewriterState as Mn, AudioSpectrumTypographySchema as Mt, generateExtrudedTextGeometry as N, evaluateVolumetricFormation as Nn, ChromaticGlitchConfigSchema as Nt, drawSvgNode as O, evaluateMarqueeOffset as On, AnchorGroupingSchema as Ot, getHeadlessFontPath as P, generateArcLengthLUT as Pn, CubicBezierSegmentSchema as Pt, parseSvgPathToSegments as Q, SpringPhysicsSchema as Qt, initHeadlessWebGPU as R, parseSvgPathToCubicBeziers as Rn, ExtendedGlyphPropertiesSchema as Rt, drawCaptionNode as S, deterministicWigglyNoise as Sn, linearRgb as St, drawLottieNode as T, evaluateCubicBezier as Tn, AETextAnimatorSchema as Tt, loadOBJ as U, waveToCubicBeziers as Un, LongShadowConfigSchema as Ut, loadFBX as V, samplePathChainGeometry as Vn, KineticMarqueeConfigSchema as Vt, lutStore as W, ParticleDissolveConfigSchema as Wt, parseMTL as X, SkewPropertiesSchema as Xt, parseFBX as Y, SignalRegistry as Yt, parseOBJ as Z, Spatial3DPropertiesSchema as Zt, buildShapeSvgPath as _, buildPathLUT as _n, Light3D as _t, GlassPipeline as a, TextPathSourceSchema as an, setRegisteredFontSource as at, colorMatrixWgsl as b, computeLineLeadingDisplacement as bn, Path3D as bt, Renderer2D as c, TextSelectorSchema as cn, srtLoader as ct, ScreenSpaceRelightPipeline as d, TypewriterAnimatorSchema as dn, transformScale as dt, TextAnimatorBuilder as en, probeVideoSize as et, ShadowPipeline as f, TypingCadenceSchema as fn, GetFontAssetUrl as ft, WebGPUAudioProcessor as g, VolumetricFormationModeSchema as gn, LIGHT_UNIFORM_SIZE_BYTES as gt, SlugPipeline as h, VolumetricFormationConfigSchema as hn, ENVIRONMENT_PRESETS as ht, EffectPipeline as i, TextPathOptionsSchema as in, sampleMorphWeights as it, ensureDevice as j, evaluateSpringProgress as jn, AudioSignalComputePipeline as jt, drawVideoNode as k, evaluateSelectorCombination as kn, AnchorPresetSchema as kt, Renderer3D as l, TextSignalSelectorSchema as ln, textureCache as lt, SlugGeometry as m, Vec2Schema as mn, Camera3D as mt, AudioLatentTrackCache as n, TextCursorStyleSchema as nn, resolveInputUrl as nt, MotionBlurPipeline as o, TextRangeSelectorSchema as on, shaderStore as ot, SlugFontCache as p, VariableFontAxesSchema as pn, resolveMediaSourceUrl as pt, parseColor as q, SelectorShapeSchema as qt, AudioMeshDeformPipeline as r, TextPathBuilder as rn, resolveTextSpans as rt, NodeSurfaceProvider as s, TextScrambleConfigSchema as sn, spansText as st, AudioLatentEngine as t, TextCursorConfigSchema as tn, registerHeadlessFont as tt, SSAOPipeline as u, TextWigglySelectorSchema as un, trackAudioPitch as ut, clearAllVideoCache as v, buildWGSLSignalFn as vn, MAX_LIGHTS as vt, drawImageNode as w, ellipseToCubicBeziers as wn, resolveEnvironment as wt, describeGpu as x, computeRangeSelectorWeight as xn, Vector3Math as xt, clearHeadlessFonts as y, computeAnchorPivotOffset as yn, Matrix4Math as yt, inputStore as z, sampleAudioSpectrumScale as zn, GlyphAnchorGroupingSchema as zt };
41789
+ //# sourceMappingURL=dist-DtPPPsZV.mjs.map