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
@@ -0,0 +1,494 @@
1
+ import{a as bt,b as Pt,c as Wt}from"./chunk-JAAFSVAG.mjs";import{c as Et,d as $t,e as K}from"./chunk-CSLSWUUT.mjs";import{b as gt}from"./chunk-OBIJIQCZ.mjs";import{e as It}from"./chunk-GXFYRMJZ.mjs";import{B as Nt,c as zt,e as Vt,y as D,z as F}from"./chunk-64L4GUOF.mjs";import{a as A}from"./chunk-354GX6IB.mjs";import{g as v}from"./chunk-Y4NIR77Z.mjs";v();function tr(r,t=180,e=12,n=1,i=0){if(r<=0)return 0;let o=Math.sqrt(Math.max(1e-4,t)/Math.max(1e-4,n)),s=e/(2*Math.sqrt(Math.max(1e-4,t*n)));if(s<1){let l=o*Math.sqrt(1-s*s),a=Math.exp(-s*o*r),u=-1,c=(i-s*o*-1)/Math.max(1e-6,l),h=a*(u*Math.cos(l*r)+c*Math.sin(l*r));return Math.min(2,Math.max(-1,1+h))}else if(Math.abs(s-1)<1e-4){let l=Math.exp(-o*r);return 1+(-1+(i-o)*r)*l}else{let l=-o*(s-Math.sqrt(s*s-1)),a=-o*(s+Math.sqrt(s*s-1)),u=(i+a)/Math.max(1e-6,l-a),c=-1-u;return 1+(u*Math.exp(l*r)+c*Math.exp(a*r))}}function er(r,t=0){if(r===0)return[1,0,0,1];let e=r*Math.PI/180,n=t*Math.PI/180,i=Math.cos(n),o=Math.sin(n),s=Math.tan(e),l=1-s*i*o,a=s*i*i,u=-s*o*o,c=1+s*o*i;return[l,a,u,c]}function rr(r,t){let e=t.anchorX,n=t.anchorY;switch(t.preset){case"center":e=.5,n=.5;break;case"baseline":e=.5,n=r.height>0?r.ascender/r.height:.8;break;case"bottom_left":e=0,n=1;break;case"bottom_center":e=.5,n=1;break;case"bottom_right":e=1,n=1;break;case"top_left":e=0,n=0;break;case"top_center":e=.5,n=0;break;case"top_right":e=1,n=0;break;default:e=.5,n=.5;break}let i=(e-.5)*r.width+t.offsetX,o=(n-.5)*r.height+t.offsetY;return{px:i,py:o}}function nr(r,t,e,n=0){if(e===0||t<=1)return 0;let i=n*(t-1);return(r-i)*e}function ir(r,t){try{let e={textIndex:t.charIndex,textTotal:Math.max(1,t.totalChars),wordIndex:t.wordIndex,wordTotal:Math.max(1,t.totalWords),lineIndex:t.lineIndex,lineTotal:Math.max(1,t.totalLines),time:t.time,frame:t.frame,fps:t.fps,sin:Math.sin,cos:Math.cos,tan:Math.tan,exp:Math.exp,log:Math.log,abs:Math.abs,min:Math.min,max:Math.max,sqrt:Math.sqrt,pow:Math.pow,floor:Math.floor,ceil:Math.ceil,round:Math.round,PI:Math.PI,clamp:(l,a,u)=>Math.max(a,Math.min(u,l)),noise:l=>{let a=Math.sin(l*12.9898+t.frame*.1)*43758.5453;return(a-Math.floor(a))*2-1},signals:t.signals??{}},n=Object.keys(e),i=Object.values(e),o=new Function(...n,`return (${r});`),s=Number(o(...i));return Number.isFinite(s)?Math.max(-1,Math.min(1,s)):0}catch{return 0}}function or(r,t,e){let n=Math.max(1,t),i=n>1?r/(n-1):0,o=e.totalAngle*Math.PI/180,s=i*o,l=0,a=0,u=0,c=0,h=0,f=0,p=1;switch(e.mode){case"cylinder":{let x=e.totalAngle<360?(i-.5)*o:s;e.axis==="y"?(l=e.radius*Math.sin(x),u=e.radius*Math.cos(x)-e.radius,h=x*180/Math.PI):e.axis==="x"?(a=e.radius*Math.sin(x),u=e.radius*Math.cos(x)-e.radius,c=x*180/Math.PI):(l=e.radius*Math.sin(x),a=e.radius*Math.cos(x),f=x*180/Math.PI);let g=Math.cos(x);p=Math.max(.25,(g+1)*.5);break}case"vortex":{let g=-Math.PI/2+s,y=e.radius*(1-i*.35);l=y*Math.cos(g),a=y*Math.sin(g),u=-r*e.pitch||0;let b=-.35*e.radius/(o||1),M=b*Math.cos(g)-y*Math.sin(g),U=b*Math.sin(g)+y*Math.cos(g);f=Math.atan2(U,M)*180/Math.PI,p=Math.max(.65,1-i*.35);break}case"helix":{if(e.axis==="x"){let x=e.pitch>10?e.pitch:28;l=(r-(n-1)/2)*x,a=e.radius*Math.sin(s),u=e.radius*Math.cos(s)-e.radius,c=Math.sin(s)*22,p=.75+.25*((Math.cos(s)+1)*.5)}else{let x=(i-.5)*o;l=e.radius*Math.sin(x),a=(r-(n-1)/2)*e.pitch,u=e.radius*Math.cos(x)-e.radius,h=x*180/Math.PI;let g=Math.cos(x);p=Math.max(.65,(g+1)*.5)}break}default:{u=0;break}}let m=Math.max(100,e.perspective??1200),d=m-u,P=d>1?m/d:1;return{x:l*P,y:a*P,z:u,rotX:c,rotY:h,rotZ:f,scaleMult:Math.max(.1,P),depthOpacity:p}}function sr(r,t,e,n,i){let s=(t>0?Math.max(t,e):e)+n.repeatGap;if(s<=0)return r;let l=n.velocity*i;if(n.snap?.enabled){let a=n.snap.stopIndex??0,u=n.snap.granularity==="character"?40:120,c=a*u,h=Math.min(1,i*1.5);l=l*(1-h)+c*h}if((n.direction==="right"||n.direction==="down")&&(l=-l),n.loop){let a=(r-l)%s;return a<-e?a+s:a}return r-l}function ar(r,t,e,n,i,o){let s=Math.max(1,t),l=s>1?r/(s-1):.5,a=Math.max(20,e.minFreqHz),u=Math.max(a+100,e.maxFreqHz),c=a*(u/a)**l,h=0,f=It.getChannelSamples(e.signalChannel,"primary");if(f&&f.length>0){let m=o>0?o:24,d=Math.max(0,Math.min(f.length-1,Math.round(i/m*24)));h=Number(f[d])||0}else if(n){let m=n[e.signalChannel];if(typeof m=="number")h=m;else if(typeof m=="function")h=Number(m(i,o,c))||0;else if(typeof m=="object"&&m!==null){let d=m;if(typeof d.get=="function")h=Number(d.get({frame:i,fps:o,freq:c}))||0;else if(Array.isArray(d.samples)||ArrayBuffer.isView(d.samples)){let P=d.samples,x=Math.floor(l*(P.length-1));h=Number(P[x])||0}}}let p=Math.max(0,Math.min(1,h));return e.minScale+p*(e.maxScale-e.minScale)}v();function cr(r,t,e,n,i,o=0,s=0){let l=t+n,a=e+n;if(a<=l)return 0;let u=(r-l)/(a-l),c=0;switch(i){case"square":c=u>=0&&u<=1?1:0;break;case"ramp_up":c=Math.max(0,Math.min(1,u));break;case"ramp_down":c=1-Math.max(0,Math.min(1,u));break;case"triangle":{u<0||u>1?c=0:u<.5?c=u*2:c=(1-u)*2;break}case"round":{u<0||u>1?c=0:c=.5-.5*Math.cos(u*2*Math.PI);break}case"smooth":{u<=0?c=0:u>=1?c=1:c=u*u*(3-2*u);break}}if(c>0&&c<1){if(o!==0&&c>.5){let h=(c-.5)*2,f=o>0?1+o*3:1/(1-o*3);c=.5+.5*h**f}if(s!==0&&c<=.5){let h=c*2,f=s>0?1+s*3:1/(1-s*3);c=.5*h**f}}return Math.max(0,Math.min(1,c))}function hr(r,t,e,n){let i=(t*(1-n)+n)*12.9898+e+r*78.233,o=Math.sin(i)*43758.5453;return(o-Math.floor(o))*2-1}function fr(r,t){let e=t,n=()=>(e=(e*9301+49297)%233280,e/233280),i=Array.from({length:r},(o,s)=>s);for(let o=i.length-1;o>0;o--){let s=Math.floor(n()*(o+1)),l=i[o];i[o]=i[s],i[s]=l}return i}function pr(r,t,e){switch(e){case"add":return Math.max(0,Math.min(1,r+t));case"subtract":return Math.max(0,Math.min(1,r-t));case"intersect":return r*t;case"min":return Math.min(r,t);case"max":return Math.max(r,t);case"difference":return Math.abs(r-t)}}v();var jt={ascii:"!@#$%^&*()_+{}[]:;<>,.?",alphanumeric:"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",matrix:"010101<>[]{}+=*~#%&!?/\\:;|X0123456789",binary:"01",hex:"0123456789ABCDEF"};function me(r,t){return r==="custom"&&t&&t.length>0?t:jt[r]??jt.alphanumeric}function xr(r,t,e,n,i={mode:"human",jitter:.35,commaPauseMultiplier:3,sentencePauseMultiplier:5.5,paragraphPauseMultiplier:7},o={enabled:!1,charset:"alphanumeric",scrambleFramesPerChar:8,highlightProbability:.25},s=2,l="character",a){if(a===void 0&&t<e)return{visibleChars:0,currentDisplayString:"",isCursorVisible:!1};let u=a!==void 0?Math.max(0,Math.min(1,a)):Math.min(1,(t-e)/Math.max(1,n)),c=a!==void 0?u*n:t-e,h=r.length,f=Math.floor(u*h);if(l==="word"){let d=r.split(/(\s+)/),P=[];d.forEach((g,y)=>{g.trim().length>0&&P.push(y)});let x=Math.min(P.length,Math.floor(u*(P.length+1)));if(x<=0)f=0;else{let g=P[Math.min(P.length-1,x-1)];f=d.slice(0,g+1).join("").length}}else if(l==="line"){let d=r.split(`
2
+ `),P=Math.min(d.length,Math.floor(u*(d.length+1)));f=d.slice(0,P).join(`
3
+ `).length}else if(i.mode==="human"&&u<1){let d=0,P=0,x=n/Math.max(1,h);for(let g=0;g<h;g++){let y=r[g],b=1,M=i.commaPauseMultiplier??3,U=i.sentencePauseMultiplier??5.5,C=i.paragraphPauseMultiplier??7,T=i.jitter??.35;y===","||y===";"?b=M:y==="."||y==="!"||y==="?"?b=U:y===`
4
+ `&&(b=C);let _=1+Math.sin(g*17.3+42)*.5*T,k=x*b*_;if(P+=k,P<=c)d=g+1;else break}f=Math.min(h,d)}let p=r.slice(0,f);if(o.enabled&&f<h&&f>0){let d=me(o.charset,o.customCharset),P=Math.min(f,Math.max(1,o.scrambleFramesPerChar>4?3:2)),x="";for(let g=0;g<P;g++){let y=Math.floor(Math.abs(Math.sin(t*7+g*13))*d.length)%d.length;x+=d[y]}p=p.slice(0,p.length-P)+x}let m=!0;if(s>0){let d=Math.max(1,Math.round(30/(2*s)));m=Math.floor(c/d)%2===0}return{visibleChars:f,currentDisplayString:p,isCursorVisible:m}}v();v();var Ht=`
5
+ struct CompositeUniforms {
6
+ blendMode : u32,
7
+ padding1 : u32,
8
+ padding2 : u32,
9
+ padding3 : u32,
10
+ };
11
+
12
+ @group(0) @binding(0) var<uniform> u : CompositeUniforms;
13
+ @group(1) @binding(0) var baseTex : texture_2d<f32>;
14
+ @group(1) @binding(1) var overlayTex : texture_2d<f32>;
15
+ @group(1) @binding(2) var samp : sampler;
16
+
17
+ struct VSOut {
18
+ @builtin(position) pos : vec4<f32>,
19
+ @location(0) uv : vec2<f32>,
20
+ };
21
+
22
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
23
+ var pos = array<vec2<f32>, 4>(
24
+ vec2<f32>(-1.0, 1.0),
25
+ vec2<f32>(1.0, 1.0),
26
+ vec2<f32>(-1.0, -1.0),
27
+ vec2<f32>(1.0, -1.0)
28
+ );
29
+ var uv = array<vec2<f32>, 4>(
30
+ vec2<f32>(0.0, 0.0),
31
+ vec2<f32>(1.0, 0.0),
32
+ vec2<f32>(0.0, 1.0),
33
+ vec2<f32>(1.0, 1.0)
34
+ );
35
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
36
+ }
37
+
38
+ fn lum(c: vec3<f32>) -> f32 {
39
+ return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
40
+ }
41
+
42
+ fn clip_color(c: vec3<f32>) -> vec3<f32> {
43
+ let l = lum(c);
44
+ let n = min(min(c.r, c.g), c.b);
45
+ let x = max(max(c.r, c.g), c.b);
46
+ var res = c;
47
+ if (n < 0.0) {
48
+ res = l + (((res - l) * l) / (l - n));
49
+ }
50
+ if (x > 1.0) {
51
+ res = l + (((res - l) * (1.0 - l)) / (x - l));
52
+ }
53
+ return res;
54
+ }
55
+
56
+ fn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {
57
+ let diff = l - lum(c);
58
+ return clip_color(c + vec3<f32>(diff));
59
+ }
60
+
61
+ fn sat(c: vec3<f32>) -> f32 {
62
+ return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);
63
+ }
64
+
65
+ fn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {
66
+ let c_min = min(min(c.r, c.g), c.b);
67
+ let c_max = max(max(c.r, c.g), c.b);
68
+ if (c_max <= c_min) {
69
+ return vec3<f32>(0.0);
70
+ }
71
+ return (c - vec3<f32>(c_min)) * s / (c_max - c_min);
72
+ }
73
+
74
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
75
+ let d = textureSample(baseTex, samp, in.uv);
76
+ let s = textureSample(overlayTex, samp, in.uv);
77
+ let sa = s.a;
78
+ let da = d.a;
79
+
80
+ switch (u.blendMode) {
81
+ case 16u: { return d * sa; } // mask-in / destination-in
82
+ case 17u: { return d * (1.0 - sa); } // mask-out / destination-out
83
+ case 18u: { return s * da; } // source-in
84
+ case 19u: { return s * (1.0 - da); } // source-out
85
+ case 20u: { return s * da + d * (1.0 - sa); } // source-atop
86
+ case 21u: { return d + s * (1.0 - da); } // destination-over
87
+ case 22u: { return d * sa + s * (1.0 - da); } // destination-atop
88
+ case 23u: { return s + d; } // lighter
89
+ case 24u: { return s; } // copy
90
+ case 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor
91
+ // Luma mattes: the overlay's brightness (premultiplied, so transparent = black) masks the base.
92
+ case 26u: { return d * clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0); } // luma-in
93
+ case 27u: { return d * (1.0 - clamp(dot(s.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)), 0.0, 1.0)); } // luma-out
94
+ default: {
95
+ if (sa <= 0.0) { return d; }
96
+ if (da <= 0.0) { return s; }
97
+ }
98
+ }
99
+
100
+ let s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);
101
+ let d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);
102
+
103
+ var b_rgb = s_rgb;
104
+
105
+ switch (u.blendMode) {
106
+ case 1u: { b_rgb = s_rgb * d_rgb; } // multiply
107
+ case 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen
108
+ case 3u: { // overlay
109
+ b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, d_rgb < vec3<f32>(0.5));
110
+ }
111
+ case 4u: { b_rgb = min(s_rgb, d_rgb); } // darken
112
+ case 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten
113
+ case 6u: { // color-dodge
114
+ b_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));
115
+ }
116
+ case 7u: { // color-burn
117
+ b_rgb = select(1.0 - min((1.0 - d_rgb) / s_rgb, vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb == vec3<f32>(0.0));
118
+ }
119
+ case 8u: { // hard-light
120
+ b_rgb = select(1.0 - 2.0 * (1.0 - s_rgb) * (1.0 - d_rgb), 2.0 * s_rgb * d_rgb, s_rgb < vec3<f32>(0.5));
121
+ }
122
+ case 9u: { // soft-light
123
+ b_rgb = select(
124
+ d_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),
125
+ d_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),
126
+ s_rgb <= vec3<f32>(0.5)
127
+ );
128
+ }
129
+ case 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference
130
+ case 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion
131
+ case 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue
132
+ case 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation
133
+ case 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color
134
+ case 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity
135
+ case 16u: { return d * s.a; } // mask-in
136
+ case 17u: { return d * (1.0 - s.a); } // mask-out
137
+ default: { b_rgb = s_rgb; } // normal
138
+ }
139
+
140
+ let out_a = sa + da * (1.0 - sa);
141
+ let out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;
142
+
143
+ return vec4<f32>(out_rgb, out_a);
144
+ }
145
+ `;var de=`
146
+ struct MotionBlur2DUniforms {
147
+ vel: vec2<f32>,
148
+ _pad: vec2<f32>,
149
+ shutterFraction: f32,
150
+ samples: f32,
151
+ viewportWidth: f32,
152
+ viewportHeight: f32,
153
+ };
154
+
155
+ @group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;
156
+ @group(1) @binding(0) var sourceTexture: texture_2d<f32>;
157
+ @group(1) @binding(1) var colorSampler: sampler;
158
+
159
+ @vertex
160
+ fn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
161
+ var pos = array<vec2<f32>, 3>(
162
+ vec2<f32>(-1.0, -3.0),
163
+ vec2<f32>( 3.0, 1.0),
164
+ vec2<f32>(-1.0, 1.0)
165
+ );
166
+ return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
167
+ }
168
+
169
+ @fragment
170
+ fn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {
171
+ let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);
172
+ let sampleCount = u32(max(u.samples, 1.0));
173
+ let velUV = u.vel * u.shutterFraction;
174
+ let halfSamples = f32(sampleCount) * 0.5;
175
+
176
+ var accum = vec4<f32>(0.0);
177
+ var totalWeight = 0.0;
178
+
179
+ for (var i = 0u; i < sampleCount; i = i + 1u) {
180
+ let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);
181
+ let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));
182
+ let w = exp(-2.5 * t * t);
183
+ accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;
184
+ totalWeight += w;
185
+ }
186
+
187
+ return accum / max(totalWeight, 0.0001);
188
+ }
189
+ `,vt=class{textures=[];texturesByKey=new Map;index=0;getTexture(t,e,n,i,o){let s=new Set(Array.isArray(o)?o:o?[o]:[]),l=`${e}x${n}:${i}`,a=this.texturesByKey.get(l);if(a)for(let c=0;c<a.length;c++){let h=a[c];if(!s.has(h)){a.splice(c,1),a.unshift(h);let f=this.textures.indexOf(h);return f>=this.index&&(this.textures.splice(f,1),this.textures.splice(this.index,0,h),this.index++),h}}let u=t.createTexture({size:[e,n],format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});return this.texturesByKey.has(l)||this.texturesByKey.set(l,[]),this.texturesByKey.get(l).unshift(u),this.textures.splice(this.index,0,u),this.index++,u}reset(){this.index=0}destroy(){for(let t of this.textures)t.destroy();this.textures=[],this.texturesByKey.clear(),this.index=0}},xe={normal:0,"source-over":0,multiply:1,screen:2,overlay:3,darken:4,lighten:5,"color-dodge":6,"color-burn":7,"hard-light":8,"soft-light":9,difference:10,exclusion:11,hue:12,saturation:13,color:14,luminosity:15,"mask-in":16,"destination-in":16,"mask-out":17,"destination-out":17,"source-in":18,"source-out":19,"source-atop":20,"destination-over":21,"destination-atop":22,lighter:23,copy:24,xor:25,"luma-in":26,"luma-out":27},Q=class{device;compositeUniformLayout;dualTextureLayout;motionBlurUniformLayout;singleTextureLayout;compositePipeline;motionBlurPipeline;compositePool;motionBlurPool;texturePool;compositeUniformBindGroupCache=new F;motionBlurUniformBindGroupCache=new F;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(t,e){this.device=t,this.compositePool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new vt,this.compositeUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.dualTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),this.motionBlurUniformLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.singleTextureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let n=t.createPipelineLayout({bindGroupLayouts:[this.compositeUniformLayout,this.dualTextureLayout]}),i=t.createShaderModule({label:"composite.wgsl",code:Ht});this.compositePipeline=t.createRenderPipeline({label:"CompositePipeline",layout:n,vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}});let o=t.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),s=t.createShaderModule({label:"motion-blur-2d.wgsl",code:de});this.motionBlurPipeline=t.createRenderPipeline({label:"MotionBlurPipeline",layout:o,vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(t,e,n,i,o){return this.texturePool.getTexture(t,e,n,i,o)}getBuffer(t,e){return this.compositePool.getBuffer(t,e)}composite(t,e,n,i,o,s,l,a){let u=n.getSampler(this.device),c=[i,o];a&&(Array.isArray(a)?c.push(...a):c.push(a));let h=this.texturePool.getTexture(this.device,i.width,i.height,l,c);this.compositeData[0]=xe[s]??0;let f=this.compositePool.getBuffer(this.device,this.compositeData),p=t.beginRenderPass({colorAttachments:[{view:h.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});p.setPipeline(this.compositePipeline);let m=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,f);p.setBindGroup(0,m);let d=e.getCompositeBindGroup(this.device,this.dualTextureLayout,i,o,u);return p.setBindGroup(1,d),p.draw(4),p.end(),h}applyMotionBlur(t,e,n,i,o,s,l=180,a=16,u,c){if(Math.abs(o)<.1&&Math.abs(s)<.1||l<=0)return i;let h=n.getSampler(this.device),f=[i];c&&(Array.isArray(c)?f.push(...c):f.push(c));let p=this.texturePool.getTexture(this.device,i.width,i.height,u,f);this.motionBlurData[0]=o/i.width,this.motionBlurData[1]=s/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=l/360,this.motionBlurData[5]=a,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let m=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),d=t.beginRenderPass({colorAttachments:[{view:p.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});d.setPipeline(this.motionBlurPipeline);let P=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,m);return d.setBindGroup(0,P),d.setBindGroup(1,e.getBindGroup(this.device,this.singleTextureLayout,i,h)),d.draw(3),d.end(),p}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};v();v();var J=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(t,e,n,i){let o=this.cache.get(n);o||(o=new Map,this.cache.set(n,o));let s=o.get(e);return s||(s=t.createBindGroup({layout:e,entries:[{binding:0,resource:n.createView()},{binding:1,resource:i}]}),o.set(e,s)),s}getCompositeBindGroup(t,e,n,i,o){let s=this.dualCache.get(n);s||(s=new WeakMap,this.dualCache.set(n,s));let l=s.get(i);l||(l=new Map,s.set(i,l));let a=l.get(e);return a||(a=t.createBindGroup({layout:e,entries:[{binding:0,resource:n.createView()},{binding:1,resource:i.createView()},{binding:2,resource:o}]}),l.set(e,a)),a}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};v();var tt=class{scissorStack=[];stencilStack=[];pushScissor(t,e,n){this.scissorStack.push({rect:t,surfaceWidth:e,surfaceHeight:n})}popScissor(){this.scissorStack.length>0&&this.scissorStack.pop()}saveScissors(){return[...this.scissorStack]}restoreScissors(t){this.scissorStack=[...t]}clearScissors(){this.scissorStack=[]}getCurrentScissor(t,e){let n=this.scissorStack[this.scissorStack.length-1];if(n&&!(t!==void 0&&e!==void 0&&n.surfaceWidth!==void 0&&n.surfaceHeight!==void 0&&n.surfaceWidth!==0&&n.surfaceHeight!==0&&(n.surfaceWidth!==t||n.surfaceHeight!==e)))return n.rect}pushStencilClip(t){this.stencilStack.push(t)}popStencilClip(){this.stencilStack.length>0&&this.stencilStack.pop()}getCurrentStencil(){return this.stencilStack[this.stencilStack.length-1]}applyScissorToPass(t,e,n){let i=this.getCurrentScissor(e,n);if(!i){t.setScissorRect(0,0,Math.max(1,Math.floor(e)),Math.max(1,Math.floor(n)));return}let o=Math.max(0,Math.floor(i.x)),s=Math.max(0,Math.floor(i.y)),l=Math.min(e,Math.ceil(i.x+i.width)),a=Math.min(n,Math.ceil(i.y+i.height)),u=Math.max(0,l-o),c=Math.max(0,a-s);if(!Number.isFinite(o)||!Number.isFinite(s)||!Number.isFinite(u)||!Number.isFinite(c)||u<=0||c<=0)t.setScissorRect(0,0,1,1);else{let h=Math.min(u,Math.max(0,e-o)),f=Math.min(c,Math.max(0,n-s));h<=0||f<=0?t.setScissorRect(0,0,1,1):t.setScissorRect(Math.floor(o),Math.floor(s),Math.floor(h),Math.floor(f))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};v();v();v();var H=new Set,Mt=!1;function ot(r,t,e=2){let n=t&&t.length,i=n?t[0]*e:r.length;H.size&&H.clear();let o=Xt(r,0,i,e,!0),s=[];if(!o||o.next===o.prev)return s;let l=0,a=0,u=0;if(n&&(o=ve(r,t,o,e)),r.length>80*e){l=r[0],a=r[1];let c=l,h=a;for(let f=e;f<i;f+=e){let p=r[f],m=r[f+1];p<l&&(l=p),m<a&&(a=m),p>c&&(c=p),m>h&&(h=m)}u=Math.max(c-l,h-a),u=u!==0?32767/u:0}return St(o,s,l,a,u),s}function Xt(r,t,e,n,i){let o=null;if(i===Le(r,t,e,n)>0)for(let s=t;s<e;s+=n)o=Zt(s/n|0,r[s],r[s+1],o);else for(let s=e-n;s>=t;s-=n)o=Zt(s/n|0,r[s],r[s+1],o);return o&&Y(o,o.next)&&(Z(o),o=o.next),o}function E(r,t=r){let e=t===r,n=r,i;do i=!1,n!==n.next&&(H.size===0||!H.has(n))&&(Y(n,n.next)||w(n.prev,n,n.next)===0)?((e||n===t)&&(t=n.prev),Mt=!0,Z(n),n=n.prev,i=!0):(e||n!==t)&&(n=n.next,i=!e);while(i||n!==t);return t}function St(r,t,e,n,i){i&&Be(r,e,n,i);let o=r,s=!1;for(;r.prev!==r.next;){let l=r.prev,a=r.next;if(w(l,r,a)<0&&(i?ge(r,e,n,i):ye(r))){t.push(l.i,r.i,a.i),Z(r),r=a,o=a;continue}if(r=a,r===o){if(Mt=!1,r=E(r),Mt){o=r;continue}if(!s){r=be(r,t),o=r,s=!0;continue}Pe(r,t,e,n,i);break}}}function ye(r){let t=r.prev,e=r,n=r.next,i=t.x,o=e.x,s=n.x,l=t.y,a=e.y,u=n.y,c=Math.min(i,o,s),h=Math.min(l,a,u),f=Math.max(i,o,s),p=Math.max(l,a,u),m=n.next;for(;m!==t;){if(m.x>=c&&m.x<=f&&m.y>=h&&m.y<=p&&!(i===m.x&&l===m.y)&&it(i,l,o,a,s,u,m.x,m.y)&&w(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function ge(r,t,e,n){let i=r.prev,o=r,s=r.next,l=i.x,a=o.x,u=s.x,c=i.y,h=o.y,f=s.y,p=Math.min(l,a,u),m=Math.min(c,h,f),d=Math.max(l,a,u),P=Math.max(c,h,f),x=Ct(p,m,t,e,n),g=Ct(d,P,t,e,n),y=r.prevZ;for(;y&&y.z>=x;){if(y.x>=p&&y.x<=d&&y.y>=m&&y.y<=P&&y!==s&&!(l===y.x&&c===y.y)&&it(l,c,a,h,u,f,y.x,y.y)&&w(y.prev,y,y.next)>=0)return!1;y=y.prevZ}let b=r.nextZ;for(;b&&b.z<=g;){if(b.x>=p&&b.x<=d&&b.y>=m&&b.y<=P&&b!==s&&!(l===b.x&&c===b.y)&&it(l,c,a,h,u,f,b.x,b.y)&&w(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function be(r,t){let e=r,n=!1;do{let i=e.prev,o=e.next.next;Jt(i,e,e.next,o,!1)&&q(i,o)&&q(o,i)&&(t.push(i.i,e.i,o.i),Z(e),Z(e.next),e=r=o,n=!0),e=e.next}while(e!==r);return n?E(e):e}function Pe(r,t,e,n,i){let o=r;do{let s=o.next.next;for(;s!==o.prev;){if(o.i!==s.i&&ke(o,s)){let l=te(o,s);o=E(o,o.next),l=E(l,l.next),St(o,t,e,n,i),St(l,t,e,n,i);return}s=s.next}o=o.next}while(o!==r)}var Gt=!1;function ve(r,t,e,n){let i=[];for(let o=0,s=t.length;o<s;o++){let l=t[o]*n,a=o<s-1?t[o+1]*n:r.length,u=Xt(r,l,a,n,!1);u===u.next&&H.add(u),i.push(De(u))}i.sort(Me),Ge(r.length/n,t.length),Qt(e,e),Gt=!0;for(let o=0;o<i.length;o++)e=Se(i[o],e);return Gt=!1,E(e)}function Me(r,t){return r.x-t.x||r.y-t.y||(r.next.y-r.y)/(r.next.x-r.x)-(t.next.y-t.y)/(t.next.x-t.x)}function Se(r,t){let e=Ue(r,t);if(!e)return t;let n=te(e,r),i=n.next;return Qt(e,i.next),E(n,n.next),E(e,e.next)}var Kt=16,G=new Float64Array(0),nt=0,wt=[],Ut=[];function Ge(r,t){let e=Math.ceil((r+2*t)/Kt)+t+2;G.length<e*4&&(G=new Float64Array(e*4)),nt=0}function Qt(r,t){let e=r;do{let n=nt++;wt[n]=e;let i=e.x,o=e.y,s=e.x,l=e.y,a=0;do{let c=e.next;e.z=n,c.x<i&&(i=c.x),c.x>s&&(s=c.x),c.y<o&&(o=c.y),c.y>l&&(l=c.y),e=c}while(++a<Kt&&e!==t);Ut[n]=e;let u=n*4;G[u]=i,G[u+1]=o,G[u+2]=s,G[u+3]=l}while(e!==t)}function we(r,t){let e=r.z*4;t.x<G[e]&&(G[e]=t.x),t.y<G[e+1]&&(G[e+1]=t.y),t.x>G[e+2]&&(G[e+2]=t.x),t.y>G[e+3]&&(G[e+3]=t.y)}function Yt(r){let t=Ut[r];for(;t.prev.next!==t;)t=t.next;return Ut[r]=t,t}function qt(r){let t=wt[r];for(;t.prev.next!==t;)t=t.next;return wt[r]=t,t}function Ue(r,t){let e=t,n=r.x,i=r.y,o=-1/0,s;if(Y(r,e))return e;for(let f=0,p=0;f<nt;f++,p+=4){if(i<G[p+1]||i>G[p+3]||G[p]>n||G[p+2]<=o)continue;let m=Yt(f);e=qt(f);do{if(e.prev.next===e){if(Y(r,e.next))return e.next;if(i<=e.y&&i>=e.next.y&&e.next.y!==e.y){let d=e.x+(i-e.y)*(e.next.x-e.x)/(e.next.y-e.y);if(d<=n&&d>o&&(o=d,s=e.x<e.next.x?e:e.next,d===n))return s}}e=e.next}while(e!==m)}if(!s)return null;let l=s.x,a=s.y,u=Math.min(i,a),c=Math.max(i,a),h=1/0;for(let f=0,p=0;f<nt;f++,p+=4){if(G[p+2]<l||G[p]>n||G[p+3]<u||G[p+1]>c)continue;let m=Yt(f);e=qt(f);do{if(e.prev.next===e&&n>=e.x&&e.x>=l&&n!==e.x&&it(i<a?n:o,i,l,a,i<a?o:n,i,e.x,e.y)){let d=Math.abs(i-e.y)/(n-e.x);(q(e,r)||e.y===i&&e.next.y===i&&e.next.x>n)&&(d<h||d===h&&(e.x>s.x||e.x===s.x&&Ce(s,e)))&&(s=e,h=d)}e=e.next}while(e!==m)}return s}function Ce(r,t){return w(r.prev,r,t.prev)<0&&w(t.next,r,r.next)<0}var B=[],I=[],O=new Uint32Array(0),N=new Uint32Array(0),j=new Uint32Array(256);function Be(r,t,e,n){let i=r,o=0;do i.z=Ct(i.x,i.y,t,e,n),B[o++]=i,i=i.next;while(i!==r);Te(o);let s=null;for(let l=0;l<o;l++){let a=B[l];a.prevZ=s,s&&(s.nextZ=a),s=a}s.nextZ=null,B.fill(null,0,o),I.fill(null,0,o)}function Te(r){if(r<=32){for(let t=1;t<r;t++){let e=B[t],n=e.z,i=t-1;for(;i>=0&&B[i].z>n;)B[i+1]=B[i],i--;B[i+1]=e}return}O.length<r&&(O=new Uint32Array(r),N=new Uint32Array(r),I=new Array(r));for(let t=0;t<r;t++)O[t]=B[t].z;et(r,B,O,I,N,0),et(r,I,N,B,O,8),et(r,B,O,I,N,16),et(r,I,N,B,O,24)}function et(r,t,e,n,i,o){j.fill(0);for(let l=0;l<r;l++)j[e[l]>>>o&255]++;let s=0;for(let l=0;l<256;l++){let a=j[l];j[l]=s,s+=a}for(let l=0;l<r;l++){let a=e[l],u=j[a>>>o&255]++;n[u]=t[l],i[u]=a}}function Ct(r,t,e,n,i){return r=(r-e)*i|0,t=(t-n)*i|0,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,r|t<<1}function De(r){let t=r,e=r;do(t.x<e.x||t.x===e.x&&t.y<e.y)&&(e=t),t=t.next;while(t!==r);return e}function it(r,t,e,n,i,o,s,l){return(i-s)*(t-l)>=(r-s)*(o-l)&&(r-s)*(n-l)>=(e-s)*(t-l)&&(e-s)*(o-l)>=(i-s)*(n-l)}function ke(r,t){let e=Y(r,t)&&w(r.prev,r,r.next)>0&&w(t.prev,t,t.next)>0;return r.next.i!==t.i&&(e||q(r,t)&&q(t,r)&&(w(r.prev,r,t.prev)!==0||w(r,t.prev,t)!==0))&&!_e(r,t)&&(e||Fe(r,t))}function w(r,t,e){return(t.y-r.y)*(e.x-t.x)-(t.x-r.x)*(e.y-t.y)}function Y(r,t){return r.x===t.x&&r.y===t.y}function Jt(r,t,e,n,i=!0){let o=w(r,t,e),s=w(r,t,n),l=w(e,n,r),a=w(e,n,t);return(o>0&&s<0||o<0&&s>0)&&(l>0&&a<0||l<0&&a>0)?!0:i?!!(o===0&&rt(r,e,t)||s===0&&rt(r,n,t)||l===0&&rt(e,r,n)||a===0&&rt(e,t,n)):!1}function rt(r,t,e){return t.x<=Math.max(r.x,e.x)&&t.x>=Math.min(r.x,e.x)&&t.y<=Math.max(r.y,e.y)&&t.y>=Math.min(r.y,e.y)}function _e(r,t){let e=Math.min(r.x,t.x),n=Math.max(r.x,t.x),i=Math.min(r.y,t.y),o=Math.max(r.y,t.y),s=r;do{let l=s.next;if(s.x>n&&l.x>n||s.x<e&&l.x<e||s.y>o&&l.y>o||s.y<i&&l.y<i){s=l;continue}if(s.i!==r.i&&l.i!==r.i&&s.i!==t.i&&l.i!==t.i&&Jt(s,l,r,t))return!0;s=l}while(s!==r);return!1}function q(r,t){return w(r.prev,r,r.next)<0?w(r,t,r.next)>=0&&w(r,r.prev,t)>=0:w(r,t,r.prev)<0||w(r,r.next,t)<0}function Fe(r,t){let e=r,n=!1,i=(r.x+t.x)/2,o=(r.y+t.y)/2;do{let s=e.next;e.y>o!=s.y>o&&i<(s.x-e.x)*(o-e.y)/(s.y-e.y)+e.x&&(n=!n),e=s}while(e!==r);return n}function te(r,t){let e=Bt(r.i,r.x,r.y),n=Bt(t.i,t.x,t.y),i=r.next,o=t.prev;return r.next=t,t.prev=r,e.next=i,i.prev=e,n.next=e,e.prev=n,o.next=n,n.prev=o,n}function Zt(r,t,e,n){let i=Bt(r,t,e);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Z(r){r.next.prev=r.prev,r.prev.next=r.next,r.prevZ&&(r.prevZ.nextZ=r.nextZ),r.nextZ&&(r.nextZ.prevZ=r.prevZ),Gt&&we(r.prev,r.next)}function Bt(r,t,e){return{i:r,x:t,y:e,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function Le(r,t,e,n){let i=0;for(let o=t,s=e-n;o<e;o+=n)i+=(r[s]-r[o])*(r[o+1]+r[s+1]),s=o;return i}function Tt(r){let t=0;for(let e=0;e<r.length;e++){let n=r[e],i=r[(e+1)%r.length];t+=n.x*i.y-i.x*n.y}return t/2}function ee(r){let t=[];for(let e of r)t.push(e.x,e.y);return t}function Re(r){let t={x0:1/0,y0:1/0,x1:-1/0,y1:-1/0};for(let e of r)t.x0=Math.min(t.x0,e.x),t.y0=Math.min(t.y0,e.y),t.x1=Math.max(t.x1,e.x),t.y1=Math.max(t.y1,e.y);return t}function Ae(r){let t=ee(r),e=ot(t),n=s=>({x:t[s*2],y:t[s*2+1]}),i=-1,o=r[0];for(let s=0;s<e.length;s+=3){let l=n(e[s]),a=n(e[s+1]),u=n(e[s+2]),c=Math.abs((a.x-l.x)*(u.y-l.y)-(u.x-l.x)*(a.y-l.y));c>i&&(i=c,o={x:(l.x+a.x+u.x)/3,y:(l.y+a.y+u.y)/3})}return o}function Oe(r,t){let e=!1;for(let n=0,i=r.length-1;n<r.length;i=n++){let o=r[n],s=r[i];o.y>t.y!=s.y>t.y&&t.x<(s.x-o.x)*(t.y-o.y)/(s.y-o.y)+o.x&&(e=!e)}return e}var Ee=(r,t)=>r.box.x0<=t.box.x0&&r.box.y0<=t.box.y0&&r.box.x1>=t.box.x1&&r.box.y1>=t.box.y1&&Oe(r.points,t.inside);function re(r){let t=r.map(i=>({points:i,area:Tt(i),box:Re(i),inside:Ae(i),parent:-1,winding:0})),e=t.map((i,o)=>o).sort((i,o)=>Math.abs(t[o].area)-Math.abs(t[i].area));e.forEach((i,o)=>{let s=t[i];for(let a=o-1;a>=0;a--){let u=e[a];if(Ee(t[u],s)){s.parent=u;break}}let l=s.parent>=0?t[s.parent].winding:0;s.winding=l+Math.sign(s.area)});let n=[];return t.forEach((i,o)=>{if(i.winding===0)return;let s=ee(i.points),l=[];for(let a of t)if(a.parent===o){l.push(s.length/2);for(let u of a.points)s.push(u.x,u.y)}for(let a of ot(s,l))n.push(s[a*2],s[a*2+1])}),new Float32Array(n)}function ne(r,t,e,n,i=24){let o=[],s=r;for(let l=1;l<=i;l++){let a=l/i,u=1-a,c=u*u,h=c*u,f=a*a,p=f*a,m={x:h*r.x+3*c*a*t.x+3*u*f*e.x+p*n.x,y:h*r.y+3*c*a*t.y+3*u*f*e.y+p*n.y};o.push({p0:s,p1:m}),s=m}return o}function ie(r,t,e,n=16){let i=[],o=r;for(let s=1;s<=n;s++){let l=s/n,a=1-l,u=a*a,c=l*l,h={x:u*r.x+2*a*l*t.x+c*e.x,y:u*r.y+2*a*l*t.y+c*e.y};i.push({p0:o,p1:h}),o=h}return i}function $e(r,t,e,n,i,o,s){let l=Math.abs(t),a=Math.abs(e);if(l<1e-9||a<1e-9)return[{p0:r,p1:s}];if(Math.hypot(s.x-r.x,s.y-r.y)<1e-9)return[];let u=n*Math.PI/180,c=Math.cos(u),h=Math.sin(u),f=(r.x-s.x)/2,p=(r.y-s.y)/2,m=c*f+h*p,d=-h*f+c*p,P=m*m/(l*l)+d*d/(a*a);P>1&&(l*=Math.sqrt(P),a*=Math.sqrt(P));let x=l*l*a*a-l*l*d*d-a*a*m*m,g=l*l*d*d+a*a*m*m,y=(i===o?-1:1)*Math.sqrt(Math.max(0,x/g)),b=y*l*d/a,M=-y*a*m/l,U=c*b-h*M+(r.x+s.x)/2,C=h*b+c*M+(r.y+s.y)/2,T=(R,z,V,W)=>Math.atan2(R*W-z*V,R*V+z*W),_=T(1,0,(m-b)/l,(d-M)/a),k=T((m-b)/l,(d-M)/a,(-m-b)/l,(-d-M)/a);!o&&k>0&&(k-=2*Math.PI),o&&k<0&&(k+=2*Math.PI);let yt=Math.max(4,Math.ceil(Math.abs(k)/(2*Math.PI)*64)),Rt=[],At=r;for(let R=1;R<=yt;R++){let z=_+k*R/yt,V=l*Math.cos(z),W=a*Math.sin(z),Ot=R===yt?s:{x:c*V-h*W+U,y:h*V+c*W+C};Rt.push({p0:At,p1:Ot}),At=Ot}return Rt}function Dt(r){return oe(r).segments}function oe(r){let t=[],e=[];if(!r||typeof r!="string")return{segments:t,subpaths:e};let n=-1,i=(...p)=>{for(let m of p)t.push(m),e.push(n)},o=[],s=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,l;for(;(l=s.exec(r))!==null;)l[1]?o.push(l[1]):l[2]&&o.push(parseFloat(l[2]));let a=0,u={x:0,y:0},c={x:0,y:0},h=null,f=null;for(;a<o.length;){let p=o[a++];if(typeof p!="string")continue;let m=p,d=m===m.toLowerCase(),P=m.toUpperCase(),x=()=>a<o.length&&typeof o[a]=="number"?o[a++]:0;switch(P){case"M":{let g=!0;for(;a<o.length&&typeof o[a]=="number";){let y=x(),b=x();d&&(y+=u.x,b+=u.y),g?(u={x:y,y:b},c={x:y,y:b},n++,g=!1):(i({p0:u,p1:{x:y,y:b}}),u={x:y,y:b})}h=null,f=null;break}case"L":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x();d&&(g+=u.x,y+=u.y),i({p0:u,p1:{x:g,y}}),u={x:g,y}}h=null,f=null;break}case"H":{for(;a<o.length&&typeof o[a]=="number";){let g=x();d&&(g+=u.x);let y={x:g,y:u.y};i({p0:u,p1:y}),u=y}h=null,f=null;break}case"V":{for(;a<o.length&&typeof o[a]=="number";){let g=x();d&&(g+=u.y);let y={x:u.x,y:g};i({p0:u,p1:y}),u=y}h=null,f=null;break}case"C":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x(),U=x(),C=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y,U+=u.x,C+=u.y);let T={x:g,y},_={x:b,y:M},k={x:U,y:C};i(...ne(u,T,_,k)),u=k,h=_}f=null;break}case"S":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y);let U;h?U={x:2*u.x-h.x,y:2*u.y-h.y}:U={x:u.x,y:u.y};let C={x:g,y},T={x:b,y:M};i(...ne(u,U,C,T)),u=T,h=C}f=null;break}case"Q":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x();d&&(g+=u.x,y+=u.y,b+=u.x,M+=u.y);let U={x:g,y},C={x:b,y:M};i(...ie(u,U,C)),u=C,f=U}h=null;break}case"T":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x();d&&(g+=u.x,y+=u.y);let b;f?b={x:2*u.x-f.x,y:2*u.y-f.y}:b={x:u.x,y:u.y};let M={x:g,y};i(...ie(u,b,M)),u=M,f=b}h=null;break}case"A":{for(;a<o.length&&typeof o[a]=="number";){let g=x(),y=x(),b=x(),M=x()!==0,U=x()!==0,C=x(),T=x();d&&(C+=u.x,T+=u.y);let _={x:C,y:T};i(...$e(u,g,y,b,M,U,_)),u=_}h=null,f=null;break}case"Z":{Math.hypot(u.x-c.x,u.y-c.y)>1e-5&&i({p0:u,p1:c}),u=c,h=null,f=null;break}default:break}}return{segments:t,subpaths:e}}function kt(r,t,e,n=0){if(r.length===0)return[];let i=[],o=0;for(let c of r){let h=Math.hypot(c.p1.x-c.p0.x,c.p1.y-c.p0.y);i.push(h),o+=h}if(o<1e-6)return[];let s=Math.abs(n)>1?n%360/360:n,l=(t+s)%1,a=(e+s)%1;l<0&&(l+=1),a<0&&(a+=1);let u=(c,h)=>{if(c>=h)return[];let f=[],p=0;for(let m=0;m<r.length;m++){let d=r[m],P=i[m],x=p,g=p+P;if(p=g,g<=c||x>=h||P<1e-6)continue;let y=Math.max(0,(c-x)/P),b=Math.min(1,(h-x)/P);if(b>y){let M={x:d.p0.x+(d.p1.x-d.p0.x)*y,y:d.p0.y+(d.p1.y-d.p0.y)*y},U={x:d.p0.x+(d.p1.x-d.p0.x)*b,y:d.p0.y+(d.p1.y-d.p0.y)*b};f.push({p0:M,p1:U})}}return f};if(t===0&&e===1&&n===0)return[...r];if(Math.abs(l-a)<1e-5)return[];if(l<=a)return u(l*o,a*o);{let c=u(l*o,o),h=u(0,a*o);return[...c,...h]}}function Ar(r){if(r===void 0)return;let t=typeof r=="string"?r.trim().split(/[\s,]+/).filter(Boolean).map(Number):[...r];if(!(t.length===0||t.some(e=>!Number.isFinite(e)||e<0))&&!(t.reduce((e,n)=>e+n,0)<=0))return t.length%2===1?[...t,...t]:t}function se(r,t,e=0){if(r.length===0||t.length===0)return r;let n=0;for(let p of t)n+=p;if(n<1e-5)return r;let i=0,o=[];for(let p of r){let m=Math.hypot(p.p1.x-p.p0.x,p.p1.y-p.p0.y);o.push(m),i+=m}let s=[],l=(e%n+n)%n,a=0,u=!0,c=l;for(;c>t[a];)c-=t[a],a=(a+1)%t.length,u=!u;let h=t[a]-c,f=0;for(;f<i;){let p=Math.min(h,i-f);if(u&&p>1e-4){let m=kt(r,f/i,(f+p)/i);s.push(...m)}f+=p,a=(a+1)%t.length,u=!u,h=t[a]}return s}function ae(r,t,e=0,n=0,i=0,o=0){let s=Math.min(r/2,t/2),l=Math.min(e,s),a=Math.min(n,s),u=Math.min(i,s),c=Math.min(o,s);return l===0&&a===0&&u===0&&c===0?`M 0 0 L ${r} 0 L ${r} ${t} L 0 ${t} Z`:[`M ${l} 0`,`L ${r-a} 0`,a>0?`Q ${r} 0 ${r} ${a}`:`L ${r} 0`,`L ${r} ${t-u}`,u>0?`Q ${r} ${t} ${r-u} ${t}`:`L ${r} ${t}`,`L ${c} ${t}`,c>0?`Q 0 ${t} 0 ${t-c}`:`L 0 ${t}`,`L 0 ${l}`,l>0?`Q 0 0 ${l} 0`:"L 0 0","Z"].join(" ")}function Ie(r,t){let e=Math.min(r,t)/2,n=r/2,i=t/2,o=e*.5522847498;return[`M ${n} ${i-e}`,`C ${n+o} ${i-e} ${n+e} ${i-o} ${n+e} ${i}`,`C ${n+e} ${i+o} ${n+o} ${i+e} ${n} ${i+e}`,`C ${n-o} ${i+e} ${n-e} ${i+o} ${n-e} ${i}`,`C ${n-e} ${i-o} ${n-o} ${i-e} ${n} ${i-e}`,"Z"].join(" ")}function ze(r,t){let e=r/2,n=t/2,i=e,o=n,s=e*.5522847498,l=n*.5522847498;return[`M ${i} ${o-n}`,`C ${i+s} ${o-n} ${i+e} ${o-l} ${i+e} ${o}`,`C ${i+e} ${o+l} ${i+s} ${o+n} ${i} ${o+n}`,`C ${i-s} ${o+n} ${i-e} ${o+l} ${i-e} ${o}`,`C ${i-e} ${o-l} ${i-s} ${o-n} ${i} ${o-n}`,"Z"].join(" ")}function Ve(r,t,e=5){let n=Math.max(3,e),i=Math.min(r,t)/2,o=r/2,s=t/2,l=[];for(let a=0;a<n;a++){let u=-Math.PI/2+a*2*Math.PI/n;l.push({x:o+i*Math.cos(u),y:s+i*Math.sin(u)})}return l.map((a,u)=>`${u===0?"M":"L"} ${a.x} ${a.y}`).join(" ")+" Z"}function We(r,t,e=5,n=.5){let i=Math.max(3,e),o=Math.min(r,t)/2,s=o*Math.max(.01,Math.min(.99,n)),l=r/2,a=t/2,u=[];for(let c=0;c<i*2;c++){let h=-Math.PI/2+c*Math.PI/i,f=c%2===0?o:s;u.push({x:l+f*Math.cos(h),y:a+f*Math.sin(h)})}return u.map((c,h)=>`${h===0?"M":"L"} ${c.x} ${c.y}`).join(" ")+" Z"}function Ne(r,t,e=40,n=40,i=20){let o=Math.min(e,t),s=Math.min(n,r),l=Math.min(i,o),a=t/2;return[`M 0 ${a-l/2}`,`L ${r-s} ${a-l/2}`,`L ${r-s} ${a-o/2}`,`L ${r} ${a}`,`L ${r-s} ${a+o/2}`,`L ${r-s} ${a+l/2}`,`L 0 ${a+l/2}`,"Z"].join(" ")}function _t(r){let{shapeType:t,width:e,height:n}=r;switch(t){case"rect":return ae(e,n,r.cornerRadius??0,r.cornerRadius??0,r.cornerRadius??0,r.cornerRadius??0);case"circle":return Ie(e,n);case"ellipse":return ze(e,n);case"polygon":return Ve(e,n,r.polygonSides??5);case"star":return We(e,n,r.starPoints??5,r.starInnerRadiusRatio??.5);case"arrow":return Ne(e,n,r.arrowHeadWidth??40,r.arrowHeadLength??40,r.arrowShaftWidth??20);case"path":return r.path??"";default:return""}}function je(r){if(r.length<3)return[];if(r.length===3)return[r[0],r[1],r[2]];let t=[...r],e=t[t.length-1],n=t[0];if(Math.hypot(e.x-n.x,e.y-n.y)<1e-5&&t.pop(),t.length<3)return[];let i=0;for(let h=0;h<t.length;h++){let f=(h+1)%t.length;i+=t[h].x*t[f].y-t[f].x*t[h].y}i<0&&t.reverse();let o=(h,f,p,m)=>{let d=(p.x-f.x)*(h.y-f.y)-(p.y-f.y)*(h.x-f.x),P=(m.x-p.x)*(h.y-p.y)-(m.y-p.y)*(h.x-p.x),x=(f.x-m.x)*(h.y-m.y)-(f.y-m.y)*(h.x-m.x);return d>=-1e-6&&P>=-1e-6&&x>=-1e-6},s=(h,f,p,m)=>{if((f.x-h.x)*(p.y-h.y)-(f.y-h.y)*(p.x-h.x)<=1e-7)return!1;for(let P of m)if(!(P===h||P===f||P===p)&&o(P,h,f,p))return!1;return!0},l=[],a=[...t],u=0,c=a.length*a.length*2;for(;a.length>3&&u<c;){u++;let h=!1;for(let f=0;f<a.length;f++){let p=a[(f-1+a.length)%a.length],m=a[f],d=a[(f+1)%a.length];if(s(p,m,d,a)){l.push(p,m,d),a.splice(f,1),h=!0;break}}h||(l.push(a[0],a[1],a[2]),a.splice(1,1))}return a.length===3&&l.push(a[0],a[1],a[2]),l}function He(r){let t=new Map,{segments:e,subpaths:n}=oe(r);e.forEach((o,s)=>{let l=n[s]??0,a=t.get(l);a||(a=[o.p0],t.set(l,a)),a.push(o.p1)});let i=[];for(let o of t.values()){let s=o[0],l=o[o.length-1];Math.hypot(l.x-s.x,l.y-s.y)<1e-5&&o.pop(),o.length>=3&&Math.abs(Tt(o))>1e-6&&i.push(o)}return i}var Ye=64,$=new Map;function qe(r){let t=$.get(r);if(t)return $.delete(r),$.set(r,t),t;let e=re(He(r));return $.set(r,e),$.size>Ye&&$.delete($.keys().next().value),e}function le(r){let{shapeType:t,width:e,height:n}=r;if(t==="rect"){let i=r.cornerRadius??0;if(i<=0)return new Float32Array([0,0,e,0,e,n,0,0,e,n,0,n]);let o=ae(e,n,i,i,i,i),l=Dt(o).map(c=>c.p0),a=je(l),u=new Float32Array(a.length*2);for(let c=0;c<a.length;c++)u[c*2]=a[c].x,u[c*2+1]=a[c].y;return u}if(t==="circle"||t==="ellipse"){let i=e/2,o=n/2,s=t==="circle"?Math.min(e,n)/2:e/2,l=t==="circle"?s:n/2,a=48,u=new Float32Array(a*3*2),c=0;for(let h=0;h<a;h++){let f=h*2*Math.PI/a,p=(h+1)*2*Math.PI/a;u[c++]=i,u[c++]=o,u[c++]=i+s*Math.cos(f),u[c++]=o+l*Math.sin(f),u[c++]=i+s*Math.cos(p),u[c++]=o+l*Math.sin(p)}return u}if(t==="polygon"){let i=Math.max(3,r.polygonSides??5),o=Math.min(e,n)/2,s=e/2,l=n/2,a=new Float32Array(i*3*2),u=0;for(let c=0;c<i;c++){let h=-Math.PI/2+c*2*Math.PI/i,f=-Math.PI/2+(c+1)*2*Math.PI/i;a[u++]=s,a[u++]=l,a[u++]=s+o*Math.cos(h),a[u++]=l+o*Math.sin(h),a[u++]=s+o*Math.cos(f),a[u++]=l+o*Math.sin(f)}return a}if(t==="star"){let i=Math.max(3,r.starPoints??5),o=Math.min(e,n)/2,s=o*Math.max(.01,Math.min(.99,r.starInnerRadiusRatio??.5)),l=e/2,a=n/2,u=i*2,c=new Float32Array(u*3*2),h=0;for(let f=0;f<u;f++){let p=-Math.PI/2+f*Math.PI/i,m=-Math.PI/2+(f+1)*Math.PI/i,d=f%2===0?o:s,P=(f+1)%2===0?o:s;c[h++]=l,c[h++]=a,c[h++]=l+d*Math.cos(p),c[h++]=a+d*Math.sin(p),c[h++]=l+P*Math.cos(m),c[h++]=a+P*Math.sin(m)}return c}if(t==="arrow"){let i=Math.min(r.arrowHeadWidth??40,n),o=Math.min(r.arrowHeadLength??40,e),s=Math.min(r.arrowShaftWidth??20,i),l=n/2,a=0,u=e-o,c=e,h=l-s/2,f=l+s/2,p=l-i/2,m=l+i/2;return new Float32Array([a,h,u,h,u,f,a,h,u,f,a,f,u,p,c,l,u,m])}return t==="path"&&r.path?qe(r.path):new Float32Array(0)}v();v();var ue=`
190
+ struct Uniforms {
191
+ transformCol0 : vec4<f32>,
192
+ transformCol1 : vec4<f32>,
193
+ transformCol2 : vec4<f32>,
194
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
195
+ color : vec4<f32>,
196
+ style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
197
+ };
198
+
199
+ @group(0) @binding(0) var<uniform> u : Uniforms;
200
+
201
+ struct VSOut {
202
+ @builtin(position) pos : vec4<f32>,
203
+ @location(0) localPos : vec2<f32>,
204
+ @location(1) @interpolate(flat) p0 : vec2<f32>,
205
+ @location(2) @interpolate(flat) p1 : vec2<f32>,
206
+ };
207
+
208
+ @vertex fn vs(@builtin(vertex_index) corner : u32, @location(0) seg : vec4<f32>) -> VSOut {
209
+ let p0 = seg.xy;
210
+ let p1 = seg.zw;
211
+ let d = p1 - p0;
212
+ let len = max(length(d), 1e-6);
213
+ let padding = u.params.w * 0.5 + 2.0;
214
+ let along = (d / len) * padding;
215
+ let across = vec2<f32>(-along.y, along.x);
216
+ // Triangle strip: p0 \u2212along \u2213across, then p1 +along \u2213across.
217
+ let atEnd = corner >= 2u;
218
+ let side = select(-1.0, 1.0, (corner & 1u) == 1u);
219
+ let xy = select(p0 - along, p1 + along, atEnd) + across * side;
220
+
221
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
222
+ let p = transform * vec3<f32>(xy, 1.0);
223
+ let surfaceSize = u.params.yz;
224
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
225
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
226
+
227
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy, p0, p1);
228
+ }
229
+
230
+ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
231
+ let ba = b - a;
232
+ let len = length(ba);
233
+ if (len < 1e-6) {
234
+ return length(p - a) - radius;
235
+ }
236
+ let dir = ba / len;
237
+ let normal = vec2<f32>(-dir.y, dir.x);
238
+ let pa = p - a;
239
+
240
+ let proj = dot(pa, dir);
241
+ let perp = abs(dot(pa, normal));
242
+
243
+ if (capType > 0.5 && capType < 1.5) {
244
+ // Butt cap: terminates strictly at endpoints a and b
245
+ let dx = max(-proj, proj - len);
246
+ let dy = perp - radius;
247
+ let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
248
+ let inside = min(max(dx, dy), 0.0);
249
+ return outside + inside;
250
+ } else if (capType >= 1.5) {
251
+ // Square cap: extends past endpoints a and b by radius
252
+ let dx = max(-proj - radius, proj - (len + radius));
253
+ let dy = perp - radius;
254
+ let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
255
+ let inside = min(max(dx, dy), 0.0);
256
+ return outside + inside;
257
+ } else {
258
+ // Round cap (default)
259
+ let h = clamp(proj / len, 0.0, 1.0);
260
+ return length(pa - ba * h) - radius;
261
+ }
262
+ }
263
+
264
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
265
+ let radius = u.params.w * 0.5;
266
+ let d = sdSegmentWithCap(in.localPos, in.p0, in.p1, radius, u.style.x);
267
+
268
+ let fw = max(fwidth(d), 1e-5);
269
+ let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
270
+ let alpha = u.color.a * u.params.x * edgeAlpha;
271
+ if (alpha <= 0.0) {
272
+ discard;
273
+ }
274
+
275
+ return vec4<f32>(u.color.rgb * alpha, alpha);
276
+ }
277
+ `;v();var X={color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function L(r){return r.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]})}function st(r,t){let{module:e}=t;return r.createRenderPipeline({label:t.label,layout:r.createPipelineLayout({bindGroupLayouts:[t.uniformLayout]}),vertex:{module:e,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:e,entryPoint:"fs",targets:[{format:t.format,blend:t.blend??X}]},primitive:{topology:t.topology}})}var at=4,lt=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;segmentPool;uniformBindGroupCache=new F;scratchData=new Float32Array(24);constructor(t,e){this.device=t,this.uniformPool=new D(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.segmentPool=new D(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"path.wgsl",code:ue});this.uniformLayout=L(t);let i=(o,s)=>t.createRenderPipeline({label:o,layout:t.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:n,entryPoint:"vs",buffers:[{arrayStride:at*4,stepMode:"instance",attributes:[{shaderLocation:0,offset:0,format:"float32x4"}]}]},fragment:{module:n,entryPoint:"fs",targets:[{format:e,blend:s}]},primitive:{topology:"triangle-strip"}});this.pipeline=i("PathPipeline",X),this.maxPipeline=i("PathPipeline.max",{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}})}resetPools(){this.uniformPool.reset(),this.segmentPool.reset()}drawPath(t,e,n,i,o,s,l,a){this.drawSegments(t,e,Dt(n),i,o,s,l,a)}drawSegments(t,e,n,i,o,s,l,a){let u=n;(a?.trimStart!==void 0||a?.trimEnd!==void 0||a?.trimOffset!==void 0)&&(u=kt(u,a.trimStart??0,a.trimEnd??1,a.trimOffset??0)),a?.strokeDashArray&&a.strokeDashArray.length>0&&(u=se(u,a.strokeDashArray,a.strokeDashOffset??0));let c=new Float32Array(u.length*at),h=0;for(let{p0:x,p1:g}of u){if(Math.hypot(g.x-x.x,g.y-x.y)<1e-6)continue;let y=h++*at;c[y]=x.x,c[y+1]=x.y,c[y+2]=g.x,c[y+3]=g.y}if(h===0)return;let f=A(i),p=this.scratchData;e.packIntoBuffer(p,a?.opacity??1,s,l,a?.transform),p[15]=o,p[16]=f.r,p[17]=f.g,p[18]=f.b,p[19]=f.a,p[20]=a?.strokeLineCap==="butt"?1:a?.strokeLineCap==="square"?2:0,p[21]=0,p[22]=0,p[23]=0;let m=this.uniformPool.getBuffer(this.device,p),d=this.segmentPool.getBuffer(this.device,c.subarray(0,h*at)),P=a?.blendMode==="max";t.setPipeline(P?this.maxPipeline:this.pipeline),t.setBindGroup(0,this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,m)),t.setVertexBuffer(0,d),t.draw(4,h)}destroy(){this.uniformPool.destroy(),this.segmentPool.destroy(),this.uniformBindGroupCache.destroy()}};v();v();var ce=`
278
+ struct Uniforms {
279
+ transformCol0 : vec4<f32>,
280
+ transformCol1 : vec4<f32>,
281
+ transformCol2 : vec4<f32>,
282
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
283
+ };
284
+
285
+ @group(0) @binding(0) var<uniform> u : Uniforms;
286
+ @group(1) @binding(0) var tex : texture_2d<f32>;
287
+ @group(1) @binding(1) var samp : sampler;
288
+
289
+ struct VSOut {
290
+ @builtin(position) pos : vec4<f32>,
291
+ @location(0) uv : vec2<f32>,
292
+ };
293
+
294
+ @vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
295
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
296
+ let p = transform * vec3<f32>(xy, 1.0);
297
+
298
+ let surfaceSize = u.params.yz;
299
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
300
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
301
+
302
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
303
+ }
304
+
305
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
306
+ let opacity = u.params.x;
307
+ let blurAmount = u.params.w;
308
+
309
+ if (blurAmount > 0.01) {
310
+ let fdx = dpdx(in.uv);
311
+ let fdy = dpdy(in.uv);
312
+ let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
313
+ let step = fw * blurAmount * 0.3;
314
+
315
+ var color = vec4<f32>(0.0);
316
+ var totalWeight = 0.0;
317
+ for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
318
+ for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
319
+ let offset = vec2<f32>(x_offset, y_offset) * step;
320
+ let sampleColor = textureSample(tex, samp, in.uv + offset);
321
+ color = color + sampleColor;
322
+ totalWeight = totalWeight + 1.0;
323
+ }
324
+ }
325
+ return (color / totalWeight) * opacity;
326
+ } else {
327
+ let color = textureSample(tex, samp, in.uv);
328
+ return color * opacity;
329
+ }
330
+ }
331
+ `;var ut=class{buffers=[];index=0;size;usage;constructor(t,e){this.size=t,this.usage=e}getBuffer(t,e){if(this.index>=this.buffers.length){let i=t.createBuffer({size:this.size,usage:this.usage});this.buffers.push(i)}let n=this.buffers[this.index++];return t.queue.writeBuffer(n,0,e),n}reset(){this.index=0}destroy(){for(let t of this.buffers)t.destroy();this.buffers=[]}},ct=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new F;uniformData=new Float32Array(16);vertexData=new Float32Array(16);constructor(t,e){this.device=t,this.uniformPool=new ut(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new ut(64,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"quad.wgsl",code:ce});this.uniformLayout=L(t),this.textureLayout=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let i=t.createPipelineLayout({bindGroupLayouts:[this.uniformLayout,this.textureLayout]});this.pipeline=t.createRenderPipeline({label:"QuadPipeline",layout:i,vertex:{module:n,entryPoint:"vs",buffers:[{arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]}]},fragment:{module:n,entryPoint:"fs",targets:[{format:e,blend:X}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l,a,u,c){let h=c?.opacity??1;n.packIntoBuffer(this.uniformData,h,a,u,c?.transform);let f=this.uniformPool.getBuffer(this.device,this.uniformData),p=s.x/i.width,m=s.y/i.height,d=(s.x+s.width)/i.width,P=(s.y+s.height)/i.height;this.vertexData[0]=l.x,this.vertexData[1]=l.y,this.vertexData[2]=p,this.vertexData[3]=m,this.vertexData[4]=l.x+l.width,this.vertexData[5]=l.y,this.vertexData[6]=d,this.vertexData[7]=m,this.vertexData[8]=l.x,this.vertexData[9]=l.y+l.height,this.vertexData[10]=p,this.vertexData[11]=P,this.vertexData[12]=l.x+l.width,this.vertexData[13]=l.y+l.height,this.vertexData[14]=d,this.vertexData[15]=P;let x=this.vertexPool.getBuffer(this.device,this.vertexData),g=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,f),y=e.getBindGroup(this.device,this.textureLayout,i,o);t.setPipeline(this.pipeline),t.setBindGroup(0,g),t.setBindGroup(1,y),t.setVertexBuffer(0,x),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};v();var ht=class{samplers=new Map;lru=[];maxCapacity;constructor(t=32){this.maxCapacity=t}getSampler(t,e={}){let n=Math.max(1,Math.min(16,e.maxAnisotropy??4)),i=`${e.magFilter??"linear"}:${e.minFilter??"linear"}:${e.mipmapFilter??"linear"}:${e.addressModeU??"clamp-to-edge"}:${e.addressModeV??"clamp-to-edge"}:${n}`,o=this.samplers.get(i);if(o)this.lru=this.lru.filter(s=>s!==i);else{if(o=t.createSampler({magFilter:e.magFilter??"linear",minFilter:e.minFilter??"linear",mipmapFilter:e.mipmapFilter??"linear",addressModeU:e.addressModeU??"clamp-to-edge",addressModeV:e.addressModeV??"clamp-to-edge",maxAnisotropy:n}),this.samplers.size>=this.maxCapacity){let s=this.lru.pop();s&&this.samplers.delete(s)}this.samplers.set(i,o)}return this.lru.unshift(i),o}destroy(){this.samplers.clear(),this.lru=[]}};v();v();var ft=`
332
+ struct GradientUniforms {
333
+ info : vec4<f32>, // x = type (0 none, 1 linear, 2 radial, 3 conic), y = stop count
334
+ geom : vec4<f32>, // linear: cx, cy, dir.x / len, dir.y / len; radial: cx, cy, rx, ry; conic: cx, cy, from (rad)
335
+ offsets : array<vec4<f32>, 2>,
336
+ stops : array<vec4<f32>, 8>, // OKLab + alpha
337
+ };
338
+
339
+ fn gradientOklabToSrgb(lab: vec3<f32>) -> vec3<f32> {
340
+ let l = pow(lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z, 3.0);
341
+ let m = pow(lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z, 3.0);
342
+ let s = pow(lab.x - 0.0894841775 * lab.y - 1.291485548 * lab.z, 3.0);
343
+ let lin = clamp(vec3<f32>(
344
+ 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
345
+ -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
346
+ -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
347
+ ), vec3<f32>(0.0), vec3<f32>(1.0));
348
+ let lo = lin * 12.92;
349
+ let hi = 1.055 * pow(lin, vec3<f32>(1.0 / 2.4)) - 0.055;
350
+ return select(hi, lo, lin <= vec3<f32>(0.0031308));
351
+ }
352
+
353
+ /// Position along the gradient (0..1, unclamped for linear/radial) at local point p.
354
+ fn gradientT(g: GradientUniforms, p: vec2<f32>) -> f32 {
355
+ let d = p - g.geom.xy;
356
+ let kind = g.info.x;
357
+ if (kind < 1.5) {
358
+ return dot(d, g.geom.zw) + 0.5;
359
+ }
360
+ if (kind < 2.5) {
361
+ return length(d / max(g.geom.zw, vec2<f32>(1e-4)));
362
+ }
363
+ let a = atan2(d.x, -d.y) - g.geom.z;
364
+ return fract(a / 6.28318530718);
365
+ }
366
+
367
+ /// Straight sRGB color + alpha of the gradient at local point p.
368
+ fn evalGradient(g: GradientUniforms, p: vec2<f32>) -> vec4<f32> {
369
+ var offs = g.offsets;
370
+ var stops = g.stops;
371
+ let n = i32(g.info.y);
372
+ let t = gradientT(g, p);
373
+ var lab = stops[0];
374
+ if (t > offs[0].x) {
375
+ lab = stops[n - 1];
376
+ for (var i = 1; i < 8; i++) {
377
+ if (i >= n) {
378
+ break;
379
+ }
380
+ let b = offs[i / 4][i % 4];
381
+ if (t <= b) {
382
+ let a = offs[(i - 1) / 4][(i - 1) % 4];
383
+ let f = select(1.0, (t - a) / (b - a), b - a > 1e-5);
384
+ lab = mix(stops[i - 1], stops[i], clamp(f, 0.0, 1.0));
385
+ break;
386
+ }
387
+ }
388
+ }
389
+ return vec4<f32>(gradientOklabToSrgb(lab.xyz), lab.w);
390
+ }
391
+ `;v();var he=`
392
+ ${ft}
393
+
394
+ struct Uniforms {
395
+ transformCol0 : vec4<f32>,
396
+ transformCol1 : vec4<f32>,
397
+ transformCol2 : vec4<f32>,
398
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = unused
399
+ color : vec4<f32>, // solid color (gradient.info.x = 0)
400
+ gradient : GradientUniforms,
401
+ };
402
+
403
+ @group(0) @binding(0) var<uniform> u : Uniforms;
404
+
405
+ struct VSOut {
406
+ @builtin(position) pos : vec4<f32>,
407
+ @location(0) localPos : vec2<f32>,
408
+ };
409
+
410
+ @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
411
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
412
+ let p = transform * vec3<f32>(xy, 1.0);
413
+
414
+ let surfaceSize = u.params.yz;
415
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
416
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
417
+
418
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
419
+ }
420
+
421
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
422
+ var outColor = u.color;
423
+ if (u.gradient.info.x > 0.5) {
424
+ outColor = evalGradient(u.gradient, in.localPos);
425
+ }
426
+
427
+ let alpha = outColor.a * u.params.x;
428
+ if (alpha <= 0.0) {
429
+ discard;
430
+ }
431
+
432
+ return vec4<f32>(outColor.rgb * alpha, alpha);
433
+ }
434
+ `;v();var Ze={linear:1,radial:2,conic:3};function pt(r){return typeof r=="string"&&r.includes("gradient(")?Et(r):null}function mt(r,t,e,n){if(e.fill(0,n,n+48),!r)return;let i=$t(r.stops),o=Math.max(t.width,.001),s=Math.max(t.height,.001),l=t.x+r.center[0]*o,a=t.y+r.center[1]*s;if(e[n]=Ze[r.type],e[n+1]=i.length,e[n+4]=r.type==="linear"?t.x+o/2:l,e[n+5]=r.type==="linear"?t.y+s/2:a,r.type==="linear"){let u=r.angle*Math.PI/180,c=Math.sin(u),h=-Math.cos(u),f=Math.abs(o*c)+Math.abs(s*h);e[n+6]=c/f,e[n+7]=h/f}else if(r.type==="radial"){let u,c;r.radius?[u,c]=r.radius:[u,c]=Xe(r,l-t.x,t.x+o-l,a-t.y,t.y+s-a),e[n+6]=u,e[n+7]=c}else e[n+6]=r.from*Math.PI/180;i.forEach((u,c)=>{e[n+8+c]=u.offset}),K(i).forEach((u,c)=>{e.set(u,n+16+c*4)})}function Xe(r,t,e,n,i){let o=r.extent??"farthest-corner",s=o.startsWith("farthest"),l=s?Math.max(t,e):Math.min(t,e),a=s?Math.max(n,i):Math.min(n,i),u=r.shape==="circle";if(o.endsWith("side")){if(!u)return[l,a];let c=s?Math.max(l,a):Math.min(l,a);return[c,c]}if(u){let c=Math.hypot(l,a);return[c,c]}return[l*Math.SQRT2,a*Math.SQRT2]}var dt=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(68);constructor(t,e){this.device=t,this.uniformPool=new D(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new D(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"shape-fill.wgsl",code:he});this.uniformLayout=L(t),this.pipeline=st(t,{label:"ShapeFillPipeline",module:n,uniformLayout:this.uniformLayout,format:e,topology:"triangle-list"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l,a){if(n.length<6||i.type==="none")return;let u=a?.opacity??1;e.packIntoBuffer(this.uniformData,u,s,l,a?.transform),this.uniformData[15]=0;let c=pt(i.color);if(c)this.uniformData.fill(0,16,20),mt(c,o,this.uniformData,20);else{let p=A(i.color??"#ffffff");this.uniformData[16]=p.r,this.uniformData[17]=p.g,this.uniformData[18]=p.b,this.uniformData[19]=p.a,this.packTwoColorGradient(i,o,p)}let h=this.uniformPool.getBuffer(this.device,this.uniformData),f=this.vertexPool.getBuffer(this.device,n);t.setPipeline(this.pipeline),t.setBindGroup(0,this.device.createBindGroup({layout:this.uniformLayout,entries:[{binding:0,resource:{buffer:h}}]})),t.setVertexBuffer(0,f),t.draw(n.length/2)}packTwoColorGradient(t,e,n){if(this.uniformData.fill(0,20,68),t.type!=="linear"&&t.type!=="radial")return;let o=A(t.color2??t.color??"#ffffff"),s=this.uniformData;if(t.type==="linear"){let a=t.startX??e.x,u=t.startY??e.y,c=t.endX??e.x+e.width,h=t.endY??e.y+e.height,f=c-a,p=h-u,m=Math.max(f*f+p*p,1e-6);s.set([1,2,0,0,(a+c)/2,(u+h)/2,f/m,p/m],20)}else{let a=t.radius??Math.max(e.width,e.height)/2;s.set([2,2,0,0,t.cx??e.x+e.width/2,t.cy??e.y+e.height/2,a,a],20)}s[28]=0,s[29]=1;let l=K([{offset:0,color:[n.r,n.g,n.b,n.a]},{offset:1,color:[o.r,o.g,o.b,o.a]}]);s.set(l[0],36),s.set(l[1],40)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};v();v();var fe=`
435
+ ${ft}
436
+
437
+ struct Uniforms {
438
+ transformCol0 : vec4<f32>,
439
+ transformCol1 : vec4<f32>,
440
+ transformCol2 : vec4<f32>,
441
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
442
+ color : vec4<f32>,
443
+ rect : vec4<f32>, // x, y, width, height
444
+ gradient : GradientUniforms, // info.x = 0: solid \`color\`
445
+ };
446
+
447
+ @group(0) @binding(0) var<uniform> u : Uniforms;
448
+
449
+ struct VSOut {
450
+ @builtin(position) pos : vec4<f32>,
451
+ @location(0) localPos : vec2<f32>,
452
+ };
453
+
454
+ @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
455
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
456
+ let p = transform * vec3<f32>(xy, 1.0);
457
+
458
+ let surfaceSize = u.params.yz;
459
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
460
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
461
+
462
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
463
+ }
464
+
465
+ fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
466
+ let q = abs(p) - b + r;
467
+ return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
468
+ }
469
+
470
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
471
+ let center = u.rect.xy + u.rect.zw * 0.5;
472
+ let halfSize = u.rect.zw * 0.5;
473
+ let radius = u.params.w;
474
+
475
+ let d = sdRoundedRect(in.localPos - center, halfSize, radius);
476
+ // Rounded shapes: one device pixel of coverage centred on the edge (the
477
+ // quad has room for its outer half). Square ones keep their exact edge.
478
+ let fw = max(fwidth(d), 1e-4);
479
+ var edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
480
+ if (radius > 0.0) {
481
+ edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
482
+ }
483
+ var fill = u.color;
484
+ if (u.gradient.info.x > 0.5) {
485
+ fill = evalGradient(u.gradient, in.localPos);
486
+ }
487
+ let alpha = fill.a * u.params.x * edgeAlpha;
488
+ if (alpha <= 0.0) {
489
+ discard;
490
+ }
491
+
492
+ return vec4<f32>(fill.rgb * alpha, alpha);
493
+ }
494
+ `;var xt=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new F;uniformData=new Float32Array(72);vertexData=new Float32Array(8);constructor(t,e){this.device=t,this.uniformPool=new D(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new D(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let n=t.createShaderModule({label:"solid.wgsl",code:fe});this.uniformLayout=L(t),this.pipeline=st(t,{label:"SolidPipeline",module:n,uniformLayout:this.uniformLayout,format:e,topology:"triangle-strip"})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(t,e,n,i,o,s,l=0,a){let u=pt(i),c=u?{r:0,g:0,b:0,a:1}:A(i),h=a?.opacity??1;e.packIntoBuffer(this.uniformData,h,o,s,a?.transform),this.uniformData[15]=l,this.uniformData[16]=c.r,this.uniformData[17]=c.g,this.uniformData[18]=c.b,this.uniformData[19]=c.a,this.uniformData[20]=n.x,this.uniformData[21]=n.y,this.uniformData[22]=n.width,this.uniformData[23]=n.height,mt(u,n,this.uniformData,24);let f=this.uniformPool.getBuffer(this.device,this.uniformData),p=0;if(l>0){let b=a?.transform?e.getCurrent().multiply(a.transform):e.getCurrent(),M=Math.min(Math.hypot(b.a,b.b),Math.hypot(b.c,b.d));p=2/Math.max(M,.001)}let m=n.x-p,d=n.y-p,P=n.x+n.width+p,x=n.y+n.height+p;this.vertexData[0]=m,this.vertexData[1]=d,this.vertexData[2]=P,this.vertexData[3]=d,this.vertexData[4]=m,this.vertexData[5]=x,this.vertexData[6]=P,this.vertexData[7]=x;let g=this.vertexPool.getBuffer(this.device,this.vertexData);t.setPipeline(this.pipeline);let y=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,f);t.setBindGroup(0,y),t.setVertexBuffer(0,g),t.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};function Ke(r){if(Array.isArray(r)){let n=r[3]??1;return[r[0]*n,r[1]*n,r[2]*n,n]}if("r"in r){let n=r.a??1;return{r:r.r*n,g:r.g*n,b:r.b*n,a:n}}let t=Array.from(r),e=t[3]??1;return[t[0]*e,t[1]*e,t[2]*e,e]}var pe=new WeakMap;function Hn(r,t){let e=pe.get(r);return(!e||e.format!==t||e.isDestroyed)&&(e=new Lt(r,t),pe.set(r,e)),e.resetPools(),e}var Lt=class{device;transformStack=new Wt;clipStack=new tt;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new J;samplerCache=new ht;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(t,e){this.device=t,this.format=e,this.quadPipeline=new ct(t,e),this.solidPipeline=new xt(t,e),this.shapeFillPipeline=new dt(t,e),this.pathPipeline=new lt(t,e),this.effectPipeline=new Q(t,e),this.slugPipeline=new Nt(t,e)}beginFrame(t,e,n={r:0,g:0,b:0,a:0},i,o,s="clear"){this.surfaceWidth=i,this.surfaceHeight=o,t!==this.lastEncoder&&(this.lastEncoder=t,this.resetPools());let l=t.beginRenderPass({colorAttachments:[{view:e,clearValue:Ke(n),loadOp:s,storeOp:"store"}]});return this.clipStack.applyScissorToPass(l,i,o),l}endFrame(t){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),bt.flushRetired(this.device),bt.prune(this.device)}drawTexture(t,e,n,i){let o=this.samplerCache.getSampler(this.device),s={x:0,y:0,width:e.width,height:e.height};this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,o,s,n,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(t,e,n,i,o){let s=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(t,this.bindGroupCache,this.transformStack,e,s,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawRect(t,e,n,i=0,o){let s=0,l=o;typeof i=="object"&&i!==null?(l=i,s=0):typeof i=="number"&&(s=i),this.rasterDrawCount++,this.solidPipeline.draw(t,this.transformStack,e,n,this.surfaceWidth,this.surfaceHeight,s,l)}drawPath(t,e,n,i,o){this.rasterDrawCount++,this.pathPipeline.drawPath(t,this.transformStack,e,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawShapeFill(t,e,n,i,o){this.rasterDrawCount++,this.shapeFillPipeline.draw(t,this.transformStack,e,n,i,this.surfaceWidth,this.surfaceHeight,o)}drawShape(t,e,n,i,o){let s={x:0,y:0,width:e.width,height:e.height};if(n&&n.type!=="none"){let l=le(e);if(l.length>0&&(this.drawShapeFill(t,l,n,s,o),(!i||!i.width||i.width<=0)&&(n.type??"solid")==="solid"&&n.color)){let a=_t(e);if(a){let u=this.transformStack.getCurrent(),c=1/Pt(o?.transform?u.multiply(o.transform):u);this.drawPath(t,a,n.color,c,{...o,strokeLineCap:"round"})}}}if(i&&i.width&&i.width>0&&i.color){let l=_t(e);l&&this.drawPath(t,l,i.color,i.width,{...o,strokeLineCap:i.cap,trimStart:i.trimStart,trimEnd:i.trimEnd,trimOffset:i.trimOffset,strokeDashArray:i.dashArray,strokeDashOffset:i.dashOffset})}}drawRRect(t,e,n,i){this.drawRect(t,e.rect,n,e.rx,i)}getTemporaryTexture(t,e,n){return this.effectPipeline.getTexture(this.device,t,e,this.format,n)}getTemporaryBuffer(t){return this.effectPipeline.getBuffer(this.device,t)}composite(t,e,n,i,o){return this.effectPipeline.composite(t,this.bindGroupCache,this.samplerCache,e,n,i,this.format,o)}applyMotionBlur(t,e,n,i,o=180,s=16,l){return this.effectPipeline.applyMotionBlur(t,this.bindGroupCache,this.samplerCache,e,n,i,o,s,this.format,l)}getCurrentTransform(){return this.transformStack.getCurrent()}getTransformStack(){return this.transformStack}getSurfaceWidth(){return this.surfaceWidth}getSurfaceHeight(){return this.surfaceHeight}pushIdentity(){let t=this.transformStack.getCurrent();this.pushTransform(t.inverse())}pushTransform(t){this.transformStack.push(t)}popTransform(){this.transformStack.pop()}pushScissor(t){this.clipStack.pushScissor(t,this.surfaceWidth,this.surfaceHeight)}pushScissorIntersect(t){let e=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(!e){this.pushScissor(t);return}let n=Math.max(t.x,e.x),i=Math.max(t.y,e.y),o=Math.min(t.x+t.width,e.x+e.width),s=Math.min(t.y+t.height,e.y+e.height);this.pushScissor({x:n,y:i,width:Math.max(0,o-n),height:Math.max(0,s-i)})}pushScissorLocal(t){let e=this.transformStack.getCurrent(),n=[e.transformPoint(new DOMPoint(t.x,t.y)),e.transformPoint(new DOMPoint(t.x+t.width,t.y)),e.transformPoint(new DOMPoint(t.x,t.y+t.height)),e.transformPoint(new DOMPoint(t.x+t.width,t.y+t.height))],i=n.map(h=>h.x),o=n.map(h=>h.y),s=Math.min(...i),l=Math.min(...o),a=Math.max(...i)-s,u=Math.max(...o)-l,c=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(c){let h=Math.max(s,c.x),f=Math.max(l,c.y),p=Math.min(s+a,c.x+c.width),m=Math.min(l+u,c.y+c.height);s=h,l=f,a=Math.max(0,p-h),u=Math.max(0,m-f)}this.clipStack.pushScissor({x:s,y:l,width:a,height:u},this.surfaceWidth,this.surfaceHeight)}popScissor(){this.clipStack.popScissor()}suspendScissors(){let t=this.clipStack.saveScissors();return this.clipStack.clearScissors(),t}resumeScissors(t){this.clipStack.restoreScissors(t)}pushStencilClip(t){this.clipStack.pushStencilClip(t)}popStencilClip(){this.clipStack.popStencilClip()}destroy(){this.isDestroyed=!0,this.transformStack.destroy(),this.clipStack.destroy(),this.bindGroupCache.destroy(),this.samplerCache.destroy(),this.quadPipeline.destroy(),this.solidPipeline.destroy(),this.shapeFillPipeline.destroy(),this.pathPipeline.destroy(),this.effectPipeline.destroy(),this.slugPipeline.destroy(),this.lastEncoder=null}};v();function Qe(r){return Vt(r)??zt(r)??gt(r)}function ti(r){let t=Qe(r);return typeof t=="string"?t:gt(r)}export{tr as a,er as b,rr as c,nr as d,ir as e,or as f,sr as g,ar as h,cr as i,hr as j,fr as k,pr as l,me as m,xr as n,Q as o,ot as p,$e as q,Dt as r,Ar as s,_t as t,X as u,ht as v,Hn as w,Lt as x,Qe as y,ti as z};