minerva-design 1.3.0 → 1.4.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 (1166) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +13630 -4757
  4. package/dist/angular/fesm2022/minerva-angular.mjs +6872 -172
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +2240 -0
  7. package/dist/charts/canvas.d.cts +7 -2
  8. package/dist/charts/canvas.d.ts +7 -2
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +7 -4
  11. package/dist/charts/core.d.ts +7 -4
  12. package/dist/charts/core.js +19 -8
  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 +6 -6
  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.d.cts +11 -1
  20. package/dist/charts/engine/canvas.d.ts +11 -1
  21. package/dist/charts/engine/canvas.js +118 -68
  22. package/dist/charts/engine/canvas.js.map +1 -1
  23. package/dist/charts/engine/chart.cjs +1 -1
  24. package/dist/charts/engine/chart.cjs.map +1 -1
  25. package/dist/charts/engine/chart.d.cts +1 -1
  26. package/dist/charts/engine/chart.d.ts +1 -1
  27. package/dist/charts/engine/chart.js +307 -285
  28. package/dist/charts/engine/chart.js.map +1 -1
  29. package/dist/charts/engine/color.cjs +1 -1
  30. package/dist/charts/engine/color.cjs.map +1 -1
  31. package/dist/charts/engine/color.js +2 -2
  32. package/dist/charts/engine/color.js.map +1 -1
  33. package/dist/charts/engine/controller.cjs +1 -1
  34. package/dist/charts/engine/controller.cjs.map +1 -1
  35. package/dist/charts/engine/controller.d.cts +12 -3
  36. package/dist/charts/engine/controller.d.ts +12 -3
  37. package/dist/charts/engine/controller.js +359 -299
  38. package/dist/charts/engine/controller.js.map +1 -1
  39. package/dist/charts/engine/data.cjs +1 -1
  40. package/dist/charts/engine/data.cjs.map +1 -1
  41. package/dist/charts/engine/data.d.cts +6 -0
  42. package/dist/charts/engine/data.d.ts +6 -0
  43. package/dist/charts/engine/data.js +63 -49
  44. package/dist/charts/engine/data.js.map +1 -1
  45. package/dist/charts/engine/format.cjs +1 -1
  46. package/dist/charts/engine/format.cjs.map +1 -1
  47. package/dist/charts/engine/format.d.cts +21 -6
  48. package/dist/charts/engine/format.d.ts +21 -6
  49. package/dist/charts/engine/format.js +46 -21
  50. package/dist/charts/engine/format.js.map +1 -1
  51. package/dist/charts/engine/items.cjs +1 -1
  52. package/dist/charts/engine/items.cjs.map +1 -1
  53. package/dist/charts/engine/items.js +211 -54
  54. package/dist/charts/engine/items.js.map +1 -1
  55. package/dist/charts/engine/labels.cjs +2 -0
  56. package/dist/charts/engine/labels.cjs.map +1 -0
  57. package/dist/charts/engine/labels.d.cts +13 -0
  58. package/dist/charts/engine/labels.d.ts +13 -0
  59. package/dist/charts/engine/labels.js +74 -0
  60. package/dist/charts/engine/labels.js.map +1 -0
  61. package/dist/charts/engine/layout.cjs +1 -1
  62. package/dist/charts/engine/layout.cjs.map +1 -1
  63. package/dist/charts/engine/layout.d.cts +34 -2
  64. package/dist/charts/engine/layout.d.ts +34 -2
  65. package/dist/charts/engine/layout.js +53 -12
  66. package/dist/charts/engine/layout.js.map +1 -1
  67. package/dist/charts/engine/locale.cjs +2 -0
  68. package/dist/charts/engine/locale.cjs.map +1 -0
  69. package/dist/charts/engine/locale.d.cts +33 -0
  70. package/dist/charts/engine/locale.d.ts +33 -0
  71. package/dist/charts/engine/locale.js +68 -0
  72. package/dist/charts/engine/locale.js.map +1 -0
  73. package/dist/charts/engine/model.cjs +1 -1
  74. package/dist/charts/engine/model.cjs.map +1 -1
  75. package/dist/charts/engine/model.d.cts +39 -1
  76. package/dist/charts/engine/model.d.ts +39 -1
  77. package/dist/charts/engine/model.js +212 -105
  78. package/dist/charts/engine/model.js.map +1 -1
  79. package/dist/charts/engine/orderbook/book.cjs +2 -0
  80. package/dist/charts/engine/orderbook/book.cjs.map +1 -0
  81. package/dist/charts/engine/orderbook/book.d.cts +28 -0
  82. package/dist/charts/engine/orderbook/book.d.ts +28 -0
  83. package/dist/charts/engine/orderbook/book.js +134 -0
  84. package/dist/charts/engine/orderbook/book.js.map +1 -0
  85. package/dist/charts/engine/orderbook/depth.cjs +2 -0
  86. package/dist/charts/engine/orderbook/depth.cjs.map +1 -0
  87. package/dist/charts/engine/orderbook/depth.d.cts +7 -0
  88. package/dist/charts/engine/orderbook/depth.d.ts +7 -0
  89. package/dist/charts/engine/orderbook/depth.js +413 -0
  90. package/dist/charts/engine/orderbook/depth.js.map +1 -0
  91. package/dist/charts/engine/orderbook/format.cjs +2 -0
  92. package/dist/charts/engine/orderbook/format.cjs.map +1 -0
  93. package/dist/charts/engine/orderbook/format.d.cts +48 -0
  94. package/dist/charts/engine/orderbook/format.d.ts +48 -0
  95. package/dist/charts/engine/orderbook/format.js +65 -0
  96. package/dist/charts/engine/orderbook/format.js.map +1 -0
  97. package/dist/charts/engine/orderbook/heatmap.cjs +2 -0
  98. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -0
  99. package/dist/charts/engine/orderbook/heatmap.d.cts +9 -0
  100. package/dist/charts/engine/orderbook/heatmap.d.ts +9 -0
  101. package/dist/charts/engine/orderbook/heatmap.js +703 -0
  102. package/dist/charts/engine/orderbook/heatmap.js.map +1 -0
  103. package/dist/charts/engine/orderbook/host.cjs +2 -0
  104. package/dist/charts/engine/orderbook/host.cjs.map +1 -0
  105. package/dist/charts/engine/orderbook/host.d.cts +50 -0
  106. package/dist/charts/engine/orderbook/host.d.ts +50 -0
  107. package/dist/charts/engine/orderbook/host.js +161 -0
  108. package/dist/charts/engine/orderbook/host.js.map +1 -0
  109. package/dist/charts/engine/orderbook/index.cjs +1 -0
  110. package/dist/charts/engine/orderbook/index.d.cts +6 -0
  111. package/dist/charts/engine/orderbook/index.d.ts +6 -0
  112. package/dist/charts/engine/orderbook/index.js +6 -0
  113. package/dist/charts/engine/orderbook/ladder.cjs +2 -0
  114. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -0
  115. package/dist/charts/engine/orderbook/ladder.d.cts +6 -0
  116. package/dist/charts/engine/orderbook/ladder.d.ts +6 -0
  117. package/dist/charts/engine/orderbook/ladder.js +341 -0
  118. package/dist/charts/engine/orderbook/ladder.js.map +1 -0
  119. package/dist/charts/engine/orderbook/tape.cjs +2 -0
  120. package/dist/charts/engine/orderbook/tape.cjs.map +1 -0
  121. package/dist/charts/engine/orderbook/tape.d.cts +6 -0
  122. package/dist/charts/engine/orderbook/tape.d.ts +6 -0
  123. package/dist/charts/engine/orderbook/tape.js +450 -0
  124. package/dist/charts/engine/orderbook/tape.js.map +1 -0
  125. package/dist/charts/engine/orderbook/types.d.cts +735 -0
  126. package/dist/charts/engine/orderbook/types.d.ts +735 -0
  127. package/dist/charts/engine/overlay.cjs +1 -1
  128. package/dist/charts/engine/overlay.cjs.map +1 -1
  129. package/dist/charts/engine/overlay.d.cts +18 -2
  130. package/dist/charts/engine/overlay.d.ts +18 -2
  131. package/dist/charts/engine/overlay.js +132 -96
  132. package/dist/charts/engine/overlay.js.map +1 -1
  133. package/dist/charts/engine/presets.cjs +2 -2
  134. package/dist/charts/engine/presets.cjs.map +1 -1
  135. package/dist/charts/engine/presets.d.cts +249 -1
  136. package/dist/charts/engine/presets.d.ts +249 -1
  137. package/dist/charts/engine/presets.js +367 -29
  138. package/dist/charts/engine/presets.js.map +1 -1
  139. package/dist/charts/engine/renderers/detect.cjs +1 -1
  140. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  141. package/dist/charts/engine/renderers/detect.js +18 -15
  142. package/dist/charts/engine/renderers/detect.js.map +1 -1
  143. package/dist/charts/engine/renderers/gl.cjs +2 -0
  144. package/dist/charts/engine/renderers/gl.cjs.map +1 -0
  145. package/dist/charts/engine/renderers/gl.d.cts +21 -0
  146. package/dist/charts/engine/renderers/gl.d.ts +21 -0
  147. package/dist/charts/engine/renderers/gl.js +56 -0
  148. package/dist/charts/engine/renderers/gl.js.map +1 -0
  149. package/dist/charts/engine/renderers/shaders.cjs +143 -1
  150. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  151. package/dist/charts/engine/renderers/shaders.d.cts +16 -0
  152. package/dist/charts/engine/renderers/shaders.d.ts +16 -0
  153. package/dist/charts/engine/renderers/shaders.js +139 -1
  154. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  155. package/dist/charts/engine/renderers/webgl.cjs +2 -0
  156. package/dist/charts/engine/renderers/webgl.cjs.map +1 -0
  157. package/dist/charts/engine/renderers/webgl.d.cts +4 -0
  158. package/dist/charts/engine/renderers/webgl.d.ts +4 -0
  159. package/dist/charts/engine/renderers/webgl.js +133 -0
  160. package/dist/charts/engine/renderers/webgl.js.map +1 -0
  161. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  162. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  163. package/dist/charts/engine/renderers/webgl2.d.cts +0 -1
  164. package/dist/charts/engine/renderers/webgl2.d.ts +0 -1
  165. package/dist/charts/engine/renderers/webgl2.js +59 -108
  166. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  167. package/dist/charts/engine/scale.cjs +1 -1
  168. package/dist/charts/engine/scale.cjs.map +1 -1
  169. package/dist/charts/engine/scale.js +1 -1
  170. package/dist/charts/engine/scale.js.map +1 -1
  171. package/dist/charts/engine/scene.cjs +1 -1
  172. package/dist/charts/engine/scene.cjs.map +1 -1
  173. package/dist/charts/engine/scene.d.cts +14 -4
  174. package/dist/charts/engine/scene.d.ts +14 -4
  175. package/dist/charts/engine/scene.js +292 -163
  176. package/dist/charts/engine/scene.js.map +1 -1
  177. package/dist/charts/engine/shapes/bullet.cjs +2 -0
  178. package/dist/charts/engine/shapes/bullet.cjs.map +1 -0
  179. package/dist/charts/engine/shapes/bullet.d.cts +6 -0
  180. package/dist/charts/engine/shapes/bullet.d.ts +6 -0
  181. package/dist/charts/engine/shapes/bullet.js +255 -0
  182. package/dist/charts/engine/shapes/bullet.js.map +1 -0
  183. package/dist/charts/engine/shapes/calendar.cjs +2 -0
  184. package/dist/charts/engine/shapes/calendar.cjs.map +1 -0
  185. package/dist/charts/engine/shapes/calendar.d.cts +38 -0
  186. package/dist/charts/engine/shapes/calendar.d.ts +38 -0
  187. package/dist/charts/engine/shapes/calendar.js +369 -0
  188. package/dist/charts/engine/shapes/calendar.js.map +1 -0
  189. package/dist/charts/engine/shapes/canvas.cjs +1 -1
  190. package/dist/charts/engine/shapes/canvas.cjs.map +1 -1
  191. package/dist/charts/engine/shapes/canvas.d.cts +7 -0
  192. package/dist/charts/engine/shapes/canvas.d.ts +7 -0
  193. package/dist/charts/engine/shapes/canvas.js +22 -13
  194. package/dist/charts/engine/shapes/canvas.js.map +1 -1
  195. package/dist/charts/engine/shapes/chart.cjs +1 -1
  196. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  197. package/dist/charts/engine/shapes/chart.d.cts +3 -2
  198. package/dist/charts/engine/shapes/chart.d.ts +3 -2
  199. package/dist/charts/engine/shapes/chart.js +45 -26
  200. package/dist/charts/engine/shapes/chart.js.map +1 -1
  201. package/dist/charts/engine/shapes/draw.cjs +1 -1
  202. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  203. package/dist/charts/engine/shapes/draw.d.cts +3 -1
  204. package/dist/charts/engine/shapes/draw.d.ts +3 -1
  205. package/dist/charts/engine/shapes/draw.js +31 -18
  206. package/dist/charts/engine/shapes/draw.js.map +1 -1
  207. package/dist/charts/engine/shapes/funnel.cjs +1 -1
  208. package/dist/charts/engine/shapes/funnel.cjs.map +1 -1
  209. package/dist/charts/engine/shapes/funnel.js +3 -3
  210. package/dist/charts/engine/shapes/funnel.js.map +1 -1
  211. package/dist/charts/engine/shapes/gauge.cjs +1 -1
  212. package/dist/charts/engine/shapes/gauge.cjs.map +1 -1
  213. package/dist/charts/engine/shapes/gauge.js +132 -95
  214. package/dist/charts/engine/shapes/gauge.js.map +1 -1
  215. package/dist/charts/engine/shapes/hit.cjs +1 -1
  216. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  217. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  218. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  219. package/dist/charts/engine/shapes/hit.js +29 -8
  220. package/dist/charts/engine/shapes/hit.js.map +1 -1
  221. package/dist/charts/engine/shapes/index.d.cts +4 -1
  222. package/dist/charts/engine/shapes/index.d.ts +4 -1
  223. package/dist/charts/engine/shapes/labels.cjs +2 -0
  224. package/dist/charts/engine/shapes/labels.cjs.map +1 -0
  225. package/dist/charts/engine/shapes/labels.d.cts +14 -0
  226. package/dist/charts/engine/shapes/labels.d.ts +14 -0
  227. package/dist/charts/engine/shapes/labels.js +146 -0
  228. package/dist/charts/engine/shapes/labels.js.map +1 -0
  229. package/dist/charts/engine/shapes/layout.cjs +2 -2
  230. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  231. package/dist/charts/engine/shapes/layout.d.cts +8 -3
  232. package/dist/charts/engine/shapes/layout.d.ts +8 -3
  233. package/dist/charts/engine/shapes/layout.js +200 -113
  234. package/dist/charts/engine/shapes/layout.js.map +1 -1
  235. package/dist/charts/engine/shapes/pie.cjs +1 -1
  236. package/dist/charts/engine/shapes/pie.cjs.map +1 -1
  237. package/dist/charts/engine/shapes/pie.js +2 -2
  238. package/dist/charts/engine/shapes/pie.js.map +1 -1
  239. package/dist/charts/engine/shapes/radar.cjs +1 -1
  240. package/dist/charts/engine/shapes/radar.cjs.map +1 -1
  241. package/dist/charts/engine/shapes/radar.d.cts +2 -2
  242. package/dist/charts/engine/shapes/radar.d.ts +2 -2
  243. package/dist/charts/engine/shapes/radar.js +50 -49
  244. package/dist/charts/engine/shapes/radar.js.map +1 -1
  245. package/dist/charts/engine/shapes/radialBar.cjs +2 -0
  246. package/dist/charts/engine/shapes/radialBar.cjs.map +1 -0
  247. package/dist/charts/engine/shapes/radialBar.d.cts +8 -0
  248. package/dist/charts/engine/shapes/radialBar.d.ts +8 -0
  249. package/dist/charts/engine/shapes/radialBar.js +155 -0
  250. package/dist/charts/engine/shapes/radialBar.js.map +1 -0
  251. package/dist/charts/engine/shapes/runtime.cjs +1 -1
  252. package/dist/charts/engine/shapes/runtime.cjs.map +1 -1
  253. package/dist/charts/engine/shapes/runtime.d.cts +9 -2
  254. package/dist/charts/engine/shapes/runtime.d.ts +9 -2
  255. package/dist/charts/engine/shapes/runtime.js +61 -51
  256. package/dist/charts/engine/shapes/runtime.js.map +1 -1
  257. package/dist/charts/engine/shapes/sankey.cjs +2 -0
  258. package/dist/charts/engine/shapes/sankey.cjs.map +1 -0
  259. package/dist/charts/engine/shapes/sankey.d.cts +29 -0
  260. package/dist/charts/engine/shapes/sankey.d.ts +29 -0
  261. package/dist/charts/engine/shapes/sankey.js +372 -0
  262. package/dist/charts/engine/shapes/sankey.js.map +1 -0
  263. package/dist/charts/engine/shapes/scene.cjs +1 -1
  264. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  265. package/dist/charts/engine/shapes/scene.d.cts +62 -8
  266. package/dist/charts/engine/shapes/scene.d.ts +62 -8
  267. package/dist/charts/engine/shapes/scene.js +33 -31
  268. package/dist/charts/engine/shapes/scene.js.map +1 -1
  269. package/dist/charts/engine/shapes/sunburst.cjs +2 -0
  270. package/dist/charts/engine/shapes/sunburst.cjs.map +1 -0
  271. package/dist/charts/engine/shapes/sunburst.d.cts +6 -0
  272. package/dist/charts/engine/shapes/sunburst.d.ts +6 -0
  273. package/dist/charts/engine/shapes/sunburst.js +261 -0
  274. package/dist/charts/engine/shapes/sunburst.js.map +1 -0
  275. package/dist/charts/engine/shapes/treemap.cjs +1 -1
  276. package/dist/charts/engine/shapes/treemap.cjs.map +1 -1
  277. package/dist/charts/engine/shapes/treemap.js +2 -2
  278. package/dist/charts/engine/shapes/treemap.js.map +1 -1
  279. package/dist/charts/engine/shapes/types.d.cts +439 -12
  280. package/dist/charts/engine/shapes/types.d.ts +439 -12
  281. package/dist/charts/engine/three-d/canvas2d.cjs +2 -0
  282. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -0
  283. package/dist/charts/engine/three-d/canvas2d.d.cts +4 -0
  284. package/dist/charts/engine/three-d/canvas2d.d.ts +4 -0
  285. package/dist/charts/engine/three-d/canvas2d.js +104 -0
  286. package/dist/charts/engine/three-d/canvas2d.js.map +1 -0
  287. package/dist/charts/engine/three-d/chart.cjs +2 -0
  288. package/dist/charts/engine/three-d/chart.cjs.map +1 -0
  289. package/dist/charts/engine/three-d/chart.d.cts +15 -0
  290. package/dist/charts/engine/three-d/chart.d.ts +15 -0
  291. package/dist/charts/engine/three-d/chart.js +621 -0
  292. package/dist/charts/engine/three-d/chart.js.map +1 -0
  293. package/dist/charts/engine/three-d/colormap.cjs +2 -0
  294. package/dist/charts/engine/three-d/colormap.cjs.map +1 -0
  295. package/dist/charts/engine/three-d/colormap.d.cts +16 -0
  296. package/dist/charts/engine/three-d/colormap.d.ts +16 -0
  297. package/dist/charts/engine/three-d/colormap.js +166 -0
  298. package/dist/charts/engine/three-d/colormap.js.map +1 -0
  299. package/dist/charts/engine/three-d/contours.cjs +2 -0
  300. package/dist/charts/engine/three-d/contours.cjs.map +1 -0
  301. package/dist/charts/engine/three-d/contours.d.cts +7 -0
  302. package/dist/charts/engine/three-d/contours.d.ts +7 -0
  303. package/dist/charts/engine/three-d/contours.js +47 -0
  304. package/dist/charts/engine/three-d/contours.js.map +1 -0
  305. package/dist/charts/engine/three-d/detect.cjs +2 -0
  306. package/dist/charts/engine/three-d/detect.cjs.map +1 -0
  307. package/dist/charts/engine/three-d/detect.d.cts +11 -0
  308. package/dist/charts/engine/three-d/detect.d.ts +11 -0
  309. package/dist/charts/engine/three-d/detect.js +35 -0
  310. package/dist/charts/engine/three-d/detect.js.map +1 -0
  311. package/dist/charts/engine/three-d/dom.cjs +2 -0
  312. package/dist/charts/engine/three-d/dom.cjs.map +1 -0
  313. package/dist/charts/engine/three-d/dom.d.cts +21 -0
  314. package/dist/charts/engine/three-d/dom.d.ts +21 -0
  315. package/dist/charts/engine/three-d/dom.js +98 -0
  316. package/dist/charts/engine/three-d/dom.js.map +1 -0
  317. package/dist/charts/engine/three-d/geometry.cjs +2 -0
  318. package/dist/charts/engine/three-d/geometry.cjs.map +1 -0
  319. package/dist/charts/engine/three-d/geometry.d.cts +76 -0
  320. package/dist/charts/engine/three-d/geometry.d.ts +76 -0
  321. package/dist/charts/engine/three-d/geometry.js +529 -0
  322. package/dist/charts/engine/three-d/geometry.js.map +1 -0
  323. package/dist/charts/engine/three-d/hover.cjs +2 -0
  324. package/dist/charts/engine/three-d/hover.cjs.map +1 -0
  325. package/dist/charts/engine/three-d/hover.d.cts +25 -0
  326. package/dist/charts/engine/three-d/hover.d.ts +25 -0
  327. package/dist/charts/engine/three-d/hover.js +131 -0
  328. package/dist/charts/engine/three-d/hover.js.map +1 -0
  329. package/dist/charts/engine/three-d/index.cjs +1 -0
  330. package/dist/charts/engine/three-d/index.d.cts +2 -0
  331. package/dist/charts/engine/three-d/index.d.ts +2 -0
  332. package/dist/charts/engine/three-d/index.js +2 -0
  333. package/dist/charts/engine/three-d/labels.cjs +2 -0
  334. package/dist/charts/engine/three-d/labels.cjs.map +1 -0
  335. package/dist/charts/engine/three-d/labels.d.cts +23 -0
  336. package/dist/charts/engine/three-d/labels.d.ts +23 -0
  337. package/dist/charts/engine/three-d/labels.js +136 -0
  338. package/dist/charts/engine/three-d/labels.js.map +1 -0
  339. package/dist/charts/engine/three-d/math.cjs +2 -0
  340. package/dist/charts/engine/three-d/math.cjs.map +1 -0
  341. package/dist/charts/engine/three-d/math.d.cts +84 -0
  342. package/dist/charts/engine/three-d/math.d.ts +84 -0
  343. package/dist/charts/engine/three-d/math.js +150 -0
  344. package/dist/charts/engine/three-d/math.js.map +1 -0
  345. package/dist/charts/engine/three-d/model.cjs +2 -0
  346. package/dist/charts/engine/three-d/model.cjs.map +1 -0
  347. package/dist/charts/engine/three-d/model.d.cts +130 -0
  348. package/dist/charts/engine/three-d/model.d.ts +130 -0
  349. package/dist/charts/engine/three-d/model.js +277 -0
  350. package/dist/charts/engine/three-d/model.js.map +1 -0
  351. package/dist/charts/engine/three-d/overlay.cjs +2 -0
  352. package/dist/charts/engine/three-d/overlay.cjs.map +1 -0
  353. package/dist/charts/engine/three-d/overlay.d.cts +72 -0
  354. package/dist/charts/engine/three-d/overlay.d.ts +72 -0
  355. package/dist/charts/engine/three-d/overlay.js +197 -0
  356. package/dist/charts/engine/three-d/overlay.js.map +1 -0
  357. package/dist/charts/engine/three-d/pick.cjs +2 -0
  358. package/dist/charts/engine/three-d/pick.cjs.map +1 -0
  359. package/dist/charts/engine/three-d/pick.d.cts +52 -0
  360. package/dist/charts/engine/three-d/pick.d.ts +52 -0
  361. package/dist/charts/engine/three-d/pick.js +220 -0
  362. package/dist/charts/engine/three-d/pick.js.map +1 -0
  363. package/dist/charts/engine/three-d/render-types.cjs +2 -0
  364. package/dist/charts/engine/three-d/render-types.cjs.map +1 -0
  365. package/dist/charts/engine/three-d/render-types.d.cts +82 -0
  366. package/dist/charts/engine/three-d/render-types.d.ts +82 -0
  367. package/dist/charts/engine/three-d/render-types.js +13 -0
  368. package/dist/charts/engine/three-d/render-types.js.map +1 -0
  369. package/dist/charts/engine/three-d/shaders.cjs +276 -0
  370. package/dist/charts/engine/three-d/shaders.cjs.map +1 -0
  371. package/dist/charts/engine/three-d/shaders.d.cts +26 -0
  372. package/dist/charts/engine/three-d/shaders.d.ts +26 -0
  373. package/dist/charts/engine/three-d/shaders.js +191 -0
  374. package/dist/charts/engine/three-d/shaders.js.map +1 -0
  375. package/dist/charts/engine/three-d/sort.cjs +2 -0
  376. package/dist/charts/engine/three-d/sort.cjs.map +1 -0
  377. package/dist/charts/engine/three-d/sort.d.cts +18 -0
  378. package/dist/charts/engine/three-d/sort.d.ts +18 -0
  379. package/dist/charts/engine/three-d/sort.js +71 -0
  380. package/dist/charts/engine/three-d/sort.js.map +1 -0
  381. package/dist/charts/engine/three-d/types.d.cts +588 -0
  382. package/dist/charts/engine/three-d/types.d.ts +588 -0
  383. package/dist/charts/engine/three-d/webgl.cjs +2 -0
  384. package/dist/charts/engine/three-d/webgl.cjs.map +1 -0
  385. package/dist/charts/engine/three-d/webgl.d.cts +10 -0
  386. package/dist/charts/engine/three-d/webgl.d.ts +10 -0
  387. package/dist/charts/engine/three-d/webgl.js +130 -0
  388. package/dist/charts/engine/three-d/webgl.js.map +1 -0
  389. package/dist/charts/engine/three-d/webgpu.cjs +2 -0
  390. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -0
  391. package/dist/charts/engine/three-d/webgpu.d.cts +5 -0
  392. package/dist/charts/engine/three-d/webgpu.d.ts +5 -0
  393. package/dist/charts/engine/three-d/webgpu.js +249 -0
  394. package/dist/charts/engine/three-d/webgpu.js.map +1 -0
  395. package/dist/charts/engine/time.cjs +1 -1
  396. package/dist/charts/engine/time.cjs.map +1 -1
  397. package/dist/charts/engine/time.d.cts +13 -4
  398. package/dist/charts/engine/time.d.ts +13 -4
  399. package/dist/charts/engine/time.js +156 -91
  400. package/dist/charts/engine/time.js.map +1 -1
  401. package/dist/charts/engine/trading/chart.cjs +2 -0
  402. package/dist/charts/engine/trading/chart.cjs.map +1 -0
  403. package/dist/charts/engine/trading/chart.d.cts +3 -0
  404. package/dist/charts/engine/trading/chart.d.ts +3 -0
  405. package/dist/charts/engine/trading/chart.js +1507 -0
  406. package/dist/charts/engine/trading/chart.js.map +1 -0
  407. package/dist/charts/engine/trading/drawings.cjs +2 -0
  408. package/dist/charts/engine/trading/drawings.cjs.map +1 -0
  409. package/dist/charts/engine/trading/drawings.d.cts +57 -0
  410. package/dist/charts/engine/trading/drawings.d.ts +57 -0
  411. package/dist/charts/engine/trading/drawings.js +160 -0
  412. package/dist/charts/engine/trading/drawings.js.map +1 -0
  413. package/dist/charts/engine/trading/format.cjs +2 -0
  414. package/dist/charts/engine/trading/format.cjs.map +1 -0
  415. package/dist/charts/engine/trading/format.d.cts +60 -0
  416. package/dist/charts/engine/trading/format.d.ts +60 -0
  417. package/dist/charts/engine/trading/format.js +131 -0
  418. package/dist/charts/engine/trading/format.js.map +1 -0
  419. package/dist/charts/engine/trading/geometry.cjs +2 -0
  420. package/dist/charts/engine/trading/geometry.cjs.map +1 -0
  421. package/dist/charts/engine/trading/geometry.d.cts +55 -0
  422. package/dist/charts/engine/trading/geometry.d.ts +55 -0
  423. package/dist/charts/engine/trading/geometry.js +131 -0
  424. package/dist/charts/engine/trading/geometry.js.map +1 -0
  425. package/dist/charts/engine/trading/index.cjs +1 -0
  426. package/dist/charts/engine/trading/index.d.cts +3 -0
  427. package/dist/charts/engine/trading/index.d.ts +3 -0
  428. package/dist/charts/engine/trading/index.js +3 -0
  429. package/dist/charts/engine/trading/indicators.cjs +2 -0
  430. package/dist/charts/engine/trading/indicators.cjs.map +1 -0
  431. package/dist/charts/engine/trading/indicators.d.cts +105 -0
  432. package/dist/charts/engine/trading/indicators.d.ts +105 -0
  433. package/dist/charts/engine/trading/indicators.js +268 -0
  434. package/dist/charts/engine/trading/indicators.js.map +1 -0
  435. package/dist/charts/engine/trading/labels.cjs +2 -0
  436. package/dist/charts/engine/trading/labels.cjs.map +1 -0
  437. package/dist/charts/engine/trading/labels.d.cts +7 -0
  438. package/dist/charts/engine/trading/labels.d.ts +7 -0
  439. package/dist/charts/engine/trading/labels.js +91 -0
  440. package/dist/charts/engine/trading/labels.js.map +1 -0
  441. package/dist/charts/engine/trading/scale.cjs +2 -0
  442. package/dist/charts/engine/trading/scale.cjs.map +1 -0
  443. package/dist/charts/engine/trading/scale.d.cts +46 -0
  444. package/dist/charts/engine/trading/scale.d.ts +46 -0
  445. package/dist/charts/engine/trading/scale.js +100 -0
  446. package/dist/charts/engine/trading/scale.js.map +1 -0
  447. package/dist/charts/engine/trading/store.cjs +2 -0
  448. package/dist/charts/engine/trading/store.cjs.map +1 -0
  449. package/dist/charts/engine/trading/store.d.cts +62 -0
  450. package/dist/charts/engine/trading/store.d.ts +62 -0
  451. package/dist/charts/engine/trading/store.js +129 -0
  452. package/dist/charts/engine/trading/store.js.map +1 -0
  453. package/dist/charts/engine/trading/studies.cjs +2 -0
  454. package/dist/charts/engine/trading/studies.cjs.map +1 -0
  455. package/dist/charts/engine/trading/studies.d.cts +52 -0
  456. package/dist/charts/engine/trading/studies.d.ts +52 -0
  457. package/dist/charts/engine/trading/studies.js +254 -0
  458. package/dist/charts/engine/trading/studies.js.map +1 -0
  459. package/dist/charts/engine/trading/types.d.cts +656 -0
  460. package/dist/charts/engine/trading/types.d.ts +656 -0
  461. package/dist/charts/engine/types.d.cts +165 -14
  462. package/dist/charts/engine/types.d.ts +165 -14
  463. package/dist/charts/index.cjs +1 -1
  464. package/dist/charts/index.d.cts +7 -4
  465. package/dist/charts/index.d.ts +7 -4
  466. package/dist/charts/index.js +22 -11
  467. package/dist/charts/react/Chart.cjs +1 -1
  468. package/dist/charts/react/Chart.cjs.map +1 -1
  469. package/dist/charts/react/Chart.d.cts +4 -4
  470. package/dist/charts/react/Chart.d.ts +4 -4
  471. package/dist/charts/react/Chart.js +5 -1
  472. package/dist/charts/react/Chart.js.map +1 -1
  473. package/dist/charts/react/charts.cjs +1 -1
  474. package/dist/charts/react/charts.cjs.map +1 -1
  475. package/dist/charts/react/charts.d.cts +39 -1
  476. package/dist/charts/react/charts.d.ts +39 -1
  477. package/dist/charts/react/charts.js +303 -131
  478. package/dist/charts/react/charts.js.map +1 -1
  479. package/dist/charts/react/orderbook.cjs +2 -0
  480. package/dist/charts/react/orderbook.cjs.map +1 -0
  481. package/dist/charts/react/orderbook.d.cts +142 -0
  482. package/dist/charts/react/orderbook.d.ts +142 -0
  483. package/dist/charts/react/orderbook.js +182 -0
  484. package/dist/charts/react/orderbook.js.map +1 -0
  485. package/dist/charts/react/shapes.cjs +1 -1
  486. package/dist/charts/react/shapes.cjs.map +1 -1
  487. package/dist/charts/react/shapes.d.cts +291 -9
  488. package/dist/charts/react/shapes.d.ts +291 -9
  489. package/dist/charts/react/shapes.js +280 -93
  490. package/dist/charts/react/shapes.js.map +1 -1
  491. package/dist/charts/react/three-d.cjs +2 -0
  492. package/dist/charts/react/three-d.cjs.map +1 -0
  493. package/dist/charts/react/three-d.d.cts +151 -0
  494. package/dist/charts/react/three-d.d.ts +151 -0
  495. package/dist/charts/react/three-d.js +154 -0
  496. package/dist/charts/react/three-d.js.map +1 -0
  497. package/dist/charts/react/trading.cjs +2 -0
  498. package/dist/charts/react/trading.cjs.map +1 -0
  499. package/dist/charts/react/trading.d.cts +93 -0
  500. package/dist/charts/react/trading.d.ts +93 -0
  501. package/dist/charts/react/trading.js +95 -0
  502. package/dist/charts/react/trading.js.map +1 -0
  503. package/dist/charts/react/types.d.cts +132 -8
  504. package/dist/charts/react/types.d.ts +132 -8
  505. package/dist/core/contracts.cjs +1 -1
  506. package/dist/core/contracts.cjs.map +1 -1
  507. package/dist/core/contracts.js +1 -1
  508. package/dist/core/contracts.js.map +1 -1
  509. package/dist/native/charts/src/canvas.cjs +1 -1
  510. package/dist/native/charts/src/canvas.js +9 -3
  511. package/dist/native/charts/src/engine/axis.cjs +1 -1
  512. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  513. package/dist/native/charts/src/engine/axis.js +6 -6
  514. package/dist/native/charts/src/engine/axis.js.map +1 -1
  515. package/dist/native/charts/src/engine/controller.cjs +1 -1
  516. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  517. package/dist/native/charts/src/engine/controller.js +352 -292
  518. package/dist/native/charts/src/engine/controller.js.map +1 -1
  519. package/dist/native/charts/src/engine/data.cjs +1 -1
  520. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  521. package/dist/native/charts/src/engine/data.js +63 -49
  522. package/dist/native/charts/src/engine/data.js.map +1 -1
  523. package/dist/native/charts/src/engine/format.cjs +1 -1
  524. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  525. package/dist/native/charts/src/engine/format.js +46 -21
  526. package/dist/native/charts/src/engine/format.js.map +1 -1
  527. package/dist/native/charts/src/engine/labels.cjs +2 -0
  528. package/dist/native/charts/src/engine/labels.cjs.map +1 -0
  529. package/dist/native/charts/src/engine/labels.js +74 -0
  530. package/dist/native/charts/src/engine/labels.js.map +1 -0
  531. package/dist/native/charts/src/engine/layout.cjs +1 -1
  532. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  533. package/dist/native/charts/src/engine/layout.js +53 -12
  534. package/dist/native/charts/src/engine/layout.js.map +1 -1
  535. package/dist/native/charts/src/engine/locale.cjs +2 -0
  536. package/dist/native/charts/src/engine/locale.cjs.map +1 -0
  537. package/dist/native/charts/src/engine/locale.js +60 -0
  538. package/dist/native/charts/src/engine/locale.js.map +1 -0
  539. package/dist/native/charts/src/engine/model.cjs +1 -1
  540. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  541. package/dist/native/charts/src/engine/model.js +223 -116
  542. package/dist/native/charts/src/engine/model.js.map +1 -1
  543. package/dist/native/charts/src/engine/overlay.cjs +1 -1
  544. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  545. package/dist/native/charts/src/engine/overlay.js +46 -23
  546. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  547. package/dist/native/charts/src/engine/presets.cjs +2 -2
  548. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  549. package/dist/native/charts/src/engine/presets.js +448 -33
  550. package/dist/native/charts/src/engine/presets.js.map +1 -1
  551. package/dist/native/charts/src/engine/scale.cjs +1 -1
  552. package/dist/native/charts/src/engine/scale.cjs.map +1 -1
  553. package/dist/native/charts/src/engine/scale.js +1 -1
  554. package/dist/native/charts/src/engine/scale.js.map +1 -1
  555. package/dist/native/charts/src/engine/scene.cjs +1 -1
  556. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  557. package/dist/native/charts/src/engine/scene.js +296 -167
  558. package/dist/native/charts/src/engine/scene.js.map +1 -1
  559. package/dist/native/charts/src/engine/shapes/bullet.cjs +2 -0
  560. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -0
  561. package/dist/native/charts/src/engine/shapes/bullet.js +255 -0
  562. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -0
  563. package/dist/native/charts/src/engine/shapes/calendar.cjs +2 -0
  564. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -0
  565. package/dist/native/charts/src/engine/shapes/calendar.js +364 -0
  566. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -0
  567. package/dist/native/charts/src/engine/shapes/canvas.cjs +2 -0
  568. package/dist/native/charts/src/engine/shapes/canvas.cjs.map +1 -0
  569. package/dist/native/charts/src/engine/shapes/canvas.js +168 -0
  570. package/dist/native/charts/src/engine/shapes/canvas.js.map +1 -0
  571. package/dist/native/charts/src/engine/shapes/draw.cjs +2 -0
  572. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -0
  573. package/dist/native/charts/src/engine/shapes/draw.js +165 -0
  574. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -0
  575. package/dist/native/charts/src/engine/shapes/funnel.cjs +2 -0
  576. package/dist/native/charts/src/engine/shapes/funnel.cjs.map +1 -0
  577. package/dist/native/charts/src/engine/shapes/funnel.js +149 -0
  578. package/dist/native/charts/src/engine/shapes/funnel.js.map +1 -0
  579. package/dist/native/charts/src/engine/shapes/gauge.cjs +2 -0
  580. package/dist/native/charts/src/engine/shapes/gauge.cjs.map +1 -0
  581. package/dist/native/charts/src/engine/shapes/gauge.js +210 -0
  582. package/dist/native/charts/src/engine/shapes/gauge.js.map +1 -0
  583. package/dist/native/charts/src/engine/shapes/hit.cjs +2 -0
  584. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -0
  585. package/dist/native/charts/src/engine/shapes/hit.js +106 -0
  586. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -0
  587. package/dist/native/charts/src/engine/shapes/labels.cjs +2 -0
  588. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -0
  589. package/dist/native/charts/src/engine/shapes/labels.js +146 -0
  590. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -0
  591. package/dist/native/charts/src/engine/shapes/layout.cjs +3 -0
  592. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -0
  593. package/dist/native/charts/src/engine/shapes/layout.js +331 -0
  594. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -0
  595. package/dist/native/charts/src/engine/shapes/pie.cjs +2 -0
  596. package/dist/native/charts/src/engine/shapes/pie.cjs.map +1 -0
  597. package/dist/native/charts/src/engine/shapes/pie.js +302 -0
  598. package/dist/native/charts/src/engine/shapes/pie.js.map +1 -0
  599. package/dist/native/charts/src/engine/shapes/radar.cjs +2 -0
  600. package/dist/native/charts/src/engine/shapes/radar.cjs.map +1 -0
  601. package/dist/native/charts/src/engine/shapes/radar.js +198 -0
  602. package/dist/native/charts/src/engine/shapes/radar.js.map +1 -0
  603. package/dist/native/charts/src/engine/shapes/radialBar.cjs +2 -0
  604. package/dist/native/charts/src/engine/shapes/radialBar.cjs.map +1 -0
  605. package/dist/native/charts/src/engine/shapes/radialBar.js +155 -0
  606. package/dist/native/charts/src/engine/shapes/radialBar.js.map +1 -0
  607. package/dist/native/charts/src/engine/shapes/runtime.cjs +2 -0
  608. package/dist/native/charts/src/engine/shapes/runtime.cjs.map +1 -0
  609. package/dist/native/charts/src/engine/shapes/runtime.js +107 -0
  610. package/dist/native/charts/src/engine/shapes/runtime.js.map +1 -0
  611. package/dist/native/charts/src/engine/shapes/sankey.cjs +2 -0
  612. package/dist/native/charts/src/engine/shapes/sankey.cjs.map +1 -0
  613. package/dist/native/charts/src/engine/shapes/sankey.js +372 -0
  614. package/dist/native/charts/src/engine/shapes/sankey.js.map +1 -0
  615. package/dist/native/charts/src/engine/shapes/scene.cjs +2 -0
  616. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -0
  617. package/dist/native/charts/src/engine/shapes/scene.js +125 -0
  618. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -0
  619. package/dist/native/charts/src/engine/shapes/sunburst.cjs +2 -0
  620. package/dist/native/charts/src/engine/shapes/sunburst.cjs.map +1 -0
  621. package/dist/native/charts/src/engine/shapes/sunburst.js +261 -0
  622. package/dist/native/charts/src/engine/shapes/sunburst.js.map +1 -0
  623. package/dist/native/charts/src/engine/shapes/treemap.cjs +2 -0
  624. package/dist/native/charts/src/engine/shapes/treemap.cjs.map +1 -0
  625. package/dist/native/charts/src/engine/shapes/treemap.js +213 -0
  626. package/dist/native/charts/src/engine/shapes/treemap.js.map +1 -0
  627. package/dist/native/charts/src/engine/time.cjs +1 -1
  628. package/dist/native/charts/src/engine/time.cjs.map +1 -1
  629. package/dist/native/charts/src/engine/time.js +156 -91
  630. package/dist/native/charts/src/engine/time.js.map +1 -1
  631. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  632. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  633. package/dist/native/components/Chart/ChartBase.d.cts +1 -1
  634. package/dist/native/components/Chart/ChartBase.d.ts +1 -1
  635. package/dist/native/components/Chart/ChartBase.js +110 -107
  636. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  637. package/dist/native/components/Chart/charts.cjs +1 -1
  638. package/dist/native/components/Chart/charts.cjs.map +1 -1
  639. package/dist/native/components/Chart/charts.d.cts +6 -1
  640. package/dist/native/components/Chart/charts.d.ts +6 -1
  641. package/dist/native/components/Chart/charts.js +53 -29
  642. package/dist/native/components/Chart/charts.js.map +1 -1
  643. package/dist/native/components/Chart/index.cjs +1 -1
  644. package/dist/native/components/Chart/index.d.cts +1 -1
  645. package/dist/native/components/Chart/index.d.ts +1 -1
  646. package/dist/native/components/Chart/index.js +2 -2
  647. package/dist/native/components/Chart/scene.cjs +1 -1
  648. package/dist/native/components/Chart/scene.cjs.map +1 -1
  649. package/dist/native/components/Chart/scene.js +234 -217
  650. package/dist/native/components/Chart/scene.js.map +1 -1
  651. package/dist/native/components/Chart/types.d.cts +26 -3
  652. package/dist/native/components/Chart/types.d.ts +26 -3
  653. package/dist/native/components/Charts/charts.cjs +2 -0
  654. package/dist/native/components/Charts/charts.cjs.map +1 -0
  655. package/dist/native/components/Charts/charts.d.cts +41 -0
  656. package/dist/native/components/Charts/charts.d.ts +41 -0
  657. package/dist/native/components/Charts/charts.js +338 -0
  658. package/dist/native/components/Charts/charts.js.map +1 -0
  659. package/dist/native/components/Charts/index.cjs +1 -0
  660. package/dist/native/components/Charts/index.d.cts +2 -0
  661. package/dist/native/components/Charts/index.d.ts +2 -0
  662. package/dist/native/components/Charts/index.js +2 -0
  663. package/dist/native/components/Charts/types.d.cts +144 -0
  664. package/dist/native/components/Charts/types.d.ts +144 -0
  665. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +2 -0
  666. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -0
  667. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +24 -0
  668. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +24 -0
  669. package/dist/native/components/ShapeChart/ShapeChartBase.js +271 -0
  670. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -0
  671. package/dist/native/components/ShapeChart/charts.cjs +2 -0
  672. package/dist/native/components/ShapeChart/charts.cjs.map +1 -0
  673. package/dist/native/components/ShapeChart/charts.d.cts +38 -0
  674. package/dist/native/components/ShapeChart/charts.d.ts +38 -0
  675. package/dist/native/components/ShapeChart/charts.js +387 -0
  676. package/dist/native/components/ShapeChart/charts.js.map +1 -0
  677. package/dist/native/components/ShapeChart/draw.cjs +2 -0
  678. package/dist/native/components/ShapeChart/draw.cjs.map +1 -0
  679. package/dist/native/components/ShapeChart/draw.d.cts +4 -0
  680. package/dist/native/components/ShapeChart/draw.d.ts +4 -0
  681. package/dist/native/components/ShapeChart/draw.js +104 -0
  682. package/dist/native/components/ShapeChart/draw.js.map +1 -0
  683. package/dist/native/components/ShapeChart/geometry.cjs +2 -0
  684. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -0
  685. package/dist/native/components/ShapeChart/geometry.d.cts +71 -0
  686. package/dist/native/components/ShapeChart/geometry.d.ts +71 -0
  687. package/dist/native/components/ShapeChart/geometry.js +602 -0
  688. package/dist/native/components/ShapeChart/geometry.js.map +1 -0
  689. package/dist/native/components/ShapeChart/index.cjs +1 -0
  690. package/dist/native/components/ShapeChart/index.d.cts +2 -0
  691. package/dist/native/components/ShapeChart/index.d.ts +2 -0
  692. package/dist/native/components/ShapeChart/index.js +2 -0
  693. package/dist/native/components/ShapeChart/recorder.cjs +2 -0
  694. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -0
  695. package/dist/native/components/ShapeChart/recorder.d.cts +106 -0
  696. package/dist/native/components/ShapeChart/recorder.d.ts +106 -0
  697. package/dist/native/components/ShapeChart/recorder.js +574 -0
  698. package/dist/native/components/ShapeChart/recorder.js.map +1 -0
  699. package/dist/native/components/ShapeChart/types.d.cts +509 -0
  700. package/dist/native/components/ShapeChart/types.d.ts +509 -0
  701. package/dist/native/index.cjs +1 -1
  702. package/dist/native/index.d.cts +2 -0
  703. package/dist/native/index.d.ts +2 -0
  704. package/dist/native/index.js +14 -10
  705. package/dist/native/manifest.d.cts +6 -4
  706. package/dist/native/manifest.d.ts +6 -4
  707. package/dist/native/source/components/Chart/ChartBase.tsx +8 -1
  708. package/dist/native/source/components/Chart/charts.tsx +42 -6
  709. package/dist/native/source/components/Chart/index.ts +1 -0
  710. package/dist/native/source/components/Chart/scene.tsx +154 -84
  711. package/dist/native/source/components/Chart/types.ts +31 -1
  712. package/dist/native/source/components/Charts/charts.tsx +493 -0
  713. package/dist/native/source/components/Charts/index.ts +14 -0
  714. package/dist/native/source/components/Charts/types.ts +207 -0
  715. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +484 -0
  716. package/dist/native/source/components/ShapeChart/charts.tsx +605 -0
  717. package/dist/native/source/components/ShapeChart/draw.tsx +170 -0
  718. package/dist/native/source/components/ShapeChart/geometry.ts +1185 -0
  719. package/dist/native/source/components/ShapeChart/index.ts +15 -0
  720. package/dist/native/source/components/ShapeChart/recorder.ts +830 -0
  721. package/dist/native/source/components/ShapeChart/types.ts +564 -0
  722. package/dist/native/source/index.ts +2 -0
  723. package/dist/native/source/manifest.ts +30 -4
  724. package/dist/taro/charts.d.ts +209 -4
  725. package/dist/taro/index.d.ts +1 -0
  726. package/dist/taro/index.js +7517 -1856
  727. package/dist/taro/manifest.d.ts +1 -0
  728. package/dist/taro/shape-charts.d.ts +537 -0
  729. package/dist/uni/AreaChart.vue +68 -0
  730. package/dist/uni/AreaChart.vue.d.ts +120 -0
  731. package/dist/uni/Badge.vue.d.ts +1 -1
  732. package/dist/uni/BoxPlotChart.vue +66 -0
  733. package/dist/uni/BoxPlotChart.vue.d.ts +102 -0
  734. package/dist/uni/BubbleChart.vue +68 -0
  735. package/dist/uni/BubbleChart.vue.d.ts +106 -0
  736. package/dist/uni/BulletChart.vue +86 -0
  737. package/dist/uni/BulletChart.vue.d.ts +110 -0
  738. package/dist/uni/CalendarHeatmap.vue +92 -0
  739. package/dist/uni/CalendarHeatmap.vue.d.ts +129 -0
  740. package/dist/uni/CandlestickChart.vue +66 -0
  741. package/dist/uni/CandlestickChart.vue.d.ts +100 -0
  742. package/dist/uni/DonutChart.vue +72 -0
  743. package/dist/uni/DonutChart.vue.d.ts +114 -0
  744. package/dist/uni/FunnelChart.vue +67 -0
  745. package/dist/uni/FunnelChart.vue.d.ts +104 -0
  746. package/dist/uni/GanttChart.vue +67 -0
  747. package/dist/uni/GanttChart.vue.d.ts +123 -0
  748. package/dist/uni/GaugeChart.vue +77 -0
  749. package/dist/uni/GaugeChart.vue.d.ts +123 -0
  750. package/dist/uni/HeatmapChart.vue +66 -0
  751. package/dist/uni/HeatmapChart.vue.d.ts +114 -0
  752. package/dist/uni/HistogramChart.vue +66 -0
  753. package/dist/uni/HistogramChart.vue.d.ts +121 -0
  754. package/dist/uni/HorizontalBarChart.vue +68 -0
  755. package/dist/uni/HorizontalBarChart.vue.d.ts +127 -0
  756. package/dist/uni/Input.vue.d.ts +1 -1
  757. package/dist/uni/MixedChart.vue +68 -0
  758. package/dist/uni/MixedChart.vue.d.ts +106 -0
  759. package/dist/uni/NumberInput.vue.d.ts +1 -1
  760. package/dist/uni/PieChart.vue +72 -0
  761. package/dist/uni/PieChart.vue.d.ts +114 -0
  762. package/dist/uni/RadarChart.vue +67 -0
  763. package/dist/uni/RadarChart.vue.d.ts +110 -0
  764. package/dist/uni/RadialBarChart.vue +90 -0
  765. package/dist/uni/RadialBarChart.vue.d.ts +132 -0
  766. package/dist/uni/RangeAreaChart.vue +68 -0
  767. package/dist/uni/RangeAreaChart.vue.d.ts +102 -0
  768. package/dist/uni/ResponsiveGrid.vue.d.ts +1 -1
  769. package/dist/uni/SankeyChart.vue +88 -0
  770. package/dist/uni/SankeyChart.vue.d.ts +121 -0
  771. package/dist/uni/ShapeChart.vue +73 -0
  772. package/dist/uni/ShapeChart.vue.d.ts +54 -0
  773. package/dist/uni/Sparkline.vue +58 -0
  774. package/dist/uni/Sparkline.vue.d.ts +77 -0
  775. package/dist/uni/SunburstChart.vue +90 -0
  776. package/dist/uni/SunburstChart.vue.d.ts +114 -0
  777. package/dist/uni/Textarea.vue.d.ts +1 -1
  778. package/dist/uni/TimePicker.vue.d.ts +1 -1
  779. package/dist/uni/TreemapChart.vue +65 -0
  780. package/dist/uni/TreemapChart.vue.d.ts +100 -0
  781. package/dist/uni/WaterfallChart.vue +66 -0
  782. package/dist/uni/WaterfallChart.vue.d.ts +125 -0
  783. package/dist/uni/chart-types.d.ts +216 -2
  784. package/dist/uni/chart-types.js +174 -0
  785. package/dist/uni/charts-canvas.js +8 -3
  786. package/dist/uni/index.d.ts +26 -1
  787. package/dist/uni/index.js +26 -1
  788. package/dist/uni/manifest.d.ts +272 -0
  789. package/dist/uni/manifest.js +387 -0
  790. package/dist/uni/named-chart-options.d.ts +88 -0
  791. package/dist/uni/named-chart-options.js +156 -0
  792. package/dist/uni/shape-chart-canvas.d.ts +51 -0
  793. package/dist/uni/shape-chart-canvas.js +342 -0
  794. package/dist/uni/shape-chart-types.d.ts +381 -0
  795. package/dist/uni/shape-chart-types.js +261 -0
  796. package/dist/vue/components/Chart/AreaChart.vue.d.ts +124 -0
  797. package/dist/vue/components/Chart/AreaChart.vue.js +7 -0
  798. package/dist/vue/components/Chart/AreaChart.vue.js.map +1 -0
  799. package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js +49 -0
  800. package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  801. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +132 -0
  802. package/dist/vue/components/Chart/Bar3DChart.vue.js +7 -0
  803. package/dist/vue/components/Chart/Bar3DChart.vue.js.map +1 -0
  804. package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js +55 -0
  805. package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  806. package/dist/vue/components/Chart/BarChart.vue.d.ts +123 -0
  807. package/dist/vue/components/Chart/BarChart.vue.js +7 -0
  808. package/dist/vue/components/Chart/BarChart.vue.js.map +1 -0
  809. package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js +53 -0
  810. package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  811. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +112 -0
  812. package/dist/vue/components/Chart/BoxPlotChart.vue.js +7 -0
  813. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -0
  814. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +57 -0
  815. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  816. package/dist/vue/components/Chart/BubbleChart.vue.d.ts +106 -0
  817. package/dist/vue/components/Chart/BubbleChart.vue.js +7 -0
  818. package/dist/vue/components/Chart/BubbleChart.vue.js.map +1 -0
  819. package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js +52 -0
  820. package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  821. package/dist/vue/components/Chart/BulletChart.vue.d.ts +117 -0
  822. package/dist/vue/components/Chart/BulletChart.vue.js +7 -0
  823. package/dist/vue/components/Chart/BulletChart.vue.js.map +1 -0
  824. package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js +64 -0
  825. package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  826. package/dist/vue/components/Chart/CalendarHeatmap.vue.d.ts +144 -0
  827. package/dist/vue/components/Chart/CalendarHeatmap.vue.js +7 -0
  828. package/dist/vue/components/Chart/CalendarHeatmap.vue.js.map +1 -0
  829. package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js +77 -0
  830. package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
  831. package/dist/vue/components/Chart/CandlestickChart.vue.d.ts +94 -0
  832. package/dist/vue/components/Chart/CandlestickChart.vue.js +7 -0
  833. package/dist/vue/components/Chart/CandlestickChart.vue.js.map +1 -0
  834. package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js +44 -0
  835. package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  836. package/dist/vue/components/Chart/Chart.vue.d.ts +103 -0
  837. package/dist/vue/components/Chart/Chart.vue.js +7 -0
  838. package/dist/vue/components/Chart/Chart.vue.js.map +1 -0
  839. package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js +47 -0
  840. package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  841. package/dist/vue/components/Chart/DepthChart.vue.d.ts +139 -0
  842. package/dist/vue/components/Chart/DepthChart.vue.js +7 -0
  843. package/dist/vue/components/Chart/DepthChart.vue.js.map +1 -0
  844. package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js +42 -0
  845. package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  846. package/dist/vue/components/Chart/DonutChart.vue.d.ts +104 -0
  847. package/dist/vue/components/Chart/DonutChart.vue.js +7 -0
  848. package/dist/vue/components/Chart/DonutChart.vue.js.map +1 -0
  849. package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js +53 -0
  850. package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  851. package/dist/vue/components/Chart/FunnelChart.vue.d.ts +105 -0
  852. package/dist/vue/components/Chart/FunnelChart.vue.js +7 -0
  853. package/dist/vue/components/Chart/FunnelChart.vue.js.map +1 -0
  854. package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js +58 -0
  855. package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  856. package/dist/vue/components/Chart/GanttChart.vue.d.ts +132 -0
  857. package/dist/vue/components/Chart/GanttChart.vue.js +7 -0
  858. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -0
  859. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +98 -0
  860. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  861. package/dist/vue/components/Chart/GaugeChart.vue.d.ts +132 -0
  862. package/dist/vue/components/Chart/GaugeChart.vue.js +7 -0
  863. package/dist/vue/components/Chart/GaugeChart.vue.js.map +1 -0
  864. package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js +71 -0
  865. package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  866. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +125 -0
  867. package/dist/vue/components/Chart/HeatmapChart.vue.js +7 -0
  868. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -0
  869. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +65 -0
  870. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  871. package/dist/vue/components/Chart/HistogramChart.vue.d.ts +132 -0
  872. package/dist/vue/components/Chart/HistogramChart.vue.js +7 -0
  873. package/dist/vue/components/Chart/HistogramChart.vue.js.map +1 -0
  874. package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js +66 -0
  875. package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  876. package/dist/vue/components/Chart/HorizontalBarChart.vue.d.ts +121 -0
  877. package/dist/vue/components/Chart/HorizontalBarChart.vue.js +7 -0
  878. package/dist/vue/components/Chart/HorizontalBarChart.vue.js.map +1 -0
  879. package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js +55 -0
  880. package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  881. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +121 -0
  882. package/dist/vue/components/Chart/Line3DChart.vue.js +7 -0
  883. package/dist/vue/components/Chart/Line3DChart.vue.js.map +1 -0
  884. package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
  885. package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  886. package/dist/vue/components/Chart/LineChart.vue.d.ts +125 -0
  887. package/dist/vue/components/Chart/LineChart.vue.js +7 -0
  888. package/dist/vue/components/Chart/LineChart.vue.js.map +1 -0
  889. package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js +50 -0
  890. package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  891. package/dist/vue/components/Chart/MixedChart.vue.d.ts +103 -0
  892. package/dist/vue/components/Chart/MixedChart.vue.js +7 -0
  893. package/dist/vue/components/Chart/MixedChart.vue.js.map +1 -0
  894. package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js +47 -0
  895. package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  896. package/dist/vue/components/Chart/OrderBook.vue.d.ts +125 -0
  897. package/dist/vue/components/Chart/OrderBook.vue.js +7 -0
  898. package/dist/vue/components/Chart/OrderBook.vue.js.map +1 -0
  899. package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js +38 -0
  900. package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js.map +1 -0
  901. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +128 -0
  902. package/dist/vue/components/Chart/OrderBookHeatmap.vue.js +7 -0
  903. package/dist/vue/components/Chart/OrderBookHeatmap.vue.js.map +1 -0
  904. package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js +46 -0
  905. package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
  906. package/dist/vue/components/Chart/PieChart.vue.d.ts +104 -0
  907. package/dist/vue/components/Chart/PieChart.vue.js +7 -0
  908. package/dist/vue/components/Chart/PieChart.vue.js.map +1 -0
  909. package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js +53 -0
  910. package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  911. package/dist/vue/components/Chart/QuadrantChart.vue.d.ts +186 -0
  912. package/dist/vue/components/Chart/QuadrantChart.vue.js +7 -0
  913. package/dist/vue/components/Chart/QuadrantChart.vue.js.map +1 -0
  914. package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js +107 -0
  915. package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  916. package/dist/vue/components/Chart/RadarChart.vue.d.ts +111 -0
  917. package/dist/vue/components/Chart/RadarChart.vue.js +7 -0
  918. package/dist/vue/components/Chart/RadarChart.vue.js.map +1 -0
  919. package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js +61 -0
  920. package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  921. package/dist/vue/components/Chart/RadialBarChart.vue.d.ts +147 -0
  922. package/dist/vue/components/Chart/RadialBarChart.vue.js +7 -0
  923. package/dist/vue/components/Chart/RadialBarChart.vue.js.map +1 -0
  924. package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js +78 -0
  925. package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  926. package/dist/vue/components/Chart/RangeAreaChart.vue.d.ts +106 -0
  927. package/dist/vue/components/Chart/RangeAreaChart.vue.js +7 -0
  928. package/dist/vue/components/Chart/RangeAreaChart.vue.js.map +1 -0
  929. package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js +51 -0
  930. package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  931. package/dist/vue/components/Chart/SankeyChart.vue.d.ts +132 -0
  932. package/dist/vue/components/Chart/SankeyChart.vue.js +7 -0
  933. package/dist/vue/components/Chart/SankeyChart.vue.js.map +1 -0
  934. package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js +71 -0
  935. package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  936. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +121 -0
  937. package/dist/vue/components/Chart/Scatter3DChart.vue.js +7 -0
  938. package/dist/vue/components/Chart/Scatter3DChart.vue.js.map +1 -0
  939. package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
  940. package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  941. package/dist/vue/components/Chart/ScatterChart.vue.d.ts +94 -0
  942. package/dist/vue/components/Chart/ScatterChart.vue.js +7 -0
  943. package/dist/vue/components/Chart/ScatterChart.vue.js.map +1 -0
  944. package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js +44 -0
  945. package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  946. package/dist/vue/components/Chart/ShapeChart.vue.d.ts +39 -0
  947. package/dist/vue/components/Chart/ShapeChart.vue.js +7 -0
  948. package/dist/vue/components/Chart/ShapeChart.vue.js.map +1 -0
  949. package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js +43 -0
  950. package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  951. package/dist/vue/components/Chart/Sparkline.vue.d.ts +90 -0
  952. package/dist/vue/components/Chart/Sparkline.vue.js +7 -0
  953. package/dist/vue/components/Chart/Sparkline.vue.js.map +1 -0
  954. package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js +66 -0
  955. package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  956. package/dist/vue/components/Chart/SunburstChart.vue.d.ts +123 -0
  957. package/dist/vue/components/Chart/SunburstChart.vue.js +7 -0
  958. package/dist/vue/components/Chart/SunburstChart.vue.js.map +1 -0
  959. package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js +68 -0
  960. package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  961. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +143 -0
  962. package/dist/vue/components/Chart/Surface3DChart.vue.js +7 -0
  963. package/dist/vue/components/Chart/Surface3DChart.vue.js.map +1 -0
  964. package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js +60 -0
  965. package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  966. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +114 -0
  967. package/dist/vue/components/Chart/TimeAndSales.vue.js +7 -0
  968. package/dist/vue/components/Chart/TimeAndSales.vue.js.map +1 -0
  969. package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js +46 -0
  970. package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js.map +1 -0
  971. package/dist/vue/components/Chart/TradingChart.vue.d.ts +160 -0
  972. package/dist/vue/components/Chart/TradingChart.vue.js +7 -0
  973. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -0
  974. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +70 -0
  975. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  976. package/dist/vue/components/Chart/TreemapChart.vue.d.ts +97 -0
  977. package/dist/vue/components/Chart/TreemapChart.vue.js +7 -0
  978. package/dist/vue/components/Chart/TreemapChart.vue.js.map +1 -0
  979. package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js +54 -0
  980. package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  981. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +132 -0
  982. package/dist/vue/components/Chart/WaterfallChart.vue.js +7 -0
  983. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -0
  984. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +68 -0
  985. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  986. package/dist/vue/components/Chart/cartesian.d.ts +47 -0
  987. package/dist/vue/components/Chart/cartesian.js +56 -0
  988. package/dist/vue/components/Chart/cartesian.js.map +1 -0
  989. package/dist/vue/components/Chart/engine.d.ts +35 -0
  990. package/dist/vue/components/Chart/engine.js +35 -0
  991. package/dist/vue/components/Chart/engine.js.map +1 -0
  992. package/dist/vue/components/Chart/index.d.ts +41 -0
  993. package/dist/vue/components/Chart/index.js +40 -0
  994. package/dist/vue/components/Chart/orderbook.d.ts +359 -0
  995. package/dist/vue/components/Chart/orderbook.js +126 -0
  996. package/dist/vue/components/Chart/orderbook.js.map +1 -0
  997. package/dist/vue/components/Chart/props.d.ts +188 -0
  998. package/dist/vue/components/Chart/props.js +92 -0
  999. package/dist/vue/components/Chart/props.js.map +1 -0
  1000. package/dist/vue/components/Chart/shape.d.ts +41 -0
  1001. package/dist/vue/components/Chart/shape.js +42 -0
  1002. package/dist/vue/components/Chart/shape.js.map +1 -0
  1003. package/dist/vue/components/Chart/three-d.d.ts +106 -0
  1004. package/dist/vue/components/Chart/three-d.js +88 -0
  1005. package/dist/vue/components/Chart/three-d.js.map +1 -0
  1006. package/dist/vue/components/Chart/trading.d.ts +105 -0
  1007. package/dist/vue/components/Chart/trading.js +55 -0
  1008. package/dist/vue/components/Chart/trading.js.map +1 -0
  1009. package/dist/vue/components/Chart/types.d.ts +137 -0
  1010. package/dist/vue/global.d.ts +38 -0
  1011. package/dist/vue/groups/charts.d.ts +1 -0
  1012. package/dist/vue/groups/charts.js +87 -0
  1013. package/dist/vue/groups/charts.js.map +1 -0
  1014. package/dist/vue/index.d.ts +1 -0
  1015. package/dist/vue/index.js +63 -23
  1016. package/dist/vue/plugin.js +12 -10
  1017. package/dist/vue/plugin.js.map +1 -1
  1018. package/dist/weapp/area-chart/index.js +1 -0
  1019. package/dist/weapp/area-chart/index.json +1 -0
  1020. package/dist/weapp/area-chart/index.wxml +1 -0
  1021. package/dist/weapp/area-chart/index.wxss +1 -0
  1022. package/dist/weapp/box-plot-chart/index.js +1 -0
  1023. package/dist/weapp/box-plot-chart/index.json +1 -0
  1024. package/dist/weapp/box-plot-chart/index.wxml +1 -0
  1025. package/dist/weapp/box-plot-chart/index.wxss +1 -0
  1026. package/dist/weapp/bubble-chart/index.js +1 -0
  1027. package/dist/weapp/bubble-chart/index.json +1 -0
  1028. package/dist/weapp/bubble-chart/index.wxml +1 -0
  1029. package/dist/weapp/bubble-chart/index.wxss +1 -0
  1030. package/dist/weapp/bullet-chart/index.js +1 -0
  1031. package/dist/weapp/bullet-chart/index.json +1 -0
  1032. package/dist/weapp/bullet-chart/index.wxml +1 -0
  1033. package/dist/weapp/bullet-chart/index.wxss +1 -0
  1034. package/dist/weapp/calendar-heatmap/index.js +1 -0
  1035. package/dist/weapp/calendar-heatmap/index.json +1 -0
  1036. package/dist/weapp/calendar-heatmap/index.wxml +1 -0
  1037. package/dist/weapp/calendar-heatmap/index.wxss +1 -0
  1038. package/dist/weapp/candlestick-chart/index.js +1 -0
  1039. package/dist/weapp/candlestick-chart/index.json +1 -0
  1040. package/dist/weapp/candlestick-chart/index.wxml +1 -0
  1041. package/dist/weapp/candlestick-chart/index.wxss +1 -0
  1042. package/dist/weapp/charts/canvas.js +11436 -0
  1043. package/dist/weapp/charts/core.d.ts +2 -0
  1044. package/dist/weapp/charts/core.js +41 -0
  1045. package/dist/weapp/controls.js +1433 -4478
  1046. package/dist/weapp/donut-chart/index.js +1 -0
  1047. package/dist/weapp/donut-chart/index.json +1 -0
  1048. package/dist/weapp/donut-chart/index.wxml +1 -0
  1049. package/dist/weapp/donut-chart/index.wxss +1 -0
  1050. package/dist/weapp/funnel-chart/index.js +1 -0
  1051. package/dist/weapp/funnel-chart/index.json +1 -0
  1052. package/dist/weapp/funnel-chart/index.wxml +1 -0
  1053. package/dist/weapp/funnel-chart/index.wxss +1 -0
  1054. package/dist/weapp/gantt-chart/index.js +1 -0
  1055. package/dist/weapp/gantt-chart/index.json +1 -0
  1056. package/dist/weapp/gantt-chart/index.wxml +1 -0
  1057. package/dist/weapp/gantt-chart/index.wxss +1 -0
  1058. package/dist/weapp/gauge-chart/index.js +1 -0
  1059. package/dist/weapp/gauge-chart/index.json +1 -0
  1060. package/dist/weapp/gauge-chart/index.wxml +1 -0
  1061. package/dist/weapp/gauge-chart/index.wxss +1 -0
  1062. package/dist/weapp/heatmap-chart/index.js +1 -0
  1063. package/dist/weapp/heatmap-chart/index.json +1 -0
  1064. package/dist/weapp/heatmap-chart/index.wxml +1 -0
  1065. package/dist/weapp/heatmap-chart/index.wxss +1 -0
  1066. package/dist/weapp/histogram-chart/index.js +1 -0
  1067. package/dist/weapp/histogram-chart/index.json +1 -0
  1068. package/dist/weapp/histogram-chart/index.wxml +1 -0
  1069. package/dist/weapp/histogram-chart/index.wxss +1 -0
  1070. package/dist/weapp/horizontal-bar-chart/index.js +1 -0
  1071. package/dist/weapp/horizontal-bar-chart/index.json +1 -0
  1072. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -0
  1073. package/dist/weapp/horizontal-bar-chart/index.wxss +1 -0
  1074. package/dist/weapp/mixed-chart/index.js +1 -0
  1075. package/dist/weapp/mixed-chart/index.json +1 -0
  1076. package/dist/weapp/mixed-chart/index.wxml +1 -0
  1077. package/dist/weapp/mixed-chart/index.wxss +1 -0
  1078. package/dist/weapp/pie-chart/index.js +1 -0
  1079. package/dist/weapp/pie-chart/index.json +1 -0
  1080. package/dist/weapp/pie-chart/index.wxml +1 -0
  1081. package/dist/weapp/pie-chart/index.wxss +1 -0
  1082. package/dist/weapp/radar-chart/index.js +1 -0
  1083. package/dist/weapp/radar-chart/index.json +1 -0
  1084. package/dist/weapp/radar-chart/index.wxml +1 -0
  1085. package/dist/weapp/radar-chart/index.wxss +1 -0
  1086. package/dist/weapp/radial-bar-chart/index.js +1 -0
  1087. package/dist/weapp/radial-bar-chart/index.json +1 -0
  1088. package/dist/weapp/radial-bar-chart/index.wxml +1 -0
  1089. package/dist/weapp/radial-bar-chart/index.wxss +1 -0
  1090. package/dist/weapp/range-area-chart/index.js +1 -0
  1091. package/dist/weapp/range-area-chart/index.json +1 -0
  1092. package/dist/weapp/range-area-chart/index.wxml +1 -0
  1093. package/dist/weapp/range-area-chart/index.wxss +1 -0
  1094. package/dist/weapp/sankey-chart/index.js +1 -0
  1095. package/dist/weapp/sankey-chart/index.json +1 -0
  1096. package/dist/weapp/sankey-chart/index.wxml +1 -0
  1097. package/dist/weapp/sankey-chart/index.wxss +1 -0
  1098. package/dist/weapp/shape-chart/index.js +1 -0
  1099. package/dist/weapp/shape-chart/index.json +1 -0
  1100. package/dist/weapp/shape-chart/index.wxml +1 -0
  1101. package/dist/weapp/shape-chart/index.wxss +1 -0
  1102. package/dist/weapp/sparkline/index.js +1 -0
  1103. package/dist/weapp/sparkline/index.json +1 -0
  1104. package/dist/weapp/sparkline/index.wxml +1 -0
  1105. package/dist/weapp/sparkline/index.wxss +1 -0
  1106. package/dist/weapp/sunburst-chart/index.js +1 -0
  1107. package/dist/weapp/sunburst-chart/index.json +1 -0
  1108. package/dist/weapp/sunburst-chart/index.wxml +1 -0
  1109. package/dist/weapp/sunburst-chart/index.wxss +1 -0
  1110. package/dist/weapp/treemap-chart/index.js +1 -0
  1111. package/dist/weapp/treemap-chart/index.json +1 -0
  1112. package/dist/weapp/treemap-chart/index.wxml +1 -0
  1113. package/dist/weapp/treemap-chart/index.wxss +1 -0
  1114. package/dist/weapp/types.d.ts +466 -0
  1115. package/dist/weapp/waterfall-chart/index.js +1 -0
  1116. package/dist/weapp/waterfall-chart/index.json +1 -0
  1117. package/dist/weapp/waterfall-chart/index.wxml +1 -0
  1118. package/dist/weapp/waterfall-chart/index.wxss +1 -0
  1119. package/dist/web-components/components/chart/chart.d.ts +58 -0
  1120. package/dist/web-components/components/chart/chart.js +55 -0
  1121. package/dist/web-components/components/chart/chart.js.map +1 -0
  1122. package/dist/web-components/components/chart/charts.d.ts +252 -0
  1123. package/dist/web-components/components/chart/charts.js +201 -0
  1124. package/dist/web-components/components/chart/charts.js.map +1 -0
  1125. package/dist/web-components/components/chart/engine-element.d.ts +53 -0
  1126. package/dist/web-components/components/chart/engine-element.js +77 -0
  1127. package/dist/web-components/components/chart/engine-element.js.map +1 -0
  1128. package/dist/web-components/components/chart/extended.d.ts +224 -0
  1129. package/dist/web-components/components/chart/extended.js +183 -0
  1130. package/dist/web-components/components/chart/extended.js.map +1 -0
  1131. package/dist/web-components/components/chart/series.d.ts +7 -0
  1132. package/dist/web-components/components/chart/series.js +14 -0
  1133. package/dist/web-components/components/chart/series.js.map +1 -0
  1134. package/dist/web-components/components/chart/shape-chart.d.ts +199 -0
  1135. package/dist/web-components/components/chart/shape-chart.js +161 -0
  1136. package/dist/web-components/components/chart/shape-chart.js.map +1 -0
  1137. package/dist/web-components/components/chart/shapes-extended.d.ts +162 -0
  1138. package/dist/web-components/components/chart/shapes-extended.js +156 -0
  1139. package/dist/web-components/components/chart/shapes-extended.js.map +1 -0
  1140. package/dist/web-components/components/chart-3d/chart-3d.d.ts +111 -0
  1141. package/dist/web-components/components/chart-3d/chart-3d.js +97 -0
  1142. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -0
  1143. package/dist/web-components/components/order-book/order-book.d.ts +165 -0
  1144. package/dist/web-components/components/order-book/order-book.js +174 -0
  1145. package/dist/web-components/components/order-book/order-book.js.map +1 -0
  1146. package/dist/web-components/components/trading-chart/trading-chart.d.ts +96 -0
  1147. package/dist/web-components/components/trading-chart/trading-chart.js +96 -0
  1148. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -0
  1149. package/dist/web-components/elements/chart-3d.d.ts +2 -0
  1150. package/dist/web-components/elements/chart-3d.js +13 -0
  1151. package/dist/web-components/elements/chart-3d.js.map +1 -0
  1152. package/dist/web-components/elements/chart.d.ts +7 -0
  1153. package/dist/web-components/elements/chart.js +43 -0
  1154. package/dist/web-components/elements/chart.js.map +1 -0
  1155. package/dist/web-components/elements/order-book.d.ts +2 -0
  1156. package/dist/web-components/elements/order-book.js +13 -0
  1157. package/dist/web-components/elements/order-book.js.map +1 -0
  1158. package/dist/web-components/elements/trading-chart.d.ts +2 -0
  1159. package/dist/web-components/elements/trading-chart.js +8 -0
  1160. package/dist/web-components/elements/trading-chart.js.map +1 -0
  1161. package/dist/web-components/html-custom-data.json +1192 -29
  1162. package/dist/web-components/types/react.d.ts +435 -0
  1163. package/dist/web-components/types/solid.d.ts +321 -0
  1164. package/dist/web-components/types/svelte.d.ts +321 -0
  1165. package/dist/web-components/types/vue.d.ts +359 -0
  1166. package/package.json +113 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","names":["styleElement","assign","mid","r","copyView","v","createChart","doc","container","win","dom","createChartDom","cache","hidden","listeners","options","initialOptions","theme","readTheme","model","view","zoomed","origin","items","itemsDirty","version","annotations","scales","xTicks","yTicks","renderer","rendererToken","destroyed","frameId","hover","lastPlot","pointDrag","ghost","drag","markers","bands","cells","themeVersion","itemsSignatureKey","legendKey","shownMarks","shownTip","resolveReady","ready","resolve","emit","type","listener","event","interactionOf","interactionValue","interaction","value","o","tooltipOptions","invalidate","frame","rebuild","buildModel","zoom","clampRange","base","minSpan","sameRange","signature","itemsSignature","index","resolveAnnotations","renderLegend","updateAccessibility","ensureOrigin","far","legendOption","named","s","show","config","toggle","bottom","key","legendShape","focused","item","swatch","names","keyboard","sizeCanvas","w","width","dpr","h","height","canvas","transformFor","scale","range","offset","reverse","bg","fg","font","layout","layoutChart","text","rect","plotRect","drawBackground","drawForeground","collectPointLabels","plot","bw","bh","buildItems","xScale","xOffset","yScale","yOffset","hitAt","hitTest","px","py","p","draggableAt","it","setHover","changed","sameHover","next","renderHover","tooltipNode","custom","content","tooltipContent","fragment","header","row","el","pooled","pool","i","make","parent","sc","renderMarks","tip","stageW","stageH","left","top","markerCount","bandCount","cellCount","showsCrosshair","first","cx","mark","hoverMarks","createBand","createMarker","setViewInternal","notify","zoomAt","zoomRange","factor","localPoint","inPlot","x","y","dataAt","cy","moveGhost","color","size","series","onPointerMove","at","dx","dy","panRange","event2","onPointerDown","draggable","onPointerUp","moved","hit","onPointerLeave","onWheel","modifier","wheelFactor","onDoubleClick","resetZoom","moveFocus","current","step","lowerBound","count","current2","span","createScales","pointOf","leadItem","hoverItemOf","onKeyDown","center","onFocus","visible","onBlur","stage","resizeObserver","refreshTheme","themeColorsChanged","unwatchTheme","watchTheme","initRenderer","token","createRenderer","createDataCanvas","kind","exclude","previous","set"],"sources":["../../../../charts/src/engine/chart.ts"],"sourcesContent":["// createChart: mounts a chart in a container and keeps it in sync with its\n// options, its size, the theme and the user's interactions.\n\nimport type { AxisTicks } from \"./axis\";\nimport { lowerBound } from \"./data\";\nimport {\n createBand,\n createChartDom,\n createDataCanvas,\n createMarker,\n styleElement,\n swatch,\n} from \"./dom\";\nimport { buildItems, type Origin } from \"./items\";\nimport { createScales, type Scales } from \"./layout\";\nimport { buildModel, type ChartModel, type DataCache } from \"./model\";\nimport {\n drawBackground,\n drawForeground,\n font,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport { createRenderer } from \"./renderers/detect\";\nimport type { ChartRenderer, RenderItem } from \"./renderers/types\";\nimport {\n collectPointLabels,\n hitTest,\n hoverItemOf,\n hoverMarks,\n layoutChart,\n legendShape,\n pointOf,\n resolveAnnotations,\n sameHover,\n showsCrosshair,\n tooltipContent,\n} from \"./scene\";\nimport { itemsSignature } from \"./signature\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"./theme\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartInstance,\n ChartInteractionOptions,\n ChartOptions,\n ChartRendererKind,\n ChartTooltipOptions,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n wheelFactor,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\ninterface HoverState {\n event: ChartHoverEvent;\n /** Tooltip anchor in stage pixels */\n anchorX: number;\n anchorY: number;\n keyboard: boolean;\n}\n\nconst mid = (r: Range) => (r[0] + r[1]) / 2;\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\n/**\n * Creates a chart inside `container` (which must have a size). The data\n * layer uses WebGPU when available, then WebGL2, then Canvas2D.\n */\nexport const createChart = (\n container: HTMLElement,\n initialOptions: ChartOptions,\n): ChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChartDom(container);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartEventMap]?: Set<(event: ChartEventMap[K]) => void>;\n } = {};\n\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let origin: Origin = { x: 0, y: 0 };\n let items: RenderItem[] = [];\n let itemsDirty = true;\n let version = 0;\n let annotations: ResolvedAnnotation[] = [];\n let scales: Scales | null = null;\n let xTicks: AxisTicks | null = null;\n let yTicks: AxisTicks | null = null;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let destroyed = false;\n let frameId = 0;\n let hover: HoverState | null = null;\n let lastPlot = \"\";\n let pointDrag: {\n id: number;\n item: ChartHoverItem;\n x: number;\n y: number;\n moved: boolean;\n } | null = null;\n let ghost: HTMLDivElement | null = null;\n let drag: {\n id: number;\n x: number;\n y: number;\n view: ChartView;\n moved: boolean;\n } | null = null;\n const markers: HTMLDivElement[] = [];\n const bands: HTMLDivElement[] = [];\n const cells: HTMLDivElement[] = [];\n let themeVersion = 0;\n let itemsSignatureKey = \"\";\n let legendKey = \"\";\n /** What the hover layer shows: kept while the hovered points are the same */\n let shownMarks: {\n event: ChartHoverEvent;\n model: ChartModel;\n scales: Scales;\n } | null = null;\n let shownTip: {\n event: ChartHoverEvent;\n model: ChartModel;\n yTicks: AxisTicks | null;\n width: number;\n height: number;\n } | null = null;\n\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n const emit = <K extends keyof ChartEventMap>(\n type: K,\n event: ChartEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n let interactionOf: ChartOptions | null = null;\n let interactionValue: Required<ChartInteractionOptions> | null = null;\n /** Resolved `interaction` option (cached: read on every pointer move) */\n const interaction = (): Required<ChartInteractionOptions> | null => {\n if (interactionOf === options) return interactionValue;\n interactionOf = options;\n const value = options.interaction;\n if (value === false) return (interactionValue = null);\n const o = typeof value === \"object\" ? value : {};\n return (interactionValue = {\n zoom: o.zoom ?? true,\n wheel: o.wheel ?? \"modifier\",\n pan: o.pan ?? true,\n keyboard: o.keyboard ?? true,\n dragPoints: o.dragPoints ?? false,\n });\n };\n\n const tooltipOptions = (): ChartTooltipOptions | null =>\n options.tooltip === false\n ? null\n : typeof options.tooltip === \"object\"\n ? options.tooltip\n : {};\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(frame, 16) as unknown as number);\n };\n\n // ---------------------------------------------------------------- model\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, zoom, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n // Unchanged data and styles (e.g. a React re-render): keep the GPU\n // buffers and the hover state\n const signature = itemsSignature(\n model,\n themeVersion,\n (index) => options.series[index]?.stack,\n );\n if (signature !== itemsSignatureKey) {\n itemsSignatureKey = signature;\n origin = { x: mid(base.x), y: mid(base.y) };\n itemsDirty = true;\n if (hover && !hover.keyboard) hover = null;\n }\n annotations = resolveAnnotations(options.annotations, theme);\n renderLegend();\n updateAccessibility();\n invalidate();\n };\n\n /** float32 positions lose precision far from the origin: re-center when deeply zoomed */\n const ensureOrigin = () => {\n const far = (r: Range, o: number) =>\n Math.max(Math.abs(r[0] - o), Math.abs(r[1] - o)) > (r[1] - r[0]) * 2000;\n if (far(view.x, origin.x) || far(view.y, origin.y)) {\n origin = { x: mid(view.x), y: mid(view.y) };\n itemsDirty = true;\n }\n };\n\n // --------------------------------------------------------------- legend\n\n const renderLegend = () => {\n const legendOption = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = legendOption === undefined ? named > 1 : !!legendOption;\n const config = typeof legendOption === \"object\" ? legendOption : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n // rebuild the DOM only when what it shows changed\n let key = `${show}|${bottom}|${toggle}`;\n if (show) {\n for (const s of model.series)\n key += `\\n${s.id}\\u0001${s.name}\\u0001${s.colorCss}\\u0001${legendShape(s.type)}\\u0001${s.hidden}`;\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n for (const s of model.series) {\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (hidden.has(s.id)) hidden.delete(s.id);\n else hidden.add(s.id);\n rebuild();\n });\n }\n styleElement(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(doc, s.colorCss, legendShape(s.type)),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n }\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n const updateAccessibility = () => {\n const names = model.series.map((s) => s.name).join(\", \");\n dom.stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? (names ? `Chart: ${names}` : \"Chart\"),\n );\n const keyboard = interaction()?.keyboard;\n dom.stage.style.touchAction = interaction()?.dragPoints ? \"none\" : \"pan-y\";\n if (keyboard) dom.stage.tabIndex = 0;\n else dom.stage.removeAttribute(\"tabindex\");\n };\n\n // ---------------------------------------------------------------- frame\n\n const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const transformFor = (range: Range, o: number, reverse: boolean) => {\n const scale = 2 / (range[1] - range[0]);\n const offset = (o - range[0]) * scale - 1;\n return reverse ? [-scale, -offset] : [scale, offset];\n };\n\n function frame() {\n frameId = 0;\n if (destroyed) return;\n const width = dom.stage.clientWidth;\n const height = dom.stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const bg = dom.background.getContext(\"2d\");\n const fg = dom.foreground.getContext(\"2d\");\n\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.font = font(theme);\n }\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height,\n padding: options.padding,\n measure: bg\n ? (text) => bg.measureText(text).width\n : (text) => text.length * theme.fontSize * 0.6,\n });\n const { plot } = layout;\n xTicks = layout.xTicks;\n yTicks = layout.yTicks;\n scales = layout.scales;\n const rect = plotRect();\n if (rect && rect.join() !== lastPlot) {\n lastPlot = rect.join();\n emit(\"layout\", {\n x: rect[0],\n y: rect[1],\n width: rect[2],\n height: rect[3],\n });\n }\n\n if (bg) {\n drawBackground(bg, {\n width,\n height,\n scales,\n x: model.x,\n y: model.y,\n xTicks,\n yTicks,\n theme,\n annotations,\n });\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n drawForeground(fg, {\n width,\n height,\n scales,\n theme,\n annotations,\n pointLabels: collectPointLabels(model, view, scales, yTicks),\n });\n }\n\n if (renderer) {\n const canvas = renderer.canvas;\n styleElement(canvas, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${plot.width}px`,\n height: `${plot.height}px`,\n });\n const bw = Math.max(1, Math.round(plot.width * dpr));\n const bh = Math.max(1, Math.round(plot.height * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n ensureOrigin();\n if (itemsDirty) {\n version++;\n items = buildItems(model, origin, version);\n itemsDirty = false;\n }\n const [xScale, xOffset] = transformFor(view.x, origin.x, model.x.reverse);\n const [yScale, yOffset] = transformFor(view.y, origin.y, model.y.reverse);\n renderer.render(items, {\n transform: { xScale, xOffset, yScale, yOffset },\n width: bw,\n height: bh,\n dpr,\n });\n }\n renderHover();\n }\n\n // ------------------------------------------------------------ hit tests\n\n const hitAt = (px: number, py: number): ChartHoverEvent | null =>\n scales ? hitTest(model, scales, xTicks, px, py) : null;\n\n /** Plot area relative to the container: x, y, width, height */\n const plotRect = (): [number, number, number, number] | null => {\n const p = scales?.plot;\n if (!p) return null;\n return [\n p.x + dom.stage.offsetLeft,\n p.y + dom.stage.offsetTop,\n p.width,\n p.height,\n ];\n };\n\n /** A draggable point under the pointer (`interaction.dragPoints`) */\n const draggableAt = (px: number, py: number) => {\n if (!interaction()?.dragPoints) return null;\n const hit = hitAt(px, py);\n const item = hit?.items.find(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n return item ?? null;\n };\n\n // ---------------------------------------------------------------- hover\n\n const setHover = (next: HoverState | null) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n renderHover();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const tooltipNode = (event: ChartHoverEvent): Node | string | null => {\n const custom = tooltipOptions()?.render;\n if (custom) return custom(event);\n const content = tooltipContent(model, event, yTicks);\n const fragment = doc.createDocumentFragment();\n const header = doc.createElement(\"div\");\n styleElement(header, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n if (content.titleColor)\n header.appendChild(swatch(doc, content.titleColor, \"dot\"));\n header.appendChild(doc.createTextNode(content.title));\n fragment.append(header);\n for (const row of content.rows) {\n const el = doc.createElement(\"div\");\n styleElement(el, { display: \"flex\", alignItems: \"center\", gap: \"8px\" });\n if (row.color) el.appendChild(swatch(doc, row.color, \"dot\"));\n const n = doc.createElement(\"span\");\n styleElement(n, {\n flex: \"1 1 auto\",\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n n.textContent = row.name;\n const v = doc.createElement(\"span\");\n styleElement(v, {\n fontWeight: \"600\",\n fontVariantNumeric: \"tabular-nums\",\n marginLeft: \"12px\",\n });\n v.textContent = row.value;\n el.append(n, v);\n fragment.append(el);\n }\n return fragment;\n };\n\n const pooled = <T extends HTMLElement>(\n pool: T[],\n i: number,\n make: () => T,\n parent: HTMLElement = dom.hover,\n ) => {\n if (!pool[i]) {\n pool[i] = make();\n parent.appendChild(pool[i]);\n }\n pool[i].style.display = \"block\";\n return pool[i];\n };\n\n function renderHover() {\n const sc = scales;\n const marksShown =\n !!hover &&\n !!sc &&\n !!shownMarks &&\n shownMarks.scales === sc &&\n shownMarks.model === model &&\n sameHover(shownMarks.event, hover.event);\n // pointer moves over the same points: the markers stay where they are\n if (!marksShown) renderMarks(sc);\n\n const tip = dom.tooltip;\n if (!hover || !sc || !tooltipOptions() || drag?.moved || pointDrag?.moved) {\n tip.style.display = \"none\";\n return;\n }\n const custom = tooltipOptions()?.render;\n let w: number;\n let h: number;\n if (\n !custom &&\n shownTip &&\n shownTip.model === model &&\n shownTip.yTicks === yTicks &&\n sameHover(shownTip.event, hover.event) &&\n tip.style.display === \"block\"\n ) {\n // same content: only the position follows the pointer\n w = shownTip.width;\n h = shownTip.height;\n } else {\n shownTip = null;\n const content = tooltipNode(hover.event);\n if (content === null || content === \"\") {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") {\n tip.textContent = content;\n tip.style.whiteSpace = \"pre\";\n } else {\n tip.replaceChildren(content);\n tip.style.whiteSpace = \"nowrap\";\n }\n tip.style.display = \"block\";\n w = tip.offsetWidth;\n h = tip.offsetHeight;\n if (!custom)\n shownTip = { event: hover.event, model, yTicks, width: w, height: h };\n }\n const stageW = dom.stage.clientWidth;\n const stageH = dom.stage.clientHeight;\n let left = hover.anchorX + 16;\n if (left + w > stageW - 4) left = hover.anchorX - 16 - w;\n left = Math.max(4, Math.min(left, stageW - w - 4));\n const top = Math.max(4, Math.min(hover.anchorY - h / 2, stageH - h - 4));\n tip.style.transform = `translate(${Math.round(left)}px, ${Math.round(top)}px)`;\n }\n\n /** Crosshair, point markers, bar bands and heatmap cell outlines */\n function renderMarks(sc: Scales | null) {\n let markerCount = 0;\n let bandCount = 0;\n let cellCount = 0;\n shownMarks = null;\n dom.crosshair.style.display = \"none\";\n if (hover && sc) {\n shownMarks = { event: hover.event, model, scales: sc };\n const { plot } = sc;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n if (showsCrosshair(model, hover.event, options.crosshair)) {\n const first = hover.event.items[0];\n const cx = sc.xToPx(first.x);\n if (cx >= plot.x && cx <= plot.x + plot.width) {\n styleElement(dom.crosshair, {\n display: \"block\",\n left: `${Math.round(cx)}px`,\n top: `${plot.y}px`,\n height: `${plot.height}px`,\n });\n }\n }\n for (const mark of hoverMarks(model, sc, hover.event)) {\n if (mark.kind === \"band\" || mark.kind === \"cell\") {\n const el =\n mark.kind === \"band\"\n ? pooled(bands, bandCount++, () => createBand(doc), dom.underlay)\n : pooled(cells, cellCount++, () =>\n styleElement(createBand(doc), {\n background: \"transparent\",\n borderRadius: \"3px\",\n boxShadow:\n \"0 0 0 1.5px var(--surface-color, var(--background-color, #fff)), 0 0 0 3px color-mix(in srgb, var(--text-color, #1f2937) 55%, transparent)\",\n }),\n );\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n });\n continue;\n }\n const el = pooled(markers, markerCount++, () => createMarker(doc));\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.size}px`,\n height: `${mark.size}px`,\n background: mark.color,\n boxShadow: `0 0 0 4px ${mark.halo}`,\n });\n }\n }\n for (let i = markerCount; i < markers.length; i++)\n markers[i].style.display = \"none\";\n for (let i = bandCount; i < bands.length; i++)\n bands[i].style.display = \"none\";\n for (let i = cellCount; i < cells.length; i++)\n cells[i].style.display = \"none\";\n }\n\n // ---------------------------------------------------------- interaction\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n const it = interaction();\n dom.stage.style.cursor = zoomed && it?.pan ? \"grab\" : \"\";\n if (notify) emit(\"zoom\", copyView(view));\n invalidate();\n };\n\n const zoomAt = (px: number, py: number, factor: number) => {\n const sc = scales;\n if (!sc) return;\n const next = copyView(view);\n if (model.zoom.x) next.x = zoomRange(view.x, sc.pxToX(px), factor);\n if (model.zoom.y) next.y = zoomRange(view.y, sc.pxToY(py), factor);\n setViewInternal(next, true);\n };\n\n const localPoint = (event: { clientX: number; clientY: number }) => {\n const rect = dom.stage.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales;\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n return { x: sc.pxToX(cx), y: sc.pxToY(cy) };\n };\n\n const moveGhost = (x: number, y: number, color: string | null) => {\n if (color === null) {\n if (ghost) ghost.style.display = \"none\";\n return;\n }\n if (!ghost) {\n ghost = createMarker(doc);\n dom.hover.appendChild(ghost);\n }\n const s = model.series.find((series) => series.type === \"scatter\");\n const size = (s?.pointSize ?? 8) + 8;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n styleElement(ghost, {\n display: \"block\",\n left: `${x}px`,\n top: `${y}px`,\n width: `${size}px`,\n height: `${size}px`,\n background: color,\n });\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = localPoint(event);\n if (pointDrag && pointDrag.id === event.pointerId) {\n if (\n !pointDrag.moved &&\n Math.hypot(x - pointDrag.x, y - pointDrag.y) > 3\n ) {\n pointDrag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n if (pointDrag.moved) {\n const at = dataAt(x, y);\n if (at) {\n moveGhost(x, y, pointDrag.item.color);\n renderHover();\n emit(\"drag\", { item: pointDrag.item, x: at.x, y: at.y });\n }\n }\n return;\n }\n if (drag && drag.id === event.pointerId) {\n const dx = x - drag.x;\n const dy = y - drag.y;\n if (!drag.moved && Math.hypot(dx, dy) > 3) {\n const it = interaction();\n if (zoomed && it?.pan) {\n drag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n }\n if (drag.moved && scales) {\n const next = copyView(drag.view);\n if (model.zoom.x)\n next.x = panRange(\n drag.view.x,\n -dx * scales.xPerPx * (model.x.reverse ? -1 : 1),\n );\n if (model.zoom.y)\n next.y = panRange(\n drag.view.y,\n dy * scales.yPerPx * (model.y.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n return;\n }\n }\n const event2 = hitAt(x, y);\n setHover(\n event2\n ? { event: event2, anchorX: x, anchorY: y, keyboard: false }\n : null,\n );\n if (!drag && interaction()?.dragPoints) {\n dom.stage.style.cursor = draggableAt(x, y)\n ? \"grab\"\n : zoomed && interaction()?.pan\n ? \"grab\"\n : \"\";\n }\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const draggable = draggableAt(x, y);\n if (draggable) {\n pointDrag = { id: event.pointerId, item: draggable, x, y, moved: false };\n return;\n }\n drag = { id: event.pointerId, x, y, view: copyView(view), moved: false };\n };\n\n const onPointerUp = (event: PointerEvent) => {\n if (pointDrag && pointDrag.id === event.pointerId) {\n const { item, moved } = pointDrag;\n pointDrag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n moveGhost(0, 0, null);\n const { x, y } = localPoint(event);\n dom.stage.style.cursor = draggableAt(x, y) ? \"grab\" : \"\";\n if (moved) {\n const at = dataAt(x, y);\n if (at && event.type !== \"pointercancel\")\n emit(\"drop\", { item, x: at.x, y: at.y });\n renderHover();\n } else {\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n }\n return;\n }\n if (!drag || drag.id !== event.pointerId) return;\n const moved = drag.moved;\n drag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n dom.stage.style.cursor = zoomed && interaction()?.pan ? \"grab\" : \"\";\n if (!moved) {\n const { x, y } = localPoint(event);\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n else if (event.type !== \"pointercancel\" && inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at);\n }\n } else {\n renderHover();\n }\n };\n\n const onPointerLeave = () => {\n if (!drag?.moved && !pointDrag?.moved) setHover(null);\n };\n\n const onWheel = (event: WheelEvent) => {\n const it = interaction();\n if (!it || it.zoom === false || (!model.zoom.x && !model.zoom.y)) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const modifier = event.ctrlKey || event.metaKey;\n if (it.wheel === \"always\" || modifier) {\n event.preventDefault();\n zoomAt(\n x,\n y,\n wheelFactor(\n event.deltaY,\n event.deltaMode,\n event.ctrlKey && !event.metaKey,\n ),\n );\n } else if (\n zoomed &&\n model.zoom.x &&\n scales &&\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ) {\n event.preventDefault();\n const next = copyView(view);\n next.x = panRange(\n view.x,\n event.deltaX * scales.xPerPx * (model.x.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n }\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = localPoint(event);\n if (interaction() && zoomed && inPlot(x, y)) resetZoom();\n };\n\n /** Keyboard: moves along the first visible series (or the one in focus) */\n const moveFocus = (step: number) => {\n const sc = scales;\n if (!sc) return;\n const current = hover?.keyboard ? hover.event.items[0] : null;\n const series =\n (current && model.series[current.seriesIndex]) ??\n model.series.find((s) => !s.hidden && s.cols.count > 0);\n if (!series) return;\n const { x, y, count } = series.cols;\n let index: number;\n if (current) {\n index = current.index + step;\n } else {\n // first point inside the view\n index = series.cols.sorted ? lowerBound(x, count, view.x[0]) : 0;\n if (step < 0)\n index = series.cols.sorted\n ? lowerBound(x, count, view.x[1]) - 1\n : count - 1;\n }\n while (index >= 0 && index < count && !Number.isFinite(y[index]))\n index += step || 1;\n if (index < 0 || index >= count) return;\n // keep the point visible\n let current2 = sc;\n if (model.zoom.x && (x[index] < view.x[0] || x[index] > view.x[1])) {\n const span = view.x[1] - view.x[0];\n setViewInternal(\n { x: [x[index] - span / 2, x[index] + span / 2], y: view.y },\n true,\n );\n current2 = scales = createScales(\n sc.plot,\n view,\n model.x.reverse,\n model.y.reverse,\n );\n }\n const p = pointOf(series, index, current2);\n const leadItem = hoverItemOf(series, index);\n const others =\n model.tooltipMode === \"axis\" && series.type !== \"scatter\"\n ? (hitAt(p.px, p.py)?.items ?? []).filter(\n (it) => it.seriesIndex !== series.index,\n )\n : [];\n const event: ChartHoverEvent = {\n items: [leadItem, ...others],\n x: leadItem.x,\n xLabel: xTicks?.formatValue(leadItem.x) ?? String(leadItem.x),\n };\n setHover({ event, anchorX: p.px, anchorY: p.py, keyboard: true });\n const it = leadItem;\n dom.live.textContent = `${it.seriesName}: ${event.xLabel}, ${yTicks?.formatValue(it.y) ?? it.y}${it.label ? ` (${it.label})` : \"\"}`;\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!interaction()?.keyboard) return;\n const center = () => {\n const p = scales?.plot;\n return p ? [p.x + p.width / 2, p.y + p.height / 2] : [0, 0];\n };\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowLeft\":\n event.preventDefault();\n moveFocus((event.key === \"ArrowRight\") !== model.x.reverse ? 1 : -1);\n break;\n case \"+\":\n case \"=\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 0.8);\n break;\n }\n case \"-\":\n case \"_\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 1.25);\n break;\n }\n case \"0\":\n event.preventDefault();\n resetZoom();\n break;\n case \"Escape\":\n if (hover) {\n event.preventDefault();\n setHover(null);\n }\n break;\n default:\n break;\n }\n };\n\n const onFocus = () => {\n let visible: boolean;\n try {\n visible = dom.stage.matches(\":focus-visible\");\n } catch {\n visible = true;\n }\n if (visible)\n dom.stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n dom.stage.style.boxShadow = \"\";\n if (hover?.keyboard) setHover(null);\n };\n\n const stage = dom.stage;\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerUp);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(dom.stage);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n // the watcher fires on any class / style change of <html> / <body>:\n // keep the GPU buffers unless a color really changed\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n // ------------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => createDataCanvas(doc),\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n dom.stage.insertBefore(next.canvas, dom.foreground);\n itemsDirty = true;\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------------ api\n\n function resetZoom() {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n }\n\n rebuild();\n void initRenderer();\n\n const instance: ChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n invalidate();\n },\n resetZoom,\n getView: () => copyView(view),\n setView(next) {\n if (destroyed) return;\n setViewInternal({ x: next.x ?? view.x, y: next.y ?? view.y }, false);\n },\n getRenderer: () => renderer?.kind ?? null,\n getPlotRect() {\n const rect = plotRect();\n return rect\n ? { x: rect[0], y: rect[1], width: rect[2], height: rect[3] }\n : null;\n },\n toPixel(x, y) {\n if (!scales) return null;\n return {\n x: scales.xToPx(x) + dom.stage.offsetLeft,\n y: scales.yToPx(y) + dom.stage.offsetTop,\n };\n },\n fromPixel(x, y) {\n if (!scales) return null;\n return {\n x: scales.pxToX(x - dom.stage.offsetLeft),\n y: scales.pxToY(y - dom.stage.offsetTop),\n };\n },\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n resizeObserver?.disconnect();\n unwatchTheme();\n stage.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n dom.root.remove();\n for (const key of Object.keys(listeners)) {\n delete (listeners as Record<string, unknown>)[key];\n }\n },\n };\n return instance;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"chart.js","names":["styleElement","assign","mid","r","copyView","v","createChart","doc","container","win","dom","createChartDom","cache","hidden","listeners","options","initialOptions","theme","readTheme","model","view","zoomed","origin","items","itemsDirty","version","annotations","scales","xTicks","yTicks","y2Ticks","renderer","rendererToken","destroyed","frameId","hover","lastPlot","pointDrag","ghost","drag","markers","bands","cells","themeVersion","itemsSignatureKey","legendKey","shownMarks","shownTip","resolveReady","ready","resolve","emit","type","listener","event","interactionOf","interactionValue","interaction","value","o","tooltipOptions","invalidate","frame","rebuild","buildModel","zoom","clampRange","base","minSpan","sameRange","signature","itemsSignature","index","resolveAnnotations","renderLegend","updateAccessibility","ensureOrigin","far","legendOption","named","s","show","config","toggle","bottom","key","legendShape","focused","item","swatch","chartAriaLabel","keyboard","sizeCanvas","w","width","dpr","h","height","canvas","transformFor","scale","range","offset","reverse","bg","fg","font","layout","layoutChart","text","rect","plotRect","drawBackground","drawForeground","collectPointLabels","transposed","cw","plot","ch","bw","bh","buildItems","xScale","xOffset","yScale","yOffset","hitAt","hitTest","px","py","p","draggableAt","it","setHover","changed","sameHover","next","renderHover","tooltipNode","custom","content","tooltipContent","fragment","header","row","el","pooled","pool","i","make","parent","sc","renderMarks","tip","stageW","stageH","left","top","markerCount","bandCount","cellCount","guide","crosshairAt","line","mark","hoverMarks","createBand","createMarker","setViewInternal","notify","zoomAt","at","toData","zoomRange","factor","localPoint","inPlot","x","y","dataAt","cx","cy","moveGhost","color","size","series","onPointerMove","dx","dy","from","to","panRange","event2","onPointerDown","draggable","onPointerUp","moved","hit","onPointerLeave","onWheel","modifier","wheelFactor","onDoubleClick","resetZoom","moveFocus","current","step","lowerBound","count","current2","span","createScales","pointOf","leadItem","hoverItemOf","onKeyDown","center","onFocus","visible","onBlur","stage","resizeObserver","refreshTheme","themeColorsChanged","unwatchTheme","watchTheme","unwatchLocale","watchLocale","initRenderer","token","createRenderer","createDataCanvas","kind","exclude","previous","toScreen","set"],"sources":["../../../../charts/src/engine/chart.ts"],"sourcesContent":["// createChart: mounts a chart in a container and keeps it in sync with its\n// options, its size, the theme and the user's interactions.\n\nimport type { AxisTicks } from \"./axis\";\nimport { lowerBound } from \"./data\";\nimport {\n createBand,\n createChartDom,\n createDataCanvas,\n createMarker,\n styleElement,\n swatch,\n} from \"./dom\";\nimport { buildItems, type Origin } from \"./items\";\nimport { chartAriaLabel } from \"./labels\";\nimport { createScales, toData, toScreen, type Scales } from \"./layout\";\nimport { watchLocale } from \"./locale\";\nimport { buildModel, type ChartModel, type DataCache } from \"./model\";\nimport {\n drawBackground,\n drawForeground,\n font,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport { createRenderer } from \"./renderers/detect\";\nimport type { ChartRenderer, RenderItem } from \"./renderers/types\";\nimport {\n collectPointLabels,\n crosshairAt,\n hitTest,\n hoverItemOf,\n hoverMarks,\n layoutChart,\n legendShape,\n pointOf,\n resolveAnnotations,\n sameHover,\n tooltipContent,\n} from \"./scene\";\nimport { itemsSignature } from \"./signature\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"./theme\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartInstance,\n ChartInteractionOptions,\n ChartOptions,\n ChartRendererKind,\n ChartTooltipOptions,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n wheelFactor,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\ninterface HoverState {\n event: ChartHoverEvent;\n /** Tooltip anchor in stage pixels */\n anchorX: number;\n anchorY: number;\n keyboard: boolean;\n}\n\nconst mid = (r: Range) => (r[0] + r[1]) / 2;\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\n/**\n * Creates a chart inside `container` (which must have a size). The data\n * layer uses WebGPU when available, then WebGL2, then WebGL, then Canvas2D.\n */\nexport const createChart = (\n container: HTMLElement,\n initialOptions: ChartOptions,\n): ChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createChartDom(container);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartEventMap]?: Set<(event: ChartEventMap[K]) => void>;\n } = {};\n\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let origin: Origin = { x: 0, y: 0 };\n let items: RenderItem[] = [];\n let itemsDirty = true;\n let version = 0;\n let annotations: ResolvedAnnotation[] = [];\n let scales: Scales | null = null;\n let xTicks: AxisTicks | null = null;\n let yTicks: AxisTicks | null = null;\n let y2Ticks: AxisTicks | null = null;\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let destroyed = false;\n let frameId = 0;\n let hover: HoverState | null = null;\n let lastPlot = \"\";\n let pointDrag: {\n id: number;\n item: ChartHoverItem;\n x: number;\n y: number;\n moved: boolean;\n } | null = null;\n let ghost: HTMLDivElement | null = null;\n let drag: {\n id: number;\n x: number;\n y: number;\n view: ChartView;\n moved: boolean;\n } | null = null;\n const markers: HTMLDivElement[] = [];\n const bands: HTMLDivElement[] = [];\n const cells: HTMLDivElement[] = [];\n let themeVersion = 0;\n let itemsSignatureKey = \"\";\n let legendKey = \"\";\n /** What the hover layer shows: kept while the hovered points are the same */\n let shownMarks: {\n event: ChartHoverEvent;\n model: ChartModel;\n scales: Scales;\n } | null = null;\n let shownTip: {\n event: ChartHoverEvent;\n model: ChartModel;\n yTicks: AxisTicks | null;\n width: number;\n height: number;\n } | null = null;\n\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n\n const emit = <K extends keyof ChartEventMap>(\n type: K,\n event: ChartEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n let interactionOf: ChartOptions | null = null;\n let interactionValue: Required<ChartInteractionOptions> | null = null;\n /** Resolved `interaction` option (cached: read on every pointer move) */\n const interaction = (): Required<ChartInteractionOptions> | null => {\n if (interactionOf === options) return interactionValue;\n interactionOf = options;\n const value = options.interaction;\n if (value === false) return (interactionValue = null);\n const o = typeof value === \"object\" ? value : {};\n return (interactionValue = {\n zoom: o.zoom ?? true,\n wheel: o.wheel ?? \"modifier\",\n pan: o.pan ?? true,\n keyboard: o.keyboard ?? true,\n dragPoints: o.dragPoints ?? false,\n });\n };\n\n const tooltipOptions = (): ChartTooltipOptions | null =>\n options.tooltip === false\n ? null\n : typeof options.tooltip === \"object\"\n ? options.tooltip\n : {};\n\n const invalidate = () => {\n if (destroyed || frameId) return;\n frameId = win?.requestAnimationFrame\n ? win.requestAnimationFrame(frame)\n : (setTimeout(frame, 16) as unknown as number);\n };\n\n // ---------------------------------------------------------------- model\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, zoom, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n // Unchanged data and styles (e.g. a React re-render): keep the GPU\n // buffers and the hover state\n const signature = itemsSignature(\n model,\n themeVersion,\n (index) => options.series[index]?.stack,\n );\n if (signature !== itemsSignatureKey) {\n itemsSignatureKey = signature;\n origin = { x: mid(base.x), y: mid(base.y) };\n itemsDirty = true;\n if (hover && !hover.keyboard) hover = null;\n }\n annotations = resolveAnnotations(options.annotations, theme);\n renderLegend();\n updateAccessibility();\n invalidate();\n };\n\n /** float32 positions lose precision far from the origin: re-center when deeply zoomed */\n const ensureOrigin = () => {\n const far = (r: Range, o: number) =>\n Math.max(Math.abs(r[0] - o), Math.abs(r[1] - o)) > (r[1] - r[0]) * 2000;\n if (far(view.x, origin.x) || far(view.y, origin.y)) {\n origin = { x: mid(view.x), y: mid(view.y) };\n itemsDirty = true;\n }\n };\n\n // --------------------------------------------------------------- legend\n\n const renderLegend = () => {\n const legendOption = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = legendOption === undefined ? named > 1 : !!legendOption;\n const config = typeof legendOption === \"object\" ? legendOption : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n // rebuild the DOM only when what it shows changed\n let key = `${show}|${bottom}|${toggle}`;\n if (show) {\n for (const s of model.series)\n key += `\\n${s.id}\\u0001${s.name}\\u0001${s.colorCss}\\u0001${legendShape(s.type)}\\u0001${s.hidden}`;\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n for (const s of model.series) {\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!s.hidden));\n item.addEventListener(\"click\", () => {\n if (hidden.has(s.id)) hidden.delete(s.id);\n else hidden.add(s.id);\n rebuild();\n });\n }\n styleElement(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: s.hidden ? \"0.45\" : \"1\",\n textDecoration: s.hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(doc, s.colorCss, legendShape(s.type)),\n doc.createTextNode(s.name),\n );\n dom.legend.appendChild(item);\n }\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n const updateAccessibility = () => {\n dom.stage.setAttribute(\n \"aria-label\",\n options.ariaLabel ?? chartAriaLabel(model),\n );\n const keyboard = interaction()?.keyboard;\n dom.stage.style.touchAction = interaction()?.dragPoints ? \"none\" : \"pan-y\";\n if (keyboard) dom.stage.tabIndex = 0;\n else dom.stage.removeAttribute(\"tabindex\");\n };\n\n // ---------------------------------------------------------------- frame\n\n const sizeCanvas = (\n canvas: HTMLCanvasElement,\n width: number,\n height: number,\n dpr: number,\n ) => {\n const w = Math.max(1, Math.round(width * dpr));\n const h = Math.max(1, Math.round(height * dpr));\n if (canvas.width !== w) canvas.width = w;\n if (canvas.height !== h) canvas.height = h;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n };\n\n const transformFor = (range: Range, o: number, reverse: boolean) => {\n const scale = 2 / (range[1] - range[0]);\n const offset = (o - range[0]) * scale - 1;\n return reverse ? [-scale, -offset] : [scale, offset];\n };\n\n function frame() {\n frameId = 0;\n if (destroyed) return;\n const width = dom.stage.clientWidth;\n const height = dom.stage.clientHeight;\n if (width <= 0 || height <= 0) return;\n const dpr = win?.devicePixelRatio || 1;\n sizeCanvas(dom.background, width, height, dpr);\n sizeCanvas(dom.foreground, width, height, dpr);\n const bg = dom.background.getContext(\"2d\");\n const fg = dom.foreground.getContext(\"2d\");\n\n if (bg) {\n bg.setTransform(dpr, 0, 0, dpr, 0, 0);\n bg.font = font(theme);\n }\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height,\n padding: options.padding,\n measure: bg\n ? (text) => bg.measureText(text).width\n : (text) => text.length * theme.fontSize * 0.6,\n });\n const { plot } = layout;\n xTicks = layout.xTicks;\n yTicks = layout.yTicks;\n y2Ticks = layout.y2Ticks;\n scales = layout.scales;\n const rect = plotRect();\n if (rect && rect.join() !== lastPlot) {\n lastPlot = rect.join();\n emit(\"layout\", {\n x: rect[0],\n y: rect[1],\n width: rect[2],\n height: rect[3],\n });\n }\n\n if (bg) {\n drawBackground(bg, {\n width,\n height,\n scales,\n x: model.x,\n y: model.y,\n xTicks,\n yTicks,\n y2: model.y2,\n y2Ticks,\n theme,\n annotations,\n });\n }\n if (fg) {\n fg.setTransform(dpr, 0, 0, dpr, 0, 0);\n drawForeground(fg, {\n width,\n height,\n scales,\n theme,\n annotations,\n pointLabels: collectPointLabels(model, view, scales, yTicks),\n });\n }\n\n if (renderer) {\n const canvas = renderer.canvas;\n // horizontal charts: the data layer is drawn as a vertical chart on a\n // transposed canvas (its x axis runs down the plot, its y axis right)\n const transposed = model.horizontal;\n const cw = transposed ? plot.height : plot.width;\n const ch = transposed ? plot.width : plot.height;\n styleElement(canvas, {\n left: `${plot.x}px`,\n top: `${plot.y}px`,\n width: `${cw}px`,\n height: `${ch}px`,\n transformOrigin: transposed ? \"0 0\" : \"\",\n transform: transposed ? \"matrix(0, 1, 1, 0, 0, 0)\" : \"\",\n });\n const bw = Math.max(1, Math.round(cw * dpr));\n const bh = Math.max(1, Math.round(ch * dpr));\n if (canvas.width !== bw || canvas.height !== bh) renderer.resize(bw, bh);\n ensureOrigin();\n if (itemsDirty) {\n version++;\n items = buildItems(model, origin, version);\n itemsDirty = false;\n }\n const [xScale, xOffset] = transformFor(view.x, origin.x, model.x.reverse);\n const [yScale, yOffset] = transformFor(\n view.y,\n origin.y,\n // the top of the transposed canvas is the left of the plot\n transposed ? !model.y.reverse : model.y.reverse,\n );\n renderer.render(items, {\n transform: { xScale, xOffset, yScale, yOffset },\n width: bw,\n height: bh,\n dpr,\n });\n }\n renderHover();\n }\n\n // ------------------------------------------------------------ hit tests\n\n const hitAt = (px: number, py: number): ChartHoverEvent | null =>\n scales ? hitTest(model, scales, xTicks, px, py) : null;\n\n /** Plot area relative to the container: x, y, width, height */\n const plotRect = (): [number, number, number, number] | null => {\n const p = scales?.plot;\n if (!p) return null;\n return [\n p.x + dom.stage.offsetLeft,\n p.y + dom.stage.offsetTop,\n p.width,\n p.height,\n ];\n };\n\n /** A draggable point under the pointer (`interaction.dragPoints`) */\n const draggableAt = (px: number, py: number) => {\n if (!interaction()?.dragPoints) return null;\n const hit = hitAt(px, py);\n const item = hit?.items.find(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n return item ?? null;\n };\n\n // ---------------------------------------------------------------- hover\n\n const setHover = (next: HoverState | null) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n renderHover();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const tooltipNode = (event: ChartHoverEvent): Node | string | null => {\n const custom = tooltipOptions()?.render;\n if (custom) return custom(event);\n const content = tooltipContent(model, event, yTicks, y2Ticks);\n const fragment = doc.createDocumentFragment();\n const header = doc.createElement(\"div\");\n styleElement(header, {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: \"4px\",\n color: \"var(--text-color, #1f2937)\",\n });\n if (content.titleColor)\n header.appendChild(swatch(doc, content.titleColor, \"dot\"));\n header.appendChild(doc.createTextNode(content.title));\n fragment.append(header);\n for (const row of content.rows) {\n const el = doc.createElement(\"div\");\n styleElement(el, { display: \"flex\", alignItems: \"center\", gap: \"8px\" });\n if (row.color) el.appendChild(swatch(doc, row.color, \"dot\"));\n const n = doc.createElement(\"span\");\n styleElement(n, {\n flex: \"1 1 auto\",\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n n.textContent = row.name;\n const v = doc.createElement(\"span\");\n styleElement(v, {\n fontWeight: \"600\",\n fontVariantNumeric: \"tabular-nums\",\n marginLeft: \"12px\",\n });\n v.textContent = row.value;\n el.append(n, v);\n fragment.append(el);\n }\n return fragment;\n };\n\n const pooled = <T extends HTMLElement>(\n pool: T[],\n i: number,\n make: () => T,\n parent: HTMLElement = dom.hover,\n ) => {\n if (!pool[i]) {\n pool[i] = make();\n parent.appendChild(pool[i]);\n }\n pool[i].style.display = \"block\";\n return pool[i];\n };\n\n function renderHover() {\n const sc = scales;\n const marksShown =\n !!hover &&\n !!sc &&\n !!shownMarks &&\n shownMarks.scales === sc &&\n shownMarks.model === model &&\n sameHover(shownMarks.event, hover.event);\n // pointer moves over the same points: the markers stay where they are\n if (!marksShown) renderMarks(sc);\n\n const tip = dom.tooltip;\n if (!hover || !sc || !tooltipOptions() || drag?.moved || pointDrag?.moved) {\n tip.style.display = \"none\";\n return;\n }\n const custom = tooltipOptions()?.render;\n let w: number;\n let h: number;\n if (\n !custom &&\n shownTip &&\n shownTip.model === model &&\n shownTip.yTicks === yTicks &&\n sameHover(shownTip.event, hover.event) &&\n tip.style.display === \"block\"\n ) {\n // same content: only the position follows the pointer\n w = shownTip.width;\n h = shownTip.height;\n } else {\n shownTip = null;\n const content = tooltipNode(hover.event);\n if (content === null || content === \"\") {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") {\n tip.textContent = content;\n tip.style.whiteSpace = \"pre\";\n } else {\n tip.replaceChildren(content);\n tip.style.whiteSpace = \"nowrap\";\n }\n tip.style.display = \"block\";\n w = tip.offsetWidth;\n h = tip.offsetHeight;\n if (!custom)\n shownTip = { event: hover.event, model, yTicks, width: w, height: h };\n }\n const stageW = dom.stage.clientWidth;\n const stageH = dom.stage.clientHeight;\n let left = hover.anchorX + 16;\n if (left + w > stageW - 4) left = hover.anchorX - 16 - w;\n left = Math.max(4, Math.min(left, stageW - w - 4));\n const top = Math.max(4, Math.min(hover.anchorY - h / 2, stageH - h - 4));\n tip.style.transform = `translate(${Math.round(left)}px, ${Math.round(top)}px)`;\n }\n\n /** Crosshair, point markers, bar bands and heatmap cell outlines */\n function renderMarks(sc: Scales | null) {\n let markerCount = 0;\n let bandCount = 0;\n let cellCount = 0;\n shownMarks = null;\n dom.crosshair.style.display = \"none\";\n if (hover && sc) {\n shownMarks = { event: hover.event, model, scales: sc };\n const { plot } = sc;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n const guide = crosshairAt(model, sc, hover.event, options.crosshair);\n if (guide !== null) {\n const line =\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\";\n styleElement(\n dom.crosshair,\n sc.horizontal\n ? {\n display: \"block\",\n left: `${plot.x}px`,\n top: `${Math.round(guide)}px`,\n width: `${plot.width}px`,\n height: \"0\",\n borderLeft: \"0\",\n borderTop: line,\n }\n : {\n display: \"block\",\n left: `${Math.round(guide)}px`,\n top: `${plot.y}px`,\n width: \"0\",\n height: `${plot.height}px`,\n borderLeft: line,\n borderTop: \"0\",\n },\n );\n }\n for (const mark of hoverMarks(model, sc, hover.event)) {\n if (mark.kind === \"band\" || mark.kind === \"cell\") {\n const el =\n mark.kind === \"band\"\n ? pooled(bands, bandCount++, () => createBand(doc), dom.underlay)\n : pooled(cells, cellCount++, () =>\n styleElement(createBand(doc), {\n background: \"transparent\",\n borderRadius: \"3px\",\n boxShadow:\n \"0 0 0 1.5px var(--surface-color, var(--background-color, #fff)), 0 0 0 3px color-mix(in srgb, var(--text-color, #1f2937) 55%, transparent)\",\n }),\n );\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.width}px`,\n height: `${mark.height}px`,\n });\n continue;\n }\n const el = pooled(markers, markerCount++, () => createMarker(doc));\n styleElement(el, {\n left: `${mark.x}px`,\n top: `${mark.y}px`,\n width: `${mark.size}px`,\n height: `${mark.size}px`,\n background: mark.color,\n boxShadow: `0 0 0 4px ${mark.halo}`,\n });\n }\n }\n for (let i = markerCount; i < markers.length; i++)\n markers[i].style.display = \"none\";\n for (let i = bandCount; i < bands.length; i++)\n bands[i].style.display = \"none\";\n for (let i = cellCount; i < cells.length; i++)\n cells[i].style.display = \"none\";\n }\n\n // ---------------------------------------------------------- interaction\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n const it = interaction();\n dom.stage.style.cursor = zoomed && it?.pan ? \"grab\" : \"\";\n if (notify) emit(\"zoom\", copyView(view));\n invalidate();\n };\n\n const zoomAt = (px: number, py: number, factor: number) => {\n const sc = scales;\n if (!sc) return;\n const next = copyView(view);\n const at = toData(sc, px, py);\n if (model.zoom.x) next.x = zoomRange(view.x, at.x, factor);\n if (model.zoom.y) next.y = zoomRange(view.y, at.y, factor);\n setViewInternal(next, true);\n };\n\n const localPoint = (event: { clientX: number; clientY: number }) => {\n const rect = dom.stage.getBoundingClientRect();\n return { x: event.clientX - rect.left, y: event.clientY - rect.top };\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales;\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n return toData(sc, cx, cy);\n };\n\n const moveGhost = (x: number, y: number, color: string | null) => {\n if (color === null) {\n if (ghost) ghost.style.display = \"none\";\n return;\n }\n if (!ghost) {\n ghost = createMarker(doc);\n dom.hover.appendChild(ghost);\n }\n const s = model.series.find((series) => series.type === \"scatter\");\n const size = (s?.pointSize ?? 8) + 8;\n dom.hover.style.width = `${dom.stage.clientWidth}px`;\n dom.hover.style.height = `${dom.stage.clientHeight}px`;\n styleElement(ghost, {\n display: \"block\",\n left: `${x}px`,\n top: `${y}px`,\n width: `${size}px`,\n height: `${size}px`,\n background: color,\n });\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const { x, y } = localPoint(event);\n if (pointDrag && pointDrag.id === event.pointerId) {\n if (\n !pointDrag.moved &&\n Math.hypot(x - pointDrag.x, y - pointDrag.y) > 3\n ) {\n pointDrag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n if (pointDrag.moved) {\n const at = dataAt(x, y);\n if (at) {\n moveGhost(x, y, pointDrag.item.color);\n renderHover();\n emit(\"drag\", { item: pointDrag.item, x: at.x, y: at.y });\n }\n }\n return;\n }\n if (drag && drag.id === event.pointerId) {\n const dx = x - drag.x;\n const dy = y - drag.y;\n if (!drag.moved && Math.hypot(dx, dy) > 3) {\n const it = interaction();\n if (zoomed && it?.pan) {\n drag.moved = true;\n dom.stage.setPointerCapture?.(event.pointerId);\n dom.stage.style.cursor = \"grabbing\";\n }\n }\n if (drag.moved && scales) {\n const next = copyView(drag.view);\n const from = toData(scales, drag.x, drag.y);\n const to = toData(scales, x, y);\n if (model.zoom.x) next.x = panRange(drag.view.x, from.x - to.x);\n if (model.zoom.y) next.y = panRange(drag.view.y, from.y - to.y);\n setViewInternal(next, true);\n return;\n }\n }\n const event2 = hitAt(x, y);\n setHover(\n event2\n ? { event: event2, anchorX: x, anchorY: y, keyboard: false }\n : null,\n );\n if (!drag && interaction()?.dragPoints) {\n dom.stage.style.cursor = draggableAt(x, y)\n ? \"grab\"\n : zoomed && interaction()?.pan\n ? \"grab\"\n : \"\";\n }\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const draggable = draggableAt(x, y);\n if (draggable) {\n pointDrag = { id: event.pointerId, item: draggable, x, y, moved: false };\n return;\n }\n drag = { id: event.pointerId, x, y, view: copyView(view), moved: false };\n };\n\n const onPointerUp = (event: PointerEvent) => {\n if (pointDrag && pointDrag.id === event.pointerId) {\n const { item, moved } = pointDrag;\n pointDrag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n moveGhost(0, 0, null);\n const { x, y } = localPoint(event);\n dom.stage.style.cursor = draggableAt(x, y) ? \"grab\" : \"\";\n if (moved) {\n const at = dataAt(x, y);\n if (at && event.type !== \"pointercancel\")\n emit(\"drop\", { item, x: at.x, y: at.y });\n renderHover();\n } else {\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n }\n return;\n }\n if (!drag || drag.id !== event.pointerId) return;\n const moved = drag.moved;\n drag = null;\n if (dom.stage.hasPointerCapture?.(event.pointerId)) {\n dom.stage.releasePointerCapture(event.pointerId);\n }\n dom.stage.style.cursor = zoomed && interaction()?.pan ? \"grab\" : \"\";\n if (!moved) {\n const { x, y } = localPoint(event);\n const hit = hitAt(x, y);\n if (hit) emit(\"click\", hit);\n else if (event.type !== \"pointercancel\" && inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at);\n }\n } else {\n renderHover();\n }\n };\n\n const onPointerLeave = () => {\n if (!drag?.moved && !pointDrag?.moved) setHover(null);\n };\n\n const onWheel = (event: WheelEvent) => {\n const it = interaction();\n if (!it || it.zoom === false || (!model.zoom.x && !model.zoom.y)) return;\n const { x, y } = localPoint(event);\n if (!inPlot(x, y)) return;\n const modifier = event.ctrlKey || event.metaKey;\n if (it.wheel === \"always\" || modifier) {\n event.preventDefault();\n zoomAt(\n x,\n y,\n wheelFactor(\n event.deltaY,\n event.deltaMode,\n event.ctrlKey && !event.metaKey,\n ),\n );\n } else if (\n zoomed &&\n model.zoom.x &&\n scales &&\n !scales.horizontal &&\n Math.abs(event.deltaX) > Math.abs(event.deltaY)\n ) {\n event.preventDefault();\n const next = copyView(view);\n next.x = panRange(\n view.x,\n event.deltaX * scales.xPerPx * (model.x.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n }\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n const { x, y } = localPoint(event);\n if (interaction() && zoomed && inPlot(x, y)) resetZoom();\n };\n\n /** Keyboard: moves along the first visible series (or the one in focus) */\n const moveFocus = (step: number) => {\n const sc = scales;\n if (!sc) return;\n const current = hover?.keyboard ? hover.event.items[0] : null;\n const series =\n (current && model.series[current.seriesIndex]) ??\n model.series.find((s) => !s.hidden && s.cols.count > 0);\n if (!series) return;\n const { x, y, count } = series.cols;\n let index: number;\n if (current) {\n index = current.index + step;\n } else {\n // first point inside the view\n index = series.cols.sorted ? lowerBound(x, count, view.x[0]) : 0;\n if (step < 0)\n index = series.cols.sorted\n ? lowerBound(x, count, view.x[1]) - 1\n : count - 1;\n }\n while (index >= 0 && index < count && !Number.isFinite(y[index]))\n index += step || 1;\n if (index < 0 || index >= count) return;\n // keep the point visible\n let current2 = sc;\n if (model.zoom.x && (x[index] < view.x[0] || x[index] > view.x[1])) {\n const span = view.x[1] - view.x[0];\n setViewInternal(\n { x: [x[index] - span / 2, x[index] + span / 2], y: view.y },\n true,\n );\n current2 = scales = createScales(\n sc.plot,\n view,\n model.x.reverse,\n model.y.reverse,\n model.horizontal,\n );\n }\n const p = pointOf(series, index, current2);\n const leadItem = hoverItemOf(series, index);\n const others =\n model.tooltipMode === \"axis\" && series.type !== \"scatter\"\n ? (hitAt(p.px, p.py)?.items ?? []).filter(\n (it) => it.seriesIndex !== series.index,\n )\n : [];\n const event: ChartHoverEvent = {\n items: [leadItem, ...others],\n x: leadItem.x,\n xLabel: xTicks?.formatValue(leadItem.x) ?? String(leadItem.x),\n };\n setHover({ event, anchorX: p.px, anchorY: p.py, keyboard: true });\n const it = leadItem;\n dom.live.textContent = `${it.seriesName}: ${event.xLabel}, ${yTicks?.formatValue(it.y) ?? it.y}${it.label ? ` (${it.label})` : \"\"}`;\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!interaction()?.keyboard) return;\n const center = () => {\n const p = scales?.plot;\n return p ? [p.x + p.width / 2, p.y + p.height / 2] : [0, 0];\n };\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowLeft\":\n if (model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowRight\") !== model.x.reverse ? 1 : -1);\n break;\n case \"ArrowDown\":\n case \"ArrowUp\":\n // horizontal charts: the x axis runs down\n if (!model.horizontal) return;\n event.preventDefault();\n moveFocus((event.key === \"ArrowDown\") !== model.x.reverse ? 1 : -1);\n break;\n case \"+\":\n case \"=\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 0.8);\n break;\n }\n case \"-\":\n case \"_\": {\n if (!model.zoom.x && !model.zoom.y) return;\n event.preventDefault();\n const [cx, cy] = center();\n zoomAt(cx, cy, 1.25);\n break;\n }\n case \"0\":\n event.preventDefault();\n resetZoom();\n break;\n case \"Escape\":\n if (hover) {\n event.preventDefault();\n setHover(null);\n }\n break;\n default:\n break;\n }\n };\n\n const onFocus = () => {\n let visible: boolean;\n try {\n visible = dom.stage.matches(\":focus-visible\");\n } catch {\n visible = true;\n }\n if (visible)\n dom.stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n dom.stage.style.boxShadow = \"\";\n if (hover?.keyboard) setHover(null);\n };\n\n const stage = dom.stage;\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerUp);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(dom.stage);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n // the watcher fires on any class / style change of <html> / <body>:\n // keep the GPU buffers unless a color really changed\n if (themeColorsChanged(theme, next)) themeVersion++;\n theme = next;\n rebuild();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n // charts without `locale` follow the page language\n const unwatchLocale = watchLocale(() => {\n if (!destroyed && !options.locale) rebuild();\n });\n\n // ------------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => createDataCanvas(doc),\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n dom.stage.insertBefore(next.canvas, dom.foreground);\n itemsDirty = true;\n emit(\"renderer\", next.kind);\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ------------------------------------------------------------------ api\n\n function resetZoom() {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n }\n\n rebuild();\n void initRenderer();\n\n const instance: ChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n themeVersion++;\n }\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n rebuild();\n },\n resize() {\n invalidate();\n },\n resetZoom,\n getView: () => copyView(view),\n setView(next) {\n if (destroyed) return;\n setViewInternal({ x: next.x ?? view.x, y: next.y ?? view.y }, false);\n },\n getRenderer: () => renderer?.kind ?? null,\n getPlotRect() {\n const rect = plotRect();\n return rect\n ? { x: rect[0], y: rect[1], width: rect[2], height: rect[3] }\n : null;\n },\n toPixel(x, y) {\n if (!scales) return null;\n const p = toScreen(scales, x, y);\n return {\n x: p.x + dom.stage.offsetLeft,\n y: p.y + dom.stage.offsetTop,\n };\n },\n fromPixel(x, y) {\n if (!scales) return null;\n return toData(scales, x - dom.stage.offsetLeft, y - dom.stage.offsetTop);\n },\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n if (frameId) {\n if (win?.cancelAnimationFrame) win.cancelAnimationFrame(frameId);\n else clearTimeout(frameId);\n }\n resizeObserver?.disconnect();\n unwatchTheme();\n unwatchLocale();\n stage.removeEventListener(\"wheel\", onWheel);\n renderer?.destroy();\n renderer = null;\n dom.root.remove();\n for (const key of Object.keys(listeners)) {\n delete (listeners as Record<string, unknown>)[key];\n }\n },\n };\n return instance;\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e=e=>e<0?0:e>1?1:e,t=e=>{let t=e.slice(1);if(!/^[0-9a-f]+$/i.test(t))return null;let n=t.length===3||t.length===4;if(!n&&t.length!==6&&t.length!==8)return null;let r=e=>n?parseInt(t[e]+t[e],16)/255:parseInt(t.slice(e*2,e*2+2),16)/255,i=t.length===4||t.length===8;return[r(0),r(1),r(2),i?r(3):1]},n=(e,t)=>{let n=parseFloat(e);return Number.isNaN(n)?0:e.trim().endsWith(`%`)?n/100:n/t},r=e=>{let[t,n]=e.split(`/`),r=t.split(/[\s,]+/).filter(Boolean);return n!==void 0&&r.push(n.trim()),r},i=i=>{let a=i.trim().toLowerCase();if(a.startsWith(`#`))return t(a);if(a===`transparent`)return[0,0,0,0];let o=/^rgba?\((.*)\)$/.exec(a);if(o){let t=r(o[1]);return t.length<3?null:[e(n(t[0],255)),e(n(t[1],255)),e(n(t[2],255)),t[3]===void 0?1:e(n(t[3],1))]}if(o=/^color\(srgb\s+(.*)\)$/.exec(a),o){let t=r(o[1]);return t.length<3?null:[e(n(t[0],1)),e(n(t[1],1)),e(n(t[2],1)),t[3]===void 0?1:e(n(t[3],1))]}return null},a,o=e=>{if(typeof document>`u`)return null;if(a===void 0){let e=document.createElement(`canvas`);e.width=1,e.height=1,a=e.getContext(`2d`,{willReadFrequently:!0})}let t=a;if(!t)return null;t.clearRect(0,0,1,1),t.fillStyle=`#000`,t.fillStyle=e,t.fillRect(0,0,1,1);let[n,r,i,o]=t.getImageData(0,0,1,1).data;return o===0?[0,0,0,0]:[n/255,r/255,i/255,o/255]},s=(e,t,n=[.4,.4,.4,1])=>{let r=i(e);if(r)return r;let a=e;if(t&&typeof getComputedStyle==`function`){let n=t.ownerDocument.createElement(`span`);n.style.display=`none`,n.style.color=e,t.appendChild(n),a=getComputedStyle(n).color||e,n.remove();let r=i(a);if(r)return r}return o(a)??l(e,{},n)},c=e=>{let t=/^var\(\s*(--[\w-]+)\s*(?:,([\s\S]*))?\)$/.exec(e.trim());if(!t)return null;let n=t[2]?.trim();return{name:t[1],...n?{fallback:n}:{}}},l=(e,t={},n=[.4,.4,.4,1],r=0)=>{let a=i(e);if(a)return a;let o=r<8?c(e):null;if(o){let e=t[o.name];if(e)return l(e,t,n,r+1);if(o.fallback)return l(o.fallback,t,n,r+1)}return u[e.trim().toLowerCase()]??n},u={black:[0,0,0,1],white:[1,1,1,1],red:[1,0,0,1],green:[0,128/255,0,1],blue:[0,0,1,1],gray:[128/255,128/255,128/255,1],grey:[128/255,128/255,128/255,1],orange:[1,165/255,0,1]},d=e=>(t,n)=>s(t,e,n),f=[NaN,NaN,NaN,NaN],p=e=>{let t=new Map;return Object.assign((n,r)=>{let i=t.get(n);if(i===void 0){let r=e(n,f);i=r===f?null:r,t.set(n,i)}return i??r},{cache:t})},m=(e,t)=>e===t||!!e&&!!t&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3],h=(e,t=1)=>`rgba(${Math.round(e[0]*255)}, ${Math.round(e[1]*255)}, ${Math.round(e[2]*255)}, ${+(e[3]*t).toFixed(3)})`,g=t=>(Math.round(e(t[3])*255)<<24|Math.round(e(t[2])*255)<<16|Math.round(e(t[1])*255)<<8|Math.round(e(t[0])*255))>>>0,_=(e,t,n)=>[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n,e[3]+(t[3]-e[3])*n],v=e=>[(e&255)/255,(e>>>8&255)/255,(e>>>16&255)/255,(e>>>24&255)/255],y=(t,n)=>{if(t.length===1)return t[0];let r=e(n)*(t.length-1),i=Math.min(t.length-2,Math.floor(r));return _(t[i],t[i+1],r-i)};exports.domColorResolver=d,exports.memoizeColorResolver=p,exports.mix=_,exports.packColor=g,exports.parseColor=i,exports.rampColor=y,exports.resolveColor=s,exports.resolveStaticColor=l,exports.sameColor=m,exports.toCss=h,exports.unpackColor=v;
1
+ var e=e=>e<0?0:e>1?1:e,t=e=>{let t=e.slice(1);if(!/^[0-9a-f]+$/i.test(t))return null;let n=t.length===3||t.length===4;if(!n&&t.length!==6&&t.length!==8)return null;let r=e=>n?parseInt(t[e]+t[e],16)/255:parseInt(t.slice(e*2,e*2+2),16)/255,i=t.length===4||t.length===8;return[r(0),r(1),r(2),i?r(3):1]},n=(e,t)=>{let n=parseFloat(e);return Number.isNaN(n)?0:e.trim().endsWith(`%`)?n/100:n/t},r=e=>{let[t,n]=e.split(`/`),r=t.split(/[\s,]+/).filter(Boolean);return n!==void 0&&r.push(n.trim()),r},i=i=>{let a=i.trim().toLowerCase();if(a.startsWith(`#`))return t(a);if(a===`transparent`)return[0,0,0,0];let o=/^rgba?\((.*)\)$/.exec(a);if(o){let t=r(o[1]);return t.length<3?null:[e(n(t[0],255)),e(n(t[1],255)),e(n(t[2],255)),t[3]===void 0?1:e(n(t[3],1))]}if(o=/^color\(srgb\s+(.*)\)$/.exec(a),o){let t=r(o[1]);return t.length<3?null:[e(n(t[0],1)),e(n(t[1],1)),e(n(t[2],1)),t[3]===void 0?1:e(n(t[3],1))]}return null},a,o=e=>{if(typeof document>`u`)return null;if(a===void 0){let e=document.createElement(`canvas`);e.width=1,e.height=1,a=e.getContext(`2d`,{willReadFrequently:!0})}let t=a;if(!t)return null;t.clearRect(0,0,1,1),t.fillStyle=`#000`,t.fillStyle=e,t.fillRect(0,0,1,1);let[n,r,i,o]=t.getImageData(0,0,1,1).data;return o===0?[0,0,0,0]:[n/255,r/255,i/255,o/255]},s=(e,t,n=[.4,.4,.4,1])=>{let r=i(e);if(r)return r;let a=e;if(t&&typeof getComputedStyle==`function`){let n=t.ownerDocument.createElement(`span`);n.style.display=`none`,n.style.color=e,t.appendChild(n),a=getComputedStyle(n).color||e,n.remove();let r=i(a);if(r)return r}return o(a)??l(e,{},n)},c=e=>{let t=/^var\(\s*(--[\w-]+)\s*(?:,([\s\S]*))?\)$/.exec(e.trim());if(!t)return null;let n=t[2]?.trim();return{name:t[1],...n?{fallback:n}:{}}},l=(e,t={},n=[.4,.4,.4,1],r=0)=>{let a=i(e);if(a)return a;let o=r<8?c(e):null;if(o){let e=t[o.name];if(e)return l(e,t,n,r+1);if(o.fallback)return l(o.fallback,t,n,r+1)}return u[e.trim().toLowerCase()]??n},u={black:[0,0,0,1],white:[1,1,1,1],red:[1,0,0,1],green:[0,128/255,0,1],blue:[0,0,1,1],gray:[128/255,128/255,128/255,1],grey:[128/255,128/255,128/255,1],orange:[1,165/255,0,1]},d=e=>(t,n)=>s(t,e,n),f=[NaN,NaN,NaN,NaN],p=e=>{let t=new Map;return Object.assign((n,r)=>{let i=t.get(n);if(i===void 0){let r=e(n,f);i=r===f?null:r,t.set(n,i)}return i??r},{cache:t})},m=(e,t)=>e===t||!!e&&!!t&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3],h=(e,t=1)=>`rgba(${Math.round(e[0]*255)}, ${Math.round(e[1]*255)}, ${Math.round(e[2]*255)}, ${+(e[3]*t).toFixed(3)})`,g=t=>(Math.round(e(t[3])*255)<<24|Math.round(e(t[2])*255)<<16|Math.round(e(t[1])*255)<<8|Math.round(e(t[0])*255))>>>0,_=(e,t,n)=>[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n,e[3]+(t[3]-e[3])*n],v=e=>[(e&255)/255,(e>>>8&255)/255,(e>>>16&255)/255,(e>>>24&255)/255],y=(t,n)=>{if(t.length===1)return t[0];let r=e(n)*(t.length-1),i=Math.min(t.length-2,Math.floor(r));return _(t[i],t[i+1],r-i)},b=e=>.2126*e[0]+.7152*e[1]+.0722*e[2];exports.domColorResolver=d,exports.luminance=b,exports.memoizeColorResolver=p,exports.mix=_,exports.packColor=g,exports.parseColor=i,exports.rampColor=y,exports.resolveColor=s,exports.resolveStaticColor=l,exports.sameColor=m,exports.toCss=h,exports.unpackColor=v;
2
2
  //# sourceMappingURL=color.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.cjs","names":["clamp01","v","parseHex","h","hex","expand","channel","i","hasAlpha","parseComponent","part","scale","splitArgs","main","alpha","args","parts","parseColor","value","input","match","probeContext","parseWithCanvas","canvas","ctx","r","g","b","a","resolveColor","direct","computed","element","probe","parsed","resolveStaticColor","fallback","parseVar","ref","depth","defined","variables","NAMED","domColorResolver","UNRESOLVED","memoizeColorResolver","cache","hit","resolved","resolve","sameColor","toCss","c","packColor","mix","t","unpackColor","packed","rampColor","stops","p"],"sources":["../../../../charts/src/engine/color.ts"],"sourcesContent":["// Color parsing to straight (non-premultiplied) RGBA in 0-1.\n\nexport type Rgba = readonly [number, number, number, number];\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst parseHex = (hex: string): Rgba | null => {\n const h = hex.slice(1);\n if (!/^[0-9a-f]+$/i.test(h)) return null;\n const expand = h.length === 3 || h.length === 4;\n if (!expand && h.length !== 6 && h.length !== 8) return null;\n const channel = (i: number) =>\n expand\n ? parseInt(h[i] + h[i], 16) / 255\n : parseInt(h.slice(i * 2, i * 2 + 2), 16) / 255;\n const hasAlpha = h.length === 4 || h.length === 8;\n return [channel(0), channel(1), channel(2), hasAlpha ? channel(3) : 1];\n};\n\nconst parseComponent = (part: string, scale: number): number => {\n const v = parseFloat(part);\n if (Number.isNaN(v)) return 0;\n return part.trim().endsWith(\"%\") ? v / 100 : v / scale;\n};\n\n/** Splits `a b c / d` or `a, b, c, d` */\nconst splitArgs = (args: string): string[] => {\n const [main, alpha] = args.split(\"/\");\n const parts = main.split(/[\\s,]+/).filter(Boolean);\n if (alpha !== undefined) parts.push(alpha.trim());\n return parts;\n};\n\n/**\n * Parses the color syntaxes returned by `getComputedStyle` (`rgb()`,\n * `rgba()`, `color(srgb ...)`) and hex colors; `null` for anything else\n * (named colors, `oklch()`, ... are resolved by `resolveColor`).\n */\nexport const parseColor = (input: string): Rgba | null => {\n const value = input.trim().toLowerCase();\n if (value.startsWith(\"#\")) return parseHex(value);\n if (value === \"transparent\") return [0, 0, 0, 0];\n let match = /^rgba?\\((.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 255)),\n clamp01(parseComponent(parts[1], 255)),\n clamp01(parseComponent(parts[2], 255)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n match = /^color\\(srgb\\s+(.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 1)),\n clamp01(parseComponent(parts[1], 1)),\n clamp01(parseComponent(parts[2], 1)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n return null;\n};\n\nlet probeContext: CanvasRenderingContext2D | null | undefined;\n\n/** Lets the browser convert any CSS color (named, hsl, oklch, color-mix, ...) */\nconst parseWithCanvas = (value: string): Rgba | null => {\n if (typeof document === \"undefined\") return null;\n if (probeContext === undefined) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n probeContext = canvas.getContext(\"2d\", { willReadFrequently: true });\n }\n const ctx = probeContext;\n if (!ctx) return null;\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = \"#000\";\n ctx.fillStyle = value;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n if (a === 0) return [0, 0, 0, 0];\n // getImageData returns premultiplied-then-unpremultiplied values\n return [r / 255, g / 255, b / 255, a / 255];\n};\n\n/**\n * Resolves a CSS color in the context of `element`: `var(--x)`,\n * `color-mix()`, named colors, ... Falls back to `fallback` when the color\n * cannot be resolved (e.g. outside a browser).\n */\nexport const resolveColor = (\n value: string,\n element: Element | null,\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n let computed = value;\n if (element && typeof getComputedStyle === \"function\") {\n const probe = element.ownerDocument.createElement(\"span\");\n probe.style.display = \"none\";\n probe.style.color = value;\n element.appendChild(probe);\n computed = getComputedStyle(probe).color || value;\n probe.remove();\n const parsed = parseColor(computed);\n if (parsed) return parsed;\n }\n return parseWithCanvas(computed) ?? resolveStaticColor(value, {}, fallback);\n};\n\n/** Resolves a color to RGBA, falling back to `fallback` */\nexport type ColorResolver = (value: string, fallback: Rgba) => Rgba;\n\n/** Splits the arguments of `var(--name, fallback)` (the fallback may contain commas) */\nconst parseVar = (\n value: string,\n): { name: string; fallback?: string } | null => {\n const match = /^var\\(\\s*(--[\\w-]+)\\s*(?:,([\\s\\S]*))?\\)$/.exec(value.trim());\n if (!match) return null;\n const fallback = match[2]?.trim();\n return { name: match[1], ...(fallback ? { fallback } : {}) };\n};\n\n/**\n * Resolves a color without a DOM (mini-programs, React Native, workers):\n * hex, `rgb()`, `transparent` and `var(--name, fallback)` looked up in\n * `variables` (nested fallbacks included).\n */\nexport const resolveStaticColor = (\n value: string,\n variables: Readonly<Record<string, string>> = {},\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n depth = 0,\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n const ref = depth < 8 ? parseVar(value) : null;\n if (ref) {\n const defined = variables[ref.name];\n if (defined)\n return resolveStaticColor(defined, variables, fallback, depth + 1);\n if (ref.fallback)\n return resolveStaticColor(ref.fallback, variables, fallback, depth + 1);\n }\n return NAMED[value.trim().toLowerCase()] ?? fallback;\n};\n\nconst NAMED: Record<string, Rgba> = {\n black: [0, 0, 0, 1],\n white: [1, 1, 1, 1],\n red: [1, 0, 0, 1],\n green: [0, 128 / 255, 0, 1],\n blue: [0, 0, 1, 1],\n gray: [128 / 255, 128 / 255, 128 / 255, 1],\n grey: [128 / 255, 128 / 255, 128 / 255, 1],\n orange: [1, 165 / 255, 0, 1],\n};\n\n/** Resolver of the DOM: CSS variables and any CSS color syntax of `element` */\nexport const domColorResolver =\n (element: Element | null): ColorResolver =>\n (value, fallback) =>\n resolveColor(value, element, fallback);\n\n/** A resolver remembering its results; `null` marks unresolvable colors */\nexport interface MemoizedColorResolver extends ColorResolver {\n readonly cache: ReadonlyMap<string, Rgba | null>;\n}\n\nconst UNRESOLVED: Rgba = [NaN, NaN, NaN, NaN];\n\n/**\n * Caches the colors of `resolve` by input string (DOM probes force a style\n * recalculation). `resolve` must return `fallback` itself when it cannot\n * resolve a color, as the resolvers of this module do. Create a new one to\n * invalidate it (e.g. when the theme changes).\n */\nexport const memoizeColorResolver = (\n resolve: ColorResolver,\n): MemoizedColorResolver => {\n const cache = new Map<string, Rgba | null>();\n const memoized = (value: string, fallback: Rgba): Rgba => {\n let hit = cache.get(value);\n if (hit === undefined) {\n const resolved = resolve(value, UNRESOLVED);\n hit = resolved === UNRESOLVED ? null : resolved;\n cache.set(value, hit);\n }\n return hit ?? fallback;\n };\n return Object.assign(memoized, { cache });\n};\n\n/** Same channels (both `null` included) */\nexport const sameColor = (a: Rgba | null, b: Rgba | null): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3]);\n\nconst hex2 = (v: number) =>\n Math.round(clamp01(v) * 255)\n .toString(16)\n .padStart(2, \"0\");\n\n/** `rgba()` string usable by Canvas2D and the DOM */\nexport const toCss = (c: Rgba, alpha = 1): string =>\n `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${+(c[3] * alpha).toFixed(3)})`;\n\n/** `#rrggbb` (alpha dropped) */\nexport const toHex = (c: Rgba): string =>\n `#${hex2(c[0])}${hex2(c[1])}${hex2(c[2])}`;\n\n/** Packs a color as little-endian `unorm8x4` (r in the lowest byte) */\nexport const packColor = (c: Rgba): number =>\n ((Math.round(clamp01(c[3]) * 255) << 24) |\n (Math.round(clamp01(c[2]) * 255) << 16) |\n (Math.round(clamp01(c[1]) * 255) << 8) |\n Math.round(clamp01(c[0]) * 255)) >>>\n 0;\n\n/** Mixes two colors (t = 0 -> a, 1 -> b) */\nexport const mix = (a: Rgba, b: Rgba, t: number): Rgba => [\n a[0] + (b[0] - a[0]) * t,\n a[1] + (b[1] - a[1]) * t,\n a[2] + (b[2] - a[2]) * t,\n a[3] + (b[3] - a[3]) * t,\n];\n\n/** Inverse of `packColor` */\nexport const unpackColor = (packed: number): Rgba => [\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n];\n\n/** Color at `t` (0-1) of a ramp through `stops` */\nexport const rampColor = (stops: readonly Rgba[], t: number): Rgba => {\n if (stops.length === 1) return stops[0];\n const p = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(p));\n return mix(stops[i], stops[i + 1], p - i);\n};\n\n/** Relative luminance (sRGB approximation) */\nexport const luminance = (c: Rgba): number =>\n 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n"],"mappings":"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"}
1
+ {"version":3,"file":"color.cjs","names":["clamp01","v","parseHex","h","hex","expand","channel","i","hasAlpha","parseComponent","part","scale","splitArgs","main","alpha","args","parts","parseColor","value","input","match","probeContext","parseWithCanvas","canvas","ctx","r","g","b","a","resolveColor","direct","computed","element","probe","parsed","resolveStaticColor","fallback","parseVar","ref","depth","defined","variables","NAMED","domColorResolver","UNRESOLVED","memoizeColorResolver","cache","hit","resolved","resolve","sameColor","toCss","c","packColor","mix","t","unpackColor","packed","rampColor","stops","p","luminance"],"sources":["../../../../charts/src/engine/color.ts"],"sourcesContent":["// Color parsing to straight (non-premultiplied) RGBA in 0-1.\n\nexport type Rgba = readonly [number, number, number, number];\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst parseHex = (hex: string): Rgba | null => {\n const h = hex.slice(1);\n if (!/^[0-9a-f]+$/i.test(h)) return null;\n const expand = h.length === 3 || h.length === 4;\n if (!expand && h.length !== 6 && h.length !== 8) return null;\n const channel = (i: number) =>\n expand\n ? parseInt(h[i] + h[i], 16) / 255\n : parseInt(h.slice(i * 2, i * 2 + 2), 16) / 255;\n const hasAlpha = h.length === 4 || h.length === 8;\n return [channel(0), channel(1), channel(2), hasAlpha ? channel(3) : 1];\n};\n\nconst parseComponent = (part: string, scale: number): number => {\n const v = parseFloat(part);\n if (Number.isNaN(v)) return 0;\n return part.trim().endsWith(\"%\") ? v / 100 : v / scale;\n};\n\n/** Splits `a b c / d` or `a, b, c, d` */\nconst splitArgs = (args: string): string[] => {\n const [main, alpha] = args.split(\"/\");\n const parts = main.split(/[\\s,]+/).filter(Boolean);\n if (alpha !== undefined) parts.push(alpha.trim());\n return parts;\n};\n\n/**\n * Parses the color syntaxes returned by `getComputedStyle` (`rgb()`,\n * `rgba()`, `color(srgb ...)`) and hex colors; `null` for anything else\n * (named colors, `oklch()`, ... are resolved by `resolveColor`).\n */\nexport const parseColor = (input: string): Rgba | null => {\n const value = input.trim().toLowerCase();\n if (value.startsWith(\"#\")) return parseHex(value);\n if (value === \"transparent\") return [0, 0, 0, 0];\n let match = /^rgba?\\((.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 255)),\n clamp01(parseComponent(parts[1], 255)),\n clamp01(parseComponent(parts[2], 255)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n match = /^color\\(srgb\\s+(.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 1)),\n clamp01(parseComponent(parts[1], 1)),\n clamp01(parseComponent(parts[2], 1)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n return null;\n};\n\nlet probeContext: CanvasRenderingContext2D | null | undefined;\n\n/** Lets the browser convert any CSS color (named, hsl, oklch, color-mix, ...) */\nconst parseWithCanvas = (value: string): Rgba | null => {\n if (typeof document === \"undefined\") return null;\n if (probeContext === undefined) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n probeContext = canvas.getContext(\"2d\", { willReadFrequently: true });\n }\n const ctx = probeContext;\n if (!ctx) return null;\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = \"#000\";\n ctx.fillStyle = value;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n if (a === 0) return [0, 0, 0, 0];\n // getImageData returns premultiplied-then-unpremultiplied values\n return [r / 255, g / 255, b / 255, a / 255];\n};\n\n/**\n * Resolves a CSS color in the context of `element`: `var(--x)`,\n * `color-mix()`, named colors, ... Falls back to `fallback` when the color\n * cannot be resolved (e.g. outside a browser).\n */\nexport const resolveColor = (\n value: string,\n element: Element | null,\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n let computed = value;\n if (element && typeof getComputedStyle === \"function\") {\n const probe = element.ownerDocument.createElement(\"span\");\n probe.style.display = \"none\";\n probe.style.color = value;\n element.appendChild(probe);\n computed = getComputedStyle(probe).color || value;\n probe.remove();\n const parsed = parseColor(computed);\n if (parsed) return parsed;\n }\n return parseWithCanvas(computed) ?? resolveStaticColor(value, {}, fallback);\n};\n\n/** Resolves a color to RGBA, falling back to `fallback` */\nexport type ColorResolver = (value: string, fallback: Rgba) => Rgba;\n\n/** Splits the arguments of `var(--name, fallback)` (the fallback may contain commas) */\nconst parseVar = (\n value: string,\n): { name: string; fallback?: string } | null => {\n const match = /^var\\(\\s*(--[\\w-]+)\\s*(?:,([\\s\\S]*))?\\)$/.exec(value.trim());\n if (!match) return null;\n const fallback = match[2]?.trim();\n return { name: match[1], ...(fallback ? { fallback } : {}) };\n};\n\n/**\n * Resolves a color without a DOM (mini-programs, React Native, workers):\n * hex, `rgb()`, `transparent` and `var(--name, fallback)` looked up in\n * `variables` (nested fallbacks included).\n */\nexport const resolveStaticColor = (\n value: string,\n variables: Readonly<Record<string, string>> = {},\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n depth = 0,\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n const ref = depth < 8 ? parseVar(value) : null;\n if (ref) {\n const defined = variables[ref.name];\n if (defined)\n return resolveStaticColor(defined, variables, fallback, depth + 1);\n if (ref.fallback)\n return resolveStaticColor(ref.fallback, variables, fallback, depth + 1);\n }\n return NAMED[value.trim().toLowerCase()] ?? fallback;\n};\n\nconst NAMED: Record<string, Rgba> = {\n black: [0, 0, 0, 1],\n white: [1, 1, 1, 1],\n red: [1, 0, 0, 1],\n green: [0, 128 / 255, 0, 1],\n blue: [0, 0, 1, 1],\n gray: [128 / 255, 128 / 255, 128 / 255, 1],\n grey: [128 / 255, 128 / 255, 128 / 255, 1],\n orange: [1, 165 / 255, 0, 1],\n};\n\n/** Resolver of the DOM: CSS variables and any CSS color syntax of `element` */\nexport const domColorResolver =\n (element: Element | null): ColorResolver =>\n (value, fallback) =>\n resolveColor(value, element, fallback);\n\n/** A resolver remembering its results; `null` marks unresolvable colors */\nexport interface MemoizedColorResolver extends ColorResolver {\n readonly cache: ReadonlyMap<string, Rgba | null>;\n}\n\nconst UNRESOLVED: Rgba = [NaN, NaN, NaN, NaN];\n\n/**\n * Caches the colors of `resolve` by input string (DOM probes force a style\n * recalculation). `resolve` must return `fallback` itself when it cannot\n * resolve a color, as the resolvers of this module do. Create a new one to\n * invalidate it (e.g. when the theme changes).\n */\nexport const memoizeColorResolver = (\n resolve: ColorResolver,\n): MemoizedColorResolver => {\n const cache = new Map<string, Rgba | null>();\n const memoized = (value: string, fallback: Rgba): Rgba => {\n let hit = cache.get(value);\n if (hit === undefined) {\n const resolved = resolve(value, UNRESOLVED);\n hit = resolved === UNRESOLVED ? null : resolved;\n cache.set(value, hit);\n }\n return hit ?? fallback;\n };\n return Object.assign(memoized, { cache });\n};\n\n/** Same channels (both `null` included) */\nexport const sameColor = (a: Rgba | null, b: Rgba | null): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3]);\n\nconst hex2 = (v: number) =>\n Math.round(clamp01(v) * 255)\n .toString(16)\n .padStart(2, \"0\");\n\n/** `rgba()` string usable by Canvas2D and the DOM */\nexport const toCss = (c: Rgba, alpha = 1): string =>\n `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${+(c[3] * alpha).toFixed(3)})`;\n\n/** `#rrggbb` (alpha dropped) */\nexport const toHex = (c: Rgba): string =>\n `#${hex2(c[0])}${hex2(c[1])}${hex2(c[2])}`;\n\n/** Packs a color as little-endian `unorm8x4` (r in the lowest byte) */\nexport const packColor = (c: Rgba): number =>\n ((Math.round(clamp01(c[3]) * 255) << 24) |\n (Math.round(clamp01(c[2]) * 255) << 16) |\n (Math.round(clamp01(c[1]) * 255) << 8) |\n Math.round(clamp01(c[0]) * 255)) >>>\n 0;\n\n/** Mixes two colors (t = 0 -> a, 1 -> b) */\nexport const mix = (a: Rgba, b: Rgba, t: number): Rgba => [\n a[0] + (b[0] - a[0]) * t,\n a[1] + (b[1] - a[1]) * t,\n a[2] + (b[2] - a[2]) * t,\n a[3] + (b[3] - a[3]) * t,\n];\n\n/** Inverse of `packColor` */\nexport const unpackColor = (packed: number): Rgba => [\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n];\n\n/** Color at `t` (0-1) of a ramp through `stops` */\nexport const rampColor = (stops: readonly Rgba[], t: number): Rgba => {\n if (stops.length === 1) return stops[0];\n const p = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(p));\n return mix(stops[i], stops[i + 1], p - i);\n};\n\n/** Relative luminance (sRGB approximation) */\nexport const luminance = (c: Rgba): number =>\n 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n"],"mappings":"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"}
@@ -184,8 +184,8 @@ var e = (e) => e < 0 ? 0 : e > 1 ? 1 : e, t = (e) => {
184
184
  if (t.length === 1) return t[0];
185
185
  let r = e(n) * (t.length - 1), i = Math.min(t.length - 2, Math.floor(r));
186
186
  return _(t[i], t[i + 1], r - i);
187
- };
187
+ }, b = (e) => .2126 * e[0] + .7152 * e[1] + .0722 * e[2];
188
188
  //#endregion
189
- export { d as domColorResolver, p as memoizeColorResolver, _ as mix, g as packColor, i as parseColor, y as rampColor, s as resolveColor, l as resolveStaticColor, m as sameColor, h as toCss, v as unpackColor };
189
+ export { d as domColorResolver, b as luminance, p as memoizeColorResolver, _ as mix, g as packColor, i as parseColor, y as rampColor, s as resolveColor, l as resolveStaticColor, m as sameColor, h as toCss, v as unpackColor };
190
190
 
191
191
  //# sourceMappingURL=color.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","names":["clamp01","v","parseHex","h","hex","expand","channel","i","hasAlpha","parseComponent","part","scale","splitArgs","main","alpha","args","parts","parseColor","value","input","match","probeContext","parseWithCanvas","canvas","ctx","r","g","b","a","resolveColor","direct","computed","element","probe","parsed","resolveStaticColor","fallback","parseVar","ref","depth","defined","variables","NAMED","domColorResolver","UNRESOLVED","memoizeColorResolver","cache","hit","resolved","resolve","sameColor","toCss","c","packColor","mix","t","unpackColor","packed","rampColor","stops","p"],"sources":["../../../../charts/src/engine/color.ts"],"sourcesContent":["// Color parsing to straight (non-premultiplied) RGBA in 0-1.\n\nexport type Rgba = readonly [number, number, number, number];\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst parseHex = (hex: string): Rgba | null => {\n const h = hex.slice(1);\n if (!/^[0-9a-f]+$/i.test(h)) return null;\n const expand = h.length === 3 || h.length === 4;\n if (!expand && h.length !== 6 && h.length !== 8) return null;\n const channel = (i: number) =>\n expand\n ? parseInt(h[i] + h[i], 16) / 255\n : parseInt(h.slice(i * 2, i * 2 + 2), 16) / 255;\n const hasAlpha = h.length === 4 || h.length === 8;\n return [channel(0), channel(1), channel(2), hasAlpha ? channel(3) : 1];\n};\n\nconst parseComponent = (part: string, scale: number): number => {\n const v = parseFloat(part);\n if (Number.isNaN(v)) return 0;\n return part.trim().endsWith(\"%\") ? v / 100 : v / scale;\n};\n\n/** Splits `a b c / d` or `a, b, c, d` */\nconst splitArgs = (args: string): string[] => {\n const [main, alpha] = args.split(\"/\");\n const parts = main.split(/[\\s,]+/).filter(Boolean);\n if (alpha !== undefined) parts.push(alpha.trim());\n return parts;\n};\n\n/**\n * Parses the color syntaxes returned by `getComputedStyle` (`rgb()`,\n * `rgba()`, `color(srgb ...)`) and hex colors; `null` for anything else\n * (named colors, `oklch()`, ... are resolved by `resolveColor`).\n */\nexport const parseColor = (input: string): Rgba | null => {\n const value = input.trim().toLowerCase();\n if (value.startsWith(\"#\")) return parseHex(value);\n if (value === \"transparent\") return [0, 0, 0, 0];\n let match = /^rgba?\\((.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 255)),\n clamp01(parseComponent(parts[1], 255)),\n clamp01(parseComponent(parts[2], 255)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n match = /^color\\(srgb\\s+(.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 1)),\n clamp01(parseComponent(parts[1], 1)),\n clamp01(parseComponent(parts[2], 1)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n return null;\n};\n\nlet probeContext: CanvasRenderingContext2D | null | undefined;\n\n/** Lets the browser convert any CSS color (named, hsl, oklch, color-mix, ...) */\nconst parseWithCanvas = (value: string): Rgba | null => {\n if (typeof document === \"undefined\") return null;\n if (probeContext === undefined) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n probeContext = canvas.getContext(\"2d\", { willReadFrequently: true });\n }\n const ctx = probeContext;\n if (!ctx) return null;\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = \"#000\";\n ctx.fillStyle = value;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n if (a === 0) return [0, 0, 0, 0];\n // getImageData returns premultiplied-then-unpremultiplied values\n return [r / 255, g / 255, b / 255, a / 255];\n};\n\n/**\n * Resolves a CSS color in the context of `element`: `var(--x)`,\n * `color-mix()`, named colors, ... Falls back to `fallback` when the color\n * cannot be resolved (e.g. outside a browser).\n */\nexport const resolveColor = (\n value: string,\n element: Element | null,\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n let computed = value;\n if (element && typeof getComputedStyle === \"function\") {\n const probe = element.ownerDocument.createElement(\"span\");\n probe.style.display = \"none\";\n probe.style.color = value;\n element.appendChild(probe);\n computed = getComputedStyle(probe).color || value;\n probe.remove();\n const parsed = parseColor(computed);\n if (parsed) return parsed;\n }\n return parseWithCanvas(computed) ?? resolveStaticColor(value, {}, fallback);\n};\n\n/** Resolves a color to RGBA, falling back to `fallback` */\nexport type ColorResolver = (value: string, fallback: Rgba) => Rgba;\n\n/** Splits the arguments of `var(--name, fallback)` (the fallback may contain commas) */\nconst parseVar = (\n value: string,\n): { name: string; fallback?: string } | null => {\n const match = /^var\\(\\s*(--[\\w-]+)\\s*(?:,([\\s\\S]*))?\\)$/.exec(value.trim());\n if (!match) return null;\n const fallback = match[2]?.trim();\n return { name: match[1], ...(fallback ? { fallback } : {}) };\n};\n\n/**\n * Resolves a color without a DOM (mini-programs, React Native, workers):\n * hex, `rgb()`, `transparent` and `var(--name, fallback)` looked up in\n * `variables` (nested fallbacks included).\n */\nexport const resolveStaticColor = (\n value: string,\n variables: Readonly<Record<string, string>> = {},\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n depth = 0,\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n const ref = depth < 8 ? parseVar(value) : null;\n if (ref) {\n const defined = variables[ref.name];\n if (defined)\n return resolveStaticColor(defined, variables, fallback, depth + 1);\n if (ref.fallback)\n return resolveStaticColor(ref.fallback, variables, fallback, depth + 1);\n }\n return NAMED[value.trim().toLowerCase()] ?? fallback;\n};\n\nconst NAMED: Record<string, Rgba> = {\n black: [0, 0, 0, 1],\n white: [1, 1, 1, 1],\n red: [1, 0, 0, 1],\n green: [0, 128 / 255, 0, 1],\n blue: [0, 0, 1, 1],\n gray: [128 / 255, 128 / 255, 128 / 255, 1],\n grey: [128 / 255, 128 / 255, 128 / 255, 1],\n orange: [1, 165 / 255, 0, 1],\n};\n\n/** Resolver of the DOM: CSS variables and any CSS color syntax of `element` */\nexport const domColorResolver =\n (element: Element | null): ColorResolver =>\n (value, fallback) =>\n resolveColor(value, element, fallback);\n\n/** A resolver remembering its results; `null` marks unresolvable colors */\nexport interface MemoizedColorResolver extends ColorResolver {\n readonly cache: ReadonlyMap<string, Rgba | null>;\n}\n\nconst UNRESOLVED: Rgba = [NaN, NaN, NaN, NaN];\n\n/**\n * Caches the colors of `resolve` by input string (DOM probes force a style\n * recalculation). `resolve` must return `fallback` itself when it cannot\n * resolve a color, as the resolvers of this module do. Create a new one to\n * invalidate it (e.g. when the theme changes).\n */\nexport const memoizeColorResolver = (\n resolve: ColorResolver,\n): MemoizedColorResolver => {\n const cache = new Map<string, Rgba | null>();\n const memoized = (value: string, fallback: Rgba): Rgba => {\n let hit = cache.get(value);\n if (hit === undefined) {\n const resolved = resolve(value, UNRESOLVED);\n hit = resolved === UNRESOLVED ? null : resolved;\n cache.set(value, hit);\n }\n return hit ?? fallback;\n };\n return Object.assign(memoized, { cache });\n};\n\n/** Same channels (both `null` included) */\nexport const sameColor = (a: Rgba | null, b: Rgba | null): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3]);\n\nconst hex2 = (v: number) =>\n Math.round(clamp01(v) * 255)\n .toString(16)\n .padStart(2, \"0\");\n\n/** `rgba()` string usable by Canvas2D and the DOM */\nexport const toCss = (c: Rgba, alpha = 1): string =>\n `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${+(c[3] * alpha).toFixed(3)})`;\n\n/** `#rrggbb` (alpha dropped) */\nexport const toHex = (c: Rgba): string =>\n `#${hex2(c[0])}${hex2(c[1])}${hex2(c[2])}`;\n\n/** Packs a color as little-endian `unorm8x4` (r in the lowest byte) */\nexport const packColor = (c: Rgba): number =>\n ((Math.round(clamp01(c[3]) * 255) << 24) |\n (Math.round(clamp01(c[2]) * 255) << 16) |\n (Math.round(clamp01(c[1]) * 255) << 8) |\n Math.round(clamp01(c[0]) * 255)) >>>\n 0;\n\n/** Mixes two colors (t = 0 -> a, 1 -> b) */\nexport const mix = (a: Rgba, b: Rgba, t: number): Rgba => [\n a[0] + (b[0] - a[0]) * t,\n a[1] + (b[1] - a[1]) * t,\n a[2] + (b[2] - a[2]) * t,\n a[3] + (b[3] - a[3]) * t,\n];\n\n/** Inverse of `packColor` */\nexport const unpackColor = (packed: number): Rgba => [\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n];\n\n/** Color at `t` (0-1) of a ramp through `stops` */\nexport const rampColor = (stops: readonly Rgba[], t: number): Rgba => {\n if (stops.length === 1) return stops[0];\n const p = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(p));\n return mix(stops[i], stops[i + 1], p - i);\n};\n\n/** Relative luminance (sRGB approximation) */\nexport const luminance = (c: Rgba): number =>\n 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n"],"mappings":"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"}
1
+ {"version":3,"file":"color.js","names":["clamp01","v","parseHex","h","hex","expand","channel","i","hasAlpha","parseComponent","part","scale","splitArgs","main","alpha","args","parts","parseColor","value","input","match","probeContext","parseWithCanvas","canvas","ctx","r","g","b","a","resolveColor","direct","computed","element","probe","parsed","resolveStaticColor","fallback","parseVar","ref","depth","defined","variables","NAMED","domColorResolver","UNRESOLVED","memoizeColorResolver","cache","hit","resolved","resolve","sameColor","toCss","c","packColor","mix","t","unpackColor","packed","rampColor","stops","p","luminance"],"sources":["../../../../charts/src/engine/color.ts"],"sourcesContent":["// Color parsing to straight (non-premultiplied) RGBA in 0-1.\n\nexport type Rgba = readonly [number, number, number, number];\n\nconst clamp01 = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n\nconst parseHex = (hex: string): Rgba | null => {\n const h = hex.slice(1);\n if (!/^[0-9a-f]+$/i.test(h)) return null;\n const expand = h.length === 3 || h.length === 4;\n if (!expand && h.length !== 6 && h.length !== 8) return null;\n const channel = (i: number) =>\n expand\n ? parseInt(h[i] + h[i], 16) / 255\n : parseInt(h.slice(i * 2, i * 2 + 2), 16) / 255;\n const hasAlpha = h.length === 4 || h.length === 8;\n return [channel(0), channel(1), channel(2), hasAlpha ? channel(3) : 1];\n};\n\nconst parseComponent = (part: string, scale: number): number => {\n const v = parseFloat(part);\n if (Number.isNaN(v)) return 0;\n return part.trim().endsWith(\"%\") ? v / 100 : v / scale;\n};\n\n/** Splits `a b c / d` or `a, b, c, d` */\nconst splitArgs = (args: string): string[] => {\n const [main, alpha] = args.split(\"/\");\n const parts = main.split(/[\\s,]+/).filter(Boolean);\n if (alpha !== undefined) parts.push(alpha.trim());\n return parts;\n};\n\n/**\n * Parses the color syntaxes returned by `getComputedStyle` (`rgb()`,\n * `rgba()`, `color(srgb ...)`) and hex colors; `null` for anything else\n * (named colors, `oklch()`, ... are resolved by `resolveColor`).\n */\nexport const parseColor = (input: string): Rgba | null => {\n const value = input.trim().toLowerCase();\n if (value.startsWith(\"#\")) return parseHex(value);\n if (value === \"transparent\") return [0, 0, 0, 0];\n let match = /^rgba?\\((.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 255)),\n clamp01(parseComponent(parts[1], 255)),\n clamp01(parseComponent(parts[2], 255)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n match = /^color\\(srgb\\s+(.*)\\)$/.exec(value);\n if (match) {\n const parts = splitArgs(match[1]);\n if (parts.length < 3) return null;\n return [\n clamp01(parseComponent(parts[0], 1)),\n clamp01(parseComponent(parts[1], 1)),\n clamp01(parseComponent(parts[2], 1)),\n parts[3] === undefined ? 1 : clamp01(parseComponent(parts[3], 1)),\n ];\n }\n return null;\n};\n\nlet probeContext: CanvasRenderingContext2D | null | undefined;\n\n/** Lets the browser convert any CSS color (named, hsl, oklch, color-mix, ...) */\nconst parseWithCanvas = (value: string): Rgba | null => {\n if (typeof document === \"undefined\") return null;\n if (probeContext === undefined) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n probeContext = canvas.getContext(\"2d\", { willReadFrequently: true });\n }\n const ctx = probeContext;\n if (!ctx) return null;\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillStyle = \"#000\";\n ctx.fillStyle = value;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n if (a === 0) return [0, 0, 0, 0];\n // getImageData returns premultiplied-then-unpremultiplied values\n return [r / 255, g / 255, b / 255, a / 255];\n};\n\n/**\n * Resolves a CSS color in the context of `element`: `var(--x)`,\n * `color-mix()`, named colors, ... Falls back to `fallback` when the color\n * cannot be resolved (e.g. outside a browser).\n */\nexport const resolveColor = (\n value: string,\n element: Element | null,\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n let computed = value;\n if (element && typeof getComputedStyle === \"function\") {\n const probe = element.ownerDocument.createElement(\"span\");\n probe.style.display = \"none\";\n probe.style.color = value;\n element.appendChild(probe);\n computed = getComputedStyle(probe).color || value;\n probe.remove();\n const parsed = parseColor(computed);\n if (parsed) return parsed;\n }\n return parseWithCanvas(computed) ?? resolveStaticColor(value, {}, fallback);\n};\n\n/** Resolves a color to RGBA, falling back to `fallback` */\nexport type ColorResolver = (value: string, fallback: Rgba) => Rgba;\n\n/** Splits the arguments of `var(--name, fallback)` (the fallback may contain commas) */\nconst parseVar = (\n value: string,\n): { name: string; fallback?: string } | null => {\n const match = /^var\\(\\s*(--[\\w-]+)\\s*(?:,([\\s\\S]*))?\\)$/.exec(value.trim());\n if (!match) return null;\n const fallback = match[2]?.trim();\n return { name: match[1], ...(fallback ? { fallback } : {}) };\n};\n\n/**\n * Resolves a color without a DOM (mini-programs, React Native, workers):\n * hex, `rgb()`, `transparent` and `var(--name, fallback)` looked up in\n * `variables` (nested fallbacks included).\n */\nexport const resolveStaticColor = (\n value: string,\n variables: Readonly<Record<string, string>> = {},\n fallback: Rgba = [0.4, 0.4, 0.4, 1],\n depth = 0,\n): Rgba => {\n const direct = parseColor(value);\n if (direct) return direct;\n const ref = depth < 8 ? parseVar(value) : null;\n if (ref) {\n const defined = variables[ref.name];\n if (defined)\n return resolveStaticColor(defined, variables, fallback, depth + 1);\n if (ref.fallback)\n return resolveStaticColor(ref.fallback, variables, fallback, depth + 1);\n }\n return NAMED[value.trim().toLowerCase()] ?? fallback;\n};\n\nconst NAMED: Record<string, Rgba> = {\n black: [0, 0, 0, 1],\n white: [1, 1, 1, 1],\n red: [1, 0, 0, 1],\n green: [0, 128 / 255, 0, 1],\n blue: [0, 0, 1, 1],\n gray: [128 / 255, 128 / 255, 128 / 255, 1],\n grey: [128 / 255, 128 / 255, 128 / 255, 1],\n orange: [1, 165 / 255, 0, 1],\n};\n\n/** Resolver of the DOM: CSS variables and any CSS color syntax of `element` */\nexport const domColorResolver =\n (element: Element | null): ColorResolver =>\n (value, fallback) =>\n resolveColor(value, element, fallback);\n\n/** A resolver remembering its results; `null` marks unresolvable colors */\nexport interface MemoizedColorResolver extends ColorResolver {\n readonly cache: ReadonlyMap<string, Rgba | null>;\n}\n\nconst UNRESOLVED: Rgba = [NaN, NaN, NaN, NaN];\n\n/**\n * Caches the colors of `resolve` by input string (DOM probes force a style\n * recalculation). `resolve` must return `fallback` itself when it cannot\n * resolve a color, as the resolvers of this module do. Create a new one to\n * invalidate it (e.g. when the theme changes).\n */\nexport const memoizeColorResolver = (\n resolve: ColorResolver,\n): MemoizedColorResolver => {\n const cache = new Map<string, Rgba | null>();\n const memoized = (value: string, fallback: Rgba): Rgba => {\n let hit = cache.get(value);\n if (hit === undefined) {\n const resolved = resolve(value, UNRESOLVED);\n hit = resolved === UNRESOLVED ? null : resolved;\n cache.set(value, hit);\n }\n return hit ?? fallback;\n };\n return Object.assign(memoized, { cache });\n};\n\n/** Same channels (both `null` included) */\nexport const sameColor = (a: Rgba | null, b: Rgba | null): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3]);\n\nconst hex2 = (v: number) =>\n Math.round(clamp01(v) * 255)\n .toString(16)\n .padStart(2, \"0\");\n\n/** `rgba()` string usable by Canvas2D and the DOM */\nexport const toCss = (c: Rgba, alpha = 1): string =>\n `rgba(${Math.round(c[0] * 255)}, ${Math.round(c[1] * 255)}, ${Math.round(c[2] * 255)}, ${+(c[3] * alpha).toFixed(3)})`;\n\n/** `#rrggbb` (alpha dropped) */\nexport const toHex = (c: Rgba): string =>\n `#${hex2(c[0])}${hex2(c[1])}${hex2(c[2])}`;\n\n/** Packs a color as little-endian `unorm8x4` (r in the lowest byte) */\nexport const packColor = (c: Rgba): number =>\n ((Math.round(clamp01(c[3]) * 255) << 24) |\n (Math.round(clamp01(c[2]) * 255) << 16) |\n (Math.round(clamp01(c[1]) * 255) << 8) |\n Math.round(clamp01(c[0]) * 255)) >>>\n 0;\n\n/** Mixes two colors (t = 0 -> a, 1 -> b) */\nexport const mix = (a: Rgba, b: Rgba, t: number): Rgba => [\n a[0] + (b[0] - a[0]) * t,\n a[1] + (b[1] - a[1]) * t,\n a[2] + (b[2] - a[2]) * t,\n a[3] + (b[3] - a[3]) * t,\n];\n\n/** Inverse of `packColor` */\nexport const unpackColor = (packed: number): Rgba => [\n (packed & 0xff) / 255,\n ((packed >>> 8) & 0xff) / 255,\n ((packed >>> 16) & 0xff) / 255,\n ((packed >>> 24) & 0xff) / 255,\n];\n\n/** Color at `t` (0-1) of a ramp through `stops` */\nexport const rampColor = (stops: readonly Rgba[], t: number): Rgba => {\n if (stops.length === 1) return stops[0];\n const p = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(p));\n return mix(stops[i], stops[i + 1], p - i);\n};\n\n/** Relative luminance (sRGB approximation) */\nexport const luminance = (c: Rgba): number =>\n 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  const e=require("./data.cjs"),t=require("./color.cjs"),n=require("./curve.cjs"),r=require("./layout.cjs"),i=require("./model.cjs"),a=require("./overlay.cjs"),o=require("./decimate.cjs"),s=require("./scene.cjs"),c=require("./theme.cjs"),l=require("./viewport.cjs");var u=e=>({x:[e.x[0],e.x[1]],y:[e.y[0],e.y[1]]}),d=6,f=10,p=320,m=20,h=e=>{let t=e.options,n=e.theme,o=c.createTheme(n,t.palette),h=new Map,g=new Set,_={},v,y={x:[0,1],y:[0,1]},b=!1,x=0,S=0,C=[],w=null,T=!0,E=``,D=!1,O=null,k=new Map,A=null,j={time:0,x:0,y:0},M=(e,t)=>{_[e]?.forEach(e=>e(t))},N=()=>{T=!0,D||e.onInvalidate?.()},P=()=>{let e=t.interaction;if(e===!1)return null;let n=typeof e==`object`?e:{};return{pan:n.pan??!0,dragPoints:n.dragPoints??!1}},F=(t,n=o.fontSize,r=400)=>e.measureText(t,a.font(o,n,r)),I=()=>{v=i.buildModel(t,o,g,h);let{base:e,minSpan:n}=v;b?(y={x:v.zoom.x?l.clampRange(y.x,e.x,n.x):[...e.x],y:v.zoom.y?l.clampRange(y.y,e.y,n.y):[...e.y]},b=!l.sameRange(y.x,e.x)||!l.sameRange(y.y,e.y)):y=u(e),C=s.resolveAnnotations(t.annotations,o),O&&(O.event.items.every(e=>v.series[e.seriesIndex]&&!v.series[e.seriesIndex].hidden&&e.index<v.series[e.seriesIndex].cols.count)||H(null)),N()},L=()=>{let e=t.legend,n=t.series.filter(e=>e.name).length;if(!(e===void 0?n>1:e))return null;let r=typeof e==`object`?e:{},i=r.position===`bottom`?`bottom`:`top`,a=[],o=4,c=0;for(let e of v.series){let t=14+F(e.name,12)+8;o+t>x-4&&o>4&&(o=4,c++),a.push({id:e.id,name:e.name,color:e.colorCss,shape:s.legendShape(e.type),hidden:e.hidden,box:{x:o,y:c*m,width:t,height:m}}),o+=t+10}let l=(c+1)*m+6;if(i===`bottom`)for(let e of a)e.box.y+=S-l+6;return{entries:a,position:i,toggle:r.toggle??!0,height:l}},R=(e,n,r)=>{let i=t.tooltip;if(i===!1)return null;let a=typeof i==`object`?i.render:void 0,o=null;if(a){let t=a(e);if(t===null||t===``)return null;typeof t==`string`&&(o=t.split(`
2
- `))}let c=s.tooltipContent(v,e,w?.layout.yTicks??null),l=0,u;if(o){for(let e of o)l=Math.max(l,F(e,12));u=o.length}else{l=F(c.title,12,600)+(c.titleColor?14:0);for(let e of c.rows)l=Math.max(l,(e.color?14:0)+F(e.name,12)+16+F(e.value,12,600));u=1+c.rows.length}let d=Math.ceil(Math.max(l,96)+16+4),f=u*18+16,p=n+14;p+d>x-4&&(p=n-14-d),p=Math.max(4,Math.min(p,x-d-4));let m=Math.max(4,Math.min(r-f/2,S-f-4));return{content:c,text:o,box:{x:p,y:m,width:d,height:f},lineHeight:18,padding:8}},z=()=>{if(x<=0||S<=0)return null;let e=L(),n=e?.position===`top`?e.height:0,r=s.layoutChart({model:v,view:y,theme:o,width:x,height:S-(e?.height??0),padding:t.padding,top:n,measure:e=>F(e)}),i=s.collectPointLabels(v,y,r.scales,r.yTicks),c=[],l=o.fontSize+4;for(let e of C){if(e.type===`text`&&e.text){c.push(a.textBox(e,r.scales,F(e.text,o.fontSize,e.weight),l));continue}if(e.type!==`rect`||!e.label)continue;let t=r.scales,n=e.x0===void 0?r.plot.x:t.xToPx(e.x0),i=e.x1===void 0?r.plot.x+r.plot.width:t.xToPx(e.x1),s=e.y0===void 0?r.plot.y+r.plot.height:t.yToPx(e.y0),u=e.y1===void 0?r.plot.y:t.yToPx(e.y1),d=F(e.label,o.fontSize+1,600),f=Math.min(n,i),p=Math.max(n,i),m=Math.min(s,u),h=Math.max(s,u),g=e.labelPosition;c.push({x:g.endsWith(`left`)?f+10:g.endsWith(`right`)?p-10-d:(f+p-d)/2,y:g.startsWith(`top`)?m+10:g.startsWith(`bottom`)?h-10-l:(m+h-l)/2,width:d,height:l})}let d=a.placeLabels(i,r.plot,e=>F(e),l-2,c),f={width:x,height:S,theme:o,model:v,view:u(y),layout:r,annotations:C,pointLabels:d,legend:e,hover:null,dragging:null};if(w=f,O){let e=s.showsCrosshair(v,O.event,t.crosshair),n=r.scales.xToPx(O.event.items[0].x);f.hover={event:O.event,marks:s.hoverMarks(v,r.scales,O.event),crosshairX:e&&n>=r.plot.x&&n<=r.plot.x+r.plot.width?n:null,tooltip:A?.kind===`pan`||A?.kind===`point`?null:R(O.event,O.x,O.y)}}if(A?.kind===`point`){let e=v.series[A.item.seriesIndex];f.dragging={x:A.x,y:A.y,color:A.item.color,size:(e?s.dotSize(e,A.item.index):8)+6}}let p=r.plot,m=`${p.x},${p.y},${p.width},${p.height}`;return m!==E&&(E=m,M(`layout`,{...p})),f},B=()=>((T||!w)&&(T=!1,w=z()),w),V=()=>B()?.layout.scales??null,H=e=>{let t=!s.sameHover(O?.event??null,e?.event??null);O=e,N(),t&&M(`hover`,e?e.event:null)},U=(e,t,n)=>{let r=V();return r?s.hitTest(v,r,w?.layout.xTicks??null,e,t,n?8:0):null},W=(e,t)=>{let n=V()?.plot;return!!n&&e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height},G=(e,t)=>{let n=V();if(!n)return null;let{plot:r}=n,i=Math.max(r.x,Math.min(r.x+r.width,e)),a=Math.max(r.y,Math.min(r.y+r.height,t));return{x:n.pxToX(i),y:n.pxToY(a)}},K=(e,t)=>{let{base:n,minSpan:r}=v;y={x:l.clampRange(e.x,n.x,r.x),y:l.clampRange(e.y,n.y,r.y)},b=!l.sameRange(y.x,n.x)||!l.sameRange(y.y,n.y),t&&M(`zoom`,u(y)),N()},q=(e,t,n)=>{let r=V();if(!r||!v.zoom.x&&!v.zoom.y)return;let i=u(y);v.zoom.x&&(i.x=l.zoomRange(y.x,r.pxToX(e),n)),v.zoom.y&&(i.y=l.zoomRange(y.y,r.pxToY(t),n)),K(i,!0)},J=()=>{b&&K(u(v.base),!0)},Y=(e,t)=>B()?.legend?.entries.find(n=>e>=n.box.x&&e<=n.box.x+n.box.width&&t>=n.box.y&&t<=n.box.y+n.box.height)??null,X=e=>{g.has(e)?g.delete(e):g.add(e),I()},Z=()=>{let[e,t]=[...k.values()];A={kind:`pinch`,view:u(y),distance:Math.max(1,Math.hypot(e.x-t.x,e.y-t.y)),midX:(e.x+t.x)/2,midY:(e.y+t.y)/2},H(null)};return v=i.buildModel(t,o,g,h),I(),{setOptions(e){if(D)return;let r=(e.palette??[]).join()!==(t.palette??[]).join();t=e,r&&(o=c.createTheme(n,t.palette)),I()},setTheme(e){D||(n=e,o=c.createTheme(n,t.palette),I())},setSize(e,t){(e!==x||t!==S)&&(x=Math.max(0,e),S=Math.max(0,t),N())},getScene:B,pointerDown:(e,t,n={})=>{if(D)return;let r=n.id??0,i=!!n.touch;k.set(r,{x:e,y:t,startX:e,startY:t,touch:i,moved:!1});let a=P();if(k.size===2){a&&(v.zoom.x||v.zoom.y)&&A?.kind!==`point`&&Z();return}if(k.size>2||!a){if(!a&&i){let n=U(e,t,!0);H(n?{event:n,x:e,y:t}:null)}return}if(a.dragPoints){let n=U(e,t,i)?.items.find(e=>v.series[e.seriesIndex].type===`scatter`);if(n){A={kind:`point`,item:n,x:e,y:t};return}}if(b&&a.pan&&W(e,t)){A={kind:`pan`,view:u(y),x:e,y:t};return}if(A=null,i){let n=U(e,t,!0);H(n?{event:n,x:e,y:t}:null)}},pointerMove:(e,t,n={})=>{if(D)return;let i=n.id??0,a=k.get(i);if(a&&(a.x=e,a.y=t,!a.moved&&Math.hypot(e-a.startX,t-a.startY)>(a.touch?f:d)&&(a.moved=!0)),A?.kind===`pinch`&&k.size>=2){let[e,t]=[...k.values()],n=Math.max(1,Math.hypot(e.x-t.x,e.y-t.y)),i=(e.x+t.x)/2,a=(e.y+t.y)/2,o=V();if(!o)return;let s=r.createScales(o.plot,A.view,v.x.reverse,v.y.reverse),c=A.distance/n,d=u(A.view);if(v.zoom.x){d.x=l.zoomRange(A.view.x,s.pxToX(A.midX),c);let e=(i-A.midX)*s.xPerPx*c;d.x=l.panRange(d.x,v.x.reverse?e:-e)}if(v.zoom.y){d.y=l.zoomRange(A.view.y,s.pxToY(A.midY),c);let e=(a-A.midY)*s.yPerPx*c;d.y=l.panRange(d.y,v.y.reverse?-e:e)}K(d,!0);return}if(A?.kind===`point`&&a){if(!a.moved)return;A.x=e,A.y=t;let n=G(e,t);N(),n&&M(`drag`,{item:A.item,x:n.x,y:n.y});return}if(A?.kind===`pan`&&a){if(!a.moved)return;let n=V();if(!n)return;let r=e-A.x,i=t-A.y,o=u(A.view);v.zoom.x&&(o.x=l.panRange(A.view.x,-r*n.xPerPx*(v.x.reverse?-1:1))),v.zoom.y&&(o.y=l.panRange(A.view.y,i*n.yPerPx*(v.y.reverse?-1:1))),K(o,!0);return}if(!(k.size>1)&&(!a||a.touch||!n.touch)){let r=U(e,t,!!a?.touch||!!n.touch);(r||!a?.touch)&&H(r?{event:r,x:e,y:t}:null)}},pointerUp:(e,t,n={})=>{if(D)return;let r=n.id??0,i=k.get(r);k.delete(r);let a=A;if(a?.kind===`pinch`){k.size<2&&(A=null);return}if(A=null,!i)return;if(a?.kind===`point`){if(i.moved){let n=G(e,t);N(),n&&M(`drop`,{item:a.item,x:n.x,y:n.y});return}}else if(a?.kind===`pan`&&i.moved){N();return}if(i.moved){i.touch&&N();return}let o=Date.now();if(i.touch&&o-j.time<p&&Math.hypot(e-j.x,t-j.y)<24&&b){j={time:0,x:e,y:t},J();return}j={time:o,x:e,y:t};let s=Y(e,t);if(s){B()?.legend?.toggle&&X(s.id);return}let c=U(e,t,i.touch);if(c){i.touch&&H({event:c,x:e,y:t}),M(`click`,c);return}if(i.touch&&H(null),W(e,t)){let n=G(e,t);n&&M(`plotClick`,n)}},pointerCancel:(e={})=>{k.delete(e.id??0),(A?.kind===`point`||k.size<2)&&(A=null),N()},pointerLeave(){!A&&O&&H(null)},zoomAt:q,resetZoom:J,getView:()=>u(y),setView(e){D||K({x:e.x??y.x,y:e.y??y.y},!1)},toggleSeries:X,clearHover(){O&&H(null)},getPlotRect(){let e=B()?.layout.plot;return e?{...e}:null},toPixel(e,t){let n=V();return n?{x:n.xToPx(e),y:n.yToPx(t)}:null},fromPixel(e,t){let n=V();return n?{x:n.pxToX(e),y:n.pxToY(t)}:null},on(e,t){let n=_[e];return n||(n=new Set,_[e]=n),n.add(t),()=>{n.delete(t)}},destroy(){D=!0,k.clear();for(let e of Object.keys(_))delete _[e]}}},g=(t,n,r,i)=>{if(!r)return[0,n];let[a,o]=i[0]<=i[1]?i:[i[1],i[0]];return[Math.max(0,e.lowerBound(t,n,a)-1),Math.min(n,e.lowerBound(t,n,o)+1)]},_={heatmap:0,area:1,bar:2,candlestick:3,line:4,scatter:5},v=(e,r={})=>{let{model:i,view:a,layout:c}=e,l=c.scales,{plot:u}=c,d=r.maxDots??4e3,f=r.maxBars??2e3,p=Math.max(1,r.columnWidth??1),m=[],h=i.series.filter(e=>!e.hidden&&e.cols.count>0).sort((e,t)=>_[e.type]-_[t.type]||e.index-t.index);for(let e of h){let{x:c,y:h,count:_,sorted:v}=e.cols;if(e.type===`line`||e.type===`area`){let[t,r]=g(c,_,v,a.x),s=e.stackTop??h,d=n.curvePoints(c,s,t,r,e.curve),f=e.stackBase?n.curvePoints(c,e.stackBase,t,r,e.curve).points:null,y=d.length,b=d.points,x=f;if(v&&y>u.width*2/p){if(f){let e=o.decimateMinMax(b,0,y,e=>l.xToPx(e)/p),t=new Float64Array(e.length*2),n=new Float64Array(e.length*2),r=0,i=0;for(let a=0;a<e.length;a++){let o=e.points[a*2];for(;i<y-1&&b[i*2]<o;)i++;t[r*2]=o,t[r*2+1]=e.points[a*2+1],n[r*2]=o,n[r*2+1]=f[i*2+1],r++}b=t,x=n,y=r}else{let e=o.decimateMinMax(b,0,y,e=>l.xToPx(e)/p);b=e.points,y=e.length}}let S=[],C=[],w=[],T=[];for(let e=0;e<y;e++){let t=b[e*2],n=b[e*2+1],r=x?x[e*2+1]:0;if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)){w.length&&(S.push(w),C.push(T)),w=[],T=[];continue}w.push(l.xToPx(t),l.yToPx(n)),x&&T.push(l.yToPx(r))}w.length&&(S.push(w),C.push(T)),e.type===`area`&&m.push({kind:`area`,seriesIndex:e.index,color:e.colorCss,opacity:e.opacity,baseline:l.yToPx(i.baseline),segments:S,...x?{bottoms:C}:{}}),m.push({kind:`line`,seriesIndex:e.index,color:e.colorCss,width:e.type===`area`?Math.min(e.lineWidth,2):e.lineWidth,segments:S});continue}if(e.type===`bar`&&e.barBase&&e.barTop){let[n,r]=g(c,_,v,a.x),i=Math.max(e.barHalfWidth/l.xPerPx,.5),o=[],s=[],d=r-n>f,p=NaN;for(let a=n;a<r;a++){let n=e.barBase[a],r=e.barTop[a];if(!Number.isFinite(n)||!Number.isFinite(r))continue;let f=l.xToPx(c[a]+e.barOffset);if(f+i<u.x||f-i>u.x+u.width)continue;let m=l.yToPx(n),h=l.yToPx(r),g=Math.min(m,h),_=Math.max(1,Math.abs(m-h)),v=Math.floor(f);if(d&&v===p&&o.length){let e=o.length-4,t=Math.max(o[e+1]+o[e+3],g+_);o[e+1]=Math.min(o[e+1],g),o[e+3]=t-o[e+1];continue}p=v,o.push(f-i,g,i*2,_);let y=e.pointColors?.[a];s.push(y?t.toCss(y):e.colorCss)}m.push({kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:o,...e.pointColors?{colors:s}:{},radius:e.radius});continue}if(e.type===`candlestick`){let[n,r]=g(c,_,v,a.x),{open:i,high:o,low:s}=e.cols,d=Math.max(e.barHalfWidth/l.xPerPx,1),p=t.toCss(e.upColor),y=t.toCss(e.downColor),b=[],x=[],S=[],C=[],w=Math.max(1,Math.ceil((r-n)/f));for(let e=n;e<r;e+=w){let t=h[e],n=i?i[e]:t;if(!Number.isFinite(t)||!Number.isFinite(n))continue;let r=l.xToPx(c[e]);if(r+d<u.x||r-d>u.x+u.width)continue;let a=t<n?y:p,f=l.yToPx(o?o[e]:Math.max(n,t)),m=l.yToPx(s?s[e]:Math.min(n,t));b.push(r-.5,Math.min(f,m),1,Math.abs(m-f)),S.push(a);let g=l.yToPx(n),_=l.yToPx(t);x.push(r-d,Math.min(g,_),d*2,Math.max(1,Math.abs(g-_))),C.push(a)}m.push({kind:`bars`,seriesIndex:e.index,color:p,rects:b,colors:S},{kind:`bars`,seriesIndex:e.index,color:p,rects:x,colors:C,radius:1});continue}if(e.type===`heatmap`){let n=Math.abs(e.cellHalf.x/l.xPerPx),r=Math.abs(e.cellHalf.y/l.yPerPx),i=[],a=[],o=+(n>3&&r>3);for(let s=0;s<_&&i.length/4<f*4;s++){let d=e.cellColors?.[s];if(!d)continue;let f=l.xToPx(c[s]),p=l.yToPx(h[s]);f+n<u.x||f-n>u.x+u.width||p+r<u.y||p-r>u.y+u.height||(i.push(f-n+o,p-r+o,n*2-o*2,r*2-o*2),a.push(t.toCss(t.unpackColor(d))))}m.push({kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:i,colors:a,radius:e.radius});continue}let y=[],b=[],x=n=>{let r=e.pointColors?.[n];return r?t.toCss(r):e.colorCss},S=[];for(let e=0;e<_;e++){let t=c[e],n=h[e];if(!Number.isFinite(t)||!Number.isFinite(n))continue;let r=l.xToPx(t),i=l.yToPx(n);r<u.x||r>u.x+u.width||i<u.y||i>u.y+u.height||S.push(e)}if(S.length>d){let t=Math.max(2,r.dotCell??e.pointSize*.8),n=Math.ceil(u.width/t)+1,i=new Map;for(let e of S){let r=Math.floor((l.xToPx(c[e])-u.x)/t),a=Math.floor((l.yToPx(h[e])-u.y)/t);i.set(a*n+r,e)}for(let[e,r]of i)y.push(u.x+(e%n+.5)*t,u.y+(Math.floor(e/n)+.5)*t,t),b.push(x(r))}else for(let t of S)y.push(l.xToPx(c[t]),l.yToPx(h[t]),s.dotSize(e,t)),b.push(x(t));m.push({kind:`dots`,seriesIndex:e.index,opacity:e.opacity,dots:y,colors:b})}return m};exports.createChartController=h,exports.scenePrimitives=v;
2
+ `))}let c=s.tooltipContent(v,e,w?.layout.yTicks??null,w?.layout.y2Ticks??null),l=0,u;if(o){for(let e of o)l=Math.max(l,F(e,12));u=o.length}else{l=F(c.title,12,600)+(c.titleColor?14:0);for(let e of c.rows)l=Math.max(l,(e.color?14:0)+F(e.name,12)+16+F(e.value,12,600));u=1+c.rows.length}let d=Math.ceil(Math.max(l,96)+16+4),f=u*18+16,p=n+14;p+d>x-4&&(p=n-14-d),p=Math.max(4,Math.min(p,x-d-4));let m=Math.max(4,Math.min(r-f/2,S-f-4));return{content:c,text:o,box:{x:p,y:m,width:d,height:f},lineHeight:18,padding:8}},z=()=>{if(x<=0||S<=0)return null;let e=L(),n=e?.position===`top`?e.height:0,r=s.layoutChart({model:v,view:y,theme:o,width:x,height:S-(e?.height??0),padding:t.padding,top:n,measure:e=>F(e)}),i=s.collectPointLabels(v,y,r.scales,r.yTicks),c=[],l=o.fontSize+4;for(let e of C){if(e.type===`text`&&e.text){c.push(a.textBox(e,r.scales,F(e.text,o.fontSize,e.weight),l));continue}if(e.type!==`rect`||!e.label)continue;let t=a.rectOf(e,r.scales);if(t.width<=0||t.height<=0)continue;let n=F(e.label,o.fontSize+1,600),i=e.labelPosition;c.push({x:i.endsWith(`left`)?t.x+10:i.endsWith(`right`)?t.x+t.width-10-n:t.x+(t.width-n)/2,y:i.startsWith(`top`)?t.y+10:i.startsWith(`bottom`)?t.y+t.height-10-l:t.y+(t.height-l)/2,width:n,height:l})}let d=a.placeLabels(i,r.plot,e=>F(e),l-2,c),f={width:x,height:S,theme:o,model:v,view:u(y),layout:r,annotations:C,pointLabels:d,legend:e,hover:null,dragging:null};if(w=f,O){let e=s.crosshairAt(v,r.scales,O.event,t.crosshair),n=r.scales.horizontal;f.hover={event:O.event,marks:s.hoverMarks(v,r.scales,O.event),crosshairX:n?null:e,crosshairY:n?e:null,tooltip:A?.kind===`pan`||A?.kind===`point`?null:R(O.event,O.x,O.y)}}if(A?.kind===`point`){let e=v.series[A.item.seriesIndex];f.dragging={x:A.x,y:A.y,color:A.item.color,size:(e?s.dotSize(e,A.item.index):8)+6}}let p=r.plot,m=`${p.x},${p.y},${p.width},${p.height}`;return m!==E&&(E=m,M(`layout`,{...p})),f},B=()=>((T||!w)&&(T=!1,w=z()),w),V=()=>B()?.layout.scales??null,H=e=>{let t=!s.sameHover(O?.event??null,e?.event??null);O=e,N(),t&&M(`hover`,e?e.event:null)},U=(e,t,n)=>{let r=V();return r?s.hitTest(v,r,w?.layout.xTicks??null,e,t,n?8:0):null},W=(e,t)=>{let n=V()?.plot;return!!n&&e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height},G=(e,t)=>{let n=V();if(!n)return null;let{plot:i}=n,a=Math.max(i.x,Math.min(i.x+i.width,e)),o=Math.max(i.y,Math.min(i.y+i.height,t));return r.toData(n,a,o)},K=(e,t)=>{let{base:n,minSpan:r}=v;y={x:l.clampRange(e.x,n.x,r.x),y:l.clampRange(e.y,n.y,r.y)},b=!l.sameRange(y.x,n.x)||!l.sameRange(y.y,n.y),t&&M(`zoom`,u(y)),N()},q=(e,t,n)=>{let i=V();if(!i||!v.zoom.x&&!v.zoom.y)return;let a=u(y),o=r.toData(i,e,t);v.zoom.x&&(a.x=l.zoomRange(y.x,o.x,n)),v.zoom.y&&(a.y=l.zoomRange(y.y,o.y,n)),K(a,!0)},J=()=>{b&&K(u(v.base),!0)},Y=(e,t)=>B()?.legend?.entries.find(n=>e>=n.box.x&&e<=n.box.x+n.box.width&&t>=n.box.y&&t<=n.box.y+n.box.height)??null,X=e=>{g.has(e)?g.delete(e):g.add(e),I()},Z=()=>{let[e,t]=[...k.values()];A={kind:`pinch`,view:u(y),distance:Math.max(1,Math.hypot(e.x-t.x,e.y-t.y)),midX:(e.x+t.x)/2,midY:(e.y+t.y)/2},H(null)};return v=i.buildModel(t,o,g,h),I(),{setOptions(e){if(D)return;let r=(e.palette??[]).join()!==(t.palette??[]).join();t=e,r&&(o=c.createTheme(n,t.palette)),I()},setTheme(e){D||(n=e,o=c.createTheme(n,t.palette),I())},setSize(e,t){(e!==x||t!==S)&&(x=Math.max(0,e),S=Math.max(0,t),N())},getScene:B,pointerDown:(e,t,n={})=>{if(D)return;let r=n.id??0,i=!!n.touch;k.set(r,{x:e,y:t,startX:e,startY:t,touch:i,moved:!1});let a=P();if(k.size===2){a&&(v.zoom.x||v.zoom.y)&&A?.kind!==`point`&&Z();return}if(k.size>2||!a){if(!a&&i){let n=U(e,t,!0);H(n?{event:n,x:e,y:t}:null)}return}if(a.dragPoints){let n=U(e,t,i)?.items.find(e=>v.series[e.seriesIndex].type===`scatter`);if(n){A={kind:`point`,item:n,x:e,y:t};return}}if(b&&a.pan&&W(e,t)){A={kind:`pan`,view:u(y),x:e,y:t};return}if(A=null,i){let n=U(e,t,!0);H(n?{event:n,x:e,y:t}:null)}},pointerMove:(e,t,n={})=>{if(D)return;let i=n.id??0,a=k.get(i);if(a&&(a.x=e,a.y=t,!a.moved&&Math.hypot(e-a.startX,t-a.startY)>(a.touch?f:d)&&(a.moved=!0)),A?.kind===`pinch`&&k.size>=2){let[e,t]=[...k.values()],n=Math.max(1,Math.hypot(e.x-t.x,e.y-t.y)),i=(e.x+t.x)/2,a=(e.y+t.y)/2,o=V();if(!o)return;let s=r.createScales(o.plot,A.view,v.x.reverse,v.y.reverse,v.horizontal),c=A.distance/n,d=u(A.view),f=r.toData(s,A.midX,A.midY),p=r.toData(s,i,a);v.zoom.x&&(d.x=l.zoomRange(A.view.x,f.x,c),d.x=l.panRange(d.x,(f.x-p.x)*c)),v.zoom.y&&(d.y=l.zoomRange(A.view.y,f.y,c),d.y=l.panRange(d.y,(f.y-p.y)*c)),K(d,!0);return}if(A?.kind===`point`&&a){if(!a.moved)return;A.x=e,A.y=t;let n=G(e,t);N(),n&&M(`drag`,{item:A.item,x:n.x,y:n.y});return}if(A?.kind===`pan`&&a){if(!a.moved)return;let n=V();if(!n)return;let i=u(A.view),o=r.toData(n,A.x,A.y),s=r.toData(n,e,t);v.zoom.x&&(i.x=l.panRange(A.view.x,o.x-s.x)),v.zoom.y&&(i.y=l.panRange(A.view.y,o.y-s.y)),K(i,!0);return}if(!(k.size>1)&&(!a||a.touch||!n.touch)){let r=U(e,t,!!a?.touch||!!n.touch);(r||!a?.touch)&&H(r?{event:r,x:e,y:t}:null)}},pointerUp:(e,t,n={})=>{if(D)return;let r=n.id??0,i=k.get(r);k.delete(r);let a=A;if(a?.kind===`pinch`){k.size<2&&(A=null);return}if(A=null,!i)return;if(a?.kind===`point`){if(i.moved){let n=G(e,t);N(),n&&M(`drop`,{item:a.item,x:n.x,y:n.y});return}}else if(a?.kind===`pan`&&i.moved){N();return}if(i.moved){i.touch&&N();return}let o=Date.now();if(i.touch&&o-j.time<p&&Math.hypot(e-j.x,t-j.y)<24&&b){j={time:0,x:e,y:t},J();return}j={time:o,x:e,y:t};let s=Y(e,t);if(s){B()?.legend?.toggle&&X(s.id);return}let c=U(e,t,i.touch);if(c){i.touch&&H({event:c,x:e,y:t}),M(`click`,c);return}if(i.touch&&H(null),W(e,t)){let n=G(e,t);n&&M(`plotClick`,n)}},pointerCancel:(e={})=>{k.delete(e.id??0),(A?.kind===`point`||k.size<2)&&(A=null),N()},pointerLeave(){!A&&O&&H(null)},zoomAt:q,resetZoom:J,getView:()=>u(y),setView(e){D||K({x:e.x??y.x,y:e.y??y.y},!1)},toggleSeries:X,clearHover(){O&&H(null)},getPlotRect(){let e=B()?.layout.plot;return e?{...e}:null},toPixel(e,t){let n=V();return n?r.toScreen(n,e,t):null},fromPixel(e,t){let n=V();return n?r.toData(n,e,t):null},on(e,t){let n=_[e];return n||(n=new Set,_[e]=n),n.add(t),()=>{n.delete(t)}},destroy(){D=!0,k.clear();for(let e of Object.keys(_))delete _[e]}}},g=(t,n,r,i)=>{if(!r)return[0,n];let[a,o]=i[0]<=i[1]?i:[i[1],i[0]];return[Math.max(0,e.lowerBound(t,n,a)-1),Math.min(n,e.lowerBound(t,n,o)+1)]},_={heatmap:0,area:1,bar:2,boxplot:2,candlestick:3,line:4,scatter:5},v=(e,t)=>{if(!e.horizontal)return t;let n=Array(t.length);for(let e=0;e<t.length;e+=4)n[e]=t[e+1],n[e+1]=t[e],n[e+2]=t[e+3],n[e+3]=t[e+2];return n},y=(e,i={})=>{let{model:a,view:c,layout:l}=e,u=l.scales,{plot:d}=l,f=u.horizontal,p=i.maxDots??4e3,m=i.maxBars??2e3,h=Math.max(1,i.columnWidth??1),y=f?d.y:d.x,x=y+(f?d.height:d.width),S=[],C=a.series.filter(e=>!e.hidden&&e.cols.count>0).sort((e,t)=>_[e.type]-_[t.type]||e.index-t.index);for(let e of C){let{x:l,y:_,count:C,sorted:w}=e.cols;if(e.type===`line`||e.type===`area`){let[t,i]=g(l,C,w,c.x),s=e.stackTop??_,d=n.curvePoints(l,s,t,i,e.curve),p=e.stackBase?n.curvePoints(l,e.stackBase,t,i,e.curve).points:null,m=d.length,v=d.points,b=p;if(w&&m>(x-y)*2/h){if(p){let e=o.decimateMinMax(v,0,m,e=>u.xToPx(e)/h),t=new Float64Array(e.length*2),n=new Float64Array(e.length*2),r=0,i=0;for(let a=0;a<e.length;a++){let o=e.points[a*2];for(;i<m-1&&v[i*2]<o;)i++;t[r*2]=o,t[r*2+1]=e.points[a*2+1],n[r*2]=o,n[r*2+1]=p[i*2+1],r++}v=t,b=n,m=r}else{let e=o.decimateMinMax(v,0,m,e=>u.xToPx(e)/h);v=e.points,m=e.length}}let T=e.type===`area`&&!!e.cols.y0&&!!b,E=[],D=[],O=[],k=[],A=[],j=[],M=()=>{k.length&&(E.push(k),D.push(A),T&&O.push(j)),k=[],A=[],j=[]};for(let e=0;e<m;e++){let t=v[e*2],n=v[e*2+1],i=b?b[e*2+1]:0;if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(i)){M();continue}let a=r.toScreen(u,t,n);if(k.push(a.x,a.y),b&&A.push(u.yToPx(i)),T){let e=r.toScreen(u,t,i);j.push(e.x,e.y)}}if(M(),e.type===`area`&&S.push({kind:`area`,seriesIndex:e.index,color:e.colorCss,opacity:e.opacity,baseline:u.yToPx(a.baseline),segments:E,...b?{bottoms:D}:{},...f?{horizontal:!0}:{}}),e.lineWidth>0){let t=e.type===`area`?Math.min(e.lineWidth,2):e.lineWidth;S.push({kind:`line`,seriesIndex:e.index,color:e.colorCss,width:t,segments:E}),T&&S.push({kind:`line`,seriesIndex:e.index,color:e.colorCss,width:t,segments:O})}continue}if(e.type===`bar`&&e.barBase&&e.barTop){let[n,r]=g(l,C,w,c.x),i=Math.max(e.barHalfWidth/Math.abs(u.xPerPx),.5),a=[],o=[],s=r-n>m,d=NaN;for(let c=n;c<r;c++){let n=e.barBase[c],r=e.barTop[c];if(!Number.isFinite(n)||!Number.isFinite(r))continue;let f=u.xToPx(l[c]+e.barOffset);if(f+i<y||f-i>x)continue;let p=u.yToPx(n),m=u.yToPx(r),h=Math.min(p,m),g=Math.max(1,Math.abs(p-m)),_=Math.floor(f);if(s&&_===d&&a.length){let e=a.length-4,t=Math.max(a[e+1]+a[e+3],h+g);a[e+1]=Math.min(a[e+1],h),a[e+3]=t-a[e+1];continue}d=_,a.push(f-i,h,i*2,g);let v=e.pointColors?.[c];o.push(v?t.toCss(v):e.colorCss)}S.push({kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:v(u,a),...e.pointColors?{colors:o}:{},radius:e.radius,...e.opacity<1?{opacity:e.opacity}:{}});continue}if(e.type===`boxplot`){S.push(...b(e,u,c.x,y,x,m));continue}if(e.type===`candlestick`){let[n,r]=g(l,C,w,c.x),{open:i,high:a,low:o}=e.cols,s=Math.max(e.barHalfWidth/Math.abs(u.xPerPx),1),d=t.toCss(e.upColor),f=t.toCss(e.downColor),p=[],h=[],b=[],T=[],E=Math.max(1,Math.ceil((r-n)/m));for(let e=n;e<r;e+=E){let t=_[e],n=i?i[e]:t;if(!Number.isFinite(t)||!Number.isFinite(n))continue;let r=u.xToPx(l[e]);if(r+s<y||r-s>x)continue;let c=t<n?f:d,m=u.yToPx(a?a[e]:Math.max(n,t)),g=u.yToPx(o?o[e]:Math.min(n,t));p.push(r-.5,Math.min(m,g),1,Math.abs(g-m)),b.push(c);let v=u.yToPx(n),S=u.yToPx(t);h.push(r-s,Math.min(v,S),s*2,Math.max(1,Math.abs(v-S))),T.push(c)}S.push({kind:`bars`,seriesIndex:e.index,color:d,rects:v(u,p),colors:b},{kind:`bars`,seriesIndex:e.index,color:d,rects:v(u,h),colors:T,radius:1});continue}if(e.type===`heatmap`){let n=Math.abs(e.cellHalf.x/u.xPerPx),i=Math.abs(e.cellHalf.y/u.yPerPx),a=[],o=[],s=+(n>3&&i>3);for(let c=0;c<C&&a.length/4<m*4;c++){let f=e.cellColors?.[c];if(!f)continue;let p=r.screenRect(u,u.xToPx(l[c])-n,u.xToPx(l[c])+n,u.yToPx(_[c])-i,u.yToPx(_[c])+i);p.x+p.width<d.x||p.x>d.x+d.width||p.y+p.height<d.y||p.y>d.y+d.height||(a.push(p.x+s,p.y+s,p.width-s*2,p.height-s*2),o.push(t.toCss(t.unpackColor(f))))}S.push({kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:a,colors:o,radius:e.radius});continue}let T=[],E=[],D=n=>{let r=e.pointColors?.[n];return r?t.toCss(r):e.colorCss},O=[],k=[];for(let e=0;e<C;e++){let t=l[e],n=_[e];if(!Number.isFinite(t)||!Number.isFinite(n))continue;let i=r.toScreen(u,t,n);i.x<d.x||i.x>d.x+d.width||i.y<d.y||i.y>d.y+d.height||(O.push(e),k.push(i.x,i.y))}if(O.length>p){let t=Math.max(2,i.dotCell??e.pointSize*.8),n=Math.ceil(d.width/t)+1,r=new Map;O.forEach((e,i)=>{let a=Math.floor((k[i*2]-d.x)/t),o=Math.floor((k[i*2+1]-d.y)/t);r.set(o*n+a,e)});for(let[e,i]of r)T.push(d.x+(e%n+.5)*t,d.y+(Math.floor(e/n)+.5)*t,t),E.push(D(i))}else O.forEach((t,n)=>{T.push(k[n*2],k[n*2+1],s.dotSize(e,t)),E.push(D(t))});S.push({kind:`dots`,seriesIndex:e.index,opacity:e.opacity,dots:T,colors:E})}return S},b=(e,n,r,i,a,o)=>{let{x:s,y:c,count:l,sorted:u,high:d,low:f,q1:p,q3:m,outliers:h}=e.cols,[_,y]=g(s,l,u,r),b=Math.max(e.barHalfWidth/Math.abs(n.xPerPx),1),x=Math.max(1,e.lineWidth),S=[],C=[],w=[],T=[],E=[],D=[],O=Math.max(1,Math.ceil((y-_)/o)),k=(e,t,n)=>{C.push(e-x/2,Math.min(t,n),x,Math.abs(t-n))},A=(e,t,n,r=x)=>{C.push(e-t,n-r/2,t*2,r)};for(let r=_;r<y;r+=O){let o=c[r];if(!Number.isFinite(o))continue;let l=n.xToPx(s[r]+e.barOffset);if(l+b<i||l-b>a)continue;let u=e.pointColors?.[r],g=u?t.toCss(u):e.colorCss,_=n.yToPx(f&&Number.isFinite(f[r])?f[r]:o),v=n.yToPx(d&&Number.isFinite(d[r])?d[r]:o),y=n.yToPx(p&&Number.isFinite(p[r])?p[r]:o),O=n.yToPx(m&&Number.isFinite(m[r])?m[r]:o),j=C.length;S.push(l-b,Math.min(y,O),b*2,Math.abs(y-O)),w.push(g),k(l,_,y),k(l,O,v),k(l-b,y,O),k(l+b,y,O),A(l,b/2,_),A(l,b/2,v),A(l,b,y),A(l,b,O),A(l,b,n.yToPx(o),Math.max(2,x*1.6));for(let e=j;e<C.length;e+=4)T.push(g);let M=h?.[r];if(M)for(let t of M){let r=n.horizontal?{x:n.yToPx(t),y:l}:{x:l,y:n.yToPx(t)};E.push(r.x,r.y,e.pointSize),D.push(g)}}let j=[{kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:v(n,S),colors:w,opacity:e.opacity},{kind:`bars`,seriesIndex:e.index,color:e.colorCss,rects:v(n,C),colors:T}];return E.length&&j.push({kind:`dots`,seriesIndex:e.index,opacity:.85,dots:E,colors:D}),j};exports.createChartController=h,exports.scenePrimitives=y;
3
3
  //# sourceMappingURL=controller.cjs.map