framefields 2.13.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 (285) hide show
  1. package/README.md +9 -4
  2. package/dist/audio/index.d.mts +3 -3
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CHV33Od9.d.mts → audio-C4B9p_yq.d.mts} +2 -2
  5. package/dist/{audio-CHV33Od9.d.mts.map → audio-C4B9p_yq.d.mts.map} +1 -1
  6. package/dist/{audio-DHzLQ_RG.mjs → audio-DIvi6hTD.mjs} +3 -3
  7. package/dist/{audio-DHzLQ_RG.mjs.map → audio-DIvi6hTD.mjs.map} +1 -1
  8. package/dist/cli/check-worker.mjs +43 -43
  9. package/dist/cloud/index.d.mts.map +1 -1
  10. package/dist/components/index.d.mts +7 -7
  11. package/dist/components/index.mjs +42 -42
  12. package/dist/{dist-CUNvNDS3.mjs → dist-CCrYOkcc.mjs} +18 -4
  13. package/dist/dist-CCrYOkcc.mjs.map +1 -0
  14. package/dist/{dist-D3BeAZ7X.mjs → dist-DtPPPsZV.mjs} +314 -137
  15. package/dist/dist-DtPPPsZV.mjs.map +1 -0
  16. package/dist/effects/index.d.mts +3 -3
  17. package/dist/effects/index.mjs +34 -34
  18. package/dist/{effects-BiDgCK1L.mjs → effects-B-L3rLs6.mjs} +2 -2
  19. package/dist/{effects-BiDgCK1L.mjs.map → effects-B-L3rLs6.mjs.map} +1 -1
  20. package/dist/fonts/index.mjs +2 -2
  21. package/dist/{fonts-DeDPWdvJ.mjs → fonts-k5ll8NTE.mjs} +2 -2
  22. package/dist/{fonts-DeDPWdvJ.mjs.map → fonts-k5ll8NTE.mjs.map} +1 -1
  23. package/dist/{gpu-CWjgql4C.mjs → gpu-D2HT3KcE.mjs} +2 -2
  24. package/dist/{gpu-CWjgql4C.mjs.map → gpu-D2HT3KcE.mjs.map} +1 -1
  25. package/dist/{index-D68eGFNE.d.mts → index-B08eSpaI.d.mts} +2 -2
  26. package/dist/{index-D68eGFNE.d.mts.map → index-B08eSpaI.d.mts.map} +1 -1
  27. package/dist/index-BFTtXosj.d.mts.map +1 -1
  28. package/dist/{index-YB9j9KUx.d.mts → index-BGlaws7-.d.mts} +2 -2
  29. package/dist/{index-YB9j9KUx.d.mts.map → index-BGlaws7-.d.mts.map} +1 -1
  30. package/dist/{index-Dibc_xpC.d.mts → index-ByhlTwxh.d.mts} +3 -3
  31. package/dist/{index-Dibc_xpC.d.mts.map → index-ByhlTwxh.d.mts.map} +1 -1
  32. package/dist/{index-X2u96TEo.d.mts → index-C2yaponf.d.mts} +2 -3
  33. package/dist/index-C2yaponf.d.mts.map +1 -0
  34. package/dist/{index-E2IXX0Cz.d.mts → index-CtKUQ2VG.d.mts} +4 -4
  35. package/dist/{index-E2IXX0Cz.d.mts.map → index-CtKUQ2VG.d.mts.map} +1 -1
  36. package/dist/index.d.mts +7 -7
  37. package/dist/index.mjs +49 -49
  38. package/dist/preview/index.d.mts +1 -1
  39. package/dist/preview/index.mjs +10 -10
  40. package/dist/preview-engine/audio.mjs +1 -1
  41. package/dist/preview-engine/{chunk-IEEV5RB3.mjs → chunk-3C2XT64C.mjs} +1 -1
  42. package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
  43. package/dist/preview-engine/{chunk-77WWW75O.mjs → chunk-5ZS46EFB.mjs} +1 -1
  44. package/dist/preview-engine/{chunk-4P3MMJWD.mjs → chunk-FZ4RD7HV.mjs} +1 -1
  45. package/dist/preview-engine/{chunk-UFPA36D2.mjs → chunk-N3XTDAL6.mjs} +18 -18
  46. package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
  47. package/dist/preview-engine/{chunk-SMHEMYCV.mjs → chunk-UBY2UYEL.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-XYCR3STG.mjs → chunk-XCPRRMMW.mjs} +31 -31
  49. package/dist/preview-engine/components.mjs +1 -1
  50. package/dist/preview-engine/effects.mjs +1 -1
  51. package/dist/preview-engine/framefields.mjs +1 -1
  52. package/dist/preview-engine/player.mjs +1 -1
  53. package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +228 -0
  54. package/dist/preview-engine/signals.mjs +1 -1
  55. package/dist/{preview-PDz7o2xg.mjs → preview-lHH8Tv4j.mjs} +3 -3
  56. package/dist/{preview-PDz7o2xg.mjs.map → preview-lHH8Tv4j.mjs.map} +1 -1
  57. package/dist/{program-Bn6ko_I4.mjs → program-BfiB9ttP.mjs} +15 -2
  58. package/dist/program-BfiB9ttP.mjs.map +1 -0
  59. package/dist/renderer/index.d.mts +1 -1
  60. package/dist/renderer/index.mjs +2 -2
  61. package/dist/renderer-0rLmztAv.mjs +5 -0
  62. package/dist/{renderer-BjgFpwVK.mjs → renderer-4nsuReW2.mjs} +3 -3
  63. package/dist/{renderer-BjgFpwVK.mjs.map → renderer-4nsuReW2.mjs.map} +1 -1
  64. package/dist/{renderer-DJPZs_zV.mjs → renderer-7xQmXXMH.mjs} +3 -3
  65. package/dist/{renderer-DJPZs_zV.mjs.map → renderer-7xQmXXMH.mjs.map} +1 -1
  66. package/dist/renderer-B0pjOXFY.mjs +5 -0
  67. package/dist/{renderer-C_1eqfI0.mjs → renderer-B10HDC13.mjs} +3 -3
  68. package/dist/{renderer-C_1eqfI0.mjs.map → renderer-B10HDC13.mjs.map} +1 -1
  69. package/dist/{renderer-DRal7Goa.mjs → renderer-B2IUPjhw.mjs} +3 -3
  70. package/dist/{renderer-DRal7Goa.mjs.map → renderer-B2IUPjhw.mjs.map} +1 -1
  71. package/dist/{renderer-Br8km655.mjs → renderer-B3_GddgJ.mjs} +2 -2
  72. package/dist/{renderer-Br8km655.mjs.map → renderer-B3_GddgJ.mjs.map} +1 -1
  73. package/dist/{renderer-DOZPZTxe.mjs → renderer-B3un4Pdi.mjs} +3 -3
  74. package/dist/{renderer-DOZPZTxe.mjs.map → renderer-B3un4Pdi.mjs.map} +1 -1
  75. package/dist/{renderer-Dp5ChuOs.mjs → renderer-B6bK9rXm.mjs} +2 -2
  76. package/dist/{renderer-Dp5ChuOs.mjs.map → renderer-B6bK9rXm.mjs.map} +1 -1
  77. package/dist/renderer-B7J13reL.mjs +5 -0
  78. package/dist/{renderer-Nnu32rqg.mjs → renderer-BEhZiOT4.mjs} +2 -2
  79. package/dist/{renderer-Nnu32rqg.mjs.map → renderer-BEhZiOT4.mjs.map} +1 -1
  80. package/dist/{renderer-C7m7Yxgc.mjs → renderer-BEuXJY-C.mjs} +3 -3
  81. package/dist/{renderer-C7m7Yxgc.mjs.map → renderer-BEuXJY-C.mjs.map} +1 -1
  82. package/dist/{renderer-D-fzEZfX.mjs → renderer-BGchUBW_.mjs} +2 -2
  83. package/dist/{renderer-D-fzEZfX.mjs.map → renderer-BGchUBW_.mjs.map} +1 -1
  84. package/dist/{renderer--Q0pM9Vh.mjs → renderer-BIKkxw_Z.mjs} +3 -3
  85. package/dist/{renderer--Q0pM9Vh.mjs.map → renderer-BIKkxw_Z.mjs.map} +1 -1
  86. package/dist/{renderer-Dz6P-rPI.mjs → renderer-BM19iK8v.mjs} +2 -2
  87. package/dist/{renderer-Dz6P-rPI.mjs.map → renderer-BM19iK8v.mjs.map} +1 -1
  88. package/dist/{renderer-CE4535aW.mjs → renderer-BOlHW3Mi.mjs} +2 -2
  89. package/dist/{renderer-CE4535aW.mjs.map → renderer-BOlHW3Mi.mjs.map} +1 -1
  90. package/dist/renderer-BPGIKGgl.mjs +5 -0
  91. package/dist/{renderer-C9dqx3U7.mjs → renderer-BTwuM9u-.mjs} +3 -3
  92. package/dist/{renderer-C9dqx3U7.mjs.map → renderer-BTwuM9u-.mjs.map} +1 -1
  93. package/dist/{renderer-BqUAyzCZ.mjs → renderer-BZMh2io2.mjs} +2 -2
  94. package/dist/{renderer-BqUAyzCZ.mjs.map → renderer-BZMh2io2.mjs.map} +1 -1
  95. package/dist/{renderer-BZgJj8Cl.mjs → renderer-BZX932Lj.mjs} +2 -2
  96. package/dist/{renderer-BZgJj8Cl.mjs.map → renderer-BZX932Lj.mjs.map} +1 -1
  97. package/dist/{renderer-BgjPbgbn.mjs → renderer-BhcTYhaP.mjs} +3 -3
  98. package/dist/{renderer-BgjPbgbn.mjs.map → renderer-BhcTYhaP.mjs.map} +1 -1
  99. package/dist/{renderer-CyUiXLRa.mjs → renderer-BmyFfvVA.mjs} +3 -3
  100. package/dist/{renderer-CyUiXLRa.mjs.map → renderer-BmyFfvVA.mjs.map} +1 -1
  101. package/dist/{renderer-opVuiAQR.mjs → renderer-BrEeUw7T.mjs} +2 -2
  102. package/dist/{renderer-opVuiAQR.mjs.map → renderer-BrEeUw7T.mjs.map} +1 -1
  103. package/dist/{renderer-CMnlgAGs.mjs → renderer-BsrKj6Td.mjs} +2 -2
  104. package/dist/{renderer-CMnlgAGs.mjs.map → renderer-BsrKj6Td.mjs.map} +1 -1
  105. package/dist/renderer-Bv-Artj1.mjs +5 -0
  106. package/dist/{renderer-BO_wuUKA.mjs → renderer-BvBqTAtk.mjs} +3 -3
  107. package/dist/{renderer-BO_wuUKA.mjs.map → renderer-BvBqTAtk.mjs.map} +1 -1
  108. package/dist/renderer-BvLjbhcL.mjs +5 -0
  109. package/dist/{renderer-D8gN7aqk.mjs → renderer-Bw-_GZVw.mjs} +3 -3
  110. package/dist/{renderer-D8gN7aqk.mjs.map → renderer-Bw-_GZVw.mjs.map} +1 -1
  111. package/dist/{renderer-LXhEPCmy.mjs → renderer-Bw0O--gW.mjs} +3 -3
  112. package/dist/{renderer-LXhEPCmy.mjs.map → renderer-Bw0O--gW.mjs.map} +1 -1
  113. package/dist/renderer-By6awWaf.mjs +5 -0
  114. package/dist/renderer-C0rvsz7m.mjs +5 -0
  115. package/dist/{renderer-SJyp9-62.mjs → renderer-C4hd6Cqi.mjs} +2 -2
  116. package/dist/{renderer-SJyp9-62.mjs.map → renderer-C4hd6Cqi.mjs.map} +1 -1
  117. package/dist/{renderer-CnL8Cmmr.mjs → renderer-C64_B8It.mjs} +2 -2
  118. package/dist/{renderer-FPiLBwj5.mjs → renderer-C98XwEIr.mjs} +2 -2
  119. package/dist/{renderer-FPiLBwj5.mjs.map → renderer-C98XwEIr.mjs.map} +1 -1
  120. package/dist/{renderer-CL-vyXgX.mjs → renderer-CC22Djgi.mjs} +3 -3
  121. package/dist/{renderer-CL-vyXgX.mjs.map → renderer-CC22Djgi.mjs.map} +1 -1
  122. package/dist/renderer-CDgud_HB.mjs +5 -0
  123. package/dist/renderer-CDiRF3bG.mjs +6 -0
  124. package/dist/{renderer-CwlY8Tb-.mjs → renderer-CHCRcCKw.mjs} +2 -2
  125. package/dist/{renderer-CwlY8Tb-.mjs.map → renderer-CHCRcCKw.mjs.map} +1 -1
  126. package/dist/renderer-CIIEQd4B.mjs +5 -0
  127. package/dist/renderer-CJblwOA9.mjs +5 -0
  128. package/dist/renderer-CNMOXtXE.mjs +5 -0
  129. package/dist/{renderer-S9tVGneU.mjs → renderer-CO4NGvAh.mjs} +69 -69
  130. package/dist/{renderer-S9tVGneU.mjs.map → renderer-CO4NGvAh.mjs.map} +1 -1
  131. package/dist/{renderer-CxSFvKd1.mjs → renderer-CO9vE3sd.mjs} +2 -2
  132. package/dist/{renderer-CxSFvKd1.mjs.map → renderer-CO9vE3sd.mjs.map} +1 -1
  133. package/dist/renderer-COeSeNGg.mjs +5 -0
  134. package/dist/{renderer-NBMmvqWl.mjs → renderer-CQ4h8n7p.mjs} +3 -3
  135. package/dist/{renderer-NBMmvqWl.mjs.map → renderer-CQ4h8n7p.mjs.map} +1 -1
  136. package/dist/{renderer-BsMZ5Iaq.mjs → renderer-CRhEGqW4.mjs} +3 -3
  137. package/dist/{renderer-BsMZ5Iaq.mjs.map → renderer-CRhEGqW4.mjs.map} +1 -1
  138. package/dist/{renderer-RzkU_O1i.mjs → renderer-CSu_vYPn.mjs} +3 -3
  139. package/dist/{renderer-RzkU_O1i.mjs.map → renderer-CSu_vYPn.mjs.map} +1 -1
  140. package/dist/{renderer-BCTUqJG7.mjs → renderer-CU6WT5jW.mjs} +3 -3
  141. package/dist/{renderer-BCTUqJG7.mjs.map → renderer-CU6WT5jW.mjs.map} +1 -1
  142. package/dist/renderer-CUfElmtZ.mjs +5 -0
  143. package/dist/{renderer-Cp_HOmp7.mjs → renderer-CXrnzihz.mjs} +3 -3
  144. package/dist/{renderer-Cp_HOmp7.mjs.map → renderer-CXrnzihz.mjs.map} +1 -1
  145. package/dist/renderer-CYh2lFoJ.mjs +5 -0
  146. package/dist/renderer-CYtVZYMH.mjs +5 -0
  147. package/dist/{renderer-C-GTxnfv.mjs → renderer-CdXBRdFf.mjs} +2 -2
  148. package/dist/{renderer-C-GTxnfv.mjs.map → renderer-CdXBRdFf.mjs.map} +1 -1
  149. package/dist/{renderer-puQhVfDS.mjs → renderer-Cfx_FCSf.mjs} +3 -3
  150. package/dist/{renderer-puQhVfDS.mjs.map → renderer-Cfx_FCSf.mjs.map} +1 -1
  151. package/dist/renderer-CjxZlkjb.mjs +5 -0
  152. package/dist/{renderer-DGb_wgTW.mjs → renderer-CkTehyRX.mjs} +3 -3
  153. package/dist/{renderer-DGb_wgTW.mjs.map → renderer-CkTehyRX.mjs.map} +1 -1
  154. package/dist/{renderer-CgK7Q1G8.mjs → renderer-CldjJmRR.mjs} +2 -2
  155. package/dist/{renderer-BlZgyBSo.mjs → renderer-CoC64eam.mjs} +3 -3
  156. package/dist/{renderer-BlZgyBSo.mjs.map → renderer-CoC64eam.mjs.map} +1 -1
  157. package/dist/renderer-Cpd6TvTC.mjs +5 -0
  158. package/dist/{renderer-BPOh9x5X.mjs → renderer-Cv9CKKWG.mjs} +2 -2
  159. package/dist/{renderer-BPOh9x5X.mjs.map → renderer-Cv9CKKWG.mjs.map} +1 -1
  160. package/dist/{renderer-Cu3iKMSJ.mjs → renderer-D-mX1EVA.mjs} +3 -3
  161. package/dist/{renderer-Cu3iKMSJ.mjs.map → renderer-D-mX1EVA.mjs.map} +1 -1
  162. package/dist/{renderer-BMpmmYOq.mjs → renderer-D0h1hTOo.mjs} +2 -2
  163. package/dist/{renderer-BMpmmYOq.mjs.map → renderer-D0h1hTOo.mjs.map} +1 -1
  164. package/dist/{renderer-DpZballM.mjs → renderer-D0xM67cK.mjs} +2 -2
  165. package/dist/{renderer-DpZballM.mjs.map → renderer-D0xM67cK.mjs.map} +1 -1
  166. package/dist/renderer-D3ziOPhX.mjs +5 -0
  167. package/dist/{renderer-549d94qG.mjs → renderer-DCrKEVjb.mjs} +3 -3
  168. package/dist/{renderer-549d94qG.mjs.map → renderer-DCrKEVjb.mjs.map} +1 -1
  169. package/dist/renderer-DL-phtL5.mjs +5 -0
  170. package/dist/{renderer-CQFMyC_c.mjs → renderer-DNynPM6X.mjs} +2 -2
  171. package/dist/{renderer-CQFMyC_c.mjs.map → renderer-DNynPM6X.mjs.map} +1 -1
  172. package/dist/renderer-DSnmYnHg.mjs +5 -0
  173. package/dist/renderer-DUGfsT-E.mjs +5 -0
  174. package/dist/renderer-DW5af9x1.mjs +5 -0
  175. package/dist/{renderer-B-LUGB9h.mjs → renderer-DWYmJSrl.mjs} +2 -2
  176. package/dist/{renderer-B-LUGB9h.mjs.map → renderer-DWYmJSrl.mjs.map} +1 -1
  177. package/dist/renderer-DYMrol1t.mjs +5 -0
  178. package/dist/{renderer-CciiDHuU.mjs → renderer-DYeNNc_G.mjs} +3 -3
  179. package/dist/{renderer-CciiDHuU.mjs.map → renderer-DYeNNc_G.mjs.map} +1 -1
  180. package/dist/{renderer-CYwVNbUh.mjs → renderer-DYlx7VHo.mjs} +2 -2
  181. package/dist/{renderer-CYwVNbUh.mjs.map → renderer-DYlx7VHo.mjs.map} +1 -1
  182. package/dist/{renderer-CZ5mwBW1.mjs → renderer-D_m6Qbsi.mjs} +2 -2
  183. package/dist/{renderer-CZ5mwBW1.mjs.map → renderer-D_m6Qbsi.mjs.map} +1 -1
  184. package/dist/renderer-DekeUHaz.mjs +5 -0
  185. package/dist/{renderer-BKi6jDi_.mjs → renderer-DhGZ41hQ.mjs} +3 -3
  186. package/dist/{renderer-BKi6jDi_.mjs.map → renderer-DhGZ41hQ.mjs.map} +1 -1
  187. package/dist/{renderer-KgsVk9c6.mjs → renderer-DiZkZ0Pr.mjs} +3 -3
  188. package/dist/{renderer-KgsVk9c6.mjs.map → renderer-DiZkZ0Pr.mjs.map} +1 -1
  189. package/dist/{renderer-BtgqTg2K.mjs → renderer-Dm57W73p.mjs} +2 -2
  190. package/dist/renderer-Dt5uyJdZ.mjs +5 -0
  191. package/dist/{renderer-g9SstkTz.mjs → renderer-DtFZbE1j.mjs} +2 -2
  192. package/dist/{renderer-C1ctHdXl.mjs → renderer-DvHi_wXE.mjs} +3 -3
  193. package/dist/{renderer-C1ctHdXl.mjs.map → renderer-DvHi_wXE.mjs.map} +1 -1
  194. package/dist/{renderer-vll8LX0I.mjs → renderer-Dv_iRIyx.mjs} +17 -17
  195. package/dist/renderer-Dv_iRIyx.mjs.map +1 -0
  196. package/dist/renderer-DwLQAnaK.mjs +5 -0
  197. package/dist/{renderer-DXFJv_e6.mjs → renderer-DzON3wDZ.mjs} +3 -3
  198. package/dist/{renderer-DXFJv_e6.mjs.map → renderer-DzON3wDZ.mjs.map} +1 -1
  199. package/dist/{renderer-RAq3LnNy.mjs → renderer-GIlQ9lZq.mjs} +2 -2
  200. package/dist/{renderer-RAq3LnNy.mjs.map → renderer-GIlQ9lZq.mjs.map} +1 -1
  201. package/dist/{renderer-DwGlDNOV.mjs → renderer-HKv5cBdp.mjs} +2 -2
  202. package/dist/{renderer-DwGlDNOV.mjs.map → renderer-HKv5cBdp.mjs.map} +1 -1
  203. package/dist/renderer-IXQP2CWM.mjs +5 -0
  204. package/dist/renderer-K-Pkw63O.mjs +5 -0
  205. package/dist/renderer-MPw2KH9P.mjs +5 -0
  206. package/dist/{renderer-BUj7jE6t.mjs → renderer-QbSrnPZU.mjs} +3 -3
  207. package/dist/{renderer-BUj7jE6t.mjs.map → renderer-QbSrnPZU.mjs.map} +1 -1
  208. package/dist/renderer-RPu8RMav.mjs +5 -0
  209. package/dist/{renderer-dRXP2dJU.mjs → renderer-TfeohPxt.mjs} +3 -3
  210. package/dist/{renderer-dRXP2dJU.mjs.map → renderer-TfeohPxt.mjs.map} +1 -1
  211. package/dist/{renderer-CuPAQjDK.mjs → renderer-Y1kjtOto.mjs} +3 -3
  212. package/dist/{renderer-CuPAQjDK.mjs.map → renderer-Y1kjtOto.mjs.map} +1 -1
  213. package/dist/{renderer-BIieU9pY.mjs → renderer-YONlI6W-.mjs} +3 -3
  214. package/dist/{renderer-BIieU9pY.mjs.map → renderer-YONlI6W-.mjs.map} +1 -1
  215. package/dist/{renderer-45ifiDkn.mjs → renderer-_J9JcCMR.mjs} +3 -3
  216. package/dist/{renderer-45ifiDkn.mjs.map → renderer-_J9JcCMR.mjs.map} +1 -1
  217. package/dist/renderer-dCqxd5N2.mjs +5 -0
  218. package/dist/{renderer-aRk849b3.d.mts → renderer-fG8Jy8Rx.d.mts} +2 -2
  219. package/dist/{renderer-aRk849b3.d.mts.map → renderer-fG8Jy8Rx.d.mts.map} +1 -1
  220. package/dist/renderer-lhjmE-Fp.mjs +5 -0
  221. package/dist/{renderer-_54hiCq0.mjs → renderer-mDBoz0zT.mjs} +3 -3
  222. package/dist/{renderer-_54hiCq0.mjs.map → renderer-mDBoz0zT.mjs.map} +1 -1
  223. package/dist/{renderer-BHPgkoEL.mjs → renderer-pn52dzZz.mjs} +2 -2
  224. package/dist/{renderer-BHPgkoEL.mjs.map → renderer-pn52dzZz.mjs.map} +1 -1
  225. package/dist/renderer-u9cmBuvM.mjs +5 -0
  226. package/dist/{renderer-BPiWsrC2.mjs → renderer-uER8kn7f.mjs} +2 -2
  227. package/dist/{renderer-BPiWsrC2.mjs.map → renderer-uER8kn7f.mjs.map} +1 -1
  228. package/dist/{renderer-B5b-ehRb.mjs → renderer-uzU6dsdR.mjs} +2 -2
  229. package/dist/{renderer-B5b-ehRb.mjs.map → renderer-uzU6dsdR.mjs.map} +1 -1
  230. package/dist/renderer-vH12jcpz.mjs +5 -0
  231. package/dist/{renderer-DxB_OfLs.mjs → renderer-yNWYqvvq.mjs} +2 -2
  232. package/dist/{renderer-DxB_OfLs.mjs.map → renderer-yNWYqvvq.mjs.map} +1 -1
  233. package/dist/{renderer-dGEMVaZ3.mjs → renderer-zLi2qFGT.mjs} +2 -2
  234. package/dist/{renderer-dGEMVaZ3.mjs.map → renderer-zLi2qFGT.mjs.map} +1 -1
  235. package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs → renderers-CP8CFWDs-BufiCyn7.mjs} +2 -2
  236. package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs.map → renderers-CP8CFWDs-BufiCyn7.mjs.map} +1 -1
  237. package/dist/signals/index.d.mts +4 -4
  238. package/dist/signals/index.mjs +4 -4
  239. package/dist/{src-BzFGotRc.mjs → src-DrP7fGJX.mjs} +37 -12
  240. package/dist/{src-BzFGotRc.mjs.map → src-DrP7fGJX.mjs.map} +1 -1
  241. package/package.json +60 -60
  242. package/dist/dist-CUNvNDS3.mjs.map +0 -1
  243. package/dist/dist-D3BeAZ7X.mjs.map +0 -1
  244. package/dist/index-X2u96TEo.d.mts.map +0 -1
  245. package/dist/preview-engine/chunk-7M5LE6EM.mjs +0 -483
  246. package/dist/preview-engine/chunk-FRJPXWAG.mjs +0 -1
  247. package/dist/preview-engine/renderers-TTXTV4PC.mjs +0 -228
  248. package/dist/program-Bn6ko_I4.mjs.map +0 -1
  249. package/dist/renderer-1aSF5BmY.mjs +0 -5
  250. package/dist/renderer-B2e4Gr9u.mjs +0 -5
  251. package/dist/renderer-B6fz4j50.mjs +0 -5
  252. package/dist/renderer-BEftIYw-.mjs +0 -5
  253. package/dist/renderer-BHTnO-7e.mjs +0 -5
  254. package/dist/renderer-BMlnQqTO.mjs +0 -5
  255. package/dist/renderer-BOzcFezY.mjs +0 -5
  256. package/dist/renderer-BVbjJIKJ.mjs +0 -5
  257. package/dist/renderer-BXsHKf4k.mjs +0 -5
  258. package/dist/renderer-Bks49NVl.mjs +0 -5
  259. package/dist/renderer-C-t7qFKr.mjs +0 -5
  260. package/dist/renderer-C24n-6CX.mjs +0 -6
  261. package/dist/renderer-CCReX-7M.mjs +0 -5
  262. package/dist/renderer-CIxFQrAm.mjs +0 -5
  263. package/dist/renderer-CLHBMIqJ.mjs +0 -5
  264. package/dist/renderer-CMJKi-Ye.mjs +0 -5
  265. package/dist/renderer-C_H3mHZa.mjs +0 -5
  266. package/dist/renderer-CfkTdR5B.mjs +0 -5
  267. package/dist/renderer-CnhkXJ0R.mjs +0 -5
  268. package/dist/renderer-CqpyVsq_.mjs +0 -5
  269. package/dist/renderer-CtWgIpTE.mjs +0 -5
  270. package/dist/renderer-CyuKr5ca.mjs +0 -5
  271. package/dist/renderer-D9ON_1Hf.mjs +0 -5
  272. package/dist/renderer-DAnTgh4o.mjs +0 -5
  273. package/dist/renderer-DWgpivA3.mjs +0 -5
  274. package/dist/renderer-Dh_qNNwR.mjs +0 -5
  275. package/dist/renderer-DkCpXPMP.mjs +0 -5
  276. package/dist/renderer-Dre-6cDR.mjs +0 -5
  277. package/dist/renderer-Ds5z4_HX.mjs +0 -5
  278. package/dist/renderer-HGSCOMyP.mjs +0 -5
  279. package/dist/renderer-KMY8W-cJ.mjs +0 -5
  280. package/dist/renderer-R21YvXz3.mjs +0 -5
  281. package/dist/renderer-RtzCz37W.mjs +0 -5
  282. package/dist/renderer-iMrqAjix.mjs +0 -5
  283. package/dist/renderer-sMed1u1O.mjs +0 -5
  284. package/dist/renderer-tsAuo46l.mjs +0 -5
  285. package/dist/renderer-vll8LX0I.mjs.map +0 -1
@@ -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
@@ -27990,6 +27990,118 @@ var ClipStack = class {
27990
27990
  }
27991
27991
  };
27992
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
+ /**
27993
28105
  * Sample a cubic bezier curve into linear segments.
27994
28106
  */
27995
28107
  function sampleCubicBezier(p0, p1, p2, p3, steps = 24) {
@@ -28097,8 +28209,26 @@ function sampleSvgArc(p0, rxIn, ryIn, rotationDeg, largeArc, sweep, p1) {
28097
28209
  * Parse an SVG path string (M, L, H, V, C, S, Q, T, A, Z) into line segments.
28098
28210
  */
28099
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) {
28100
28219
  const segments = [];
28101
- 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
+ };
28102
28232
  const tokens = [];
28103
28233
  const regex = /([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi;
28104
28234
  let match;
@@ -28144,9 +28274,10 @@ function parseSvgPathToSegments(d) {
28144
28274
  x,
28145
28275
  y
28146
28276
  };
28277
+ subpath++;
28147
28278
  first = false;
28148
28279
  } else {
28149
- segments.push({
28280
+ emit({
28150
28281
  p0: current,
28151
28282
  p1: {
28152
28283
  x,
@@ -28171,7 +28302,7 @@ function parseSvgPathToSegments(d) {
28171
28302
  x += current.x;
28172
28303
  y += current.y;
28173
28304
  }
28174
- segments.push({
28305
+ emit({
28175
28306
  p0: current,
28176
28307
  p1: {
28177
28308
  x,
@@ -28194,7 +28325,7 @@ function parseSvgPathToSegments(d) {
28194
28325
  x,
28195
28326
  y: current.y
28196
28327
  };
28197
- segments.push({
28328
+ emit({
28198
28329
  p0: current,
28199
28330
  p1: next
28200
28331
  });
@@ -28211,7 +28342,7 @@ function parseSvgPathToSegments(d) {
28211
28342
  x: current.x,
28212
28343
  y
28213
28344
  };
28214
- segments.push({
28345
+ emit({
28215
28346
  p0: current,
28216
28347
  p1: next
28217
28348
  });
@@ -28248,7 +28379,7 @@ function parseSvgPathToSegments(d) {
28248
28379
  x,
28249
28380
  y
28250
28381
  };
28251
- segments.push(...sampleCubicBezier(current, p1, p2, end));
28382
+ emit(...sampleCubicBezier(current, p1, p2, end));
28252
28383
  current = end;
28253
28384
  lastCubicControl = p2;
28254
28385
  }
@@ -28283,7 +28414,7 @@ function parseSvgPathToSegments(d) {
28283
28414
  x,
28284
28415
  y
28285
28416
  };
28286
- segments.push(...sampleCubicBezier(current, p1, p2, end));
28417
+ emit(...sampleCubicBezier(current, p1, p2, end));
28287
28418
  current = end;
28288
28419
  lastCubicControl = p2;
28289
28420
  }
@@ -28309,7 +28440,7 @@ function parseSvgPathToSegments(d) {
28309
28440
  x,
28310
28441
  y
28311
28442
  };
28312
- segments.push(...sampleQuadraticBezier(current, p1, end));
28443
+ emit(...sampleQuadraticBezier(current, p1, end));
28313
28444
  current = end;
28314
28445
  lastQuadControl = p1;
28315
28446
  }
@@ -28336,7 +28467,7 @@ function parseSvgPathToSegments(d) {
28336
28467
  x,
28337
28468
  y
28338
28469
  };
28339
- segments.push(...sampleQuadraticBezier(current, p1, end));
28470
+ emit(...sampleQuadraticBezier(current, p1, end));
28340
28471
  current = end;
28341
28472
  lastQuadControl = p1;
28342
28473
  }
@@ -28359,14 +28490,14 @@ function parseSvgPathToSegments(d) {
28359
28490
  x,
28360
28491
  y
28361
28492
  };
28362
- segments.push(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));
28493
+ emit(...sampleSvgArc(current, rx, ry, rotation, largeArc, sweep, end));
28363
28494
  current = end;
28364
28495
  }
28365
28496
  lastCubicControl = null;
28366
28497
  lastQuadControl = null;
28367
28498
  break;
28368
28499
  case "Z":
28369
- 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({
28370
28501
  p0: current,
28371
28502
  p1: subpathStart
28372
28503
  });
@@ -28377,7 +28508,10 @@ function parseSvgPathToSegments(d) {
28377
28508
  default: break;
28378
28509
  }
28379
28510
  }
28380
- return segments;
28511
+ return {
28512
+ segments,
28513
+ subpaths
28514
+ };
28381
28515
  }
28382
28516
  /**
28383
28517
  * Trim linear path segments using arc-length parameterization.
@@ -28438,6 +28572,19 @@ function trimPathSegments(segments, trimStart, trimEnd, trimOffset = 0) {
28438
28572
  }
28439
28573
  }
28440
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
+ /**
28441
28588
  * Apply dash patterns along linear path segments.
28442
28589
  */
28443
28590
  function dashPathSegments(segments, dashArray, dashOffset = 0) {
@@ -28649,6 +28796,44 @@ function triangulatePolygon(contour) {
28649
28796
  if (rem.length === 3) triangles.push(rem[0], rem[1], rem[2]);
28650
28797
  return triangles;
28651
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
+ }
28652
28837
  /**
28653
28838
  * Triangulate a shape geometry into a flat Float32Array of 2D vertex pairs [x, y, x, y, ...].
28654
28839
  */
@@ -28773,19 +28958,16 @@ function triangulateShape(config$1) {
28773
28958
  yBotHead
28774
28959
  ]);
28775
28960
  }
28776
- if (shapeType === "path" && config$1.path) {
28777
- const segments = parseSvgPathToSegments(config$1.path);
28778
- if (segments.length === 0) return new Float32Array(0);
28779
- const tris = triangulatePolygon(segments.map((s) => s.p0));
28780
- const out = new Float32Array(tris.length * 2);
28781
- for (let i = 0; i < tris.length; i++) {
28782
- out[i * 2] = tris[i].x;
28783
- out[i * 2 + 1] = tris[i].y;
28784
- }
28785
- return out;
28786
- }
28961
+ if (shapeType === "path" && config$1.path) return cachedPathFill(config$1.path);
28787
28962
  return new Float32Array(0);
28788
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
+ */
28789
28971
  const pathWgsl = `
28790
28972
  struct Uniforms {
28791
28973
  transformCol0 : vec4<f32>,
@@ -28794,8 +28976,6 @@ struct Uniforms {
28794
28976
  params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
28795
28977
  color : vec4<f32>,
28796
28978
  style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
28797
- p0 : vec2<f32>,
28798
- p1 : vec2<f32>,
28799
28979
  };
28800
28980
 
28801
28981
  @group(0) @binding(0) var<uniform> u : Uniforms;
@@ -28803,17 +28983,30 @@ struct Uniforms {
28803
28983
  struct VSOut {
28804
28984
  @builtin(position) pos : vec4<f32>,
28805
28985
  @location(0) localPos : vec2<f32>,
28986
+ @location(1) @interpolate(flat) p0 : vec2<f32>,
28987
+ @location(2) @interpolate(flat) p1 : vec2<f32>,
28806
28988
  };
28807
28989
 
28808
- @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
+
28809
29003
  let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
28810
29004
  let p = transform * vec3<f32>(xy, 1.0);
28811
-
28812
29005
  let surfaceSize = u.params.yz;
28813
29006
  let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
28814
29007
  let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
28815
29008
 
28816
- 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);
28817
29010
  }
28818
29011
 
28819
29012
  fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
@@ -28825,10 +29018,10 @@ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capTy
28825
29018
  let dir = ba / len;
28826
29019
  let normal = vec2<f32>(-dir.y, dir.x);
28827
29020
  let pa = p - a;
28828
-
29021
+
28829
29022
  let proj = dot(pa, dir);
28830
29023
  let perp = abs(dot(pa, normal));
28831
-
29024
+
28832
29025
  if (capType > 0.5 && capType < 1.5) {
28833
29026
  // Butt cap: terminates strictly at endpoints a and b
28834
29027
  let dx = max(-proj, proj - len);
@@ -28852,15 +29045,15 @@ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capTy
28852
29045
 
28853
29046
  @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
28854
29047
  let radius = u.params.w * 0.5;
28855
- let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
28856
-
29048
+ let d = sdSegmentWithCap(in.localPos, in.p0, in.p1, radius, u.style.x);
29049
+
28857
29050
  let fw = max(fwidth(d), 1e-5);
28858
29051
  let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
28859
29052
  let alpha = u.color.a * u.params.x * edgeAlpha;
28860
29053
  if (alpha <= 0.0) {
28861
29054
  discard;
28862
29055
  }
28863
-
29056
+
28864
29057
  return vec4<f32>(u.color.rgb * alpha, alpha);
28865
29058
  }
28866
29059
  `;
@@ -28917,127 +29110,111 @@ function createVec2Pipeline(device, options) {
28917
29110
  primitive: { topology: options.topology }
28918
29111
  });
28919
29112
  }
29113
+ /** A straight segment's two ends, the instance the stroke shader expands into a quad. */
29114
+ const SEGMENT_FLOATS = 4;
28920
29115
  var PathPipeline = class {
28921
29116
  device;
28922
29117
  pipeline;
28923
29118
  maxPipeline;
28924
29119
  uniformLayout;
28925
29120
  uniformPool;
28926
- vertexPool;
29121
+ segmentPool;
28927
29122
  uniformBindGroupCache = new UniformBindGroupCache();
28928
- scratchData = new Float32Array(28);
29123
+ scratchData = new Float32Array(24);
28929
29124
  constructor(device, format) {
28930
29125
  this.device = device;
28931
29126
  this.uniformPool = new BufferPool(4096, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);
28932
- this.vertexPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);
29127
+ this.segmentPool = new BufferPool(4096, GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST);
28933
29128
  const module$1 = device.createShaderModule({
28934
29129
  label: "path.wgsl",
28935
29130
  code: pathWgsl
28936
29131
  });
28937
29132
  this.uniformLayout = createUniformLayout(device);
28938
- this.pipeline = createVec2Pipeline(device, {
28939
- label: "PathPipeline",
28940
- module: module$1,
28941
- uniformLayout: this.uniformLayout,
28942
- format,
28943
- 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" }
28944
29158
  });
28945
- this.maxPipeline = createVec2Pipeline(device, {
28946
- label: "PathPipeline.max",
28947
- module: module$1,
28948
- uniformLayout: this.uniformLayout,
28949
- format,
28950
- topology: "triangle-strip",
28951
- blend: {
28952
- color: {
28953
- srcFactor: "one",
28954
- dstFactor: "one",
28955
- operation: "max"
28956
- },
28957
- alpha: {
28958
- srcFactor: "one",
28959
- dstFactor: "one",
28960
- operation: "max"
28961
- }
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"
28962
29170
  }
28963
29171
  });
28964
29172
  }
28965
29173
  resetPools() {
28966
29174
  this.uniformPool.reset();
28967
- this.vertexPool.reset();
29175
+ this.segmentPool.reset();
28968
29176
  }
28969
29177
  drawPath(pass, transformStack, pathStr, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {
28970
- let segments = parseSvgPathToSegments(pathStr);
28971
- if (segments.length === 0) return;
28972
- 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);
28973
- if (opts?.strokeDashArray && opts.strokeDashArray.length > 0) segments = dashPathSegments(segments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);
28974
- if (segments.length === 0) return;
28975
- const c = parseColor(color);
28976
- const opacity = opts?.opacity ?? 1;
28977
- let capType = 0;
28978
- if (opts?.strokeLineCap === "butt") capType = 1;
28979
- else if (opts?.strokeLineCap === "square") capType = 2;
28980
- 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);
28981
29179
  }
28982
29180
  drawSegments(pass, transformStack, segments, color, strokeWidth, surfaceWidth, surfaceHeight, opts) {
28983
29181
  let activeSegments = segments;
28984
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);
28985
29183
  if (opts?.strokeDashArray && opts.strokeDashArray.length > 0) activeSegments = dashPathSegments(activeSegments, opts.strokeDashArray, opts.strokeDashOffset ?? 0);
28986
- 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;
28987
29195
  const c = parseColor(color);
28988
- const opacity = opts?.opacity ?? 1;
28989
- let capType = 0;
28990
- if (opts?.strokeLineCap === "butt") capType = 1;
28991
- else if (opts?.strokeLineCap === "square") capType = 2;
28992
- for (const segment of activeSegments) this.drawSegment(pass, transformStack, segment.p0, segment.p1, c, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts);
28993
- }
28994
- drawSegment(pass, transformStack, p0, p1, color, strokeWidth, capType, surfaceWidth, surfaceHeight, opacity, opts) {
28995
29196
  const data = this.scratchData;
28996
- transformStack.packIntoBuffer(data, opacity, surfaceWidth, surfaceHeight, opts?.transform);
29197
+ transformStack.packIntoBuffer(data, opts?.opacity ?? 1, surfaceWidth, surfaceHeight, opts?.transform);
28997
29198
  data[15] = strokeWidth;
28998
- data[16] = color.r;
28999
- data[17] = color.g;
29000
- data[18] = color.b;
29001
- data[19] = color.a;
29002
- 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;
29003
29204
  data[21] = 0;
29004
29205
  data[22] = 0;
29005
29206
  data[23] = 0;
29006
- data[24] = p0.x;
29007
- data[25] = p0.y;
29008
- data[26] = p1.x;
29009
- data[27] = p1.y;
29010
29207
  const uniformBuffer = this.uniformPool.getBuffer(this.device, data);
29011
- const dx = p1.x - p0.x;
29012
- const dy = p1.y - p0.y;
29013
- const len = Math.sqrt(dx * dx + dy * dy);
29014
- if (len < 1e-6) return;
29015
- const padding = strokeWidth * .5 + 2;
29016
- const nx = dx / len * padding;
29017
- const ny = dy / len * padding;
29018
- const px = -ny;
29019
- const py = nx;
29020
- const vertexData = new Float32Array([
29021
- p0.x - nx - px,
29022
- p0.y - ny - py,
29023
- p0.x - nx + px,
29024
- p0.y - ny + py,
29025
- p1.x + nx - px,
29026
- p1.y + ny - py,
29027
- p1.x + nx + px,
29028
- p1.y + ny + py
29029
- ]);
29030
- const vertexBuffer = this.vertexPool.getBuffer(this.device, vertexData);
29031
- const pipeline = opts?.blendMode === "max" ? this.maxPipeline : this.pipeline;
29032
- pass.setPipeline(pipeline);
29033
- const uniformBindGroup = this.uniformBindGroupCache.getBindGroup(this.device, this.uniformLayout, uniformBuffer);
29034
- pass.setBindGroup(0, uniformBindGroup);
29035
- pass.setVertexBuffer(0, vertexBuffer);
29036
- 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);
29037
29214
  }
29038
29215
  destroy() {
29039
29216
  this.uniformPool.destroy();
29040
- this.vertexPool.destroy();
29217
+ this.segmentPool.destroy();
29041
29218
  this.uniformBindGroupCache.destroy();
29042
29219
  }
29043
29220
  };
@@ -41608,5 +41785,5 @@ var NodeSurfaceProvider = class {
41608
41785
  if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();
41609
41786
 
41610
41787
  //#endregion
41611
- export { probeVideoSize as $, TextAnimatorBuilder as $t, emojiGraphemes as A, evaluateSpringProgress as An, AudioSignalComputePipeline as At, jointMatrices as B, samplePathChainGeometry as Bn, KineticMarqueeConfigSchema as Bt, drawGifNode as C, ellipseToCubicBeziers as Cn, resolveEnvironment as Ct, drawSignalNode as D, evaluateMarqueeOffset as Dn, AnchorGroupingSchema as Dt, drawParagraphNode as E, evaluateExpressionSelector as En, AdvancedTextAnimatorSchema as Et, getPrimitiveGeometry as F, getScramblePool as Fn, EnhancedTextNodeSchema as Ft, measureMaxCaptionHeight as G, SelectorModeSchema as Gt, loadModel3D as H, waveToCubicBeziers as Hn, LongShadowConfigSchema as Ht, getRegisteredFontSource as I, getShuffledOrder as In, ExpressionSelectorSchema as It, parseFBX as J, SignalRegistry as Jt, mediaDecoderCache as K, SelectorShapeSchema as Kt, getRenderer2D as L, parseSvgPathToCubicBeziers as Ln, ExtendedGlyphPropertiesSchema as Lt, fitSpansToText as M, evaluateVolumetricFormation as Mn, ChromaticGlitchConfigSchema as Mt, generateExtrudedTextGeometry as N, generateArcLengthLUT as Nn, CubicBezierSegmentSchema as Nt, drawSvgNode as O, evaluateSelectorCombination as On, AnchorPresetSchema as Ot, getHeadlessFontPath as P, generatePathSegments as Pn, DynamicStrokePropertiesSchema as Pt, poseNodes as Q, TextAnchorConfigSchema as Qt, initHeadlessWebGPU as R, sampleAudioSpectrumScale as Rn, GlyphAnchorGroupingSchema as Rt, drawCaptionNode as S, distanceToCurveParameter as Sn, parseColorToRgb as St, drawLottieNode as T, evaluateCubicBezierDerivative as Tn, AdvancedTextAnimatorBuilder as Tt, loadOBJ as U, ParticleDissolveConfigSchema as Ut, loadFBX as V, signalRegistry as Vn, LineSpacingDynamicsSchema as Vt, lutStore as W, SelectorBasedOnSchema as Wt, parseOBJ as X, Spatial3DPropertiesSchema as Xt, parseMTL as Y, SkewPropertiesSchema as Yt, parseSvgPathToSegments as Z, SpringPhysicsSchema as Zt, buildShapeSvgPath as _, buildWGSLSignalFn as _n, MAX_LIGHTS as _t, GlassPipeline as a, TextRangeSelectorSchema as an, shaderStore as at, colorMatrixWgsl as b, computeRangeSelectorWeight as bn, Vector3Math as bt, Renderer2D as c, TextSignalSelectorSchema as cn, textureCache as ct, ScreenSpaceRelightPipeline as d, TypingCadenceSchema as dn, GetFontAssetUrl as dt, TextCursorConfigSchema as en, registerHeadlessFont as et, ShadowPipeline as f, VariableFontAxesSchema as fn, resolveMediaSourceUrl as ft, WebGPUAudioProcessor as g, buildPathLUT as gn, Light3D as gt, SlugPipeline as h, VolumetricFormationModeSchema as hn, LIGHT_UNIFORM_SIZE_BYTES as ht, EffectPipeline as i, TextPathSourceSchema as in, setRegisteredFontSource as it, ensureDevice as j, evaluateTypewriterState as jn, AudioSpectrumTypographySchema as jt, drawVideoNode as k, evaluateSkewMatrix as kn, AnimatableGlyphPropsSchema as kt, Renderer3D as l, TextWigglySelectorSchema as ln, trackAudioPitch as lt, SlugGeometry as m, VolumetricFormationConfigSchema as mn, ENVIRONMENT_PRESETS as mt, AudioLatentTrackCache as n, TextPathBuilder as nn, resolveTextSpans as nt, MotionBlurPipeline as o, TextScrambleConfigSchema as on, spansText as ot, SlugFontCache as p, Vec2Schema as pn, Camera3D as pt, parseColor as q, SelectorUnitsSchema as qt, AudioMeshDeformPipeline as r, TextPathOptionsSchema as rn, sampleMorphWeights as rt, NodeSurfaceProvider as s, TextSelectorSchema as sn, srtLoader as st, AudioLatentEngine as t, TextCursorStyleSchema as tn, resolveInputUrl as tt, SSAOPipeline as u, TypewriterAnimatorSchema as un, transformScale as ut, clearAllVideoCache as v, computeAnchorPivotOffset as vn, Matrix4Math as vt, drawImageNode as w, evaluateCubicBezier as wn, AETextAnimatorSchema as wt, describeGpu as x, deterministicWigglyNoise as xn, linearRgb as xt, clearHeadlessFonts as y, computeLineLeadingDisplacement as yn, Path3D as yt, inputStore as z, sampleCurveGeometry as zn, GlyphAnchorPointSchema as zt };
41612
- //# sourceMappingURL=dist-D3BeAZ7X.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