minerva-design 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (824) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +3072 -611
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +595 -5
  7. package/dist/charts/canvas.d.cts +4 -3
  8. package/dist/charts/canvas.d.ts +4 -3
  9. package/dist/charts/core.cjs +1 -1
  10. package/dist/charts/core.d.cts +6 -4
  11. package/dist/charts/core.d.ts +6 -4
  12. package/dist/charts/core.js +24 -16
  13. package/dist/charts/engine/axis.cjs +1 -1
  14. package/dist/charts/engine/axis.cjs.map +1 -1
  15. package/dist/charts/engine/axis.js +42 -19
  16. package/dist/charts/engine/axis.js.map +1 -1
  17. package/dist/charts/engine/canvas.cjs +1 -1
  18. package/dist/charts/engine/canvas.cjs.map +1 -1
  19. package/dist/charts/engine/canvas.js +155 -127
  20. package/dist/charts/engine/canvas.js.map +1 -1
  21. package/dist/charts/engine/chart.cjs +1 -1
  22. package/dist/charts/engine/chart.cjs.map +1 -1
  23. package/dist/charts/engine/chart.js +370 -255
  24. package/dist/charts/engine/chart.js.map +1 -1
  25. package/dist/charts/engine/color.cjs +1 -1
  26. package/dist/charts/engine/color.cjs.map +1 -1
  27. package/dist/charts/engine/color.d.cts +18 -0
  28. package/dist/charts/engine/color.d.ts +18 -0
  29. package/dist/charts/engine/color.js +48 -2
  30. package/dist/charts/engine/color.js.map +1 -1
  31. package/dist/charts/engine/controller.cjs +2 -2
  32. package/dist/charts/engine/controller.cjs.map +1 -1
  33. package/dist/charts/engine/controller.d.cts +34 -1
  34. package/dist/charts/engine/controller.d.ts +34 -1
  35. package/dist/charts/engine/controller.js +318 -273
  36. package/dist/charts/engine/controller.js.map +1 -1
  37. package/dist/charts/engine/data.cjs +1 -1
  38. package/dist/charts/engine/data.cjs.map +1 -1
  39. package/dist/charts/engine/data.d.cts +3 -1
  40. package/dist/charts/engine/data.d.ts +3 -1
  41. package/dist/charts/engine/data.js +6 -4
  42. package/dist/charts/engine/data.js.map +1 -1
  43. package/dist/charts/engine/defaults.cjs +2 -0
  44. package/dist/charts/engine/defaults.cjs.map +1 -0
  45. package/dist/charts/engine/defaults.d.cts +20 -0
  46. package/dist/charts/engine/defaults.d.ts +20 -0
  47. package/dist/charts/engine/defaults.js +35 -0
  48. package/dist/charts/engine/defaults.js.map +1 -0
  49. package/dist/charts/engine/format.cjs +1 -1
  50. package/dist/charts/engine/format.cjs.map +1 -1
  51. package/dist/charts/engine/format.d.cts +6 -0
  52. package/dist/charts/engine/format.d.ts +6 -0
  53. package/dist/charts/engine/format.js +15 -2
  54. package/dist/charts/engine/format.js.map +1 -1
  55. package/dist/charts/engine/graph/chart.cjs +2 -0
  56. package/dist/charts/engine/graph/chart.cjs.map +1 -0
  57. package/dist/charts/engine/graph/chart.d.cts +3 -0
  58. package/dist/charts/engine/graph/chart.d.ts +3 -0
  59. package/dist/charts/engine/graph/chart.js +1708 -0
  60. package/dist/charts/engine/graph/chart.js.map +1 -0
  61. package/dist/charts/engine/graph/circular.cjs +2 -0
  62. package/dist/charts/engine/graph/circular.cjs.map +1 -0
  63. package/dist/charts/engine/graph/circular.d.cts +16 -0
  64. package/dist/charts/engine/graph/circular.d.ts +16 -0
  65. package/dist/charts/engine/graph/circular.js +62 -0
  66. package/dist/charts/engine/graph/circular.js.map +1 -0
  67. package/dist/charts/engine/graph/dag.cjs +2 -0
  68. package/dist/charts/engine/graph/dag.cjs.map +1 -0
  69. package/dist/charts/engine/graph/dag.d.cts +34 -0
  70. package/dist/charts/engine/graph/dag.d.ts +34 -0
  71. package/dist/charts/engine/graph/dag.js +339 -0
  72. package/dist/charts/engine/graph/dag.js.map +1 -0
  73. package/dist/charts/engine/graph/dom.cjs +2 -0
  74. package/dist/charts/engine/graph/dom.cjs.map +1 -0
  75. package/dist/charts/engine/graph/dom.d.cts +23 -0
  76. package/dist/charts/engine/graph/dom.d.ts +23 -0
  77. package/dist/charts/engine/graph/dom.js +158 -0
  78. package/dist/charts/engine/graph/dom.js.map +1 -0
  79. package/dist/charts/engine/graph/force.cjs +2 -0
  80. package/dist/charts/engine/graph/force.cjs.map +1 -0
  81. package/dist/charts/engine/graph/force.d.cts +76 -0
  82. package/dist/charts/engine/graph/force.d.ts +76 -0
  83. package/dist/charts/engine/graph/force.js +423 -0
  84. package/dist/charts/engine/graph/force.js.map +1 -0
  85. package/dist/charts/engine/graph/geometry.cjs +2 -0
  86. package/dist/charts/engine/graph/geometry.cjs.map +1 -0
  87. package/dist/charts/engine/graph/geometry.d.cts +50 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +50 -0
  89. package/dist/charts/engine/graph/geometry.js +197 -0
  90. package/dist/charts/engine/graph/geometry.js.map +1 -0
  91. package/dist/charts/engine/graph/index.cjs +1 -0
  92. package/dist/charts/engine/graph/index.d.cts +6 -0
  93. package/dist/charts/engine/graph/index.d.ts +6 -0
  94. package/dist/charts/engine/graph/index.js +6 -0
  95. package/dist/charts/engine/graph/labels.cjs +2 -0
  96. package/dist/charts/engine/graph/labels.cjs.map +1 -0
  97. package/dist/charts/engine/graph/labels.d.cts +12 -0
  98. package/dist/charts/engine/graph/labels.d.ts +12 -0
  99. package/dist/charts/engine/graph/labels.js +128 -0
  100. package/dist/charts/engine/graph/labels.js.map +1 -0
  101. package/dist/charts/engine/graph/model.cjs +2 -0
  102. package/dist/charts/engine/graph/model.cjs.map +1 -0
  103. package/dist/charts/engine/graph/model.d.cts +52 -0
  104. package/dist/charts/engine/graph/model.d.ts +52 -0
  105. package/dist/charts/engine/graph/model.js +108 -0
  106. package/dist/charts/engine/graph/model.js.map +1 -0
  107. package/dist/charts/engine/graph/sizing.cjs +2 -0
  108. package/dist/charts/engine/graph/sizing.cjs.map +1 -0
  109. package/dist/charts/engine/graph/sizing.d.cts +33 -0
  110. package/dist/charts/engine/graph/sizing.d.ts +33 -0
  111. package/dist/charts/engine/graph/sizing.js +60 -0
  112. package/dist/charts/engine/graph/sizing.js.map +1 -0
  113. package/dist/charts/engine/graph/tree.cjs +2 -0
  114. package/dist/charts/engine/graph/tree.cjs.map +1 -0
  115. package/dist/charts/engine/graph/tree.d.cts +30 -0
  116. package/dist/charts/engine/graph/tree.d.ts +30 -0
  117. package/dist/charts/engine/graph/tree.js +218 -0
  118. package/dist/charts/engine/graph/tree.js.map +1 -0
  119. package/dist/charts/engine/graph/types.d.cts +640 -0
  120. package/dist/charts/engine/graph/types.d.ts +640 -0
  121. package/dist/charts/engine/graph/worker.cjs +52 -0
  122. package/dist/charts/engine/graph/worker.cjs.map +1 -0
  123. package/dist/charts/engine/graph/worker.d.cts +36 -0
  124. package/dist/charts/engine/graph/worker.d.ts +36 -0
  125. package/dist/charts/engine/graph/worker.js +135 -0
  126. package/dist/charts/engine/graph/worker.js.map +1 -0
  127. package/dist/charts/engine/items.cjs +1 -1
  128. package/dist/charts/engine/items.cjs.map +1 -1
  129. package/dist/charts/engine/items.d.cts +15 -2
  130. package/dist/charts/engine/items.d.ts +15 -2
  131. package/dist/charts/engine/items.js +131 -112
  132. package/dist/charts/engine/items.js.map +1 -1
  133. package/dist/charts/engine/labels.cjs +1 -1
  134. package/dist/charts/engine/labels.cjs.map +1 -1
  135. package/dist/charts/engine/labels.d.cts +17 -0
  136. package/dist/charts/engine/labels.d.ts +17 -0
  137. package/dist/charts/engine/labels.js +28 -4
  138. package/dist/charts/engine/labels.js.map +1 -1
  139. package/dist/charts/engine/layout.cjs +1 -1
  140. package/dist/charts/engine/layout.cjs.map +1 -1
  141. package/dist/charts/engine/layout.d.cts +9 -0
  142. package/dist/charts/engine/layout.d.ts +9 -0
  143. package/dist/charts/engine/layout.js +11 -2
  144. package/dist/charts/engine/layout.js.map +1 -1
  145. package/dist/charts/engine/model.cjs +1 -1
  146. package/dist/charts/engine/model.cjs.map +1 -1
  147. package/dist/charts/engine/model.d.cts +73 -3
  148. package/dist/charts/engine/model.d.ts +73 -3
  149. package/dist/charts/engine/model.js +258 -154
  150. package/dist/charts/engine/model.js.map +1 -1
  151. package/dist/charts/engine/orderbook/field.cjs +37 -0
  152. package/dist/charts/engine/orderbook/field.cjs.map +1 -0
  153. package/dist/charts/engine/orderbook/field.d.cts +92 -0
  154. package/dist/charts/engine/orderbook/field.d.ts +92 -0
  155. package/dist/charts/engine/orderbook/field.js +297 -0
  156. package/dist/charts/engine/orderbook/field.js.map +1 -0
  157. package/dist/charts/engine/orderbook/format.cjs +1 -1
  158. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  159. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  160. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  161. package/dist/charts/engine/orderbook/format.js +5 -5
  162. package/dist/charts/engine/orderbook/format.js.map +1 -1
  163. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  164. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  165. package/dist/charts/engine/orderbook/heatmap.js +566 -475
  166. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  167. package/dist/charts/engine/orderbook/host.cjs +1 -1
  168. package/dist/charts/engine/orderbook/host.cjs.map +1 -1
  169. package/dist/charts/engine/orderbook/host.d.cts +8 -1
  170. package/dist/charts/engine/orderbook/host.d.ts +8 -1
  171. package/dist/charts/engine/orderbook/host.js +27 -5
  172. package/dist/charts/engine/orderbook/host.js.map +1 -1
  173. package/dist/charts/engine/orderbook/ladder.cjs +1 -1
  174. package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
  175. package/dist/charts/engine/orderbook/ladder.js +1 -1
  176. package/dist/charts/engine/orderbook/ladder.js.map +1 -1
  177. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  178. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  179. package/dist/charts/engine/orderbook/layout.d.cts +42 -0
  180. package/dist/charts/engine/orderbook/layout.d.ts +42 -0
  181. package/dist/charts/engine/orderbook/layout.js +76 -0
  182. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  183. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  184. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  185. package/dist/charts/engine/orderbook/tape.js +4 -4
  186. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  187. package/dist/charts/engine/orderbook/types.d.cts +27 -3
  188. package/dist/charts/engine/orderbook/types.d.ts +27 -3
  189. package/dist/charts/engine/overlay.cjs +1 -1
  190. package/dist/charts/engine/overlay.cjs.map +1 -1
  191. package/dist/charts/engine/overlay.d.cts +27 -0
  192. package/dist/charts/engine/overlay.d.ts +27 -0
  193. package/dist/charts/engine/overlay.js +34 -12
  194. package/dist/charts/engine/overlay.js.map +1 -1
  195. package/dist/charts/engine/presets.cjs +2 -2
  196. package/dist/charts/engine/presets.cjs.map +1 -1
  197. package/dist/charts/engine/presets.d.cts +35 -3
  198. package/dist/charts/engine/presets.d.ts +35 -3
  199. package/dist/charts/engine/presets.js +121 -101
  200. package/dist/charts/engine/presets.js.map +1 -1
  201. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  202. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  203. package/dist/charts/engine/renderers/canvas2d.js +13 -9
  204. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  205. package/dist/charts/engine/renderers/detect.cjs +1 -1
  206. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  207. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  208. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  209. package/dist/charts/engine/renderers/detect.js +23 -21
  210. package/dist/charts/engine/renderers/detect.js.map +1 -1
  211. package/dist/charts/engine/renderers/follow.cjs +2 -0
  212. package/dist/charts/engine/renderers/follow.cjs.map +1 -0
  213. package/dist/charts/engine/renderers/follow.d.cts +8 -0
  214. package/dist/charts/engine/renderers/follow.d.ts +8 -0
  215. package/dist/charts/engine/renderers/follow.js +10 -0
  216. package/dist/charts/engine/renderers/follow.js.map +1 -0
  217. package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
  218. package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
  219. package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
  220. package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
  221. package/dist/charts/engine/renderers/gl-budget.js +95 -0
  222. package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
  223. package/dist/charts/engine/renderers/gl.cjs +1 -1
  224. package/dist/charts/engine/renderers/gl.cjs.map +1 -1
  225. package/dist/charts/engine/renderers/gl.js +1 -1
  226. package/dist/charts/engine/renderers/gl.js.map +1 -1
  227. package/dist/charts/engine/renderers/shaders.cjs +9 -6
  228. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  229. package/dist/charts/engine/renderers/shaders.d.cts +1 -1
  230. package/dist/charts/engine/renderers/shaders.d.ts +1 -1
  231. package/dist/charts/engine/renderers/shaders.js +9 -6
  232. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  233. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  234. package/dist/charts/engine/renderers/types.d.cts +2 -0
  235. package/dist/charts/engine/renderers/types.d.ts +2 -0
  236. package/dist/charts/engine/renderers/types.js.map +1 -1
  237. package/dist/charts/engine/renderers/webgl.cjs +1 -1
  238. package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
  239. package/dist/charts/engine/renderers/webgl.js +85 -64
  240. package/dist/charts/engine/renderers/webgl.js.map +1 -1
  241. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  242. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  243. package/dist/charts/engine/renderers/webgl2.js +72 -58
  244. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  245. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  246. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  247. package/dist/charts/engine/renderers/webgpu.js +1 -1
  248. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  249. package/dist/charts/engine/scene.cjs +1 -1
  250. package/dist/charts/engine/scene.cjs.map +1 -1
  251. package/dist/charts/engine/scene.d.cts +104 -4
  252. package/dist/charts/engine/scene.d.ts +104 -4
  253. package/dist/charts/engine/scene.js +412 -193
  254. package/dist/charts/engine/scene.js.map +1 -1
  255. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  256. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  257. package/dist/charts/engine/shapes/bullet.js +110 -110
  258. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  259. package/dist/charts/engine/shapes/chart.cjs +1 -1
  260. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  261. package/dist/charts/engine/shapes/chart.js +4 -1
  262. package/dist/charts/engine/shapes/chart.js.map +1 -1
  263. package/dist/charts/engine/shapes/chord.cjs +2 -0
  264. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  265. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  266. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  267. package/dist/charts/engine/shapes/chord.js +419 -0
  268. package/dist/charts/engine/shapes/chord.js.map +1 -0
  269. package/dist/charts/engine/shapes/draw.cjs +1 -1
  270. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  271. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  272. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  273. package/dist/charts/engine/shapes/draw.js +47 -17
  274. package/dist/charts/engine/shapes/draw.js.map +1 -1
  275. package/dist/charts/engine/shapes/hit.cjs +1 -1
  276. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  277. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  278. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  279. package/dist/charts/engine/shapes/hit.js +75 -46
  280. package/dist/charts/engine/shapes/hit.js.map +1 -1
  281. package/dist/charts/engine/shapes/index.d.cts +3 -2
  282. package/dist/charts/engine/shapes/index.d.ts +3 -2
  283. package/dist/charts/engine/shapes/labels.cjs +1 -1
  284. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  285. package/dist/charts/engine/shapes/labels.js +12 -4
  286. package/dist/charts/engine/shapes/labels.js.map +1 -1
  287. package/dist/charts/engine/shapes/layout.cjs +2 -2
  288. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  289. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  290. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  291. package/dist/charts/engine/shapes/layout.js +106 -78
  292. package/dist/charts/engine/shapes/layout.js.map +1 -1
  293. package/dist/charts/engine/shapes/scene.cjs +1 -1
  294. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  295. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  296. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  297. package/dist/charts/engine/shapes/scene.js +62 -19
  298. package/dist/charts/engine/shapes/scene.js.map +1 -1
  299. package/dist/charts/engine/shapes/types.d.cts +121 -8
  300. package/dist/charts/engine/shapes/types.d.ts +121 -8
  301. package/dist/charts/engine/signature.cjs +1 -1
  302. package/dist/charts/engine/signature.cjs.map +1 -1
  303. package/dist/charts/engine/signature.js +1 -1
  304. package/dist/charts/engine/signature.js.map +1 -1
  305. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  306. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  307. package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
  308. package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
  309. package/dist/charts/engine/three-d/canvas2d.js +166 -67
  310. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  311. package/dist/charts/engine/three-d/chart.cjs +1 -1
  312. package/dist/charts/engine/three-d/chart.cjs.map +1 -1
  313. package/dist/charts/engine/three-d/chart.js +219 -215
  314. package/dist/charts/engine/three-d/chart.js.map +1 -1
  315. package/dist/charts/engine/three-d/detect.cjs +1 -1
  316. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  317. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  318. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  319. package/dist/charts/engine/three-d/detect.js +22 -20
  320. package/dist/charts/engine/three-d/detect.js.map +1 -1
  321. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  322. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  323. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  324. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  325. package/dist/charts/engine/three-d/geometry.js +106 -90
  326. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  327. package/dist/charts/engine/three-d/model.cjs +1 -1
  328. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  329. package/dist/charts/engine/three-d/model.d.cts +2 -0
  330. package/dist/charts/engine/three-d/model.d.ts +2 -0
  331. package/dist/charts/engine/three-d/model.js +2 -0
  332. package/dist/charts/engine/three-d/model.js.map +1 -1
  333. package/dist/charts/engine/three-d/oit.cjs +109 -0
  334. package/dist/charts/engine/three-d/oit.cjs.map +1 -0
  335. package/dist/charts/engine/three-d/oit.d.cts +34 -0
  336. package/dist/charts/engine/three-d/oit.d.ts +34 -0
  337. package/dist/charts/engine/three-d/oit.js +111 -0
  338. package/dist/charts/engine/three-d/oit.js.map +1 -0
  339. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  340. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  341. package/dist/charts/engine/three-d/overlay.js +43 -36
  342. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  343. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  344. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  345. package/dist/charts/engine/three-d/render-types.d.cts +37 -3
  346. package/dist/charts/engine/three-d/render-types.d.ts +37 -3
  347. package/dist/charts/engine/three-d/render-types.js +6 -10
  348. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  349. package/dist/charts/engine/three-d/shaders.cjs +109 -48
  350. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  351. package/dist/charts/engine/three-d/shaders.d.cts +12 -5
  352. package/dist/charts/engine/three-d/shaders.d.ts +12 -5
  353. package/dist/charts/engine/three-d/shaders.js +118 -55
  354. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  355. package/dist/charts/engine/three-d/sort.cjs +1 -1
  356. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  357. package/dist/charts/engine/three-d/sort.d.cts +18 -5
  358. package/dist/charts/engine/three-d/sort.d.ts +18 -5
  359. package/dist/charts/engine/three-d/sort.js +129 -43
  360. package/dist/charts/engine/three-d/sort.js.map +1 -1
  361. package/dist/charts/engine/three-d/types.d.cts +36 -0
  362. package/dist/charts/engine/three-d/types.d.ts +36 -0
  363. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  364. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  365. package/dist/charts/engine/three-d/webgl.d.cts +9 -0
  366. package/dist/charts/engine/three-d/webgl.d.ts +9 -0
  367. package/dist/charts/engine/three-d/webgl.js +199 -74
  368. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  369. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  370. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  371. package/dist/charts/engine/three-d/webgpu.js +231 -94
  372. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  373. package/dist/charts/engine/trading/chart.cjs +1 -1
  374. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  375. package/dist/charts/engine/trading/chart.d.cts +10 -1
  376. package/dist/charts/engine/trading/chart.d.ts +10 -1
  377. package/dist/charts/engine/trading/chart.js +1677 -813
  378. package/dist/charts/engine/trading/chart.js.map +1 -1
  379. package/dist/charts/engine/trading/drawings.cjs +2 -1
  380. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  381. package/dist/charts/engine/trading/drawings.d.cts +53 -9
  382. package/dist/charts/engine/trading/drawings.d.ts +53 -9
  383. package/dist/charts/engine/trading/drawings.js +346 -71
  384. package/dist/charts/engine/trading/drawings.js.map +1 -1
  385. package/dist/charts/engine/trading/format.cjs +1 -1
  386. package/dist/charts/engine/trading/format.cjs.map +1 -1
  387. package/dist/charts/engine/trading/format.d.cts +19 -0
  388. package/dist/charts/engine/trading/format.d.ts +19 -0
  389. package/dist/charts/engine/trading/format.js +65 -21
  390. package/dist/charts/engine/trading/format.js.map +1 -1
  391. package/dist/charts/engine/trading/geometry.cjs +1 -1
  392. package/dist/charts/engine/trading/geometry.cjs.map +1 -1
  393. package/dist/charts/engine/trading/geometry.d.cts +16 -0
  394. package/dist/charts/engine/trading/geometry.d.ts +16 -0
  395. package/dist/charts/engine/trading/geometry.js +19 -4
  396. package/dist/charts/engine/trading/geometry.js.map +1 -1
  397. package/dist/charts/engine/trading/index.cjs +1 -1
  398. package/dist/charts/engine/trading/index.d.cts +2 -1
  399. package/dist/charts/engine/trading/index.d.ts +2 -1
  400. package/dist/charts/engine/trading/index.js +4 -3
  401. package/dist/charts/engine/trading/indicators.cjs +1 -1
  402. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  403. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  404. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  405. package/dist/charts/engine/trading/indicators.js +449 -173
  406. package/dist/charts/engine/trading/indicators.js.map +1 -1
  407. package/dist/charts/engine/trading/labels.cjs +1 -1
  408. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  409. package/dist/charts/engine/trading/labels.js +104 -4
  410. package/dist/charts/engine/trading/labels.js.map +1 -1
  411. package/dist/charts/engine/trading/store.cjs +1 -1
  412. package/dist/charts/engine/trading/store.cjs.map +1 -1
  413. package/dist/charts/engine/trading/store.d.cts +21 -0
  414. package/dist/charts/engine/trading/store.d.ts +21 -0
  415. package/dist/charts/engine/trading/store.js +22 -1
  416. package/dist/charts/engine/trading/store.js.map +1 -1
  417. package/dist/charts/engine/trading/studies.cjs +1 -1
  418. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  419. package/dist/charts/engine/trading/studies.d.cts +49 -8
  420. package/dist/charts/engine/trading/studies.d.ts +49 -8
  421. package/dist/charts/engine/trading/studies.js +352 -93
  422. package/dist/charts/engine/trading/studies.js.map +1 -1
  423. package/dist/charts/engine/trading/sync.cjs +2 -0
  424. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  425. package/dist/charts/engine/trading/sync.d.cts +8 -0
  426. package/dist/charts/engine/trading/sync.d.ts +8 -0
  427. package/dist/charts/engine/trading/sync.js +25 -0
  428. package/dist/charts/engine/trading/sync.js.map +1 -0
  429. package/dist/charts/engine/trading/types.d.cts +514 -16
  430. package/dist/charts/engine/trading/types.d.ts +514 -16
  431. package/dist/charts/engine/types.d.cts +106 -11
  432. package/dist/charts/engine/types.d.ts +106 -11
  433. package/dist/charts/index.cjs +1 -1
  434. package/dist/charts/index.d.cts +3 -2
  435. package/dist/charts/index.d.ts +3 -2
  436. package/dist/charts/index.js +30 -22
  437. package/dist/charts/react/charts.cjs +1 -1
  438. package/dist/charts/react/charts.cjs.map +1 -1
  439. package/dist/charts/react/charts.js +51 -34
  440. package/dist/charts/react/charts.js.map +1 -1
  441. package/dist/charts/react/graph.cjs +2 -0
  442. package/dist/charts/react/graph.cjs.map +1 -0
  443. package/dist/charts/react/graph.d.cts +219 -0
  444. package/dist/charts/react/graph.d.ts +219 -0
  445. package/dist/charts/react/graph.js +160 -0
  446. package/dist/charts/react/graph.js.map +1 -0
  447. package/dist/charts/react/orderbook.cjs +1 -1
  448. package/dist/charts/react/orderbook.cjs.map +1 -1
  449. package/dist/charts/react/orderbook.d.cts +3 -1
  450. package/dist/charts/react/orderbook.d.ts +3 -1
  451. package/dist/charts/react/orderbook.js +1 -0
  452. package/dist/charts/react/orderbook.js.map +1 -1
  453. package/dist/charts/react/shapes.cjs +1 -1
  454. package/dist/charts/react/shapes.cjs.map +1 -1
  455. package/dist/charts/react/shapes.d.cts +88 -4
  456. package/dist/charts/react/shapes.d.ts +88 -4
  457. package/dist/charts/react/shapes.js +55 -12
  458. package/dist/charts/react/shapes.js.map +1 -1
  459. package/dist/charts/react/three-d.cjs +1 -1
  460. package/dist/charts/react/three-d.cjs.map +1 -1
  461. package/dist/charts/react/three-d.d.cts +7 -0
  462. package/dist/charts/react/three-d.d.ts +7 -0
  463. package/dist/charts/react/three-d.js +14 -13
  464. package/dist/charts/react/three-d.js.map +1 -1
  465. package/dist/charts/react/trading.cjs +1 -1
  466. package/dist/charts/react/trading.cjs.map +1 -1
  467. package/dist/charts/react/trading.d.cts +54 -2
  468. package/dist/charts/react/trading.d.ts +54 -2
  469. package/dist/charts/react/trading.js +68 -37
  470. package/dist/charts/react/trading.js.map +1 -1
  471. package/dist/charts/react/types.d.cts +11 -0
  472. package/dist/charts/react/types.d.ts +11 -0
  473. package/dist/core/contracts.cjs +1 -1
  474. package/dist/core/contracts.cjs.map +1 -1
  475. package/dist/core/contracts.js +1 -1
  476. package/dist/core/contracts.js.map +1 -1
  477. package/dist/native/charts/src/canvas.cjs +1 -1
  478. package/dist/native/charts/src/canvas.js +5 -4
  479. package/dist/native/charts/src/engine/axis.cjs +1 -1
  480. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  481. package/dist/native/charts/src/engine/axis.js +42 -19
  482. package/dist/native/charts/src/engine/axis.js.map +1 -1
  483. package/dist/native/charts/src/engine/color.cjs +1 -1
  484. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  485. package/dist/native/charts/src/engine/color.js +47 -5
  486. package/dist/native/charts/src/engine/color.js.map +1 -1
  487. package/dist/native/charts/src/engine/controller.cjs +2 -2
  488. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  489. package/dist/native/charts/src/engine/controller.js +296 -251
  490. package/dist/native/charts/src/engine/controller.js.map +1 -1
  491. package/dist/native/charts/src/engine/data.cjs +1 -1
  492. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  493. package/dist/native/charts/src/engine/data.js +6 -4
  494. package/dist/native/charts/src/engine/data.js.map +1 -1
  495. package/dist/native/charts/src/engine/format.cjs +1 -1
  496. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  497. package/dist/native/charts/src/engine/format.js +15 -2
  498. package/dist/native/charts/src/engine/format.js.map +1 -1
  499. package/dist/native/charts/src/engine/labels.cjs +1 -1
  500. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  501. package/dist/native/charts/src/engine/labels.js +42 -5
  502. package/dist/native/charts/src/engine/labels.js.map +1 -1
  503. package/dist/native/charts/src/engine/layout.cjs +1 -1
  504. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  505. package/dist/native/charts/src/engine/layout.js +11 -2
  506. package/dist/native/charts/src/engine/layout.js.map +1 -1
  507. package/dist/native/charts/src/engine/model.cjs +1 -1
  508. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  509. package/dist/native/charts/src/engine/model.js +278 -174
  510. package/dist/native/charts/src/engine/model.js.map +1 -1
  511. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  512. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  513. package/dist/native/charts/src/engine/presets.cjs +2 -2
  514. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  515. package/dist/native/charts/src/engine/presets.js +110 -90
  516. package/dist/native/charts/src/engine/presets.js.map +1 -1
  517. package/dist/native/charts/src/engine/scene.cjs +1 -1
  518. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  519. package/dist/native/charts/src/engine/scene.js +421 -202
  520. package/dist/native/charts/src/engine/scene.js.map +1 -1
  521. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  522. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  523. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  524. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  525. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  526. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  527. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  528. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  529. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  530. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  531. package/dist/native/charts/src/engine/shapes/chord.js +419 -0
  532. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  533. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  534. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  535. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  536. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  537. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  538. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  539. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  540. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  541. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  542. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  543. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  544. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  545. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  546. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  547. package/dist/native/charts/src/engine/shapes/layout.js +136 -94
  548. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  549. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  550. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  551. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  552. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  553. package/dist/native/components/Chart/ChartBase.cjs +1 -1
  554. package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
  555. package/dist/native/components/Chart/ChartBase.js +127 -115
  556. package/dist/native/components/Chart/ChartBase.js.map +1 -1
  557. package/dist/native/components/Chart/charts.cjs +1 -1
  558. package/dist/native/components/Chart/charts.cjs.map +1 -1
  559. package/dist/native/components/Chart/charts.js +8 -5
  560. package/dist/native/components/Chart/charts.js.map +1 -1
  561. package/dist/native/components/Chart/scene.cjs +1 -1
  562. package/dist/native/components/Chart/scene.cjs.map +1 -1
  563. package/dist/native/components/Chart/scene.d.cts +6 -1
  564. package/dist/native/components/Chart/scene.d.ts +6 -1
  565. package/dist/native/components/Chart/scene.js +226 -108
  566. package/dist/native/components/Chart/scene.js.map +1 -1
  567. package/dist/native/components/Chart/types.d.cts +7 -1
  568. package/dist/native/components/Chart/types.d.ts +7 -1
  569. package/dist/native/components/Charts/charts.cjs +1 -1
  570. package/dist/native/components/Charts/charts.cjs.map +1 -1
  571. package/dist/native/components/Charts/charts.js +60 -43
  572. package/dist/native/components/Charts/charts.js.map +1 -1
  573. package/dist/native/components/Charts/types.d.cts +11 -0
  574. package/dist/native/components/Charts/types.d.ts +11 -0
  575. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  576. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  577. package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
  578. package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
  579. package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
  580. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  581. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  582. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  583. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  584. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  585. package/dist/native/components/ShapeChart/charts.js +138 -96
  586. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  587. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  588. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  589. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  590. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  591. package/dist/native/components/ShapeChart/draw.js +26 -17
  592. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  593. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  594. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  595. package/dist/native/components/ShapeChart/geometry.js +233 -70
  596. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  597. package/dist/native/components/ShapeChart/index.cjs +1 -1
  598. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  599. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  600. package/dist/native/components/ShapeChart/index.js +2 -2
  601. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  602. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  603. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  604. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  605. package/dist/native/components/ShapeChart/recorder.js +19 -10
  606. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  607. package/dist/native/components/ShapeChart/types.d.cts +95 -8
  608. package/dist/native/components/ShapeChart/types.d.ts +95 -8
  609. package/dist/native/index.cjs +1 -1
  610. package/dist/native/index.js +2 -2
  611. package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
  612. package/dist/native/source/components/Chart/charts.tsx +10 -3
  613. package/dist/native/source/components/Chart/scene.tsx +243 -14
  614. package/dist/native/source/components/Chart/types.ts +7 -0
  615. package/dist/native/source/components/Charts/charts.tsx +37 -2
  616. package/dist/native/source/components/Charts/types.ts +11 -0
  617. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
  618. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  619. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  620. package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
  621. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  622. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  623. package/dist/native/source/components/ShapeChart/types.ts +99 -6
  624. package/dist/native/source/manifest.ts +1 -0
  625. package/dist/taro/chart-a11y.d.ts +7 -0
  626. package/dist/taro/charts.d.ts +29 -6
  627. package/dist/taro/index.js +3129 -1902
  628. package/dist/taro/shape-charts.d.ts +99 -5
  629. package/dist/uni/AreaChart.vue +2 -1
  630. package/dist/uni/AreaChart.vue.d.ts +5 -1
  631. package/dist/uni/Badge.vue.d.ts +1 -1
  632. package/dist/uni/BarChart.vue +2 -1
  633. package/dist/uni/BarChart.vue.d.ts +5 -1
  634. package/dist/uni/BoxPlotChart.vue +2 -1
  635. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  636. package/dist/uni/BubbleChart.vue +2 -1
  637. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  638. package/dist/uni/BulletChart.vue.d.ts +4 -0
  639. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  640. package/dist/uni/CandlestickChart.vue +2 -1
  641. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  642. package/dist/uni/Chart.vue +2 -1
  643. package/dist/uni/Chart.vue.d.ts +4 -0
  644. package/dist/uni/ChordChart.vue +93 -0
  645. package/dist/uni/ChordChart.vue.d.ts +136 -0
  646. package/dist/uni/Divider.vue.d.ts +1 -1
  647. package/dist/uni/DonutChart.vue.d.ts +5 -1
  648. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  649. package/dist/uni/GanttChart.vue +2 -1
  650. package/dist/uni/GanttChart.vue.d.ts +15 -0
  651. package/dist/uni/GaugeChart.vue.d.ts +5 -1
  652. package/dist/uni/HeatmapChart.vue +2 -1
  653. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  654. package/dist/uni/HistogramChart.vue +2 -1
  655. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  656. package/dist/uni/HorizontalBarChart.vue +2 -1
  657. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  658. package/dist/uni/LineChart.vue +2 -1
  659. package/dist/uni/LineChart.vue.d.ts +4 -0
  660. package/dist/uni/MixedChart.vue +2 -1
  661. package/dist/uni/MixedChart.vue.d.ts +4 -0
  662. package/dist/uni/PieChart.vue.d.ts +5 -1
  663. package/dist/uni/QuadrantChart.vue +2 -1
  664. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  665. package/dist/uni/RadarChart.vue.d.ts +4 -0
  666. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  667. package/dist/uni/RangeAreaChart.vue +2 -1
  668. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  669. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  670. package/dist/uni/ScatterChart.vue +2 -1
  671. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  672. package/dist/uni/Sparkline.vue +2 -1
  673. package/dist/uni/Sparkline.vue.d.ts +4 -0
  674. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  675. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  676. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  677. package/dist/uni/WaterfallChart.vue +2 -1
  678. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  679. package/dist/uni/chart-a11y.d.ts +7 -0
  680. package/dist/uni/chart-a11y.js +29 -0
  681. package/dist/uni/chart-canvas.d.ts +12 -0
  682. package/dist/uni/chart-canvas.js +15 -1
  683. package/dist/uni/chart-types.d.ts +36 -5
  684. package/dist/uni/chart-types.js +31 -3
  685. package/dist/uni/charts-canvas.js +3 -2
  686. package/dist/uni/index.d.ts +2 -1
  687. package/dist/uni/index.js +1 -0
  688. package/dist/uni/manifest.d.ts +7 -0
  689. package/dist/uni/manifest.js +10 -0
  690. package/dist/uni/named-chart-options.d.ts +11 -2
  691. package/dist/uni/named-chart-options.js +21 -1
  692. package/dist/uni/shape-chart-canvas.d.ts +3 -3
  693. package/dist/uni/shape-chart-canvas.js +17 -58
  694. package/dist/uni/shape-chart-types.d.ts +53 -3
  695. package/dist/uni/shape-chart-types.js +45 -1
  696. package/dist/vue/charts-global.d.ts +48 -0
  697. package/dist/vue/charts.d.ts +18 -0
  698. package/dist/vue/charts.js +56 -0
  699. package/dist/vue/charts.js.map +1 -0
  700. package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
  701. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  702. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  703. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  704. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  705. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  706. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  707. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  708. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  709. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  710. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
  711. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  712. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  713. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  714. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  715. package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
  716. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  717. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
  718. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  719. package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
  720. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  721. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  722. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  723. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  724. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  725. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  726. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  727. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  728. package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
  729. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  730. package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
  731. package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
  732. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  733. package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
  734. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  735. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  736. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  737. package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
  738. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  739. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  740. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  741. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  742. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  743. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  744. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  745. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  746. package/dist/vue/components/Chart/graph.d.ts +156 -0
  747. package/dist/vue/components/Chart/graph.js +137 -0
  748. package/dist/vue/components/Chart/graph.js.map +1 -0
  749. package/dist/vue/components/Chart/index.d.ts +5 -1
  750. package/dist/vue/components/Chart/index.js +5 -1
  751. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  752. package/dist/vue/components/Chart/orderbook.js +2 -0
  753. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  754. package/dist/vue/components/Chart/three-d.d.ts +3 -0
  755. package/dist/vue/components/Chart/three-d.js +2 -0
  756. package/dist/vue/components/Chart/three-d.js.map +1 -1
  757. package/dist/vue/components/Chart/trading.d.ts +30 -3
  758. package/dist/vue/components/Chart/trading.js +9 -0
  759. package/dist/vue/components/Chart/trading.js.map +1 -1
  760. package/dist/vue/components/Chart/types.d.ts +74 -2
  761. package/dist/vue/global.d.ts +2 -38
  762. package/dist/vue/groups/charts.js +10 -2
  763. package/dist/vue/groups/charts.js.map +1 -1
  764. package/dist/vue/index.js +6 -2
  765. package/dist/vue/internal/register.d.ts +7 -0
  766. package/dist/vue/internal/register.js +14 -0
  767. package/dist/vue/internal/register.js.map +1 -0
  768. package/dist/vue/plugin.d.ts +9 -4
  769. package/dist/vue/plugin.js +6 -11
  770. package/dist/vue/plugin.js.map +1 -1
  771. package/dist/weapp/area-chart/index.wxml +1 -1
  772. package/dist/weapp/bar-chart/index.wxml +1 -1
  773. package/dist/weapp/box-plot-chart/index.wxml +1 -1
  774. package/dist/weapp/bubble-chart/index.wxml +1 -1
  775. package/dist/weapp/candlestick-chart/index.wxml +1 -1
  776. package/dist/weapp/chart/index.wxml +1 -1
  777. package/dist/weapp/charts/canvas.js +1987 -175
  778. package/dist/weapp/charts/core.js +3 -0
  779. package/dist/weapp/chord-chart/index.js +1 -0
  780. package/dist/weapp/chord-chart/index.json +1 -0
  781. package/dist/weapp/chord-chart/index.wxml +1 -0
  782. package/dist/weapp/chord-chart/index.wxss +1 -0
  783. package/dist/weapp/controls.js +148 -57
  784. package/dist/weapp/gantt-chart/index.wxml +1 -1
  785. package/dist/weapp/heatmap-chart/index.wxml +1 -1
  786. package/dist/weapp/histogram-chart/index.wxml +1 -1
  787. package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
  788. package/dist/weapp/line-chart/index.wxml +1 -1
  789. package/dist/weapp/mixed-chart/index.wxml +1 -1
  790. package/dist/weapp/quadrant-chart/index.wxml +1 -1
  791. package/dist/weapp/range-area-chart/index.wxml +1 -1
  792. package/dist/weapp/scatter-chart/index.wxml +1 -1
  793. package/dist/weapp/sparkline/index.wxml +1 -1
  794. package/dist/weapp/types.d.ts +96 -4
  795. package/dist/weapp/waterfall-chart/index.wxml +1 -1
  796. package/dist/web-components/components/chart/charts.d.ts +4 -2
  797. package/dist/web-components/components/chart/charts.js +8 -1
  798. package/dist/web-components/components/chart/charts.js.map +1 -1
  799. package/dist/web-components/components/chart/extended.d.ts +21 -7
  800. package/dist/web-components/components/chart/extended.js +29 -9
  801. package/dist/web-components/components/chart/extended.js.map +1 -1
  802. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  803. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  804. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  805. package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
  806. package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
  807. package/dist/web-components/components/graph/graph.d.ts +156 -0
  808. package/dist/web-components/components/graph/graph.js +150 -0
  809. package/dist/web-components/components/graph/graph.js.map +1 -0
  810. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  811. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  812. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  813. package/dist/web-components/elements/chart.d.ts +1 -1
  814. package/dist/web-components/elements/chart.js +6 -5
  815. package/dist/web-components/elements/chart.js.map +1 -1
  816. package/dist/web-components/elements/graph.d.ts +2 -0
  817. package/dist/web-components/elements/graph.js +12 -0
  818. package/dist/web-components/elements/graph.js.map +1 -0
  819. package/dist/web-components/html-custom-data.json +318 -4
  820. package/dist/web-components/types/react.d.ts +63 -4
  821. package/dist/web-components/types/solid.d.ts +55 -8
  822. package/dist/web-components/types/svelte.d.ts +55 -8
  823. package/dist/web-components/types/vue.d.ts +55 -4
  824. package/package.json +16 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scene.js","names":["DEFAULT_PADDING","fallbackResolve","fallback","resolveAnnotations","resolve","theme","annotations","a","color","mix","layoutChart","input","model","layoutHorizontal","yCount","height","yTicks","axisTicks","view","yLabelWidth","label","measure","y2Ticks","rightTicks","y2LabelWidth","categoryWidth","step","i","padding","plot","computePlot","xCount","xTicks","createScales","axis","map","raw","v","maxAbs","tick","tickFormatter","rows","xLabelWidth","names","name","collectPointLabels","labels","axisFormat","series","format","texts","top","x0","x1","count","xv","x","y","reversed","p","toScreen","s","y0","delta","text","xi","yi","d","size","slotOffset","pointOf","sc","plottedY","onColumn","pa","pb","b","ax","center","half","ay","candidateOf","alongX","px","py","alongY","inside","high","low","dotSize","maxSizes","maxDot","sizes","max","nearestScatter","radius","slop","at","toData","rx","ry","best","bestDist","gridOf","cellAt","hx","hy","found","yv","nearestX","sorted","nearestIndex","bestD","hoverItemOf","pc","index","toCss","extra","o","open","value","packed","unpackColor","q1","q3","out","outliers","eventOf","candidates","items","c","hitTest","margin","scatter","others","all","bestDx","bandPx","aligned","first","event","sameHover","it","CHANGE_PERCENT","tooltipContent","yFormat","formatOf","firstSeries","yName","valueRow","rowOf","binTitle","change","numberFormat","ohlc","stats","totals","stack","stackIdOf","total","row","k","formatPercent","seriesIndex","hoverMarks","marks","bandLo","bandHi","cx","cy","hw","hh","screenRect","rgba","pad","lo","hi","legendShape","type","showsCrosshair","crosshair","crosshairAt"],"sources":["../../../../charts/src/engine/scene.ts"],"sourcesContent":["// The DOM-free half of a chart: annotations, layout, point labels, hit\n// testing and tooltip content. Shared by createChart (DOM + GPU),\n// createCanvasChart (any 2D context) and the React Native views.\n\nimport { axisTicks, type AxisTicks } from \"./axis\";\nimport { mix, toCss, unpackColor, type Rgba } from \"./color\";\nimport { nearestIndex } from \"./data\";\nimport { formatPercent, tickFormatter } from \"./format\";\nimport { numberFormat } from \"./locale\";\nimport {\n alongX,\n alongY,\n computePlot,\n createScales,\n screenRect,\n toData,\n toScreen,\n type Rect,\n type Scales,\n} from \"./layout\";\nimport { gridOf, plottedY, type ChartModel, type SeriesModel } from \"./model\";\nimport type { PointLabel, ResolvedAnnotation } from \"./overlay\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAnnotation,\n ChartHoverEvent,\n ChartHoverItem,\n ChartPadding,\n ChartView,\n} from \"./types\";\n\nexport const MAX_POINT_LABELS = 300;\nexport const DEFAULT_PADDING = { top: 12, right: 16, bottom: 4, left: 4 };\n\nexport const fallbackResolve = (_value: string, fallback: Rgba) => fallback;\n\n/** Annotation colors resolved against the theme */\nexport const resolveAnnotations = (\n annotations: readonly ChartAnnotation[] | undefined,\n theme: ChartTheme,\n): ResolvedAnnotation[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n return (annotations ?? []).map((a) => {\n if (a.type === \"rect\") {\n const color = a.color ? resolve(a.color, theme.primary) : theme.primary;\n return {\n type: \"rect\",\n x0: a.x0,\n x1: a.x1,\n y0: a.y0,\n y1: a.y1,\n color,\n opacity: a.opacity ?? 0.08,\n label: a.label,\n labelPosition: a.labelPosition ?? \"top-left\",\n labelColor: a.labelColor\n ? resolve(a.labelColor, color)\n : mix(color, theme.text, 0.2),\n };\n }\n if (a.type === \"text\") {\n return {\n type: \"text\",\n x: a.x,\n y: a.y,\n text: a.text,\n anchor: a.anchor ?? \"center\",\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n weight: a.weight ?? 500,\n };\n }\n return {\n type: \"line\",\n axis: a.axis,\n value: a.value,\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n width: a.width ?? 1,\n dash: [...(a.dash ?? [4, 4])],\n label: a.label,\n };\n });\n};\n\nexport interface ChartLayout {\n plot: Rect;\n scales: Scales;\n xTicks: AxisTicks;\n yTicks: AxisTicks;\n /** Ticks of the right axis: at the left tick positions, labelled in right axis units */\n y2Ticks: AxisTicks | null;\n}\n\nexport interface LayoutInput {\n model: ChartModel;\n view: ChartView;\n theme: ChartTheme;\n /** Size of the drawing area (legend excluded), CSS pixels */\n width: number;\n height: number;\n padding?: ChartPadding;\n /** Offset of the drawing area (e.g. below a legend) */\n top?: number;\n /** Width of a tick label in the theme font */\n measure: (text: string) => number;\n}\n\n/** Ticks, room for the axes and the plot rectangle */\nexport const layoutChart = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n if (model.horizontal) return layoutHorizontal(input);\n // same count as the nice range of the model (its ends are then ticks),\n // fewer on short charts; category rows get a label each when they fit\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)))\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const yTicks = axisTicks(model.y, view.y, yCount);\n let yLabelWidth = 0;\n if (model.y.visible) {\n for (const label of yTicks.labels)\n yLabelWidth = Math.max(yLabelWidth, measure(label));\n }\n const y2Ticks = rightTicks(model, yTicks);\n let y2LabelWidth = 0;\n if (y2Ticks && model.y2?.visible) {\n for (const label of y2Ticks.labels)\n y2LabelWidth = Math.max(y2LabelWidth, measure(label));\n }\n let categoryWidth = 48;\n if (model.x.type === \"category\") {\n categoryWidth = 0;\n const step = Math.max(1, Math.floor(model.x.categories.length / 200));\n for (let i = 0; i < model.x.categories.length; i += step) {\n categoryWidth = Math.max(categoryWidth, measure(model.x.categories[i]));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.y.visible ? Math.ceil(yLabelWidth) : 0,\n y2LabelWidth: Math.ceil(y2LabelWidth),\n y2Title: !!model.y2?.title && !!model.y2.visible,\n xAxisVisible: model.x.visible,\n xTitle: !!model.x.title && model.x.visible,\n yTitle: !!model.y.title && model.y.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const xCount =\n model.x.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / (categoryWidth + 14)))\n : (model.x.tickCount ?? Math.max(3, Math.floor(plot.width / 88)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n const scales = createScales(plot, view, model.x.reverse, model.y.reverse);\n return { plot, scales, xTicks, yTicks, y2Ticks };\n};\n\n/** Right axis ticks: the left ticks labelled in right axis units */\nconst rightTicks = (model: ChartModel, yTicks: AxisTicks): AxisTicks | null => {\n const axis = model.y2;\n const map = model.y2Map;\n if (!axis || !map || !map.scale) return null;\n const raw = yTicks.values.map((v) => (v - map.offset) / map.scale);\n const step = raw.length > 1 ? Math.abs(raw[1] - raw[0]) : 1;\n let maxAbs = 0;\n for (const v of raw) maxAbs = Math.max(maxAbs, Math.abs(v));\n const tick = axis.format ?? tickFormatter(step, maxAbs, model.locale);\n return {\n values: yTicks.values,\n labels: raw.map(tick),\n formatValue: axis.format ?? model.formatValue,\n };\n};\n\n/** Horizontal charts: the x axis on the left, the values along the bottom */\nconst layoutHorizontal = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n const rows = Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)));\n const xCount =\n model.x.tickCount ??\n (model.x.type === \"category\"\n ? rows\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n let xLabelWidth = 0;\n if (model.x.visible) {\n if (model.x.type === \"category\") {\n // every name (the visible ones change when zooming)\n const names = model.x.categories;\n const step = Math.max(1, Math.floor(names.length / 200));\n for (let i = 0; i < names.length; i += step) {\n const name = model.x.format ? model.x.format(i) : names[i];\n xLabelWidth = Math.max(xLabelWidth, measure(name));\n }\n } else {\n for (const label of xTicks.labels)\n xLabelWidth = Math.max(xLabelWidth, measure(label));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.x.visible ? Math.ceil(xLabelWidth) : 0,\n xAxisVisible: model.y.visible,\n xTitle: !!model.y.title && model.y.visible,\n yTitle: !!model.x.title && model.x.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / 60))\n : Math.max(3, Math.min(8, Math.floor(plot.width / 88))));\n const yTicks = axisTicks(model.y, view.y, yCount);\n const scales = createScales(\n plot,\n view,\n model.x.reverse,\n model.y.reverse,\n true,\n );\n return { plot, scales, xTicks, yTicks, y2Ticks: null };\n};\n\n/** Labels of the visible scatter points and bar values (`showLabels`) */\nexport const collectPointLabels = (\n model: ChartModel,\n view: ChartView,\n s: Scales,\n yTicks?: AxisTicks | null,\n): PointLabel[] => {\n const labels: PointLabel[] = [];\n // 100% stacks: the axis shows percents, the labels the actual values\n const axisFormat = model.percent\n ? model.formatValue\n : (yTicks?.formatValue ?? model.formatValue);\n for (const series of model.series) {\n if (series.hidden || !series.showLabels) continue;\n if (series.type === \"bar\" && series.barTop) {\n // 100% stacks and right axis series: the values of the data\n const format =\n series.format ??\n (series.yAxis === \"right\"\n ? (model.y2?.format ?? model.formatValue)\n : axisFormat);\n const { x, count } = series.cols;\n const { y, y0, labels: texts } = series.raw;\n const top = series.barTop;\n const [x0, x1] = view.x[0] <= view.x[1] ? view.x : [view.x[1], view.x[0]];\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const xv = x[i] + series.barOffset;\n if (!Number.isFinite(y[i]) || xv < x0 || xv > x1) continue;\n // the end away from the base (the top, or the bottom of negative bars)\n const negative = top[i] < (series.barBase?.[i] ?? 0);\n const reversed = negative !== model.y.reverse;\n const p = toScreen(s, xv, top[i]);\n const step = series.floating && y0 && Number.isFinite(y0[i]);\n // ranges on a time axis (Gantt tasks) have no value to write\n if (step && model.y.type === \"time\" && !texts?.[i]) continue;\n const delta = step ? y[i] - (y0?.[i] ?? 0) : 0;\n labels.push({\n x: p.x,\n y: p.y,\n r: 0,\n text:\n texts?.[i] ??\n (step ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}` : format(y[i])),\n placement: s.horizontal\n ? reversed\n ? \"left\"\n : \"right\"\n : reversed\n ? \"below\"\n : \"above\",\n });\n }\n continue;\n }\n if (series.type !== \"scatter\") continue;\n const { x, y, count, labels: texts, size } = series.cols;\n if (!texts) continue;\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const text = texts[i];\n if (!text) continue;\n const xi = x[i];\n const yi = y[i];\n if (xi < view.x[0] || xi > view.x[1] || yi < view.y[0] || yi > view.y[1])\n continue;\n const d = size && size[i] > 0 ? size[i] : series.pointSize;\n const p = toScreen(s, xi, yi);\n labels.push({ x: p.x, y: p.y, r: d / 2, text });\n }\n }\n return labels;\n};\n\n// ---------------------------------------------------------------- hit tests\n\ninterface Candidate {\n series: SeriesModel;\n index: number;\n /** Pixel position of the point */\n px: number;\n py: number;\n /** Distance along the x axis */\n dx: number;\n dist: number;\n inside: boolean;\n}\n\n/** Bars and box plots sit in a slot of their category */\nconst slotOffset = (s: SeriesModel) =>\n s.type === \"bar\" || s.type === \"boxplot\" ? s.barOffset : 0;\n\n/**\n * Screen position of a point (the end of a bar or stack, the close of a\n * candle, the median of a box)\n */\nexport const pointOf = (s: SeriesModel, i: number, sc: Scales) => {\n const p = toScreen(sc, s.cols.x[i] + slotOffset(s), plottedY(s, i));\n return { px: p.x, py: p.y };\n};\n\n/** Whether a pixel (along x, along y) is on a column from `a` to `b` */\nconst onColumn = (\n sc: Scales,\n center: number,\n half: number,\n a: number,\n b: number,\n ax: number,\n ay: number,\n) => {\n const pa = sc.yToPx(a);\n const pb = sc.yToPx(b);\n return (\n Math.abs(ax - center) <= half &&\n ay >= Math.min(pa, pb) - 2 &&\n ay <= Math.max(pa, pb) + 2\n );\n};\n\nconst candidateOf = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n): Candidate => {\n const p = pointOf(s, i, sc);\n const ax = alongX(sc, px, py);\n const ay = alongY(sc, px, py);\n const center = sc.xToPx(s.cols.x[i] + slotOffset(s));\n let inside = false;\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const half = s.barHalfWidth / Math.abs(sc.xPerPx);\n inside = onColumn(sc, center, half, s.barBase[i], s.barTop[i], ax, ay);\n } else if (s.type === \"candlestick\" || s.type === \"boxplot\") {\n const { high, low, y } = s.cols;\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 3);\n const a = high ? high[i] : y[i];\n const b = low ? low[i] : y[i];\n inside = onColumn(sc, center, half, a, b, ax, ay);\n }\n return {\n series: s,\n index: i,\n px: p.px,\n py: p.py,\n dx: Math.abs(sc.xToPx(s.cols.x[i]) - ax),\n dist: inside ? 0 : Math.hypot(p.px - px, p.py - py),\n inside,\n };\n};\n\n/** Diameter of a scatter dot */\nexport const dotSize = (s: SeriesModel, i: number) =>\n s.cols.size && s.cols.size[i] > 0 ? s.cols.size[i] : s.pointSize;\n\nconst maxSizes = new WeakMap<Float32Array, number>();\n\n/** Largest dot of a series (bubbles reach further than plain dots) */\nconst maxDot = (s: SeriesModel) => {\n const sizes = s.cols.size;\n if (!sizes) return s.pointSize;\n let max = maxSizes.get(sizes);\n if (max === undefined) {\n max = s.pointSize;\n for (let i = 0; i < sizes.length; i++) if (sizes[i] > max) max = sizes[i];\n maxSizes.set(sizes, max);\n }\n return max;\n};\n\nconst nearestScatter = (\n s: SeriesModel,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n) => {\n const radius = Math.max(maxDot(s) / 2 + 6, 10) + slop;\n const at = toData(sc, px, py);\n const rx = radius * Math.abs(sc.xPerPx);\n const ry = radius * Math.abs(sc.yPerPx);\n let best = -1;\n let bestDist = Infinity;\n const { x, y } = s.cols;\n gridOf(s).query(at.x - rx, at.x + rx, at.y - ry, at.y + ry, (i) => {\n const p = toScreen(sc, x[i], y[i]);\n const d = Math.hypot(p.x - px, p.y - py);\n const reach = Math.max(dotSize(s, i) / 2 + 4, 8) + slop;\n if (d <= reach && d <= bestDist) {\n bestDist = d;\n best = i;\n }\n });\n return best;\n};\n\n/** Heatmap cell containing a data position, -1 if none */\nconst cellAt = (s: SeriesModel, xv: number, yv: number) => {\n const { x: hx, y: hy } = s.cellHalf;\n const { x, y } = s.cols;\n let found = -1;\n gridOf(s).query(xv - hx, xv + hx, yv - hy, yv + hy, (i) => {\n if (\n s.cellColors?.[i] &&\n Math.abs(x[i] - xv) <= hx &&\n Math.abs(y[i] - yv) <= hy\n ) {\n found = i;\n }\n });\n return found;\n};\n\nconst nearestX = (s: SeriesModel, xv: number) => {\n const { x, y, count, sorted } = s.cols;\n if (sorted) return nearestIndex(x, y, count, xv);\n let best = -1;\n let bestD = Infinity;\n for (let i = 0; i < count; i++) {\n if (!Number.isFinite(y[i])) continue;\n const d = Math.abs(x[i] - xv);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n }\n return best;\n};\n\n/** Hover payload item of a point (values of the data, right axis included) */\nexport const hoverItemOf = (s: SeriesModel, index: number): ChartHoverItem => {\n const pc = s.pointColors?.[index];\n const { open, high, low, value, y0, q1, q3, outliers, labels } = s.raw;\n const label = labels?.[index];\n let color = pc ? toCss(pc) : s.colorCss;\n const extra: Partial<ChartHoverItem> = {};\n if (s.type === \"candlestick\") {\n const o = open ? open[index] : NaN;\n if (Number.isFinite(o)) extra.open = o;\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n color = toCss(s.raw.y[index] < o ? s.downColor : s.upColor);\n } else if (s.type === \"heatmap\") {\n const v = value ? value[index] : s.raw.y[index];\n if (Number.isFinite(v)) extra.value = v;\n const packed = s.cellColors?.[index];\n if (packed) color = toCss(unpackColor(packed));\n } else if (s.type === \"boxplot\") {\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n if (q1 && Number.isFinite(q1[index])) extra.q1 = q1[index];\n if (q3 && Number.isFinite(q3[index])) extra.q3 = q3[index];\n const out = outliers?.[index];\n if (out) extra.outliers = out.length;\n } else {\n if (y0 && Number.isFinite(y0[index])) extra.y0 = y0[index];\n if (s.type === \"scatter\" && value && Number.isFinite(value[index]))\n extra.value = value[index];\n }\n return {\n seriesIndex: s.index,\n seriesId: s.id,\n seriesName: s.name,\n index,\n x: s.raw.x[index],\n y: s.raw.y[index],\n color,\n ...(label !== undefined ? { label } : {}),\n ...extra,\n };\n};\n\nconst eventOf = (\n candidates: Candidate[],\n xTicks: AxisTicks | null,\n): ChartHoverEvent | null => {\n if (!candidates.length) return null;\n candidates.sort((a, b) => a.series.index - b.series.index);\n const items = candidates.map((c) => hoverItemOf(c.series, c.index));\n const x = items[0].x;\n return { items, x, xLabel: xTicks?.formatValue(x) ?? String(x) };\n};\n\n/**\n * Points under a pixel of the stage: the nearest point (scatter / `nearest`\n * tooltips) or every series at the nearest x (`axis` tooltips).\n * `slop` widens the reach of the dots (touch screens).\n */\nexport const hitTest = (\n model: ChartModel,\n sc: Scales,\n xTicks: AxisTicks | null,\n px: number,\n py: number,\n slop = 0,\n): ChartHoverEvent | null => {\n const { plot } = sc;\n const margin = 6 + slop;\n if (\n px < plot.x - margin ||\n px > plot.x + plot.width + margin ||\n py < plot.y - margin ||\n py > plot.y + plot.height + margin\n ) {\n return null;\n }\n const at = toData(sc, px, py);\n const scatter: Candidate[] = [];\n const others: Candidate[] = [];\n for (const s of model.series) {\n if (s.hidden || s.cols.count === 0) continue;\n if (s.type === \"scatter\") {\n const i = nearestScatter(s, px, py, sc, slop);\n if (i >= 0) scatter.push(candidateOf(s, i, px, py, sc));\n } else if (s.type === \"heatmap\") {\n const i = cellAt(s, at.x, at.y);\n if (i >= 0) {\n const c = candidateOf(s, i, px, py, sc);\n c.inside = true;\n c.dist = 0;\n scatter.push(c);\n }\n } else {\n const i = nearestX(s, at.x);\n if (i >= 0) others.push(candidateOf(s, i, px, py, sc));\n }\n }\n if (model.tooltipMode === \"nearest\") {\n const all = [...scatter, ...others].filter(\n (c) => c.inside || c.series.type === \"scatter\" || c.dist <= 32 + slop,\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) => (b.dist <= a.dist ? b : a));\n return eventOf([best], xTicks);\n }\n if (!others.length) {\n if (!scatter.length) return null;\n return eventOf(\n [scatter.reduce((a, b) => (b.dist <= a.dist ? b : a))],\n xTicks,\n );\n }\n const bestDx = Math.min(...others.map((c) => c.dx));\n const bandPx = model.x.type === \"category\" ? 0.5 / Math.abs(sc.xPerPx) : 0;\n const aligned = others.filter((c) => c.dx <= bestDx + Math.max(1, bandPx));\n const first = aligned.reduce((a, b) => (b.dx < a.dx ? b : a));\n const ordered = [first, ...aligned.filter((c) => c !== first), ...scatter];\n const event = eventOf(ordered, xTicks);\n if (event) {\n event.x = hoverItemOf(first.series, first.index).x;\n event.xLabel = xTicks?.formatValue(event.x) ?? String(event.x);\n }\n return event;\n};\n\n/** Whether two hover payloads point at the same points */\nexport const sameHover = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent | null,\n): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a.items.length === b.items.length &&\n a.items.every(\n (it, i) =>\n it.index === b.items[i].index &&\n it.seriesIndex === b.items[i].seriesIndex,\n ));\n\n// ------------------------------------------------------------------ tooltip\n\n/** Change of a candlestick: `+1.25%` */\nconst CHANGE_PERCENT: Intl.NumberFormatOptions = {\n style: \"percent\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nexport interface TooltipRow {\n /** Swatch color (CSS) */\n color: string | null;\n name: string;\n value: string;\n}\n\nexport interface TooltipContent {\n title: string;\n /** Swatch of the title (single scatter point) */\n titleColor: string | null;\n rows: TooltipRow[];\n}\n\n/**\n * Default tooltip content of a hover payload; `y2Ticks` formats the values\n * of the right axis series\n */\nexport const tooltipContent = (\n model: ChartModel,\n event: ChartHoverEvent,\n yTicks: AxisTicks | null,\n y2Ticks: AxisTicks | null = null,\n): TooltipContent => {\n const yFormat = yTicks?.formatValue ?? String;\n const formatOf = (s: SeriesModel) =>\n s.format ??\n (s.yAxis === \"right\"\n ? (y2Ticks?.formatValue ?? model.y2?.format ?? model.formatValue)\n : yFormat);\n const names = model.labels;\n const first = event.items[0];\n const firstSeries = first ? model.series[first.seriesIndex] : null;\n if (event.items.length === 1 && firstSeries?.type === \"heatmap\") {\n const yName =\n model.y.type === \"category\"\n ? (model.y.categories[Math.round(first.y)] ?? yFormat(first.y))\n : yFormat(first.y);\n return {\n title: `${event.xLabel} · ${yName}`,\n titleColor: null,\n rows: [\n {\n color: first.color,\n name: first.label ?? firstSeries.name,\n value:\n first.value === undefined\n ? \"–\"\n : (firstSeries.format ?? model.formatValue)(first.value),\n },\n ],\n };\n }\n const scatterOnly = event.items.every(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n if (scatterOnly && event.items.length === 1) {\n const it = event.items[0];\n const s = model.series[it.seriesIndex];\n const valueRow: TooltipRow[] =\n it.value !== undefined\n ? [\n {\n color: null,\n name: s.valueName ?? names.value,\n value: (s.format ?? model.formatValue)(it.value),\n },\n ]\n : [];\n if (model.x.type === \"category\") {\n // a dot on a category (Gantt milestones, dot plots)\n return {\n title: it.label ?? event.xLabel,\n titleColor: null,\n rows: [\n { color: it.color, name: it.seriesName, value: formatOf(s)(it.y) },\n ...valueRow,\n ],\n };\n }\n const rows: TooltipRow[] = [\n { color: null, name: model.x.title ?? names.x, value: event.xLabel },\n {\n color: null,\n name:\n (s.yAxis === \"right\" ? model.y2?.title : model.y.title) ?? names.y,\n value: formatOf(s)(it.y),\n },\n ...valueRow,\n ];\n if (it.label !== undefined && model.series.length > 1)\n rows.push({ color: null, name: \"\", value: it.seriesName });\n return { title: it.label ?? it.seriesName, titleColor: it.color, rows };\n }\n const rows: TooltipRow[] = [];\n /** Row of every item */\n const rowOf: number[] = [];\n // one labelled bar on a numeric axis (a histogram bin): the label is the title\n const binTitle =\n event.items.length === 1 &&\n firstSeries?.type === \"bar\" &&\n model.x.type !== \"category\" &&\n first?.label !== undefined\n ? first.label\n : null;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n const format = formatOf(s);\n rowOf.push(rows.length);\n if (s.type === \"candlestick\") {\n const change =\n it.open !== undefined && it.open !== 0\n ? ((it.y - it.open) / Math.abs(it.open)) * 100\n : NaN;\n rows.push({\n color: it.color,\n name: s.name,\n value: Number.isFinite(change)\n ? `${change >= 0 ? \"+\" : \"\"}${numberFormat(model.locale, CHANGE_PERCENT).format(change / 100)}`\n : \"\",\n });\n const ohlc: [string, number | undefined][] = [\n [names.open, it.open],\n [names.high, it.high],\n [names.low, it.low],\n [names.close, it.y],\n ];\n for (const [name, v] of ohlc) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n continue;\n }\n if (s.type === \"boxplot\") {\n rows.push({\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: \"\",\n });\n const stats: [string, number | undefined][] = [\n [names.max, it.high],\n [names.q3, it.q3],\n [names.median, it.y],\n [names.q1, it.q1],\n [names.min, it.low],\n ];\n for (const [name, v] of stats) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n if (it.outliers)\n rows.push({\n color: null,\n name: names.outliers,\n value: String(it.outliers),\n });\n continue;\n }\n let value = format(it.y);\n if (it.y0 !== undefined) {\n // waterfall steps: the change; time ranges and bands: both ends\n const delta = it.y - it.y0;\n value =\n s.type === \"bar\" && model.y.type !== \"time\"\n ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}`\n : `${format(it.y0)} – ${format(it.y)}`;\n }\n rows.push({\n color: it.color,\n name:\n it.label && binTitle === null\n ? `${it.seriesName} · ${it.label}`\n : it.seriesName,\n value,\n });\n }\n if (model.percent) {\n // 100% stacks: the share of every value next to it\n const totals = new Map<string, number>();\n for (const it of event.items) {\n const stack = stackIdOf(model, it.seriesIndex);\n if (stack !== null && Number.isFinite(it.y))\n totals.set(stack, (totals.get(stack) ?? 0) + Math.abs(it.y));\n }\n event.items.forEach((it, k) => {\n const stack = stackIdOf(model, it.seriesIndex);\n const total = stack !== null ? totals.get(stack) : undefined;\n const row = rows[rowOf[k]];\n if (total && row && Number.isFinite(it.y)) {\n const format = model.series[it.seriesIndex].format ?? model.formatValue;\n row.value = `${format(it.y)} · ${formatPercent((Math.abs(it.y) / total) * 100, model.locale, true)}`;\n }\n });\n }\n return { title: binTitle ?? event.xLabel, titleColor: null, rows };\n};\n\n/** Stack of a series in a 100% chart (`null` when it is not stacked) */\nconst stackIdOf = (model: ChartModel, seriesIndex: number): string | null =>\n model.series[seriesIndex].hidden ? null : model.stacks[seriesIndex];\n\n/**\n * Shape of the hover marker of an item: a dot with a soft halo on a point,\n * a band behind the hovered bar group / candle, or the outline of a cell\n */\nexport type HoverMark =\n | {\n kind: \"dot\";\n x: number;\n y: number;\n size: number;\n color: string;\n /** Translucent series color of the halo around the dot */\n halo: string;\n }\n | { kind: \"band\"; x: number; y: number; width: number; height: number }\n | { kind: \"cell\"; x: number; y: number; width: number; height: number };\n\n/** Markers of the hovered points (pixels of the stage); bands come first */\nexport const hoverMarks = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n): HoverMark[] => {\n const marks: HoverMark[] = [];\n const { plot } = sc;\n let bandLo = Infinity;\n let bandHi = -Infinity;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n if (s.type === \"bar\" || s.type === \"candlestick\" || s.type === \"boxplot\") {\n const c = sc.xToPx(it.x + slotOffset(s));\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 1);\n bandLo = Math.min(bandLo, c - half);\n bandHi = Math.max(bandHi, c + half);\n continue;\n }\n if (s.type === \"heatmap\") {\n const cx = sc.xToPx(it.x);\n const cy = sc.yToPx(it.y);\n const hw = Math.abs(s.cellHalf.x / sc.xPerPx);\n const hh = Math.abs(s.cellHalf.y / sc.yPerPx);\n marks.push({\n kind: \"cell\",\n ...screenRect(sc, cx - hw, cx + hw, cy - hh, cy + hh),\n });\n continue;\n }\n const { px, py } = pointOf(s, it.index, sc);\n if (\n px < plot.x - 1 ||\n px > plot.x + plot.width + 1 ||\n py < plot.y - 1 ||\n py > plot.y + plot.height + 1\n ) {\n continue;\n }\n const size =\n s.type === \"scatter\"\n ? dotSize(s, it.index) + 4\n : Math.max(9, s.lineWidth * 2 + 5);\n const rgba = s.pointColors?.[it.index] ?? s.color;\n marks.push({\n kind: \"dot\",\n x: px,\n y: py,\n size,\n color: it.color,\n halo: toCss(rgba, 0.2),\n });\n }\n if (bandHi > bandLo) {\n // the group of bars plus a margin, clipped to the plot\n const pad = Math.max(4, (bandHi - bandLo) * 0.14);\n const lo = sc.horizontal ? plot.y : plot.x;\n const hi = lo + (sc.horizontal ? plot.height : plot.width);\n const a = Math.max(lo, bandLo - pad);\n const b = Math.min(hi, bandHi + pad);\n if (b > a) {\n marks.unshift({\n kind: \"band\",\n ...(sc.horizontal\n ? { x: plot.x, y: a, width: plot.width, height: b - a }\n : { x: a, y: plot.y, width: b - a, height: plot.height }),\n });\n }\n }\n return marks;\n};\n\n/** Swatch of a series in the legend */\nexport const legendShape = (\n type: SeriesModel[\"type\"],\n): \"dot\" | \"line\" | \"square\" =>\n type === \"scatter\" ? \"dot\" : type === \"line\" ? \"line\" : \"square\";\n\n/** Whether the guide line follows the pointer */\nexport const showsCrosshair = (\n model: ChartModel,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n) =>\n crosshair ??\n (model.tooltipMode === \"axis\" &&\n event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"line\" || type === \"area\";\n }) &&\n // bars get a band instead\n !event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"bar\" || type === \"candlestick\" || type === \"boxplot\";\n }));\n\n/** Pixel of the guide line along the x axis (`null` when hidden / outside the plot) */\nexport const crosshairAt = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n): number | null => {\n if (!showsCrosshair(model, event, crosshair)) return null;\n const c = sc.xToPx(event.items[0].x);\n const lo = sc.horizontal ? sc.plot.y : sc.plot.x;\n const hi = lo + (sc.horizontal ? sc.plot.height : sc.plot.width);\n return c >= lo && c <= hi ? c : null;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"scene.js","names":["DEFAULT_PADDING","fallbackResolve","fallback","resolveAnnotations","resolve","theme","y","mapY","v","x","mapX","annotations","a","color","mix","layoutChart","input","model","layoutHorizontal","yCount","height","yTicks","axisTicks","view","yLabelWidth","label","measure","y2Ticks","rightTicks","y2LabelWidth","categoryWidth","step","i","padding","plot","computePlot","xCount","xTicks","createScales","axis","map","b","ticks","count","raw","maxAbs","tick","tickFormatter","rows","xLabelWidth","names","name","collectPointLabels","labels","axisFormat","series","format","texts","top","x0","x1","xv","reversed","p","toScreen","s","y0","delta","text","xi","yi","d","size","slotOffset","pointOf","sc","plottedY","onColumn","pa","pb","ax","center","half","ay","candidateOf","alongX","px","py","alongY","inside","high","low","outlierAt","list","reach","slop","best","bestDist","k","dotSize","maxSizes","maxDot","sizes","max","nearestScatter","radius","at","toData","rx","ry","gridOf","cellAt","hx","hy","found","yv","nearestX","sorted","nearestIndex","bestD","hoverItemOf","pc","index","toCss","extra","o","open","value","packed","unpackColor","q1","q3","out","outliers","eventOf","candidates","items","item","c","hitTest","margin","scatter","others","all","bestDx","bandPx","aligned","first","event","sameHover","it","CHANGE_PERCENT","detailRows","tooltipContent","yFormat","formatOf","firstSeries","formatDuration","yName","valueRow","yAxisFormat","rowOf","binTitle","change","numberFormat","ohlc","stats","totals","stack","stackIdOf","total","row","formatPercent","seriesIndex","hoverMarks","marks","bandLo","bandHi","itX","plottedOutlier","cx","cy","hw","hh","cell","screenRect","style","heatCellStyle","bottom","left","right","fill","contrastRing","rgba","pad","lo","hi","luminance","connectorSegments","v0","v1","prev","resolveDependencies","muted","dependencies","ARROW_HEAD","rowSpans","bar","start","end","dependencyArrows","horizontal","pt","valuePx","categoryPx","dir","rowPx","ev","ca","sv","cb","base","length","points","exit","between","back","COLOR_STOPS","colorLegend","lut","stops","mid","legendShown","option","named","legendShape","type","showsCrosshair","crosshair","crosshairAt","toPlotX"],"sources":["../../../../charts/src/engine/scene.ts"],"sourcesContent":["// The DOM-free half of a chart: annotations, layout, point labels, hit\n// testing and tooltip content. Shared by createChart (DOM + GPU),\n// createCanvasChart (any 2D context) and the React Native views.\n\nimport { axisTicks, type AxisTicks } from \"./axis\";\nimport { luminance, mix, toCss, unpackColor, type Rgba } from \"./color\";\nimport { nearestIndex } from \"./data\";\nimport { formatDuration, formatPercent, tickFormatter } from \"./format\";\nimport { numberFormat } from \"./locale\";\nimport {\n alongX,\n alongY,\n computePlot,\n createScales,\n heatCellStyle,\n screenRect,\n toData,\n toScreen,\n type Rect,\n type Scales,\n} from \"./layout\";\nimport {\n gridOf,\n plottedY,\n toPlotX,\n type ChartModel,\n type SeriesModel,\n} from \"./model\";\nimport type { PointLabel, ResolvedAnnotation } from \"./overlay\";\nimport type { ChartTheme } from \"./theme\";\nimport type { Range } from \"./viewport\";\nimport type {\n ChartAnnotation,\n ChartDependency,\n ChartHoverEvent,\n ChartHoverItem,\n ChartOptions,\n ChartPadding,\n ChartView,\n} from \"./types\";\n\nexport const MAX_POINT_LABELS = 300;\nexport const DEFAULT_PADDING = { top: 12, right: 16, bottom: 4, left: 4 };\n\nexport const fallbackResolve = (_value: string, fallback: Rgba) => fallback;\n\n/**\n * Annotation colors resolved against the theme; `mapY` / `mapX` turn values\n * into plotted units (log axes)\n */\nexport const resolveAnnotations = (\n annotations: readonly ChartAnnotation[] | undefined,\n theme: ChartTheme,\n mapY?: (value: number) => number,\n mapX?: (value: number) => number,\n): ResolvedAnnotation[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n const y = <T extends number | undefined>(v: T): T =>\n (mapY && v !== undefined ? mapY(v) : v) as T;\n const x = <T extends number | undefined>(v: T): T =>\n (mapX && v !== undefined ? mapX(v) : v) as T;\n return (annotations ?? []).map((a) => {\n if (a.type === \"rect\") {\n const color = a.color ? resolve(a.color, theme.primary) : theme.primary;\n return {\n type: \"rect\",\n x0: x(a.x0),\n x1: x(a.x1),\n y0: y(a.y0),\n y1: y(a.y1),\n color,\n opacity: a.opacity ?? 0.08,\n label: a.label,\n labelPosition: a.labelPosition ?? \"top-left\",\n labelColor: a.labelColor\n ? resolve(a.labelColor, color)\n : mix(color, theme.text, 0.2),\n };\n }\n if (a.type === \"text\") {\n return {\n type: \"text\",\n x: x(a.x),\n y: y(a.y),\n text: a.text,\n anchor: a.anchor ?? \"center\",\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n weight: a.weight ?? 500,\n };\n }\n return {\n type: \"line\",\n axis: a.axis,\n value: a.axis === \"y\" ? y(a.value) : x(a.value),\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n width: a.width ?? 1,\n dash: [...(a.dash ?? [4, 4])],\n label: a.label,\n };\n });\n};\n\nexport interface ChartLayout {\n plot: Rect;\n scales: Scales;\n xTicks: AxisTicks;\n yTicks: AxisTicks;\n /** Ticks of the right axis: at the left tick positions, labelled in right axis units */\n y2Ticks: AxisTicks | null;\n}\n\nexport interface LayoutInput {\n model: ChartModel;\n view: ChartView;\n theme: ChartTheme;\n /** Size of the drawing area (legend excluded), CSS pixels */\n width: number;\n height: number;\n padding?: ChartPadding;\n /** Offset of the drawing area (e.g. below a legend) */\n top?: number;\n /** Width of a tick label in the theme font */\n measure: (text: string) => number;\n}\n\n/** Ticks, room for the axes and the plot rectangle */\nexport const layoutChart = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n if (model.horizontal) return layoutHorizontal(input);\n // same count as the nice range of the model (its ends are then ticks),\n // fewer on short charts; category rows get a label each when they fit\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)))\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const yTicks = axisTicks(model.y, view.y, yCount);\n let yLabelWidth = 0;\n if (model.y.visible) {\n for (const label of yTicks.labels)\n yLabelWidth = Math.max(yLabelWidth, measure(label));\n }\n const y2Ticks = rightTicks(model, yTicks, view.y, yCount);\n let y2LabelWidth = 0;\n if (y2Ticks && model.y2?.visible) {\n for (const label of y2Ticks.labels)\n y2LabelWidth = Math.max(y2LabelWidth, measure(label));\n }\n let categoryWidth = 48;\n if (model.x.type === \"category\") {\n categoryWidth = 0;\n const step = Math.max(1, Math.floor(model.x.categories.length / 200));\n for (let i = 0; i < model.x.categories.length; i += step) {\n categoryWidth = Math.max(categoryWidth, measure(model.x.categories[i]));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.y.visible ? Math.ceil(yLabelWidth) : 0,\n y2LabelWidth: Math.ceil(y2LabelWidth),\n y2Title: !!model.y2?.title && !!model.y2.visible,\n xAxisVisible: model.x.visible,\n xTitle: !!model.x.title && model.x.visible,\n yTitle: !!model.y.title && model.y.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const xCount =\n model.x.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / (categoryWidth + 14)))\n : (model.x.tickCount ?? Math.max(3, Math.floor(plot.width / 88)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n const scales = createScales(plot, view, model.x.reverse, model.y.reverse);\n return { plot, scales, xTicks, yTicks, y2Ticks };\n};\n\n/**\n * Right axis ticks: the left ticks labelled in right axis units; log axes\n * get their own decades\n */\nconst rightTicks = (\n model: ChartModel,\n yTicks: AxisTicks,\n view: Range,\n count: number,\n): AxisTicks | null => {\n const axis = model.y2;\n const map = model.y2Map;\n if (!axis || !map || !map.scale) return null;\n if (map.log) {\n const a = (view[0] - map.offset) / map.scale;\n const b = (view[1] - map.offset) / map.scale;\n const ticks = axisTicks(axis, [Math.min(a, b), Math.max(a, b)], count);\n return {\n ...ticks,\n values: ticks.values.map((e) => e * map.scale + map.offset),\n };\n }\n const raw = yTicks.values.map((v) => (v - map.offset) / map.scale);\n const step = raw.length > 1 ? Math.abs(raw[1] - raw[0]) : 1;\n let maxAbs = 0;\n for (const v of raw) maxAbs = Math.max(maxAbs, Math.abs(v));\n const tick = axis.format ?? tickFormatter(step, maxAbs, model.locale);\n return {\n values: yTicks.values,\n labels: raw.map(tick),\n formatValue: axis.format ?? model.formatValue,\n };\n};\n\n/** Horizontal charts: the x axis on the left, the values along the bottom */\nconst layoutHorizontal = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n const rows = Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)));\n const xCount =\n model.x.tickCount ??\n (model.x.type === \"category\"\n ? rows\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n let xLabelWidth = 0;\n if (model.x.visible) {\n if (model.x.type === \"category\") {\n // every name (the visible ones change when zooming)\n const names = model.x.categories;\n const step = Math.max(1, Math.floor(names.length / 200));\n for (let i = 0; i < names.length; i += step) {\n const name = model.x.format ? model.x.format(i) : names[i];\n xLabelWidth = Math.max(xLabelWidth, measure(name));\n }\n } else {\n for (const label of xTicks.labels)\n xLabelWidth = Math.max(xLabelWidth, measure(label));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.x.visible ? Math.ceil(xLabelWidth) : 0,\n xAxisVisible: model.y.visible,\n xTitle: !!model.y.title && model.y.visible,\n yTitle: !!model.x.title && model.x.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / 60))\n : Math.max(3, Math.min(8, Math.floor(plot.width / 88))));\n const yTicks = axisTicks(model.y, view.y, yCount);\n const scales = createScales(\n plot,\n view,\n model.x.reverse,\n model.y.reverse,\n true,\n );\n return { plot, scales, xTicks, yTicks, y2Ticks: null };\n};\n\n/** Labels of the visible scatter points and bar values (`showLabels`) */\nexport const collectPointLabels = (\n model: ChartModel,\n view: ChartView,\n s: Scales,\n yTicks?: AxisTicks | null,\n): PointLabel[] => {\n const labels: PointLabel[] = [];\n // 100% stacks: the axis shows percents, the labels the actual values\n const axisFormat = model.percent\n ? model.formatValue\n : (yTicks?.formatValue ?? model.formatValue);\n for (const series of model.series) {\n if (series.hidden || !series.showLabels) continue;\n if (series.type === \"bar\" && series.barTop) {\n // 100% stacks and right axis series: the values of the data\n const format =\n series.format ??\n (series.yAxis === \"right\"\n ? (model.y2?.format ?? model.formatValue)\n : axisFormat);\n const { x, count } = series.cols;\n const { y, y0, labels: texts } = series.raw;\n const top = series.barTop;\n const [x0, x1] = view.x[0] <= view.x[1] ? view.x : [view.x[1], view.x[0]];\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const xv = x[i] + series.barOffset;\n if (!Number.isFinite(y[i]) || xv < x0 || xv > x1) continue;\n // the end away from the base (the top, or the bottom of negative bars)\n const negative = top[i] < (series.barBase?.[i] ?? 0);\n const reversed = negative !== model.y.reverse;\n const p = toScreen(s, xv, top[i]);\n const step = series.floating && y0 && Number.isFinite(y0[i]);\n // ranges on a time axis (Gantt tasks) have no value to write\n if (step && model.y.type === \"time\" && !texts?.[i]) continue;\n const delta = step ? y[i] - (y0?.[i] ?? 0) : 0;\n labels.push({\n x: p.x,\n y: p.y,\n r: 0,\n text:\n texts?.[i] ??\n (step ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}` : format(y[i])),\n placement: s.horizontal\n ? reversed\n ? \"left\"\n : \"right\"\n : reversed\n ? \"below\"\n : \"above\",\n });\n }\n continue;\n }\n if (series.type !== \"scatter\") continue;\n const { x, y, count, labels: texts, size } = series.cols;\n if (!texts) continue;\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const text = texts[i];\n if (!text) continue;\n const xi = x[i];\n const yi = y[i];\n if (xi < view.x[0] || xi > view.x[1] || yi < view.y[0] || yi > view.y[1])\n continue;\n const d = size && size[i] > 0 ? size[i] : series.pointSize;\n const p = toScreen(s, xi, yi);\n labels.push({ x: p.x, y: p.y, r: d / 2, text });\n }\n }\n return labels;\n};\n\n// ---------------------------------------------------------------- hit tests\n\ninterface Candidate {\n series: SeriesModel;\n index: number;\n /** Pixel position of the point */\n px: number;\n py: number;\n /** Distance along the x axis */\n dx: number;\n dist: number;\n inside: boolean;\n /** Box plots: value of the outlier under the pointer */\n outlier?: number;\n}\n\n/** Bars and box plots sit in a slot of their category */\nconst slotOffset = (s: SeriesModel) =>\n s.type === \"bar\" || s.type === \"boxplot\" ? s.barOffset : 0;\n\n/**\n * Screen position of a point (the end of a bar or stack, the close of a\n * candle, the median of a box)\n */\nexport const pointOf = (s: SeriesModel, i: number, sc: Scales) => {\n const p = toScreen(sc, s.cols.x[i] + slotOffset(s), plottedY(s, i));\n return { px: p.x, py: p.y };\n};\n\n/** Whether a pixel (along x, along y) is on a column from `a` to `b` */\nconst onColumn = (\n sc: Scales,\n center: number,\n half: number,\n a: number,\n b: number,\n ax: number,\n ay: number,\n) => {\n const pa = sc.yToPx(a);\n const pb = sc.yToPx(b);\n return (\n Math.abs(ax - center) <= half &&\n ay >= Math.min(pa, pb) - 2 &&\n ay <= Math.max(pa, pb) + 2\n );\n};\n\nconst candidateOf = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n): Candidate => {\n const p = pointOf(s, i, sc);\n const ax = alongX(sc, px, py);\n const ay = alongY(sc, px, py);\n const center = sc.xToPx(s.cols.x[i] + slotOffset(s));\n let inside = false;\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const half = s.barHalfWidth / Math.abs(sc.xPerPx);\n inside = onColumn(sc, center, half, s.barBase[i], s.barTop[i], ax, ay);\n } else if (s.type === \"candlestick\" || s.type === \"boxplot\") {\n const { high, low, y } = s.cols;\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 3);\n const a = high ? high[i] : y[i];\n const b = low ? low[i] : y[i];\n inside = onColumn(sc, center, half, a, b, ax, ay);\n }\n return {\n series: s,\n index: i,\n px: p.px,\n py: p.py,\n dx: Math.abs(sc.xToPx(s.cols.x[i]) - ax),\n dist: inside ? 0 : Math.hypot(p.px - px, p.py - py),\n inside,\n };\n};\n\n/** Outlier of a box under a pixel (`undefined` when none is in reach) */\nconst outlierAt = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n): number | undefined => {\n const list = s.cols.outliers?.[i];\n if (!list) return undefined;\n const center = sc.xToPx(s.cols.x[i] + slotOffset(s));\n const ax = alongX(sc, px, py) - center;\n const ay = alongY(sc, px, py);\n const reach = s.outlierSize / 2 + 4 + slop;\n let best: number | undefined;\n let bestDist = reach;\n list.forEach((v, k) => {\n const d = Math.hypot(ax, sc.yToPx(v) - ay);\n if (d <= bestDist) {\n bestDist = d;\n // the value of the data (right axis series are mapped)\n best = s.raw.outliers?.[i]?.[k] ?? v;\n }\n });\n return best;\n};\n\n/** Diameter of a scatter dot */\nexport const dotSize = (s: SeriesModel, i: number) =>\n s.cols.size && s.cols.size[i] > 0 ? s.cols.size[i] : s.pointSize;\n\nconst maxSizes = new WeakMap<Float32Array, number>();\n\n/** Largest dot of a series (bubbles reach further than plain dots) */\nconst maxDot = (s: SeriesModel) => {\n const sizes = s.cols.size;\n if (!sizes) return s.pointSize;\n let max = maxSizes.get(sizes);\n if (max === undefined) {\n max = s.pointSize;\n for (let i = 0; i < sizes.length; i++) if (sizes[i] > max) max = sizes[i];\n maxSizes.set(sizes, max);\n }\n return max;\n};\n\nconst nearestScatter = (\n s: SeriesModel,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n) => {\n const radius = Math.max(maxDot(s) / 2 + 6, 10) + slop;\n const at = toData(sc, px, py);\n const rx = radius * Math.abs(sc.xPerPx);\n const ry = radius * Math.abs(sc.yPerPx);\n let best = -1;\n let bestDist = Infinity;\n const { x, y } = s.cols;\n gridOf(s).query(at.x - rx, at.x + rx, at.y - ry, at.y + ry, (i) => {\n const p = toScreen(sc, x[i], y[i]);\n const d = Math.hypot(p.x - px, p.y - py);\n const reach = Math.max(dotSize(s, i) / 2 + 4, 8) + slop;\n if (d <= reach && d <= bestDist) {\n bestDist = d;\n best = i;\n }\n });\n return best;\n};\n\n/** Heatmap cell containing a data position, -1 if none */\nconst cellAt = (s: SeriesModel, xv: number, yv: number) => {\n const { x: hx, y: hy } = s.cellHalf;\n const { x, y } = s.cols;\n let found = -1;\n gridOf(s).query(xv - hx, xv + hx, yv - hy, yv + hy, (i) => {\n if (\n s.cellColors?.[i] &&\n Math.abs(x[i] - xv) <= hx &&\n Math.abs(y[i] - yv) <= hy\n ) {\n found = i;\n }\n });\n return found;\n};\n\nconst nearestX = (s: SeriesModel, xv: number) => {\n const { x, y, count, sorted } = s.cols;\n if (sorted) return nearestIndex(x, y, count, xv);\n let best = -1;\n let bestD = Infinity;\n for (let i = 0; i < count; i++) {\n if (!Number.isFinite(y[i])) continue;\n const d = Math.abs(x[i] - xv);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n }\n return best;\n};\n\n/** Hover payload item of a point (values of the data, right axis included) */\nexport const hoverItemOf = (s: SeriesModel, index: number): ChartHoverItem => {\n const pc = s.pointColors?.[index];\n const { open, high, low, value, y0, q1, q3, outliers, labels } = s.raw;\n const label = labels?.[index];\n let color = pc ? toCss(pc) : s.colorCss;\n const extra: Partial<ChartHoverItem> = {};\n if (s.type === \"candlestick\") {\n const o = open ? open[index] : NaN;\n if (Number.isFinite(o)) extra.open = o;\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n color = toCss(s.raw.y[index] < o ? s.downColor : s.upColor);\n } else if (s.type === \"heatmap\") {\n const v = value ? value[index] : s.raw.y[index];\n if (Number.isFinite(v)) extra.value = v;\n const packed = s.cellColors?.[index];\n if (packed) color = toCss(unpackColor(packed));\n } else if (s.type === \"boxplot\") {\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n if (q1 && Number.isFinite(q1[index])) extra.q1 = q1[index];\n if (q3 && Number.isFinite(q3[index])) extra.q3 = q3[index];\n const out = outliers?.[index];\n if (out) extra.outliers = out.length;\n } else {\n if (y0 && Number.isFinite(y0[index])) extra.y0 = y0[index];\n if (s.type === \"scatter\" && value && Number.isFinite(value[index]))\n extra.value = value[index];\n }\n return {\n seriesIndex: s.index,\n seriesId: s.id,\n seriesName: s.name,\n index,\n x: s.raw.x[index],\n y: s.raw.y[index],\n color,\n ...(label !== undefined ? { label } : {}),\n ...extra,\n };\n};\n\nconst eventOf = (\n candidates: Candidate[],\n xTicks: AxisTicks | null,\n): ChartHoverEvent | null => {\n if (!candidates.length) return null;\n candidates.sort((a, b) => a.series.index - b.series.index);\n const items = candidates.map((c) => {\n const item = hoverItemOf(c.series, c.index);\n if (c.outlier !== undefined) item.outlier = c.outlier;\n return item;\n });\n const x = items[0].x;\n return { items, x, xLabel: xTicks?.formatValue(x) ?? String(x) };\n};\n\n/**\n * Points under a pixel of the stage: the nearest point (scatter / `nearest`\n * tooltips) or every series at the nearest x (`axis` tooltips).\n * `slop` widens the reach of the dots (touch screens).\n */\nexport const hitTest = (\n model: ChartModel,\n sc: Scales,\n xTicks: AxisTicks | null,\n px: number,\n py: number,\n slop = 0,\n): ChartHoverEvent | null => {\n const { plot } = sc;\n const margin = 6 + slop;\n if (\n px < plot.x - margin ||\n px > plot.x + plot.width + margin ||\n py < plot.y - margin ||\n py > plot.y + plot.height + margin\n ) {\n return null;\n }\n const at = toData(sc, px, py);\n const scatter: Candidate[] = [];\n const others: Candidate[] = [];\n for (const s of model.series) {\n if (s.hidden || !s.tooltip || s.cols.count === 0) continue;\n if (s.type === \"scatter\") {\n const i = nearestScatter(s, px, py, sc, slop);\n if (i >= 0) scatter.push(candidateOf(s, i, px, py, sc));\n } else if (s.type === \"heatmap\") {\n const i = cellAt(s, at.x, at.y);\n if (i >= 0) {\n const c = candidateOf(s, i, px, py, sc);\n c.inside = true;\n c.dist = 0;\n scatter.push(c);\n }\n } else {\n const i = nearestX(s, at.x);\n if (i < 0) continue;\n const c = candidateOf(s, i, px, py, sc);\n if (s.type === \"boxplot\") {\n c.outlier = outlierAt(s, i, px, py, sc, slop);\n if (c.outlier !== undefined) {\n c.inside = true;\n c.dist = 0;\n }\n }\n others.push(c);\n }\n }\n if (model.tooltipMode === \"item\") {\n // the shape under the pointer only: bars, boxes, cells, dots in reach\n // and lines within a few pixels; the last drawn wins\n const all = [...scatter, ...others].filter(\n (c) =>\n c.inside ||\n c.series.type === \"scatter\" ||\n ((c.series.type === \"line\" || c.series.type === \"area\") &&\n c.dist <= 8 + slop),\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) =>\n b.dist < a.dist || (b.dist === a.dist && b.series.index > a.series.index)\n ? b\n : a,\n );\n return eventOf([best], xTicks);\n }\n if (model.tooltipMode === \"nearest\") {\n const all = [...scatter, ...others].filter(\n (c) => c.inside || c.series.type === \"scatter\" || c.dist <= 32 + slop,\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) => (b.dist <= a.dist ? b : a));\n return eventOf([best], xTicks);\n }\n if (!others.length) {\n if (!scatter.length) return null;\n return eventOf(\n [scatter.reduce((a, b) => (b.dist <= a.dist ? b : a))],\n xTicks,\n );\n }\n const bestDx = Math.min(...others.map((c) => c.dx));\n const bandPx = model.x.type === \"category\" ? 0.5 / Math.abs(sc.xPerPx) : 0;\n const aligned = others.filter((c) => c.dx <= bestDx + Math.max(1, bandPx));\n const first = aligned.reduce((a, b) => (b.dx < a.dx ? b : a));\n const ordered = [first, ...aligned.filter((c) => c !== first), ...scatter];\n const event = eventOf(ordered, xTicks);\n if (event) {\n event.x = hoverItemOf(first.series, first.index).x;\n event.xLabel = xTicks?.formatValue(event.x) ?? String(event.x);\n }\n return event;\n};\n\n/** Whether two hover payloads point at the same points */\nexport const sameHover = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent | null,\n): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a.items.length === b.items.length &&\n a.items.every(\n (it, i) =>\n it.index === b.items[i].index &&\n it.seriesIndex === b.items[i].seriesIndex,\n ));\n\n// ------------------------------------------------------------------ tooltip\n\n/** Change of a candlestick: `+1.25%` */\nconst CHANGE_PERCENT: Intl.NumberFormatOptions = {\n style: \"percent\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nexport interface TooltipRow {\n /** Swatch color (CSS) */\n color: string | null;\n name: string;\n value: string;\n}\n\nexport interface TooltipContent {\n title: string;\n /** Swatch of the title (single scatter point, Gantt task) */\n titleColor: string | null;\n /** Muted line below the title (the group of a Gantt task) */\n subtitle?: string;\n rows: TooltipRow[];\n}\n\n/** Extra rows of a point (`details` of its datum) */\nconst detailRows = (s: SeriesModel, index: number): TooltipRow[] =>\n s.raw.details?.[index]?.map((d) => ({\n color: null,\n name: d.name,\n value: d.value,\n })) ?? [];\n\n/**\n * Default tooltip content of a hover payload; `y2Ticks` formats the values\n * of the right axis series\n */\nexport const tooltipContent = (\n model: ChartModel,\n event: ChartHoverEvent,\n yTicks: AxisTicks | null,\n y2Ticks: AxisTicks | null = null,\n): TooltipContent => {\n const yFormat = yTicks?.formatValue ?? String;\n const formatOf = (s: SeriesModel) =>\n s.format ??\n (s.yAxis === \"right\"\n ? (y2Ticks?.formatValue ?? model.y2?.format ?? model.formatValue)\n : yFormat);\n const names = model.labels;\n const first = event.items[0];\n const firstSeries = first ? model.series[first.seriesIndex] : null;\n if (\n event.items.length === 1 &&\n first &&\n firstSeries?.type === \"bar\" &&\n first.y0 !== undefined &&\n model.y.type === \"time\"\n ) {\n // a task of a Gantt chart / timeline: its dates and its length\n const format = formatOf(firstSeries);\n const title = first.label ?? event.xLabel;\n return {\n title,\n titleColor: first.color,\n subtitle:\n first.label !== undefined\n ? `${event.xLabel} · ${firstSeries.name}`\n : firstSeries.name,\n rows: [\n { color: null, name: names.start, value: format(first.y0) },\n { color: null, name: names.end, value: format(first.y) },\n {\n color: null,\n name: names.duration,\n value: formatDuration(first.y - first.y0, model.locale),\n },\n ...detailRows(firstSeries, first.index),\n ],\n };\n }\n if (event.items.length === 1 && firstSeries?.type === \"heatmap\") {\n const yName =\n model.y.type === \"category\"\n ? (model.y.categories[Math.round(first.y)] ?? yFormat(first.y))\n : yFormat(first.y);\n return {\n title: `${event.xLabel} · ${yName}`,\n titleColor: null,\n rows: [\n {\n color: first.color,\n name: first.label ?? firstSeries.name,\n value:\n first.value === undefined\n ? \"–\"\n : (firstSeries.format ?? model.formatValue)(first.value),\n },\n ...detailRows(firstSeries, first.index),\n ],\n };\n }\n const scatterOnly = event.items.every(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n if (scatterOnly && event.items.length === 1) {\n const it = event.items[0];\n const s = model.series[it.seriesIndex];\n const valueRow: TooltipRow[] =\n it.value !== undefined\n ? [\n {\n color: null,\n name: s.valueName ?? names.value,\n value: (s.format ?? model.formatValue)(it.value),\n },\n ]\n : [];\n if (model.x.type === \"category\") {\n // a dot on a category (Gantt milestones, dot plots)\n return {\n title: it.label ?? event.xLabel,\n titleColor: null,\n rows: [\n { color: it.color, name: it.seriesName, value: formatOf(s)(it.y) },\n ...valueRow,\n ...detailRows(s, it.index),\n ],\n };\n }\n const yAxisFormat =\n s.yAxis === \"right\"\n ? (y2Ticks?.formatValue ?? model.y2?.format ?? model.formatValue)\n : yFormat;\n const rows: TooltipRow[] = [\n { color: null, name: model.x.title ?? names.x, value: event.xLabel },\n {\n color: null,\n name:\n (s.yAxis === \"right\" ? model.y2?.title : model.y.title) ?? names.y,\n // bubbles: `format` is the one of their value, y keeps the axis one\n value: (it.value !== undefined ? yAxisFormat : formatOf(s))(it.y),\n },\n ...valueRow,\n ...detailRows(s, it.index),\n ];\n return {\n title: it.label ?? it.seriesName,\n titleColor: it.color,\n // a named point of a group: the group under its name\n ...(it.label !== undefined && model.series.length > 1\n ? { subtitle: it.seriesName }\n : {}),\n rows,\n };\n }\n const rows: TooltipRow[] = [];\n /** Row of every item */\n const rowOf: number[] = [];\n // one labelled bar on a numeric axis (a histogram bin): the label is the title\n const binTitle =\n event.items.length === 1 &&\n firstSeries?.type === \"bar\" &&\n model.x.type !== \"category\" &&\n first?.label !== undefined\n ? first.label\n : null;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n const format = formatOf(s);\n rowOf.push(rows.length);\n if (s.type === \"candlestick\") {\n const change =\n it.open !== undefined && it.open !== 0\n ? ((it.y - it.open) / Math.abs(it.open)) * 100\n : NaN;\n rows.push({\n color: it.color,\n name: s.name,\n value: Number.isFinite(change)\n ? `${change >= 0 ? \"+\" : \"\"}${numberFormat(model.locale, CHANGE_PERCENT).format(change / 100)}`\n : \"\",\n });\n const ohlc: [string, number | undefined][] = [\n [names.open, it.open],\n [names.high, it.high],\n [names.low, it.low],\n [names.close, it.y],\n ];\n for (const [name, v] of ohlc) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n continue;\n }\n if (s.type === \"boxplot\") {\n if (it.outlier !== undefined) {\n // an outlier: its value and its group\n rows.push(\n {\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: \"\",\n },\n { color: null, name: names.outlier, value: format(it.outlier) },\n );\n continue;\n }\n rows.push({\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: \"\",\n });\n const stats: [string, number | undefined][] = [\n [names.max, it.high],\n [names.q3, it.q3],\n [names.median, it.y],\n [names.q1, it.q1],\n [names.min, it.low],\n ];\n for (const [name, v] of stats) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n if (it.outliers)\n rows.push({\n color: null,\n name: names.outliers,\n value: String(it.outliers),\n });\n continue;\n }\n let value = format(it.y);\n if (it.y0 !== undefined) {\n // waterfall steps: the change; time ranges and bands: both ends\n const delta = it.y - it.y0;\n value =\n s.type === \"bar\" && model.y.type !== \"time\"\n ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}`\n : `${format(it.y0)} – ${format(it.y)}`;\n }\n rows.push({\n color: it.color,\n name:\n it.label && binTitle === null\n ? `${it.seriesName} · ${it.label}`\n : it.seriesName,\n value,\n });\n rows.push(...detailRows(s, it.index));\n }\n if (model.percent) {\n // 100% stacks: the share of every value next to it\n const totals = new Map<string, number>();\n for (const it of event.items) {\n const stack = stackIdOf(model, it.seriesIndex);\n if (stack !== null && Number.isFinite(it.y))\n totals.set(stack, (totals.get(stack) ?? 0) + Math.abs(it.y));\n }\n event.items.forEach((it, k) => {\n const stack = stackIdOf(model, it.seriesIndex);\n const total = stack !== null ? totals.get(stack) : undefined;\n const row = rows[rowOf[k]];\n if (total && row && Number.isFinite(it.y)) {\n const format = model.series[it.seriesIndex].format ?? model.formatValue;\n row.value = `${format(it.y)} · ${formatPercent((Math.abs(it.y) / total) * 100, model.locale, true)}`;\n }\n });\n }\n return { title: binTitle ?? event.xLabel, titleColor: null, rows };\n};\n\n/** Stack of a series in a 100% chart (`null` when it is not stacked) */\nconst stackIdOf = (model: ChartModel, seriesIndex: number): string | null =>\n model.series[seriesIndex].hidden ? null : model.stacks[seriesIndex];\n\n/**\n * Shape of the hover marker of an item: a dot with a soft halo on a point,\n * a band behind the hovered bar group / candle, or the outline of a cell\n */\nexport type HoverMark =\n | {\n kind: \"dot\";\n x: number;\n y: number;\n size: number;\n color: string;\n /** Translucent series color of the halo around the dot */\n halo: string;\n }\n | { kind: \"band\"; x: number; y: number; width: number; height: number }\n | {\n /** Soft band over the row / column of a hovered cell (above the data) */\n kind: \"guide\";\n x: number;\n y: number;\n width: number;\n height: number;\n }\n | {\n /** The hovered cell, lifted, with a ring inside its edge */\n kind: \"cell\";\n x: number;\n y: number;\n width: number;\n height: number;\n /** Fill of the cell (CSS) */\n color: string;\n /** Ring color (CSS), contrasting with the fill */\n ring: string;\n radius: number;\n };\n\n/** Markers of the hovered points (pixels of the stage); bands come first */\nexport const hoverMarks = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n): HoverMark[] => {\n const marks: HoverMark[] = [];\n const { plot } = sc;\n let bandLo = Infinity;\n let bandHi = -Infinity;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n // plotted x (the logarithm on log x axes)\n const itX = s.cols.x[it.index] ?? it.x;\n if (s.type === \"boxplot\" && it.outlier !== undefined) {\n const p = toScreen(sc, itX + slotOffset(s), plottedOutlier(s, it));\n marks.push({\n kind: \"dot\",\n x: p.x,\n y: p.y,\n size: s.outlierSize + 3,\n color: it.color,\n halo: toCss(s.pointColors?.[it.index] ?? s.color, 0.2),\n });\n continue;\n }\n if (s.type === \"bar\" || s.type === \"candlestick\" || s.type === \"boxplot\") {\n const c = sc.xToPx(itX + slotOffset(s));\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 1);\n bandLo = Math.min(bandLo, c - half);\n bandHi = Math.max(bandHi, c + half);\n continue;\n }\n if (s.type === \"heatmap\") {\n const cx = sc.xToPx(itX);\n const cy = sc.yToPx(it.y);\n const hw = Math.abs(s.cellHalf.x / sc.xPerPx);\n const hh = Math.abs(s.cellHalf.y / sc.yPerPx);\n const cell = screenRect(sc, cx - hw, cx + hw, cy - hh, cy + hh);\n const style = heatCellStyle(cell.width, cell.height, s.radius);\n // the row and the column, clipped to the plot\n const top = Math.max(plot.y, cell.y);\n const bottom = Math.min(plot.y + plot.height, cell.y + cell.height);\n const left = Math.max(plot.x, cell.x);\n const right = Math.min(plot.x + plot.width, cell.x + cell.width);\n if (bottom > top)\n marks.push({\n kind: \"guide\",\n x: plot.x,\n y: top,\n width: plot.width,\n height: bottom - top,\n });\n if (right > left)\n marks.push({\n kind: \"guide\",\n x: left,\n y: plot.y,\n width: right - left,\n height: plot.height,\n });\n const packed = s.cellColors?.[it.index];\n const fill = packed ? unpackColor(packed) : s.color;\n marks.push({\n kind: \"cell\",\n x: cell.x + style.inset,\n y: cell.y + style.inset,\n width: Math.max(1, cell.width - style.inset * 2),\n height: Math.max(1, cell.height - style.inset * 2),\n color: it.color,\n ring: contrastRing(fill),\n radius: style.radius,\n });\n continue;\n }\n const { px, py } = pointOf(s, it.index, sc);\n if (\n px < plot.x - 1 ||\n px > plot.x + plot.width + 1 ||\n py < plot.y - 1 ||\n py > plot.y + plot.height + 1\n ) {\n continue;\n }\n const size =\n s.type === \"scatter\"\n ? dotSize(s, it.index) + 4\n : Math.max(9, s.lineWidth * 2 + 5);\n const rgba = s.pointColors?.[it.index] ?? s.color;\n marks.push({\n kind: \"dot\",\n x: px,\n y: py,\n size,\n color: it.color,\n halo: toCss(rgba, 0.2),\n });\n }\n if (bandHi > bandLo) {\n // the group of bars plus a margin, clipped to the plot\n const pad = Math.max(4, (bandHi - bandLo) * 0.14);\n const lo = sc.horizontal ? plot.y : plot.x;\n const hi = lo + (sc.horizontal ? plot.height : plot.width);\n const a = Math.max(lo, bandLo - pad);\n const b = Math.min(hi, bandHi + pad);\n if (b > a) {\n marks.unshift({\n kind: \"band\",\n ...(sc.horizontal\n ? { x: plot.x, y: a, width: plot.width, height: b - a }\n : { x: a, y: plot.y, width: b - a, height: plot.height }),\n });\n }\n }\n return marks;\n};\n\n/** Ring of a hovered cell: light on dark fills, dark on light ones */\nexport const contrastRing = (fill: Rgba): string =>\n luminance(fill) > 0.45\n ? \"rgba(15, 23, 42, 0.78)\"\n : \"rgba(255, 255, 255, 0.9)\";\n\n/** Plotted value of the hovered outlier of a box */\nconst plottedOutlier = (s: SeriesModel, it: ChartHoverItem): number => {\n const raw = s.raw.outliers?.[it.index];\n const k = raw ? raw.indexOf(it.outlier ?? NaN) : -1;\n return (\n (k >= 0 ? s.cols.outliers?.[it.index]?.[k] : undefined) ?? it.outlier ?? 0\n );\n};\n\n/** A line from the end of a bar to the next bar, pixels of the stage */\nexport interface ConnectorSegment {\n x0: number;\n y0: number;\n x1: number;\n y1: number;\n color: string;\n width: number;\n dash: number[];\n}\n\n/**\n * Connectors of the bar series (`connector`, waterfalls): from the end of\n * every bar to the next bar, at the value where the next one starts\n */\nexport const connectorSegments = (\n model: ChartModel,\n sc: Scales,\n): ConnectorSegment[] => {\n const out: ConnectorSegment[] = [];\n for (const s of model.series) {\n const c = s.connector;\n if (!c || s.hidden || s.type !== \"bar\" || !s.barTop) continue;\n const { x, count } = s.cols;\n const top = s.barTop;\n const half = s.barHalfWidth;\n const [v0, v1] =\n sc.view.x[0] <= sc.view.x[1] ? sc.view.x : [sc.view.x[1], sc.view.x[0]];\n const color = toCss(c.color, 0.75);\n let prev = -1;\n for (let i = 0; i < count && out.length < MAX_POINT_LABELS * 4; i++) {\n if (!Number.isFinite(top[i]) || !Number.isFinite(x[i])) continue;\n if (prev >= 0 && x[i] + half >= v0 && x[prev] - half <= v1) {\n const a = toScreen(sc, x[prev] + s.barOffset + half, top[prev]);\n const b = toScreen(sc, x[i] + s.barOffset - half, top[prev]);\n out.push({\n x0: a.x,\n y0: a.y,\n x1: b.x,\n y1: b.y,\n color,\n width: c.width,\n dash: c.dash,\n });\n }\n prev = i;\n }\n }\n return out;\n};\n\n/** A dependency with its color resolved against the theme */\nexport interface ResolvedDependency {\n from: string;\n to: string;\n color: string;\n}\n\n/** Colors of the dependency arrows (resolved once per options / theme) */\nexport const resolveDependencies = (\n dependencies: readonly ChartDependency[] | undefined,\n theme: ChartTheme,\n): ResolvedDependency[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n const muted = toCss(theme.textMuted, 0.85);\n return (dependencies ?? []).map((d) => ({\n from: d.from,\n to: d.to,\n color: d.color ? toCss(resolve(d.color, theme.textMuted)) : muted,\n }));\n};\n\n/**\n * Elbow arrow between two bars, pixels of the stage: an axis-aligned\n * polyline ending at the base of a filled triangular head\n */\nexport interface DependencyArrow {\n /** Corners of the line, from the end of the predecessor to the base of the head */\n points: { x: number; y: number }[];\n /** Tip and the two base corners of the arrowhead */\n head: [\n { x: number; y: number },\n { x: number; y: number },\n { x: number; y: number },\n ];\n color: string;\n width: number;\n}\n\n/** Length and half width of the arrowheads, in CSS pixels */\nexport const ARROW_HEAD = { length: 6, half: 3.5 };\n\ninterface RowSpan {\n /** Category position of the bar center */\n at: number;\n start: number;\n end: number;\n /** Half thickness of the bar / radius of the dot in pixels */\n half: number;\n /** A dot (milestone): the arrows stop at its edge */\n dot: boolean;\n}\n\n/** Bars (or dots) of every category, the first visible one per category */\nconst rowSpans = (model: ChartModel, sc: Scales): Map<number, RowSpan> => {\n const rows = new Map<number, RowSpan>();\n for (const s of model.series) {\n if (s.hidden || !s.tooltip) continue;\n if (s.type !== \"bar\" && s.type !== \"scatter\") continue;\n const { x, y, count } = s.cols;\n const bar = s.type === \"bar\" && s.barBase && s.barTop;\n const half = bar ? s.barHalfWidth / Math.abs(sc.xPerPx) : dotSize(s, 0) / 2;\n for (let i = 0; i < count; i++) {\n const k = Math.round(x[i]);\n if (rows.has(k)) continue;\n const start = bar ? s.barBase![i] : y[i];\n const end = bar ? s.barTop![i] : y[i];\n if (!Number.isFinite(start) || !Number.isFinite(end)) continue;\n rows.set(k, {\n at: x[i] + slotOffset(s),\n start: Math.min(start, end),\n end: Math.max(start, end),\n half,\n dot: !bar,\n });\n }\n }\n return rows;\n};\n\n/**\n * Dependency arrows (`dependencies`, Gantt charts): from the end of the\n * predecessor to the start of the successor; when the successor starts\n * too early the line turns around between the rows\n */\nexport const dependencyArrows = (\n model: ChartModel,\n sc: Scales,\n dependencies: readonly ResolvedDependency[],\n): DependencyArrow[] => {\n if (!dependencies.length || model.x.type !== \"category\") return [];\n const rows = rowSpans(model, sc);\n const index = new Map<string, number>();\n model.x.categories.forEach((c, i) => {\n if (!index.has(c)) index.set(c, i);\n });\n // (value pixel, category pixel) -> stage pixels\n const horizontal = sc.horizontal;\n const pt = (v: number, c: number) =>\n horizontal ? { x: v, y: c } : { x: c, y: v };\n const valuePx = (value: number) => {\n const p = toScreen(sc, 0, value);\n return horizontal ? p.x : p.y;\n };\n const categoryPx = (at: number) => {\n const p = toScreen(sc, at, 0);\n return horizontal ? p.y : p.x;\n };\n const dir = Math.sign(valuePx(sc.view.y[1]) - valuePx(sc.view.y[0])) || 1;\n const rowPx = Math.abs(categoryPx(1) - categoryPx(0));\n const { length, half } = ARROW_HEAD;\n const gap = 8;\n const out: DependencyArrow[] = [];\n for (const d of dependencies) {\n const a = rows.get(index.get(d.from) ?? NaN);\n const b = rows.get(index.get(d.to) ?? NaN);\n if (!a || !b || a === b) continue;\n const ev = valuePx(a.end) + (a.dot ? dir * a.half : 0);\n const ca = categoryPx(a.at);\n const sv = valuePx(b.start) - dir * (b.dot ? b.half + 1 : 1);\n const cb = categoryPx(b.at);\n const base = sv - dir * length;\n const points = [pt(ev, ca)];\n const exit = ev + dir * gap;\n if (dir * (base - exit) >= 0) {\n // room before the successor: out, across the rows, in\n points.push(pt(exit, ca), pt(exit, cb), pt(base, cb));\n } else {\n // around: out, to the gap between the rows, back, across, in\n const side = Math.sign(cb - ca) || 1;\n const between = ca + side * Math.max(a.half + 3, rowPx / 2);\n const back = base - dir * gap;\n points.push(\n pt(exit, ca),\n pt(exit, between),\n pt(back, between),\n pt(back, cb),\n pt(base, cb),\n );\n }\n out.push({\n points,\n head: [pt(sv, cb), pt(base, cb - half), pt(base, cb + half)],\n color: d.color,\n width: 1.25,\n });\n }\n return out;\n};\n\n/** Visual map of a heatmap: its color ramp and the values at the ends */\nexport interface ColorLegend {\n seriesIndex: number;\n /** CSS colors at even steps from the lowest to the highest value */\n stops: string[];\n /** Labels along the ramp (`at`: 0-1): the ends, and the middle of diverging ramps */\n labels: { at: number; text: string }[];\n}\n\nconst COLOR_STOPS = 12;\n\n/**\n * Color legend of a heatmap chart (every series is a heatmap; the first\n * visible one), `null` otherwise\n */\nexport const colorLegend = (model: ChartModel): ColorLegend | null => {\n if (!model.series.length || model.series.some((s) => s.type !== \"heatmap\"))\n return null;\n const s = model.series.find((it) => !it.hidden && it.colorLut);\n const lut = s?.colorLut;\n if (!s || !lut) return null;\n const stops: string[] = [];\n for (let k = 0; k < COLOR_STOPS; k++) {\n const packed = lut[Math.round((k / (COLOR_STOPS - 1)) * (lut.length - 1))];\n stops.push(toCss(unpackColor(packed ?? 0)));\n }\n const format = s.format ?? model.formatValue;\n const [lo, hi] = s.valueRange;\n const labels = [\n { at: 0, text: format(lo) },\n { at: 1, text: format(hi) },\n ];\n const mid = s.colorMidpoint;\n if (mid !== null && mid > lo && mid < hi)\n labels.splice(1, 0, { at: 0.5, text: format(mid) });\n return { seriesIndex: s.index, stops, labels };\n};\n\n/** Whether the legend shows (`legend` option; heatmaps get their color legend) */\nexport const legendShown = (\n option: ChartOptions[\"legend\"],\n model: ChartModel,\n named: number,\n): boolean =>\n option === undefined ? named > 1 || colorLegend(model) !== null : !!option;\n\n/** Swatch of a series in the legend */\nexport const legendShape = (\n type: SeriesModel[\"type\"],\n): \"dot\" | \"line\" | \"square\" =>\n type === \"scatter\" ? \"dot\" : type === \"line\" ? \"line\" : \"square\";\n\n/** Whether the guide line follows the pointer */\nexport const showsCrosshair = (\n model: ChartModel,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n) =>\n crosshair ??\n (model.tooltipMode === \"axis\" &&\n event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"line\" || type === \"area\";\n }) &&\n // bars get a band instead\n !event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"bar\" || type === \"candlestick\" || type === \"boxplot\";\n }));\n\n/** Pixel of the guide line along the x axis (`null` when hidden / outside the plot) */\nexport const crosshairAt = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n): number | null => {\n if (!showsCrosshair(model, event, crosshair)) return null;\n const first = event.items[0];\n const c = sc.xToPx(\n model.series[first.seriesIndex]?.cols.x[first.index] ??\n toPlotX(model, first.x),\n );\n const lo = sc.horizontal ? sc.plot.y : sc.plot.x;\n const hi = lo + (sc.horizontal ? sc.plot.height : sc.plot.width);\n return c >= lo && c <= hi ? c : null;\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../color.cjs"),t=require("../scale.cjs"),n=require("../overlay.cjs"),r=require("./scene.cjs");var i=e=>r.uniqueKeys(e.data.map(e=>e.name)),a=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,o=(e,t)=>(t.ranges??e.ranges??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)).slice().sort((e,t)=>e-t),s=(e,n)=>{let i=o(e,n),s=r.finite(n.value),c=a(n.target),ee=[0,s,...c===void 0?[]:[c]],l=a(n.min)??Math.min(...ee),u=[s,...c===void 0?[]:[c],...i],d=a(n.max);if(d===void 0){let e=Math.max(...u),n=i.length?i[i.length-1]:-1/0;d=e<=n?n:t.niceDomain(l,e,5)[1]}return d>l||(d===l?d=l+1:[l,d]=[d,l]),[l,d]},c=(e,t,n)=>{i(e).forEach((i,o)=>{let s=e.data[o];n.set(i,r.finite(s.value));let c=a(s.target);c!==void 0&&n.set(`>${i}`,c),n.set(`~${i}`,+!t.has(o))})},ee=(t,n,i)=>{let{theme:a}=n;return Array.from({length:Math.max(1,i)},(n,o)=>{let s=e.mix(a.background,a.text,i<=1?.09:.24-.16*o/(i-1)),c=t.rangeColors?.[o];return c?r.resolveWith(a,c,s):s})},l=(c,l)=>{let{theme:u,area:d,measure:f,hidden:p}=l,te=i(c),m=c.data.length,h=te.map((e,t)=>r.clamp(l.value(`~${e}`,+!p.has(t)),0,1)),g=r.sum(h);if(!m||g<=1e-6)return r.emptyLayout(l);let _=c.orientation===`vertical`,v=r.clamp(l.enter,0,1),ne=r.clamp(r.finite(c.barSize,.4),.1,1),y=n.font(u,12,600),b=n.font(u,11),x=n.font(u,12,600),S=n.font(u,10),C=e.toCss(u.textMuted),w=e.toCss(u.text),re=e.toCss(r.resolveWith(u,c.targetColor,u.text)),ie=c.ticks!==!1,T=[],E=[],D=c.data.some((e,t)=>!!e.subtitle&&h[t]>0),O=c.data.map(e=>l.format(r.finite(e.value))),k=_?0:Math.min(d.width*.32,Math.max(0,...c.data.map(e=>Math.max(f(e.name,y),e.subtitle?f(e.subtitle,b):0)))+14),A=_?0:Math.min(d.width*.2,Math.max(0,...O.map(e=>f(e,x)))+12),j=_?22+(D?14:0):0,M=_?20:0,ae=(_?d.width:d.height)/g,N=0;return c.data.forEach((n,i)=>{let u=h[i],m=ae*u,g=N;if(N+=m,u<=.001)return;let D=te[i],P=u,[F,I]=s(c,n),L=o(c,n).filter(e=>e>F),R=ee(c,l,L.length),oe=l.value(D,r.finite(n.value)),z=a(n.target),B=z===void 0?void 0:l.value(`>${D}`,z),se=l.color(n.color,i),V=e.toCss(se),H=r.clamp(m*(_?.3:.42),8,28),U=_?Math.max(1,d.height-j-M):Math.max(1,d.width-k-A),W=ie?t.linearTicks(F,I,Math.max(2,Math.floor(U/70))):[],G=_?m/2-H/2-6:m-H-10,ce=Math.max(0,...W.map(e=>f(l.format(e),S))),K=W.length>1&&(_?G>=ce:G>=14),le=_?d.y+d.height-j:d.x+k,q=e=>le+(_?-1:1)*U*r.clamp((e-F)/(I-F),0,1),J=_?d.x+g+m/2:d.y+g+(m-(K?14:0))/2,Y=(e,t,n)=>{let r=Math.min(q(e),q(t)),i=Math.max(q(e),q(t));return _?{x:J-n/2,y:r,width:n,height:i-r}:{x:r,y:J-n/2,width:i-r,height:n}};T.push({kind:`rect`,..._?{x:d.x+g,y:d.y,width:m,height:d.height}:{x:d.x,y:d.y+g,width:d.width,height:m},radius:0,fill:`rgba(0, 0, 0, 0)`,hit:i,alpha:P});let ue=L.length?L:[I],X=F;ue.forEach((t,n)=>{let r=Math.min(t,I);r>X&&T.push({kind:`rect`,...Y(X,r,H),radius:0,fill:e.toCss(R[n]),hit:i,alpha:P}),X=Math.max(X,r)}),X<I&&T.push({kind:`rect`,...Y(X,I,H),radius:0,fill:e.toCss(R[R.length-1]),hit:i,alpha:P});let Z=r.clamp(0,F,I),de=Z+(oe-Z)*v;if(T.push({kind:`rect`,...Y(Z,de,H*ne),radius:1,fill:V,hit:i,alpha:P,brighten:!0}),B!==void 0&&B>=F&&B<=I){let e=q(B),t=H*.82;T.push({kind:`rect`,..._?{x:J-t/2,y:e-1.5,width:t,height:3}:{x:e-1.5,y:J-t/2,width:3,height:t},radius:1,fill:re,hit:i,alpha:P*v})}if(K)for(let e of W){let t=q(e);T.push({kind:`text`,x:_?J-H/2-5:t,y:_?t:J+H/2+4,text:l.format(e),font:S,color:C,align:_?`right`:`center`,baseline:_?`middle`:`top`,hit:i,alpha:P})}if(_){let e=Math.max(0,m-8),t=r.ellipsize(n.name,e,y,f),a=d.y+d.height;t&&T.push({kind:`text`,x:J,y:a-j+16,text:t,font:y,color:w,align:`center`,baseline:`middle`,hit:i,alpha:P});let o=n.subtitle?r.ellipsize(n.subtitle,e,b,f):``;o&&T.push({kind:`text`,x:J,y:a-j+31,text:o,font:b,color:C,align:`center`,baseline:`middle`,hit:i,alpha:P});let s=r.ellipsize(O[i],e,x,f);s&&T.push({kind:`text`,x:J,y:d.y+M/2,text:s,font:x,color:w,align:`center`,baseline:`middle`,hit:i,alpha:P})}else{let e=Math.max(0,k-14),t=r.ellipsize(n.name,e,y,f),a=n.subtitle&&m>=34?r.ellipsize(n.subtitle,e,b,f):``,o=d.x+k-14;t&&T.push({kind:`text`,x:o,y:a?J-7:J,text:t,font:y,color:w,align:`right`,baseline:`middle`,hit:i,alpha:P}),a&&T.push({kind:`text`,x:o,y:J+8,text:a,font:b,color:C,align:`right`,baseline:`middle`,hit:i,alpha:P});let s=r.ellipsize(O[i],A-8,x,f);s&&T.push({kind:`text`,x:d.x+d.width,y:J,text:s,font:x,color:w,align:`right`,baseline:`middle`,hit:i,alpha:P})}if(p.has(i))return;let Q=r.finite(n.value),$=z!==void 0&&z!==0?Q/z:(Q-F)/(I-F),fe=L.findIndex(e=>Q<=e),pe=fe>=0?c.rangeLabels?.[fe]:void 0,me=q(Q);E.push({index:i,name:n.name,value:Q,percent:$,share:l.percent($),color:V,x:_?J:me,y:_?me:J,rows:[{name:l.labels.value,value:l.format(Q)},...z===void 0?[]:[{name:l.labels.target,value:l.format(z)},{name:l.labels.ofTarget,value:l.percent($)}],...pe?[{name:l.labels.range,value:pe}]:[]]})}),{nodes:T,items:E,dim:.4,empty:!1}};exports.bulletScale=s,exports.bulletValues=c,exports.layoutBullet=l;
1
+ const e=require("../color.cjs"),t=require("../scale.cjs"),n=require("../overlay.cjs"),r=require("./scene.cjs");var i=e=>r.uniqueKeys(e.data.map(e=>e.name)),a=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,o=(e,t)=>(t.ranges??e.ranges??[]).filter(e=>typeof e==`number`&&Number.isFinite(e)).slice().sort((e,t)=>e-t),s=(e,n)=>{let i=o(e,n),s=r.finite(n.value),c=a(n.target),l=[0,s,...c===void 0?[]:[c]],u=a(n.min)??Math.min(...l),d=[s,...c===void 0?[]:[c],...i],f=a(n.max);if(f===void 0){let e=Math.max(...d),n=i.length?i[i.length-1]:-1/0;f=e<=n?n:t.niceDomain(u,e,5)[1]}return f>u||(f===u?f=u+1:[u,f]=[f,u]),[u,f]},c=(e,t,n)=>{i(e).forEach((i,o)=>{let s=e.data[o];n.set(i,r.finite(s.value));let c=a(s.target);c!==void 0&&n.set(`>${i}`,c),n.set(`~${i}`,+!t.has(o))})},l=(t,n,i)=>{let{theme:a}=n;return Array.from({length:Math.max(1,i)},(n,o)=>{let s=e.mix(a.background,a.text,i<=1?.09:.24-.16*o/(i-1)),c=t.rangeColors?.[o];return c?r.resolveWith(a,c,s):s})},u=15,d=(c,d)=>{let{theme:f,area:p,measure:m,hidden:ee}=d,h=i(c),g=c.data.length,_=h.map((e,t)=>r.clamp(d.value(`~${e}`,+!ee.has(t)),0,1)),v=r.sum(_);if(!g||v<=1e-6)return r.emptyLayout(d);let y=c.orientation===`vertical`,b=r.clamp(d.enter,0,1),te=r.clamp(r.finite(c.barSize,.4),.1,1),x=n.font(f,12,600),S=n.font(f,11),C=n.font(f,12,600),ne=n.font(f,10),w=e.toCss(f.textMuted),T=e.toCss(f.text),re=e.toCss(r.resolveWith(f,c.targetColor,f.text)),ie=c.ticks!==!1,E=[],D=[],O=c.data.some((e,t)=>!!e.subtitle&&_[t]>0),k=c.data.map(e=>d.format(r.finite(e.value))),A=c.data.map(e=>m(e.name,x)),j=p.width*(p.width<420?.34:.4),M=c.data.map((e,t)=>A[t]<=j-14?A[t]:Math.max(0,...r.wrapText(e.name,j-14,x,m,2).map(e=>m(e,x)))),N=y?0:Math.min(j,Math.max(0,...c.data.map((e,t)=>Math.max(M[t],e.subtitle?m(e.subtitle,S):0)))+14),P=y?0:Math.min(p.width*.2,Math.max(0,...k.map(e=>m(e,C)))+12),F=p.width/v,I=y&&c.data.some((e,t)=>_[t]>0&&A[t]>F-8),L=y?22+(I?u:0)+(O?14:0):0,R=y?20:0,ae=(y?p.width:p.height)/v,z=0;return c.data.forEach((n,i)=>{let f=_[i],g=ae*f,v=z;if(z+=g,f<=.001)return;let O=h[i],A=f,[j,M]=s(c,n),F=o(c,n).filter(e=>e>j),B=l(c,d,F.length),oe=d.value(O,r.finite(n.value)),V=a(n.target),H=V===void 0?void 0:d.value(`>${O}`,V),se=d.color(n.color,i),U=e.toCss(se),W=r.clamp(g*(y?.3:.42),8,28),G=y?Math.max(1,p.height-L-R):Math.max(1,p.width-N-P),K=ie?t.linearTicks(j,M,Math.max(2,Math.floor(G/70))):[],ce=y?g/2-W/2-6:g-W-10,le=Math.max(0,...K.map(e=>m(d.format(e),ne))),ue=K.length>1&&(y?ce>=le:ce>=14),de=y?p.y+p.height-L:p.x+N,q=e=>de+(y?-1:1)*G*r.clamp((e-j)/(M-j),0,1),J=y?p.x+v+g/2:p.y+v+(g-(ue?14:0))/2,Y=(e,t,n)=>{let r=Math.min(q(e),q(t)),i=Math.max(q(e),q(t));return y?{x:J-n/2,y:r,width:n,height:i-r}:{x:r,y:J-n/2,width:i-r,height:n}};E.push({kind:`rect`,...y?{x:p.x+v,y:p.y,width:g,height:p.height}:{x:p.x,y:p.y+v,width:p.width,height:g},radius:0,fill:`rgba(0, 0, 0, 0)`,hit:i,alpha:A});let fe=F.length?F:[M],X=j;fe.forEach((t,n)=>{let r=Math.min(t,M);r>X&&E.push({kind:`rect`,...Y(X,r,W),radius:0,fill:e.toCss(B[n]),hit:i,alpha:A}),X=Math.max(X,r)}),X<M&&E.push({kind:`rect`,...Y(X,M,W),radius:0,fill:e.toCss(B[B.length-1]),hit:i,alpha:A});let Z=r.clamp(0,j,M),pe=Z+(oe-Z)*b;if(E.push({kind:`rect`,...Y(Z,pe,W*te),radius:1,fill:U,hit:i,alpha:A,brighten:!0}),H!==void 0&&H>=j&&H<=M){let e=q(H),t=W*.82;E.push({kind:`rect`,...y?{x:J-t/2,y:e-1.5,width:t,height:3}:{x:e-1.5,y:J-t/2,width:3,height:t},radius:1,fill:re,hit:i,alpha:A*b})}if(ue)for(let e of K){let t=q(e);E.push({kind:`text`,x:y?J-W/2-5:t,y:y?t:J+W/2+4,text:d.format(e),font:ne,color:w,align:y?`right`:`center`,baseline:y?`middle`:`top`,hit:i,alpha:A})}if(y){let e=Math.max(0,g-8),t=r.wrapText(n.name,e,x,m,I?2:1),a=p.y+p.height;t.forEach((e,t)=>E.push({kind:`text`,x:J,y:a-L+16+t*u,text:e,font:x,color:T,align:`center`,baseline:`middle`,hit:i,alpha:A}));let o=n.subtitle?r.ellipsize(n.subtitle,e,S,m):``;o&&E.push({kind:`text`,x:J,y:a-L+31+(I?u:0),text:o,font:S,color:w,align:`center`,baseline:`middle`,hit:i,alpha:A});let s=r.ellipsize(k[i],e,C,m);s&&E.push({kind:`text`,x:J,y:p.y+R/2,text:s,font:C,color:T,align:`center`,baseline:`middle`,hit:i,alpha:A})}else{let e=Math.max(0,N-14),t=g-4,a=n.subtitle&&t>=29?r.ellipsize(n.subtitle,e,S,m):``,o=a?13:0,s=r.wrapText(n.name,e,x,m,t>=30+o?2:1),c=J-(s.length*u+o)/2,l=p.x+N-14;s.forEach((e,t)=>E.push({kind:`text`,x:l,y:c+u/2+t*u,text:e,font:x,color:T,align:`right`,baseline:`middle`,hit:i,alpha:A})),a&&E.push({kind:`text`,x:l,y:c+s.length*u+o/2,text:a,font:S,color:w,align:`right`,baseline:`middle`,hit:i,alpha:A});let d=r.ellipsize(k[i],P-8,C,m);d&&E.push({kind:`text`,x:p.x+p.width,y:J,text:d,font:C,color:T,align:`right`,baseline:`middle`,hit:i,alpha:A})}if(ee.has(i))return;let Q=r.finite(n.value),$=V!==void 0&&V!==0?Q/V:(Q-j)/(M-j),me=F.findIndex(e=>Q<=e),he=me>=0?c.rangeLabels?.[me]:void 0,ge=q(Q);D.push({index:i,name:n.name,value:Q,percent:$,share:d.percent($),color:U,x:y?J:ge,y:y?ge:J,rows:[{name:d.labels.value,value:d.format(Q)},...V===void 0?[]:[{name:d.labels.target,value:d.format(V)},{name:d.labels.ofTarget,value:d.percent($)}],...he?[{name:d.labels.range,value:he}]:[]]})}),{nodes:E,items:D,dim:.4,empty:!1}};exports.bulletScale=s,exports.bulletValues=c,exports.layoutBullet=d;
2
2
  //# sourceMappingURL=bullet.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bullet.cjs","names":["uniqueKeys","finite","niceDomain","mix","resolveWith","clamp","sum","emptyLayout","font","toCss","linearTicks","ellipsize","require_color","require_scale","require_overlay","require_scene","keysOf","o","d","num","v","rangesOf","r","a","b","bulletScale","ranges","value","target","lows","min","highs","max","top","last","bulletValues","i","out","key","rangeFills","c","count","gray","theme","k","own","layoutBullet","keys","n","weights","total","vertical","enter","barSize","nameFont","subFont","valueFont","tickFont","muted","text","markColor","showTicks","nodes","items","hasSubtitle","valueText","labelW","area","measure","valueW","t","labelH","valueH","unit","offset","w","slot","from","alpha","fills","target0","color","css","thick","span","ticks","tickRoom","tickW","drawTicks","p0","along","mid","band","lo","hi","bounds","edge","to","bound","base","shownValue","at","len","room","name","bottom","sub","x","hidden","percent","rangeIndex","rangeName","end"],"sources":["../../../../../charts/src/engine/shapes/bullet.ts"],"sourcesContent":["// Bullet chart layout (Stephen Few): per row, qualitative ranges as shades\n// of gray, the measure as a bar and the target as a marker, on the row's own\n// scale; name and subtitle on the left (below when vertical), value on the\n// right (above when vertical), tick labels when there is room.\n\nimport { mix, toCss, type Rgba } from \"../color\";\nimport { font } from \"../overlay\";\nimport { linearTicks, niceDomain } from \"../scale\";\nimport {\n clamp,\n ellipsize,\n emptyLayout,\n finite,\n resolveWith,\n sum,\n uniqueKeys,\n type LayoutContext,\n type LayoutResult,\n type ShapeItem,\n type ShapeNode,\n} from \"./scene\";\nimport type { BulletChartOptions, BulletDatum } from \"./types\";\n\nconst keysOf = (o: BulletChartOptions) => uniqueKeys(o.data.map((d) => d.name));\n\nconst num = (v: number | undefined) =>\n typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n\n/** Qualitative ranges of a row: finite upper bounds, ascending */\nconst rangesOf = (o: BulletChartOptions, d: BulletDatum) =>\n (d.ranges ?? o.ranges ?? [])\n .filter((r) => typeof r === \"number\" && Number.isFinite(r))\n .slice()\n .sort((a, b) => a - b);\n\n/** Scale of a row: `[min, max]` */\nexport const bulletScale = (\n o: BulletChartOptions,\n d: BulletDatum,\n): [number, number] => {\n const ranges = rangesOf(o, d);\n const value = finite(d.value);\n const target = num(d.target);\n const lows = [0, value, ...(target !== undefined ? [target] : [])];\n let min = num(d.min) ?? Math.min(...lows);\n const highs = [value, ...(target !== undefined ? [target] : []), ...ranges];\n let max = num(d.max);\n if (max === undefined) {\n const top = Math.max(...highs);\n const last = ranges.length ? ranges[ranges.length - 1] : -Infinity;\n max = top <= last ? last : niceDomain(min, top, 5)[1];\n }\n if (!(max > min)) {\n if (max === min) max = min + 1;\n else [min, max] = [max, min];\n }\n return [min, max];\n};\n\nexport const bulletValues = (\n o: BulletChartOptions,\n hidden: ReadonlySet<number>,\n out: Map<string, number>,\n) => {\n keysOf(o).forEach((key, i) => {\n const d = o.data[i];\n out.set(key, finite(d.value));\n const target = num(d.target);\n if (target !== undefined) out.set(`>${key}`, target);\n out.set(`~${key}`, hidden.has(i) ? 0 : 1);\n });\n};\n\n/** Default fills of the ranges: grays, the lowest (poorest) darkest */\nconst rangeFills = (\n o: BulletChartOptions,\n c: LayoutContext,\n count: number,\n): Rgba[] => {\n const { theme } = c;\n return Array.from({ length: Math.max(1, count) }, (_, k) => {\n const gray = mix(\n theme.background,\n theme.text,\n count <= 1 ? 0.09 : 0.24 - (0.16 * k) / (count - 1),\n );\n const own = o.rangeColors?.[k];\n return own ? resolveWith(theme, own, gray) : gray;\n });\n};\n\nexport const layoutBullet = (\n o: BulletChartOptions,\n c: LayoutContext,\n): LayoutResult => {\n const { theme, area, measure, hidden } = c;\n const keys = keysOf(o);\n const n = o.data.length;\n const weights = keys.map((key, i) =>\n clamp(c.value(`~${key}`, hidden.has(i) ? 0 : 1), 0, 1),\n );\n const total = sum(weights);\n if (!n || total <= 1e-6) return emptyLayout(c);\n const vertical = o.orientation === \"vertical\";\n const enter = clamp(c.enter, 0, 1);\n const barSize = clamp(finite(o.barSize, 0.4), 0.1, 1);\n const nameFont = font(theme, 12, 600);\n const subFont = font(theme, 11);\n const valueFont = font(theme, 12, 600);\n const tickFont = font(theme, 10);\n const muted = toCss(theme.textMuted);\n const text = toCss(theme.text);\n const transparent = \"rgba(0, 0, 0, 0)\";\n const markColor = toCss(resolveWith(theme, o.targetColor, theme.text));\n const showTicks = o.ticks !== false;\n\n const nodes: ShapeNode[] = [];\n const items: ShapeItem[] = [];\n const hasSubtitle = o.data.some((d, i) => !!d.subtitle && weights[i] > 0);\n const valueText = o.data.map((d) => c.format(finite(d.value)));\n\n // shared columns (horizontal) / bands (vertical) of the labels and values\n const labelW = vertical\n ? 0\n : Math.min(\n area.width * 0.32,\n Math.max(\n 0,\n ...o.data.map((d) =>\n Math.max(\n measure(d.name, nameFont),\n d.subtitle ? measure(d.subtitle, subFont) : 0,\n ),\n ),\n ) + 14,\n );\n const valueW = vertical\n ? 0\n : Math.min(\n area.width * 0.2,\n Math.max(0, ...valueText.map((t) => measure(t, valueFont))) + 12,\n );\n const labelH = vertical ? 22 + (hasSubtitle ? 14 : 0) : 0;\n const valueH = vertical ? 20 : 0;\n const unit = (vertical ? area.width : area.height) / total;\n\n let offset = 0;\n o.data.forEach((d, i) => {\n const w = weights[i];\n const slot = unit * w;\n const from = offset;\n offset += slot;\n if (w <= 1e-3) return;\n const key = keys[i];\n const alpha = w;\n const [min, max] = bulletScale(o, d);\n const ranges = rangesOf(o, d).filter((r) => r > min);\n const fills = rangeFills(o, c, ranges.length);\n const value = c.value(key, finite(d.value));\n const target0 = num(d.target);\n const target =\n target0 !== undefined ? c.value(`>${key}`, target0) : undefined;\n const color = c.color(d.color, i);\n const css = toCss(color);\n const thick = clamp(slot * (vertical ? 0.3 : 0.42), 8, 28);\n const span = vertical\n ? Math.max(1, area.height - labelH - valueH)\n : Math.max(1, area.width - labelW - valueW);\n const ticks = showTicks\n ? linearTicks(min, max, Math.max(2, Math.floor(span / 70)))\n : [];\n const tickRoom = vertical ? slot / 2 - thick / 2 - 6 : slot - thick - 10;\n const tickW = Math.max(\n 0,\n ...ticks.map((t) => measure(c.format(t), tickFont)),\n );\n const drawTicks =\n ticks.length > 1 && (vertical ? tickRoom >= tickW : tickRoom >= 14);\n\n // position along the scale, and across it\n const p0 = vertical ? area.y + area.height - labelH : area.x + labelW;\n const along = (v: number) =>\n p0 + (vertical ? -1 : 1) * span * clamp((v - min) / (max - min), 0, 1);\n const mid = vertical\n ? area.x + from + slot / 2\n : area.y + from + (slot - (drawTicks ? 14 : 0)) / 2;\n /** Rectangle from `a` to `b` along the scale, `t` thick across it */\n const band = (a: number, b: number, t: number) => {\n const lo = Math.min(along(a), along(b));\n const hi = Math.max(along(a), along(b));\n return vertical\n ? { x: mid - t / 2, y: lo, width: t, height: hi - lo }\n : { x: lo, y: mid - t / 2, width: hi - lo, height: t };\n };\n\n // the whole row / column is a hover target\n nodes.push({\n kind: \"rect\",\n ...(vertical\n ? { x: area.x + from, y: area.y, width: slot, height: area.height }\n : { x: area.x, y: area.y + from, width: area.width, height: slot }),\n radius: 0,\n fill: transparent,\n hit: i,\n alpha,\n });\n // ranges: disjoint segments (translucent colors must not add up)\n const bounds = ranges.length ? ranges : [max];\n let edge = min;\n bounds.forEach((bound, k) => {\n const to = Math.min(bound, max);\n if (to > edge)\n nodes.push({\n kind: \"rect\",\n ...band(edge, to, thick),\n radius: 0,\n fill: toCss(fills[k]),\n hit: i,\n alpha,\n });\n edge = Math.max(edge, to);\n });\n if (edge < max)\n nodes.push({\n kind: \"rect\",\n ...band(edge, max, thick),\n radius: 0,\n fill: toCss(fills[fills.length - 1]),\n hit: i,\n alpha,\n });\n // measure\n const base = clamp(0, min, max);\n const shownValue = base + (value - base) * enter;\n nodes.push({\n kind: \"rect\",\n ...band(base, shownValue, thick * barSize),\n radius: 1,\n fill: css,\n hit: i,\n alpha,\n brighten: true,\n });\n // target\n if (target !== undefined && target >= min && target <= max) {\n const at = along(target);\n const len = thick * 0.82;\n nodes.push({\n kind: \"rect\",\n ...(vertical\n ? { x: mid - len / 2, y: at - 1.5, width: len, height: 3 }\n : { x: at - 1.5, y: mid - len / 2, width: 3, height: len }),\n radius: 1,\n fill: markColor,\n hit: i,\n alpha: alpha * enter,\n });\n }\n // ticks\n if (drawTicks)\n for (const t of ticks) {\n const at = along(t);\n nodes.push({\n kind: \"text\",\n x: vertical ? mid - thick / 2 - 5 : at,\n y: vertical ? at : mid + thick / 2 + 4,\n text: c.format(t),\n font: tickFont,\n color: muted,\n align: vertical ? \"right\" : \"center\",\n baseline: vertical ? \"middle\" : \"top\",\n hit: i,\n alpha,\n });\n }\n\n // name, subtitle and value\n if (vertical) {\n const room = Math.max(0, slot - 8);\n const name = ellipsize(d.name, room, nameFont, measure);\n const bottom = area.y + area.height;\n if (name)\n nodes.push({\n kind: \"text\",\n x: mid,\n y: bottom - labelH + 16,\n text: name,\n font: nameFont,\n color: text,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n const sub = d.subtitle\n ? ellipsize(d.subtitle, room, subFont, measure)\n : \"\";\n if (sub)\n nodes.push({\n kind: \"text\",\n x: mid,\n y: bottom - labelH + 31,\n text: sub,\n font: subFont,\n color: muted,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n const value = ellipsize(valueText[i], room, valueFont, measure);\n if (value)\n nodes.push({\n kind: \"text\",\n x: mid,\n y: area.y + valueH / 2,\n text: value,\n font: valueFont,\n color: text,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n } else {\n const room = Math.max(0, labelW - 14);\n const name = ellipsize(d.name, room, nameFont, measure);\n const sub =\n d.subtitle && slot >= 34\n ? ellipsize(d.subtitle, room, subFont, measure)\n : \"\";\n const x = area.x + labelW - 14;\n if (name)\n nodes.push({\n kind: \"text\",\n x,\n y: sub ? mid - 7 : mid,\n text: name,\n font: nameFont,\n color: text,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n if (sub)\n nodes.push({\n kind: \"text\",\n x,\n y: mid + 8,\n text: sub,\n font: subFont,\n color: muted,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n const value = ellipsize(valueText[i], valueW - 8, valueFont, measure);\n if (value)\n nodes.push({\n kind: \"text\",\n x: area.x + area.width,\n y: mid,\n text: value,\n font: valueFont,\n color: text,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n }\n\n if (hidden.has(i)) return;\n const v = finite(d.value);\n const percent =\n target0 !== undefined && target0 !== 0\n ? v / target0\n : (v - min) / (max - min);\n const rangeIndex = ranges.findIndex((r) => v <= r);\n const rangeName = rangeIndex >= 0 ? o.rangeLabels?.[rangeIndex] : undefined;\n const end = along(v);\n items.push({\n index: i,\n name: d.name,\n value: v,\n percent,\n share: c.percent(percent),\n color: css,\n x: vertical ? mid : end,\n y: vertical ? end : mid,\n rows: [\n { name: c.labels.value, value: c.format(v) },\n ...(target0 !== undefined\n ? [\n { name: c.labels.target, value: c.format(target0) },\n { name: c.labels.ofTarget, value: c.percent(percent) },\n ]\n : []),\n ...(rangeName ? [{ name: c.labels.range, value: rangeName }] : []),\n ],\n });\n });\n\n return { nodes, items, dim: 0.4, empty: false };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"bullet.cjs","names":["uniqueKeys","finite","niceDomain","mix","resolveWith","clamp","sum","emptyLayout","font","toCss","wrapText","linearTicks","ellipsize","require_color","require_scale","require_overlay","require_scene","keysOf","o","d","num","v","rangesOf","r","a","b","bulletScale","ranges","value","target","lows","min","highs","max","top","last","bulletValues","i","out","key","rangeFills","c","count","gray","theme","k","own","NAME_LINE","layoutBullet","keys","n","weights","total","vertical","enter","barSize","nameFont","subFont","valueFont","tickFont","muted","text","markColor","showTicks","nodes","items","hasSubtitle","valueText","nameW","measure","labelCap","area","lineW","l","labelW","valueW","t","columnW","wraps","labelH","valueH","unit","offset","w","slot","from","alpha","fills","target0","color","css","thick","span","ticks","tickRoom","tickW","drawTicks","p0","along","mid","band","lo","hi","bounds","edge","to","bound","base","shownValue","at","len","room","lines","bottom","line","sub","avail","subH","x","hidden","percent","rangeIndex","rangeName","end"],"sources":["../../../../../charts/src/engine/shapes/bullet.ts"],"sourcesContent":["// Bullet chart layout (Stephen Few): per row, qualitative ranges as shades\n// of gray, the measure as a bar and the target as a marker, on the row's own\n// scale; name and subtitle on the left (below when vertical), value on the\n// right (above when vertical), tick labels when there is room.\n\nimport { mix, toCss, type Rgba } from \"../color\";\nimport { font } from \"../overlay\";\nimport { linearTicks, niceDomain } from \"../scale\";\nimport {\n clamp,\n ellipsize,\n emptyLayout,\n finite,\n resolveWith,\n sum,\n uniqueKeys,\n wrapText,\n type LayoutContext,\n type LayoutResult,\n type ShapeItem,\n type ShapeNode,\n} from \"./scene\";\nimport type { BulletChartOptions, BulletDatum } from \"./types\";\n\nconst keysOf = (o: BulletChartOptions) => uniqueKeys(o.data.map((d) => d.name));\n\nconst num = (v: number | undefined) =>\n typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n\n/** Qualitative ranges of a row: finite upper bounds, ascending */\nconst rangesOf = (o: BulletChartOptions, d: BulletDatum) =>\n (d.ranges ?? o.ranges ?? [])\n .filter((r) => typeof r === \"number\" && Number.isFinite(r))\n .slice()\n .sort((a, b) => a - b);\n\n/** Scale of a row: `[min, max]` */\nexport const bulletScale = (\n o: BulletChartOptions,\n d: BulletDatum,\n): [number, number] => {\n const ranges = rangesOf(o, d);\n const value = finite(d.value);\n const target = num(d.target);\n const lows = [0, value, ...(target !== undefined ? [target] : [])];\n let min = num(d.min) ?? Math.min(...lows);\n const highs = [value, ...(target !== undefined ? [target] : []), ...ranges];\n let max = num(d.max);\n if (max === undefined) {\n const top = Math.max(...highs);\n const last = ranges.length ? ranges[ranges.length - 1] : -Infinity;\n max = top <= last ? last : niceDomain(min, top, 5)[1];\n }\n if (!(max > min)) {\n if (max === min) max = min + 1;\n else [min, max] = [max, min];\n }\n return [min, max];\n};\n\nexport const bulletValues = (\n o: BulletChartOptions,\n hidden: ReadonlySet<number>,\n out: Map<string, number>,\n) => {\n keysOf(o).forEach((key, i) => {\n const d = o.data[i];\n out.set(key, finite(d.value));\n const target = num(d.target);\n if (target !== undefined) out.set(`>${key}`, target);\n out.set(`~${key}`, hidden.has(i) ? 0 : 1);\n });\n};\n\n/** Default fills of the ranges: grays, the lowest (poorest) darkest */\nconst rangeFills = (\n o: BulletChartOptions,\n c: LayoutContext,\n count: number,\n): Rgba[] => {\n const { theme } = c;\n return Array.from({ length: Math.max(1, count) }, (_, k) => {\n const gray = mix(\n theme.background,\n theme.text,\n count <= 1 ? 0.09 : 0.24 - (0.16 * k) / (count - 1),\n );\n const own = o.rangeColors?.[k];\n return own ? resolveWith(theme, own, gray) : gray;\n });\n};\n\n/** Line height of the wrapped names */\nconst NAME_LINE = 15;\n\nexport const layoutBullet = (\n o: BulletChartOptions,\n c: LayoutContext,\n): LayoutResult => {\n const { theme, area, measure, hidden } = c;\n const keys = keysOf(o);\n const n = o.data.length;\n const weights = keys.map((key, i) =>\n clamp(c.value(`~${key}`, hidden.has(i) ? 0 : 1), 0, 1),\n );\n const total = sum(weights);\n if (!n || total <= 1e-6) return emptyLayout(c);\n const vertical = o.orientation === \"vertical\";\n const enter = clamp(c.enter, 0, 1);\n const barSize = clamp(finite(o.barSize, 0.4), 0.1, 1);\n const nameFont = font(theme, 12, 600);\n const subFont = font(theme, 11);\n const valueFont = font(theme, 12, 600);\n const tickFont = font(theme, 10);\n const muted = toCss(theme.textMuted);\n const text = toCss(theme.text);\n const transparent = \"rgba(0, 0, 0, 0)\";\n const markColor = toCss(resolveWith(theme, o.targetColor, theme.text));\n const showTicks = o.ticks !== false;\n\n const nodes: ShapeNode[] = [];\n const items: ShapeItem[] = [];\n const hasSubtitle = o.data.some((d, i) => !!d.subtitle && weights[i] > 0);\n const valueText = o.data.map((d) => c.format(finite(d.value)));\n\n // shared columns (horizontal) / bands (vertical) of the labels and values:\n // the label column fits the longest name up to a share of the width,\n // longer names wrap to two lines\n const nameW = o.data.map((d) => measure(d.name, nameFont));\n const labelCap = area.width * (area.width < 420 ? 0.34 : 0.4);\n // widest line of each name once wrapped (balanced) within the cap\n const lineW = o.data.map((d, i) =>\n nameW[i] <= labelCap - 14\n ? nameW[i]\n : Math.max(\n 0,\n ...wrapText(d.name, labelCap - 14, nameFont, measure, 2).map((l) =>\n measure(l, nameFont),\n ),\n ),\n );\n const labelW = vertical\n ? 0\n : Math.min(\n labelCap,\n Math.max(\n 0,\n ...o.data.map((d, i) =>\n Math.max(lineW[i], d.subtitle ? measure(d.subtitle, subFont) : 0),\n ),\n ) + 14,\n );\n const valueW = vertical\n ? 0\n : Math.min(\n area.width * 0.2,\n Math.max(0, ...valueText.map((t) => measure(t, valueFont))) + 12,\n );\n const columnW = area.width / total;\n const wraps =\n vertical && o.data.some((_, i) => weights[i] > 0 && nameW[i] > columnW - 8);\n const labelH = vertical\n ? 22 + (wraps ? NAME_LINE : 0) + (hasSubtitle ? 14 : 0)\n : 0;\n const valueH = vertical ? 20 : 0;\n const unit = (vertical ? area.width : area.height) / total;\n\n let offset = 0;\n o.data.forEach((d, i) => {\n const w = weights[i];\n const slot = unit * w;\n const from = offset;\n offset += slot;\n if (w <= 1e-3) return;\n const key = keys[i];\n const alpha = w;\n const [min, max] = bulletScale(o, d);\n const ranges = rangesOf(o, d).filter((r) => r > min);\n const fills = rangeFills(o, c, ranges.length);\n const value = c.value(key, finite(d.value));\n const target0 = num(d.target);\n const target =\n target0 !== undefined ? c.value(`>${key}`, target0) : undefined;\n const color = c.color(d.color, i);\n const css = toCss(color);\n const thick = clamp(slot * (vertical ? 0.3 : 0.42), 8, 28);\n const span = vertical\n ? Math.max(1, area.height - labelH - valueH)\n : Math.max(1, area.width - labelW - valueW);\n const ticks = showTicks\n ? linearTicks(min, max, Math.max(2, Math.floor(span / 70)))\n : [];\n const tickRoom = vertical ? slot / 2 - thick / 2 - 6 : slot - thick - 10;\n const tickW = Math.max(\n 0,\n ...ticks.map((t) => measure(c.format(t), tickFont)),\n );\n const drawTicks =\n ticks.length > 1 && (vertical ? tickRoom >= tickW : tickRoom >= 14);\n\n // position along the scale, and across it\n const p0 = vertical ? area.y + area.height - labelH : area.x + labelW;\n const along = (v: number) =>\n p0 + (vertical ? -1 : 1) * span * clamp((v - min) / (max - min), 0, 1);\n const mid = vertical\n ? area.x + from + slot / 2\n : area.y + from + (slot - (drawTicks ? 14 : 0)) / 2;\n /** Rectangle from `a` to `b` along the scale, `t` thick across it */\n const band = (a: number, b: number, t: number) => {\n const lo = Math.min(along(a), along(b));\n const hi = Math.max(along(a), along(b));\n return vertical\n ? { x: mid - t / 2, y: lo, width: t, height: hi - lo }\n : { x: lo, y: mid - t / 2, width: hi - lo, height: t };\n };\n\n // the whole row / column is a hover target\n nodes.push({\n kind: \"rect\",\n ...(vertical\n ? { x: area.x + from, y: area.y, width: slot, height: area.height }\n : { x: area.x, y: area.y + from, width: area.width, height: slot }),\n radius: 0,\n fill: transparent,\n hit: i,\n alpha,\n });\n // ranges: disjoint segments (translucent colors must not add up)\n const bounds = ranges.length ? ranges : [max];\n let edge = min;\n bounds.forEach((bound, k) => {\n const to = Math.min(bound, max);\n if (to > edge)\n nodes.push({\n kind: \"rect\",\n ...band(edge, to, thick),\n radius: 0,\n fill: toCss(fills[k]),\n hit: i,\n alpha,\n });\n edge = Math.max(edge, to);\n });\n if (edge < max)\n nodes.push({\n kind: \"rect\",\n ...band(edge, max, thick),\n radius: 0,\n fill: toCss(fills[fills.length - 1]),\n hit: i,\n alpha,\n });\n // measure\n const base = clamp(0, min, max);\n const shownValue = base + (value - base) * enter;\n nodes.push({\n kind: \"rect\",\n ...band(base, shownValue, thick * barSize),\n radius: 1,\n fill: css,\n hit: i,\n alpha,\n brighten: true,\n });\n // target\n if (target !== undefined && target >= min && target <= max) {\n const at = along(target);\n const len = thick * 0.82;\n nodes.push({\n kind: \"rect\",\n ...(vertical\n ? { x: mid - len / 2, y: at - 1.5, width: len, height: 3 }\n : { x: at - 1.5, y: mid - len / 2, width: 3, height: len }),\n radius: 1,\n fill: markColor,\n hit: i,\n alpha: alpha * enter,\n });\n }\n // ticks\n if (drawTicks)\n for (const t of ticks) {\n const at = along(t);\n nodes.push({\n kind: \"text\",\n x: vertical ? mid - thick / 2 - 5 : at,\n y: vertical ? at : mid + thick / 2 + 4,\n text: c.format(t),\n font: tickFont,\n color: muted,\n align: vertical ? \"right\" : \"center\",\n baseline: vertical ? \"middle\" : \"top\",\n hit: i,\n alpha,\n });\n }\n\n // name, subtitle and value\n if (vertical) {\n const room = Math.max(0, slot - 8);\n const lines = wrapText(d.name, room, nameFont, measure, wraps ? 2 : 1);\n const bottom = area.y + area.height;\n lines.forEach((line, k) =>\n nodes.push({\n kind: \"text\",\n x: mid,\n y: bottom - labelH + 16 + k * NAME_LINE,\n text: line,\n font: nameFont,\n color: text,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n }),\n );\n const sub = d.subtitle\n ? ellipsize(d.subtitle, room, subFont, measure)\n : \"\";\n if (sub)\n nodes.push({\n kind: \"text\",\n x: mid,\n y: bottom - labelH + 31 + (wraps ? NAME_LINE : 0),\n text: sub,\n font: subFont,\n color: muted,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n const value = ellipsize(valueText[i], room, valueFont, measure);\n if (value)\n nodes.push({\n kind: \"text\",\n x: mid,\n y: area.y + valueH / 2,\n text: value,\n font: valueFont,\n color: text,\n align: \"center\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n } else {\n const room = Math.max(0, labelW - 14);\n const avail = slot - 4;\n const sub =\n d.subtitle && avail >= NAME_LINE + 14\n ? ellipsize(d.subtitle, room, subFont, measure)\n : \"\";\n const subH = sub ? 13 : 0;\n const lines = wrapText(\n d.name,\n room,\n nameFont,\n measure,\n avail >= 2 * NAME_LINE + subH ? 2 : 1,\n );\n const top = mid - (lines.length * NAME_LINE + subH) / 2;\n const x = area.x + labelW - 14;\n lines.forEach((line, k) =>\n nodes.push({\n kind: \"text\",\n x,\n y: top + NAME_LINE / 2 + k * NAME_LINE,\n text: line,\n font: nameFont,\n color: text,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n }),\n );\n if (sub)\n nodes.push({\n kind: \"text\",\n x,\n y: top + lines.length * NAME_LINE + subH / 2,\n text: sub,\n font: subFont,\n color: muted,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n const value = ellipsize(valueText[i], valueW - 8, valueFont, measure);\n if (value)\n nodes.push({\n kind: \"text\",\n x: area.x + area.width,\n y: mid,\n text: value,\n font: valueFont,\n color: text,\n align: \"right\",\n baseline: \"middle\",\n hit: i,\n alpha,\n });\n }\n\n if (hidden.has(i)) return;\n const v = finite(d.value);\n const percent =\n target0 !== undefined && target0 !== 0\n ? v / target0\n : (v - min) / (max - min);\n const rangeIndex = ranges.findIndex((r) => v <= r);\n const rangeName = rangeIndex >= 0 ? o.rangeLabels?.[rangeIndex] : undefined;\n const end = along(v);\n items.push({\n index: i,\n name: d.name,\n value: v,\n percent,\n share: c.percent(percent),\n color: css,\n x: vertical ? mid : end,\n y: vertical ? end : mid,\n rows: [\n { name: c.labels.value, value: c.format(v) },\n ...(target0 !== undefined\n ? [\n { name: c.labels.target, value: c.format(target0) },\n { name: c.labels.ofTarget, value: c.percent(percent) },\n ]\n : []),\n ...(rangeName ? [{ name: c.labels.range, value: rangeName }] : []),\n ],\n });\n });\n\n return { nodes, items, dim: 0.4, empty: false };\n};\n"],"mappings":"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"}