framefields 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/LICENCE +202 -0
  2. package/README.md +740 -0
  3. package/dist/audio/index.d.mts +5 -0
  4. package/dist/audio/index.mjs +14 -0
  5. package/dist/audio-Dvwwz8xU.d.mts +37 -0
  6. package/dist/audio-Dvwwz8xU.d.mts.map +1 -0
  7. package/dist/audio-TAvPwzLR.mjs +214 -0
  8. package/dist/audio-TAvPwzLR.mjs.map +1 -0
  9. package/dist/audio-x28ZgQBP.mjs +85 -0
  10. package/dist/audio-x28ZgQBP.mjs.map +1 -0
  11. package/dist/chunk-GMkBE123.mjs +47 -0
  12. package/dist/client-C74hb7fy.mjs +66 -0
  13. package/dist/client-C74hb7fy.mjs.map +1 -0
  14. package/dist/dist-1iUYuPct.mjs +1859 -0
  15. package/dist/dist-1iUYuPct.mjs.map +1 -0
  16. package/dist/dist-Bx6J0VcM.mjs +1859 -0
  17. package/dist/dist-Bx6J0VcM.mjs.map +1 -0
  18. package/dist/dist-C_hjvkdN.mjs +2220 -0
  19. package/dist/dist-C_hjvkdN.mjs.map +1 -0
  20. package/dist/dist-DKm2IyEJ.mjs +94 -0
  21. package/dist/dist-DKm2IyEJ.mjs.map +1 -0
  22. package/dist/dist-cjs-B5EVqDFp.mjs +85 -0
  23. package/dist/dist-cjs-B5EVqDFp.mjs.map +1 -0
  24. package/dist/dist-cjs-BGJkdexX.mjs +437 -0
  25. package/dist/dist-cjs-BGJkdexX.mjs.map +1 -0
  26. package/dist/dist-cjs-BKmGCgtm.mjs +9069 -0
  27. package/dist/dist-cjs-BKmGCgtm.mjs.map +1 -0
  28. package/dist/dist-cjs-BUc0_kg-.mjs +1091 -0
  29. package/dist/dist-cjs-BUc0_kg-.mjs.map +1 -0
  30. package/dist/dist-cjs-BUwe2XhR.mjs +153 -0
  31. package/dist/dist-cjs-BUwe2XhR.mjs.map +1 -0
  32. package/dist/dist-cjs-BWgoUCXJ.mjs +137 -0
  33. package/dist/dist-cjs-BWgoUCXJ.mjs.map +1 -0
  34. package/dist/dist-cjs-CmZEMtO6.mjs +6 -0
  35. package/dist/dist-cjs-D7kEM-Mj.mjs +181 -0
  36. package/dist/dist-cjs-D7kEM-Mj.mjs.map +1 -0
  37. package/dist/dist-cjs-DFUmy89O.mjs +48 -0
  38. package/dist/dist-cjs-DFUmy89O.mjs.map +1 -0
  39. package/dist/dist-cjs-Df7144zM.mjs +209 -0
  40. package/dist/dist-cjs-Df7144zM.mjs.map +1 -0
  41. package/dist/dist-cjs-DgxjcvBN.mjs +98 -0
  42. package/dist/dist-cjs-DgxjcvBN.mjs.map +1 -0
  43. package/dist/dist-cjs-DsMdld8l.mjs +5015 -0
  44. package/dist/dist-cjs-DsMdld8l.mjs.map +1 -0
  45. package/dist/dist-cjs-Dzs5P3K0.mjs +51 -0
  46. package/dist/dist-cjs-Dzs5P3K0.mjs.map +1 -0
  47. package/dist/dist-cjs-ECMuIF57.mjs +323 -0
  48. package/dist/dist-cjs-ECMuIF57.mjs.map +1 -0
  49. package/dist/dist-cjs-lYvO8aDo.mjs +64 -0
  50. package/dist/dist-cjs-lYvO8aDo.mjs.map +1 -0
  51. package/dist/dist-cjs-qEJrwjGk.mjs +66 -0
  52. package/dist/dist-cjs-qEJrwjGk.mjs.map +1 -0
  53. package/dist/dist-cjs-x5cwlqA5.mjs +43 -0
  54. package/dist/dist-cjs-x5cwlqA5.mjs.map +1 -0
  55. package/dist/dist-gjHmorxL.mjs +27479 -0
  56. package/dist/dist-gjHmorxL.mjs.map +1 -0
  57. package/dist/effects/index.d.mts +5 -0
  58. package/dist/effects/index.mjs +35 -0
  59. package/dist/effects-CHWORCYd.mjs +811 -0
  60. package/dist/effects-CHWORCYd.mjs.map +1 -0
  61. package/dist/event-streams-D-APZ7Ke.mjs +204 -0
  62. package/dist/event-streams-D-APZ7Ke.mjs.map +1 -0
  63. package/dist/fonts/index.d.mts +2 -0
  64. package/dist/fonts/index.mjs +3 -0
  65. package/dist/fonts-DrGTBJJk.mjs +188 -0
  66. package/dist/fonts-DrGTBJJk.mjs.map +1 -0
  67. package/dist/index-B0BNPEoH.d.mts +2117 -0
  68. package/dist/index-B0BNPEoH.d.mts.map +1 -0
  69. package/dist/index-BMVVmc4G.d.mts +72 -0
  70. package/dist/index-BMVVmc4G.d.mts.map +1 -0
  71. package/dist/index-D1ZsMpke.d.mts +264 -0
  72. package/dist/index-D1ZsMpke.d.mts.map +1 -0
  73. package/dist/index-D2jDC7O5.d.mts +3643 -0
  74. package/dist/index-D2jDC7O5.d.mts.map +1 -0
  75. package/dist/index-D2wJqSl5.d.mts +114 -0
  76. package/dist/index-D2wJqSl5.d.mts.map +1 -0
  77. package/dist/index-DKFGNyMB.d.mts +309 -0
  78. package/dist/index-DKFGNyMB.d.mts.map +1 -0
  79. package/dist/index-DiSKzDGR.d.mts +65 -0
  80. package/dist/index-DiSKzDGR.d.mts.map +1 -0
  81. package/dist/index.d.mts +4425 -0
  82. package/dist/index.d.mts.map +1 -0
  83. package/dist/index.mjs +2623 -0
  84. package/dist/index.mjs.map +1 -0
  85. package/dist/package-C58KmGKw.mjs +6 -0
  86. package/dist/package-C58KmGKw.mjs.map +1 -0
  87. package/dist/preview/index.d.mts +90 -0
  88. package/dist/preview/index.d.mts.map +1 -0
  89. package/dist/preview/index.mjs +15 -0
  90. package/dist/preview-engine/audio.mjs +1 -0
  91. package/dist/preview-engine/child_process-AIL2NBWS.mjs +1 -0
  92. package/dist/preview-engine/chunk-24P6DAB3.mjs +1 -0
  93. package/dist/preview-engine/chunk-37EFVZWT.mjs +1 -0
  94. package/dist/preview-engine/chunk-3O5OKR6D.mjs +223 -0
  95. package/dist/preview-engine/chunk-47VT677S.mjs +8 -0
  96. package/dist/preview-engine/chunk-4BEJJKEU.mjs +315 -0
  97. package/dist/preview-engine/chunk-4GEWSUX5.mjs +1 -0
  98. package/dist/preview-engine/chunk-55CCFPUX.mjs +237 -0
  99. package/dist/preview-engine/chunk-5JD65JSJ.mjs +110 -0
  100. package/dist/preview-engine/chunk-5UP7FSGT.mjs +294 -0
  101. package/dist/preview-engine/chunk-5XDHHOF2.mjs +367 -0
  102. package/dist/preview-engine/chunk-6YJP57MZ.mjs +729 -0
  103. package/dist/preview-engine/chunk-6ZOXGAYA.mjs +112 -0
  104. package/dist/preview-engine/chunk-AOLAHYVV.mjs +529 -0
  105. package/dist/preview-engine/chunk-B6PLCMBM.mjs +1 -0
  106. package/dist/preview-engine/chunk-BJKH76OM.mjs +264 -0
  107. package/dist/preview-engine/chunk-BUIQ5TUH.mjs +104 -0
  108. package/dist/preview-engine/chunk-BVF64D6H.mjs +1 -0
  109. package/dist/preview-engine/chunk-CA5N7JRZ.mjs +138 -0
  110. package/dist/preview-engine/chunk-CNSHAFEA.mjs +1 -0
  111. package/dist/preview-engine/chunk-CURR5X7D.mjs +1 -0
  112. package/dist/preview-engine/chunk-CVGM2U4J.mjs +47 -0
  113. package/dist/preview-engine/chunk-CYY366IE.mjs +1 -0
  114. package/dist/preview-engine/chunk-D5PHI6ET.mjs +109 -0
  115. package/dist/preview-engine/chunk-D7MZHP2Y.mjs +275 -0
  116. package/dist/preview-engine/chunk-DPPH3NK2.mjs +182 -0
  117. package/dist/preview-engine/chunk-DPST2XLC.mjs +418 -0
  118. package/dist/preview-engine/chunk-DRLEOHN5.mjs +1 -0
  119. package/dist/preview-engine/chunk-EDIZNO3P.mjs +1 -0
  120. package/dist/preview-engine/chunk-EHIIT4ZR.mjs +52 -0
  121. package/dist/preview-engine/chunk-FKZ4XXPE.mjs +1 -0
  122. package/dist/preview-engine/chunk-G3HW4VER.mjs +60 -0
  123. package/dist/preview-engine/chunk-G76HSKOS.mjs +184 -0
  124. package/dist/preview-engine/chunk-GYG2IIBR.mjs +1 -0
  125. package/dist/preview-engine/chunk-H2F5NVQ6.mjs +63 -0
  126. package/dist/preview-engine/chunk-H5BPCY7N.mjs +188 -0
  127. package/dist/preview-engine/chunk-HAXK42HG.mjs +997 -0
  128. package/dist/preview-engine/chunk-HXMDPMLB.mjs +1 -0
  129. package/dist/preview-engine/chunk-HYBAPT6I.mjs +1 -0
  130. package/dist/preview-engine/chunk-I4FH6HYU.mjs +73 -0
  131. package/dist/preview-engine/chunk-IYVN2QEL.mjs +1 -0
  132. package/dist/preview-engine/chunk-JPXQPP6J.mjs +1 -0
  133. package/dist/preview-engine/chunk-JWNHTRED.mjs +164 -0
  134. package/dist/preview-engine/chunk-KZOLCZIV.mjs +103 -0
  135. package/dist/preview-engine/chunk-L62MRHGZ.mjs +89 -0
  136. package/dist/preview-engine/chunk-LEEZXHQO.mjs +117 -0
  137. package/dist/preview-engine/chunk-LKYN3BM2.mjs +1 -0
  138. package/dist/preview-engine/chunk-LP3EP33S.mjs +610 -0
  139. package/dist/preview-engine/chunk-M2GRYRLM.mjs +111 -0
  140. package/dist/preview-engine/chunk-MC7TZZLD.mjs +134 -0
  141. package/dist/preview-engine/chunk-MT2DZQHO.mjs +1 -0
  142. package/dist/preview-engine/chunk-MTJHQATU.mjs +1 -0
  143. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +340 -0
  144. package/dist/preview-engine/chunk-N4PWLBZ7.mjs +5 -0
  145. package/dist/preview-engine/chunk-NQZKBFC6.mjs +40 -0
  146. package/dist/preview-engine/chunk-NWRSVVTF.mjs +186 -0
  147. package/dist/preview-engine/chunk-P3HBP725.mjs +1 -0
  148. package/dist/preview-engine/chunk-PIAJWALT.mjs +1 -0
  149. package/dist/preview-engine/chunk-PJ3DVG45.mjs +1 -0
  150. package/dist/preview-engine/chunk-QP2NI4XD.mjs +82 -0
  151. package/dist/preview-engine/chunk-SA3JUR6D.mjs +52 -0
  152. package/dist/preview-engine/chunk-SRT2OCQW.mjs +1 -0
  153. package/dist/preview-engine/chunk-SWD76532.mjs +98 -0
  154. package/dist/preview-engine/chunk-SXX7HX34.mjs +191 -0
  155. package/dist/preview-engine/chunk-SZ7YRPKO.mjs +3 -0
  156. package/dist/preview-engine/chunk-TMRLZV5X.mjs +1 -0
  157. package/dist/preview-engine/chunk-U446SQP3.mjs +292 -0
  158. package/dist/preview-engine/chunk-UDNCEHUI.mjs +141 -0
  159. package/dist/preview-engine/chunk-V3H7WWOT.mjs +271 -0
  160. package/dist/preview-engine/chunk-V7ZVVUQU.mjs +108 -0
  161. package/dist/preview-engine/chunk-VJGK7MLJ.mjs +3 -0
  162. package/dist/preview-engine/chunk-VSSB73UU.mjs +58 -0
  163. package/dist/preview-engine/chunk-VXUJWPIK.mjs +1 -0
  164. package/dist/preview-engine/chunk-XD4GKD6H.mjs +5 -0
  165. package/dist/preview-engine/chunk-XKO4RYKN.mjs +3 -0
  166. package/dist/preview-engine/chunk-XOEEGC4Z.mjs +1 -0
  167. package/dist/preview-engine/chunk-YAQFFQPG.mjs +1 -0
  168. package/dist/preview-engine/chunk-YKMBRUAE.mjs +1 -0
  169. package/dist/preview-engine/chunk-YSTLMWCG.mjs +1 -0
  170. package/dist/preview-engine/chunk-Z4ERCLNF.mjs +1 -0
  171. package/dist/preview-engine/chunk-ZEYUXJIV.mjs +1 -0
  172. package/dist/preview-engine/chunk-ZX6APG6E.mjs +117 -0
  173. package/dist/preview-engine/effects.mjs +1 -0
  174. package/dist/preview-engine/esbuild-GWV7CM7D.mjs +1 -0
  175. package/dist/preview-engine/fonts.mjs +1 -0
  176. package/dist/preview-engine/framefields.mjs +1959 -0
  177. package/dist/preview-engine/onnxruntime-node-56GSZEH3.mjs +1 -0
  178. package/dist/preview-engine/player.mjs +155 -0
  179. package/dist/preview-engine/renderers-2AUSIYZN.mjs +1 -0
  180. package/dist/preview-engine/renderers-2QN6KZJP.mjs +1 -0
  181. package/dist/preview-engine/renderers-32SKW7ML.mjs +1 -0
  182. package/dist/preview-engine/renderers-5QYK6766.mjs +1 -0
  183. package/dist/preview-engine/renderers-6BJA6MSU.mjs +251 -0
  184. package/dist/preview-engine/renderers-6QAF3LQ2.mjs +1 -0
  185. package/dist/preview-engine/renderers-7AO5746S.mjs +296 -0
  186. package/dist/preview-engine/renderers-AFYKNM6N.mjs +1 -0
  187. package/dist/preview-engine/renderers-AGMH5CRH.mjs +1 -0
  188. package/dist/preview-engine/renderers-AHSGP6LY.mjs +126 -0
  189. package/dist/preview-engine/renderers-ASTBICLA.mjs +1 -0
  190. package/dist/preview-engine/renderers-BHVPLYNN.mjs +1 -0
  191. package/dist/preview-engine/renderers-D7PVQFVU.mjs +1 -0
  192. package/dist/preview-engine/renderers-DB4ABTNA.mjs +1 -0
  193. package/dist/preview-engine/renderers-F2NFJI5L.mjs +1 -0
  194. package/dist/preview-engine/renderers-FI7YHNLY.mjs +1 -0
  195. package/dist/preview-engine/renderers-GBHULMPH.mjs +1 -0
  196. package/dist/preview-engine/renderers-GUKQUMGG.mjs +55 -0
  197. package/dist/preview-engine/renderers-HGT7QDY3.mjs +1 -0
  198. package/dist/preview-engine/renderers-HOYLA7ZK.mjs +1 -0
  199. package/dist/preview-engine/renderers-KKI2D3MZ.mjs +1 -0
  200. package/dist/preview-engine/renderers-KRAJNV4E.mjs +1 -0
  201. package/dist/preview-engine/renderers-KUGZKSVE.mjs +1 -0
  202. package/dist/preview-engine/renderers-L2EQQIOC.mjs +1 -0
  203. package/dist/preview-engine/renderers-LK3NRMGR.mjs +1 -0
  204. package/dist/preview-engine/renderers-LX654SZ3.mjs +1 -0
  205. package/dist/preview-engine/renderers-MCFQFYEL.mjs +1 -0
  206. package/dist/preview-engine/renderers-O6HOYIPS.mjs +1 -0
  207. package/dist/preview-engine/renderers-OEVXCGE2.mjs +1 -0
  208. package/dist/preview-engine/renderers-QVD6C4CS.mjs +1 -0
  209. package/dist/preview-engine/renderers-R3XEYD5V.mjs +248 -0
  210. package/dist/preview-engine/renderers-RBFWJWVM.mjs +1 -0
  211. package/dist/preview-engine/renderers-RX3VLVLO.mjs +1 -0
  212. package/dist/preview-engine/renderers-SM6JP64K.mjs +1 -0
  213. package/dist/preview-engine/renderers-TKMAATVS.mjs +1 -0
  214. package/dist/preview-engine/renderers-UGZUPONY.mjs +1 -0
  215. package/dist/preview-engine/renderers-UTFXZE3G.mjs +1 -0
  216. package/dist/preview-engine/renderers-UWPH7HBH.mjs +1 -0
  217. package/dist/preview-engine/renderers-UZGECFVO.mjs +1 -0
  218. package/dist/preview-engine/renderers-VGU3LNLT.mjs +1 -0
  219. package/dist/preview-engine/renderers-W3VVM5HB.mjs +1 -0
  220. package/dist/preview-engine/renderers-WJUTT5BB.mjs +1 -0
  221. package/dist/preview-engine/renderers-XA2M4YXK.mjs +1 -0
  222. package/dist/preview-engine/renderers-XIHRFEFQ.mjs +1 -0
  223. package/dist/preview-engine/renderers-XJTA5MFG.mjs +1 -0
  224. package/dist/preview-engine/renderers-XLTY5APF.mjs +1 -0
  225. package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +1 -0
  226. package/dist/preview-engine/renderers-YKUQUCTO.mjs +124 -0
  227. package/dist/preview-engine/renderers-YVN3EIOP.mjs +1 -0
  228. package/dist/preview-engine/renderers-YWRP23SZ.mjs +125 -0
  229. package/dist/preview-engine/renderers-ZPWOUWZJ.mjs +120 -0
  230. package/dist/preview-engine/resvg-js-VMU4A77S.mjs +1 -0
  231. package/dist/preview-engine/server-utils-2FAIV45N.mjs +1 -0
  232. package/dist/preview-engine/sharp-V6ZTBNDW.mjs +1 -0
  233. package/dist/preview-engine/shims/fs-promises.mjs +1 -0
  234. package/dist/preview-engine/shims/fs.mjs +1 -0
  235. package/dist/preview-engine/shims/module.mjs +1 -0
  236. package/dist/preview-engine/shims/os.mjs +1 -0
  237. package/dist/preview-engine/shims/path.mjs +1 -0
  238. package/dist/preview-engine/shims/url.mjs +1 -0
  239. package/dist/preview-engine/signals.mjs +1 -0
  240. package/dist/preview-engine/webgpu-NSSANM4F.mjs +1 -0
  241. package/dist/preview-uQM210iy.mjs +2149 -0
  242. package/dist/preview-uQM210iy.mjs.map +1 -0
  243. package/dist/program-Dl510wmI.mjs +5183 -0
  244. package/dist/program-Dl510wmI.mjs.map +1 -0
  245. package/dist/renderer/index.d.mts +3 -0
  246. package/dist/renderer/index.mjs +6 -0
  247. package/dist/renderer-3BNskNuJ.mjs +3 -0
  248. package/dist/renderer-7DOcIxFG.mjs +288 -0
  249. package/dist/renderer-7DOcIxFG.mjs.map +1 -0
  250. package/dist/renderer-9dHlMQGX.mjs +3 -0
  251. package/dist/renderer-B1CvhW4p.mjs +677 -0
  252. package/dist/renderer-B1CvhW4p.mjs.map +1 -0
  253. package/dist/renderer-B2XzjK0z.mjs +3 -0
  254. package/dist/renderer-B80s47yo.mjs +166 -0
  255. package/dist/renderer-B80s47yo.mjs.map +1 -0
  256. package/dist/renderer-B9-QSJcG.mjs +479 -0
  257. package/dist/renderer-B9-QSJcG.mjs.map +1 -0
  258. package/dist/renderer-BAQmR0Zo.mjs +3 -0
  259. package/dist/renderer-BDLnExoP.mjs +127 -0
  260. package/dist/renderer-BDLnExoP.mjs.map +1 -0
  261. package/dist/renderer-BGXU6vcW.mjs +270 -0
  262. package/dist/renderer-BGXU6vcW.mjs.map +1 -0
  263. package/dist/renderer-BGvORwkQ.mjs +3 -0
  264. package/dist/renderer-BLikd6BK.mjs +3 -0
  265. package/dist/renderer-BMovYRoR.mjs +3 -0
  266. package/dist/renderer-BQHbp-Sp.mjs +243 -0
  267. package/dist/renderer-BQHbp-Sp.mjs.map +1 -0
  268. package/dist/renderer-BREIjsUU.mjs +252 -0
  269. package/dist/renderer-BREIjsUU.mjs.map +1 -0
  270. package/dist/renderer-BSbTJBWc.mjs +3 -0
  271. package/dist/renderer-BTu2EVhF.mjs +3 -0
  272. package/dist/renderer-BU1rwNRT.mjs +3 -0
  273. package/dist/renderer-BXMmISWG.mjs +499 -0
  274. package/dist/renderer-BXMmISWG.mjs.map +1 -0
  275. package/dist/renderer-BZJm3m4f.mjs +3 -0
  276. package/dist/renderer-B_NuVaIP.mjs +744 -0
  277. package/dist/renderer-B_NuVaIP.mjs.map +1 -0
  278. package/dist/renderer-BfJSUjPN.mjs +3 -0
  279. package/dist/renderer-BqyAgNt3.mjs +3 -0
  280. package/dist/renderer-BryTM2g7.mjs +3 -0
  281. package/dist/renderer-BsgIcBKH.mjs +391 -0
  282. package/dist/renderer-BsgIcBKH.mjs.map +1 -0
  283. package/dist/renderer-ByDhfrPE.mjs +422 -0
  284. package/dist/renderer-ByDhfrPE.mjs.map +1 -0
  285. package/dist/renderer-C-H680_l.mjs +3 -0
  286. package/dist/renderer-C17wL9QX.mjs +181 -0
  287. package/dist/renderer-C17wL9QX.mjs.map +1 -0
  288. package/dist/renderer-C2n-EHxg.mjs +1 -0
  289. package/dist/renderer-CB5aWAaf.mjs +343 -0
  290. package/dist/renderer-CB5aWAaf.mjs.map +1 -0
  291. package/dist/renderer-CB7lH5K8.mjs +3 -0
  292. package/dist/renderer-CDLrNgfo.mjs +3 -0
  293. package/dist/renderer-CDOUAN7X.mjs +454 -0
  294. package/dist/renderer-CDOUAN7X.mjs.map +1 -0
  295. package/dist/renderer-CH8sdfYX.mjs +387 -0
  296. package/dist/renderer-CH8sdfYX.mjs.map +1 -0
  297. package/dist/renderer-CIvaRnP_.mjs +261 -0
  298. package/dist/renderer-CIvaRnP_.mjs.map +1 -0
  299. package/dist/renderer-CMzEjdzi.mjs +369 -0
  300. package/dist/renderer-CMzEjdzi.mjs.map +1 -0
  301. package/dist/renderer-COkcU3db.mjs +3302 -0
  302. package/dist/renderer-COkcU3db.mjs.map +1 -0
  303. package/dist/renderer-CQCoggIa.mjs +3 -0
  304. package/dist/renderer-CQdVj2JS.mjs +3 -0
  305. package/dist/renderer-CQiTodg9.mjs +337 -0
  306. package/dist/renderer-CQiTodg9.mjs.map +1 -0
  307. package/dist/renderer-CV2m6k1V.mjs +3 -0
  308. package/dist/renderer-CYY-poLe.mjs +3 -0
  309. package/dist/renderer-CZgB5st8.mjs +3 -0
  310. package/dist/renderer-C_Ki91kc.mjs +3 -0
  311. package/dist/renderer-CclIvsLO.mjs +3 -0
  312. package/dist/renderer-Cj-whdVr.mjs +655 -0
  313. package/dist/renderer-Cj-whdVr.mjs.map +1 -0
  314. package/dist/renderer-CkykdR_D.mjs +3 -0
  315. package/dist/renderer-Cl1oUXMi.mjs +1143 -0
  316. package/dist/renderer-Cl1oUXMi.mjs.map +1 -0
  317. package/dist/renderer-CmApuKjS.mjs +3 -0
  318. package/dist/renderer-CpkiHRhh.mjs +269 -0
  319. package/dist/renderer-CpkiHRhh.mjs.map +1 -0
  320. package/dist/renderer-CszOjcRW.mjs +3 -0
  321. package/dist/renderer-CtVkU_GA.mjs +44 -0
  322. package/dist/renderer-CtVkU_GA.mjs.map +1 -0
  323. package/dist/renderer-Cu074POw.mjs +3 -0
  324. package/dist/renderer-CwQhzcUn.mjs +644 -0
  325. package/dist/renderer-CwQhzcUn.mjs.map +1 -0
  326. package/dist/renderer-CzPWB0Ss.mjs +273 -0
  327. package/dist/renderer-CzPWB0Ss.mjs.map +1 -0
  328. package/dist/renderer-D4qLmox-.mjs +3 -0
  329. package/dist/renderer-D6bWQtr-.mjs +3 -0
  330. package/dist/renderer-D6cJ6MSq.mjs +3 -0
  331. package/dist/renderer-D7EX8IjU.mjs +240 -0
  332. package/dist/renderer-D7EX8IjU.mjs.map +1 -0
  333. package/dist/renderer-DDp7_TUi.d.mts +10 -0
  334. package/dist/renderer-DDp7_TUi.d.mts.map +1 -0
  335. package/dist/renderer-DFKsLrUs.mjs +256 -0
  336. package/dist/renderer-DFKsLrUs.mjs.map +1 -0
  337. package/dist/renderer-DPSsf8-t.mjs +3 -0
  338. package/dist/renderer-DQLGnEFc.mjs +3 -0
  339. package/dist/renderer-DY2SVYUW.mjs +3 -0
  340. package/dist/renderer-DZGtBUCx.mjs +792 -0
  341. package/dist/renderer-DZGtBUCx.mjs.map +1 -0
  342. package/dist/renderer-DabG62XS.mjs +406 -0
  343. package/dist/renderer-DabG62XS.mjs.map +1 -0
  344. package/dist/renderer-DbaQLI4z.mjs +771 -0
  345. package/dist/renderer-DbaQLI4z.mjs.map +1 -0
  346. package/dist/renderer-DjI45OYC.mjs +71 -0
  347. package/dist/renderer-DjI45OYC.mjs.map +1 -0
  348. package/dist/renderer-Dm08-hAU.mjs +323 -0
  349. package/dist/renderer-Dm08-hAU.mjs.map +1 -0
  350. package/dist/renderer-DoAY5JbB.mjs +4 -0
  351. package/dist/renderer-Dp_FfvF-.mjs +401 -0
  352. package/dist/renderer-Dp_FfvF-.mjs.map +1 -0
  353. package/dist/renderer-Dt6fzgX5.mjs +756 -0
  354. package/dist/renderer-Dt6fzgX5.mjs.map +1 -0
  355. package/dist/renderer-DuplLRbp.mjs +3 -0
  356. package/dist/renderer-DvfUbZ31.mjs +3 -0
  357. package/dist/renderer-DxjVQV6f.mjs +311 -0
  358. package/dist/renderer-DxjVQV6f.mjs.map +1 -0
  359. package/dist/renderer-Fco4EmAu.mjs +23868 -0
  360. package/dist/renderer-Fco4EmAu.mjs.map +1 -0
  361. package/dist/renderer-HFfcJlmR.mjs +981 -0
  362. package/dist/renderer-HFfcJlmR.mjs.map +1 -0
  363. package/dist/renderer-I-Sw3JBB.mjs +145 -0
  364. package/dist/renderer-I-Sw3JBB.mjs.map +1 -0
  365. package/dist/renderer-OWQmmg4Z.mjs +697 -0
  366. package/dist/renderer-OWQmmg4Z.mjs.map +1 -0
  367. package/dist/renderer-Q_uUQipO.mjs +3 -0
  368. package/dist/renderer-Ryo2CEFD.mjs +586 -0
  369. package/dist/renderer-Ryo2CEFD.mjs.map +1 -0
  370. package/dist/renderer-Tp6OXWNZ.mjs +257 -0
  371. package/dist/renderer-Tp6OXWNZ.mjs.map +1 -0
  372. package/dist/renderer-UQFCgeNx.mjs +3 -0
  373. package/dist/renderer-WkVrkCVA.mjs +83 -0
  374. package/dist/renderer-WkVrkCVA.mjs.map +1 -0
  375. package/dist/renderer-XcmYTd6P.mjs +3818 -0
  376. package/dist/renderer-XcmYTd6P.mjs.map +1 -0
  377. package/dist/renderer-_uvdg48N.mjs +333 -0
  378. package/dist/renderer-_uvdg48N.mjs.map +1 -0
  379. package/dist/renderer-bZU_ndxf.mjs +8 -0
  380. package/dist/renderer-bZU_ndxf.mjs.map +1 -0
  381. package/dist/renderer-eMsnzJg9.mjs +3 -0
  382. package/dist/renderer-ho_jXJ0H.mjs +254 -0
  383. package/dist/renderer-ho_jXJ0H.mjs.map +1 -0
  384. package/dist/renderer-k2JL79kM.mjs +306 -0
  385. package/dist/renderer-k2JL79kM.mjs.map +1 -0
  386. package/dist/renderer-pHiz78e0.mjs +3 -0
  387. package/dist/renderer-pxXf9dvk.mjs +394 -0
  388. package/dist/renderer-pxXf9dvk.mjs.map +1 -0
  389. package/dist/renderer-vCFTm0oe.mjs +226 -0
  390. package/dist/renderer-vCFTm0oe.mjs.map +1 -0
  391. package/dist/renderer-vvpdx1vk.mjs +379 -0
  392. package/dist/renderer-vvpdx1vk.mjs.map +1 -0
  393. package/dist/renderer-x2s9LmVL.mjs +1121 -0
  394. package/dist/renderer-x2s9LmVL.mjs.map +1 -0
  395. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs +49 -0
  396. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs.map +1 -0
  397. package/dist/signals/index.d.mts +7 -0
  398. package/dist/signals/index.mjs +10 -0
  399. package/dist/signals-BwbdO3AN.mjs +224 -0
  400. package/dist/signals-BwbdO3AN.mjs.map +1 -0
  401. package/dist/signin-CZj4Oc5s.mjs +865 -0
  402. package/dist/signin-CZj4Oc5s.mjs.map +1 -0
  403. package/dist/sso-oidc-C0_31ThY.mjs +1051 -0
  404. package/dist/sso-oidc-C0_31ThY.mjs.map +1 -0
  405. package/dist/sts-DD4ggEXC.mjs +6 -0
  406. package/dist/sts-nXw8RDJI.mjs +1395 -0
  407. package/dist/sts-nXw8RDJI.mjs.map +1 -0
  408. package/package.json +173 -0
@@ -0,0 +1,418 @@
1
+ import{a as K}from"./chunk-LKYN3BM2.mjs";import{a as pe}from"./chunk-JPXQPP6J.mjs";import{a as B}from"./chunk-CNSHAFEA.mjs";import{a as le,b as X,d as ce,e as R}from"./chunk-VSSB73UU.mjs";import{a as ue}from"./chunk-GYG2IIBR.mjs";import{f as G,g as M,i as he}from"./chunk-4BEJJKEU.mjs";import{e as g}from"./chunk-BVF64D6H.mjs";g();var L=class{constructor(e,t){this.url=e;this.isHeadless=t}url;isHeadless;input=null;initPromise=null;iterator=null;iteratorStartTimestamp=-1;currentFetchId=0;fetchLock=Promise.resolve();destroyed=!1;async init(){if(!this.input)return this.initPromise?this.initPromise:(this.destroyed=!1,this.initPromise=(async()=>{try{let e=await R.acquire(this.url);this.destroyed?R.release(this.url):this.input=e}catch(e){throw this.initPromise=null,e}})(),this.initPromise)}destroy(){this.destroyed=!0,this.iterator?.return(),this.input&&(R.release(this.url),this.input=null),this.initPromise=null,this.onDestroy()}},Z=class extends L{canvasSink=null;videoSampleSink=null;currentFrame=null;nextFrame=null;currentSample=null;nextSample=null;headlessQueue=[];isDecoding=!1;nextRequest=null;pushHeadlessQueue(e){let t=this.headlessQueue.findIndex(r=>r.timestamp>e.timestamp);t===-1?this.headlessQueue.push(e):this.headlessQueue.splice(t,0,e)}async fillHeadlessQueue(e){if(this.iterator)for(;this.headlessQueue.length<2;){let t=await this.iterator.next();if(this.currentFetchId!==e){t.value?.close?.();return}if(t.done||!t.value)break;this.pushHeadlessQueue(t.value)}}async closeIterator(e){if(e)try{await e.return()}catch{}}resetSinks(){let e=this.iterator;if(this.iterator=null,e)try{e.return()}catch{}this.canvasSink=null,this.videoSampleSink=null,this.currentFrame=null,this.nextFrame=null,this.currentSample?.close(),this.currentSample=null,this.nextSample?.close(),this.nextSample=null;for(let t of this.headlessQueue)try{t.close()}catch{}this.headlessQueue=[],this.iteratorStartTimestamp=-1}onDestroy(){this.resetSinks()}async startIterator(e,t){if(!this.canvasSink)return;let r=Math.max(0,Number.isFinite(e)?e:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==t||this.destroyed)return;this.iterator=this.canvasSink.canvases(r);let n=await this.iterator.next();if(this.currentFetchId!==t||this.destroyed)return;this.currentFrame=n.value??null;let s=await this.iterator.next();this.currentFetchId!==t||this.destroyed||(this.nextFrame=s.value??null,this.iteratorStartTimestamp=r)}async startIteratorHeadless(e,t){if(!this.videoSampleSink)return;let r=Math.max(0,Number.isFinite(e)?e:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==t||this.destroyed)return;for(let s of this.headlessQueue)s.close();this.headlessQueue=[];let n=Math.max(0,r-.1);this.iterator=this.videoSampleSink.samples(n),await this.fillHeadlessQueue(t),!(this.currentFetchId!==t||this.destroyed)&&(this.iteratorStartTimestamp=r)}async getFrame(e){if(await this.init(),this.destroyed||!this.input)return null;let t=Math.max(0,Number.isFinite(e)?e:0);return this.isDecoding?(this.nextRequest&&this.nextRequest.resolve(null),new Promise((r,i)=>{this.nextRequest={timestampSec:t,resolve:r,reject:i}})):this.executeDecode(t)}async executeDecode(e){this.isDecoding=!0;try{return await this.performDecode(e)}finally{if(this.isDecoding=!1,this.nextRequest){let t=this.nextRequest;this.nextRequest=null,this.executeDecode(t.timestampSec).then(t.resolve).catch(t.reject)}}}async performDecodeHeadless(e,t){if(!this.videoSampleSink){if(this.destroyed||!this.input)return null;let c=await this.input.getPrimaryVideoTrack();if(!c)return null;this.videoSampleSink=new le(c)}let r=1e-4;if((!this.iterator||e<this.iteratorStartTimestamp-r||this.headlessQueue.length>0&&e<this.headlessQueue[0].timestamp-.01||this.headlessQueue.length>0&&e-this.headlessQueue[0].timestamp>1)&&(await this.startIteratorHeadless(e,t),this.currentFetchId!==t||this.destroyed||!this.input))return null;for(;;){if(await this.fillHeadlessQueue(t),this.currentFetchId!==t||this.destroyed||!this.input)return null;if(this.headlessQueue.length>=2&&this.headlessQueue[1].timestamp<=e+r){this.headlessQueue.shift()?.close();continue}break}let s=this.headlessQueue[0];if(!s)return null;let a=s.displayWidth,o=s.displayHeight,l=new Uint8Array(a*o*4);return await s.copyTo(l,{format:"RGBA"}),this.currentFetchId!==t||this.destroyed||!this.input?null:{width:a,height:o,buffer:l}}async performDecodeInternal(e){this.currentFetchId++;let t=this.currentFetchId;if(this.isHeadless)return this.performDecodeHeadless(e,t);if(!this.canvasSink){if(this.destroyed||!this.input)return null;let a=await this.input.getPrimaryVideoTrack();if(!a)return null;this.canvasSink=new X(a,{poolSize:3,alpha:!0})}let r=1e-4;if((!this.iterator||e<this.iteratorStartTimestamp-r||this.currentFrame&&e<this.currentFrame.timestamp-.01||this.currentFrame&&e-this.currentFrame.timestamp>1)&&(await this.startIterator(e,t),this.currentFetchId!==t||this.destroyed||!this.input))return null;for(;this.nextFrame&&this.nextFrame.timestamp<=e+r;)if(this.currentFrame=this.nextFrame,this.nextFrame=null,this.iterator){let a=await this.iterator.next();if(this.currentFetchId!==t||this.destroyed||!this.input)return null;this.nextFrame=a.value??null}if(!this.currentFrame)return null;let s=this.currentFrame.canvas;return{width:s.width,height:s.height,canvas:s}}async performDecode(e){let t=Math.max(0,Number.isFinite(e)?e:0);try{return await this.performDecodeInternal(t)}catch(r){let i=r;if(i?.name==="InputDisposedError"||i?.message?.includes("disposed")||this.destroyed||!this.input)return null;this.resetSinks();try{if(!this.isHeadless&&this.input&&!this.destroyed){let n=await this.input.getPrimaryVideoTrack();if(n&&!this.destroyed)return this.canvasSink=new X(n,{poolSize:3,alpha:!0,decoderOptions:{hardwareAcceleration:"prefer-software"}}),await this.performDecodeInternal(t)}}catch{}throw r}}},J=class extends L{audioSink=null;onDestroy(){this.audioSink=null}async startIterator(e,t){this.audioSink&&(this.iterator?.return(),this.iterator=this.audioSink.buffers(e),this.iteratorStartTimestamp=e)}async*getBuffers(e){try{if(await this.init(),this.destroyed||!this.input)return;if(!this.audioSink){let i=await this.input.getPrimaryAudioTrack();if(!i)return;this.audioSink=new ce(i)}(!this.iterator||Math.abs(e-this.iteratorStartTimestamp)>.05)&&(this.currentFetchId++,await this.startIterator(e,this.currentFetchId));let r=this.currentFetchId;if(!this.iterator)return;for await(let i of this.iterator){if(this.currentFetchId!==r||this.destroyed||!this.input)break;this.iteratorStartTimestamp=i.timestamp+i.duration,yield i}}catch(t){let r=t;if(r?.name==="InputDisposedError"||r?.message?.includes("disposed")||this.destroyed||!this.input)return;throw t}finally{let t=this.currentFetchId;this.currentFetchId===t&&(this.iterator=null)}}},ee=class{videoDecoders=new Map;audioDecoders=new Map;lastAccessed=new Map;touchKey(e){this.lastAccessed.set(e,Date.now())}destroy(){for(let e of this.videoDecoders.values())try{e.destroy()}catch{}this.videoDecoders.clear();for(let e of this.audioDecoders.values())try{e.destroy()}catch{}this.audioDecoders.clear(),this.lastAccessed.clear()}prune(e=3e5){let t=Date.now();for(let[r,i]of this.lastAccessed.entries())if(t-i>e){let n=this.videoDecoders.get(r);n&&(n.destroy(),this.videoDecoders.delete(r));let s=this.audioDecoders.get(r);s&&(s.destroy(),this.audioDecoders.delete(r)),this.lastAccessed.delete(r)}}getVideo(e,t,r){let i=`${e}-${t}-${r??"default"}`,n=this.videoDecoders.get(i);return n||(n=new Z(e,t),this.videoDecoders.set(i,n)),this.touchKey(i),this.prune(),n}getAudio(e,t){let r=`${e}-${t??"default"}`,i=this.audioDecoders.get(r);return i||(i=new J(e,!1),this.audioDecoders.set(r,i)),this.touchKey(r),this.prune(),i}clearNode(e){for(let[t,r]of this.videoDecoders)t.includes(e)&&(r.destroy(),this.videoDecoders.delete(t),this.lastAccessed.delete(t));for(let[t,r]of this.audioDecoders)t.includes(e)&&(r.destroy(),this.audioDecoders.delete(t),this.lastAccessed.delete(t))}},Le=new ee;g();g();var de=`
2
+ struct CompositeUniforms {
3
+ blendMode : u32,
4
+ padding1 : u32,
5
+ padding2 : u32,
6
+ padding3 : u32,
7
+ };
8
+
9
+ @group(0) @binding(0) var<uniform> u : CompositeUniforms;
10
+ @group(1) @binding(0) var baseTex : texture_2d<f32>;
11
+ @group(1) @binding(1) var overlayTex : texture_2d<f32>;
12
+ @group(1) @binding(2) var samp : sampler;
13
+
14
+ struct VSOut {
15
+ @builtin(position) pos : vec4<f32>,
16
+ @location(0) uv : vec2<f32>,
17
+ };
18
+
19
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
20
+ var pos = array<vec2<f32>, 4>(
21
+ vec2<f32>(-1.0, 1.0),
22
+ vec2<f32>(1.0, 1.0),
23
+ vec2<f32>(-1.0, -1.0),
24
+ vec2<f32>(1.0, -1.0)
25
+ );
26
+ var uv = array<vec2<f32>, 4>(
27
+ vec2<f32>(0.0, 0.0),
28
+ vec2<f32>(1.0, 0.0),
29
+ vec2<f32>(0.0, 1.0),
30
+ vec2<f32>(1.0, 1.0)
31
+ );
32
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
33
+ }
34
+
35
+ fn lum(c: vec3<f32>) -> f32 {
36
+ return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;
37
+ }
38
+
39
+ fn clip_color(c: vec3<f32>) -> vec3<f32> {
40
+ let l = lum(c);
41
+ let n = min(min(c.r, c.g), c.b);
42
+ let x = max(max(c.r, c.g), c.b);
43
+ var res = c;
44
+ if (n < 0.0) {
45
+ res = l + (((res - l) * l) / (l - n));
46
+ }
47
+ if (x > 1.0) {
48
+ res = l + (((res - l) * (1.0 - l)) / (x - l));
49
+ }
50
+ return res;
51
+ }
52
+
53
+ fn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {
54
+ let diff = l - lum(c);
55
+ return clip_color(c + vec3<f32>(diff));
56
+ }
57
+
58
+ fn sat(c: vec3<f32>) -> f32 {
59
+ return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);
60
+ }
61
+
62
+ fn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {
63
+ let c_min = min(min(c.r, c.g), c.b);
64
+ let c_max = max(max(c.r, c.g), c.b);
65
+ if (c_max <= c_min) {
66
+ return vec3<f32>(0.0);
67
+ }
68
+ return (c - vec3<f32>(c_min)) * s / (c_max - c_min);
69
+ }
70
+
71
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
72
+ let d = textureSample(baseTex, samp, in.uv);
73
+ let s = textureSample(overlayTex, samp, in.uv);
74
+ let sa = s.a;
75
+ let da = d.a;
76
+
77
+ switch (u.blendMode) {
78
+ case 16u: { return d * sa; } // mask-in / destination-in
79
+ case 17u: { return d * (1.0 - sa); } // mask-out / destination-out
80
+ case 18u: { return s * da; } // source-in
81
+ case 19u: { return s * (1.0 - da); } // source-out
82
+ case 20u: { return s * da + d * (1.0 - sa); } // source-atop
83
+ case 21u: { return d + s * (1.0 - da); } // destination-over
84
+ case 22u: { return d * sa + s * (1.0 - da); } // destination-atop
85
+ case 23u: { return s + d; } // lighter
86
+ case 24u: { return s; } // copy
87
+ case 25u: { return s * (1.0 - da) + d * (1.0 - sa); } // xor
88
+ default: {
89
+ if (sa <= 0.0) { return d; }
90
+ if (da <= 0.0) { return s; }
91
+ }
92
+ }
93
+
94
+ let s_rgb = select(s.rgb / sa, vec3<f32>(0.0), sa < 0.001);
95
+ let d_rgb = select(d.rgb / da, vec3<f32>(0.0), da < 0.001);
96
+
97
+ var b_rgb = s_rgb;
98
+
99
+ switch (u.blendMode) {
100
+ case 1u: { b_rgb = s_rgb * d_rgb; } // multiply
101
+ case 2u: { b_rgb = s_rgb + d_rgb - s_rgb * d_rgb; } // screen
102
+ case 3u: { // overlay
103
+ 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));
104
+ }
105
+ case 4u: { b_rgb = min(s_rgb, d_rgb); } // darken
106
+ case 5u: { b_rgb = max(s_rgb, d_rgb); } // lighten
107
+ case 6u: { // color-dodge
108
+ b_rgb = select(min(d_rgb / (1.0 - s_rgb), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb == vec3<f32>(1.0));
109
+ }
110
+ case 7u: { // color-burn
111
+ 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));
112
+ }
113
+ case 8u: { // hard-light
114
+ 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));
115
+ }
116
+ case 9u: { // soft-light
117
+ b_rgb = select(
118
+ d_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),
119
+ d_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),
120
+ s_rgb <= vec3<f32>(0.5)
121
+ );
122
+ }
123
+ case 10u: { b_rgb = abs(d_rgb - s_rgb); } // difference
124
+ case 11u: { b_rgb = s_rgb + d_rgb - 2.0 * s_rgb * d_rgb; } // exclusion
125
+ case 12u: { b_rgb = set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb)); } // hue
126
+ case 13u: { b_rgb = set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb)); } // saturation
127
+ case 14u: { b_rgb = set_lum(s_rgb, lum(d_rgb)); } // color
128
+ case 15u: { b_rgb = set_lum(d_rgb, lum(s_rgb)); } // luminosity
129
+ case 16u: { return d * s.a; } // mask-in
130
+ case 17u: { return d * (1.0 - s.a); } // mask-out
131
+ default: { b_rgb = s_rgb; } // normal
132
+ }
133
+
134
+ let out_a = sa + da * (1.0 - sa);
135
+ let out_rgb = (1.0 - da) * s.rgb + (1.0 - sa) * d.rgb + sa * da * b_rgb;
136
+
137
+ return vec4<f32>(out_rgb, out_a);
138
+ }
139
+ `;var Ge=`
140
+ struct MotionBlur2DUniforms {
141
+ vel: vec2<f32>,
142
+ _pad: vec2<f32>,
143
+ shutterFraction: f32,
144
+ samples: f32,
145
+ viewportWidth: f32,
146
+ viewportHeight: f32,
147
+ };
148
+
149
+ @group(0) @binding(0) var<uniform> u: MotionBlur2DUniforms;
150
+ @group(1) @binding(0) var sourceTexture: texture_2d<f32>;
151
+ @group(1) @binding(1) var colorSampler: sampler;
152
+
153
+ @vertex
154
+ fn vs(@builtin(vertex_index) vertexIndex: u32) -> @builtin(position) vec4<f32> {
155
+ var pos = array<vec2<f32>, 3>(
156
+ vec2<f32>(-1.0, -3.0),
157
+ vec2<f32>( 3.0, 1.0),
158
+ vec2<f32>(-1.0, 1.0)
159
+ );
160
+ return vec4<f32>(pos[vertexIndex], 0.0, 1.0);
161
+ }
162
+
163
+ @fragment
164
+ fn fs(@builtin(position) pos: vec4<f32>) -> @location(0) vec4<f32> {
165
+ let uv = pos.xy / vec2<f32>(u.viewportWidth, u.viewportHeight);
166
+ let sampleCount = u32(max(u.samples, 1.0));
167
+ let velUV = u.vel * u.shutterFraction;
168
+ let halfSamples = f32(sampleCount) * 0.5;
169
+
170
+ var accum = vec4<f32>(0.0);
171
+ var totalWeight = 0.0;
172
+
173
+ for (var i = 0u; i < sampleCount; i = i + 1u) {
174
+ let t = (f32(i) - halfSamples) / max(halfSamples, 1.0);
175
+ let sampleUV = clamp(uv + velUV * t, vec2<f32>(0.0), vec2<f32>(1.0));
176
+ let w = exp(-2.5 * t * t);
177
+ accum += textureSampleLevel(sourceTexture, colorSampler, sampleUV, 0.0) * w;
178
+ totalWeight += w;
179
+ }
180
+
181
+ return accum / max(totalWeight, 0.0001);
182
+ }
183
+ `,te=class{textures=[];texturesByKey=new Map;index=0;getTexture(e,t,r,i,n){let s=new Set(Array.isArray(n)?n:n?[n]:[]),a=`${t}x${r}:${i}`,o=this.texturesByKey.get(a);if(o)for(let c=0;c<o.length;c++){let p=o[c];if(!s.has(p)){o.splice(c,1),o.unshift(p);let h=this.textures.indexOf(p);return h>=this.index&&(this.textures.splice(h,1),this.textures.splice(this.index,0,p),this.index++),p}}let l=e.createTexture({size:[t,r],format:i,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});return this.texturesByKey.has(a)||this.texturesByKey.set(a,[]),this.texturesByKey.get(a).unshift(l),this.textures.splice(this.index,0,l),this.index++,l}reset(){this.index=0}destroy(){for(let e of this.textures)e.destroy();this.textures=[],this.texturesByKey.clear(),this.index=0}},Ue={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},$=class{device;compositeUniformLayout;dualTextureLayout;motionBlurUniformLayout;singleTextureLayout;compositePipeline;motionBlurPipeline;compositePool;motionBlurPool;texturePool;compositeUniformBindGroupCache=new M;motionBlurUniformBindGroupCache=new M;compositeData=new Uint32Array(4);motionBlurData=new Float32Array(8);constructor(e,t){this.device=e,this.compositePool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.motionBlurPool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.texturePool=new te,this.compositeUniformLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.dualTextureLayout=e.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=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.singleTextureLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let r=e.createPipelineLayout({bindGroupLayouts:[this.compositeUniformLayout,this.dualTextureLayout]}),i=e.createShaderModule({label:"composite.wgsl",code:de});this.compositePipeline=e.createRenderPipeline({label:"CompositePipeline",layout:r,vertex:{module:i,entryPoint:"vs"},fragment:{module:i,entryPoint:"fs",targets:[{format:t}]},primitive:{topology:"triangle-strip"}});let n=e.createPipelineLayout({bindGroupLayouts:[this.motionBlurUniformLayout,this.singleTextureLayout]}),s=e.createShaderModule({label:"motion-blur-2d.wgsl",code:Ge});this.motionBlurPipeline=e.createRenderPipeline({label:"MotionBlurPipeline",layout:n,vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:t}]},primitive:{topology:"triangle-list"}})}resetPools(){this.compositePool.reset(),this.motionBlurPool.reset(),this.texturePool.reset()}getTexture(e,t,r,i,n){return this.texturePool.getTexture(e,t,r,i,n)}getBuffer(e,t){return this.compositePool.getBuffer(e,t)}composite(e,t,r,i,n,s,a,o){let l=r.getSampler(this.device),c=[i,n];o&&(Array.isArray(o)?c.push(...o):c.push(o));let p=this.texturePool.getTexture(this.device,i.width,i.height,a,c);this.compositeData[0]=Ue[s]??0;let h=this.compositePool.getBuffer(this.device,this.compositeData),m=e.beginRenderPass({colorAttachments:[{view:p.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});m.setPipeline(this.compositePipeline);let d=this.compositeUniformBindGroupCache.getBindGroup(this.device,this.compositeUniformLayout,h);m.setBindGroup(0,d);let f=t.getCompositeBindGroup(this.device,this.dualTextureLayout,i,n,l);return m.setBindGroup(1,f),m.draw(4),m.end(),p}applyMotionBlur(e,t,r,i,n,s,a=180,o=16,l,c){if(Math.abs(n)<.1&&Math.abs(s)<.1||a<=0)return i;let p=r.getSampler(this.device),h=[i];c&&(Array.isArray(c)?h.push(...c):h.push(c));let m=this.texturePool.getTexture(this.device,i.width,i.height,l,h);this.motionBlurData[0]=n/i.width,this.motionBlurData[1]=s/i.height,this.motionBlurData[2]=0,this.motionBlurData[3]=0,this.motionBlurData[4]=a/360,this.motionBlurData[5]=o,this.motionBlurData[6]=i.width,this.motionBlurData[7]=i.height;let d=this.motionBlurPool.getBuffer(this.device,this.motionBlurData),f=e.beginRenderPass({colorAttachments:[{view:m.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});f.setPipeline(this.motionBlurPipeline);let y=this.motionBlurUniformBindGroupCache.getBindGroup(this.device,this.motionBlurUniformLayout,d);return f.setBindGroup(0,y),f.setBindGroup(1,t.getBindGroup(this.device,this.singleTextureLayout,i,p)),f.draw(3),f.end(),m}destroy(){this.compositePool.destroy(),this.motionBlurPool.destroy(),this.texturePool.destroy(),this.compositeUniformBindGroupCache.destroy(),this.motionBlurUniformBindGroupCache.destroy()}};g();g();var O=class{cache=new WeakMap;dualCache=new WeakMap;getBindGroup(e,t,r,i){let n=this.cache.get(r);n||(n=new Map,this.cache.set(r,n));let s=n.get(t);return s||(s=e.createBindGroup({layout:t,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i}]}),n.set(t,s)),s}getCompositeBindGroup(e,t,r,i,n){let s=this.dualCache.get(r);s||(s=new WeakMap,this.dualCache.set(r,s));let a=s.get(i);a||(a=new Map,s.set(i,a));let o=a.get(t);return o||(o=e.createBindGroup({layout:t,entries:[{binding:0,resource:r.createView()},{binding:1,resource:i.createView()},{binding:2,resource:n}]}),a.set(t,o)),o}destroy(){this.cache=new WeakMap,this.dualCache=new WeakMap}};g();var A=class{scissorStack=[];stencilStack=[];pushScissor(e,t,r){this.scissorStack.push({rect:e,surfaceWidth:t,surfaceHeight:r})}popScissor(){this.scissorStack.length>0&&this.scissorStack.pop()}saveScissors(){return[...this.scissorStack]}restoreScissors(e){this.scissorStack=[...e]}clearScissors(){this.scissorStack=[]}getCurrentScissor(e,t){let r=this.scissorStack[this.scissorStack.length-1];if(r&&!(e!==void 0&&t!==void 0&&r.surfaceWidth!==void 0&&r.surfaceHeight!==void 0&&r.surfaceWidth!==0&&r.surfaceHeight!==0&&(r.surfaceWidth!==e||r.surfaceHeight!==t)))return r.rect}pushStencilClip(e){this.stencilStack.push(e)}popStencilClip(){this.stencilStack.length>0&&this.stencilStack.pop()}getCurrentStencil(){return this.stencilStack[this.stencilStack.length-1]}applyScissorToPass(e,t,r){let i=this.getCurrentScissor(t,r);if(!i){e.setScissorRect(0,0,Math.max(1,Math.floor(t)),Math.max(1,Math.floor(r)));return}let n=Math.max(0,Math.floor(i.x)),s=Math.max(0,Math.floor(i.y)),a=Math.min(t,Math.ceil(i.x+i.width)),o=Math.min(r,Math.ceil(i.y+i.height)),l=Math.max(0,a-n),c=Math.max(0,o-s);if(!Number.isFinite(n)||!Number.isFinite(s)||!Number.isFinite(l)||!Number.isFinite(c)||l<=0||c<=0)e.setScissorRect(0,0,1,1);else{let p=Math.min(l,Math.max(0,t-n)),h=Math.min(c,Math.max(0,r-s));p<=0||h<=0?e.setScissorRect(0,0,1,1):e.setScissorRect(Math.floor(n),Math.floor(s),Math.floor(p),Math.floor(h))}}destroy(){this.scissorStack=[],this.stencilStack=[]}};g();function fe(u,e,t,r,i=24){let n=[],s=u;for(let a=1;a<=i;a++){let o=a/i,l=1-o,c=l*l,p=c*l,h=o*o,m=h*o,d={x:p*u.x+3*c*o*e.x+3*l*h*t.x+m*r.x,y:p*u.y+3*c*o*e.y+3*l*h*t.y+m*r.y};n.push({p0:s,p1:d}),s=d}return n}function me(u,e,t,r=16){let i=[],n=u;for(let s=1;s<=r;s++){let a=s/r,o=1-a,l=o*o,c=a*a,p={x:l*u.x+2*o*a*e.x+c*t.x,y:l*u.y+2*o*a*e.y+c*t.y};i.push({p0:n,p1:p}),n=p}return i}function Me(u,e,t,r,i,n,s){let a=Math.abs(e),o=Math.abs(t);if(a<1e-9||o<1e-9)return[{p0:u,p1:s}];if(Math.hypot(s.x-u.x,s.y-u.y)<1e-9)return[];let l=r*Math.PI/180,c=Math.cos(l),p=Math.sin(l),h=(u.x-s.x)/2,m=(u.y-s.y)/2,d=c*h+p*m,f=-p*h+c*m,y=d*d/(a*a)+f*f/(o*o);y>1&&(a*=Math.sqrt(y),o*=Math.sqrt(y));let x=a*a*o*o-a*a*f*f-o*o*d*d,P=a*a*f*f+o*o*d*d,v=(i===n?-1:1)*Math.sqrt(Math.max(0,x/P)),b=v*a*f/o,S=-v*o*d/a,U=c*b-p*S+(u.x+s.x)/2,k=p*b+c*S+(u.y+s.y)/2,j=(C,T,F,_)=>Math.atan2(C*_-T*F,C*F+T*_),Q=j(1,0,(d-b)/a,(f-S)/o),D=j((d-b)/a,(f-S)/o,(-d-b)/a,(-f-S)/o);!n&&D>0&&(D-=2*Math.PI),n&&D<0&&(D+=2*Math.PI);let Y=Math.max(4,Math.ceil(Math.abs(D)/(2*Math.PI)*64)),se=[],ne=u;for(let C=1;C<=Y;C++){let T=Q+D*C/Y,F=a*Math.cos(T),_=o*Math.sin(T),ae=C===Y?s:{x:c*F-p*_+U,y:p*F+c*_+k};se.push({p0:ne,p1:ae}),ne=ae}return se}function E(u){let e=[];if(!u||typeof u!="string")return e;let t=[],r=/([a-df-z])|([-+]?(?:\d*\.\d+|\d+)(?:[eE][-+]?\d+)?)/gi,i;for(;(i=r.exec(u))!==null;)i[1]?t.push(i[1]):i[2]&&t.push(parseFloat(i[2]));let n=0,s={x:0,y:0},a={x:0,y:0},o=null,l=null;for(;n<t.length;){let c=t[n++];if(typeof c!="string")continue;let p=c,h=p===p.toLowerCase(),m=p.toUpperCase(),d=()=>n<t.length&&typeof t[n]=="number"?t[n++]:0;switch(m){case"M":{let f=!0;for(;n<t.length&&typeof t[n]=="number";){let y=d(),x=d();h&&(y+=s.x,x+=s.y),f?(s={x:y,y:x},a={x:y,y:x},f=!1):(e.push({p0:s,p1:{x:y,y:x}}),s={x:y,y:x})}o=null,l=null;break}case"L":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d();h&&(f+=s.x,y+=s.y),e.push({p0:s,p1:{x:f,y}}),s={x:f,y}}o=null,l=null;break}case"H":{for(;n<t.length&&typeof t[n]=="number";){let f=d();h&&(f+=s.x);let y={x:f,y:s.y};e.push({p0:s,p1:y}),s=y}o=null,l=null;break}case"V":{for(;n<t.length&&typeof t[n]=="number";){let f=d();h&&(f+=s.y);let y={x:s.x,y:f};e.push({p0:s,p1:y}),s=y}o=null,l=null;break}case"C":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d(),x=d(),P=d(),v=d(),b=d();h&&(f+=s.x,y+=s.y,x+=s.x,P+=s.y,v+=s.x,b+=s.y);let S={x:f,y},U={x,y:P},k={x:v,y:b};e.push(...fe(s,S,U,k)),s=k,o=U}l=null;break}case"S":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d(),x=d(),P=d();h&&(f+=s.x,y+=s.y,x+=s.x,P+=s.y);let v;o?v={x:2*s.x-o.x,y:2*s.y-o.y}:v={x:s.x,y:s.y};let b={x:f,y},S={x,y:P};e.push(...fe(s,v,b,S)),s=S,o=b}l=null;break}case"Q":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d(),x=d(),P=d();h&&(f+=s.x,y+=s.y,x+=s.x,P+=s.y);let v={x:f,y},b={x,y:P};e.push(...me(s,v,b)),s=b,l=v}o=null;break}case"T":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d();h&&(f+=s.x,y+=s.y);let x;l?x={x:2*s.x-l.x,y:2*s.y-l.y}:x={x:s.x,y:s.y};let P={x:f,y};e.push(...me(s,x,P)),s=P,l=x}o=null;break}case"A":{for(;n<t.length&&typeof t[n]=="number";){let f=d(),y=d(),x=d(),P=d()!==0,v=d()!==0,b=d(),S=d();h&&(b+=s.x,S+=s.y);let U={x:b,y:S};e.push(...Me(s,f,y,x,P,v,U)),s=U}o=null,l=null;break}case"Z":{Math.hypot(s.x-a.x,s.y-a.y)>1e-5&&e.push({p0:s,p1:a}),s=a,o=null,l=null;break}default:break}}return e}function I(u,e,t,r=0){if(u.length===0)return[];let i=[],n=0;for(let c of u){let p=Math.hypot(c.p1.x-c.p0.x,c.p1.y-c.p0.y);i.push(p),n+=p}if(n<1e-6)return[];let s=Math.abs(r)>1?r%360/360:r,a=(e+s)%1,o=(t+s)%1;a<0&&(a+=1),o<0&&(o+=1);let l=(c,p)=>{if(c>=p)return[];let h=[],m=0;for(let d=0;d<u.length;d++){let f=u[d],y=i[d],x=m,P=m+y;if(m=P,P<=c||x>=p||y<1e-6)continue;let v=Math.max(0,(c-x)/y),b=Math.min(1,(p-x)/y);if(b>v){let S={x:f.p0.x+(f.p1.x-f.p0.x)*v,y:f.p0.y+(f.p1.y-f.p0.y)*v},U={x:f.p0.x+(f.p1.x-f.p0.x)*b,y:f.p0.y+(f.p1.y-f.p0.y)*b};h.push({p0:S,p1:U})}}return h};if(e===0&&t===1&&r===0)return[...u];if(Math.abs(a-o)<1e-5)return[];if(a<=o)return l(a*n,o*n);{let c=l(a*n,n),p=l(0,o*n);return[...c,...p]}}function re(u,e,t=0){if(u.length===0||e.length===0)return u;let r=0;for(let m of e)r+=m;if(r<1e-5)return u;let i=0,n=[];for(let m of u){let d=Math.hypot(m.p1.x-m.p0.x,m.p1.y-m.p0.y);n.push(d),i+=d}let s=[],a=(t%r+r)%r,o=0,l=!0,c=a;for(;c>e[o];)c-=e[o],o=(o+1)%e.length,l=!l;let p=e[o]-c,h=0;for(;h<i;){let m=Math.min(p,i-h);if(l&&m>1e-4){let d=I(u,h/i,(h+m)/i);s.push(...d)}h+=m,o=(o+1)%e.length,l=!l,p=e[o]}return s}function xe(u,e,t=0,r=0,i=0,n=0){let s=Math.min(u/2,e/2),a=Math.min(t,s),o=Math.min(r,s),l=Math.min(i,s),c=Math.min(n,s);return a===0&&o===0&&l===0&&c===0?`M 0 0 L ${u} 0 L ${u} ${e} L 0 ${e} Z`:[`M ${a} 0`,`L ${u-o} 0`,o>0?`Q ${u} 0 ${u} ${o}`:`L ${u} 0`,`L ${u} ${e-l}`,l>0?`Q ${u} ${e} ${u-l} ${e}`:`L ${u} ${e}`,`L ${c} ${e}`,c>0?`Q 0 ${e} 0 ${e-c}`:`L 0 ${e}`,`L 0 ${a}`,a>0?`Q 0 0 ${a} 0`:"L 0 0","Z"].join(" ")}function De(u,e){let t=Math.min(u,e)/2,r=u/2,i=e/2,n=t*.5522847498;return[`M ${r} ${i-t}`,`C ${r+n} ${i-t} ${r+t} ${i-n} ${r+t} ${i}`,`C ${r+t} ${i+n} ${r+n} ${i+t} ${r} ${i+t}`,`C ${r-n} ${i+t} ${r-t} ${i+n} ${r-t} ${i}`,`C ${r-t} ${i-n} ${r-n} ${i-t} ${r} ${i-t}`,"Z"].join(" ")}function Be(u,e){let t=u/2,r=e/2,i=t,n=r,s=t*.5522847498,a=r*.5522847498;return[`M ${i} ${n-r}`,`C ${i+s} ${n-r} ${i+t} ${n-a} ${i+t} ${n}`,`C ${i+t} ${n+a} ${i+s} ${n+r} ${i} ${n+r}`,`C ${i-s} ${n+r} ${i-t} ${n+a} ${i-t} ${n}`,`C ${i-t} ${n-a} ${i-s} ${n-r} ${i} ${n-r}`,"Z"].join(" ")}function Ce(u,e,t=5){let r=Math.max(3,t),i=Math.min(u,e)/2,n=u/2,s=e/2,a=[];for(let o=0;o<r;o++){let l=-Math.PI/2+o*2*Math.PI/r;a.push({x:n+i*Math.cos(l),y:s+i*Math.sin(l)})}return a.map((o,l)=>`${l===0?"M":"L"} ${o.x} ${o.y}`).join(" ")+" Z"}function ke(u,e,t=5,r=.5){let i=Math.max(3,t),n=Math.min(u,e)/2,s=n*Math.max(.01,Math.min(.99,r)),a=u/2,o=e/2,l=[];for(let c=0;c<i*2;c++){let p=-Math.PI/2+c*Math.PI/i,h=c%2===0?n:s;l.push({x:a+h*Math.cos(p),y:o+h*Math.sin(p)})}return l.map((c,p)=>`${p===0?"M":"L"} ${c.x} ${c.y}`).join(" ")+" Z"}function Te(u,e,t=40,r=40,i=20){let n=Math.min(t,e),s=Math.min(r,u),a=Math.min(i,n),o=e/2;return[`M 0 ${o-a/2}`,`L ${u-s} ${o-a/2}`,`L ${u-s} ${o-n/2}`,`L ${u} ${o}`,`L ${u-s} ${o+n/2}`,`L ${u-s} ${o+a/2}`,`L 0 ${o+a/2}`,"Z"].join(" ")}function ie(u){let{shapeType:e,width:t,height:r}=u;switch(e){case"rect":return xe(t,r,u.cornerRadius??0,u.cornerRadius??0,u.cornerRadius??0,u.cornerRadius??0);case"circle":return De(t,r);case"ellipse":return Be(t,r);case"polygon":return Ce(t,r,u.polygonSides??5);case"star":return ke(t,r,u.starPoints??5,u.starInnerRadiusRatio??.5);case"arrow":return Te(t,r,u.arrowHeadWidth??40,u.arrowHeadLength??40,u.arrowShaftWidth??20);case"path":return u.path??"";default:return""}}function ye(u){if(u.length<3)return[];if(u.length===3)return[u[0],u[1],u[2]];let e=[...u],t=e[e.length-1],r=e[0];if(Math.hypot(t.x-r.x,t.y-r.y)<1e-5&&e.pop(),e.length<3)return[];let i=0;for(let p=0;p<e.length;p++){let h=(p+1)%e.length;i+=e[p].x*e[h].y-e[h].x*e[p].y}i<0&&e.reverse();let n=(p,h,m,d)=>{let f=(m.x-h.x)*(p.y-h.y)-(m.y-h.y)*(p.x-h.x),y=(d.x-m.x)*(p.y-m.y)-(d.y-m.y)*(p.x-m.x),x=(h.x-d.x)*(p.y-d.y)-(h.y-d.y)*(p.x-d.x);return f>=-1e-6&&y>=-1e-6&&x>=-1e-6},s=(p,h,m,d)=>{if((h.x-p.x)*(m.y-p.y)-(h.y-p.y)*(m.x-p.x)<=1e-7)return!1;for(let y of d)if(!(y===p||y===h||y===m)&&n(y,p,h,m))return!1;return!0},a=[],o=[...e],l=0,c=o.length*o.length*2;for(;o.length>3&&l<c;){l++;let p=!1;for(let h=0;h<o.length;h++){let m=o[(h-1+o.length)%o.length],d=o[h],f=o[(h+1)%o.length];if(s(m,d,f,o)){a.push(m,d,f),o.splice(h,1),p=!0;break}}p||(a.push(o[0],o[1],o[2]),o.splice(1,1))}return o.length===3&&a.push(o[0],o[1],o[2]),a}function ge(u){let{shapeType:e,width:t,height:r}=u;if(e==="rect"){let i=u.cornerRadius??0;if(i<=0)return new Float32Array([0,0,t,0,t,r,0,0,t,r,0,r]);let n=xe(t,r,i,i,i,i),a=E(n).map(c=>c.p0),o=ye(a),l=new Float32Array(o.length*2);for(let c=0;c<o.length;c++)l[c*2]=o[c].x,l[c*2+1]=o[c].y;return l}if(e==="circle"||e==="ellipse"){let i=t/2,n=r/2,s=e==="circle"?Math.min(t,r)/2:t/2,a=e==="circle"?s:r/2,o=48,l=new Float32Array(o*3*2),c=0;for(let p=0;p<o;p++){let h=p*2*Math.PI/o,m=(p+1)*2*Math.PI/o;l[c++]=i,l[c++]=n,l[c++]=i+s*Math.cos(h),l[c++]=n+a*Math.sin(h),l[c++]=i+s*Math.cos(m),l[c++]=n+a*Math.sin(m)}return l}if(e==="polygon"){let i=Math.max(3,u.polygonSides??5),n=Math.min(t,r)/2,s=t/2,a=r/2,o=new Float32Array(i*3*2),l=0;for(let c=0;c<i;c++){let p=-Math.PI/2+c*2*Math.PI/i,h=-Math.PI/2+(c+1)*2*Math.PI/i;o[l++]=s,o[l++]=a,o[l++]=s+n*Math.cos(p),o[l++]=a+n*Math.sin(p),o[l++]=s+n*Math.cos(h),o[l++]=a+n*Math.sin(h)}return o}if(e==="star"){let i=Math.max(3,u.starPoints??5),n=Math.min(t,r)/2,s=n*Math.max(.01,Math.min(.99,u.starInnerRadiusRatio??.5)),a=t/2,o=r/2,l=i*2,c=new Float32Array(l*3*2),p=0;for(let h=0;h<l;h++){let m=-Math.PI/2+h*Math.PI/i,d=-Math.PI/2+(h+1)*Math.PI/i,f=h%2===0?n:s,y=(h+1)%2===0?n:s;c[p++]=a,c[p++]=o,c[p++]=a+f*Math.cos(m),c[p++]=o+f*Math.sin(m),c[p++]=a+y*Math.cos(d),c[p++]=o+y*Math.sin(d)}return c}if(e==="arrow"){let i=Math.min(u.arrowHeadWidth??40,r),n=Math.min(u.arrowHeadLength??40,t),s=Math.min(u.arrowShaftWidth??20,i),a=r/2,o=0,l=t-n,c=t,p=a-s/2,h=a+s/2,m=a-i/2,d=a+i/2;return new Float32Array([o,p,l,p,l,h,o,p,l,h,o,h,l,m,c,a,l,d])}if(e==="path"&&u.path){let i=E(u.path);if(i.length===0)return new Float32Array(0);let n=i.map(o=>o.p0),s=ye(n),a=new Float32Array(s.length*2);for(let o=0;o<s.length;o++)a[o*2]=s[o].x,a[o*2+1]=s[o].y;return a}return new Float32Array(0)}g();g();var Pe=`
184
+ struct Uniforms {
185
+ transformCol0 : vec4<f32>,
186
+ transformCol1 : vec4<f32>,
187
+ transformCol2 : vec4<f32>,
188
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = strokeWidth
189
+ color : vec4<f32>,
190
+ style : vec4<f32>, // x = capType (0 = round, 1 = butt, 2 = square)
191
+ p0 : vec2<f32>,
192
+ p1 : vec2<f32>,
193
+ };
194
+
195
+ @group(0) @binding(0) var<uniform> u : Uniforms;
196
+
197
+ struct VSOut {
198
+ @builtin(position) pos : vec4<f32>,
199
+ @location(0) localPos : vec2<f32>,
200
+ };
201
+
202
+ @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
203
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
204
+ let p = transform * vec3<f32>(xy, 1.0);
205
+
206
+ let surfaceSize = u.params.yz;
207
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
208
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
209
+
210
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
211
+ }
212
+
213
+ fn sdSegmentWithCap(p: vec2<f32>, a: vec2<f32>, b: vec2<f32>, radius: f32, capType: f32) -> f32 {
214
+ let ba = b - a;
215
+ let len = length(ba);
216
+ if (len < 1e-6) {
217
+ return length(p - a) - radius;
218
+ }
219
+ let dir = ba / len;
220
+ let normal = vec2<f32>(-dir.y, dir.x);
221
+ let pa = p - a;
222
+
223
+ let proj = dot(pa, dir);
224
+ let perp = abs(dot(pa, normal));
225
+
226
+ if (capType > 0.5 && capType < 1.5) {
227
+ // Butt cap: terminates strictly at endpoints a and b
228
+ let dx = max(-proj, proj - len);
229
+ let dy = perp - radius;
230
+ let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
231
+ let inside = min(max(dx, dy), 0.0);
232
+ return outside + inside;
233
+ } else if (capType >= 1.5) {
234
+ // Square cap: extends past endpoints a and b by radius
235
+ let dx = max(-proj - radius, proj - (len + radius));
236
+ let dy = perp - radius;
237
+ let outside = length(max(vec2<f32>(dx, dy), vec2<f32>(0.0, 0.0)));
238
+ let inside = min(max(dx, dy), 0.0);
239
+ return outside + inside;
240
+ } else {
241
+ // Round cap (default)
242
+ let h = clamp(proj / len, 0.0, 1.0);
243
+ return length(pa - ba * h) - radius;
244
+ }
245
+ }
246
+
247
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
248
+ let radius = u.params.w * 0.5;
249
+ let d = sdSegmentWithCap(in.localPos, u.p0, u.p1, radius, u.style.x);
250
+
251
+ let fw = max(fwidth(d), 1e-5);
252
+ let edgeAlpha = clamp(0.5 - d / fw, 0.0, 1.0);
253
+ let alpha = u.color.a * u.params.x * edgeAlpha;
254
+ if (alpha <= 0.0) {
255
+ discard;
256
+ }
257
+
258
+ return vec4<f32>(u.color.rgb * alpha, alpha);
259
+ }
260
+ `;var V=class{device;pipeline;maxPipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new M;scratchData=new Float32Array(28);constructor(e,t){this.device=e,this.uniformPool=new G(4096,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(4096,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=e.createShaderModule({label:"path.wgsl",code:Pe});this.uniformLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.pipeline=e.createRenderPipeline({label:"PathPipeline",layout:e.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}}),this.maxPipeline=e.createRenderPipeline({label:"PathPipeline.max",layout:e.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcFactor:"one",dstFactor:"one",operation:"max"}}}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}drawPath(e,t,r,i,n,s,a,o){let l=E(r);if(l.length===0||((o?.trimStart!==void 0||o?.trimEnd!==void 0||o?.trimOffset!==void 0)&&(l=I(l,o.trimStart??0,o.trimEnd??1,o.trimOffset??0)),o?.strokeDashArray&&o.strokeDashArray.length>0&&(l=re(l,o.strokeDashArray,o.strokeDashOffset??0)),l.length===0))return;let c=B(i),p=o?.opacity??1,h=0;o?.strokeLineCap==="butt"?h=1:o?.strokeLineCap==="square"&&(h=2);for(let m of l)this.drawSegment(e,t,m.p0,m.p1,c,n,h,s,a,p,o)}drawSegments(e,t,r,i,n,s,a,o){let l=r;if((o?.trimStart!==void 0||o?.trimEnd!==void 0||o?.trimOffset!==void 0)&&(l=I(l,o.trimStart??0,o.trimEnd??1,o.trimOffset??0)),o?.strokeDashArray&&o.strokeDashArray.length>0&&(l=re(l,o.strokeDashArray,o.strokeDashOffset??0)),l.length===0)return;let c=B(i),p=o?.opacity??1,h=0;o?.strokeLineCap==="butt"?h=1:o?.strokeLineCap==="square"&&(h=2);for(let m of l)this.drawSegment(e,t,m.p0,m.p1,c,n,h,s,a,p,o)}drawSegment(e,t,r,i,n,s,a,o,l,c,p){let h=this.scratchData;t.packIntoBuffer(h,c,o,l,p?.transform),h[15]=s,h[16]=n.r,h[17]=n.g,h[18]=n.b,h[19]=n.a,h[20]=a,h[21]=0,h[22]=0,h[23]=0,h[24]=r.x,h[25]=r.y,h[26]=i.x,h[27]=i.y;let m=this.uniformPool.getBuffer(this.device,h),d=i.x-r.x,f=i.y-r.y,y=Math.sqrt(d*d+f*f);if(y<1e-6)return;let x=s*.5+2,P=d/y*x,v=f/y*x,b=-v,S=P,U=new Float32Array([r.x-P-b,r.y-v-S,r.x-P+b,r.y-v+S,i.x+P-b,i.y+v-S,i.x+P+b,i.y+v+S]),k=this.vertexPool.getBuffer(this.device,U),Q=p?.blendMode==="max"?this.maxPipeline:this.pipeline;e.setPipeline(Q);let D=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,m);e.setBindGroup(0,D),e.setVertexBuffer(0,k),e.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};g();g();var ve=`
261
+ struct Uniforms {
262
+ transformCol0 : vec4<f32>,
263
+ transformCol1 : vec4<f32>,
264
+ transformCol2 : vec4<f32>,
265
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = blurAmount
266
+ };
267
+
268
+ @group(0) @binding(0) var<uniform> u : Uniforms;
269
+ @group(1) @binding(0) var tex : texture_2d<f32>;
270
+ @group(1) @binding(1) var samp : sampler;
271
+
272
+ struct VSOut {
273
+ @builtin(position) pos : vec4<f32>,
274
+ @location(0) uv : vec2<f32>,
275
+ };
276
+
277
+ @vertex fn vs(@location(0) xy : vec2<f32>, @location(1) uv : vec2<f32>) -> VSOut {
278
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
279
+ let p = transform * vec3<f32>(xy, 1.0);
280
+
281
+ let surfaceSize = u.params.yz;
282
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
283
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
284
+
285
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), uv);
286
+ }
287
+
288
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
289
+ let opacity = u.params.x;
290
+ let blurAmount = u.params.w;
291
+
292
+ if (blurAmount > 0.01) {
293
+ let fdx = dpdx(in.uv);
294
+ let fdy = dpdy(in.uv);
295
+ let fw = max(max(abs(fdx), abs(fdy)), vec2<f32>(0.000001));
296
+ let step = fw * blurAmount * 0.3;
297
+
298
+ var color = vec4<f32>(0.0);
299
+ var totalWeight = 0.0;
300
+ for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
301
+ for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
302
+ let offset = vec2<f32>(x_offset, y_offset) * step;
303
+ let sampleColor = textureSample(tex, samp, in.uv + offset);
304
+ color = color + sampleColor;
305
+ totalWeight = totalWeight + 1.0;
306
+ }
307
+ }
308
+ return (color / totalWeight) * opacity;
309
+ } else {
310
+ let color = textureSample(tex, samp, in.uv);
311
+ return color * opacity;
312
+ }
313
+ }
314
+ `;var W=class{buffers=[];index=0;size;usage;constructor(e,t){this.size=e,this.usage=t}getBuffer(e,t){if(this.index>=this.buffers.length){let i=e.createBuffer({size:this.size,usage:this.usage});this.buffers.push(i)}let r=this.buffers[this.index++];return e.queue.writeBuffer(r,0,t),r}reset(){this.index=0}destroy(){for(let e of this.buffers)e.destroy();this.buffers=[]}},z=class{device;pipeline;uniformLayout;textureLayout;uniformPool;vertexPool;uniformBindGroupCache=new M;uniformData=new Float32Array(16);vertexData=new Float32Array(16);constructor(e,t){this.device=e,this.uniformPool=new W(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new W(64,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=e.createShaderModule({label:"quad.wgsl",code:ve});this.uniformLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.textureLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let i=e.createPipelineLayout({bindGroupLayouts:[this.uniformLayout,this.textureLayout]});this.pipeline=e.createRenderPipeline({label:"QuadPipeline",layout:i,vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:16,attributes:[{shaderLocation:0,offset:0,format:"float32x2"},{shaderLocation:1,offset:8,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(e,t,r,i,n,s,a,o,l,c){let p=c?.opacity??1;r.packIntoBuffer(this.uniformData,p,o,l,c?.transform);let h=this.uniformPool.getBuffer(this.device,this.uniformData),m=s.x/i.width,d=s.y/i.height,f=(s.x+s.width)/i.width,y=(s.y+s.height)/i.height;this.vertexData[0]=a.x,this.vertexData[1]=a.y,this.vertexData[2]=m,this.vertexData[3]=d,this.vertexData[4]=a.x+a.width,this.vertexData[5]=a.y,this.vertexData[6]=f,this.vertexData[7]=d,this.vertexData[8]=a.x,this.vertexData[9]=a.y+a.height,this.vertexData[10]=m,this.vertexData[11]=y,this.vertexData[12]=a.x+a.width,this.vertexData[13]=a.y+a.height,this.vertexData[14]=f,this.vertexData[15]=y;let x=this.vertexPool.getBuffer(this.device,this.vertexData),P=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,h),v=t.getBindGroup(this.device,this.textureLayout,i,n);e.setPipeline(this.pipeline),e.setBindGroup(0,P),e.setBindGroup(1,v),e.setVertexBuffer(0,x),e.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};g();g();var be=`
315
+ struct Uniforms {
316
+ transformCol0 : vec4<f32>,
317
+ transformCol1 : vec4<f32>,
318
+ transformCol2 : vec4<f32>,
319
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = fillType (0=solid, 1=linear, 2=radial)
320
+ color : vec4<f32>, // solid color or gradient start
321
+ color2 : vec4<f32>, // gradient end
322
+ gradCoords : vec4<f32>, // linear: (x0, y0, x1, y1), radial: (cx, cy, radius, unused)
323
+ };
324
+
325
+ @group(0) @binding(0) var<uniform> u : Uniforms;
326
+
327
+ struct VSOut {
328
+ @builtin(position) pos : vec4<f32>,
329
+ @location(0) localPos : vec2<f32>,
330
+ };
331
+
332
+ @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
333
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
334
+ let p = transform * vec3<f32>(xy, 1.0);
335
+
336
+ let surfaceSize = u.params.yz;
337
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
338
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
339
+
340
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
341
+ }
342
+
343
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
344
+ var outColor = u.color;
345
+ let fillType = u.params.w;
346
+
347
+ if (fillType > 0.5 && fillType < 1.5) {
348
+ // Linear gradient between p0 and p1
349
+ let p0 = u.gradCoords.xy;
350
+ let p1 = u.gradCoords.zw;
351
+ let d = p1 - p0;
352
+ let lenSq = dot(d, d);
353
+ let t = clamp(dot(in.localPos - p0, d) / max(lenSq, 1e-6), 0.0, 1.0);
354
+ outColor = mix(u.color, u.color2, t);
355
+ } else if (fillType >= 1.5) {
356
+ // Radial gradient from center out to radius
357
+ let center = u.gradCoords.xy;
358
+ let radius = max(u.gradCoords.z, 1e-6);
359
+ let dist = length(in.localPos - center);
360
+ let t = clamp(dist / radius, 0.0, 1.0);
361
+ outColor = mix(u.color, u.color2, t);
362
+ }
363
+
364
+ let alpha = outColor.a * u.params.x;
365
+ if (alpha <= 0.0) {
366
+ discard;
367
+ }
368
+
369
+ return vec4<f32>(outColor.rgb * alpha, alpha);
370
+ }
371
+ `;var H=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformData=new Float32Array(28);constructor(e,t){this.device=e,this.uniformPool=new G(2048,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(8192,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=e.createShaderModule({label:"shape-fill.wgsl",code:be});this.uniformLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.pipeline=e.createRenderPipeline({label:"ShapeFillPipeline",layout:e.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-list"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(e,t,r,i,n,s,a,o){if(r.length<6||i.type==="none")return;let l=o?.opacity??1;t.packIntoBuffer(this.uniformData,l,s,a,o?.transform);let c=0;i.type==="linear"?c=1:i.type==="radial"&&(c=2),this.uniformData[15]=c;let p=B(i.color??"#ffffff");this.uniformData[16]=p.r,this.uniformData[17]=p.g,this.uniformData[18]=p.b,this.uniformData[19]=p.a;let h=B(i.color2??i.color??"#ffffff");this.uniformData[20]=h.r,this.uniformData[21]=h.g,this.uniformData[22]=h.b,this.uniformData[23]=h.a,c===1?(this.uniformData[24]=i.startX??n.x,this.uniformData[25]=i.startY??n.y,this.uniformData[26]=i.endX??n.x+n.width,this.uniformData[27]=i.endY??n.y+n.height):c===2?(this.uniformData[24]=i.cx??n.x+n.width/2,this.uniformData[25]=i.cy??n.y+n.height/2,this.uniformData[26]=i.radius??Math.max(n.width,n.height)/2,this.uniformData[27]=0):(this.uniformData[24]=0,this.uniformData[25]=0,this.uniformData[26]=0,this.uniformData[27]=0);let m=this.uniformPool.getBuffer(this.device,this.uniformData),d=this.vertexPool.getBuffer(this.device,r);e.setPipeline(this.pipeline),e.setBindGroup(0,this.device.createBindGroup({layout:this.uniformLayout,entries:[{binding:0,resource:{buffer:m}}]})),e.setVertexBuffer(0,d),e.draw(r.length/2)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy()}};g();g();var Se=`
372
+ struct Uniforms {
373
+ transformCol0 : vec4<f32>,
374
+ transformCol1 : vec4<f32>,
375
+ transformCol2 : vec4<f32>,
376
+ params : vec4<f32>, // x = opacity, y = surfaceWidth, z = surfaceHeight, w = cornerRadius
377
+ color : vec4<f32>,
378
+ rect : vec4<f32>, // x, y, width, height
379
+ };
380
+
381
+ @group(0) @binding(0) var<uniform> u : Uniforms;
382
+
383
+ struct VSOut {
384
+ @builtin(position) pos : vec4<f32>,
385
+ @location(0) localPos : vec2<f32>,
386
+ };
387
+
388
+ @vertex fn vs(@location(0) xy : vec2<f32>) -> VSOut {
389
+ let transform = mat3x3<f32>(u.transformCol0.xyz, u.transformCol1.xyz, u.transformCol2.xyz);
390
+ let p = transform * vec3<f32>(xy, 1.0);
391
+
392
+ let surfaceSize = u.params.yz;
393
+ let clipX = (p.x / surfaceSize.x) * 2.0 - 1.0;
394
+ let clipY = 1.0 - (p.y / surfaceSize.y) * 2.0;
395
+
396
+ return VSOut(vec4<f32>(clipX, clipY, 0.0, 1.0), xy);
397
+ }
398
+
399
+ fn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {
400
+ let q = abs(p) - b + r;
401
+ return min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;
402
+ }
403
+
404
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
405
+ let center = u.rect.xy + u.rect.zw * 0.5;
406
+ let halfSize = u.rect.zw * 0.5;
407
+ let radius = u.params.w;
408
+
409
+ let d = sdRoundedRect(in.localPos - center, halfSize, radius);
410
+ let edgeAlpha = 1.0 - smoothstep(0.0, 1.0, d);
411
+ let alpha = u.color.a * u.params.x * edgeAlpha;
412
+ if (alpha <= 0.0) {
413
+ discard;
414
+ }
415
+
416
+ return vec4<f32>(u.color.rgb * alpha, alpha);
417
+ }
418
+ `;var q=class{device;pipeline;uniformLayout;uniformPool;vertexPool;uniformBindGroupCache=new M;uniformData=new Float32Array(24);vertexData=new Float32Array(8);constructor(e,t){this.device=e,this.uniformPool=new G(1024,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.vertexPool=new G(256,GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST);let r=e.createShaderModule({label:"solid.wgsl",code:Se});this.uniformLayout=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.pipeline=e.createRenderPipeline({label:"SolidPipeline",layout:e.createPipelineLayout({bindGroupLayouts:[this.uniformLayout]}),vertex:{module:r,entryPoint:"vs",buffers:[{arrayStride:8,attributes:[{shaderLocation:0,offset:0,format:"float32x2"}]}]},fragment:{module:r,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}})}resetPools(){this.uniformPool.reset(),this.vertexPool.reset()}draw(e,t,r,i,n,s,a=0,o){let l=B(i),c=o?.opacity??1;t.packIntoBuffer(this.uniformData,c,n,s,o?.transform),this.uniformData[15]=a,this.uniformData[16]=l.r,this.uniformData[17]=l.g,this.uniformData[18]=l.b,this.uniformData[19]=l.a,this.uniformData[20]=r.x,this.uniformData[21]=r.y,this.uniformData[22]=r.width,this.uniformData[23]=r.height;let p=this.uniformPool.getBuffer(this.device,this.uniformData);this.vertexData[0]=r.x,this.vertexData[1]=r.y,this.vertexData[2]=r.x+r.width,this.vertexData[3]=r.y,this.vertexData[4]=r.x,this.vertexData[5]=r.y+r.height,this.vertexData[6]=r.x+r.width,this.vertexData[7]=r.y+r.height;let h=this.vertexPool.getBuffer(this.device,this.vertexData);e.setPipeline(this.pipeline);let m=this.uniformBindGroupCache.getBindGroup(this.device,this.uniformLayout,p);e.setBindGroup(0,m),e.setVertexBuffer(0,h),e.draw(4)}destroy(){this.uniformPool.destroy(),this.vertexPool.destroy(),this.uniformBindGroupCache.destroy()}};g();var N=class{stack=[new DOMMatrix];push(e){let r=this.stack[this.stack.length-1].multiply(e);this.stack.push(r)}pop(){this.stack.length>1&&this.stack.pop()}getCurrent(){return this.stack[this.stack.length-1]}packIntoBuffer(e,t,r,i,n,s){let a=this.getCurrent();n&&(a=a.multiply(n)),e[0]=a.a,e[1]=a.b,e[2]=0,e[3]=0,e[4]=a.c,e[5]=a.d,e[6]=0,e[7]=0,e[8]=a.e,e[9]=a.f,e[10]=1,e[11]=0,e[12]=t,e[13]=r,e[14]=i,e[15]=s??0}destroy(){this.stack=[new DOMMatrix]}};function Fe(u){if(Array.isArray(u)){let r=u[3]??1;return[u[0]*r,u[1]*r,u[2]*r,r]}if("r"in u){let r=u.a??1;return{r:u.r*r,g:u.g*r,b:u.b*r,a:r}}let e=Array.from(u),t=e[3]??1;return[e[0]*t,e[1]*t,e[2]*t,t]}var we=new WeakMap;function Vt(u,e){let t=we.get(u);return(!t||t.format!==e||t.isDestroyed)&&(t=new oe(u,e),we.set(u,t)),t.resetPools(),t}var oe=class{device;transformStack=new N;clipStack=new A;quadPipeline;solidPipeline;shapeFillPipeline;pathPipeline;effectPipeline;slugPipeline;bindGroupCache=new O;samplerCache=new pe;format;isDestroyed=!1;rasterDrawCount=0;surfaceWidth=0;surfaceHeight=0;lastEncoder=null;constructor(e,t){this.device=e,this.format=t,this.quadPipeline=new z(e,t),this.solidPipeline=new q(e,t),this.shapeFillPipeline=new H(e,t),this.pathPipeline=new V(e,t),this.effectPipeline=new $(e,t),this.slugPipeline=new he(e,t)}beginFrame(e,t,r={r:0,g:0,b:0,a:0},i,n,s="clear"){this.surfaceWidth=i,this.surfaceHeight=n,e!==this.lastEncoder&&(this.lastEncoder=e,this.resetPools());let a=e.beginRenderPass({colorAttachments:[{view:t,clearValue:Fe(r),loadOp:s,storeOp:"store"}]});return this.clipStack.applyScissorToPass(a,i,n),a}endFrame(e){}resetPools(){this.quadPipeline.resetPools(),this.solidPipeline.resetPools(),this.shapeFillPipeline.resetPools(),this.pathPipeline.resetPools(),this.effectPipeline&&this.effectPipeline.resetPools(),this.slugPipeline.resetPools(),K.flushRetired(this.device),K.prune(this.device)}drawTexture(e,t,r,i){let n=this.samplerCache.getSampler(this.device),s={x:0,y:0,width:t.width,height:t.height};this.rasterDrawCount++,this.quadPipeline.draw(e,this.bindGroupCache,this.transformStack,t,n,s,r,this.surfaceWidth,this.surfaceHeight,i)}drawTextureRegion(e,t,r,i,n){let s=this.samplerCache.getSampler(this.device);this.rasterDrawCount++,this.quadPipeline.draw(e,this.bindGroupCache,this.transformStack,t,s,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawRect(e,t,r,i=0,n){let s=0,a=n;typeof i=="object"&&i!==null?(a=i,s=0):typeof i=="number"&&(s=i),this.rasterDrawCount++,this.solidPipeline.draw(e,this.transformStack,t,r,this.surfaceWidth,this.surfaceHeight,s,a)}drawPath(e,t,r,i,n){this.rasterDrawCount++,this.pathPipeline.drawPath(e,this.transformStack,t,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawShapeFill(e,t,r,i,n){this.rasterDrawCount++,this.shapeFillPipeline.draw(e,this.transformStack,t,r,i,this.surfaceWidth,this.surfaceHeight,n)}drawShape(e,t,r,i,n){let s={x:0,y:0,width:t.width,height:t.height};if(r&&r.type!=="none"){let a=ge(t);if(a.length>0&&(this.drawShapeFill(e,a,r,s,n),(!i||!i.width||i.width<=0)&&(r.type??"solid")==="solid"&&r.color)){let o=ie(t);o&&this.drawPath(e,o,r.color,1,{...n,strokeLineCap:"round"})}}if(i&&i.width&&i.width>0&&i.color){let a=ie(t);a&&this.drawPath(e,a,i.color,i.width,{...n,strokeLineCap:i.cap,trimStart:i.trimStart,trimEnd:i.trimEnd,trimOffset:i.trimOffset,strokeDashArray:i.dashArray,strokeDashOffset:i.dashOffset})}}drawRRect(e,t,r,i){this.drawRect(e,t.rect,r,t.rx,i)}getTemporaryTexture(e,t,r){return this.effectPipeline.getTexture(this.device,e,t,this.format,r)}getTemporaryBuffer(e){return this.effectPipeline.getBuffer(this.device,e)}composite(e,t,r,i,n){return this.effectPipeline.composite(e,this.bindGroupCache,this.samplerCache,t,r,i,this.format,n)}applyMotionBlur(e,t,r,i,n=180,s=16,a){return this.effectPipeline.applyMotionBlur(e,this.bindGroupCache,this.samplerCache,t,r,i,n,s,this.format,a)}getCurrentTransform(){return this.transformStack.getCurrent()}getTransformStack(){return this.transformStack}getSurfaceWidth(){return this.surfaceWidth}getSurfaceHeight(){return this.surfaceHeight}pushIdentity(){let e=this.transformStack.getCurrent();this.pushTransform(e.inverse())}pushTransform(e){this.transformStack.push(e)}popTransform(){this.transformStack.pop()}pushScissor(e){this.clipStack.pushScissor(e,this.surfaceWidth,this.surfaceHeight)}pushScissorLocal(e){let t=this.transformStack.getCurrent(),r=[t.transformPoint(new DOMPoint(e.x,e.y)),t.transformPoint(new DOMPoint(e.x+e.width,e.y)),t.transformPoint(new DOMPoint(e.x,e.y+e.height)),t.transformPoint(new DOMPoint(e.x+e.width,e.y+e.height))],i=r.map(p=>p.x),n=r.map(p=>p.y),s=Math.min(...i),a=Math.min(...n),o=Math.max(...i)-s,l=Math.max(...n)-a,c=this.clipStack.getCurrentScissor(this.surfaceWidth,this.surfaceHeight);if(c){let p=Math.max(s,c.x),h=Math.max(a,c.y),m=Math.min(s+o,c.x+c.width),d=Math.min(a+l,c.y+c.height);s=p,a=h,o=Math.max(0,m-p),l=Math.max(0,d-h)}this.clipStack.pushScissor({x:s,y:a,width:o,height:l},this.surfaceWidth,this.surfaceHeight)}popScissor(){this.clipStack.popScissor()}suspendScissors(){let e=this.clipStack.saveScissors();return this.clipStack.clearScissors(),e}resumeScissors(e){this.clipStack.restoreScissors(e)}pushStencilClip(e){this.clipStack.pushStencilClip(e)}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}};g();async function jt(u,e){if(typeof window<"u"&&typeof FontFace<"u")try{let r=await new FontFace(u,`url(${e})`).load();document.fonts.add(r),await document.fonts.ready}catch(t){console.warn(`[preloadFont] Failed to load font "${u}" from ${e}:`,t)}else await ue(u,e)}export{Le as a,$ as b,Vt as c,oe as d,jt as e};
@@ -0,0 +1 @@
1
+ import{e as d}from"./chunk-BVF64D6H.mjs";d();var u;function f(i){u=i}function P(){return u?.()??new r}var r=class{kind="node";ortPromise;async ort(){return this.ortPromise||(this.ortPromise=import("./onnxruntime-node-56GSZEH3.mjs").catch(o=>{throw this.ortPromise=void 0,new Error(`onnxruntime-node failed to load (${String(o)}). Install it in the environment or provide a custom SessionProvider.`)})),this.ortPromise}async createSession(o){let s=await this.ort(),n=await s.InferenceSession.create(o,{executionProviders:["cpu"],graphOptimizationLevel:"all"});return{run:async e=>{let m={[n.inputNames.includes(e.name)?e.name:n.inputNames[0]??e.name]:new s.Tensor("float32",e.data,[...e.dims])},c=await n.run(m),t={};for(let[p,a]of Object.entries(c))t[p]={data:a.data,dims:[...a.dims]};return t},release:()=>{n.release()}}}};export{f as a,P as b};
@@ -0,0 +1 @@
1
+ import{b}from"./chunk-CYY366IE.mjs";import{g as n}from"./chunk-P3HBP725.mjs";import{a as l}from"./chunk-B6PLCMBM.mjs";import{a as g}from"./chunk-6YJP57MZ.mjs";import{e as c}from"./chunk-BVF64D6H.mjs";c();var S={async extractFromChannels(a,u,r={}){let x=await b(),t=r.fps??24,p=r.targetWidth??512,e=await g.extractFeatures(x,a,u,t,r,p),i=e.channelSamples??{primary:new Float32Array(e.numFrames),beat:new Float32Array(e.numFrames),bass:new Float32Array(e.numFrames),energy:new Float32Array(e.numFrames)},y={nodeId:"audio_primary",channel:"primary",textureView:e.textureView,texture:e.texture,buffer:e.primaryBuffer,stats:e.stats.primary},w={nodeId:"audio_beat",channel:"beat",textureView:e.textureView,texture:e.texture,buffer:e.beatBuffer,stats:e.stats.beat},B={nodeId:"audio_bass",channel:"bass",textureView:e.textureView,texture:e.texture,buffer:e.bassBuffer,stats:e.stats.bass},F={nodeId:"audio_energy",channel:"energy",textureView:e.textureView,texture:e.texture,buffer:e.energyBuffer,stats:e.stats.energy},o=n(i.primary,t,y),m=n(i.beat,t,w),d=n(i.bass,t,B),f=n(i.energy,t,F);return{primary:o,beat:m,bass:d,energy:f,durationSec:e.durationSec,numFrames:e.numFrames,sampleRate:u,textureView:e.textureView,texture:e.texture,primaryBuffer:e.primaryBuffer,beatBuffer:e.beatBuffer,bassBuffer:e.bassBuffer,energyBuffer:e.energyBuffer,seekFrame(s){o.seekFrame?.(s),m.seekFrame?.(s),d.seekFrame?.(s),f.seekFrame?.(s)}}},async extract(a,u={}){let r=await l(a);if(!r||r.channels.length===0)throw new Error(`Failed to decode audio source for feature extraction: ${a}`);return S.extractFromChannels(r.channels,r.sampleRate,u)}};export{S as a};
@@ -0,0 +1,52 @@
1
+ import{a as G}from"./chunk-YSTLMWCG.mjs";import{e as v}from"./chunk-BVF64D6H.mjs";v();v();v();function A(){return[{x:0,y:0},{x:100,y:0},{x:0,y:100},{x:100,y:100}]}function T(a){let t=a&&a.length===4?a:A(),c=[{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}],y=t.map(e=>({x:e.x/100,y:e.y/100})),r=[],u=[];for(let e=0;e<4;e++){let o=y[e].x,n=y[e].y,l=c[e].x,f=c[e].y;r.push([o,n,1,0,0,0,-o*l,-n*l]),u.push(l),r.push([0,0,0,o,n,1,-o*f,-n*f]),u.push(f)}let d=8;for(let e=0;e<d;e++){let o=e,n=Math.abs(r[e][e]);for(let i=e+1;i<d;i++)Math.abs(r[i][e])>n&&(n=Math.abs(r[i][e]),o=i);let l=r[e];r[e]=r[o],r[o]=l;let f=u[e];u[e]=u[o],u[o]=f;let x=r[e][e];Math.abs(x)<1e-12&&(r[e][e]=x<0?-1e-12:1e-12);for(let i=e+1;i<d;i++){let h=r[i][e]/r[e][e];for(let g=e;g<d;g++)r[i][g]-=h*r[e][g];u[i]-=h*u[e]}}let s=new Array(8).fill(0);for(let e=d-1;e>=0;e--){let o=u[e];for(let n=e+1;n<d;n++)o-=r[e][n]*s[n];s[e]=o/r[e][e]}return[s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],1]}var H=`
2
+ struct CornerPinUniforms {
3
+ matrix_row0 : vec4<f32>,
4
+ matrix_row1 : vec4<f32>,
5
+ matrix_row2 : vec4<f32>,
6
+ };
7
+
8
+ @group(0) @binding(0) var<uniform> u : CornerPinUniforms;
9
+ @group(1) @binding(0) var tex : texture_2d<f32>;
10
+ @group(1) @binding(1) var samp : sampler;
11
+
12
+ struct VSOut {
13
+ @builtin(position) pos : vec4<f32>,
14
+ @location(0) uv : vec2<f32>,
15
+ };
16
+
17
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
18
+ var pos = array<vec2<f32>, 4>(
19
+ vec2<f32>(-1.0, 1.0),
20
+ vec2<f32>(1.0, 1.0),
21
+ vec2<f32>(-1.0, -1.0),
22
+ vec2<f32>(1.0, -1.0)
23
+ );
24
+ var uv = array<vec2<f32>, 4>(
25
+ vec2<f32>(0.0, 0.0),
26
+ vec2<f32>(1.0, 0.0),
27
+ vec2<f32>(0.0, 1.0),
28
+ vec2<f32>(1.0, 1.0)
29
+ );
30
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
31
+ }
32
+
33
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
34
+ let x = in.uv.x;
35
+ let y = in.uv.y;
36
+
37
+ let d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;
38
+ if (abs(d) < 1e-6) {
39
+ return vec4<f32>(0.0);
40
+ }
41
+
42
+ let src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;
43
+ let src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;
44
+
45
+ if (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {
46
+ return vec4<f32>(0.0);
47
+ }
48
+
49
+ let color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);
50
+ return color;
51
+ }
52
+ `,U=new WeakMap;function D(a,t){let c=U.get(a);if(!c){let y=a.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),r=a.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),u=a.createShaderModule({label:"corner_pin.wgsl",code:H});c={pinPipeline:a.createRenderPipeline({label:"CornerPinPipeline",layout:a.createPipelineLayout({bindGroupLayouts:[y,r]}),vertex:{module:u,entryPoint:"vs"},fragment:{module:u,entryPoint:"fs",targets:[{format:t,blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}}),pinUniformLayout:y,pinTextureLayout:r},U.set(a,c)}return c}var R=async a=>{let{ctx:t,props:c,drawChild:y,targetTexture:r,targetView:u,targetWidth:d,targetHeight:s,encoder:e}=a,{virtualMedia:o}=c,n=o?.operation;if(!n||n.op!=="CornerPin")return;let l=o.children?.[0];if(!l)return;let f=n.originalWidth??l.metadata?.width??c.containerWidth??d,x=n.originalHeight??l.metadata?.height??c.containerHeight??s;a.pass.end();let i=t.renderer.getTemporaryTexture(f,x,[...c.excludeTextures||[],r]),h=i.createView();t.renderer.beginFrame(e,h,{r:0,g:0,b:0,a:0},f,x,"clear").end(),t.renderer.pushScissor({x:0,y:0,width:f,height:x}),t.renderer.pushIdentity(),await y(l,{...c,containerWidth:f,containerHeight:x,virtualMedia:l},h,i,f,x),t.renderer.popTransform(),t.renderer.popScissor();let L=n.points||[],m=T(L),p=new Float32Array(12);p[0]=m[0],p[1]=m[1],p[2]=m[2],p[3]=0,p[4]=m[3],p[5]=m[4],p[6]=m[5],p[7]=0,p[8]=m[6],p[9]=m[7],p[10]=m[8],p[11]=0;let{pinPipeline:S,pinUniformLayout:B,pinTextureLayout:C}=D(t.device,t.renderer.format),M=t.renderer.samplerCache.getSampler(t.device),W=t.renderer.getTemporaryBuffer(p),F=t.device.createBindGroup({layout:B,entries:[{binding:0,resource:{buffer:W}}]}),V=t.renderer.bindGroupCache.getBindGroup(t.device,C,i,M),P=t.renderer.getTemporaryTexture(d,s,[i,r,...c.excludeTextures||[]]),b=e.beginRenderPass({colorAttachments:[{view:P.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});b.setPipeline(S),b.setBindGroup(0,F),b.setBindGroup(1,V),b.draw(4),b.end();let w=t.renderer.beginFrame(e,u,{r:0,g:0,b:0,a:0},d,s,"load");t.renderer.drawTexture(w,P,{x:0,y:0,width:d,height:s},{opacity:n.opacity??1}),a.pass=w};var q=G({WebGPURenderer:R});export{q as a};
@@ -0,0 +1 @@
1
+ import{e as G}from"./chunk-BVF64D6H.mjs";G();var M=class{deviceCaches=new WeakMap;devicePromises=new WeakMap;rawDataCache=new Map;rawDataPromises=new Map;listeners=new Set;onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}emit(e){for(let t of this.listeners)try{t(e)}catch{}}getAnyMatching(e,t){let a=this.getCache(t),r=Array.from(a.keys());for(let o=r.length-1;o>=0;o--){let u=r[o];if(u.startsWith(e))return a.get(u)}}getOrCreateRawDataPromise(e){let t=this.rawDataPromises.get(e);if(!t){let a,r;t={promise:new Promise((u,f)=>{a=u,r=f}),resolve:a,reject:r},this.rawDataPromises.set(e,t)}return t}rejectRawDataPromise(e,t){let a=this.rawDataPromises.get(e);a&&(a.reject(t),this.rawDataPromises.delete(e)),this.emit(e)}getCache(e){let t=this.deviceCaches.get(e);return t||(t=new Map,this.deviceCaches.set(e,t)),t}getPromises(e){let t=this.devicePromises.get(e);return t||(t=new Map,this.devicePromises.set(e,t)),t}get(e,t){return this.getCache(t).get(e)}set(e,t,a){let r=this.getCache(t),o=r.get(e);if(o&&o!==a){if(o.texture!==a.texture){let u=o.texture;t.queue.onSubmittedWorkDone().then(()=>{try{u.destroy()}catch{}}).catch(()=>{})}if(o.vertexBuffer!==a.vertexBuffer){let u=o.vertexBuffer;t.queue.onSubmittedWorkDone().then(()=>{try{u.destroy()}catch{}}).catch(()=>{})}}r.set(e,a)}getRawData(e){return this.rawDataCache.get(e)}getAnyRawData(){let e=Array.from(this.rawDataCache.values());return e[e.length-1]}createOrUpdate(e,t,a,r,o){let u={points:a,size:r,type:o};this.rawDataCache.set(e,u);let f=this.rawDataPromises.get(e);f&&(f.resolve(u),this.rawDataPromises.delete(e));let P=[];if(o==="3D"){let c=0;for(let s=0;s<r;s++)for(let n=0;n<r;n++)for(let i=0;i<r;i++){let h=i/(r-1||1),l=n/(r-1||1),d=s/(r-1||1),D=a[c]||[h,l,d];c++,P.push(h-.5,l-.5,d-.5),P.push(D[0],D[1],D[2])}}else for(let c=0;c<a.length;c++){let s=c/(a.length-1||1),n=a[c];P.push(s-.5,0,0),P.push(n[0],n[1],n[2])}let v=new Float32Array(P),m=this.get(e,t),g=m?.texture;if(!g||m?.size!==r||m?.type!==o){if(m){let c=m.texture;t.queue.onSubmittedWorkDone().then(()=>{try{c.destroy()}catch{}}).catch(()=>{})}o==="3D"?g=t.createTexture({size:[r,r,r],dimension:"3d",format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}):g=t.createTexture({size:[r,1,1],dimension:"1d",format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST})}if(o==="3D"){let s=Math.ceil(r*4/256)*256,n=new Uint8Array(s*r*r),i=0;for(let h=0;h<r;h++)for(let l=0;l<r;l++)for(let d=0;d<r;d++){let D=d/(r-1||1),T=l/(r-1||1),p=h/(r-1||1),b=a[i]||[D,T,p];i++;let y=d*4+l*s+h*s*r;n[y]=Math.max(0,Math.min(255,Math.round(b[0]*255))),n[y+1]=Math.max(0,Math.min(255,Math.round(b[1]*255))),n[y+2]=Math.max(0,Math.min(255,Math.round(b[2]*255))),n[y+3]=255}t.queue.writeTexture({texture:g},n,{bytesPerRow:s,rowsPerImage:r},[r,r,r])}else{let s=new Uint8Array(r*4);for(let n=0;n<r;n++){let i=a[n]||[n/(r-1||1),0,0],h=n*4;s[h]=Math.max(0,Math.min(255,Math.round(i[0]*255))),s[h+1]=Math.max(0,Math.min(255,Math.round(i[1]*255))),s[h+2]=Math.max(0,Math.min(255,Math.round(i[2]*255))),s[h+3]=255}t.queue.writeTexture({texture:g},s,{},[r,1,1])}let w=m?.vertexBuffer;if(!w||w.size<v.byteLength){if(m){let c=m.vertexBuffer;t.queue.onSubmittedWorkDone().then(()=>{try{c.destroy()}catch{}}).catch(()=>{})}w=t.createBuffer({size:v.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}t.queue.writeBuffer(w,0,v);let x={texture:g,type:o,size:r,vertexBuffer:w,vertexCount:a.length};return this.set(e,t,x),this.emit(e),x}async getOrLoad(e,t,a){if(a?.aborted)throw new DOMException("The operation was aborted.","AbortError");let r=this.get(e,t);if(r)return r;let o=this.rawDataCache.get(e);if(o)return this.createOrUpdate(e,t,o.points,o.size,o.type);let u=this.getPromises(t),f=u.get(e);return f||(f=(async()=>{if(e.startsWith("runtime://")){let c=this.getOrCreateRawDataPromise(e),s,n=new Promise((l,d)=>{let D=()=>{s=setTimeout(()=>{(()=>{if(typeof window<"u"){let p=window.renderer_delayRenderHandles;if(Array.isArray(p)&&p.length>0)return!0}if(typeof globalThis<"u"){let p=globalThis.__GATEWAI_DELAYS__;if(p instanceof Set&&p.size>0)return!0}return!1})()?D():d(new Error(`Timeout waiting for runtime LUT "${e}" after 5000ms.`))},5e3)};D()}),i,h;a&&(h=new Promise((l,d)=>{i=()=>{d(new DOMException("The operation was aborted.","AbortError"))},a.addEventListener("abort",i)}));try{let l=[c.promise,n];h&&l.push(h);let d=await Promise.race(l);return this.createOrUpdate(e,t,d.points,d.size,d.type)}finally{clearTimeout(s),i&&a&&a.removeEventListener("abort",i)}}let P=await fetch(e,{signal:a});if(!P.ok)throw new Error(`Failed to load LUT file: ${P.statusText}`);let m=(await P.text()).split(/\r?\n/),g=33,w="3D",x=[];for(let c of m){let s=c.trim();if(!s||s.startsWith("#"))continue;if(s.startsWith("LUT_3D_SIZE")){let i=s.split(/\s+/);g=parseInt(i[1],10),w="3D";continue}if(s.startsWith("LUT_1D_SIZE")){let i=s.split(/\s+/);g=parseInt(i[1],10),w="1D";continue}if(s.match(/^[a-zA-Z]/))continue;let n=s.split(/\s+/).map(Number);n.length===3&&n.every(i=>!isNaN(i))&&x.push([n[0],n[1],n[2]])}if(x.length===0)throw new Error("No valid color mappings found in LUT file.");return this.createOrUpdate(e,t,x,g,w)})(),u.set(e,f),f.catch(()=>{u.delete(e)})),f}evict(e,t){let a=this.getCache(t),r=a.get(e);if(r){let o=r.texture,u=r.vertexBuffer;t.queue.onSubmittedWorkDone().then(()=>{try{o.destroy()}catch{}try{u.destroy()}catch{}}).catch(()=>{}),a.delete(e)}this.getPromises(t).delete(e)}hasPending(e){let t=this.devicePromises.get(e);return t!==void 0&&t.size>0||this.rawDataPromises.size>0}async awaitAllPending(e){let t=Array.from(this.getPromises(e).values());await Promise.all(t)}destroy(){this.deviceCaches=new WeakMap,this.devicePromises=new WeakMap,this.rawDataCache.clear(),this.rawDataPromises.clear()}},U="__GATEWAI_LUT_STORE__",A=(globalThis[U]||(globalThis[U]=new M),globalThis[U]);export{A as a};
@@ -0,0 +1,60 @@
1
+ import{a as I}from"./chunk-YSTLMWCG.mjs";import{e as R}from"./chunk-BVF64D6H.mjs";R();R();var ie=e=>e*e,oe=e=>e*(2-e),se=e=>e<.5?2*e*e:-1+(4-2*e)*e,ae=e=>{let r=2*Math.PI/3;return e===0?0:e===1?1:2**(-10*e)*Math.sin((e*10-.75)*r)+1},ce=(e,r)=>{switch(r){case"ease-in":return ie(e);case"ease-out":return oe(e);case"ease-in-out":return se(e);case"spring":return ae(e);default:return e}},_=(e,r,i,s,o)=>{let n=o*o,t=n*o;return .5*(2*r+(-e+i)*o+(2*e-5*r+4*i-s)*n+(-e+3*r-3*i+s)*t)};function D(e,r,i="spline"){if(e.length===0)return{x:50,y:50,scale:1};if(e.length===1){let n=e[0];return{x:n.x??50,y:n.y??50,scale:n.scale??1}}let s=0;for(let n=0;n<e.length;n++){let t=e[n],x=t.holdMs??0,l=t.durationMs??0;if(r<=s+x)return{x:t.x??50,y:t.y??50,scale:t.scale??1};if(s+=x,n<e.length-1&&l>0){if(r<=s+l){let v=(r-s)/l,u=ce(Math.max(0,Math.min(1,v)),t.easing),d=e[n+1];if(i==="spline"){let g=e[n-1]??t,f=e[n+2]??d;return{x:_(g.x??50,t.x??50,d.x??50,f.x??50,u),y:_(g.y??50,t.y??50,d.y??50,f.y??50,u),scale:_(g.scale??1,t.scale??1,d.scale??1,f.scale??1,u)}}return{x:(t.x??50)+((d.x??50)-(t.x??50))*u,y:(t.y??50)+((d.y??50)-(t.y??50))*u,scale:(t.scale??1)+((d.scale??1)-(t.scale??1))*u}}s+=l}}let o=e[e.length-1];return{x:o.x??50,y:o.y??50,scale:o.scale??1}}function E(e,r,i,s){let o=100,n=100;if(s!=="input"){let G=s.split(":"),p=Number(G[0]),b=Number(G[1]);if(!Number.isNaN(p)&&!Number.isNaN(b)&&p>0&&b>0){let a=p/b,c=r/i;c>a?(n=100,o=a/c*100):(o=100,n=c/a*100)}}let t=o/100*r,x=n/100*i,l=Math.max(e.scale,1),v=t/l,u=x/l,d=e.x/100*r,g=e.y/100*i,f=v/2,h=u/2,T=Math.max(f,Math.min(r-f,d)),S=Math.max(h,Math.min(i-h,g));return{x:T-f,y:S-h,width:v,height:u}}var ue=`
2
+ struct MotionBlurUniforms {
3
+ prev_origin : vec2<f32>,
4
+ prev_size : vec2<f32>,
5
+ curr_origin : vec2<f32>,
6
+ curr_size : vec2<f32>,
7
+ samples : f32,
8
+ blurSize : f32,
9
+ padding : vec2<f32>,
10
+ };
11
+
12
+ @group(0) @binding(0) var<uniform> u : MotionBlurUniforms;
13
+ @group(1) @binding(0) var tex : texture_2d<f32>;
14
+ @group(1) @binding(1) var samp : sampler;
15
+
16
+ struct VSOut {
17
+ @builtin(position) pos : vec4<f32>,
18
+ @location(0) uv : vec2<f32>,
19
+ };
20
+
21
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
22
+ var pos = array<vec2<f32>, 4>(
23
+ vec2<f32>(-1.0, 1.0),
24
+ vec2<f32>(1.0, 1.0),
25
+ vec2<f32>(-1.0, -1.0),
26
+ vec2<f32>(1.0, -1.0)
27
+ );
28
+ var uv = array<vec2<f32>, 4>(
29
+ vec2<f32>(0.0, 0.0),
30
+ vec2<f32>(1.0, 0.0),
31
+ vec2<f32>(0.0, 1.0),
32
+ vec2<f32>(1.0, 1.0)
33
+ );
34
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
35
+ }
36
+
37
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
38
+ let uv = in.uv;
39
+ let n = i32(u.samples);
40
+
41
+ if (n <= 1) {
42
+ let p_curr = u.curr_origin + uv * u.curr_size;
43
+ return textureSampleLevel(tex, samp, p_curr, 0.0);
44
+ }
45
+
46
+ var color = vec4<f32>(0.0);
47
+ for (var i = 0; i < n; i = i + 1) {
48
+ // Use blurSize to control the shutter interval width.
49
+ // t=1.0 is current frame, t=0.0 is previous frame.
50
+ let t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;
51
+
52
+ let origin = mix(u.prev_origin, u.curr_origin, t);
53
+ let size = mix(u.prev_size, u.curr_size, t);
54
+ let p_sample = origin + uv * size;
55
+
56
+ color += textureSampleLevel(tex, samp, p_sample, 0.0);
57
+ }
58
+ return color / f32(n);
59
+ }
60
+ `,C=new WeakMap,m=new Float32Array(12);function le(e,r){let i=C.get(e);if(!i){let s=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),o=e.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),n=e.createShaderModule({label:"kenburns_motionblur.wgsl",code:ue});i={motionBlurPipeline:e.createRenderPipeline({label:"MotionBlurPipeline",layout:e.createPipelineLayout({bindGroupLayouts:[s,o]}),vertex:{module:n,entryPoint:"vs"},fragment:{module:n,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}}),motionBlurUniformLayout:s,singleTextureLayout:o},C.set(e,i)}return i}var X=async e=>{let{ctx:r,encoder:i,pass:s,targetView:o,targetTexture:n,targetWidth:t,targetHeight:x,props:l,drawChild:v}=e,{virtualMedia:u,containerWidth:d,containerHeight:g,frame:f,fps:h,trimStartOverride:T,opacity:S=1,inheritedSeekOffset:G=0}=l,p=u.operation;if(p?.op!=="KenBurns")return;let b=u.children?.[0];if(!b)return;let a=p.originalWidth??b.metadata?.width??u.metadata?.width??d??t,c=p.originalHeight??b.metadata?.height??u.metadata?.height??g??x,L=p.keyframes??[],W=p.movementStyle??"spline",N=p.aspectRatio||"input",Y=((T??0)+G)*1e3,z=Math.max(1,h??30),j=1e3/z,V=Y+(f??0)/z*1e3,q=V-j,J=D(L,V,W),Q=D(L,q,W),y=E(J,a,c,N),w=E(Q,a,c,N),K=d??t,O=g??x,F={x:0,y:0,width:K,height:O},B=r.renderer.getTemporaryTexture(a,c,[...l.excludeTextures||[],n]),H=B.createView();s.end(),r.renderer.beginFrame(i,H,{r:0,g:0,b:0,a:0},a,c,"clear").end(),r.renderer.pushScissor({x:0,y:0,width:a,height:c}),r.renderer.pushIdentity(),await v(b,{...l,containerWidth:a,containerHeight:c},H,B,a,c),r.renderer.popTransform(),r.renderer.popScissor();let A=p.motionBlurSize??1.5,M=null;if(A>0){let{motionBlurPipeline:Z,motionBlurUniformLayout:$,singleTextureLayout:k}=le(r.device,r.renderer.format),ee=r.renderer.samplerCache.getSampler(r.device);m[0]=w.x/a,m[1]=w.y/c,m[2]=w.width/a,m[3]=w.height/c,m[4]=y.x/a,m[5]=y.y/c,m[6]=y.width/a,m[7]=y.height/c,m[8]=12,m[9]=A;let re=r.renderer.getTemporaryBuffer(m);M=r.renderer.getTemporaryTexture(K,O,[n,B,...l.excludeTextures||[]]);let te=M.createView(),P=i.beginRenderPass({colorAttachments:[{view:te,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});P.setPipeline(Z),P.setBindGroup(0,r.device.createBindGroup({layout:$,entries:[{binding:0,resource:{buffer:re}}]})),P.setBindGroup(1,r.renderer.bindGroupCache.getBindGroup(r.device,k,B,ee)),P.draw(4),P.end()}let U=r.renderer.beginFrame(i,o,{r:0,g:0,b:0,a:0},t,x,"load");M?r.renderer.drawTexture(U,M,F,{opacity:S}):r.renderer.drawTextureRegion(U,B,y,F,{opacity:S}),e.pass=U};var ge=I({WebGPURenderer:X});export{ge as a};