minerva-design 1.4.0 → 1.6.0

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 (824) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +3072 -611
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +595 -5
  7. package/dist/charts/canvas.d.cts +4 -3
  8. package/dist/charts/canvas.d.ts +4 -3
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +155 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +370 -255
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +34 -1
  34. package/dist/charts/engine/controller.d.ts +34 -1
  35. package/dist/charts/engine/controller.js +318 -273
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1708 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +339 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +76 -0
  82. package/dist/charts/engine/graph/force.d.ts +76 -0
  83. package/dist/charts/engine/graph/force.js +423 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +50 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +50 -0
  89. package/dist/charts/engine/graph/geometry.js +197 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +52 -0
  104. package/dist/charts/engine/graph/model.d.ts +52 -0
  105. package/dist/charts/engine/graph/model.js +108 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +640 -0
  120. package/dist/charts/engine/graph/types.d.ts +640 -0
  121. package/dist/charts/engine/graph/worker.cjs +52 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +135 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.d.cts +17 -0
  136. package/dist/charts/engine/labels.d.ts +17 -0
  137. package/dist/charts/engine/labels.js +28 -4
  138. package/dist/charts/engine/labels.js.map +1 -1
  139. package/dist/charts/engine/layout.cjs +1 -1
  140. package/dist/charts/engine/layout.cjs.map +1 -1
  141. package/dist/charts/engine/layout.d.cts +9 -0
  142. package/dist/charts/engine/layout.d.ts +9 -0
  143. package/dist/charts/engine/layout.js +11 -2
  144. package/dist/charts/engine/layout.js.map +1 -1
  145. package/dist/charts/engine/model.cjs +1 -1
  146. package/dist/charts/engine/model.cjs.map +1 -1
  147. package/dist/charts/engine/model.d.cts +73 -3
  148. package/dist/charts/engine/model.d.ts +73 -3
  149. package/dist/charts/engine/model.js +258 -154
  150. package/dist/charts/engine/model.js.map +1 -1
  151. package/dist/charts/engine/orderbook/field.cjs +37 -0
  152. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  153. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  154. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  155. package/dist/charts/engine/orderbook/field.js +297 -0
  156. package/dist/charts/engine/orderbook/field.js.map +1 -0
  157. package/dist/charts/engine/orderbook/format.cjs +1 -1
  158. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  159. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  160. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  161. package/dist/charts/engine/orderbook/format.js +5 -5
  162. package/dist/charts/engine/orderbook/format.js.map +1 -1
  163. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  164. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  165. package/dist/charts/engine/orderbook/heatmap.js +566 -475
  166. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  167. package/dist/charts/engine/orderbook/host.cjs +1 -1
  168. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  169. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  170. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  171. package/dist/charts/engine/orderbook/host.js +27 -5
  172. package/dist/charts/engine/orderbook/host.js.map +1 -1
  173. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  174. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  175. package/dist/charts/engine/orderbook/ladder.js +1 -1
  176. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  177. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  178. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  179. package/dist/charts/engine/orderbook/layout.d.cts +42 -0
  180. package/dist/charts/engine/orderbook/layout.d.ts +42 -0
  181. package/dist/charts/engine/orderbook/layout.js +76 -0
  182. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  183. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  184. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  185. package/dist/charts/engine/orderbook/tape.js +4 -4
  186. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  187. package/dist/charts/engine/orderbook/types.d.cts +27 -3
  188. package/dist/charts/engine/orderbook/types.d.ts +27 -3
  189. package/dist/charts/engine/overlay.cjs +1 -1
  190. package/dist/charts/engine/overlay.cjs.map +1 -1
  191. package/dist/charts/engine/overlay.d.cts +27 -0
  192. package/dist/charts/engine/overlay.d.ts +27 -0
  193. package/dist/charts/engine/overlay.js +34 -12
  194. package/dist/charts/engine/overlay.js.map +1 -1
  195. package/dist/charts/engine/presets.cjs +2 -2
  196. package/dist/charts/engine/presets.cjs.map +1 -1
  197. package/dist/charts/engine/presets.d.cts +35 -3
  198. package/dist/charts/engine/presets.d.ts +35 -3
  199. package/dist/charts/engine/presets.js +121 -101
  200. package/dist/charts/engine/presets.js.map +1 -1
  201. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  202. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  203. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  204. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  205. package/dist/charts/engine/renderers/detect.cjs +1 -1
  206. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  207. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  208. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  209. package/dist/charts/engine/renderers/detect.js +23 -21
  210. package/dist/charts/engine/renderers/detect.js.map +1 -1
  211. package/dist/charts/engine/renderers/follow.cjs +2 -0
  212. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  213. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  214. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  215. package/dist/charts/engine/renderers/follow.js +10 -0
  216. package/dist/charts/engine/renderers/follow.js.map +1 -0
  217. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  218. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  219. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  220. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  221. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  222. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  223. package/dist/charts/engine/renderers/gl.cjs +1 -1
  224. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  225. package/dist/charts/engine/renderers/gl.js +1 -1
  226. package/dist/charts/engine/renderers/gl.js.map +1 -1
  227. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  228. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  229. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  230. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  231. package/dist/charts/engine/renderers/shaders.js +9 -6
  232. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  233. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  234. package/dist/charts/engine/renderers/types.d.cts +2 -0
  235. package/dist/charts/engine/renderers/types.d.ts +2 -0
  236. package/dist/charts/engine/renderers/types.js.map +1 -1
  237. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  238. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  239. package/dist/charts/engine/renderers/webgl.js +85 -64
  240. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  241. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  242. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  243. package/dist/charts/engine/renderers/webgl2.js +72 -58
  244. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  245. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  246. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  247. package/dist/charts/engine/renderers/webgpu.js +1 -1
  248. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  249. package/dist/charts/engine/scene.cjs +1 -1
  250. package/dist/charts/engine/scene.cjs.map +1 -1
  251. package/dist/charts/engine/scene.d.cts +104 -4
  252. package/dist/charts/engine/scene.d.ts +104 -4
  253. package/dist/charts/engine/scene.js +412 -193
  254. package/dist/charts/engine/scene.js.map +1 -1
  255. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  256. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  257. package/dist/charts/engine/shapes/bullet.js +110 -110
  258. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  259. package/dist/charts/engine/shapes/chart.cjs +1 -1
  260. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  261. package/dist/charts/engine/shapes/chart.js +4 -1
  262. package/dist/charts/engine/shapes/chart.js.map +1 -1
  263. package/dist/charts/engine/shapes/chord.cjs +2 -0
  264. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  265. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  266. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  267. package/dist/charts/engine/shapes/chord.js +419 -0
  268. package/dist/charts/engine/shapes/chord.js.map +1 -0
  269. package/dist/charts/engine/shapes/draw.cjs +1 -1
  270. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  271. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  272. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  273. package/dist/charts/engine/shapes/draw.js +47 -17
  274. package/dist/charts/engine/shapes/draw.js.map +1 -1
  275. package/dist/charts/engine/shapes/hit.cjs +1 -1
  276. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  277. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  278. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  279. package/dist/charts/engine/shapes/hit.js +75 -46
  280. package/dist/charts/engine/shapes/hit.js.map +1 -1
  281. package/dist/charts/engine/shapes/index.d.cts +3 -2
  282. package/dist/charts/engine/shapes/index.d.ts +3 -2
  283. package/dist/charts/engine/shapes/labels.cjs +1 -1
  284. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  285. package/dist/charts/engine/shapes/labels.js +12 -4
  286. package/dist/charts/engine/shapes/labels.js.map +1 -1
  287. package/dist/charts/engine/shapes/layout.cjs +2 -2
  288. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  289. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  290. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  291. package/dist/charts/engine/shapes/layout.js +106 -78
  292. package/dist/charts/engine/shapes/layout.js.map +1 -1
  293. package/dist/charts/engine/shapes/scene.cjs +1 -1
  294. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  295. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  296. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  297. package/dist/charts/engine/shapes/scene.js +62 -19
  298. package/dist/charts/engine/shapes/scene.js.map +1 -1
  299. package/dist/charts/engine/shapes/types.d.cts +121 -8
  300. package/dist/charts/engine/shapes/types.d.ts +121 -8
  301. package/dist/charts/engine/signature.cjs +1 -1
  302. package/dist/charts/engine/signature.cjs.map +1 -1
  303. package/dist/charts/engine/signature.js +1 -1
  304. package/dist/charts/engine/signature.js.map +1 -1
  305. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  306. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  307. package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
  308. package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
  309. package/dist/charts/engine/three-d/canvas2d.js +166 -67
  310. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  311. package/dist/charts/engine/three-d/chart.cjs +1 -1
  312. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  313. package/dist/charts/engine/three-d/chart.js +219 -215
  314. package/dist/charts/engine/three-d/chart.js.map +1 -1
  315. package/dist/charts/engine/three-d/detect.cjs +1 -1
  316. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  317. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  318. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  319. package/dist/charts/engine/three-d/detect.js +22 -20
  320. package/dist/charts/engine/three-d/detect.js.map +1 -1
  321. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  322. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  323. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  324. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  325. package/dist/charts/engine/three-d/geometry.js +106 -90
  326. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  327. package/dist/charts/engine/three-d/model.cjs +1 -1
  328. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  329. package/dist/charts/engine/three-d/model.d.cts +2 -0
  330. package/dist/charts/engine/three-d/model.d.ts +2 -0
  331. package/dist/charts/engine/three-d/model.js +2 -0
  332. package/dist/charts/engine/three-d/model.js.map +1 -1
  333. package/dist/charts/engine/three-d/oit.cjs +109 -0
  334. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  335. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  336. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  337. package/dist/charts/engine/three-d/oit.js +111 -0
  338. package/dist/charts/engine/three-d/oit.js.map +1 -0
  339. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  340. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  341. package/dist/charts/engine/three-d/overlay.js +43 -36
  342. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  343. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  344. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  345. package/dist/charts/engine/three-d/render-types.d.cts +37 -3
  346. package/dist/charts/engine/three-d/render-types.d.ts +37 -3
  347. package/dist/charts/engine/three-d/render-types.js +6 -10
  348. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  349. package/dist/charts/engine/three-d/shaders.cjs +109 -48
  350. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  351. package/dist/charts/engine/three-d/shaders.d.cts +12 -5
  352. package/dist/charts/engine/three-d/shaders.d.ts +12 -5
  353. package/dist/charts/engine/three-d/shaders.js +118 -55
  354. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  355. package/dist/charts/engine/three-d/sort.cjs +1 -1
  356. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  357. package/dist/charts/engine/three-d/sort.d.cts +18 -5
  358. package/dist/charts/engine/three-d/sort.d.ts +18 -5
  359. package/dist/charts/engine/three-d/sort.js +129 -43
  360. package/dist/charts/engine/three-d/sort.js.map +1 -1
  361. package/dist/charts/engine/three-d/types.d.cts +36 -0
  362. package/dist/charts/engine/three-d/types.d.ts +36 -0
  363. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  364. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  365. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  366. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  367. package/dist/charts/engine/three-d/webgl.js +199 -74
  368. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  369. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  370. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  371. package/dist/charts/engine/three-d/webgpu.js +231 -94
  372. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  373. package/dist/charts/engine/trading/chart.cjs +1 -1
  374. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  375. package/dist/charts/engine/trading/chart.d.cts +10 -1
  376. package/dist/charts/engine/trading/chart.d.ts +10 -1
  377. package/dist/charts/engine/trading/chart.js +1677 -813
  378. package/dist/charts/engine/trading/chart.js.map +1 -1
  379. package/dist/charts/engine/trading/drawings.cjs +2 -1
  380. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  381. package/dist/charts/engine/trading/drawings.d.cts +53 -9
  382. package/dist/charts/engine/trading/drawings.d.ts +53 -9
  383. package/dist/charts/engine/trading/drawings.js +346 -71
  384. package/dist/charts/engine/trading/drawings.js.map +1 -1
  385. package/dist/charts/engine/trading/format.cjs +1 -1
  386. package/dist/charts/engine/trading/format.cjs.map +1 -1
  387. package/dist/charts/engine/trading/format.d.cts +19 -0
  388. package/dist/charts/engine/trading/format.d.ts +19 -0
  389. package/dist/charts/engine/trading/format.js +65 -21
  390. package/dist/charts/engine/trading/format.js.map +1 -1
  391. package/dist/charts/engine/trading/geometry.cjs +1 -1
  392. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  393. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  394. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  395. package/dist/charts/engine/trading/geometry.js +19 -4
  396. package/dist/charts/engine/trading/geometry.js.map +1 -1
  397. package/dist/charts/engine/trading/index.cjs +1 -1
  398. package/dist/charts/engine/trading/index.d.cts +2 -1
  399. package/dist/charts/engine/trading/index.d.ts +2 -1
  400. package/dist/charts/engine/trading/index.js +4 -3
  401. package/dist/charts/engine/trading/indicators.cjs +1 -1
  402. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  403. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  404. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  405. package/dist/charts/engine/trading/indicators.js +449 -173
  406. package/dist/charts/engine/trading/indicators.js.map +1 -1
  407. package/dist/charts/engine/trading/labels.cjs +1 -1
  408. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  409. package/dist/charts/engine/trading/labels.js +104 -4
  410. package/dist/charts/engine/trading/labels.js.map +1 -1
  411. package/dist/charts/engine/trading/store.cjs +1 -1
  412. package/dist/charts/engine/trading/store.cjs.map +1 -1
  413. package/dist/charts/engine/trading/store.d.cts +21 -0
  414. package/dist/charts/engine/trading/store.d.ts +21 -0
  415. package/dist/charts/engine/trading/store.js +22 -1
  416. package/dist/charts/engine/trading/store.js.map +1 -1
  417. package/dist/charts/engine/trading/studies.cjs +1 -1
  418. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  419. package/dist/charts/engine/trading/studies.d.cts +49 -8
  420. package/dist/charts/engine/trading/studies.d.ts +49 -8
  421. package/dist/charts/engine/trading/studies.js +352 -93
  422. package/dist/charts/engine/trading/studies.js.map +1 -1
  423. package/dist/charts/engine/trading/sync.cjs +2 -0
  424. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  425. package/dist/charts/engine/trading/sync.d.cts +8 -0
  426. package/dist/charts/engine/trading/sync.d.ts +8 -0
  427. package/dist/charts/engine/trading/sync.js +25 -0
  428. package/dist/charts/engine/trading/sync.js.map +1 -0
  429. package/dist/charts/engine/trading/types.d.cts +514 -16
  430. package/dist/charts/engine/trading/types.d.ts +514 -16
  431. package/dist/charts/engine/types.d.cts +106 -11
  432. package/dist/charts/engine/types.d.ts +106 -11
  433. package/dist/charts/index.cjs +1 -1
  434. package/dist/charts/index.d.cts +3 -2
  435. package/dist/charts/index.d.ts +3 -2
  436. package/dist/charts/index.js +30 -22
  437. package/dist/charts/react/charts.cjs +1 -1
  438. package/dist/charts/react/charts.cjs.map +1 -1
  439. package/dist/charts/react/charts.js +51 -34
  440. package/dist/charts/react/charts.js.map +1 -1
  441. package/dist/charts/react/graph.cjs +2 -0
  442. package/dist/charts/react/graph.cjs.map +1 -0
  443. package/dist/charts/react/graph.d.cts +219 -0
  444. package/dist/charts/react/graph.d.ts +219 -0
  445. package/dist/charts/react/graph.js +160 -0
  446. package/dist/charts/react/graph.js.map +1 -0
  447. package/dist/charts/react/orderbook.cjs +1 -1
  448. package/dist/charts/react/orderbook.cjs.map +1 -1
  449. package/dist/charts/react/orderbook.d.cts +3 -1
  450. package/dist/charts/react/orderbook.d.ts +3 -1
  451. package/dist/charts/react/orderbook.js +1 -0
  452. package/dist/charts/react/orderbook.js.map +1 -1
  453. package/dist/charts/react/shapes.cjs +1 -1
  454. package/dist/charts/react/shapes.cjs.map +1 -1
  455. package/dist/charts/react/shapes.d.cts +88 -4
  456. package/dist/charts/react/shapes.d.ts +88 -4
  457. package/dist/charts/react/shapes.js +55 -12
  458. package/dist/charts/react/shapes.js.map +1 -1
  459. package/dist/charts/react/three-d.cjs +1 -1
  460. package/dist/charts/react/three-d.cjs.map +1 -1
  461. package/dist/charts/react/three-d.d.cts +7 -0
  462. package/dist/charts/react/three-d.d.ts +7 -0
  463. package/dist/charts/react/three-d.js +14 -13
  464. package/dist/charts/react/three-d.js.map +1 -1
  465. package/dist/charts/react/trading.cjs +1 -1
  466. package/dist/charts/react/trading.cjs.map +1 -1
  467. package/dist/charts/react/trading.d.cts +54 -2
  468. package/dist/charts/react/trading.d.ts +54 -2
  469. package/dist/charts/react/trading.js +68 -37
  470. package/dist/charts/react/trading.js.map +1 -1
  471. package/dist/charts/react/types.d.cts +11 -0
  472. package/dist/charts/react/types.d.ts +11 -0
  473. package/dist/core/contracts.cjs +1 -1
  474. package/dist/core/contracts.cjs.map +1 -1
  475. package/dist/core/contracts.js +1 -1
  476. package/dist/core/contracts.js.map +1 -1
  477. package/dist/native/charts/src/canvas.cjs +1 -1
  478. package/dist/native/charts/src/canvas.js +5 -4
  479. package/dist/native/charts/src/engine/axis.cjs +1 -1
  480. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  481. package/dist/native/charts/src/engine/axis.js +42 -19
  482. package/dist/native/charts/src/engine/axis.js.map +1 -1
  483. package/dist/native/charts/src/engine/color.cjs +1 -1
  484. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  485. package/dist/native/charts/src/engine/color.js +47 -5
  486. package/dist/native/charts/src/engine/color.js.map +1 -1
  487. package/dist/native/charts/src/engine/controller.cjs +2 -2
  488. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  489. package/dist/native/charts/src/engine/controller.js +296 -251
  490. package/dist/native/charts/src/engine/controller.js.map +1 -1
  491. package/dist/native/charts/src/engine/data.cjs +1 -1
  492. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  493. package/dist/native/charts/src/engine/data.js +6 -4
  494. package/dist/native/charts/src/engine/data.js.map +1 -1
  495. package/dist/native/charts/src/engine/format.cjs +1 -1
  496. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  497. package/dist/native/charts/src/engine/format.js +15 -2
  498. package/dist/native/charts/src/engine/format.js.map +1 -1
  499. package/dist/native/charts/src/engine/labels.cjs +1 -1
  500. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  501. package/dist/native/charts/src/engine/labels.js +42 -5
  502. package/dist/native/charts/src/engine/labels.js.map +1 -1
  503. package/dist/native/charts/src/engine/layout.cjs +1 -1
  504. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  505. package/dist/native/charts/src/engine/layout.js +11 -2
  506. package/dist/native/charts/src/engine/layout.js.map +1 -1
  507. package/dist/native/charts/src/engine/model.cjs +1 -1
  508. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  509. package/dist/native/charts/src/engine/model.js +278 -174
  510. package/dist/native/charts/src/engine/model.js.map +1 -1
  511. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  512. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  513. package/dist/native/charts/src/engine/presets.cjs +2 -2
  514. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  515. package/dist/native/charts/src/engine/presets.js +110 -90
  516. package/dist/native/charts/src/engine/presets.js.map +1 -1
  517. package/dist/native/charts/src/engine/scene.cjs +1 -1
  518. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  519. package/dist/native/charts/src/engine/scene.js +421 -202
  520. package/dist/native/charts/src/engine/scene.js.map +1 -1
  521. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  522. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  523. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  524. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  525. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  526. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  527. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  528. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  529. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  530. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  531. package/dist/native/charts/src/engine/shapes/chord.js +419 -0
  532. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  533. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  534. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  535. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  536. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  537. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  538. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  539. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  540. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  541. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  542. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  543. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  544. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  545. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  546. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  547. package/dist/native/charts/src/engine/shapes/layout.js +136 -94
  548. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  549. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  550. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  551. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  552. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  553. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  554. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  555. package/dist/native/components/Chart/ChartBase.js +127 -115
  556. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  557. package/dist/native/components/Chart/charts.cjs +1 -1
  558. package/dist/native/components/Chart/charts.cjs.map +1 -1
  559. package/dist/native/components/Chart/charts.js +8 -5
  560. package/dist/native/components/Chart/charts.js.map +1 -1
  561. package/dist/native/components/Chart/scene.cjs +1 -1
  562. package/dist/native/components/Chart/scene.cjs.map +1 -1
  563. package/dist/native/components/Chart/scene.d.cts +6 -1
  564. package/dist/native/components/Chart/scene.d.ts +6 -1
  565. package/dist/native/components/Chart/scene.js +226 -108
  566. package/dist/native/components/Chart/scene.js.map +1 -1
  567. package/dist/native/components/Chart/types.d.cts +7 -1
  568. package/dist/native/components/Chart/types.d.ts +7 -1
  569. package/dist/native/components/Charts/charts.cjs +1 -1
  570. package/dist/native/components/Charts/charts.cjs.map +1 -1
  571. package/dist/native/components/Charts/charts.js +60 -43
  572. package/dist/native/components/Charts/charts.js.map +1 -1
  573. package/dist/native/components/Charts/types.d.cts +11 -0
  574. package/dist/native/components/Charts/types.d.ts +11 -0
  575. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  576. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  577. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  578. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  579. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
  580. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  581. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  582. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  583. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  584. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  585. package/dist/native/components/ShapeChart/charts.js +138 -96
  586. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  587. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  588. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  589. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  590. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  591. package/dist/native/components/ShapeChart/draw.js +26 -17
  592. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  593. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  594. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  595. package/dist/native/components/ShapeChart/geometry.js +233 -70
  596. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  597. package/dist/native/components/ShapeChart/index.cjs +1 -1
  598. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  599. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  600. package/dist/native/components/ShapeChart/index.js +2 -2
  601. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  602. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  603. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  604. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  605. package/dist/native/components/ShapeChart/recorder.js +19 -10
  606. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  607. package/dist/native/components/ShapeChart/types.d.cts +95 -8
  608. package/dist/native/components/ShapeChart/types.d.ts +95 -8
  609. package/dist/native/index.cjs +1 -1
  610. package/dist/native/index.js +2 -2
  611. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  612. package/dist/native/source/components/Chart/charts.tsx +10 -3
  613. package/dist/native/source/components/Chart/scene.tsx +243 -14
  614. package/dist/native/source/components/Chart/types.ts +7 -0
  615. package/dist/native/source/components/Charts/charts.tsx +37 -2
  616. package/dist/native/source/components/Charts/types.ts +11 -0
  617. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
  618. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  619. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  620. package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
  621. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  622. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  623. package/dist/native/source/components/ShapeChart/types.ts +99 -6
  624. package/dist/native/source/manifest.ts +1 -0
  625. package/dist/taro/chart-a11y.d.ts +7 -0
  626. package/dist/taro/charts.d.ts +29 -6
  627. package/dist/taro/index.js +3129 -1902
  628. package/dist/taro/shape-charts.d.ts +99 -5
  629. package/dist/uni/AreaChart.vue +2 -1
  630. package/dist/uni/AreaChart.vue.d.ts +5 -1
  631. package/dist/uni/Badge.vue.d.ts +1 -1
  632. package/dist/uni/BarChart.vue +2 -1
  633. package/dist/uni/BarChart.vue.d.ts +5 -1
  634. package/dist/uni/BoxPlotChart.vue +2 -1
  635. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  636. package/dist/uni/BubbleChart.vue +2 -1
  637. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  638. package/dist/uni/BulletChart.vue.d.ts +4 -0
  639. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  640. package/dist/uni/CandlestickChart.vue +2 -1
  641. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  642. package/dist/uni/Chart.vue +2 -1
  643. package/dist/uni/Chart.vue.d.ts +4 -0
  644. package/dist/uni/ChordChart.vue +93 -0
  645. package/dist/uni/ChordChart.vue.d.ts +136 -0
  646. package/dist/uni/Divider.vue.d.ts +1 -1
  647. package/dist/uni/DonutChart.vue.d.ts +5 -1
  648. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  649. package/dist/uni/GanttChart.vue +2 -1
  650. package/dist/uni/GanttChart.vue.d.ts +15 -0
  651. package/dist/uni/GaugeChart.vue.d.ts +5 -1
  652. package/dist/uni/HeatmapChart.vue +2 -1
  653. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  654. package/dist/uni/HistogramChart.vue +2 -1
  655. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  656. package/dist/uni/HorizontalBarChart.vue +2 -1
  657. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  658. package/dist/uni/LineChart.vue +2 -1
  659. package/dist/uni/LineChart.vue.d.ts +4 -0
  660. package/dist/uni/MixedChart.vue +2 -1
  661. package/dist/uni/MixedChart.vue.d.ts +4 -0
  662. package/dist/uni/PieChart.vue.d.ts +5 -1
  663. package/dist/uni/QuadrantChart.vue +2 -1
  664. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  665. package/dist/uni/RadarChart.vue.d.ts +4 -0
  666. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  667. package/dist/uni/RangeAreaChart.vue +2 -1
  668. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  669. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  670. package/dist/uni/ScatterChart.vue +2 -1
  671. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  672. package/dist/uni/Sparkline.vue +2 -1
  673. package/dist/uni/Sparkline.vue.d.ts +4 -0
  674. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  675. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  676. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  677. package/dist/uni/WaterfallChart.vue +2 -1
  678. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  679. package/dist/uni/chart-a11y.d.ts +7 -0
  680. package/dist/uni/chart-a11y.js +29 -0
  681. package/dist/uni/chart-canvas.d.ts +12 -0
  682. package/dist/uni/chart-canvas.js +15 -1
  683. package/dist/uni/chart-types.d.ts +36 -5
  684. package/dist/uni/chart-types.js +31 -3
  685. package/dist/uni/charts-canvas.js +3 -2
  686. package/dist/uni/index.d.ts +2 -1
  687. package/dist/uni/index.js +1 -0
  688. package/dist/uni/manifest.d.ts +7 -0
  689. package/dist/uni/manifest.js +10 -0
  690. package/dist/uni/named-chart-options.d.ts +11 -2
  691. package/dist/uni/named-chart-options.js +21 -1
  692. package/dist/uni/shape-chart-canvas.d.ts +3 -3
  693. package/dist/uni/shape-chart-canvas.js +17 -58
  694. package/dist/uni/shape-chart-types.d.ts +53 -3
  695. package/dist/uni/shape-chart-types.js +45 -1
  696. package/dist/vue/charts-global.d.ts +48 -0
  697. package/dist/vue/charts.d.ts +18 -0
  698. package/dist/vue/charts.js +56 -0
  699. package/dist/vue/charts.js.map +1 -0
  700. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  701. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  702. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  703. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  704. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  705. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  706. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  707. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  708. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  709. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  710. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
  711. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  712. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  713. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  714. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  715. package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
  716. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  717. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
  718. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  719. package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
  720. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  721. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  722. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  723. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  724. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  725. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  726. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  727. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  728. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  729. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  730. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  731. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  732. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  733. package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
  734. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  735. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  736. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  737. package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
  738. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  739. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  740. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  741. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  742. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  743. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  744. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  745. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  746. package/dist/vue/components/Chart/graph.d.ts +156 -0
  747. package/dist/vue/components/Chart/graph.js +137 -0
  748. package/dist/vue/components/Chart/graph.js.map +1 -0
  749. package/dist/vue/components/Chart/index.d.ts +5 -1
  750. package/dist/vue/components/Chart/index.js +5 -1
  751. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  752. package/dist/vue/components/Chart/orderbook.js +2 -0
  753. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  754. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  755. package/dist/vue/components/Chart/three-d.js +2 -0
  756. package/dist/vue/components/Chart/three-d.js.map +1 -1
  757. package/dist/vue/components/Chart/trading.d.ts +30 -3
  758. package/dist/vue/components/Chart/trading.js +9 -0
  759. package/dist/vue/components/Chart/trading.js.map +1 -1
  760. package/dist/vue/components/Chart/types.d.ts +74 -2
  761. package/dist/vue/global.d.ts +2 -38
  762. package/dist/vue/groups/charts.js +10 -2
  763. package/dist/vue/groups/charts.js.map +1 -1
  764. package/dist/vue/index.js +6 -2
  765. package/dist/vue/internal/register.d.ts +7 -0
  766. package/dist/vue/internal/register.js +14 -0
  767. package/dist/vue/internal/register.js.map +1 -0
  768. package/dist/vue/plugin.d.ts +9 -4
  769. package/dist/vue/plugin.js +6 -11
  770. package/dist/vue/plugin.js.map +1 -1
  771. package/dist/weapp/area-chart/index.wxml +1 -1
  772. package/dist/weapp/bar-chart/index.wxml +1 -1
  773. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  774. package/dist/weapp/bubble-chart/index.wxml +1 -1
  775. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  776. package/dist/weapp/chart/index.wxml +1 -1
  777. package/dist/weapp/charts/canvas.js +1987 -175
  778. package/dist/weapp/charts/core.js +3 -0
  779. package/dist/weapp/chord-chart/index.js +1 -0
  780. package/dist/weapp/chord-chart/index.json +1 -0
  781. package/dist/weapp/chord-chart/index.wxml +1 -0
  782. package/dist/weapp/chord-chart/index.wxss +1 -0
  783. package/dist/weapp/controls.js +148 -57
  784. package/dist/weapp/gantt-chart/index.wxml +1 -1
  785. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  786. package/dist/weapp/histogram-chart/index.wxml +1 -1
  787. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  788. package/dist/weapp/line-chart/index.wxml +1 -1
  789. package/dist/weapp/mixed-chart/index.wxml +1 -1
  790. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  791. package/dist/weapp/range-area-chart/index.wxml +1 -1
  792. package/dist/weapp/scatter-chart/index.wxml +1 -1
  793. package/dist/weapp/sparkline/index.wxml +1 -1
  794. package/dist/weapp/types.d.ts +96 -4
  795. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  796. package/dist/web-components/components/chart/charts.d.ts +4 -2
  797. package/dist/web-components/components/chart/charts.js +8 -1
  798. package/dist/web-components/components/chart/charts.js.map +1 -1
  799. package/dist/web-components/components/chart/extended.d.ts +21 -7
  800. package/dist/web-components/components/chart/extended.js +29 -9
  801. package/dist/web-components/components/chart/extended.js.map +1 -1
  802. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  803. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  804. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  805. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  806. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  807. package/dist/web-components/components/graph/graph.d.ts +156 -0
  808. package/dist/web-components/components/graph/graph.js +150 -0
  809. package/dist/web-components/components/graph/graph.js.map +1 -0
  810. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  811. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  812. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  813. package/dist/web-components/elements/chart.d.ts +1 -1
  814. package/dist/web-components/elements/chart.js +6 -5
  815. package/dist/web-components/elements/chart.js.map +1 -1
  816. package/dist/web-components/elements/graph.d.ts +2 -0
  817. package/dist/web-components/elements/graph.js +12 -0
  818. package/dist/web-components/elements/graph.js.map +1 -0
  819. package/dist/web-components/html-custom-data.json +318 -4
  820. package/dist/web-components/types/react.d.ts +63 -4
  821. package/dist/web-components/types/solid.d.ts +55 -8
  822. package/dist/web-components/types/svelte.d.ts +55 -8
  823. package/dist/web-components/types/vue.d.ts +55 -4
  824. package/package.json +16 -1
@@ -1,8 +1,9 @@
1
1
  import { compileProgram as e, glContextAttributes as t, isSoftwareRenderer as n, itemParams as r } from "./gl.js";
2
- import { instanceRange as i } from "./range.js";
3
- import { GLSL1_AREA as a, GLSL1_BAR as o, GLSL1_LINE as s, GLSL1_SCATTER as c } from "./shaders.js";
2
+ import { claimGlSlot as i } from "./gl-budget.js";
3
+ import { instanceRange as a } from "./range.js";
4
+ import { GLSL1_AREA as o, GLSL1_BAR as s, GLSL1_LINE as c, GLSL1_SCATTER as l } from "./shaders.js";
4
5
  //#region src/engine/renderers/webgl.ts
5
- var l = {
6
+ var u = {
6
7
  line: [
7
8
  "a_corner",
8
9
  "a_a",
@@ -24,7 +25,7 @@ var l = {
24
25
  "a_size",
25
26
  "a_color"
26
27
  ]
27
- }, u = 4, d = new Float32Array([
28
+ }, d = 4, f = new Float32Array([
28
29
  0,
29
30
  0,
30
31
  1,
@@ -33,101 +34,121 @@ var l = {
33
34
  1,
34
35
  1,
35
36
  1
36
- ]), f = (f, p, m = !1) => {
37
- let h = f.getContext("webgl", t(m));
38
- if (!h) return null;
39
- let g = () => h.getExtension("WEBGL_lose_context")?.loseContext(), _ = h.getExtension("ANGLE_instanced_arrays");
40
- if (!_ || m && n(h)) return g(), null;
41
- let v = e(h, s, l.line), y = e(h, a, l.area), b = e(h, o, l.bar), x = e(h, c, l.scatter), S = h.createBuffer();
42
- if (!v || !y || !b || !x || !S) return g(), null;
43
- let C = {
44
- line: v,
45
- area: y,
46
- bar: b,
47
- scatter: x
48
- };
49
- h.bindBuffer(h.ARRAY_BUFFER, S), h.bufferData(h.ARRAY_BUFFER, d, h.STATIC_DRAW);
50
- let w = !1, T = (e) => {
51
- e.preventDefault(), w = !0, p();
52
- };
53
- f.addEventListener("webglcontextlost", T);
54
- let E = /* @__PURE__ */ new Map(), D = (e, t, n, r, i) => {
55
- h.enableVertexAttribArray(e), h.vertexAttribPointer(e, t, n, n === h.UNSIGNED_BYTE, r, i), _.vertexAttribDivisorANGLE(e, 1);
56
- }, O = (e, t, n) => {
57
- let r = h.FLOAT;
58
- switch (h.bindBuffer(h.ARRAY_BUFFER, S), h.enableVertexAttribArray(0), h.vertexAttribPointer(0, 2, r, !1, 0, 0), _.vertexAttribDivisorANGLE(0, 0), h.bindBuffer(h.ARRAY_BUFFER, t), e.kind) {
37
+ ]), p = (p, m, h = !1) => {
38
+ let g = p.getContext("webgl", t(h));
39
+ if (!g) return null;
40
+ let _ = () => g.getExtension("WEBGL_lose_context")?.loseContext(), v = g.getExtension("ANGLE_instanced_arrays");
41
+ if (!v || h && n(g)) return _(), null;
42
+ let y = v, b = () => {
43
+ let t = g.getExtension("ANGLE_instanced_arrays");
44
+ if (!t) return null;
45
+ y = t;
46
+ let n = e(g, c, u.line), r = e(g, o, u.area), i = e(g, s, u.bar), a = e(g, l, u.scatter), d = g.createBuffer();
47
+ return !n || !r || !i || !a || !d ? null : (g.bindBuffer(g.ARRAY_BUFFER, d), g.bufferData(g.ARRAY_BUFFER, f, g.STATIC_DRAW), {
48
+ programs: {
49
+ line: n,
50
+ area: r,
51
+ bar: i,
52
+ scatter: a
53
+ },
54
+ corners: d
55
+ });
56
+ }, x = b();
57
+ if (!x) return _(), null;
58
+ let S = !1, C = null, w = /* @__PURE__ */ new Map(), T = i(p, g, {
59
+ suspend: () => w.clear(),
60
+ restore: () => {
61
+ x = b(), x ? C && k(C.items, C.frame) : (S = !0, m());
62
+ },
63
+ lost: () => {
64
+ S = !0, m();
65
+ }
66
+ }), E = (e, t, n, r, i) => {
67
+ g.enableVertexAttribArray(e), g.vertexAttribPointer(e, t, n, n === g.UNSIGNED_BYTE, r, i), y.vertexAttribDivisorANGLE(e, 1);
68
+ }, D = (e, t, n, r) => {
69
+ let i = g.FLOAT;
70
+ switch (g.bindBuffer(g.ARRAY_BUFFER, r), g.enableVertexAttribArray(0), g.vertexAttribPointer(0, 2, i, !1, 0, 0), y.vertexAttribDivisorANGLE(0, 0), g.bindBuffer(g.ARRAY_BUFFER, t), e.kind) {
59
71
  case "line":
60
- D(1, 2, r, 8, n * 8), D(2, 2, r, 8, n * 8 + 8);
72
+ E(1, 2, i, 8, n * 8), E(2, 2, i, 8, n * 8 + 8);
61
73
  break;
62
74
  case "area":
63
- D(1, 3, r, 12, n * 12), D(2, 3, r, 12, (n + 1) * 12);
75
+ E(1, 3, i, 12, n * 12), E(2, 3, i, 12, (n + 1) * 12);
64
76
  break;
65
77
  case "bar":
66
- D(1, 3, r, 16, n * 16), D(2, 4, h.UNSIGNED_BYTE, 16, n * 16 + 12);
78
+ E(1, 3, i, 16, n * 16), E(2, 4, g.UNSIGNED_BYTE, 16, n * 16 + 12);
67
79
  break;
68
80
  default: {
69
81
  let e = n * 16;
70
- D(1, 2, r, 16, e), D(2, 1, r, 16, e + 8), D(3, 4, h.UNSIGNED_BYTE, 16, e + 12);
82
+ E(1, 2, i, 16, e), E(2, 1, i, 16, e + 8), E(3, 4, g.UNSIGNED_BYTE, 16, e + 12);
71
83
  break;
72
84
  }
73
85
  }
74
- for (let t = l[e.kind].length; t < u; t++) h.disableVertexAttribArray(t), _.vertexAttribDivisorANGLE(t, 0);
75
- }, k = (e) => {
76
- let t = E.get(e.key);
86
+ for (let t = u[e.kind].length; t < d; t++) g.disableVertexAttribArray(t), y.vertexAttribDivisorANGLE(t, 0);
87
+ }, O = (e) => {
88
+ let t = w.get(e.key);
77
89
  if (t && t.version === e.version && t.kind === e.kind) return t;
78
- t && h.deleteBuffer(t.buffer);
79
- let n = h.createBuffer();
90
+ t && g.deleteBuffer(t.buffer);
91
+ let n = g.createBuffer();
80
92
  if (!n) return null;
81
- switch (h.bindBuffer(h.ARRAY_BUFFER, n), e.kind) {
93
+ switch (g.bindBuffer(g.ARRAY_BUFFER, n), e.kind) {
82
94
  case "line":
83
- h.bufferData(h.ARRAY_BUFFER, e.points.subarray(0, e.count * 2), h.STATIC_DRAW);
95
+ g.bufferData(g.ARRAY_BUFFER, e.points.subarray(0, e.count * 2), g.STATIC_DRAW);
84
96
  break;
85
97
  case "area":
86
- h.bufferData(h.ARRAY_BUFFER, e.points.subarray(0, e.count * 3), h.STATIC_DRAW);
98
+ g.bufferData(g.ARRAY_BUFFER, e.points.subarray(0, e.count * 3), g.STATIC_DRAW);
87
99
  break;
88
- default: h.bufferData(h.ARRAY_BUFFER, e.instances, h.STATIC_DRAW);
100
+ default: g.bufferData(g.ARRAY_BUFFER, e.instances, g.STATIC_DRAW);
89
101
  }
90
102
  let r = {
91
103
  version: e.version,
92
104
  kind: e.kind,
93
105
  buffer: n
94
106
  };
95
- return E.set(e.key, r), r;
107
+ return w.set(e.key, r), r;
108
+ }, k = (e, t) => {
109
+ if (!x) return;
110
+ let { programs: n, corners: i } = x;
111
+ g.viewport(0, 0, p.width, p.height), g.clearColor(0, 0, 0, 0), g.clear(g.COLOR_BUFFER_BIT), g.enable(g.BLEND), g.blendFunc(g.ONE, g.ONE_MINUS_SRC_ALPHA);
112
+ let o = t.transform, s = /* @__PURE__ */ new Set();
113
+ for (let c of e) {
114
+ s.add(c.key);
115
+ let [e, l] = a(c, t);
116
+ if (l <= 0) continue;
117
+ let u = O(c);
118
+ if (!u) continue;
119
+ let d = n[c.kind];
120
+ g.useProgram(d.program), g.uniform4f(d.xform, o.xScale, o.xOffset, o.yScale, o.yOffset), g.uniform4f(d.viewport, t.width, t.height, t.dpr, 0), g.uniform4f(d.color, c.color[0], c.color[1], c.color[2], c.color[3]);
121
+ let [f, p, m, h] = r(c, t);
122
+ g.uniform4f(d.params, f, p, m, h), D(c, u.buffer, e, i), y.drawArraysInstancedANGLE(g.TRIANGLE_STRIP, 0, 4, l);
123
+ }
124
+ for (let [e, t] of w) s.has(e) || (g.deleteBuffer(t.buffer), w.delete(e));
96
125
  };
97
126
  return {
98
127
  kind: "webgl",
99
- canvas: f,
128
+ canvas: p,
100
129
  resize(e, t) {
101
- f.width = Math.max(1, e), f.height = Math.max(1, t);
130
+ p.width = Math.max(1, e), p.height = Math.max(1, t);
102
131
  },
103
132
  render(e, t) {
104
- if (w || h.isContextLost()) return;
105
- h.viewport(0, 0, f.width, f.height), h.clearColor(0, 0, 0, 0), h.clear(h.COLOR_BUFFER_BIT), h.enable(h.BLEND), h.blendFunc(h.ONE, h.ONE_MINUS_SRC_ALPHA);
106
- let n = t.transform, a = /* @__PURE__ */ new Set();
107
- for (let o of e) {
108
- a.add(o.key);
109
- let [e, s] = i(o, t);
110
- if (s <= 0) continue;
111
- let c = k(o);
112
- if (!c) continue;
113
- let l = C[o.kind];
114
- h.useProgram(l.program), h.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), h.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), h.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
115
- let [u, d, f, p] = r(o, t);
116
- h.uniform4f(l.params, u, d, f, p), O(o, c.buffer, e), _.drawArraysInstancedANGLE(h.TRIANGLE_STRIP, 0, 4, s);
117
- }
118
- for (let [e, t] of E) a.has(e) || (h.deleteBuffer(t.buffer), E.delete(e));
133
+ C = {
134
+ items: e,
135
+ frame: t
136
+ }, !(S || !T.use() || g.isContextLost()) && k(e, t);
119
137
  },
120
138
  destroy() {
121
- if (f.removeEventListener("webglcontextlost", T), !h.isContextLost()) {
122
- for (let e of E.values()) h.deleteBuffer(e.buffer);
123
- for (let e of Object.values(C)) h.deleteProgram(e.program);
124
- h.deleteBuffer(S);
139
+ if (T.release(), C = null, !g.isContextLost()) {
140
+ for (let e of w.values()) g.deleteBuffer(e.buffer);
141
+ if (x) {
142
+ for (let e of Object.values(x.programs)) g.deleteProgram(e.program);
143
+ g.deleteBuffer(x.corners);
144
+ }
145
+ _();
125
146
  }
126
- E.clear(), g();
147
+ w.clear();
127
148
  }
128
149
  };
129
150
  };
130
151
  //#endregion
131
- export { f as createWebGlRenderer };
152
+ export { p as createWebGlRenderer };
132
153
 
133
154
  //# sourceMappingURL=webgl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl.js","names":["ATTRIBUTES","MAX_LOCATIONS","CORNERS","createWebGlRenderer","gl","canvas","glContextAttributes","requireHardware","loseContext","instancing","isSoftwareRenderer","line","compileProgram","GLSL1_LINE","area","GLSL1_AREA","bar","GLSL1_BAR","scatter","GLSL1_SCATTER","corners","programs","lost","handleLost","event","onLost","resources","instanced","location","size","type","stride","offset","bindAttributes","F","buffer","item","first","i","upload","existing","res","width","height","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl.ts"],"sourcesContent":["// WebGL (1) backend: the WebGL2 primitives in GLSL ES 1.0 for browsers and\n// GPUs without WebGL2. Instancing comes from ANGLE_instanced_arrays (exposed\n// virtually everywhere); without it the chain moves on to Canvas2D. Vertex\n// array objects are optional in WebGL 1, so the attributes are bound for\n// every draw (a handful of calls per series).\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL1_AREA, GLSL1_BAR, GLSL1_LINE, GLSL1_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n}\n\n/** Location 0 is the per-vertex corner, the others are per instance */\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_corner\", \"a_a\", \"a_b\"],\n area: [\"a_corner\", \"a_a\", \"a_b\"],\n bar: [\"a_corner\", \"a_inst\", \"a_color\"],\n scatter: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n};\n\nconst MAX_LOCATIONS = 4;\n\n/** Corners of the triangle strip, as gl_VertexID gives them in WebGL2: (vi & 1, vi >> 1) */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n\nexport const createWebGlRenderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\n \"webgl\",\n glContextAttributes(requireHardware),\n ) as WebGLRenderingContext | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const instancing = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!instancing || (requireHardware && isSoftwareRenderer(gl))) {\n loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL1_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL1_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL1_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL1_SCATTER, ATTRIBUTES.scatter);\n const corners = gl.createBuffer();\n if (!line || !area || !bar || !scatter || !corners) {\n loseContext();\n return null;\n }\n const programs = { line, area, bar, scatter };\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** Float or normalized unorm8x4 attribute advancing once per instance */\n const instanced = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n instancing.vertexAttribDivisorANGLE(location, 1);\n };\n\n /** Binds the corner and the instance attributes starting at instance `first` */\n const bindAttributes = (\n item: RenderItem,\n buffer: WebGLBuffer,\n first: number,\n ) => {\n const F = gl.FLOAT;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 0, 0);\n instancing.vertexAttribDivisorANGLE(0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n instanced(1, 2, F, 8, first * 8);\n instanced(2, 2, F, 8, first * 8 + 8);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n instanced(1, 3, F, stride, first * stride);\n instanced(2, 3, F, stride, (first + 1) * stride);\n break;\n }\n case \"bar\":\n instanced(1, 3, F, BAR_STRIDE, first * BAR_STRIDE);\n instanced(2, 4, gl.UNSIGNED_BYTE, BAR_STRIDE, first * BAR_STRIDE + 12);\n break;\n default: {\n const offset = first * SCATTER_STRIDE;\n instanced(1, 2, F, SCATTER_STRIDE, offset);\n instanced(2, 1, F, SCATTER_STRIDE, offset + 8);\n instanced(3, 4, gl.UNSIGNED_BYTE, SCATTER_STRIDE, offset + 12);\n break;\n }\n }\n // attribute state is global without vertex array objects\n for (let i = ATTRIBUTES[item.kind].length; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n instancing.vertexAttribDivisorANGLE(i, 0);\n }\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) gl.deleteBuffer(existing.buffer);\n const buffer = gl.createBuffer();\n if (!buffer) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * 2),\n gl.STATIC_DRAW,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * AREA_STRIDE),\n gl.STATIC_DRAW,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n const res = { version: item.version, kind: item.kind, buffer };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n bindAttributes(item, res.buffer, first);\n instancing.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.buffer);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) gl.deleteBuffer(res.buffer);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n gl.deleteBuffer(corners);\n }\n resources.clear();\n loseContext();\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgl.js","names":["ATTRIBUTES","MAX_LOCATIONS","CORNERS","createWebGlRenderer","gl","canvas","glContextAttributes","requireHardware","loseContext","firstInstancing","isSoftwareRenderer","instancing","build","ext","line","compileProgram","GLSL1_LINE","area","GLSL1_AREA","bar","GLSL1_BAR","scatter","GLSL1_SCATTER","corners","built","lost","last","resources","slot","claimGlSlot","draw","onLost","instanced","location","size","type","stride","offset","bindAttributes","F","buffer","item","first","i","upload","existing","res","t","frame","seen","items","instances","instanceRange","program","programs","p0","p1","p2","p3","itemParams","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl.ts"],"sourcesContent":["// WebGL (1) backend: the WebGL2 primitives in GLSL ES 1.0 for browsers and\n// GPUs without WebGL2. Instancing comes from ANGLE_instanced_arrays (exposed\n// virtually everywhere); without it the chain moves on to Canvas2D. Vertex\n// array objects are optional in WebGL 1, so the attributes are bound for\n// every draw (a handful of calls per series).\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL1_AREA, GLSL1_BAR, GLSL1_LINE, GLSL1_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n}\n\n/** Location 0 is the per-vertex corner, the others are per instance */\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_corner\", \"a_a\", \"a_b\"],\n area: [\"a_corner\", \"a_a\", \"a_b\"],\n bar: [\"a_corner\", \"a_inst\", \"a_color\"],\n scatter: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n};\n\nconst MAX_LOCATIONS = 4;\n\n/** Corners of the triangle strip, as gl_VertexID gives them in WebGL2: (vi & 1, vi >> 1) */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n\nexport const createWebGlRenderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\n \"webgl\",\n glContextAttributes(requireHardware),\n ) as WebGLRenderingContext | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const firstInstancing = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!firstInstancing || (requireHardware && isSoftwareRenderer(gl))) {\n loseContext();\n return null;\n }\n let instancing: ANGLE_instanced_arrays = firstInstancing;\n\n /** Programs and the shared corner buffer (built again after a restore) */\n const build = () => {\n // extension objects don't survive a context restore\n const ext = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!ext) return null;\n instancing = ext;\n const line = compileProgram(gl, GLSL1_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL1_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL1_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL1_SCATTER, ATTRIBUTES.scatter);\n const corners = gl.createBuffer();\n if (!line || !area || !bar || !scatter || !corners) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n const programs: Record<RenderItem[\"kind\"], GlProgram> = {\n line,\n area,\n bar,\n scatter,\n };\n return { programs, corners };\n };\n let built = build();\n if (!built) {\n loseContext();\n return null;\n }\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n built = build();\n if (!built) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** Float or normalized unorm8x4 attribute advancing once per instance */\n const instanced = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n instancing.vertexAttribDivisorANGLE(location, 1);\n };\n\n /** Binds the corner and the instance attributes starting at instance `first` */\n const bindAttributes = (\n item: RenderItem,\n buffer: WebGLBuffer,\n first: number,\n corners: WebGLBuffer,\n ) => {\n const F = gl.FLOAT;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 0, 0);\n instancing.vertexAttribDivisorANGLE(0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n instanced(1, 2, F, 8, first * 8);\n instanced(2, 2, F, 8, first * 8 + 8);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n instanced(1, 3, F, stride, first * stride);\n instanced(2, 3, F, stride, (first + 1) * stride);\n break;\n }\n case \"bar\":\n instanced(1, 3, F, BAR_STRIDE, first * BAR_STRIDE);\n instanced(2, 4, gl.UNSIGNED_BYTE, BAR_STRIDE, first * BAR_STRIDE + 12);\n break;\n default: {\n const offset = first * SCATTER_STRIDE;\n instanced(1, 2, F, SCATTER_STRIDE, offset);\n instanced(2, 1, F, SCATTER_STRIDE, offset + 8);\n instanced(3, 4, gl.UNSIGNED_BYTE, SCATTER_STRIDE, offset + 12);\n break;\n }\n }\n // attribute state is global without vertex array objects\n for (let i = ATTRIBUTES[item.kind].length; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n instancing.vertexAttribDivisorANGLE(i, 0);\n }\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) gl.deleteBuffer(existing.buffer);\n const buffer = gl.createBuffer();\n if (!buffer) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * 2),\n gl.STATIC_DRAW,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * AREA_STRIDE),\n gl.STATIC_DRAW,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n const res = { version: item.version, kind: item.kind, buffer };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!built) return;\n const { programs, corners } = built;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n bindAttributes(item, res.buffer, first, corners);\n instancing.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.buffer);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) gl.deleteBuffer(res.buffer);\n if (built) {\n for (const p of Object.values(built.programs)) {\n gl.deleteProgram(p.program);\n }\n gl.deleteBuffer(built.corners);\n }\n loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":";;;;;AAiCA,IAAMA,IAAmD;CACvD,MAAM;EAAC;EAAY;EAAO;CAAK;CAC/B,MAAM;EAAC;EAAY;EAAO;CAAK;CAC/B,KAAK;EAAC;EAAY;EAAU;CAAS;CACrC,SAAS;EAAC;EAAY;EAAS;EAAU;CAAS;AACpD,GAEMC,IAAgB,GAGhBC,IAAU,IAAI,aAAa;CAAC;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;AAAC,CAAC,GAE5CC,KACX,GACA,GAEA,IAAkB,OACO;CACzB,IAAMC,IAAKC,EAAO,WAChB,SACAC,EAAoBC,CAAe,CACrC;CACA,IAAI,CAACH,GAAI,OAAO;CAChB,IAAMI,UACJJ,EAAG,aAAa,oBAAoB,CAAC,EAAE,YAAY,GAC/CK,IAAkBL,EAAG,aAAa,wBAAwB;CAChE,IAAI,CAACK,KAAoBF,KAAmBG,EAAmBN,CAAE,GAE/D,OADAI,EAAY,GACL;CAET,IAAIG,IAAqCF,GAGnCG,UAAc;EAElB,IAAMC,IAAMT,EAAG,aAAa,wBAAwB;EACpD,IAAI,CAACS,GAAK,OAAO;EACjB,IAAaA;EACb,IAAMC,IAAOC,EAAeX,GAAIY,GAAYhB,EAAW,IAAI,GACrDiB,IAAOF,EAAeX,GAAIc,GAAYlB,EAAW,IAAI,GACrDmB,IAAMJ,EAAeX,GAAIgB,GAAWpB,EAAW,GAAG,GAClDqB,IAAUN,EAAeX,GAAIkB,GAAetB,EAAW,OAAO,GAC9DuB,IAAUnB,EAAG,aAAa;EAUhC,OATI,CAACU,KAAQ,CAACG,KAAQ,CAACE,KAAO,CAACE,KAAW,CAACE,IAAgB,QAC3DnB,EAAG,WAAWA,EAAG,cAAcmB,CAAO,GACtCnB,EAAG,WAAWA,EAAG,cAAcF,GAASE,EAAG,WAAW,GAO/C;GAAE,UAAA;IALP;IACA;IACA;IACA;GAEO;GAAU;EAAQ;CAC7B,GACIoB,IAAQZ,EAAM;CAClB,IAAI,CAACY,GAEH,OADAhB,EAAY,GACL;CAGT,IAAIiB,IAAO,IACPC,IAAoE,MAClEC,oBAAY,IAAI,IAA2B,GAG3CC,IAAOC,EAAYxB,GAAQD,GAAI;EACnC,eAAeuB,EAAU,MAAM;EAC/B,eAAe;GAEb,AADA,IAAQf,EAAM,GACTY,IAGME,KAAMI,EAAKJ,EAAK,OAAOA,EAAK,KAAK,KAF1C,IAAO,IACPK,EAAO;EAEX;EACA,YAAY;GAEV,AADA,IAAO,IACPA,EAAO;EACT;CACF,CAAC,GAGKC,KACJ,GACA,GACA,GACA,GACA,MACG;EAUH,AATA5B,EAAG,wBAAwB6B,CAAQ,GACnC7B,EAAG,oBACD6B,GACAC,GACAC,GACAA,MAAS/B,EAAG,eACZgC,GACAC,CACF,GACA1B,EAAW,yBAAyBsB,GAAU,CAAC;CACjD,GAGMK,KACJ,GACA,GACA,GACA,MACG;EACH,IAAMC,IAAInC,EAAG;EAMb,QALAA,EAAG,WAAWA,EAAG,cAAcmB,CAAO,GACtCnB,EAAG,wBAAwB,CAAC,GAC5BA,EAAG,oBAAoB,GAAG,GAAGmC,GAAG,IAAO,GAAG,CAAC,GAC3C5B,EAAW,yBAAyB,GAAG,CAAC,GACxCP,EAAG,WAAWA,EAAG,cAAcoC,CAAM,GAC7BC,EAAK,MAAb;GACE,KAAK;IAEH,AADAT,EAAU,GAAG,GAAGO,GAAG,GAAGG,IAAQ,CAAC,GAC/BV,EAAU,GAAG,GAAGO,GAAG,GAAGG,IAAQ,IAAI,CAAC;IACnC;GACF,KAAK;IAGH,AADAV,EAAU,GAAG,GAAGO,GAAG,IAAQG,IAAQ,EAAM,GACzCV,EAAU,GAAG,GAAGO,GAAG,KAASG,IAAQ,KAAK,EAAM;IAC/C;GAEF,KAAK;IAEH,AADAV,EAAU,GAAG,GAAGO,GAAA,IAAeG,IAAA,EAAkB,GACjDV,EAAU,GAAG,GAAG5B,EAAG,eAAA,IAA2BsC,IAAA,KAAqB,EAAE;IACrE;GACF,SAAS;IACP,IAAML,IAASK,IAAA;IAGf,AAFAV,EAAU,GAAG,GAAGO,GAAA,IAAmBF,CAAM,GACzCL,EAAU,GAAG,GAAGO,GAAA,IAAmBF,IAAS,CAAC,GAC7CL,EAAU,GAAG,GAAG5B,EAAG,eAAA,IAA+BiC,IAAS,EAAE;IAC7D;GACF;EACF;EAEA,KAAK,IAAIM,IAAI3C,EAAWyC,EAAK,KAAK,CAAC,QAAQE,IAAI1C,GAAe,KAE5D,AADAG,EAAG,yBAAyBuC,CAAC,GAC7BhC,EAAW,yBAAyBgC,GAAG,CAAC;CAE5C,GAEMC,KAAU,MAA2C;EACzD,IAAMC,IAAWlB,EAAU,IAAIc,EAAK,GAAG;EACvC,IACEI,KACAA,EAAS,YAAYJ,EAAK,WAC1BI,EAAS,SAASJ,EAAK,MAEvB,OAAOI;EAET,AAAIA,KAAUzC,EAAG,aAAayC,EAAS,MAAM;EAC7C,IAAML,IAASpC,EAAG,aAAa;EAC/B,IAAI,CAACoC,GAAQ,OAAO;EAEpB,QADApC,EAAG,WAAWA,EAAG,cAAcoC,CAAM,GAC7BC,EAAK,MAAb;GACE,KAAK;IACH,EAAG,WACDrC,EAAG,cACHqC,EAAK,OAAO,SAAS,GAAGA,EAAK,QAAQ,CAAC,GACtCrC,EAAG,WACL;IACA;GACF,KAAK;IACH,EAAG,WACDA,EAAG,cACHqC,EAAK,OAAO,SAAS,GAAGA,EAAK,QAAA,CAAmB,GAChDrC,EAAG,WACL;IACA;GACF,SACE,EAAG,WAAWA,EAAG,cAAcqC,EAAK,WAAWrC,EAAG,WAAW;EAEjE;EACA,IAAM0C,IAAM;GAAE,SAASL,EAAK;GAAS,MAAMA,EAAK;GAAM;EAAO;EAE7D,OADAd,EAAU,IAAIc,EAAK,KAAKK,CAAG,GACpBA;CACT,GAEMhB,KAAQ,GAA8B,MAAuB;EACjE,IAAI,CAACN,GAAO;EACZ,IAAM,EAAE,aAAU,eAAYA;EAK9B,AAJApB,EAAG,SAAS,GAAG,GAAGC,EAAO,OAAOA,EAAO,MAAM,GAC7CD,EAAG,WAAW,GAAG,GAAG,GAAG,CAAC,GACxBA,EAAG,MAAMA,EAAG,gBAAgB,GAC5BA,EAAG,OAAOA,EAAG,KAAK,GAClBA,EAAG,UAAUA,EAAG,KAAKA,EAAG,mBAAmB;EAC3C,IAAM2C,IAAIC,EAAM,WACVC,oBAAO,IAAI,IAAY;EAC7B,KAAK,IAAMR,KAAQS,GAAO;GACxB,EAAK,IAAIT,EAAK,GAAG;GACjB,IAAM,CAACC,GAAOS,KAAaC,EAAcX,GAAMO,CAAK;GACpD,IAAIG,KAAa,GAAG;GACpB,IAAML,IAAMF,EAAOH,CAAI;GACvB,IAAI,CAACK,GAAK;GACV,IAAMO,IAAUC,EAASb,EAAK;GAI9B,AAHArC,EAAG,WAAWiD,EAAQ,OAAO,GAC7BjD,EAAG,UAAUiD,EAAQ,OAAON,EAAE,QAAQA,EAAE,SAASA,EAAE,QAAQA,EAAE,OAAO,GACpE3C,EAAG,UAAUiD,EAAQ,UAAUL,EAAM,OAAOA,EAAM,QAAQA,EAAM,KAAK,CAAC,GACtE5C,EAAG,UACDiD,EAAQ,OACRZ,EAAK,MAAM,IACXA,EAAK,MAAM,IACXA,EAAK,MAAM,IACXA,EAAK,MAAM,EACb;GACA,IAAM,CAACc,GAAIC,GAAIC,GAAIC,KAAMC,EAAWlB,GAAMO,CAAK;GAG/C,AAFA5C,EAAG,UAAUiD,EAAQ,QAAQE,GAAIC,GAAIC,GAAIC,CAAE,GAC3CpB,EAAeG,GAAMK,EAAI,QAAQJ,GAAOnB,CAAO,GAC/CZ,EAAW,yBAAyBP,EAAG,gBAAgB,GAAG,GAAG+C,CAAS;EACxE;EACA,KAAK,IAAM,CAACS,GAAKd,MAAQnB,GACvB,AAAKsB,EAAK,IAAIW,CAAG,MACfxD,EAAG,aAAa0C,EAAI,MAAM,GAC1BnB,EAAU,OAAOiC,CAAG;CAG1B;CAEA,OAAO;EACL,MAAM;EACN;EACA,OAAO,GAAO,GAAQ;GAEpB,AADA,EAAO,QAAQ,KAAK,IAAI,GAAGC,CAAK,GAChC,EAAO,SAAS,KAAK,IAAI,GAAGC,CAAM;EACpC;EACA,OAAO,GAAO,GAAO;GAEnB,AADA,IAAO;IAAE;IAAO;GAAM,GAClB,OAAQ,CAAClC,EAAK,IAAI,KAAKxB,EAAG,cAAc,MAC5C0B,EAAKoB,GAAOF,CAAK;EACnB;EACA,UAAU;GAGR,IAFApB,EAAK,QAAQ,GACb,IAAO,MACH,CAACxB,EAAG,cAAc,GAAG;IACvB,KAAK,IAAM0C,KAAOnB,EAAU,OAAO,GAAG,EAAG,aAAamB,EAAI,MAAM;IAChE,IAAItB,GAAO;KACT,KAAK,IAAMuC,KAAK,OAAO,OAAOvC,EAAM,QAAQ,GAC1C,EAAG,cAAcuC,EAAE,OAAO;KAE5B,EAAG,aAAavC,EAAM,OAAO;IAC/B;IACA,EAAY;GACd;GACA,EAAU,MAAM;EAClB;CACF;AACF"}
@@ -1,2 +1,2 @@
1
- const e=require("./gl.cjs"),t=require("./range.cjs"),n=require("./shaders.cjs");var r={line:[`a_a`,`a_b`],area:[`a_a`,`a_b`],bar:[`a_inst`,`a_color`],scatter:[`a_pos`,`a_size`,`a_color`]},i=(i,a,o=!1)=>{let s=i.getContext(`webgl2`,e.glContextAttributes(o));if(!s)return null;if(o&&e.isSoftwareRenderer(s))return s.getExtension(`WEBGL_lose_context`)?.loseContext(),null;let c=e.compileProgram(s,n.GLSL_LINE,r.line),l=e.compileProgram(s,n.GLSL_AREA,r.area),u=e.compileProgram(s,n.GLSL_BAR,r.bar),d=e.compileProgram(s,n.GLSL_SCATTER,r.scatter);if(!c||!l||!u||!d)return null;let f={line:c,area:l,bar:u,scatter:d},p=!1,m=e=>{e.preventDefault(),p=!0,a()};i.addEventListener(`webglcontextlost`,m);let h=new Map,g=(e,t)=>{let n=s.FLOAT;switch(e.kind){case`line`:s.enableVertexAttribArray(0),s.vertexAttribPointer(0,2,n,!1,8,t*8),s.vertexAttribDivisor(0,1),s.enableVertexAttribArray(1),s.vertexAttribPointer(1,2,n,!1,8,t*8+8),s.vertexAttribDivisor(1,1);break;case`area`:s.enableVertexAttribArray(0),s.vertexAttribPointer(0,3,n,!1,12,t*12),s.vertexAttribDivisor(0,1),s.enableVertexAttribArray(1),s.vertexAttribPointer(1,3,n,!1,12,(t+1)*12),s.vertexAttribDivisor(1,1);break;case`bar`:s.enableVertexAttribArray(0),s.vertexAttribPointer(0,3,n,!1,16,t*16),s.vertexAttribDivisor(0,1),s.enableVertexAttribArray(1),s.vertexAttribPointer(1,4,s.UNSIGNED_BYTE,!0,16,t*16+12),s.vertexAttribDivisor(1,1);break;default:s.enableVertexAttribArray(0),s.vertexAttribPointer(0,2,n,!1,16,0),s.vertexAttribDivisor(0,1),s.enableVertexAttribArray(1),s.vertexAttribPointer(1,1,n,!1,16,8),s.vertexAttribDivisor(1,1),s.enableVertexAttribArray(2),s.vertexAttribPointer(2,4,s.UNSIGNED_BYTE,!0,16,12),s.vertexAttribDivisor(2,1)}},_=e=>{s.deleteBuffer(e.buffer),s.deleteVertexArray(e.vao)},v=e=>{let t=h.get(e.key);if(t&&t.version===e.version&&t.kind===e.kind)return t;t&&_(t);let n=s.createBuffer(),r=s.createVertexArray();if(!n||!r)return null;switch(s.bindVertexArray(r),s.bindBuffer(s.ARRAY_BUFFER,n),e.kind){case`line`:s.bufferData(s.ARRAY_BUFFER,e.points,s.STATIC_DRAW,0,e.count*2);break;case`area`:s.bufferData(s.ARRAY_BUFFER,e.points,s.STATIC_DRAW,0,e.count*3);break;default:s.bufferData(s.ARRAY_BUFFER,e.instances,s.STATIC_DRAW)}g(e,0),s.bindVertexArray(null);let i={version:e.version,kind:e.kind,buffer:n,vao:r,first:0};return h.set(e.key,i),i};return{kind:`webgl2`,canvas:i,resize(e,t){i.width=Math.max(1,e),i.height=Math.max(1,t)},render(n,r){if(p||s.isContextLost())return;s.viewport(0,0,i.width,i.height),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA);let a=r.transform,o=new Set;for(let i of n){o.add(i.key);let[n,c]=t.instanceRange(i,r);if(c<=0)continue;let l=v(i);if(!l)continue;let u=f[i.kind];s.useProgram(u.program),s.uniform4f(u.xform,a.xScale,a.xOffset,a.yScale,a.yOffset),s.uniform4f(u.viewport,r.width,r.height,r.dpr,0),s.uniform4f(u.color,i.color[0],i.color[1],i.color[2],i.color[3]);let[d,p,m,h]=e.itemParams(i,r);s.uniform4f(u.params,d,p,m,h),s.bindVertexArray(l.vao),l.first!==n&&(s.bindBuffer(s.ARRAY_BUFFER,l.buffer),g(i,n),l.first=n),s.drawArraysInstanced(s.TRIANGLE_STRIP,0,4,c)}s.bindVertexArray(null);for(let[e,t]of h)o.has(e)||(_(t),h.delete(e))},destroy(){if(i.removeEventListener(`webglcontextlost`,m),!s.isContextLost()){for(let e of h.values())_(e);for(let e of Object.values(f))s.deleteProgram(e.program)}h.clear(),s.getExtension(`WEBGL_lose_context`)?.loseContext()}}};exports.createWebGl2Renderer=i;
1
+ const e=require("./gl.cjs"),t=require("./gl-budget.cjs"),n=require("./range.cjs"),r=require("./shaders.cjs");var i={line:[`a_a`,`a_b`],area:[`a_a`,`a_b`],bar:[`a_inst`,`a_color`],scatter:[`a_pos`,`a_size`,`a_color`]},a=(a,o,s=!1)=>{let c=a.getContext(`webgl2`,e.glContextAttributes(s));if(!c)return null;if(s&&e.isSoftwareRenderer(c))return c.getExtension(`WEBGL_lose_context`)?.loseContext(),null;let l=()=>{let t=e.compileProgram(c,r.GLSL_LINE,i.line),n=e.compileProgram(c,r.GLSL_AREA,i.area),a=e.compileProgram(c,r.GLSL_BAR,i.bar),o=e.compileProgram(c,r.GLSL_SCATTER,i.scatter);return t&&n&&a&&o?{line:t,area:n,bar:a,scatter:o}:null},u=l();if(!u)return null;let d=!1,f=null,p=new Map,m=t.claimGlSlot(a,c,{suspend:()=>p.clear(),restore:()=>{u=l(),u?f&&v(f.items,f.frame):(d=!0,o())},lost:()=>{d=!0,o()}}),h=(e,t)=>{let n=c.FLOAT;switch(e.kind){case`line`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,2,n,!1,8,t*8),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,2,n,!1,8,t*8+8),c.vertexAttribDivisor(1,1);break;case`area`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,3,n,!1,12,t*12),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,3,n,!1,12,(t+1)*12),c.vertexAttribDivisor(1,1);break;case`bar`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,3,n,!1,16,t*16),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,4,c.UNSIGNED_BYTE,!0,16,t*16+12),c.vertexAttribDivisor(1,1);break;default:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,2,n,!1,16,0),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,1,n,!1,16,8),c.vertexAttribDivisor(1,1),c.enableVertexAttribArray(2),c.vertexAttribPointer(2,4,c.UNSIGNED_BYTE,!0,16,12),c.vertexAttribDivisor(2,1)}},g=e=>{c.deleteBuffer(e.buffer),c.deleteVertexArray(e.vao)},_=e=>{let t=p.get(e.key);if(t&&t.version===e.version&&t.kind===e.kind)return t;t&&g(t);let n=c.createBuffer(),r=c.createVertexArray();if(!n||!r)return null;switch(c.bindVertexArray(r),c.bindBuffer(c.ARRAY_BUFFER,n),e.kind){case`line`:c.bufferData(c.ARRAY_BUFFER,e.points,c.STATIC_DRAW,0,e.count*2);break;case`area`:c.bufferData(c.ARRAY_BUFFER,e.points,c.STATIC_DRAW,0,e.count*3);break;default:c.bufferData(c.ARRAY_BUFFER,e.instances,c.STATIC_DRAW)}h(e,0),c.bindVertexArray(null);let i={version:e.version,kind:e.kind,buffer:n,vao:r,first:0};return p.set(e.key,i),i},v=(t,r)=>{if(!u)return;c.viewport(0,0,a.width,a.height),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),c.enable(c.BLEND),c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);let i=r.transform,o=new Set;for(let a of t){o.add(a.key);let[t,s]=n.instanceRange(a,r);if(s<=0)continue;let l=_(a);if(!l)continue;let d=u[a.kind];c.useProgram(d.program),c.uniform4f(d.xform,i.xScale,i.xOffset,i.yScale,i.yOffset),c.uniform4f(d.viewport,r.width,r.height,r.dpr,0),c.uniform4f(d.color,a.color[0],a.color[1],a.color[2],a.color[3]);let[f,p,m,g]=e.itemParams(a,r);c.uniform4f(d.params,f,p,m,g),c.bindVertexArray(l.vao),l.first!==t&&(c.bindBuffer(c.ARRAY_BUFFER,l.buffer),h(a,t),l.first=t),c.drawArraysInstanced(c.TRIANGLE_STRIP,0,4,s)}c.bindVertexArray(null);for(let[e,t]of p)o.has(e)||(g(t),p.delete(e))};return{kind:`webgl2`,canvas:a,resize(e,t){a.width=Math.max(1,e),a.height=Math.max(1,t)},render(e,t){f={items:e,frame:t},!(d||!m.use()||c.isContextLost())&&v(e,t)},destroy(){if(m.release(),f=null,!c.isContextLost()){for(let e of p.values())g(e);for(let e of Object.values(u??{}))c.deleteProgram(e.program);c.getExtension(`WEBGL_lose_context`)?.loseContext()}p.clear()}}};exports.createWebGl2Renderer=a;
2
2
  //# sourceMappingURL=webgl2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2.cjs","names":["glContextAttributes","isSoftwareRenderer","compileProgram","GLSL_LINE","GLSL_AREA","GLSL_BAR","GLSL_SCATTER","instanceRange","itemParams","require_gl","require_range","require_shaders","ATTRIBUTES","createWebGl2Renderer","gl","canvas","requireHardware","line","area","bar","scatter","programs","lost","handleLost","event","onLost","resources","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","width","height","t","frame","seen","items","instances","program","p0","p1","p2","p3","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n if (!line || !area || !bar || !scatter) return null;\n const programs = { line, area, bar, scatter };\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n }\n resources.clear();\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgl2.cjs","names":["glContextAttributes","isSoftwareRenderer","compileProgram","GLSL_LINE","GLSL_AREA","GLSL_BAR","GLSL_SCATTER","claimGlSlot","instanceRange","itemParams","require_gl","require_gl_budget","require_range","require_shaders","ATTRIBUTES","createWebGl2Renderer","gl","canvas","requireHardware","compile","line","area","bar","scatter","programs","lost","last","resources","slot","draw","onLost","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","t","frame","seen","items","instances","program","p0","p1","p2","p3","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const compile = (): Record<RenderItem[\"kind\"], GlProgram> | null => {\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n return line && area && bar && scatter ? { line, area, bar, scatter } : null;\n };\n let programs = compile();\n if (!programs) return null;\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n programs = compile();\n if (!programs) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!programs) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs ?? {})) {\n gl.deleteProgram(p.program);\n }\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { compileProgram as e, glContextAttributes as t, isSoftwareRenderer as n, itemParams as r } from "./gl.js";
2
- import { instanceRange as i } from "./range.js";
3
- import { GLSL_AREA as a, GLSL_BAR as o, GLSL_LINE as s, GLSL_SCATTER as c } from "./shaders.js";
2
+ import { claimGlSlot as i } from "./gl-budget.js";
3
+ import { instanceRange as a } from "./range.js";
4
+ import { GLSL_AREA as o, GLSL_BAR as s, GLSL_LINE as c, GLSL_SCATTER as l } from "./shaders.js";
4
5
  //#region src/engine/renderers/webgl2.ts
5
- var l = {
6
+ var u = {
6
7
  line: ["a_a", "a_b"],
7
8
  area: ["a_a", "a_b"],
8
9
  bar: ["a_inst", "a_color"],
@@ -11,53 +12,60 @@ var l = {
11
12
  "a_size",
12
13
  "a_color"
13
14
  ]
14
- }, u = (u, d, f = !1) => {
15
- let p = u.getContext("webgl2", t(f));
16
- if (!p) return null;
17
- if (f && n(p)) return p.getExtension("WEBGL_lose_context")?.loseContext(), null;
18
- let m = e(p, s, l.line), h = e(p, a, l.area), g = e(p, o, l.bar), _ = e(p, c, l.scatter);
19
- if (!m || !h || !g || !_) return null;
20
- let v = {
21
- line: m,
22
- area: h,
23
- bar: g,
24
- scatter: _
25
- }, y = !1, b = (e) => {
26
- e.preventDefault(), y = !0, d();
27
- };
28
- u.addEventListener("webglcontextlost", b);
29
- let x = /* @__PURE__ */ new Map(), S = (e, t) => {
30
- let n = p.FLOAT;
15
+ }, d = (d, f, p = !1) => {
16
+ let m = d.getContext("webgl2", t(p));
17
+ if (!m) return null;
18
+ if (p && n(m)) return m.getExtension("WEBGL_lose_context")?.loseContext(), null;
19
+ let h = () => {
20
+ let t = e(m, c, u.line), n = e(m, o, u.area), r = e(m, s, u.bar), i = e(m, l, u.scatter);
21
+ return t && n && r && i ? {
22
+ line: t,
23
+ area: n,
24
+ bar: r,
25
+ scatter: i
26
+ } : null;
27
+ }, g = h();
28
+ if (!g) return null;
29
+ let _ = !1, v = null, y = /* @__PURE__ */ new Map(), b = i(d, m, {
30
+ suspend: () => y.clear(),
31
+ restore: () => {
32
+ g = h(), g ? v && w(v.items, v.frame) : (_ = !0, f());
33
+ },
34
+ lost: () => {
35
+ _ = !0, f();
36
+ }
37
+ }), x = (e, t) => {
38
+ let n = m.FLOAT;
31
39
  switch (e.kind) {
32
40
  case "line":
33
- p.enableVertexAttribArray(0), p.vertexAttribPointer(0, 2, n, !1, 8, t * 8), p.vertexAttribDivisor(0, 1), p.enableVertexAttribArray(1), p.vertexAttribPointer(1, 2, n, !1, 8, t * 8 + 8), p.vertexAttribDivisor(1, 1);
41
+ m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 2, n, !1, 8, t * 8), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 2, n, !1, 8, t * 8 + 8), m.vertexAttribDivisor(1, 1);
34
42
  break;
35
43
  case "area":
36
- p.enableVertexAttribArray(0), p.vertexAttribPointer(0, 3, n, !1, 12, t * 12), p.vertexAttribDivisor(0, 1), p.enableVertexAttribArray(1), p.vertexAttribPointer(1, 3, n, !1, 12, (t + 1) * 12), p.vertexAttribDivisor(1, 1);
44
+ m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 3, n, !1, 12, t * 12), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 3, n, !1, 12, (t + 1) * 12), m.vertexAttribDivisor(1, 1);
37
45
  break;
38
46
  case "bar":
39
- p.enableVertexAttribArray(0), p.vertexAttribPointer(0, 3, n, !1, 16, t * 16), p.vertexAttribDivisor(0, 1), p.enableVertexAttribArray(1), p.vertexAttribPointer(1, 4, p.UNSIGNED_BYTE, !0, 16, t * 16 + 12), p.vertexAttribDivisor(1, 1);
47
+ m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 3, n, !1, 16, t * 16), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 4, m.UNSIGNED_BYTE, !0, 16, t * 16 + 12), m.vertexAttribDivisor(1, 1);
40
48
  break;
41
- default: p.enableVertexAttribArray(0), p.vertexAttribPointer(0, 2, n, !1, 16, 0), p.vertexAttribDivisor(0, 1), p.enableVertexAttribArray(1), p.vertexAttribPointer(1, 1, n, !1, 16, 8), p.vertexAttribDivisor(1, 1), p.enableVertexAttribArray(2), p.vertexAttribPointer(2, 4, p.UNSIGNED_BYTE, !0, 16, 12), p.vertexAttribDivisor(2, 1);
49
+ default: m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 2, n, !1, 16, 0), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 1, n, !1, 16, 8), m.vertexAttribDivisor(1, 1), m.enableVertexAttribArray(2), m.vertexAttribPointer(2, 4, m.UNSIGNED_BYTE, !0, 16, 12), m.vertexAttribDivisor(2, 1);
42
50
  }
51
+ }, S = (e) => {
52
+ m.deleteBuffer(e.buffer), m.deleteVertexArray(e.vao);
43
53
  }, C = (e) => {
44
- p.deleteBuffer(e.buffer), p.deleteVertexArray(e.vao);
45
- }, w = (e) => {
46
- let t = x.get(e.key);
54
+ let t = y.get(e.key);
47
55
  if (t && t.version === e.version && t.kind === e.kind) return t;
48
- t && C(t);
49
- let n = p.createBuffer(), r = p.createVertexArray();
56
+ t && S(t);
57
+ let n = m.createBuffer(), r = m.createVertexArray();
50
58
  if (!n || !r) return null;
51
- switch (p.bindVertexArray(r), p.bindBuffer(p.ARRAY_BUFFER, n), e.kind) {
59
+ switch (m.bindVertexArray(r), m.bindBuffer(m.ARRAY_BUFFER, n), e.kind) {
52
60
  case "line":
53
- p.bufferData(p.ARRAY_BUFFER, e.points, p.STATIC_DRAW, 0, e.count * 2);
61
+ m.bufferData(m.ARRAY_BUFFER, e.points, m.STATIC_DRAW, 0, e.count * 2);
54
62
  break;
55
63
  case "area":
56
- p.bufferData(p.ARRAY_BUFFER, e.points, p.STATIC_DRAW, 0, e.count * 3);
64
+ m.bufferData(m.ARRAY_BUFFER, e.points, m.STATIC_DRAW, 0, e.count * 3);
57
65
  break;
58
- default: p.bufferData(p.ARRAY_BUFFER, e.instances, p.STATIC_DRAW);
66
+ default: m.bufferData(m.ARRAY_BUFFER, e.instances, m.STATIC_DRAW);
59
67
  }
60
- S(e, 0), p.bindVertexArray(null);
68
+ x(e, 0), m.bindVertexArray(null);
61
69
  let i = {
62
70
  version: e.version,
63
71
  kind: e.kind,
@@ -65,42 +73,48 @@ var l = {
65
73
  vao: r,
66
74
  first: 0
67
75
  };
68
- return x.set(e.key, i), i;
76
+ return y.set(e.key, i), i;
77
+ }, w = (e, t) => {
78
+ if (!g) return;
79
+ m.viewport(0, 0, d.width, d.height), m.clearColor(0, 0, 0, 0), m.clear(m.COLOR_BUFFER_BIT), m.enable(m.BLEND), m.blendFunc(m.ONE, m.ONE_MINUS_SRC_ALPHA);
80
+ let n = t.transform, i = /* @__PURE__ */ new Set();
81
+ for (let o of e) {
82
+ i.add(o.key);
83
+ let [e, s] = a(o, t);
84
+ if (s <= 0) continue;
85
+ let c = C(o);
86
+ if (!c) continue;
87
+ let l = g[o.kind];
88
+ m.useProgram(l.program), m.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), m.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), m.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
89
+ let [u, d, f, p] = r(o, t);
90
+ m.uniform4f(l.params, u, d, f, p), m.bindVertexArray(c.vao), c.first !== e && (m.bindBuffer(m.ARRAY_BUFFER, c.buffer), x(o, e), c.first = e), m.drawArraysInstanced(m.TRIANGLE_STRIP, 0, 4, s);
91
+ }
92
+ m.bindVertexArray(null);
93
+ for (let [e, t] of y) i.has(e) || (S(t), y.delete(e));
69
94
  };
70
95
  return {
71
96
  kind: "webgl2",
72
- canvas: u,
97
+ canvas: d,
73
98
  resize(e, t) {
74
- u.width = Math.max(1, e), u.height = Math.max(1, t);
99
+ d.width = Math.max(1, e), d.height = Math.max(1, t);
75
100
  },
76
101
  render(e, t) {
77
- if (y || p.isContextLost()) return;
78
- p.viewport(0, 0, u.width, u.height), p.clearColor(0, 0, 0, 0), p.clear(p.COLOR_BUFFER_BIT), p.enable(p.BLEND), p.blendFunc(p.ONE, p.ONE_MINUS_SRC_ALPHA);
79
- let n = t.transform, a = /* @__PURE__ */ new Set();
80
- for (let o of e) {
81
- a.add(o.key);
82
- let [e, s] = i(o, t);
83
- if (s <= 0) continue;
84
- let c = w(o);
85
- if (!c) continue;
86
- let l = v[o.kind];
87
- p.useProgram(l.program), p.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), p.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), p.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
88
- let [u, d, f, m] = r(o, t);
89
- p.uniform4f(l.params, u, d, f, m), p.bindVertexArray(c.vao), c.first !== e && (p.bindBuffer(p.ARRAY_BUFFER, c.buffer), S(o, e), c.first = e), p.drawArraysInstanced(p.TRIANGLE_STRIP, 0, 4, s);
90
- }
91
- p.bindVertexArray(null);
92
- for (let [e, t] of x) a.has(e) || (C(t), x.delete(e));
102
+ v = {
103
+ items: e,
104
+ frame: t
105
+ }, !(_ || !b.use() || m.isContextLost()) && w(e, t);
93
106
  },
94
107
  destroy() {
95
- if (u.removeEventListener("webglcontextlost", b), !p.isContextLost()) {
96
- for (let e of x.values()) C(e);
97
- for (let e of Object.values(v)) p.deleteProgram(e.program);
108
+ if (b.release(), v = null, !m.isContextLost()) {
109
+ for (let e of y.values()) S(e);
110
+ for (let e of Object.values(g ?? {})) m.deleteProgram(e.program);
111
+ m.getExtension("WEBGL_lose_context")?.loseContext();
98
112
  }
99
- x.clear(), p.getExtension("WEBGL_lose_context")?.loseContext();
113
+ y.clear();
100
114
  }
101
115
  };
102
116
  };
103
117
  //#endregion
104
- export { u as createWebGl2Renderer };
118
+ export { d as createWebGl2Renderer };
105
119
 
106
120
  //# sourceMappingURL=webgl2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2.js","names":["ATTRIBUTES","createWebGl2Renderer","gl","canvas","glContextAttributes","requireHardware","isSoftwareRenderer","line","compileProgram","GLSL_LINE","area","GLSL_AREA","bar","GLSL_BAR","scatter","GLSL_SCATTER","programs","lost","handleLost","event","onLost","resources","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","width","height","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n if (!line || !area || !bar || !scatter) return null;\n const programs = { line, area, bar, scatter };\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n }\n resources.clear();\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgl2.js","names":["ATTRIBUTES","createWebGl2Renderer","gl","canvas","glContextAttributes","requireHardware","isSoftwareRenderer","compile","line","compileProgram","GLSL_LINE","area","GLSL_AREA","bar","GLSL_BAR","scatter","GLSL_SCATTER","programs","lost","last","resources","slot","claimGlSlot","draw","onLost","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const compile = (): Record<RenderItem[\"kind\"], GlProgram> | null => {\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n return line && area && bar && scatter ? { line, area, bar, scatter } : null;\n };\n let programs = compile();\n if (!programs) return null;\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n programs = compile();\n if (!programs) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!programs) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs ?? {})) {\n gl.deleteProgram(p.program);\n }\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":"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"}