minerva-design 1.4.0 → 1.5.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 (670) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +21 -21
  3. package/custom-elements.json +4047 -1703
  4. package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
  5. package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
  6. package/dist/angular/types/minerva-angular.d.ts +573 -4
  7. package/dist/charts/canvas.d.cts +2 -2
  8. package/dist/charts/canvas.d.ts +2 -2
  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 +154 -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 +365 -251
  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 +32 -1
  34. package/dist/charts/engine/controller.d.ts +32 -1
  35. package/dist/charts/engine/controller.js +310 -263
  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 +1565 -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 +314 -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 +67 -0
  82. package/dist/charts/engine/graph/force.d.ts +67 -0
  83. package/dist/charts/engine/graph/force.js +325 -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 +37 -0
  88. package/dist/charts/engine/graph/geometry.d.ts +37 -0
  89. package/dist/charts/engine/graph/geometry.js +144 -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 +43 -0
  104. package/dist/charts/engine/graph/model.d.ts +43 -0
  105. package/dist/charts/engine/graph/model.js +88 -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 +626 -0
  120. package/dist/charts/engine/graph/types.d.ts +626 -0
  121. package/dist/charts/engine/graph/worker.cjs +46 -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 +129 -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.js +28 -4
  136. package/dist/charts/engine/labels.js.map +1 -1
  137. package/dist/charts/engine/layout.cjs +1 -1
  138. package/dist/charts/engine/layout.cjs.map +1 -1
  139. package/dist/charts/engine/layout.d.cts +9 -0
  140. package/dist/charts/engine/layout.d.ts +9 -0
  141. package/dist/charts/engine/layout.js +11 -2
  142. package/dist/charts/engine/layout.js.map +1 -1
  143. package/dist/charts/engine/model.cjs +1 -1
  144. package/dist/charts/engine/model.cjs.map +1 -1
  145. package/dist/charts/engine/model.d.cts +40 -3
  146. package/dist/charts/engine/model.d.ts +40 -3
  147. package/dist/charts/engine/model.js +246 -165
  148. package/dist/charts/engine/model.js.map +1 -1
  149. package/dist/charts/engine/orderbook/format.cjs +1 -1
  150. package/dist/charts/engine/orderbook/format.cjs.map +1 -1
  151. package/dist/charts/engine/orderbook/format.d.cts +3 -2
  152. package/dist/charts/engine/orderbook/format.d.ts +3 -2
  153. package/dist/charts/engine/orderbook/format.js +5 -5
  154. package/dist/charts/engine/orderbook/format.js.map +1 -1
  155. package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
  156. package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
  157. package/dist/charts/engine/orderbook/heatmap.js +527 -408
  158. package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
  159. package/dist/charts/engine/orderbook/layout.cjs +2 -0
  160. package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
  161. package/dist/charts/engine/orderbook/layout.d.cts +37 -0
  162. package/dist/charts/engine/orderbook/layout.d.ts +37 -0
  163. package/dist/charts/engine/orderbook/layout.js +70 -0
  164. package/dist/charts/engine/orderbook/layout.js.map +1 -0
  165. package/dist/charts/engine/orderbook/tape.cjs +1 -1
  166. package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
  167. package/dist/charts/engine/orderbook/tape.js +1 -1
  168. package/dist/charts/engine/orderbook/tape.js.map +1 -1
  169. package/dist/charts/engine/orderbook/types.d.cts +18 -2
  170. package/dist/charts/engine/orderbook/types.d.ts +18 -2
  171. package/dist/charts/engine/overlay.cjs +1 -1
  172. package/dist/charts/engine/overlay.cjs.map +1 -1
  173. package/dist/charts/engine/overlay.d.cts +10 -0
  174. package/dist/charts/engine/overlay.d.ts +10 -0
  175. package/dist/charts/engine/overlay.js +6 -0
  176. package/dist/charts/engine/overlay.js.map +1 -1
  177. package/dist/charts/engine/presets.cjs +2 -2
  178. package/dist/charts/engine/presets.cjs.map +1 -1
  179. package/dist/charts/engine/presets.d.cts +25 -3
  180. package/dist/charts/engine/presets.d.ts +25 -3
  181. package/dist/charts/engine/presets.js +115 -101
  182. package/dist/charts/engine/presets.js.map +1 -1
  183. package/dist/charts/engine/renderers/detect.cjs +1 -1
  184. package/dist/charts/engine/renderers/detect.cjs.map +1 -1
  185. package/dist/charts/engine/renderers/detect.d.cts +2 -1
  186. package/dist/charts/engine/renderers/detect.d.ts +2 -1
  187. package/dist/charts/engine/renderers/detect.js +23 -21
  188. package/dist/charts/engine/renderers/detect.js.map +1 -1
  189. package/dist/charts/engine/scene.cjs +1 -1
  190. package/dist/charts/engine/scene.cjs.map +1 -1
  191. package/dist/charts/engine/scene.d.cts +57 -4
  192. package/dist/charts/engine/scene.d.ts +57 -4
  193. package/dist/charts/engine/scene.js +335 -182
  194. package/dist/charts/engine/scene.js.map +1 -1
  195. package/dist/charts/engine/shapes/bullet.cjs +1 -1
  196. package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
  197. package/dist/charts/engine/shapes/bullet.js +110 -110
  198. package/dist/charts/engine/shapes/bullet.js.map +1 -1
  199. package/dist/charts/engine/shapes/chart.cjs +1 -1
  200. package/dist/charts/engine/shapes/chart.cjs.map +1 -1
  201. package/dist/charts/engine/shapes/chart.js +4 -1
  202. package/dist/charts/engine/shapes/chart.js.map +1 -1
  203. package/dist/charts/engine/shapes/chord.cjs +2 -0
  204. package/dist/charts/engine/shapes/chord.cjs.map +1 -0
  205. package/dist/charts/engine/shapes/chord.d.cts +18 -0
  206. package/dist/charts/engine/shapes/chord.d.ts +18 -0
  207. package/dist/charts/engine/shapes/chord.js +414 -0
  208. package/dist/charts/engine/shapes/chord.js.map +1 -0
  209. package/dist/charts/engine/shapes/draw.cjs +1 -1
  210. package/dist/charts/engine/shapes/draw.cjs.map +1 -1
  211. package/dist/charts/engine/shapes/draw.d.cts +5 -1
  212. package/dist/charts/engine/shapes/draw.d.ts +5 -1
  213. package/dist/charts/engine/shapes/draw.js +47 -17
  214. package/dist/charts/engine/shapes/draw.js.map +1 -1
  215. package/dist/charts/engine/shapes/hit.cjs +1 -1
  216. package/dist/charts/engine/shapes/hit.cjs.map +1 -1
  217. package/dist/charts/engine/shapes/hit.d.cts +3 -1
  218. package/dist/charts/engine/shapes/hit.d.ts +3 -1
  219. package/dist/charts/engine/shapes/hit.js +75 -46
  220. package/dist/charts/engine/shapes/hit.js.map +1 -1
  221. package/dist/charts/engine/shapes/index.d.cts +3 -2
  222. package/dist/charts/engine/shapes/index.d.ts +3 -2
  223. package/dist/charts/engine/shapes/labels.cjs +1 -1
  224. package/dist/charts/engine/shapes/labels.cjs.map +1 -1
  225. package/dist/charts/engine/shapes/labels.js +12 -4
  226. package/dist/charts/engine/shapes/labels.js.map +1 -1
  227. package/dist/charts/engine/shapes/layout.cjs +2 -2
  228. package/dist/charts/engine/shapes/layout.cjs.map +1 -1
  229. package/dist/charts/engine/shapes/layout.d.cts +3 -1
  230. package/dist/charts/engine/shapes/layout.d.ts +3 -1
  231. package/dist/charts/engine/shapes/layout.js +106 -78
  232. package/dist/charts/engine/shapes/layout.js.map +1 -1
  233. package/dist/charts/engine/shapes/scene.cjs +1 -1
  234. package/dist/charts/engine/shapes/scene.cjs.map +1 -1
  235. package/dist/charts/engine/shapes/scene.d.cts +33 -3
  236. package/dist/charts/engine/shapes/scene.d.ts +33 -3
  237. package/dist/charts/engine/shapes/scene.js +62 -19
  238. package/dist/charts/engine/shapes/scene.js.map +1 -1
  239. package/dist/charts/engine/shapes/types.d.cts +119 -8
  240. package/dist/charts/engine/shapes/types.d.ts +119 -8
  241. package/dist/charts/engine/signature.cjs +1 -1
  242. package/dist/charts/engine/signature.cjs.map +1 -1
  243. package/dist/charts/engine/signature.js +1 -1
  244. package/dist/charts/engine/signature.js.map +1 -1
  245. package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
  246. package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
  247. package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
  248. package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
  249. package/dist/charts/engine/three-d/canvas2d.js +89 -65
  250. package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
  251. package/dist/charts/engine/three-d/detect.cjs +1 -1
  252. package/dist/charts/engine/three-d/detect.cjs.map +1 -1
  253. package/dist/charts/engine/three-d/detect.d.cts +3 -2
  254. package/dist/charts/engine/three-d/detect.d.ts +3 -2
  255. package/dist/charts/engine/three-d/detect.js +22 -20
  256. package/dist/charts/engine/three-d/detect.js.map +1 -1
  257. package/dist/charts/engine/three-d/geometry.cjs +1 -1
  258. package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
  259. package/dist/charts/engine/three-d/geometry.d.cts +6 -0
  260. package/dist/charts/engine/three-d/geometry.d.ts +6 -0
  261. package/dist/charts/engine/three-d/geometry.js +106 -90
  262. package/dist/charts/engine/three-d/geometry.js.map +1 -1
  263. package/dist/charts/engine/three-d/model.cjs +1 -1
  264. package/dist/charts/engine/three-d/model.cjs.map +1 -1
  265. package/dist/charts/engine/three-d/model.d.cts +2 -0
  266. package/dist/charts/engine/three-d/model.d.ts +2 -0
  267. package/dist/charts/engine/three-d/model.js +2 -0
  268. package/dist/charts/engine/three-d/model.js.map +1 -1
  269. package/dist/charts/engine/three-d/overlay.cjs +1 -1
  270. package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
  271. package/dist/charts/engine/three-d/overlay.js +43 -36
  272. package/dist/charts/engine/three-d/overlay.js.map +1 -1
  273. package/dist/charts/engine/three-d/render-types.cjs +1 -1
  274. package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
  275. package/dist/charts/engine/three-d/render-types.d.cts +24 -3
  276. package/dist/charts/engine/three-d/render-types.d.ts +24 -3
  277. package/dist/charts/engine/three-d/render-types.js +6 -7
  278. package/dist/charts/engine/three-d/render-types.js.map +1 -1
  279. package/dist/charts/engine/three-d/shaders.cjs +63 -28
  280. package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
  281. package/dist/charts/engine/three-d/shaders.d.cts +2 -3
  282. package/dist/charts/engine/three-d/shaders.d.ts +2 -3
  283. package/dist/charts/engine/three-d/shaders.js +41 -22
  284. package/dist/charts/engine/three-d/shaders.js.map +1 -1
  285. package/dist/charts/engine/three-d/sort.cjs +1 -1
  286. package/dist/charts/engine/three-d/sort.cjs.map +1 -1
  287. package/dist/charts/engine/three-d/sort.d.cts +15 -4
  288. package/dist/charts/engine/three-d/sort.d.ts +15 -4
  289. package/dist/charts/engine/three-d/sort.js +117 -43
  290. package/dist/charts/engine/three-d/sort.js.map +1 -1
  291. package/dist/charts/engine/three-d/types.d.cts +27 -0
  292. package/dist/charts/engine/three-d/types.d.ts +27 -0
  293. package/dist/charts/engine/three-d/webgl.cjs +1 -1
  294. package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
  295. package/dist/charts/engine/three-d/webgl.js +15 -13
  296. package/dist/charts/engine/three-d/webgl.js.map +1 -1
  297. package/dist/charts/engine/three-d/webgpu.cjs +1 -1
  298. package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
  299. package/dist/charts/engine/three-d/webgpu.js +50 -39
  300. package/dist/charts/engine/three-d/webgpu.js.map +1 -1
  301. package/dist/charts/engine/trading/chart.cjs +1 -1
  302. package/dist/charts/engine/trading/chart.cjs.map +1 -1
  303. package/dist/charts/engine/trading/chart.d.cts +10 -0
  304. package/dist/charts/engine/trading/chart.d.ts +10 -0
  305. package/dist/charts/engine/trading/chart.js +1475 -776
  306. package/dist/charts/engine/trading/chart.js.map +1 -1
  307. package/dist/charts/engine/trading/drawings.cjs +2 -1
  308. package/dist/charts/engine/trading/drawings.cjs.map +1 -1
  309. package/dist/charts/engine/trading/drawings.d.cts +47 -9
  310. package/dist/charts/engine/trading/drawings.d.ts +47 -9
  311. package/dist/charts/engine/trading/drawings.js +338 -75
  312. package/dist/charts/engine/trading/drawings.js.map +1 -1
  313. package/dist/charts/engine/trading/format.cjs +1 -1
  314. package/dist/charts/engine/trading/format.cjs.map +1 -1
  315. package/dist/charts/engine/trading/format.d.cts +13 -0
  316. package/dist/charts/engine/trading/format.d.ts +13 -0
  317. package/dist/charts/engine/trading/format.js +51 -19
  318. package/dist/charts/engine/trading/format.js.map +1 -1
  319. package/dist/charts/engine/trading/index.cjs +1 -1
  320. package/dist/charts/engine/trading/index.d.cts +2 -1
  321. package/dist/charts/engine/trading/index.d.ts +2 -1
  322. package/dist/charts/engine/trading/index.js +4 -3
  323. package/dist/charts/engine/trading/indicators.cjs +1 -1
  324. package/dist/charts/engine/trading/indicators.cjs.map +1 -1
  325. package/dist/charts/engine/trading/indicators.d.cts +180 -10
  326. package/dist/charts/engine/trading/indicators.d.ts +180 -10
  327. package/dist/charts/engine/trading/indicators.js +449 -173
  328. package/dist/charts/engine/trading/indicators.js.map +1 -1
  329. package/dist/charts/engine/trading/labels.cjs +1 -1
  330. package/dist/charts/engine/trading/labels.cjs.map +1 -1
  331. package/dist/charts/engine/trading/labels.js +84 -4
  332. package/dist/charts/engine/trading/labels.js.map +1 -1
  333. package/dist/charts/engine/trading/store.cjs +1 -1
  334. package/dist/charts/engine/trading/store.cjs.map +1 -1
  335. package/dist/charts/engine/trading/store.d.cts +21 -0
  336. package/dist/charts/engine/trading/store.d.ts +21 -0
  337. package/dist/charts/engine/trading/store.js +22 -1
  338. package/dist/charts/engine/trading/store.js.map +1 -1
  339. package/dist/charts/engine/trading/studies.cjs +1 -1
  340. package/dist/charts/engine/trading/studies.cjs.map +1 -1
  341. package/dist/charts/engine/trading/studies.d.cts +41 -8
  342. package/dist/charts/engine/trading/studies.d.ts +41 -8
  343. package/dist/charts/engine/trading/studies.js +349 -93
  344. package/dist/charts/engine/trading/studies.js.map +1 -1
  345. package/dist/charts/engine/trading/sync.cjs +2 -0
  346. package/dist/charts/engine/trading/sync.cjs.map +1 -0
  347. package/dist/charts/engine/trading/sync.d.cts +8 -0
  348. package/dist/charts/engine/trading/sync.d.ts +8 -0
  349. package/dist/charts/engine/trading/sync.js +25 -0
  350. package/dist/charts/engine/trading/sync.js.map +1 -0
  351. package/dist/charts/engine/trading/types.d.cts +484 -9
  352. package/dist/charts/engine/trading/types.d.ts +484 -9
  353. package/dist/charts/engine/types.d.cts +82 -8
  354. package/dist/charts/engine/types.d.ts +82 -8
  355. package/dist/charts/index.cjs +1 -1
  356. package/dist/charts/index.d.cts +3 -2
  357. package/dist/charts/index.d.ts +3 -2
  358. package/dist/charts/index.js +30 -22
  359. package/dist/charts/react/charts.cjs +1 -1
  360. package/dist/charts/react/charts.cjs.map +1 -1
  361. package/dist/charts/react/charts.js +46 -34
  362. package/dist/charts/react/charts.js.map +1 -1
  363. package/dist/charts/react/graph.cjs +2 -0
  364. package/dist/charts/react/graph.cjs.map +1 -0
  365. package/dist/charts/react/graph.d.cts +213 -0
  366. package/dist/charts/react/graph.d.ts +213 -0
  367. package/dist/charts/react/graph.js +159 -0
  368. package/dist/charts/react/graph.js.map +1 -0
  369. package/dist/charts/react/shapes.cjs +1 -1
  370. package/dist/charts/react/shapes.cjs.map +1 -1
  371. package/dist/charts/react/shapes.d.cts +87 -4
  372. package/dist/charts/react/shapes.d.ts +87 -4
  373. package/dist/charts/react/shapes.js +55 -12
  374. package/dist/charts/react/shapes.js.map +1 -1
  375. package/dist/charts/react/trading.cjs +1 -1
  376. package/dist/charts/react/trading.cjs.map +1 -1
  377. package/dist/charts/react/trading.d.cts +53 -1
  378. package/dist/charts/react/trading.d.ts +53 -1
  379. package/dist/charts/react/trading.js +68 -37
  380. package/dist/charts/react/trading.js.map +1 -1
  381. package/dist/charts/react/types.d.cts +11 -0
  382. package/dist/charts/react/types.d.ts +11 -0
  383. package/dist/core/contracts.cjs +1 -1
  384. package/dist/core/contracts.cjs.map +1 -1
  385. package/dist/core/contracts.js +1 -1
  386. package/dist/core/contracts.js.map +1 -1
  387. package/dist/native/charts/src/canvas.cjs +1 -1
  388. package/dist/native/charts/src/canvas.js +3 -3
  389. package/dist/native/charts/src/engine/axis.cjs +1 -1
  390. package/dist/native/charts/src/engine/axis.cjs.map +1 -1
  391. package/dist/native/charts/src/engine/axis.js +42 -19
  392. package/dist/native/charts/src/engine/axis.js.map +1 -1
  393. package/dist/native/charts/src/engine/color.cjs +1 -1
  394. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  395. package/dist/native/charts/src/engine/color.js +47 -5
  396. package/dist/native/charts/src/engine/color.js.map +1 -1
  397. package/dist/native/charts/src/engine/controller.cjs +2 -2
  398. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  399. package/dist/native/charts/src/engine/controller.js +300 -253
  400. package/dist/native/charts/src/engine/controller.js.map +1 -1
  401. package/dist/native/charts/src/engine/data.cjs +1 -1
  402. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  403. package/dist/native/charts/src/engine/data.js +6 -4
  404. package/dist/native/charts/src/engine/data.js.map +1 -1
  405. package/dist/native/charts/src/engine/format.cjs +1 -1
  406. package/dist/native/charts/src/engine/format.cjs.map +1 -1
  407. package/dist/native/charts/src/engine/format.js +15 -2
  408. package/dist/native/charts/src/engine/format.js.map +1 -1
  409. package/dist/native/charts/src/engine/labels.cjs +1 -1
  410. package/dist/native/charts/src/engine/labels.cjs.map +1 -1
  411. package/dist/native/charts/src/engine/labels.js +28 -4
  412. package/dist/native/charts/src/engine/labels.js.map +1 -1
  413. package/dist/native/charts/src/engine/layout.cjs +1 -1
  414. package/dist/native/charts/src/engine/layout.cjs.map +1 -1
  415. package/dist/native/charts/src/engine/layout.js +11 -2
  416. package/dist/native/charts/src/engine/layout.js.map +1 -1
  417. package/dist/native/charts/src/engine/model.cjs +1 -1
  418. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  419. package/dist/native/charts/src/engine/model.js +252 -171
  420. package/dist/native/charts/src/engine/model.js.map +1 -1
  421. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  422. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  423. package/dist/native/charts/src/engine/presets.cjs +2 -2
  424. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  425. package/dist/native/charts/src/engine/presets.js +104 -90
  426. package/dist/native/charts/src/engine/presets.js.map +1 -1
  427. package/dist/native/charts/src/engine/scene.cjs +1 -1
  428. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  429. package/dist/native/charts/src/engine/scene.js +341 -188
  430. package/dist/native/charts/src/engine/scene.js.map +1 -1
  431. package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
  432. package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
  433. package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
  434. package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
  435. package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
  436. package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
  437. package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
  438. package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
  439. package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
  440. package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
  441. package/dist/native/charts/src/engine/shapes/chord.js +414 -0
  442. package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
  443. package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
  444. package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
  445. package/dist/native/charts/src/engine/shapes/draw.js +47 -17
  446. package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
  447. package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
  448. package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
  449. package/dist/native/charts/src/engine/shapes/hit.js +73 -44
  450. package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
  451. package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
  452. package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
  453. package/dist/native/charts/src/engine/shapes/labels.js +12 -4
  454. package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
  455. package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
  456. package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
  457. package/dist/native/charts/src/engine/shapes/layout.js +117 -90
  458. package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
  459. package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
  460. package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
  461. package/dist/native/charts/src/engine/shapes/scene.js +62 -19
  462. package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
  463. package/dist/native/components/Chart/scene.cjs +1 -1
  464. package/dist/native/components/Chart/scene.cjs.map +1 -1
  465. package/dist/native/components/Chart/scene.js +140 -71
  466. package/dist/native/components/Chart/scene.js.map +1 -1
  467. package/dist/native/components/Charts/charts.cjs +1 -1
  468. package/dist/native/components/Charts/charts.cjs.map +1 -1
  469. package/dist/native/components/Charts/charts.js +54 -42
  470. package/dist/native/components/Charts/charts.js.map +1 -1
  471. package/dist/native/components/Charts/types.d.cts +11 -0
  472. package/dist/native/components/Charts/types.d.ts +11 -0
  473. package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
  474. package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
  475. package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
  476. package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
  477. package/dist/native/components/ShapeChart/charts.cjs +1 -1
  478. package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
  479. package/dist/native/components/ShapeChart/charts.d.cts +6 -1
  480. package/dist/native/components/ShapeChart/charts.d.ts +6 -1
  481. package/dist/native/components/ShapeChart/charts.js +138 -96
  482. package/dist/native/components/ShapeChart/charts.js.map +1 -1
  483. package/dist/native/components/ShapeChart/draw.cjs +1 -1
  484. package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
  485. package/dist/native/components/ShapeChart/draw.d.cts +1 -1
  486. package/dist/native/components/ShapeChart/draw.d.ts +1 -1
  487. package/dist/native/components/ShapeChart/draw.js +26 -17
  488. package/dist/native/components/ShapeChart/draw.js.map +1 -1
  489. package/dist/native/components/ShapeChart/geometry.cjs +1 -1
  490. package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
  491. package/dist/native/components/ShapeChart/geometry.js +138 -59
  492. package/dist/native/components/ShapeChart/geometry.js.map +1 -1
  493. package/dist/native/components/ShapeChart/index.cjs +1 -1
  494. package/dist/native/components/ShapeChart/index.d.cts +1 -1
  495. package/dist/native/components/ShapeChart/index.d.ts +1 -1
  496. package/dist/native/components/ShapeChart/index.js +2 -2
  497. package/dist/native/components/ShapeChart/recorder.cjs +1 -1
  498. package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
  499. package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
  500. package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
  501. package/dist/native/components/ShapeChart/recorder.js +19 -10
  502. package/dist/native/components/ShapeChart/recorder.js.map +1 -1
  503. package/dist/native/components/ShapeChart/types.d.cts +92 -7
  504. package/dist/native/components/ShapeChart/types.d.ts +92 -7
  505. package/dist/native/index.cjs +1 -1
  506. package/dist/native/index.js +2 -2
  507. package/dist/native/source/components/Chart/scene.tsx +158 -14
  508. package/dist/native/source/components/Charts/charts.tsx +30 -2
  509. package/dist/native/source/components/Charts/types.ts +11 -0
  510. package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
  511. package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
  512. package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
  513. package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
  514. package/dist/native/source/components/ShapeChart/index.ts +1 -0
  515. package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
  516. package/dist/native/source/components/ShapeChart/types.ts +96 -5
  517. package/dist/native/source/manifest.ts +1 -0
  518. package/dist/taro/charts.d.ts +25 -5
  519. package/dist/taro/index.js +3900 -2836
  520. package/dist/taro/shape-charts.d.ts +96 -4
  521. package/dist/uni/AreaChart.vue.d.ts +5 -1
  522. package/dist/uni/Badge.vue.d.ts +1 -1
  523. package/dist/uni/BarChart.vue.d.ts +5 -1
  524. package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
  525. package/dist/uni/BubbleChart.vue.d.ts +4 -0
  526. package/dist/uni/BulletChart.vue.d.ts +4 -0
  527. package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
  528. package/dist/uni/CandlestickChart.vue.d.ts +4 -0
  529. package/dist/uni/Chart.vue.d.ts +4 -0
  530. package/dist/uni/ChordChart.vue +93 -0
  531. package/dist/uni/ChordChart.vue.d.ts +136 -0
  532. package/dist/uni/DonutChart.vue.d.ts +4 -0
  533. package/dist/uni/FunnelChart.vue.d.ts +4 -0
  534. package/dist/uni/GanttChart.vue.d.ts +4 -0
  535. package/dist/uni/GaugeChart.vue.d.ts +4 -0
  536. package/dist/uni/HeatmapChart.vue.d.ts +8 -2
  537. package/dist/uni/HistogramChart.vue.d.ts +4 -0
  538. package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
  539. package/dist/uni/LineChart.vue.d.ts +4 -0
  540. package/dist/uni/MixedChart.vue.d.ts +4 -0
  541. package/dist/uni/PieChart.vue.d.ts +4 -0
  542. package/dist/uni/QuadrantChart.vue.d.ts +4 -0
  543. package/dist/uni/RadarChart.vue.d.ts +4 -0
  544. package/dist/uni/RadialBarChart.vue.d.ts +4 -0
  545. package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
  546. package/dist/uni/SankeyChart.vue.d.ts +4 -0
  547. package/dist/uni/ScatterChart.vue.d.ts +4 -0
  548. package/dist/uni/Sparkline.vue.d.ts +4 -0
  549. package/dist/uni/SunburstChart.vue.d.ts +4 -0
  550. package/dist/uni/ToastProvider.vue.d.ts +1 -1
  551. package/dist/uni/TreemapChart.vue.d.ts +4 -0
  552. package/dist/uni/WaterfallChart.vue.d.ts +9 -0
  553. package/dist/uni/chart-canvas.d.ts +3 -0
  554. package/dist/uni/chart-canvas.js +4 -0
  555. package/dist/uni/chart-types.d.ts +28 -4
  556. package/dist/uni/chart-types.js +26 -2
  557. package/dist/uni/charts-canvas.js +1 -1
  558. package/dist/uni/index.d.ts +2 -1
  559. package/dist/uni/index.js +1 -0
  560. package/dist/uni/manifest.d.ts +7 -0
  561. package/dist/uni/manifest.js +10 -0
  562. package/dist/uni/named-chart-options.d.ts +9 -2
  563. package/dist/uni/named-chart-options.js +18 -1
  564. package/dist/uni/shape-chart-canvas.d.ts +3 -1
  565. package/dist/uni/shape-chart-canvas.js +15 -24
  566. package/dist/uni/shape-chart-types.d.ts +52 -2
  567. package/dist/uni/shape-chart-types.js +44 -0
  568. package/dist/vue/charts-global.d.ts +48 -0
  569. package/dist/vue/charts.d.ts +18 -0
  570. package/dist/vue/charts.js +56 -0
  571. package/dist/vue/charts.js.map +1 -0
  572. package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
  573. package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
  574. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
  575. package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  576. package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
  577. package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
  578. package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
  579. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
  580. package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  581. package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
  582. package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
  583. package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
  584. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
  585. package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
  586. package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
  587. package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
  588. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
  589. package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  590. package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
  591. package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
  592. package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
  593. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
  594. package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  595. package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
  596. package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
  597. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
  598. package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  599. package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
  600. package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
  601. package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
  602. package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
  603. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
  604. package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  605. package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
  606. package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
  607. package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
  608. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
  609. package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
  610. package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
  611. package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
  612. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
  613. package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  614. package/dist/vue/components/Chart/graph.d.ts +153 -0
  615. package/dist/vue/components/Chart/graph.js +135 -0
  616. package/dist/vue/components/Chart/graph.js.map +1 -0
  617. package/dist/vue/components/Chart/index.d.ts +5 -1
  618. package/dist/vue/components/Chart/index.js +5 -1
  619. package/dist/vue/components/Chart/orderbook.d.ts +5 -1
  620. package/dist/vue/components/Chart/orderbook.js +2 -0
  621. package/dist/vue/components/Chart/orderbook.js.map +1 -1
  622. package/dist/vue/components/Chart/trading.d.ts +24 -2
  623. package/dist/vue/components/Chart/trading.js +8 -0
  624. package/dist/vue/components/Chart/trading.js.map +1 -1
  625. package/dist/vue/components/Chart/types.d.ts +74 -2
  626. package/dist/vue/global.d.ts +2 -38
  627. package/dist/vue/groups/charts.js +10 -2
  628. package/dist/vue/groups/charts.js.map +1 -1
  629. package/dist/vue/index.js +6 -2
  630. package/dist/vue/internal/register.d.ts +7 -0
  631. package/dist/vue/internal/register.js +14 -0
  632. package/dist/vue/internal/register.js.map +1 -0
  633. package/dist/vue/plugin.d.ts +9 -4
  634. package/dist/vue/plugin.js +6 -11
  635. package/dist/vue/plugin.js.map +1 -1
  636. package/dist/weapp/charts/canvas.js +1687 -147
  637. package/dist/weapp/charts/core.js +1 -0
  638. package/dist/weapp/chord-chart/index.js +1 -0
  639. package/dist/weapp/chord-chart/index.json +1 -0
  640. package/dist/weapp/chord-chart/index.wxml +1 -0
  641. package/dist/weapp/chord-chart/index.wxss +1 -0
  642. package/dist/weapp/controls.js +92 -32
  643. package/dist/weapp/types.d.ts +87 -4
  644. package/dist/web-components/components/chart/charts.d.ts +4 -2
  645. package/dist/web-components/components/chart/charts.js +8 -1
  646. package/dist/web-components/components/chart/charts.js.map +1 -1
  647. package/dist/web-components/components/chart/extended.d.ts +17 -7
  648. package/dist/web-components/components/chart/extended.js +23 -9
  649. package/dist/web-components/components/chart/extended.js.map +1 -1
  650. package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
  651. package/dist/web-components/components/chart/shapes-extended.js +27 -1
  652. package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
  653. package/dist/web-components/components/graph/graph.d.ts +154 -0
  654. package/dist/web-components/components/graph/graph.js +149 -0
  655. package/dist/web-components/components/graph/graph.js.map +1 -0
  656. package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
  657. package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
  658. package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
  659. package/dist/web-components/elements/chart.d.ts +1 -1
  660. package/dist/web-components/elements/chart.js +6 -5
  661. package/dist/web-components/elements/chart.js.map +1 -1
  662. package/dist/web-components/elements/graph.d.ts +2 -0
  663. package/dist/web-components/elements/graph.js +12 -0
  664. package/dist/web-components/elements/graph.js.map +1 -0
  665. package/dist/web-components/html-custom-data.json +273 -4
  666. package/dist/web-components/types/react.d.ts +63 -4
  667. package/dist/web-components/types/solid.d.ts +55 -8
  668. package/dist/web-components/types/svelte.d.ts +55 -8
  669. package/dist/web-components/types/vue.d.ts +55 -4
  670. package/package.json +16 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","widen","column","i","range","collectYCategories","seen","datas","ys","list","item","collectCategories","add","xs","finalize","xMin","xMax","sorted","prev","extra","yMin","yMax","more","high","low","y0","q1","q3","outliers","count","xi","x","yi","y","out","valueMin","valueMax","empty","values","normalizeData","none","resolveX","resolveY","size","colors","labels","open","nanColumn","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type { ChartAxisType, ChartSeriesData, ChartXValue } from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** Candlesticks: open / high / low (y is the close) */\n open: Float64Array | null;\n high: Float64Array | null;\n low: Float64Array | null;\n /** Heatmaps: values of the cells */\n value: Float64Array | null;\n /** Floating bars / range areas: starts (lower edges); NaN where missing */\n y0: Float64Array | null;\n /** Box plots: quartiles and outliers */\n q1: Float64Array | null;\n q3: Float64Array | null;\n outliers: (readonly number[] | undefined)[] | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none); high / low included */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n /** Extent of the finite `value`s (NaN when there is none) */\n valueMin: number;\n valueMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n/** Converts a y value (a category name on category y axes) to a number */\nexport type YResolver = (value: unknown) => number;\n\ntype Extra = Pick<\n SeriesColumns,\n | \"size\"\n | \"colors\"\n | \"labels\"\n | \"open\"\n | \"high\"\n | \"low\"\n | \"value\"\n | \"y0\"\n | \"q1\"\n | \"q3\"\n | \"outliers\"\n>;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | string | null)[];\n y0?: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\n open?: ArrayLike<number>;\n high?: ArrayLike<number>;\n low?: ArrayLike<number>;\n q1?: ArrayLike<number>;\n q3?: ArrayLike<number>;\n value?: ArrayLike<number> | readonly (number | null)[];\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\"\n ? v\n : v === null || v === undefined\n ? NaN\n : v instanceof Date\n ? v.getTime()\n : Number(v);\n\n/** Includes the finite values of a column at `i` in an extent */\nconst widen = (\n column: Float64Array | null,\n i: number,\n range: { min: number; max: number },\n) => {\n if (!column) return;\n const v = column[i];\n if (v < range.min) range.min = v;\n if (v > range.max) range.max = v;\n};\n\n/** Category names used by string y values (heatmap rows), in order of appearance */\nexport const collectYCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n for (const data of datas) {\n if (isColumns(data)) {\n const ys = data.y;\n if (!ArrayBuffer.isView(ys)) {\n for (let i = 0; i < ys.length; i++) {\n const v = ys[i];\n if (typeof v === \"string\") seen.add(v);\n }\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n const v = Array.isArray(item)\n ? item[1]\n : item && typeof item === \"object\"\n ? (item as { y?: unknown }).y\n : undefined;\n if (typeof v === \"string\") seen.add(v);\n }\n }\n return [...seen];\n};\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Extra,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n const { high, low, value, y0, q1, q3, outliers } = extra;\n let yMin = Infinity;\n let yMax = -Infinity;\n const range = { min: Infinity, max: -Infinity };\n const more = !!(high || low || y0 || q1 || q3 || outliers);\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n if (more) {\n // comparisons with NaN are false: missing values are skipped\n range.min = yMin;\n range.max = yMax;\n widen(high, i, range);\n widen(low, i, range);\n widen(y0, i, range);\n widen(q1, i, range);\n widen(q3, i, range);\n const out = outliers?.[i];\n if (out) {\n for (const v of out) {\n if (v < range.min) range.min = v;\n if (v > range.max) range.max = v;\n }\n }\n yMin = range.min;\n yMax = range.max;\n }\n }\n let valueMin = Infinity;\n let valueMax = -Infinity;\n if (value) {\n for (let i = 0; i < count; i++) {\n const v = value[i];\n if (!Number.isFinite(v)) continue;\n if (v < valueMin) valueMin = v;\n if (v > valueMax) valueMax = v;\n }\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n valueMin: valueMin > valueMax ? NaN : valueMin,\n valueMax: valueMin > valueMax ? NaN : valueMax,\n ...extra,\n };\n};\n\nconst column = (\n values: ArrayLike<unknown> | undefined,\n count: number,\n): Float64Array | null => {\n if (!values) return null;\n if (values instanceof Float64Array && values.length >= count) {\n return values.length === count ? values : values.subarray(0, count);\n }\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = toNumber(values[i]);\n return out;\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n resolveY: YResolver = toNumber,\n): SeriesColumns => {\n const none: Extra = {\n size: null,\n colors: null,\n labels: null,\n open: null,\n high: null,\n low: null,\n value: null,\n y0: null,\n q1: null,\n q3: null,\n outliers: null,\n };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const xs = data.x;\n if (!xs) {\n for (let i = 0; i < count; i++) x[i] = i;\n } else if (ArrayBuffer.isView(xs) && xs.length >= count) {\n // typed arrays: a plain copy (the hot path of large data sets)\n x.set(\n (xs.length === count\n ? xs\n : (xs as unknown as Float64Array).subarray(\n 0,\n count,\n )) as ArrayLike<number>,\n );\n } else {\n for (let i = 0; i < count; i++) x[i] = resolveX(xs[i] as ChartXValue, i);\n }\n const ys = data.y;\n let y: Float64Array;\n if (ArrayBuffer.isView(ys)) {\n // finalize writes NaN at invalid x: copy so the input is never changed\n y = new Float64Array(count);\n y.set(ys as ArrayLike<number>);\n } else {\n y = new Float64Array(count);\n for (let i = 0; i < count; i++) y[i] = resolveY(ys[i]);\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, {\n ...none,\n size,\n open: column(data.open, count),\n high: column(data.high, count),\n low: column(data.low, count),\n value: column(data.value, count),\n y0: column(data.y0, count),\n q1: column(data.q1, count),\n q3: column(data.q3, count),\n });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n let open: Float64Array | null = null;\n let high: Float64Array | null = null;\n let low: Float64Array | null = null;\n let value: Float64Array | null = null;\n let y0: Float64Array | null = null;\n let q1: Float64Array | null = null;\n let q3: Float64Array | null = null;\n let outliers: (readonly number[] | undefined)[] | null = null;\n const nanColumn = () => new Float64Array(count).fill(NaN);\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = resolveY(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | string | null;\n size?: number;\n color?: string;\n label?: string;\n open?: number;\n high?: number;\n low?: number;\n value?: number | null;\n y0?: number | Date | null;\n q1?: number;\n q3?: number;\n outliers?: readonly number[];\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = resolveY(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n if (d.open !== undefined) (open ??= nanColumn())[i] = toNumber(d.open);\n if (d.high !== undefined) (high ??= nanColumn())[i] = toNumber(d.high);\n if (d.low !== undefined) (low ??= nanColumn())[i] = toNumber(d.low);\n if (d.value !== undefined) (value ??= nanColumn())[i] = toNumber(d.value);\n if (d.y0 !== undefined) (y0 ??= nanColumn())[i] = toNumber(d.y0);\n if (d.q1 !== undefined) (q1 ??= nanColumn())[i] = toNumber(d.q1);\n if (d.q3 !== undefined) (q3 ??= nanColumn())[i] = toNumber(d.q3);\n if (d.outliers !== undefined && d.outliers.length) {\n outliers ??= new Array<readonly number[] | undefined>(count);\n outliers[i] = d.outliers;\n }\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, {\n size,\n colors,\n labels,\n open,\n high,\n low,\n value,\n y0,\n q1,\n q3,\n outliers,\n });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","widen","column","i","range","collectYCategories","seen","datas","ys","list","item","collectCategories","add","xs","finalize","xMin","xMax","sorted","prev","extra","yMin","yMax","more","high","low","y0","q1","q3","outliers","count","xi","x","yi","y","out","valueMin","valueMax","empty","values","normalizeData","none","resolveX","resolveY","size","colors","labels","open","details","nanColumn","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type {\n ChartAxisType,\n ChartSeriesData,\n ChartTooltipDetail,\n ChartXValue,\n} from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** Candlesticks: open / high / low (y is the close) */\n open: Float64Array | null;\n high: Float64Array | null;\n low: Float64Array | null;\n /** Heatmaps: values of the cells */\n value: Float64Array | null;\n /** Floating bars / range areas: starts (lower edges); NaN where missing */\n y0: Float64Array | null;\n /** Box plots: quartiles and outliers */\n q1: Float64Array | null;\n q3: Float64Array | null;\n outliers: (readonly number[] | undefined)[] | null;\n /** Extra tooltip rows of the points (object data only) */\n details: (readonly ChartTooltipDetail[] | undefined)[] | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none); high / low included */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n /** Extent of the finite `value`s (NaN when there is none) */\n valueMin: number;\n valueMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n/** Converts a y value (a category name on category y axes) to a number */\nexport type YResolver = (value: unknown) => number;\n\ntype Extra = Pick<\n SeriesColumns,\n | \"size\"\n | \"colors\"\n | \"labels\"\n | \"open\"\n | \"high\"\n | \"low\"\n | \"value\"\n | \"y0\"\n | \"q1\"\n | \"q3\"\n | \"outliers\"\n | \"details\"\n>;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | string | null)[];\n y0?: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\n open?: ArrayLike<number>;\n high?: ArrayLike<number>;\n low?: ArrayLike<number>;\n q1?: ArrayLike<number>;\n q3?: ArrayLike<number>;\n value?: ArrayLike<number> | readonly (number | null)[];\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\"\n ? v\n : v === null || v === undefined\n ? NaN\n : v instanceof Date\n ? v.getTime()\n : Number(v);\n\n/** Includes the finite values of a column at `i` in an extent */\nconst widen = (\n column: Float64Array | null,\n i: number,\n range: { min: number; max: number },\n) => {\n if (!column) return;\n const v = column[i];\n if (v < range.min) range.min = v;\n if (v > range.max) range.max = v;\n};\n\n/** Category names used by string y values (heatmap rows), in order of appearance */\nexport const collectYCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n for (const data of datas) {\n if (isColumns(data)) {\n const ys = data.y;\n if (!ArrayBuffer.isView(ys)) {\n for (let i = 0; i < ys.length; i++) {\n const v = ys[i];\n if (typeof v === \"string\") seen.add(v);\n }\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n const v = Array.isArray(item)\n ? item[1]\n : item && typeof item === \"object\"\n ? (item as { y?: unknown }).y\n : undefined;\n if (typeof v === \"string\") seen.add(v);\n }\n }\n return [...seen];\n};\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Extra,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n const { high, low, value, y0, q1, q3, outliers } = extra;\n let yMin = Infinity;\n let yMax = -Infinity;\n const range = { min: Infinity, max: -Infinity };\n const more = !!(high || low || y0 || q1 || q3 || outliers);\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n if (more) {\n // comparisons with NaN are false: missing values are skipped\n range.min = yMin;\n range.max = yMax;\n widen(high, i, range);\n widen(low, i, range);\n widen(y0, i, range);\n widen(q1, i, range);\n widen(q3, i, range);\n const out = outliers?.[i];\n if (out) {\n for (const v of out) {\n if (v < range.min) range.min = v;\n if (v > range.max) range.max = v;\n }\n }\n yMin = range.min;\n yMax = range.max;\n }\n }\n let valueMin = Infinity;\n let valueMax = -Infinity;\n if (value) {\n for (let i = 0; i < count; i++) {\n const v = value[i];\n if (!Number.isFinite(v)) continue;\n if (v < valueMin) valueMin = v;\n if (v > valueMax) valueMax = v;\n }\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n valueMin: valueMin > valueMax ? NaN : valueMin,\n valueMax: valueMin > valueMax ? NaN : valueMax,\n ...extra,\n };\n};\n\nconst column = (\n values: ArrayLike<unknown> | undefined,\n count: number,\n): Float64Array | null => {\n if (!values) return null;\n if (values instanceof Float64Array && values.length >= count) {\n return values.length === count ? values : values.subarray(0, count);\n }\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = toNumber(values[i]);\n return out;\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n resolveY: YResolver = toNumber,\n): SeriesColumns => {\n const none: Extra = {\n size: null,\n colors: null,\n labels: null,\n open: null,\n high: null,\n low: null,\n value: null,\n y0: null,\n q1: null,\n q3: null,\n outliers: null,\n details: null,\n };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const xs = data.x;\n if (!xs) {\n for (let i = 0; i < count; i++) x[i] = i;\n } else if (ArrayBuffer.isView(xs) && xs.length >= count) {\n // typed arrays: a plain copy (the hot path of large data sets)\n x.set(\n (xs.length === count\n ? xs\n : (xs as unknown as Float64Array).subarray(\n 0,\n count,\n )) as ArrayLike<number>,\n );\n } else {\n for (let i = 0; i < count; i++) x[i] = resolveX(xs[i] as ChartXValue, i);\n }\n const ys = data.y;\n let y: Float64Array;\n if (ArrayBuffer.isView(ys)) {\n // finalize writes NaN at invalid x: copy so the input is never changed\n y = new Float64Array(count);\n y.set(ys as ArrayLike<number>);\n } else {\n y = new Float64Array(count);\n for (let i = 0; i < count; i++) y[i] = resolveY(ys[i]);\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, {\n ...none,\n size,\n open: column(data.open, count),\n high: column(data.high, count),\n low: column(data.low, count),\n value: column(data.value, count),\n y0: column(data.y0, count),\n q1: column(data.q1, count),\n q3: column(data.q3, count),\n });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n let open: Float64Array | null = null;\n let high: Float64Array | null = null;\n let low: Float64Array | null = null;\n let value: Float64Array | null = null;\n let y0: Float64Array | null = null;\n let q1: Float64Array | null = null;\n let q3: Float64Array | null = null;\n let outliers: (readonly number[] | undefined)[] | null = null;\n let details: (readonly ChartTooltipDetail[] | undefined)[] | null = null;\n const nanColumn = () => new Float64Array(count).fill(NaN);\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = resolveY(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | string | null;\n size?: number;\n color?: string;\n label?: string;\n open?: number;\n high?: number;\n low?: number;\n value?: number | null;\n y0?: number | Date | null;\n q1?: number;\n q3?: number;\n outliers?: readonly number[];\n details?: readonly ChartTooltipDetail[];\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = resolveY(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n if (d.open !== undefined) (open ??= nanColumn())[i] = toNumber(d.open);\n if (d.high !== undefined) (high ??= nanColumn())[i] = toNumber(d.high);\n if (d.low !== undefined) (low ??= nanColumn())[i] = toNumber(d.low);\n if (d.value !== undefined) (value ??= nanColumn())[i] = toNumber(d.value);\n if (d.y0 !== undefined) (y0 ??= nanColumn())[i] = toNumber(d.y0);\n if (d.q1 !== undefined) (q1 ??= nanColumn())[i] = toNumber(d.q1);\n if (d.q3 !== undefined) (q3 ??= nanColumn())[i] = toNumber(d.q3);\n if (d.outliers !== undefined && d.outliers.length) {\n outliers ??= new Array<readonly number[] | undefined>(count);\n outliers[i] = d.outliers;\n }\n if (d.details !== undefined && d.details.length) {\n details ??= new Array<readonly ChartTooltipDetail[] | undefined>(count);\n details[i] = d.details;\n }\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, {\n size,\n colors,\n labels,\n open,\n high,\n low,\n value,\n y0,\n q1,\n q3,\n outliers,\n details,\n });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("./locale.cjs"),t=require("./scale.cjs");var n=[[0xe8d4a51000,`T`],[1e9,`B`],[1e6,`M`],[1e3,`k`]],r=new Map,i=t=>{if(!t)return n;let i=r.get(t);return i||(i=e.compactUnits(t),r.set(t,i)),i},a=e=>e.includes(`.`)?e.replace(/\.?0+$/,``):e,o=new Map,s=(t,n,r)=>{let i=`${r}|${n}`,a=o.get(i);return a||(a=e.numberFormat(r,{maximumFractionDigits:n}),o.set(i,a)),a.format(t)},c=(e,n=2,r)=>{if(!Number.isFinite(e))return String(e);if(Object.is(e,-0)||e===0)return`0`;let o=Math.abs(e);for(let[t,c]of i(r))if(o>=t)return r?s(e/t,n,r)+c:a((e/t).toFixed(n))+c;if(o<1e-4)return e.toExponential(1);let c=Math.min(6,Math.max(n,t.stepDecimals(o)+2));return r?s(e,c,r):a(e.toFixed(c))},l=(n,r,a)=>{if(r>=1e4){let e=i(a).find(([e])=>r>=e)?.[0]??1,o=Math.min(3,t.stepDecimals(n/e));return e=>c(e,o,a)}let o=t.stepDecimals(n);if(a){let t=e.numberFormat(a,{minimumFractionDigits:o,maximumFractionDigits:o,useGrouping:!1});return e=>{let n=Number(e.toFixed(o));return t.format(n===0?0:n)}}return e=>{let t=e.toFixed(o);return/^-0(\.0*)?$/.test(t)?t.slice(1):t}},u=(e,t)=>{if(!Number.isFinite(e))return`–`;let n=Math.abs(e);if(n>=1e6)return c(e,2,t);let r=Number.isInteger(e)?0:n>=100?2:n>=1?3:4;return t?s(e,r,t):r===0?e.toLocaleString(`en-US`):a(e.toFixed(r))},d=e=>t=>u(t,e),f=(t,n,r=!1)=>n?e.numberFormat(n,{style:`percent`,minimumFractionDigits:+!!r,maximumFractionDigits:1}).format(t/100):`${r?t.toFixed(1):+t.toFixed(1)}%`;exports.formatCompact=c,exports.formatPercent=f,exports.formatValue=u,exports.tickFormatter=l,exports.valueFormatter=d;
1
+ const e=require("./locale.cjs"),t=require("./scale.cjs");var n=[[0xe8d4a51000,`T`],[1e9,`B`],[1e6,`M`],[1e3,`k`]],r=new Map,i=t=>{if(!t)return n;let i=r.get(t);return i||(i=e.compactUnits(t),r.set(t,i)),i},a=e=>e.includes(`.`)?e.replace(/\.?0+$/,``):e,o=new Map,s=(t,n,r)=>{let i=`${r}|${n}`,a=o.get(i);return a||(a=e.numberFormat(r,{maximumFractionDigits:n}),o.set(i,a)),a.format(t)},c=(e,n=2,r)=>{if(!Number.isFinite(e))return String(e);if(Object.is(e,-0)||e===0)return`0`;let o=Math.abs(e);for(let[t,c]of i(r))if(o>=t)return r?s(e/t,n,r)+c:a((e/t).toFixed(n))+c;if(o<1e-4)return e.toExponential(1);let c=Math.min(6,Math.max(n,t.stepDecimals(o)+2));return r?s(e,c,r):a(e.toFixed(c))},l=(n,r,a)=>{if(r>=1e4){let e=i(a).find(([e])=>r>=e)?.[0]??1,o=Math.min(3,t.stepDecimals(n/e));return e=>c(e,o,a)}let o=t.stepDecimals(n);if(a){let t=e.numberFormat(a,{minimumFractionDigits:o,maximumFractionDigits:o,useGrouping:!1});return e=>{let n=Number(e.toFixed(o));return t.format(n===0?0:n)}}return e=>{let t=e.toFixed(o);return/^-0(\.0*)?$/.test(t)?t.slice(1):t}},u=(e,t)=>{if(!Number.isFinite(e))return`–`;let n=Math.abs(e);if(n>=1e6)return c(e,2,t);let r=Number.isInteger(e)?0:n>=100?2:n>=1?3:4;return t?s(e,r,t):r===0?e.toLocaleString(`en-US`):a(e.toFixed(r))},d=e=>t=>u(t,e),f=6e4,p=36e5,m=864e5,h=(t,n)=>{if(!Number.isFinite(t))return`–`;let r=Math.abs(t),i=r/m,a=i/7,[o,s]=i>=7&&Math.abs(a-Math.round(a))<1e-6?[Math.round(a),`week`]:i>=1?[Math.round(i*10)/10,`day`]:r>=p?[Math.round(r/p*10)/10,`hour`]:[Math.round(r/f),`minute`];try{return e.numberFormat(n,{style:`unit`,unit:s,unitDisplay:`long`,maximumFractionDigits:1}).format(o)}catch{return`${o} ${s}${o===1?``:`s`}`}},g=(t,n,r=!1)=>n?e.numberFormat(n,{style:`percent`,minimumFractionDigits:+!!r,maximumFractionDigits:1}).format(t/100):`${r?t.toFixed(1):+t.toFixed(1)}%`;exports.formatCompact=c,exports.formatDuration=h,exports.formatPercent=g,exports.formatValue=u,exports.tickFormatter=l,exports.valueFormatter=d;
2
2
  //# sourceMappingURL=format.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.cjs","names":["compactUnits","numberFormat","stepDecimals","require_locale","require_scale","UNITS","unitCache","unitsOf","locale","units","trim","text","decimalFormats","localized","key","decimals","format","value","formatCompact","abs","unit","suffix","maxDecimals","tickFormatter","maxAbs","u","step","rounded","formatValue","valueFormatter","formatPercent","fixed"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values. Without a `locale`\n// the output is the historical one (English units, `.` decimals); with a\n// locale, the units and separators of its language (`1,5 k`, `2.5万`).\n\nimport { compactUnits, numberFormat } from \"./locale\";\nimport { stepDecimals } from \"./scale\";\n\nconst UNITS: readonly [number, string][] = [\n [1e12, \"T\"],\n [1e9, \"B\"],\n [1e6, \"M\"],\n [1e3, \"k\"],\n];\n\nconst unitCache = new Map<string, readonly [number, string][]>();\n\n/** Compact units of a locale (English without one) */\nconst unitsOf = (locale?: string) => {\n if (!locale) return UNITS;\n let units = unitCache.get(locale);\n if (!units) {\n units = compactUnits(locale);\n unitCache.set(locale, units);\n }\n return units;\n};\n\nconst trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\nconst decimalFormats = new Map<string, Intl.NumberFormat>();\n\n/** `value` with at most `decimals` decimals in a locale (no trailing zeros) */\nconst localized = (value: number, decimals: number, locale: string) => {\n // hot path (ticks, tooltips): cheaper key than `numberFormat`'s JSON\n const key = `${locale}|${decimals}`;\n let format = decimalFormats.get(key);\n if (!format) {\n format = numberFormat(locale, { maximumFractionDigits: decimals });\n decimalFormats.set(key, format);\n }\n return format.format(value);\n};\n\n/**\n * `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0`. With a\n * `locale`: its compact units and separators (`123.46万` in Chinese,\n * `1,23 M` in French).\n */\nexport const formatCompact = (\n value: number,\n maxDecimals = 2,\n locale?: string,\n): string => {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return \"0\";\n const abs = Math.abs(value);\n for (const [unit, suffix] of unitsOf(locale)) {\n if (abs >= unit)\n return locale\n ? localized(value / unit, maxDecimals, locale) + suffix\n : trim((value / unit).toFixed(maxDecimals)) + suffix;\n }\n if (abs < 1e-4) return value.toExponential(1);\n const decimals = Math.min(6, Math.max(maxDecimals, stepDecimals(abs) + 2));\n return locale\n ? localized(value, decimals, locale)\n : trim(value.toFixed(decimals));\n};\n\n/**\n * Formatter of the ticks of a linear axis: enough decimals to tell the\n * ticks apart; compact units (k, M, ... or 万, 亿 with a `locale`) when the\n * values are large.\n */\nexport const tickFormatter = (\n step: number,\n maxAbs: number,\n locale?: string,\n) => {\n if (maxAbs >= 1e4) {\n const unit = unitsOf(locale).find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals, locale);\n }\n const decimals = stepDecimals(step);\n if (locale) {\n const format = numberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n // ticks stay below 10 000 here: `5000`, not `5,000`\n useGrouping: false,\n });\n return (value: number) => {\n const rounded = Number(value.toFixed(decimals));\n return format.format(rounded === 0 ? 0 : rounded);\n };\n }\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/**\n * Value of a tooltip: up to 4 significant decimals, thousands separators\n * (of the `locale`, English without it)\n */\nexport const formatValue = (value: number, locale?: string): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2, locale);\n const decimals = Number.isInteger(value)\n ? 0\n : abs >= 100\n ? 2\n : abs >= 1\n ? 3\n : 4;\n if (locale) return localized(value, decimals, locale);\n if (decimals === 0) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(decimals));\n};\n\n/** `formatValue` bound to a locale */\nexport const valueFormatter = (locale: string) => (value: number) =>\n formatValue(value, locale);\n\n/**\n * `12.5` -> `12.5%` (`12,5 %` in French): one decimal at most, exactly one\n * with `fixed` (`75.0%`)\n */\nexport const formatPercent = (\n value: number,\n locale?: string,\n fixed = false,\n): string =>\n locale\n ? numberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: fixed ? 1 : 0,\n maximumFractionDigits: 1,\n }).format(value / 100)\n : `${fixed ? value.toFixed(1) : +value.toFixed(1)}%`;\n"],"mappings":"yDAOA,IAAMK,EAAqC,CACzC,CAAC,aAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,CACX,EAEMC,EAAY,IAAI,IAGhBC,EAAW,GAAoB,CACnC,GAAI,CAACC,EAAQ,OAAOH,EACpB,IAAII,EAAQH,EAAU,IAAIE,CAAM,EAKhC,OAJKC,IACH,EAAQT,EAAAA,aAAaQ,CAAM,EAC3BF,EAAU,IAAIE,EAAQC,CAAK,GAEtBA,CACT,EAEMC,EAAQ,GACZC,EAAK,SAAS,GAAG,EAAIA,EAAK,QAAQ,SAAU,EAAE,EAAIA,EAE9CC,EAAiB,IAAI,IAGrBC,GAAa,EAAe,EAAkB,IAAmB,CAErE,IAAMC,EAAM,GAAGN,EAAO,GAAGO,IACrBC,EAASJ,EAAe,IAAIE,CAAG,EAKnC,OAJKE,IACH,EAASf,EAAAA,aAAaO,EAAQ,CAAE,sBAAuBO,CAAS,CAAC,EACjEH,EAAe,IAAIE,EAAKE,CAAM,GAEzBA,EAAO,OAAOC,CAAK,CAC5B,EAOaC,GACX,EACA,EAAc,EACd,IACW,CACX,GAAI,CAAC,OAAO,SAASD,CAAK,EAAG,OAAO,OAAOA,CAAK,EAChD,GAAI,OAAO,GAAGA,EAAO,EAAE,GAAKA,IAAU,EAAG,MAAO,IAChD,IAAME,EAAM,KAAK,IAAIF,CAAK,EAC1B,IAAK,GAAM,CAACG,EAAMC,KAAWd,EAAQC,CAAM,EACzC,GAAIW,GAAOC,EACT,OAAOZ,EACHK,EAAUI,EAAQG,EAAME,EAAad,CAAM,EAAIa,EAC/CX,GAAMO,EAAQG,EAAA,CAAM,QAAQE,CAAW,CAAC,EAAID,EAEpD,GAAIF,EAAM,KAAM,OAAOF,EAAM,cAAc,CAAC,EAC5C,IAAMF,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIO,EAAapB,EAAAA,aAAaiB,CAAG,EAAI,CAAC,CAAC,EACzE,OAAOX,EACHK,EAAUI,EAAOF,EAAUP,CAAM,EACjCE,EAAKO,EAAM,QAAQF,CAAQ,CAAC,CAClC,EAOaQ,GACX,EACA,EACA,IACG,CACH,GAAIC,GAAU,IAAK,CACjB,IAAMJ,EAAOb,EAAQC,CAAM,CAAC,CAAC,MAAM,CAACiB,KAAOD,GAAUC,CAAC,CAAC,GAAG,IAAM,EAC1DV,EAAW,KAAK,IAAI,EAAGb,EAAAA,aAAawB,EAAON,CAAI,CAAC,EACtD,MAAQ,IAAkBF,EAAcD,EAAOF,EAAUP,CAAM,CACjE,CACA,IAAMO,EAAWb,EAAAA,aAAawB,CAAI,EAClC,GAAIlB,EAAQ,CACV,IAAMQ,EAASf,EAAAA,aAAaO,EAAQ,CAClC,sBAAuBO,EACvB,sBAAuBA,EAEvB,YAAa,EACf,CAAC,EACD,MAAQ,IAAkB,CACxB,IAAMY,EAAU,OAAOV,EAAM,QAAQF,CAAQ,CAAC,EAC9C,OAAOC,EAAO,OAAOW,IAAY,EAAI,EAAIA,CAAO,CAClD,CACF,CACA,MAAQ,IAAkB,CACxB,IAAMhB,EAAOM,EAAM,QAAQF,CAAQ,EACnC,MAAO,cAAc,KAAKJ,CAAI,EAAIA,EAAK,MAAM,CAAC,EAAIA,CACpD,CACF,EAMaiB,GAAe,EAAe,IAA4B,CACrE,GAAI,CAAC,OAAO,SAASX,CAAK,EAAG,MAAO,IACpC,IAAME,EAAM,KAAK,IAAIF,CAAK,EAC1B,GAAIE,GAAO,IAAK,OAAOD,EAAcD,EAAO,EAAGT,CAAM,EACrD,IAAMO,EAAW,OAAO,UAAUE,CAAK,EACnC,EACAE,GAAO,IACL,EACAA,GAAO,EACL,EACA,EAGR,OAFIX,EAAeK,EAAUI,EAAOF,EAAUP,CAAM,EAChDO,IAAa,EAAUE,EAAM,eAAe,OAAO,EAChDP,EAAKO,EAAM,QAAQF,CAAQ,CAAC,CACrC,EAGac,EAAkB,GAAoB,GACjDD,EAAYX,EAAOT,CAAM,EAMdsB,GACX,EACA,EACA,EAAQ,KAERtB,EACIP,EAAAA,aAAaO,EAAQ,CACnB,MAAO,UACP,sBAAuB,KACvB,sBAAuB,CACzB,CAAC,CAAC,CAAC,OAAOS,EAAQ,GAAG,EACrB,GAAGc,EAAQd,EAAM,QAAQ,CAAC,EAAI,CAACA,EAAM,QAAQ,CAAC,EAAE"}
1
+ {"version":3,"file":"format.cjs","names":["compactUnits","numberFormat","stepDecimals","require_locale","require_scale","UNITS","unitCache","unitsOf","locale","units","trim","text","decimalFormats","localized","key","decimals","format","value","formatCompact","abs","unit","suffix","maxDecimals","tickFormatter","maxAbs","u","step","rounded","formatValue","valueFormatter","MINUTE","HOUR","DAY","formatDuration","ms","days","weeks","formatPercent","fixed"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values. Without a `locale`\n// the output is the historical one (English units, `.` decimals); with a\n// locale, the units and separators of its language (`1,5 k`, `2.5万`).\n\nimport { compactUnits, numberFormat } from \"./locale\";\nimport { stepDecimals } from \"./scale\";\n\nconst UNITS: readonly [number, string][] = [\n [1e12, \"T\"],\n [1e9, \"B\"],\n [1e6, \"M\"],\n [1e3, \"k\"],\n];\n\nconst unitCache = new Map<string, readonly [number, string][]>();\n\n/** Compact units of a locale (English without one) */\nconst unitsOf = (locale?: string) => {\n if (!locale) return UNITS;\n let units = unitCache.get(locale);\n if (!units) {\n units = compactUnits(locale);\n unitCache.set(locale, units);\n }\n return units;\n};\n\nconst trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\nconst decimalFormats = new Map<string, Intl.NumberFormat>();\n\n/** `value` with at most `decimals` decimals in a locale (no trailing zeros) */\nconst localized = (value: number, decimals: number, locale: string) => {\n // hot path (ticks, tooltips): cheaper key than `numberFormat`'s JSON\n const key = `${locale}|${decimals}`;\n let format = decimalFormats.get(key);\n if (!format) {\n format = numberFormat(locale, { maximumFractionDigits: decimals });\n decimalFormats.set(key, format);\n }\n return format.format(value);\n};\n\n/**\n * `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0`. With a\n * `locale`: its compact units and separators (`123.46万` in Chinese,\n * `1,23 M` in French).\n */\nexport const formatCompact = (\n value: number,\n maxDecimals = 2,\n locale?: string,\n): string => {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return \"0\";\n const abs = Math.abs(value);\n for (const [unit, suffix] of unitsOf(locale)) {\n if (abs >= unit)\n return locale\n ? localized(value / unit, maxDecimals, locale) + suffix\n : trim((value / unit).toFixed(maxDecimals)) + suffix;\n }\n if (abs < 1e-4) return value.toExponential(1);\n const decimals = Math.min(6, Math.max(maxDecimals, stepDecimals(abs) + 2));\n return locale\n ? localized(value, decimals, locale)\n : trim(value.toFixed(decimals));\n};\n\n/**\n * Formatter of the ticks of a linear axis: enough decimals to tell the\n * ticks apart; compact units (k, M, ... or 万, 亿 with a `locale`) when the\n * values are large.\n */\nexport const tickFormatter = (\n step: number,\n maxAbs: number,\n locale?: string,\n) => {\n if (maxAbs >= 1e4) {\n const unit = unitsOf(locale).find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals, locale);\n }\n const decimals = stepDecimals(step);\n if (locale) {\n const format = numberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n // ticks stay below 10 000 here: `5000`, not `5,000`\n useGrouping: false,\n });\n return (value: number) => {\n const rounded = Number(value.toFixed(decimals));\n return format.format(rounded === 0 ? 0 : rounded);\n };\n }\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/**\n * Value of a tooltip: up to 4 significant decimals, thousands separators\n * (of the `locale`, English without it)\n */\nexport const formatValue = (value: number, locale?: string): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2, locale);\n const decimals = Number.isInteger(value)\n ? 0\n : abs >= 100\n ? 2\n : abs >= 1\n ? 3\n : 4;\n if (locale) return localized(value, decimals, locale);\n if (decimals === 0) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(decimals));\n};\n\n/** `formatValue` bound to a locale */\nexport const valueFormatter = (locale: string) => (value: number) =>\n formatValue(value, locale);\n\nconst MINUTE = 60_000;\nconst HOUR = 3_600_000;\nconst DAY = 86_400_000;\n\n/**\n * Length of a time range in its natural unit, in the words of a locale:\n * whole weeks (`4 weeks`, `4周`), else days (`26 days`, `26 jours`), hours\n * or minutes\n */\nexport const formatDuration = (ms: number, locale: string): string => {\n if (!Number.isFinite(ms)) return \"–\";\n const abs = Math.abs(ms);\n const days = abs / DAY;\n const weeks = days / 7;\n const [value, unit] =\n days >= 7 && Math.abs(weeks - Math.round(weeks)) < 1e-6\n ? [Math.round(weeks), \"week\"]\n : days >= 1\n ? [Math.round(days * 10) / 10, \"day\"]\n : abs >= HOUR\n ? [Math.round((abs / HOUR) * 10) / 10, \"hour\"]\n : [Math.round(abs / MINUTE), \"minute\"];\n try {\n return numberFormat(locale, {\n style: \"unit\",\n unit,\n unitDisplay: \"long\",\n maximumFractionDigits: 1,\n }).format(value);\n } catch {\n // engines without unit formatting (old mini-program runtimes)\n return `${value} ${unit}${value === 1 ? \"\" : \"s\"}`;\n }\n};\n\n/**\n * `12.5` -> `12.5%` (`12,5 %` in French): one decimal at most, exactly one\n * with `fixed` (`75.0%`)\n */\nexport const formatPercent = (\n value: number,\n locale?: string,\n fixed = false,\n): string =>\n locale\n ? numberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: fixed ? 1 : 0,\n maximumFractionDigits: 1,\n }).format(value / 100)\n : `${fixed ? value.toFixed(1) : +value.toFixed(1)}%`;\n"],"mappings":"yDAOA,IAAMK,EAAqC,CACzC,CAAC,aAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,CACX,EAEMC,EAAY,IAAI,IAGhBC,EAAW,GAAoB,CACnC,GAAI,CAACC,EAAQ,OAAOH,EACpB,IAAII,EAAQH,EAAU,IAAIE,CAAM,EAKhC,OAJKC,IACH,EAAQT,EAAAA,aAAaQ,CAAM,EAC3BF,EAAU,IAAIE,EAAQC,CAAK,GAEtBA,CACT,EAEMC,EAAQ,GACZC,EAAK,SAAS,GAAG,EAAIA,EAAK,QAAQ,SAAU,EAAE,EAAIA,EAE9CC,EAAiB,IAAI,IAGrBC,GAAa,EAAe,EAAkB,IAAmB,CAErE,IAAMC,EAAM,GAAGN,EAAO,GAAGO,IACrBC,EAASJ,EAAe,IAAIE,CAAG,EAKnC,OAJKE,IACH,EAASf,EAAAA,aAAaO,EAAQ,CAAE,sBAAuBO,CAAS,CAAC,EACjEH,EAAe,IAAIE,EAAKE,CAAM,GAEzBA,EAAO,OAAOC,CAAK,CAC5B,EAOaC,GACX,EACA,EAAc,EACd,IACW,CACX,GAAI,CAAC,OAAO,SAASD,CAAK,EAAG,OAAO,OAAOA,CAAK,EAChD,GAAI,OAAO,GAAGA,EAAO,EAAE,GAAKA,IAAU,EAAG,MAAO,IAChD,IAAME,EAAM,KAAK,IAAIF,CAAK,EAC1B,IAAK,GAAM,CAACG,EAAMC,KAAWd,EAAQC,CAAM,EACzC,GAAIW,GAAOC,EACT,OAAOZ,EACHK,EAAUI,EAAQG,EAAME,EAAad,CAAM,EAAIa,EAC/CX,GAAMO,EAAQG,EAAA,CAAM,QAAQE,CAAW,CAAC,EAAID,EAEpD,GAAIF,EAAM,KAAM,OAAOF,EAAM,cAAc,CAAC,EAC5C,IAAMF,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIO,EAAapB,EAAAA,aAAaiB,CAAG,EAAI,CAAC,CAAC,EACzE,OAAOX,EACHK,EAAUI,EAAOF,EAAUP,CAAM,EACjCE,EAAKO,EAAM,QAAQF,CAAQ,CAAC,CAClC,EAOaQ,GACX,EACA,EACA,IACG,CACH,GAAIC,GAAU,IAAK,CACjB,IAAMJ,EAAOb,EAAQC,CAAM,CAAC,CAAC,MAAM,CAACiB,KAAOD,GAAUC,CAAC,CAAC,GAAG,IAAM,EAC1DV,EAAW,KAAK,IAAI,EAAGb,EAAAA,aAAawB,EAAON,CAAI,CAAC,EACtD,MAAQ,IAAkBF,EAAcD,EAAOF,EAAUP,CAAM,CACjE,CACA,IAAMO,EAAWb,EAAAA,aAAawB,CAAI,EAClC,GAAIlB,EAAQ,CACV,IAAMQ,EAASf,EAAAA,aAAaO,EAAQ,CAClC,sBAAuBO,EACvB,sBAAuBA,EAEvB,YAAa,EACf,CAAC,EACD,MAAQ,IAAkB,CACxB,IAAMY,EAAU,OAAOV,EAAM,QAAQF,CAAQ,CAAC,EAC9C,OAAOC,EAAO,OAAOW,IAAY,EAAI,EAAIA,CAAO,CAClD,CACF,CACA,MAAQ,IAAkB,CACxB,IAAMhB,EAAOM,EAAM,QAAQF,CAAQ,EACnC,MAAO,cAAc,KAAKJ,CAAI,EAAIA,EAAK,MAAM,CAAC,EAAIA,CACpD,CACF,EAMaiB,GAAe,EAAe,IAA4B,CACrE,GAAI,CAAC,OAAO,SAASX,CAAK,EAAG,MAAO,IACpC,IAAME,EAAM,KAAK,IAAIF,CAAK,EAC1B,GAAIE,GAAO,IAAK,OAAOD,EAAcD,EAAO,EAAGT,CAAM,EACrD,IAAMO,EAAW,OAAO,UAAUE,CAAK,EACnC,EACAE,GAAO,IACL,EACAA,GAAO,EACL,EACA,EAGR,OAFIX,EAAeK,EAAUI,EAAOF,EAAUP,CAAM,EAChDO,IAAa,EAAUE,EAAM,eAAe,OAAO,EAChDP,EAAKO,EAAM,QAAQF,CAAQ,CAAC,CACrC,EAGac,EAAkB,GAAoB,GACjDD,EAAYX,EAAOT,CAAM,EAErBsB,EAAS,IACTC,EAAO,KACPC,EAAM,MAOCC,GAAkB,EAAY,IAA2B,CACpE,GAAI,CAAC,OAAO,SAASC,CAAE,EAAG,MAAO,IACjC,IAAMf,EAAM,KAAK,IAAIe,CAAE,EACjBC,EAAOhB,EAAMa,EACbI,EAAQD,EAAO,EACf,CAAClB,EAAOG,GACZe,GAAQ,GAAK,KAAK,IAAIC,EAAQ,KAAK,MAAMA,CAAK,CAAC,EAAI,KAC/C,CAAC,KAAK,MAAMA,CAAK,EAAG,MAAM,EAC1BD,GAAQ,EACN,CAAC,KAAK,MAAMA,EAAO,EAAE,EAAI,GAAI,KAAK,EAClChB,GAAOY,EACL,CAAC,KAAK,MAAOZ,EAAMY,EAAQ,EAAE,EAAI,GAAI,MAAM,EAC3C,CAAC,KAAK,MAAMZ,EAAMW,CAAM,EAAG,QAAQ,EAC7C,GAAI,CACF,OAAO7B,EAAAA,aAAaO,EAAQ,CAC1B,MAAO,OACP,OACA,YAAa,OACb,sBAAuB,CACzB,CAAC,CAAC,CAAC,OAAOS,CAAK,CACjB,MAAQ,CAEN,MAAO,GAAGA,EAAM,GAAGG,IAAOH,IAAU,EAAI,GAAK,KAC/C,CACF,EAMaoB,GACX,EACA,EACA,EAAQ,KAER7B,EACIP,EAAAA,aAAaO,EAAQ,CACnB,MAAO,UACP,sBAAuB,KACvB,sBAAuB,CACzB,CAAC,CAAC,CAAC,OAAOS,EAAQ,GAAG,EACrB,GAAGqB,EAAQrB,EAAM,QAAQ,CAAC,EAAI,CAACA,EAAM,QAAQ,CAAC,EAAE"}
@@ -48,12 +48,25 @@ var r = [
48
48
  if (n >= 1e6) return l(e, 2, t);
49
49
  let r = Number.isInteger(e) ? 0 : n >= 100 ? 2 : n >= 1 ? 3 : 4;
50
50
  return t ? c(e, r, t) : r === 0 ? e.toLocaleString("en-US") : o(e.toFixed(r));
51
- }, f = (e) => (t) => d(t, e), p = (e, n, r = !1) => n ? t(n, {
51
+ }, f = (e) => (t) => d(t, e), p = 6e4, m = 36e5, h = 864e5, g = (e, n) => {
52
+ if (!Number.isFinite(e)) return "–";
53
+ let r = Math.abs(e), i = r / h, a = i / 7, [o, s] = i >= 7 && Math.abs(a - Math.round(a)) < 1e-6 ? [Math.round(a), "week"] : i >= 1 ? [Math.round(i * 10) / 10, "day"] : r >= m ? [Math.round(r / m * 10) / 10, "hour"] : [Math.round(r / p), "minute"];
54
+ try {
55
+ return t(n, {
56
+ style: "unit",
57
+ unit: s,
58
+ unitDisplay: "long",
59
+ maximumFractionDigits: 1
60
+ }).format(o);
61
+ } catch {
62
+ return `${o} ${s}${o === 1 ? "" : "s"}`;
63
+ }
64
+ }, _ = (e, n, r = !1) => n ? t(n, {
52
65
  style: "percent",
53
66
  minimumFractionDigits: +!!r,
54
67
  maximumFractionDigits: 1
55
68
  }).format(e / 100) : `${r ? e.toFixed(1) : +e.toFixed(1)}%`;
56
69
  //#endregion
57
- export { l as formatCompact, p as formatPercent, d as formatValue, u as tickFormatter, f as valueFormatter };
70
+ export { l as formatCompact, g as formatDuration, _ as formatPercent, d as formatValue, u as tickFormatter, f as valueFormatter };
58
71
 
59
72
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":["UNITS","unitCache","unitsOf","locale","units","compactUnits","trim","text","decimalFormats","localized","key","decimals","format","numberFormat","value","formatCompact","abs","unit","suffix","maxDecimals","stepDecimals","tickFormatter","maxAbs","u","step","rounded","formatValue","valueFormatter","formatPercent","fixed"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values. Without a `locale`\n// the output is the historical one (English units, `.` decimals); with a\n// locale, the units and separators of its language (`1,5 k`, `2.5万`).\n\nimport { compactUnits, numberFormat } from \"./locale\";\nimport { stepDecimals } from \"./scale\";\n\nconst UNITS: readonly [number, string][] = [\n [1e12, \"T\"],\n [1e9, \"B\"],\n [1e6, \"M\"],\n [1e3, \"k\"],\n];\n\nconst unitCache = new Map<string, readonly [number, string][]>();\n\n/** Compact units of a locale (English without one) */\nconst unitsOf = (locale?: string) => {\n if (!locale) return UNITS;\n let units = unitCache.get(locale);\n if (!units) {\n units = compactUnits(locale);\n unitCache.set(locale, units);\n }\n return units;\n};\n\nconst trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\nconst decimalFormats = new Map<string, Intl.NumberFormat>();\n\n/** `value` with at most `decimals` decimals in a locale (no trailing zeros) */\nconst localized = (value: number, decimals: number, locale: string) => {\n // hot path (ticks, tooltips): cheaper key than `numberFormat`'s JSON\n const key = `${locale}|${decimals}`;\n let format = decimalFormats.get(key);\n if (!format) {\n format = numberFormat(locale, { maximumFractionDigits: decimals });\n decimalFormats.set(key, format);\n }\n return format.format(value);\n};\n\n/**\n * `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0`. With a\n * `locale`: its compact units and separators (`123.46万` in Chinese,\n * `1,23 M` in French).\n */\nexport const formatCompact = (\n value: number,\n maxDecimals = 2,\n locale?: string,\n): string => {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return \"0\";\n const abs = Math.abs(value);\n for (const [unit, suffix] of unitsOf(locale)) {\n if (abs >= unit)\n return locale\n ? localized(value / unit, maxDecimals, locale) + suffix\n : trim((value / unit).toFixed(maxDecimals)) + suffix;\n }\n if (abs < 1e-4) return value.toExponential(1);\n const decimals = Math.min(6, Math.max(maxDecimals, stepDecimals(abs) + 2));\n return locale\n ? localized(value, decimals, locale)\n : trim(value.toFixed(decimals));\n};\n\n/**\n * Formatter of the ticks of a linear axis: enough decimals to tell the\n * ticks apart; compact units (k, M, ... or 万, 亿 with a `locale`) when the\n * values are large.\n */\nexport const tickFormatter = (\n step: number,\n maxAbs: number,\n locale?: string,\n) => {\n if (maxAbs >= 1e4) {\n const unit = unitsOf(locale).find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals, locale);\n }\n const decimals = stepDecimals(step);\n if (locale) {\n const format = numberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n // ticks stay below 10 000 here: `5000`, not `5,000`\n useGrouping: false,\n });\n return (value: number) => {\n const rounded = Number(value.toFixed(decimals));\n return format.format(rounded === 0 ? 0 : rounded);\n };\n }\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/**\n * Value of a tooltip: up to 4 significant decimals, thousands separators\n * (of the `locale`, English without it)\n */\nexport const formatValue = (value: number, locale?: string): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2, locale);\n const decimals = Number.isInteger(value)\n ? 0\n : abs >= 100\n ? 2\n : abs >= 1\n ? 3\n : 4;\n if (locale) return localized(value, decimals, locale);\n if (decimals === 0) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(decimals));\n};\n\n/** `formatValue` bound to a locale */\nexport const valueFormatter = (locale: string) => (value: number) =>\n formatValue(value, locale);\n\n/**\n * `12.5` -> `12.5%` (`12,5 %` in French): one decimal at most, exactly one\n * with `fixed` (`75.0%`)\n */\nexport const formatPercent = (\n value: number,\n locale?: string,\n fixed = false,\n): string =>\n locale\n ? numberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: fixed ? 1 : 0,\n maximumFractionDigits: 1,\n }).format(value / 100)\n : `${fixed ? value.toFixed(1) : +value.toFixed(1)}%`;\n"],"mappings":"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"}
1
+ {"version":3,"file":"format.js","names":["UNITS","unitCache","unitsOf","locale","units","compactUnits","trim","text","decimalFormats","localized","key","decimals","format","numberFormat","value","formatCompact","abs","unit","suffix","maxDecimals","stepDecimals","tickFormatter","maxAbs","u","step","rounded","formatValue","valueFormatter","MINUTE","HOUR","DAY","formatDuration","ms","days","weeks","formatPercent","fixed"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values. Without a `locale`\n// the output is the historical one (English units, `.` decimals); with a\n// locale, the units and separators of its language (`1,5 k`, `2.5万`).\n\nimport { compactUnits, numberFormat } from \"./locale\";\nimport { stepDecimals } from \"./scale\";\n\nconst UNITS: readonly [number, string][] = [\n [1e12, \"T\"],\n [1e9, \"B\"],\n [1e6, \"M\"],\n [1e3, \"k\"],\n];\n\nconst unitCache = new Map<string, readonly [number, string][]>();\n\n/** Compact units of a locale (English without one) */\nconst unitsOf = (locale?: string) => {\n if (!locale) return UNITS;\n let units = unitCache.get(locale);\n if (!units) {\n units = compactUnits(locale);\n unitCache.set(locale, units);\n }\n return units;\n};\n\nconst trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\nconst decimalFormats = new Map<string, Intl.NumberFormat>();\n\n/** `value` with at most `decimals` decimals in a locale (no trailing zeros) */\nconst localized = (value: number, decimals: number, locale: string) => {\n // hot path (ticks, tooltips): cheaper key than `numberFormat`'s JSON\n const key = `${locale}|${decimals}`;\n let format = decimalFormats.get(key);\n if (!format) {\n format = numberFormat(locale, { maximumFractionDigits: decimals });\n decimalFormats.set(key, format);\n }\n return format.format(value);\n};\n\n/**\n * `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0`. With a\n * `locale`: its compact units and separators (`123.46万` in Chinese,\n * `1,23 M` in French).\n */\nexport const formatCompact = (\n value: number,\n maxDecimals = 2,\n locale?: string,\n): string => {\n if (!Number.isFinite(value)) return String(value);\n if (Object.is(value, -0) || value === 0) return \"0\";\n const abs = Math.abs(value);\n for (const [unit, suffix] of unitsOf(locale)) {\n if (abs >= unit)\n return locale\n ? localized(value / unit, maxDecimals, locale) + suffix\n : trim((value / unit).toFixed(maxDecimals)) + suffix;\n }\n if (abs < 1e-4) return value.toExponential(1);\n const decimals = Math.min(6, Math.max(maxDecimals, stepDecimals(abs) + 2));\n return locale\n ? localized(value, decimals, locale)\n : trim(value.toFixed(decimals));\n};\n\n/**\n * Formatter of the ticks of a linear axis: enough decimals to tell the\n * ticks apart; compact units (k, M, ... or 万, 亿 with a `locale`) when the\n * values are large.\n */\nexport const tickFormatter = (\n step: number,\n maxAbs: number,\n locale?: string,\n) => {\n if (maxAbs >= 1e4) {\n const unit = unitsOf(locale).find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals, locale);\n }\n const decimals = stepDecimals(step);\n if (locale) {\n const format = numberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n // ticks stay below 10 000 here: `5000`, not `5,000`\n useGrouping: false,\n });\n return (value: number) => {\n const rounded = Number(value.toFixed(decimals));\n return format.format(rounded === 0 ? 0 : rounded);\n };\n }\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/**\n * Value of a tooltip: up to 4 significant decimals, thousands separators\n * (of the `locale`, English without it)\n */\nexport const formatValue = (value: number, locale?: string): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2, locale);\n const decimals = Number.isInteger(value)\n ? 0\n : abs >= 100\n ? 2\n : abs >= 1\n ? 3\n : 4;\n if (locale) return localized(value, decimals, locale);\n if (decimals === 0) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(decimals));\n};\n\n/** `formatValue` bound to a locale */\nexport const valueFormatter = (locale: string) => (value: number) =>\n formatValue(value, locale);\n\nconst MINUTE = 60_000;\nconst HOUR = 3_600_000;\nconst DAY = 86_400_000;\n\n/**\n * Length of a time range in its natural unit, in the words of a locale:\n * whole weeks (`4 weeks`, `4周`), else days (`26 days`, `26 jours`), hours\n * or minutes\n */\nexport const formatDuration = (ms: number, locale: string): string => {\n if (!Number.isFinite(ms)) return \"–\";\n const abs = Math.abs(ms);\n const days = abs / DAY;\n const weeks = days / 7;\n const [value, unit] =\n days >= 7 && Math.abs(weeks - Math.round(weeks)) < 1e-6\n ? [Math.round(weeks), \"week\"]\n : days >= 1\n ? [Math.round(days * 10) / 10, \"day\"]\n : abs >= HOUR\n ? [Math.round((abs / HOUR) * 10) / 10, \"hour\"]\n : [Math.round(abs / MINUTE), \"minute\"];\n try {\n return numberFormat(locale, {\n style: \"unit\",\n unit,\n unitDisplay: \"long\",\n maximumFractionDigits: 1,\n }).format(value);\n } catch {\n // engines without unit formatting (old mini-program runtimes)\n return `${value} ${unit}${value === 1 ? \"\" : \"s\"}`;\n }\n};\n\n/**\n * `12.5` -> `12.5%` (`12,5 %` in French): one decimal at most, exactly one\n * with `fixed` (`75.0%`)\n */\nexport const formatPercent = (\n value: number,\n locale?: string,\n fixed = false,\n): string =>\n locale\n ? numberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: fixed ? 1 : 0,\n maximumFractionDigits: 1,\n }).format(value / 100)\n : `${fixed ? value.toFixed(1) : +value.toFixed(1)}%`;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("./locale.cjs");var t={en:{open:`Open`,high:`High`,low:`Low`,close:`Close`,max:`Max`,q3:`Q3`,median:`Median`,q1:`Q1`,min:`Min`,outliers:`Outliers`,value:`Value`,x:`x`,y:`y`,series:`Series`,chart:`Chart`,chartOf:`Chart: {series}`},zh:{open:`开盘`,high:`最高`,low:`最低`,close:`收盘`,max:`最大值`,q3:`上四分位`,median:`中位数`,q1:`下四分位`,min:`最小值`,outliers:`异常值`,value:`数值`,series:`系列`,chart:`图表`,chartOf:`图表:{series}`},ja:{open:`始値`,high:`高値`,low:`安値`,close:`終値`,max:`最大値`,q3:`第3四分位`,median:`中央値`,q1:`第1四分位`,min:`最小値`,outliers:`外れ値`,value:`値`,series:`系列`,chart:`グラフ`,chartOf:`グラフ:{series}`},fr:{open:`Ouverture`,high:`Plus haut`,low:`Plus bas`,close:`Clôture`,max:`Max`,q3:`Q3`,median:`Médiane`,q1:`Q1`,min:`Min`,outliers:`Valeurs aberrantes`,value:`Valeur`,series:`Série`,chart:`Graphique`,chartOf:`Graphique : {series}`}},n=(n,r)=>e.localeLabels(t,n,r),r=e=>/^(zh|ja)\b/i.test(e)?`、`:`, `,i=e=>e.series.length?e.labels.chartOf.replace(`{series}`,e.series.map(e=>e.name).join(r(e.locale))):e.labels.chart;exports.CHART_LABELS=t,exports.chartAriaLabel=i,exports.chartLabels=n;
1
+ const e=require("./locale.cjs");var t={en:{open:`Open`,high:`High`,low:`Low`,close:`Close`,max:`Max`,q3:`Q3`,median:`Median`,q1:`Q1`,min:`Min`,outliers:`Outliers`,value:`Value`,x:`x`,y:`y`,series:`Series`,chart:`Chart`,chartOf:`Chart: {series}`,start:`Start`,end:`End`,duration:`Duration`,progress:`Progress`,dependencies:`Depends on`,outlier:`Outlier`},zh:{open:`开盘`,high:`最高`,low:`最低`,close:`收盘`,max:`最大值`,q3:`上四分位`,median:`中位数`,q1:`下四分位`,min:`最小值`,outliers:`异常值`,value:`数值`,series:`系列`,chart:`图表`,chartOf:`图表:{series}`,start:`开始`,end:`结束`,duration:`时长`,progress:`进度`,dependencies:`前置任务`,outlier:`异常值`},ja:{open:`始値`,high:`高値`,low:`安値`,close:`終値`,max:`最大値`,q3:`第3四分位`,median:`中央値`,q1:`第1四分位`,min:`最小値`,outliers:`外れ値`,value:`値`,series:`系列`,chart:`グラフ`,chartOf:`グラフ:{series}`,start:`開始`,end:`終了`,duration:`期間`,progress:`進捗`,dependencies:`先行タスク`,outlier:`外れ値`},fr:{open:`Ouverture`,high:`Plus haut`,low:`Plus bas`,close:`Clôture`,max:`Max`,q3:`Q3`,median:`Médiane`,q1:`Q1`,min:`Min`,outliers:`Valeurs aberrantes`,value:`Valeur`,series:`Série`,chart:`Graphique`,chartOf:`Graphique : {series}`,start:`Début`,end:`Fin`,duration:`Durée`,progress:`Avancement`,dependencies:`Dépend de`,outlier:`Valeur aberrante`}},n=(n,r)=>e.localeLabels(t,n,r),r=e=>/^(zh|ja)\b/i.test(e)?`、`:`, `,i=e=>e.series.length?e.labels.chartOf.replace(`{series}`,e.series.map(e=>e.name).join(r(e.locale))):e.labels.chart;exports.CHART_LABELS=t,exports.chartAriaLabel=i,exports.chartLabels=n;
2
2
  //# sourceMappingURL=labels.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.cjs","names":["localeLabels","require_locale","CHART_LABELS","chartLabels","locale","overrides","listSeparator","chartAriaLabel","model","s"],"sources":["../../../../../../charts/src/engine/labels.ts"],"sourcesContent":["// Built-in texts of the cartesian engine (tooltip rows, accessible names).\n\nimport { localeLabels, type LabelDictionary } from \"./locale\";\nimport type { ChartLabels } from \"./types\";\n\nexport const CHART_LABELS: LabelDictionary<ChartLabels> = {\n en: {\n open: \"Open\",\n high: \"High\",\n low: \"Low\",\n close: \"Close\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Median\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Outliers\",\n value: \"Value\",\n x: \"x\",\n y: \"y\",\n series: \"Series\",\n chart: \"Chart\",\n chartOf: \"Chart: {series}\",\n },\n zh: {\n open: \"开盘\",\n high: \"最高\",\n low: \"最低\",\n close: \"收盘\",\n max: \"最大值\",\n q3: \"上四分位\",\n median: \"中位数\",\n q1: \"下四分位\",\n min: \"最小值\",\n outliers: \"异常值\",\n value: \"数值\",\n series: \"系列\",\n chart: \"图表\",\n chartOf: \"图表:{series}\",\n },\n ja: {\n open: \"始値\",\n high: \"高値\",\n low: \"安値\",\n close: \"終値\",\n max: \"最大値\",\n q3: \"第3四分位\",\n median: \"中央値\",\n q1: \"第1四分位\",\n min: \"最小値\",\n outliers: \"外れ値\",\n value: \"値\",\n series: \"系列\",\n chart: \"グラフ\",\n chartOf: \"グラフ:{series}\",\n },\n fr: {\n open: \"Ouverture\",\n high: \"Plus haut\",\n low: \"Plus bas\",\n close: \"Clôture\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Médiane\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Valeurs aberrantes\",\n value: \"Valeur\",\n series: \"Série\",\n chart: \"Graphique\",\n chartOf: \"Graphique : {series}\",\n },\n};\n\n/** Texts of a locale with the overrides */\nexport const chartLabels = (\n locale: string,\n overrides?: Partial<ChartLabels>,\n): ChartLabels => localeLabels(CHART_LABELS, locale, overrides);\n\n/** Separator of the list of series names in accessible names */\nconst listSeparator = (locale: string) =>\n /^(zh|ja)\\b/i.test(locale) ? \"、\" : \", \";\n\n/** Default accessible name of a chart model: \"Chart: Revenue, Costs\" */\nexport const chartAriaLabel = (model: {\n labels: ChartLabels;\n locale: string;\n series: readonly { name: string }[];\n}): string =>\n model.series.length\n ? model.labels.chartOf.replace(\n \"{series}\",\n model.series.map((s) => s.name).join(listSeparator(model.locale)),\n )\n : model.labels.chart;\n"],"mappings":"gCAKA,IAAaE,EAA6C,CACxD,GAAI,CACF,KAAM,OACN,KAAM,OACN,IAAK,MACL,MAAO,QACP,IAAK,MACL,GAAI,KACJ,OAAQ,SACR,GAAI,KACJ,IAAK,MACL,SAAU,WACV,MAAO,QACP,EAAG,IACH,EAAG,IACH,OAAQ,SACR,MAAO,QACP,QAAS,iBACX,EACA,GAAI,CACF,KAAM,KACN,KAAM,KACN,IAAK,KACL,MAAO,KACP,IAAK,MACL,GAAI,OACJ,OAAQ,MACR,GAAI,OACJ,IAAK,MACL,SAAU,MACV,MAAO,KACP,OAAQ,KACR,MAAO,KACP,QAAS,aACX,EACA,GAAI,CACF,KAAM,KACN,KAAM,KACN,IAAK,KACL,MAAO,KACP,IAAK,MACL,GAAI,QACJ,OAAQ,MACR,GAAI,QACJ,IAAK,MACL,SAAU,MACV,MAAO,IACP,OAAQ,KACR,MAAO,MACP,QAAS,cACX,EACA,GAAI,CACF,KAAM,YACN,KAAM,YACN,IAAK,WACL,MAAO,UACP,IAAK,MACL,GAAI,KACJ,OAAQ,UACR,GAAI,KACJ,IAAK,MACL,SAAU,qBACV,MAAO,SACP,OAAQ,QACR,MAAO,YACP,QAAS,sBACX,CACF,EAGaC,GACX,EACA,IACgBH,EAAAA,aAAaE,EAAcE,EAAQC,CAAS,EAGxDC,EAAiB,GACrB,cAAc,KAAKF,CAAM,EAAI,IAAM,KAGxBG,EAAkB,GAK7BC,EAAM,OAAO,OACTA,EAAM,OAAO,QAAQ,QACnB,WACAA,EAAM,OAAO,IAAK,GAAMC,EAAE,IAAI,CAAC,CAAC,KAAKH,EAAcE,EAAM,MAAM,CAAC,CAClE,EACAA,EAAM,OAAO"}
1
+ {"version":3,"file":"labels.cjs","names":["localeLabels","require_locale","CHART_LABELS","chartLabels","locale","overrides","listSeparator","chartAriaLabel","model","s"],"sources":["../../../../../../charts/src/engine/labels.ts"],"sourcesContent":["// Built-in texts of the cartesian engine (tooltip rows, accessible names).\n\nimport { localeLabels, type LabelDictionary } from \"./locale\";\nimport type { ChartLabels } from \"./types\";\n\nexport const CHART_LABELS: LabelDictionary<ChartLabels> = {\n en: {\n open: \"Open\",\n high: \"High\",\n low: \"Low\",\n close: \"Close\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Median\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Outliers\",\n value: \"Value\",\n x: \"x\",\n y: \"y\",\n series: \"Series\",\n chart: \"Chart\",\n chartOf: \"Chart: {series}\",\n start: \"Start\",\n end: \"End\",\n duration: \"Duration\",\n progress: \"Progress\",\n dependencies: \"Depends on\",\n outlier: \"Outlier\",\n },\n zh: {\n open: \"开盘\",\n high: \"最高\",\n low: \"最低\",\n close: \"收盘\",\n max: \"最大值\",\n q3: \"上四分位\",\n median: \"中位数\",\n q1: \"下四分位\",\n min: \"最小值\",\n outliers: \"异常值\",\n value: \"数值\",\n series: \"系列\",\n chart: \"图表\",\n chartOf: \"图表:{series}\",\n start: \"开始\",\n end: \"结束\",\n duration: \"时长\",\n progress: \"进度\",\n dependencies: \"前置任务\",\n outlier: \"异常值\",\n },\n ja: {\n open: \"始値\",\n high: \"高値\",\n low: \"安値\",\n close: \"終値\",\n max: \"最大値\",\n q3: \"第3四分位\",\n median: \"中央値\",\n q1: \"第1四分位\",\n min: \"最小値\",\n outliers: \"外れ値\",\n value: \"値\",\n series: \"系列\",\n chart: \"グラフ\",\n chartOf: \"グラフ:{series}\",\n start: \"開始\",\n end: \"終了\",\n duration: \"期間\",\n progress: \"進捗\",\n dependencies: \"先行タスク\",\n outlier: \"外れ値\",\n },\n fr: {\n open: \"Ouverture\",\n high: \"Plus haut\",\n low: \"Plus bas\",\n close: \"Clôture\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Médiane\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Valeurs aberrantes\",\n value: \"Valeur\",\n series: \"Série\",\n chart: \"Graphique\",\n chartOf: \"Graphique : {series}\",\n start: \"Début\",\n end: \"Fin\",\n duration: \"Durée\",\n progress: \"Avancement\",\n dependencies: \"Dépend de\",\n outlier: \"Valeur aberrante\",\n },\n};\n\n/** Texts of a locale with the overrides */\nexport const chartLabels = (\n locale: string,\n overrides?: Partial<ChartLabels>,\n): ChartLabels => localeLabels(CHART_LABELS, locale, overrides);\n\n/** Separator of the list of series names in accessible names */\nconst listSeparator = (locale: string) =>\n /^(zh|ja)\\b/i.test(locale) ? \"、\" : \", \";\n\n/** Default accessible name of a chart model: \"Chart: Revenue, Costs\" */\nexport const chartAriaLabel = (model: {\n labels: ChartLabels;\n locale: string;\n series: readonly { name: string }[];\n}): string =>\n model.series.length\n ? model.labels.chartOf.replace(\n \"{series}\",\n model.series.map((s) => s.name).join(listSeparator(model.locale)),\n )\n : model.labels.chart;\n"],"mappings":"gCAKA,IAAaE,EAA6C,CACxD,GAAI,CACF,KAAM,OACN,KAAM,OACN,IAAK,MACL,MAAO,QACP,IAAK,MACL,GAAI,KACJ,OAAQ,SACR,GAAI,KACJ,IAAK,MACL,SAAU,WACV,MAAO,QACP,EAAG,IACH,EAAG,IACH,OAAQ,SACR,MAAO,QACP,QAAS,kBACT,MAAO,QACP,IAAK,MACL,SAAU,WACV,SAAU,WACV,aAAc,aACd,QAAS,SACX,EACA,GAAI,CACF,KAAM,KACN,KAAM,KACN,IAAK,KACL,MAAO,KACP,IAAK,MACL,GAAI,OACJ,OAAQ,MACR,GAAI,OACJ,IAAK,MACL,SAAU,MACV,MAAO,KACP,OAAQ,KACR,MAAO,KACP,QAAS,cACT,MAAO,KACP,IAAK,KACL,SAAU,KACV,SAAU,KACV,aAAc,OACd,QAAS,KACX,EACA,GAAI,CACF,KAAM,KACN,KAAM,KACN,IAAK,KACL,MAAO,KACP,IAAK,MACL,GAAI,QACJ,OAAQ,MACR,GAAI,QACJ,IAAK,MACL,SAAU,MACV,MAAO,IACP,OAAQ,KACR,MAAO,MACP,QAAS,eACT,MAAO,KACP,IAAK,KACL,SAAU,KACV,SAAU,KACV,aAAc,QACd,QAAS,KACX,EACA,GAAI,CACF,KAAM,YACN,KAAM,YACN,IAAK,WACL,MAAO,UACP,IAAK,MACL,GAAI,KACJ,OAAQ,UACR,GAAI,KACJ,IAAK,MACL,SAAU,qBACV,MAAO,SACP,OAAQ,QACR,MAAO,YACP,QAAS,uBACT,MAAO,QACP,IAAK,MACL,SAAU,QACV,SAAU,aACV,aAAc,YACd,QAAS,kBACX,CACF,EAGaC,GACX,EACA,IACgBH,EAAAA,aAAaE,EAAcE,EAAQC,CAAS,EAGxDC,EAAiB,GACrB,cAAc,KAAKF,CAAM,EAAI,IAAM,KAGxBG,EAAkB,GAK7BC,EAAM,OAAO,OACTA,EAAM,OAAO,QAAQ,QACnB,WACAA,EAAM,OAAO,IAAK,GAAMC,EAAE,IAAI,CAAC,CAAC,KAAKH,EAAcE,EAAM,MAAM,CAAC,CAClE,EACAA,EAAM,OAAO"}
@@ -17,7 +17,13 @@ var t = {
17
17
  y: "y",
18
18
  series: "Series",
19
19
  chart: "Chart",
20
- chartOf: "Chart: {series}"
20
+ chartOf: "Chart: {series}",
21
+ start: "Start",
22
+ end: "End",
23
+ duration: "Duration",
24
+ progress: "Progress",
25
+ dependencies: "Depends on",
26
+ outlier: "Outlier"
21
27
  },
22
28
  zh: {
23
29
  open: "开盘",
@@ -33,7 +39,13 @@ var t = {
33
39
  value: "数值",
34
40
  series: "系列",
35
41
  chart: "图表",
36
- chartOf: "图表:{series}"
42
+ chartOf: "图表:{series}",
43
+ start: "开始",
44
+ end: "结束",
45
+ duration: "时长",
46
+ progress: "进度",
47
+ dependencies: "前置任务",
48
+ outlier: "异常值"
37
49
  },
38
50
  ja: {
39
51
  open: "始値",
@@ -49,7 +61,13 @@ var t = {
49
61
  value: "値",
50
62
  series: "系列",
51
63
  chart: "グラフ",
52
- chartOf: "グラフ:{series}"
64
+ chartOf: "グラフ:{series}",
65
+ start: "開始",
66
+ end: "終了",
67
+ duration: "期間",
68
+ progress: "進捗",
69
+ dependencies: "先行タスク",
70
+ outlier: "外れ値"
53
71
  },
54
72
  fr: {
55
73
  open: "Ouverture",
@@ -65,7 +83,13 @@ var t = {
65
83
  value: "Valeur",
66
84
  series: "Série",
67
85
  chart: "Graphique",
68
- chartOf: "Graphique : {series}"
86
+ chartOf: "Graphique : {series}",
87
+ start: "Début",
88
+ end: "Fin",
89
+ duration: "Durée",
90
+ progress: "Avancement",
91
+ dependencies: "Dépend de",
92
+ outlier: "Valeur aberrante"
69
93
  }
70
94
  }, n = (n, r) => e(t, n, r), r = (e) => /^(zh|ja)\b/i.test(e) ? "、" : ", ", i = (e) => e.series.length ? e.labels.chartOf.replace("{series}", e.series.map((e) => e.name).join(r(e.locale))) : e.labels.chart;
71
95
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","names":["CHART_LABELS","chartLabels","localeLabels","locale","overrides","listSeparator","chartAriaLabel","model","s"],"sources":["../../../../../../charts/src/engine/labels.ts"],"sourcesContent":["// Built-in texts of the cartesian engine (tooltip rows, accessible names).\n\nimport { localeLabels, type LabelDictionary } from \"./locale\";\nimport type { ChartLabels } from \"./types\";\n\nexport const CHART_LABELS: LabelDictionary<ChartLabels> = {\n en: {\n open: \"Open\",\n high: \"High\",\n low: \"Low\",\n close: \"Close\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Median\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Outliers\",\n value: \"Value\",\n x: \"x\",\n y: \"y\",\n series: \"Series\",\n chart: \"Chart\",\n chartOf: \"Chart: {series}\",\n },\n zh: {\n open: \"开盘\",\n high: \"最高\",\n low: \"最低\",\n close: \"收盘\",\n max: \"最大值\",\n q3: \"上四分位\",\n median: \"中位数\",\n q1: \"下四分位\",\n min: \"最小值\",\n outliers: \"异常值\",\n value: \"数值\",\n series: \"系列\",\n chart: \"图表\",\n chartOf: \"图表:{series}\",\n },\n ja: {\n open: \"始値\",\n high: \"高値\",\n low: \"安値\",\n close: \"終値\",\n max: \"最大値\",\n q3: \"第3四分位\",\n median: \"中央値\",\n q1: \"第1四分位\",\n min: \"最小値\",\n outliers: \"外れ値\",\n value: \"値\",\n series: \"系列\",\n chart: \"グラフ\",\n chartOf: \"グラフ:{series}\",\n },\n fr: {\n open: \"Ouverture\",\n high: \"Plus haut\",\n low: \"Plus bas\",\n close: \"Clôture\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Médiane\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Valeurs aberrantes\",\n value: \"Valeur\",\n series: \"Série\",\n chart: \"Graphique\",\n chartOf: \"Graphique : {series}\",\n },\n};\n\n/** Texts of a locale with the overrides */\nexport const chartLabels = (\n locale: string,\n overrides?: Partial<ChartLabels>,\n): ChartLabels => localeLabels(CHART_LABELS, locale, overrides);\n\n/** Separator of the list of series names in accessible names */\nconst listSeparator = (locale: string) =>\n /^(zh|ja)\\b/i.test(locale) ? \"、\" : \", \";\n\n/** Default accessible name of a chart model: \"Chart: Revenue, Costs\" */\nexport const chartAriaLabel = (model: {\n labels: ChartLabels;\n locale: string;\n series: readonly { name: string }[];\n}): string =>\n model.series.length\n ? model.labels.chartOf.replace(\n \"{series}\",\n model.series.map((s) => s.name).join(listSeparator(model.locale)),\n )\n : model.labels.chart;\n"],"mappings":";;AAKA,IAAaA,IAA6C;CACxD,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,GAAG;EACH,GAAG;EACH,QAAQ;EACR,OAAO;EACP,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;CACX;AACF,GAGaC,KACX,GACA,MACgBC,EAAaF,GAAcG,GAAQC,CAAS,GAGxDC,KAAiB,MACrB,cAAc,KAAKF,CAAM,IAAI,MAAM,MAGxBG,KAAkB,MAK7BC,EAAM,OAAO,SACTA,EAAM,OAAO,QAAQ,QACnB,YACAA,EAAM,OAAO,KAAK,MAAMC,EAAE,IAAI,CAAC,CAAC,KAAKH,EAAcE,EAAM,MAAM,CAAC,CAClE,IACAA,EAAM,OAAO"}
1
+ {"version":3,"file":"labels.js","names":["CHART_LABELS","chartLabels","localeLabels","locale","overrides","listSeparator","chartAriaLabel","model","s"],"sources":["../../../../../../charts/src/engine/labels.ts"],"sourcesContent":["// Built-in texts of the cartesian engine (tooltip rows, accessible names).\n\nimport { localeLabels, type LabelDictionary } from \"./locale\";\nimport type { ChartLabels } from \"./types\";\n\nexport const CHART_LABELS: LabelDictionary<ChartLabels> = {\n en: {\n open: \"Open\",\n high: \"High\",\n low: \"Low\",\n close: \"Close\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Median\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Outliers\",\n value: \"Value\",\n x: \"x\",\n y: \"y\",\n series: \"Series\",\n chart: \"Chart\",\n chartOf: \"Chart: {series}\",\n start: \"Start\",\n end: \"End\",\n duration: \"Duration\",\n progress: \"Progress\",\n dependencies: \"Depends on\",\n outlier: \"Outlier\",\n },\n zh: {\n open: \"开盘\",\n high: \"最高\",\n low: \"最低\",\n close: \"收盘\",\n max: \"最大值\",\n q3: \"上四分位\",\n median: \"中位数\",\n q1: \"下四分位\",\n min: \"最小值\",\n outliers: \"异常值\",\n value: \"数值\",\n series: \"系列\",\n chart: \"图表\",\n chartOf: \"图表:{series}\",\n start: \"开始\",\n end: \"结束\",\n duration: \"时长\",\n progress: \"进度\",\n dependencies: \"前置任务\",\n outlier: \"异常值\",\n },\n ja: {\n open: \"始値\",\n high: \"高値\",\n low: \"安値\",\n close: \"終値\",\n max: \"最大値\",\n q3: \"第3四分位\",\n median: \"中央値\",\n q1: \"第1四分位\",\n min: \"最小値\",\n outliers: \"外れ値\",\n value: \"値\",\n series: \"系列\",\n chart: \"グラフ\",\n chartOf: \"グラフ:{series}\",\n start: \"開始\",\n end: \"終了\",\n duration: \"期間\",\n progress: \"進捗\",\n dependencies: \"先行タスク\",\n outlier: \"外れ値\",\n },\n fr: {\n open: \"Ouverture\",\n high: \"Plus haut\",\n low: \"Plus bas\",\n close: \"Clôture\",\n max: \"Max\",\n q3: \"Q3\",\n median: \"Médiane\",\n q1: \"Q1\",\n min: \"Min\",\n outliers: \"Valeurs aberrantes\",\n value: \"Valeur\",\n series: \"Série\",\n chart: \"Graphique\",\n chartOf: \"Graphique : {series}\",\n start: \"Début\",\n end: \"Fin\",\n duration: \"Durée\",\n progress: \"Avancement\",\n dependencies: \"Dépend de\",\n outlier: \"Valeur aberrante\",\n },\n};\n\n/** Texts of a locale with the overrides */\nexport const chartLabels = (\n locale: string,\n overrides?: Partial<ChartLabels>,\n): ChartLabels => localeLabels(CHART_LABELS, locale, overrides);\n\n/** Separator of the list of series names in accessible names */\nconst listSeparator = (locale: string) =>\n /^(zh|ja)\\b/i.test(locale) ? \"、\" : \", \";\n\n/** Default accessible name of a chart model: \"Chart: Revenue, Costs\" */\nexport const chartAriaLabel = (model: {\n labels: ChartLabels;\n locale: string;\n series: readonly { name: string }[];\n}): string =>\n model.series.length\n ? model.labels.chartOf.replace(\n \"{series}\",\n model.series.map((s) => s.name).join(listSeparator(model.locale)),\n )\n : model.labels.chart;\n"],"mappings":";;AAKA,IAAaA,IAA6C;CACxD,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,GAAG;EACH,GAAG;EACH,QAAQ;EACR,OAAO;EACP,SAAS;EACT,OAAO;EACP,KAAK;EACL,UAAU;EACV,UAAU;EACV,cAAc;EACd,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;EACT,OAAO;EACP,KAAK;EACL,UAAU;EACV,UAAU;EACV,cAAc;EACd,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;EACT,OAAO;EACP,KAAK;EACL,UAAU;EACV,UAAU;EACV,cAAc;EACd,SAAS;CACX;CACA,IAAI;EACF,MAAM;EACN,MAAM;EACN,KAAK;EACL,OAAO;EACP,KAAK;EACL,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,KAAK;EACL,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO;EACP,SAAS;EACT,OAAO;EACP,KAAK;EACL,UAAU;EACV,UAAU;EACV,cAAc;EACd,SAAS;CACX;AACF,GAGaC,KACX,GACA,MACgBC,EAAaF,GAAcG,GAAQC,CAAS,GAGxDC,KAAiB,MACrB,cAAc,KAAKF,CAAM,IAAI,MAAM,MAGxBG,KAAkB,MAK7BC,EAAM,OAAO,SACTA,EAAM,OAAO,QAAQ,QACnB,YACAA,EAAM,OAAO,KAAK,MAAMC,EAAE,IAAI,CAAC,CAAC,KAAKH,EAAcE,EAAM,MAAM,CAAC,CAClE,IACAA,EAAM,OAAO"}
@@ -1,2 +1,2 @@
1
- var e=(e,t,n,r,i=!1)=>{let[a,o]=t.x,[s,c]=t.y,l=e.x,u=e.x+e.width,d=e.y,f=e.y+e.height;if(i){let p=e.height/(o-a||1),m=e.width/(c-s||1);return{plot:e,view:t,horizontal:i,xToPx:n?e=>f-(e-a)*p:e=>d+(e-a)*p,yToPx:r?e=>u-(e-s)*m:e=>l+(e-s)*m,pxToX:n?e=>a+(f-e)/p:e=>a+(e-d)/p,pxToY:r?e=>s+(u-e)/m:e=>s+(e-l)/m,xPerPx:1/p,yPerPx:1/m}}let p=e.width/(o-a||1),m=e.height/(c-s||1);return{plot:e,view:t,horizontal:i,xToPx:n?e=>u-(e-a)*p:e=>l+(e-a)*p,yToPx:r?e=>d+(e-s)*m:e=>f-(e-s)*m,pxToX:n?e=>a+(u-e)/p:e=>a+(e-l)/p,pxToY:r?e=>s+(e-d)/m:e=>s+(f-e)/m,xPerPx:1/p,yPerPx:1/m}},t=(e,t,n)=>e.horizontal?{x:e.yToPx(n),y:e.xToPx(t)}:{x:e.xToPx(t),y:e.yToPx(n)},n=(e,t,n)=>e.horizontal?{x:e.pxToX(n),y:e.pxToY(t)}:{x:e.pxToX(t),y:e.pxToY(n)},r=(e,t,n)=>e.horizontal?n:t,i=(e,t,n)=>e.horizontal?t:n,a=(e,t,n,r,i)=>{let a=Math.min(t,n),o=Math.max(t,n),s=Math.min(r,i),c=Math.max(r,i);return e.horizontal?{x:s,y:a,width:c-s,height:o-a}:{x:a,y:s,width:o-a,height:c-s}},o=e=>{let{width:t,height:n,padding:r,fontSize:i}=e,a=Math.ceil(i*1.4),o=r.left+(e.yLabelWidth>0?e.yLabelWidth+8:0)+(e.yTitle?a+6:0),s=r.bottom+(e.xAxisVisible?a+8:0)+(e.xTitle?a+4:0),c=r.top,l=e.y2LabelWidth??0,u=l>0||e.y2Title?Math.max(4,r.left)+(l>0?l+8:0)+(e.y2Title?a+6:0):r.right;return{x:Math.round(o),y:Math.round(c),width:Math.max(10,Math.round(t-o-u)),height:Math.max(10,Math.round(n-c-s))}};exports.alongX=r,exports.alongY=i,exports.computePlot=o,exports.createScales=e,exports.screenRect=a,exports.toData=n,exports.toScreen=t;
1
+ var e=(e,t,n,r,i=!1)=>{let[a,o]=t.x,[s,c]=t.y,l=e.x,u=e.x+e.width,d=e.y,f=e.y+e.height;if(i){let p=e.height/(o-a||1),m=e.width/(c-s||1);return{plot:e,view:t,horizontal:i,xToPx:n?e=>f-(e-a)*p:e=>d+(e-a)*p,yToPx:r?e=>u-(e-s)*m:e=>l+(e-s)*m,pxToX:n?e=>a+(f-e)/p:e=>a+(e-d)/p,pxToY:r?e=>s+(u-e)/m:e=>s+(e-l)/m,xPerPx:1/p,yPerPx:1/m}}let p=e.width/(o-a||1),m=e.height/(c-s||1);return{plot:e,view:t,horizontal:i,xToPx:n?e=>u-(e-a)*p:e=>l+(e-a)*p,yToPx:r?e=>d+(e-s)*m:e=>f-(e-s)*m,pxToX:n?e=>a+(u-e)/p:e=>a+(e-l)/p,pxToY:r?e=>s+(e-d)/m:e=>s+(f-e)/m,xPerPx:1/p,yPerPx:1/m}},t=(e,t,n)=>e.horizontal?{x:e.yToPx(n),y:e.xToPx(t)}:{x:e.xToPx(t),y:e.yToPx(n)},n=(e,t,n)=>e.horizontal?{x:e.pxToX(n),y:e.pxToY(t)}:{x:e.pxToX(t),y:e.pxToY(n)},r=(e,t,n)=>e.horizontal?n:t,i=(e,t,n)=>e.horizontal?t:n,a=(e,t,n,r,i)=>{let a=Math.min(t,n),o=Math.max(t,n),s=Math.min(r,i),c=Math.max(r,i);return e.horizontal?{x:s,y:a,width:c-s,height:o-a}:{x:a,y:s,width:o-a,height:c-s}},o=(e,t,n)=>{let r=Math.min(Math.abs(e),Math.abs(t));return r>=4?{inset:Math.round(Math.min(1,.5+r/96)*4)/4,radius:Math.round(Math.max(0,Math.min(n,r*.2))*4)/4}:{inset:0,radius:0}},s=e=>{let{width:t,height:n,padding:r,fontSize:i}=e,a=Math.ceil(i*1.4),o=r.left+(e.yLabelWidth>0?e.yLabelWidth+8:0)+(e.yTitle?a+6:0),s=r.bottom+(e.xAxisVisible?a+8:0)+(e.xTitle?a+4:0),c=r.top,l=e.y2LabelWidth??0,u=l>0||e.y2Title?Math.max(4,r.left)+(l>0?l+8:0)+(e.y2Title?a+6:0):r.right;return{x:Math.round(o),y:Math.round(c),width:Math.max(10,Math.round(t-o-u)),height:Math.max(10,Math.round(n-c-s))}};exports.alongX=r,exports.alongY=i,exports.computePlot=s,exports.createScales=e,exports.heatCellStyle=o,exports.screenRect=a,exports.toData=n,exports.toScreen=t;
2
2
  //# sourceMappingURL=layout.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.cjs","names":["createScales","x0","x1","view","y0","y1","left","plot","right","top","bottom","horizontal","xs","ys","reverseX","v","reverseY","p","toScreen","s","y","x","toData","py","px","alongX","alongY","screenRect","xa","xb","b","c","ya","yb","d","computePlot","input","line","fontSize","padding","y2Width","width","height"],"sources":["../../../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Data <-> pixel mappings of a plot. `xToPx` / `yToPx` give the pixel along\n * the axis showing that data axis: the screen x / y of vertical charts, the\n * screen y / x of horizontal ones (use `toScreen` / `toData` for points).\n */\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n /** The x axis runs down the left side, the values along the bottom */\n horizontal: boolean;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n horizontal = false,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n if (horizontal) {\n // x from top to bottom, y from left to right\n const xs = plot.height / (x1 - x0 || 1);\n const ys = plot.width / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => bottom - (v - x0) * xs\n : (v) => top + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => right - (v - y0) * ys\n : (v) => left + (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (bottom - p) / xs\n : (p) => x0 + (p - top) / xs,\n pxToY: reverseY\n ? (p) => y0 + (right - p) / ys\n : (p) => y0 + (p - left) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n }\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\n/** Screen pixel of a data point */\nexport const toScreen = (\n s: Scales,\n x: number,\n y: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.yToPx(y), y: s.xToPx(x) }\n : { x: s.xToPx(x), y: s.yToPx(y) };\n\n/** Data point under a screen pixel */\nexport const toData = (\n s: Scales,\n px: number,\n py: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.pxToX(py), y: s.pxToY(px) }\n : { x: s.pxToX(px), y: s.pxToY(py) };\n\n/** Coordinate of a screen pixel along the x axis (`xToPx` space) */\nexport const alongX = (s: Scales, px: number, py: number) =>\n s.horizontal ? py : px;\n\n/** Coordinate of a screen pixel along the value axis (`yToPx` space) */\nexport const alongY = (s: Scales, px: number, py: number) =>\n s.horizontal ? px : py;\n\n/**\n * Screen rectangle between two pixels along x (`xa`, `xb`) and two along\n * y (`ya`, `yb`)\n */\nexport const screenRect = (\n s: Scales,\n xa: number,\n xb: number,\n ya: number,\n yb: number,\n): Rect => {\n const a = Math.min(xa, xb);\n const b = Math.max(xa, xb);\n const c = Math.min(ya, yb);\n const d = Math.max(ya, yb);\n return s.horizontal\n ? { x: c, y: a, width: d - c, height: b - a }\n : { x: a, y: c, width: b - a, height: d - c };\n};\n\n/** Length in pixels of the x axis (plot width, height when horizontal) */\nexport const xLength = (s: Scales) =>\n s.horizontal ? s.plot.height : s.plot.width;\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest tick label of the left axis (0 when the axis is hidden) */\n yLabelWidth: number;\n /** Width of the widest tick label of the right axis (0 without one) */\n y2LabelWidth?: number;\n /** The right axis has a title */\n y2Title?: boolean;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const y2Width = input.y2LabelWidth ?? 0;\n const right =\n y2Width > 0 || input.y2Title\n ? Math.max(4, padding.left) +\n (y2Width > 0 ? y2Width + 8 : 0) +\n (input.y2Title ? line + 6 : 0)\n : padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"layout.cjs","names":["createScales","x0","x1","view","y0","y1","left","plot","right","top","bottom","horizontal","xs","ys","reverseX","v","reverseY","p","toScreen","s","y","x","toData","py","px","alongX","alongY","screenRect","xa","xb","b","c","ya","yb","d","heatCellStyle","size","width","height","radius","computePlot","input","line","fontSize","padding","y2Width"],"sources":["../../../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Data <-> pixel mappings of a plot. `xToPx` / `yToPx` give the pixel along\n * the axis showing that data axis: the screen x / y of vertical charts, the\n * screen y / x of horizontal ones (use `toScreen` / `toData` for points).\n */\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n /** The x axis runs down the left side, the values along the bottom */\n horizontal: boolean;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n horizontal = false,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n if (horizontal) {\n // x from top to bottom, y from left to right\n const xs = plot.height / (x1 - x0 || 1);\n const ys = plot.width / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => bottom - (v - x0) * xs\n : (v) => top + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => right - (v - y0) * ys\n : (v) => left + (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (bottom - p) / xs\n : (p) => x0 + (p - top) / xs,\n pxToY: reverseY\n ? (p) => y0 + (right - p) / ys\n : (p) => y0 + (p - left) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n }\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\n/** Screen pixel of a data point */\nexport const toScreen = (\n s: Scales,\n x: number,\n y: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.yToPx(y), y: s.xToPx(x) }\n : { x: s.xToPx(x), y: s.yToPx(y) };\n\n/** Data point under a screen pixel */\nexport const toData = (\n s: Scales,\n px: number,\n py: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.pxToX(py), y: s.pxToY(px) }\n : { x: s.pxToX(px), y: s.pxToY(py) };\n\n/** Coordinate of a screen pixel along the x axis (`xToPx` space) */\nexport const alongX = (s: Scales, px: number, py: number) =>\n s.horizontal ? py : px;\n\n/** Coordinate of a screen pixel along the value axis (`yToPx` space) */\nexport const alongY = (s: Scales, px: number, py: number) =>\n s.horizontal ? px : py;\n\n/**\n * Screen rectangle between two pixels along x (`xa`, `xb`) and two along\n * y (`ya`, `yb`)\n */\nexport const screenRect = (\n s: Scales,\n xa: number,\n xb: number,\n ya: number,\n yb: number,\n): Rect => {\n const a = Math.min(xa, xb);\n const b = Math.max(xa, xb);\n const c = Math.min(ya, yb);\n const d = Math.max(ya, yb);\n return s.horizontal\n ? { x: c, y: a, width: d - c, height: b - a }\n : { x: a, y: c, width: b - a, height: d - c };\n};\n\n/** Length in pixels of the x axis (plot width, height when horizontal) */\nexport const xLength = (s: Scales) =>\n s.horizontal ? s.plot.height : s.plot.width;\n\n/**\n * Inset (per side) and corner radius of heatmap cells of `width` ×\n * `height` CSS pixels: a hairline apart (1px, 2px on large cells), corners\n * of `radius` at most 20% of the cell; tiny cells touch\n */\nexport const heatCellStyle = (\n width: number,\n height: number,\n radius: number,\n): { inset: number; radius: number } => {\n const size = Math.min(Math.abs(width), Math.abs(height));\n if (!(size >= 4)) return { inset: 0, radius: 0 };\n return {\n inset: Math.round(Math.min(1, 0.5 + size / 96) * 4) / 4,\n radius: Math.round(Math.max(0, Math.min(radius, size * 0.2)) * 4) / 4,\n };\n};\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest tick label of the left axis (0 when the axis is hidden) */\n yLabelWidth: number;\n /** Width of the widest tick label of the right axis (0 without one) */\n y2LabelWidth?: number;\n /** The right axis has a title */\n y2Title?: boolean;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const y2Width = input.y2LabelWidth ?? 0;\n const right =\n y2Width > 0 || input.y2Title\n ? Math.max(4, padding.left) +\n (y2Width > 0 ? y2Width + 8 : 0) +\n (input.y2Title ? line + 6 : 0)\n : padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":"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"}
@@ -52,7 +52,16 @@ var e = (e, t, n, r, i = !1) => {
52
52
  width: o - a,
53
53
  height: c - s
54
54
  };
55
- }, o = (e) => {
55
+ }, o = (e, t, n) => {
56
+ let r = Math.min(Math.abs(e), Math.abs(t));
57
+ return r >= 4 ? {
58
+ inset: Math.round(Math.min(1, .5 + r / 96) * 4) / 4,
59
+ radius: Math.round(Math.max(0, Math.min(n, r * .2)) * 4) / 4
60
+ } : {
61
+ inset: 0,
62
+ radius: 0
63
+ };
64
+ }, s = (e) => {
56
65
  let { width: t, height: n, padding: r, fontSize: i } = e, a = Math.ceil(i * 1.4), o = r.left + (e.yLabelWidth > 0 ? e.yLabelWidth + 8 : 0) + (e.yTitle ? a + 6 : 0), s = r.bottom + (e.xAxisVisible ? a + 8 : 0) + (e.xTitle ? a + 4 : 0), c = r.top, l = e.y2LabelWidth ?? 0, u = l > 0 || e.y2Title ? Math.max(4, r.left) + (l > 0 ? l + 8 : 0) + (e.y2Title ? a + 6 : 0) : r.right;
57
66
  return {
58
67
  x: Math.round(o),
@@ -62,6 +71,6 @@ var e = (e, t, n, r, i = !1) => {
62
71
  };
63
72
  };
64
73
  //#endregion
65
- export { r as alongX, i as alongY, o as computePlot, e as createScales, a as screenRect, n as toData, t as toScreen };
74
+ export { r as alongX, i as alongY, s as computePlot, e as createScales, o as heatCellStyle, a as screenRect, n as toData, t as toScreen };
66
75
 
67
76
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":["createScales","x0","x1","view","y0","y1","left","plot","right","top","bottom","horizontal","xs","ys","reverseX","v","reverseY","p","toScreen","s","y","x","toData","py","px","alongX","alongY","screenRect","xa","xb","b","c","ya","yb","d","computePlot","input","line","fontSize","padding","y2Width","width","height"],"sources":["../../../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Data <-> pixel mappings of a plot. `xToPx` / `yToPx` give the pixel along\n * the axis showing that data axis: the screen x / y of vertical charts, the\n * screen y / x of horizontal ones (use `toScreen` / `toData` for points).\n */\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n /** The x axis runs down the left side, the values along the bottom */\n horizontal: boolean;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n horizontal = false,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n if (horizontal) {\n // x from top to bottom, y from left to right\n const xs = plot.height / (x1 - x0 || 1);\n const ys = plot.width / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => bottom - (v - x0) * xs\n : (v) => top + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => right - (v - y0) * ys\n : (v) => left + (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (bottom - p) / xs\n : (p) => x0 + (p - top) / xs,\n pxToY: reverseY\n ? (p) => y0 + (right - p) / ys\n : (p) => y0 + (p - left) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n }\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\n/** Screen pixel of a data point */\nexport const toScreen = (\n s: Scales,\n x: number,\n y: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.yToPx(y), y: s.xToPx(x) }\n : { x: s.xToPx(x), y: s.yToPx(y) };\n\n/** Data point under a screen pixel */\nexport const toData = (\n s: Scales,\n px: number,\n py: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.pxToX(py), y: s.pxToY(px) }\n : { x: s.pxToX(px), y: s.pxToY(py) };\n\n/** Coordinate of a screen pixel along the x axis (`xToPx` space) */\nexport const alongX = (s: Scales, px: number, py: number) =>\n s.horizontal ? py : px;\n\n/** Coordinate of a screen pixel along the value axis (`yToPx` space) */\nexport const alongY = (s: Scales, px: number, py: number) =>\n s.horizontal ? px : py;\n\n/**\n * Screen rectangle between two pixels along x (`xa`, `xb`) and two along\n * y (`ya`, `yb`)\n */\nexport const screenRect = (\n s: Scales,\n xa: number,\n xb: number,\n ya: number,\n yb: number,\n): Rect => {\n const a = Math.min(xa, xb);\n const b = Math.max(xa, xb);\n const c = Math.min(ya, yb);\n const d = Math.max(ya, yb);\n return s.horizontal\n ? { x: c, y: a, width: d - c, height: b - a }\n : { x: a, y: c, width: b - a, height: d - c };\n};\n\n/** Length in pixels of the x axis (plot width, height when horizontal) */\nexport const xLength = (s: Scales) =>\n s.horizontal ? s.plot.height : s.plot.width;\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest tick label of the left axis (0 when the axis is hidden) */\n yLabelWidth: number;\n /** Width of the widest tick label of the right axis (0 without one) */\n y2LabelWidth?: number;\n /** The right axis has a title */\n y2Title?: boolean;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const y2Width = input.y2LabelWidth ?? 0;\n const right =\n y2Width > 0 || input.y2Title\n ? Math.max(4, padding.left) +\n (y2Width > 0 ? y2Width + 8 : 0) +\n (input.y2Title ? line + 6 : 0)\n : padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","names":["createScales","x0","x1","view","y0","y1","left","plot","right","top","bottom","horizontal","xs","ys","reverseX","v","reverseY","p","toScreen","s","y","x","toData","py","px","alongX","alongY","screenRect","xa","xb","b","c","ya","yb","d","heatCellStyle","size","width","height","radius","computePlot","input","line","fontSize","padding","y2Width"],"sources":["../../../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Data <-> pixel mappings of a plot. `xToPx` / `yToPx` give the pixel along\n * the axis showing that data axis: the screen x / y of vertical charts, the\n * screen y / x of horizontal ones (use `toScreen` / `toData` for points).\n */\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n /** The x axis runs down the left side, the values along the bottom */\n horizontal: boolean;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n horizontal = false,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n if (horizontal) {\n // x from top to bottom, y from left to right\n const xs = plot.height / (x1 - x0 || 1);\n const ys = plot.width / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => bottom - (v - x0) * xs\n : (v) => top + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => right - (v - y0) * ys\n : (v) => left + (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (bottom - p) / xs\n : (p) => x0 + (p - top) / xs,\n pxToY: reverseY\n ? (p) => y0 + (right - p) / ys\n : (p) => y0 + (p - left) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n }\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n return {\n plot,\n view,\n horizontal,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\n/** Screen pixel of a data point */\nexport const toScreen = (\n s: Scales,\n x: number,\n y: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.yToPx(y), y: s.xToPx(x) }\n : { x: s.xToPx(x), y: s.yToPx(y) };\n\n/** Data point under a screen pixel */\nexport const toData = (\n s: Scales,\n px: number,\n py: number,\n): { x: number; y: number } =>\n s.horizontal\n ? { x: s.pxToX(py), y: s.pxToY(px) }\n : { x: s.pxToX(px), y: s.pxToY(py) };\n\n/** Coordinate of a screen pixel along the x axis (`xToPx` space) */\nexport const alongX = (s: Scales, px: number, py: number) =>\n s.horizontal ? py : px;\n\n/** Coordinate of a screen pixel along the value axis (`yToPx` space) */\nexport const alongY = (s: Scales, px: number, py: number) =>\n s.horizontal ? px : py;\n\n/**\n * Screen rectangle between two pixels along x (`xa`, `xb`) and two along\n * y (`ya`, `yb`)\n */\nexport const screenRect = (\n s: Scales,\n xa: number,\n xb: number,\n ya: number,\n yb: number,\n): Rect => {\n const a = Math.min(xa, xb);\n const b = Math.max(xa, xb);\n const c = Math.min(ya, yb);\n const d = Math.max(ya, yb);\n return s.horizontal\n ? { x: c, y: a, width: d - c, height: b - a }\n : { x: a, y: c, width: b - a, height: d - c };\n};\n\n/** Length in pixels of the x axis (plot width, height when horizontal) */\nexport const xLength = (s: Scales) =>\n s.horizontal ? s.plot.height : s.plot.width;\n\n/**\n * Inset (per side) and corner radius of heatmap cells of `width` ×\n * `height` CSS pixels: a hairline apart (1px, 2px on large cells), corners\n * of `radius` at most 20% of the cell; tiny cells touch\n */\nexport const heatCellStyle = (\n width: number,\n height: number,\n radius: number,\n): { inset: number; radius: number } => {\n const size = Math.min(Math.abs(width), Math.abs(height));\n if (!(size >= 4)) return { inset: 0, radius: 0 };\n return {\n inset: Math.round(Math.min(1, 0.5 + size / 96) * 4) / 4,\n radius: Math.round(Math.max(0, Math.min(radius, size * 0.2)) * 4) / 4,\n };\n};\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest tick label of the left axis (0 when the axis is hidden) */\n yLabelWidth: number;\n /** Width of the widest tick label of the right axis (0 without one) */\n y2LabelWidth?: number;\n /** The right axis has a title */\n y2Title?: boolean;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const y2Width = input.y2LabelWidth ?? 0;\n const right =\n y2Width > 0 || input.y2Title\n ? Math.max(4, padding.left) +\n (y2Width > 0 ? y2Width + 8 : 0) +\n (input.y2Title ? line + 6 : 0)\n : padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("./color.cjs"),t=require("./data.cjs"),n=require("./locale.cjs"),r=require("./scale.cjs"),i=require("./format.cjs"),a=require("./labels.cjs"),o=require("./spatial.cjs");var s=e=>{if(typeof e==`object`&&e&&!(`length`in e)){let t=e.x;return t&&t.length?t[0]:void 0}let t=e;for(let e=0;e<Math.min(t.length,8);e++){let n=t[e];if(Array.isArray(n))return n[0];if(n&&typeof n==`object`)return n.x}},c=e=>{for(let t of e){let e=s(t);if(e instanceof Date)return`time`;if(typeof e==`string`)return`category`}return`linear`},l=(e,t,n,r,i)=>({type:t,reverse:!!e?.reverse,categories:n,title:e?.title,format:e?.format,grid:e?.grid??r,visible:e?.visible??!0,tickCount:e?.tickCount,locale:i,timeZone:e?.timeZone??`local`}),u=e=>{let t={};if(!e)return t;for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t},d=e=>{let t=1/0,n=-1/0;for(let r=0;r<e.length;r++){let i=e[r];Number.isFinite(i)&&(i<t&&(t=i),i>n&&(n=i))}return[t,n]},f=(e,t)=>{let n=1/0;return e.forEach((e,r)=>{let i=t[r]?e:Float64Array.from(e).sort();for(let e=1;e<i.length;e++){let t=i[e]-i[e-1];t>0&&t<n&&(n=t)}}),n},p=(e,t,n)=>{if(n)return 1;let r=f(e.map(e=>t===`x`?e.cols.x:e.cols.y),e.map(e=>t===`x`&&e.cols.sorted));return Number.isFinite(r)?r:1},m=(e,t)=>{let n=new Map;if(t)for(let{s:t,stack:r}of e){let e=n.get(r);e||n.set(r,e=new Map);let{x:i,y:a,count:o}=t.cols;for(let t=0;t<o;t++){let n=a[t];if(!Number.isFinite(n))continue;let r=e.get(i[t])??[0,0];n>=0?r[0]+=n:r[1]-=n,e.set(i[t],r)}}let r=new Map,i=new Map;for(let{stack:t}of e)i.set(t,(i.get(t)??0)+1);return e.map(({s:e,stack:a})=>{let{x:o,y:s,count:c}=e.cols;if(!t&&i.get(a)===1){let e=new Float64Array(c),t=new Float64Array(c);for(let n=0;n<c;n++){let r=s[n],i=Number.isFinite(r);e[n]=i?0:NaN,t[n]=i?r:NaN}return{base:e,top:t}}let l=r.get(a);l||r.set(a,l=new Map);let u=n.get(a),d=new Float64Array(c),f=new Float64Array(c);for(let e=0;e<c;e++){let t=s[e];if(!Number.isFinite(t)){d[e]=NaN,f[e]=NaN;continue}if(u){let n=u.get(o[e]),r=n?t>=0?n[0]:n[1]:0;t=r>0?t/r*100:0}let n=l.get(o[e])??[0,0],r=t>=0?n[0]:n[1];d[e]=r,f[e]=r+t,t>=0?n[0]+=t:n[1]+=t,l.set(o[e],n)}return{base:d,top:f}})},ee=`var(--success-color, #16a34a)`,te=`var(--danger-color, #dc2626)`,h=e=>{for(let t of e){if(typeof t!=`object`||!t||!(`length`in t))continue;let e=t;for(let t=0;t<Math.min(e.length,8);t++){let n=e[t];if(n&&typeof n==`object`&&!Array.isArray(n)){let e=n;if(e.y instanceof Date||e.y0 instanceof Date)return!0}}}return!1},g=e=>Number(e.toPrecision(12)),_=e=>{let t=10**Math.floor(Math.log10(e)+1e-9),n=e/t;return(n<1.5?2:n<3.5?5:10)*t},v=(e,t,n,i)=>{let[a,o]=n,s=r.tickStep(a,o,i),c=s>0?Math.round((o-a)/s):0;if([e,t]=r.ensureSpan(e,t),c<1||Math.abs(c*s-(o-a))>s*1e-6)return r.niceDomain(e,t,i);let l=r.tickStep(e,t,c);for(let n=0;n<40&&l>0;n++){let n=Math.floor(e/l+1e-9)*l;if(n+c*l>=t-l*1e-9)return[g(n),g(n+c*l)];l=_(l)}return r.niceDomain(e,t,i)},y=new WeakMap,ne=(e,t)=>{let n=`${t.scale},${t.offset}`,r=y.get(e);if(r&&r.key===n)return r.cols;let i=e=>e*t.scale+t.offset,a=e=>e?e.map(i):null,o=i(e.yMin),s=i(e.yMax),c={...e,y:e.y.map(i),open:a(e.open),high:a(e.high),low:a(e.low),y0:a(e.y0),q1:a(e.q1),q3:a(e.q3),outliers:e.outliers?e.outliers.map(e=>e?.map(i)):null,yMin:Math.min(o,s),yMax:Math.max(o,s)};return y.set(e,{key:n,cols:c}),c},b=(o,s,f,g,_=null)=>{let y=_??s.resolve??((t,n)=>e.resolveStaticColor(t,{},n)),b=o.series,x=n.resolveLocale(o.locale),S=typeof o.tooltip==`object`?o.tooltip:void 0,C=a.chartLabels(x,{...u(S?.labels),...u(o.labels)}),w=b.map(e=>e.data),T=o.xAxis?.type??c(w),E=T===`category`?[...o.xAxis?.categories??t.collectCategories(w)]:[],re=new Map(E.map((e,t)=>[e,t])),ie=t.xResolver(T,e=>re.get(e)??NaN),D=o.yAxis,ae=b.filter(e=>e.type===`heatmap`).map(e=>e.data),O=D?.type===`category`||!D?.type&&ae.length?[...D?.categories??t.collectYCategories(ae)]:[],k=D?.type===`category`||O.length?`category`:D?.type===`time`||!D?.type&&h(w)?`time`:`linear`,oe=new Map(O.map((e,t)=>[e,t])),se=e=>typeof e==`number`?e:typeof e==`string`?k===`category`?oe.get(e)??NaN:k===`time`?Date.parse(e):Number(e):e instanceof Date?e.getTime():NaN,A=`${T}|${E.join(``)}|${k}|${O.join(``)}`,j=o.stackMode===`percent`,M=o.orientation===`horizontal`,N=new Set,P=b.map((n,r)=>{let i=n.id??`#${r}`;for(;N.has(i);)i+=`'`;N.add(i);let a=g.get(i);(!a||a.data!==n.data||a.resolverKey!==A)&&(a={data:n.data,resolverKey:A,cols:t.normalizeData(n.data,ie,se)},g.set(i,a));let o=n.type??`line`,c=s.palette[r%s.palette.length],l=n.color?y(n.color,c):c,u=a.cols,d=null;if((o===`scatter`||o===`bar`||o===`boxplot`)&&u.colors){let e=new Map;d=u.colors.map(t=>{if(t===void 0)return;let n=e.get(t);return n||e.set(t,n=y(t,l)),n})}let p=[],m=[0,1],h=null;if(o===`heatmap`){p=n.colorScale&&n.colorScale.length?n.colorScale.map(e=>y(e,l)):[e.mix(s.background,l,.08),l],m=n.valueRange?[n.valueRange[0],n.valueRange[1]]:[u.valueMin,u.valueMax],Number.isFinite(m[0])||(m=[0,1]);let t=u.value??u.y,[r,i]=m,a=i-r||1;h=new Uint32Array(u.count);for(let n=0;n<u.count;n++){let i=t[n];Number.isFinite(i)&&Number.isFinite(u.y[n])&&(h[n]=e.packColor(e.rampColor(p,(i-r)/a)))}}let _=n.id??String(r);return{index:r,key:i,id:_,name:n.name??`${C.series} ${r+1}`,type:o,color:l,colorCss:e.toCss(l),lineWidth:n.lineWidth??(o===`candlestick`?1:o===`boxplot`?1.5:2),pointSize:n.pointSize??(o===`boxplot`?6:8),opacity:n.opacity??(o===`area`?.28:o===`scatter`?.78:o===`boxplot`?.22:1),hidden:!!n.hidden||f.has(_),showLabels:!!n.showLabels,curve:n.curve??`linear`,cols:u,raw:u,yAxis:n.yAxis===`right`&&!M?`right`:`left`,floating:o===`bar`&&!!u.y0,barOffset:0,barHalfWidth:0,barBase:null,barTop:null,stackBase:null,stackTop:null,pointColors:d,upColor:o===`candlestick`?y(n.upColor??ee,[.09,.64,.29,1]):l,downColor:o===`candlestick`?y(n.downColor??te,[.86,.15,.15,1]):l,cellColors:h,cellHalf:{x:.5,y:.5},colorScale:p,valueRange:m,radius:n.radius??(o===`heatmap`?2:o===`boxplot`?0:3),format:n.format,valueName:n.valueName}}),F=P.filter(e=>!e.hidden),I=P.length>0&&P.every(e=>e.type===`scatter`||e.type===`heatmap`),L=F.filter(e=>e.type===`bar`||e.type===`boxplot`),R=F.filter(e=>e.type===`bar`),z=p(L,`x`,T===`category`);if(L.length){let e=new Map,t=e=>b[e.index].stack??`\u0000${e.key}`;for(let n of L)e.has(t(n))||e.set(t(n),e.size);let n=0;for(let e of L){let t=b[e.index].barWidth;t!==void 0&&t>n&&(n=Math.min(1,t))}let r=z*(n||(e.size>1?.78:.62)),i=r/e.size;for(let n of L){let a=e.get(t(n))??0;n.barOffset=-r/2+i*(a+.5),n.barHalfWidth=i/2*(e.size>1?.86:1)}let a=R.filter(e=>!e.floating),o=m(a.map(e=>({s:e,stack:t(e)})),!1),s=j?m(a.filter(e=>b[e.index].stack!==void 0).map(e=>({s:e,stack:t(e)})),!0):[],c=0;a.forEach((e,t)=>{let n=j&&b[e.index].stack!==void 0?s[c++]:o[t];e.barBase=n.base,e.barTop=n.top});for(let e of R){let{y:t,y0:n,count:r}=e.cols;if(!e.floating||!n)continue;let i=new Float64Array(r),a=new Float64Array(r);for(let e=0;e<r;e++){let r=Number.isFinite(t[e]);i[e]=r?Number.isFinite(n[e])?n[e]:0:NaN,a[e]=r?t[e]:NaN}e.barBase=i,e.barTop=a}}for(let e of F)e.type===`area`&&e.cols.y0&&b[e.index].stack===void 0&&(e.stackBase=e.cols.y0);let B=F.filter(e=>(e.type===`line`||e.type===`area`)&&b[e.index].stack!==void 0);if(B.length){let e=m(B.map(e=>({s:e,stack:b[e.index].stack??``})),j);B.forEach((t,n)=>{t.stackBase=e[n].base,t.stackTop=e[n].top})}let V=F.filter(e=>e.type===`candlestick`),H=p(V,`x`,T===`category`);for(let e of V)e.barHalfWidth=H*.3;let U=F.filter(e=>e.type===`heatmap`);if(U.length){let e=p(U,`x`,T===`category`)/2,t=p(U,`y`,k===`category`)/2;for(let n of U)n.cellHalf={x:e,y:t}}let W=o.xAxis,G;if(T===`category`)G=[-.5,Math.max(1,E.length)-.5];else{let e=[];for(let t of F){e.push(t.cols.xMin,t.cols.xMax);let n=t.type===`bar`||t.type===`boxplot`?z/2:t.type===`candlestick`?H/2:t.type===`heatmap`?t.cellHalf.x:0;n&&e.push(t.cols.xMin-n,t.cols.xMax+n)}G=r.ensureSpan(...d(e),T===`time`?[Date.now()-864e5,Date.now()]:[0,1]);let t=P.every(e=>e.type===`scatter`);if(t){let e=(G[1]-G[0])*.04;G=[G[0]-e,G[1]+e]}(W?.nice??(t&&T===`linear`))&&T===`linear`&&(G=r.niceDomain(G[0],G[1],W?.tickCount??6))}W?.min!==void 0&&(G[0]=W.min),W?.max!==void 0&&(G[1]=W.max),G=r.ensureSpan(G[0],G[1]);let K=(e,t)=>{let n=[];for(let t of e)t.type===`bar`&&t.barBase&&t.barTop?n.push(...d(t.barBase),...d(t.barTop)):t.stackBase&&t.stackTop?n.push(...d(t.stackBase),...d(t.stackTop)):t.type===`heatmap`?n.push(t.cols.yMin-t.cellHalf.y,t.cols.yMax+t.cellHalf.y):n.push(t.cols.yMin,t.cols.yMax);let r=e.filter(e=>e.type===`bar`);if((r.some(e=>!e.floating)||t)&&n.push(0),r.some(e=>e.showLabels)){let[e,t]=d(n);t>0&&n.push(t+(t-Math.min(0,e))*.1),e<0&&n.push(e-(Math.max(0,t)-e)*.1)}return n},q=F.filter(e=>e.yAxis===`left`),J=q.length?q:F,Y=J.filter(e=>e.type===`bar`),X;if(k===`category`)X=[-.5,Math.max(1,O.length)-.5];else{let e=K(J,D?.zero),t=Y.length>0||J.some(e=>e.type===`area`);if(X=r.ensureSpan(...d(e)),P.every(e=>e.type===`scatter`)){let e=(X[1]-X[0])*.06;X=[X[0]-e,X[1]+e]}else if((V.length||J.some(e=>e.type===`boxplot`))&&!Y.length){let e=(X[1]-X[0])*.04;X=[X[0]-e,X[1]+e]}(D?.nice??!U.length)&&k===`linear`&&(X=r.niceDomain(X[0],X[1],D?.tickCount??5)),j&&(R.length||B.length)&&(X=[d(e)[0]<0?-100:0,100]),t&&!D?.zero&&X[0]<0&&d(e)[0]>=0&&(X[0]=0)}D?.min!==void 0&&(X[0]=D.min),D?.max!==void 0&&(X[1]=D.max),X=r.ensureSpan(X[0],X[1]);let Z=o.yAxis2,ce=null,le=null,Q=P.filter(e=>e.yAxis===`right`);if(Q.length&&k!==`category`){let e=K(Q.filter(e=>!e.hidden),Z?.zero),[t,n]=r.ensureSpan(...d(e)),i=Z?.nice===!1?[t,n]:v(t,n,X,D?.tickCount??5);Z?.min!==void 0&&(i[0]=Z.min),Z?.max!==void 0&&(i[1]=Z.max),i=r.ensureSpan(i[0],i[1]);let a=(X[1]-X[0])/(i[1]-i[0]),o={scale:a,offset:X[0]-i[0]*a};le=o;let s=e=>e*o.scale+o.offset,c=e=>e?e.map(s):null,u=s(Math.min(Math.max(0,i[0]),i[1]));for(let e of Q){let t=e.stackBase;e.cols=ne(e.raw,o),e.barBase=c(e.barBase),e.barTop=c(e.barTop),e.stackTop=c(e.stackTop),e.stackBase=t&&t===e.raw.y0?e.cols.y0:t?c(t):e.type===`area`?new Float64Array(e.cols.count).fill(u):null}ce=l(Z,`linear`,[],!1,x)}let $=o.interaction===!1?!1:o.interaction===!0||o.interaction===void 0?!0:o.interaction.zoom??!0,ue=$===!1?{x:!1,y:!1}:$===!0?{x:!0,y:I}:{x:$.includes(`x`),y:$.includes(`y`)},de=D?.format??(j&&(R.length||B.length)?e=>i.formatPercent(e,x):void 0);return{series:P,x:l(W,T,E,!1,x),y:{...l(D,k,O,k!==`category`,x),format:de},y2:ce,y2Map:le,horizontal:M,locale:x,labels:C,formatValue:i.valueFormatter(x),base:{x:G,y:X},allScatter:I,zoom:ue,tooltipMode:S?.mode??(I?`nearest`:`axis`),baseline:Math.min(Math.max(0,X[0]),X[1]),minSpan:{x:T===`category`?1:(G[1]-G[0])*1e-7,y:k===`category`?1:(X[1]-X[0])*1e-7},percent:j,stacks:b.map(e=>e.stack!==void 0&&(e.type===`bar`||e.type===`line`||e.type===`area`||!e.type)?`${e.type===`bar`?`bar`:`line`}:${e.stack}`:null)}},x=(e,t)=>e.barTop?e.barTop[t]:e.stackTop?e.stackTop[t]:e.cols.y[t],S=new WeakMap,C=e=>{let t=S.get(e.cols);return t||(t=new o.GridIndex(e.cols.x,e.cols.y,e.cols.count),S.set(e.cols,t)),t};exports.alignedDomain=v,exports.buildModel=b,exports.detectXType=c,exports.gridOf=C,exports.plottedY=x;
1
+ const e=require("./color.cjs"),t=require("./data.cjs"),n=require("./locale.cjs"),r=require("./scale.cjs"),i=require("./format.cjs"),a=require("./labels.cjs"),o=require("./spatial.cjs");var s={scale:1,offset:0,log:!0},c=e=>{if(typeof e==`object`&&e&&!(`length`in e)){let t=e.x;return t&&t.length?t[0]:void 0}let t=e;for(let e=0;e<Math.min(t.length,8);e++){let n=t[e];if(Array.isArray(n))return n[0];if(n&&typeof n==`object`)return n.x}},l=e=>{for(let t of e){let e=c(t);if(e instanceof Date)return`time`;if(typeof e==`string`)return`category`}return`linear`},u=(e,t,n,r,i)=>({type:t,reverse:!!e?.reverse,categories:n,title:e?.title,format:e?.format,grid:e?.grid??r,visible:e?.visible??!0,tickCount:e?.tickCount,locale:i,timeZone:e?.timeZone??`local`}),d=e=>{let t={};if(!e)return t;for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t},f=e=>{let t=1/0,n=-1/0;for(let r=0;r<e.length;r++){let i=e[r];Number.isFinite(i)&&(i<t&&(t=i),i>n&&(n=i))}return[t,n]},p=(e,t)=>{let n=1/0;return e.forEach((e,r)=>{let i=t[r]?e:Float64Array.from(e).sort();for(let e=1;e<i.length;e++){let t=i[e]-i[e-1];t>0&&t<n&&(n=t)}}),n},m=(e,t,n)=>{if(n)return 1;let r=p(e.map(e=>t===`x`?e.cols.x:e.cols.y),e.map(e=>t===`x`&&e.cols.sorted));return Number.isFinite(r)?r:1},h=(e,t)=>{let n=new Map;if(t)for(let{s:t,stack:r}of e){let e=n.get(r);e||n.set(r,e=new Map);let{x:i,y:a,count:o}=t.cols;for(let t=0;t<o;t++){let n=a[t];if(!Number.isFinite(n))continue;let r=e.get(i[t])??[0,0];n>=0?r[0]+=n:r[1]-=n,e.set(i[t],r)}}let r=new Map,i=new Map;for(let{stack:t}of e)i.set(t,(i.get(t)??0)+1);return e.map(({s:e,stack:a})=>{let{x:o,y:s,count:c}=e.cols;if(!t&&i.get(a)===1){let e=new Float64Array(c),t=new Float64Array(c);for(let n=0;n<c;n++){let r=s[n],i=Number.isFinite(r);e[n]=i?0:NaN,t[n]=i?r:NaN}return{base:e,top:t}}let l=r.get(a);l||r.set(a,l=new Map);let u=n.get(a),d=new Float64Array(c),f=new Float64Array(c);for(let e=0;e<c;e++){let t=s[e];if(!Number.isFinite(t)){d[e]=NaN,f[e]=NaN;continue}if(u){let n=u.get(o[e]),r=n?t>=0?n[0]:n[1]:0;t=r>0?t/r*100:0}let n=l.get(o[e])??[0,0],r=t>=0?n[0]:n[1];d[e]=r,f[e]=r+t,t>=0?n[0]+=t:n[1]+=t,l.set(o[e],n)}return{base:d,top:f}})},ee=`var(--success-color, #16a34a)`,g=`var(--danger-color, #dc2626)`,_=e=>{for(let t of e){if(typeof t!=`object`||!t||!(`length`in t))continue;let e=t;for(let t=0;t<Math.min(e.length,8);t++){let n=e[t];if(n&&typeof n==`object`&&!Array.isArray(n)){let e=n;if(e.y instanceof Date||e.y0 instanceof Date)return!0}}}return!1},v=e=>Number(e.toPrecision(12)),y=e=>{let t=10**Math.floor(Math.log10(e)+1e-9),n=e/t;return(n<1.5?2:n<3.5?5:10)*t},b=(e,t,n,i)=>{let[a,o]=n,s=r.tickStep(a,o,i),c=s>0?Math.round((o-a)/s):0;if([e,t]=r.ensureSpan(e,t),c<1||Math.abs(c*s-(o-a))>s*1e-6)return r.niceDomain(e,t,i);let l=r.tickStep(e,t,c);for(let n=0;n<40&&l>0;n++){let n=Math.floor(e/l+1e-9)*l;if(n+c*l>=t-l*1e-9)return[v(n),v(n+c*l)];l=y(l)}return r.niceDomain(e,t,i)},x=new WeakMap,S=(e,t)=>{let n=`${t.scale},${t.offset},${!!t.log}`,r=x.get(e);if(r&&r.key===n)return r.cols;let i=C(t),a=e=>e?e.map(i):null,o={...e,y:e.y.map(i),open:a(e.open),high:a(e.high),low:a(e.low),y0:a(e.y0),q1:a(e.q1),q3:a(e.q3),outliers:e.outliers?e.outliers.map(e=>e?.map(i)):null};if(t.log){let e=[1/0,-1/0],t=t=>{if(t)for(let n=0;n<t.length;n++){let r=t[n];Number.isFinite(r)&&(r<e[0]&&(e[0]=r),r>e[1]&&(e[1]=r))}};for(let e of[o.y,o.y0,o.high,o.low,o.q1,o.q3])t(e);o.outliers?.forEach(e=>t(e)),o.yMin=e[0]<=e[1]?e[0]:NaN,o.yMax=e[0]<=e[1]?e[1]:NaN}else{let t=i(e.yMin),n=i(e.yMax);o.yMin=Math.min(t,n),o.yMax=Math.max(t,n)}return x.set(e,{key:n,cols:o}),o},te=e=>{let t=Math.floor(e[0]+1e-9),n=Math.ceil(e[1]-1e-9);return[t,n>t?n:t+1]},ne=(e,t,n=-1/0)=>{let r=C(t),i=e=>e?e.map(r):null,a=e.stackBase;e.cols=S(e.raw,t),e.barBase=e.barBase&&!e.floating?e.barBase.map(e=>e===0?t.log?-1/0:r(0):r(e)):i(e.barBase),e.barTop=i(e.barTop),e.stackTop=i(e.stackTop),e.stackBase=a&&a===e.raw.y0?e.cols.y0:a?i(a):e.type===`area`?new Float64Array(e.cols.count).fill(n):null},C=e=>t=>(e.log?Math.log10(t):t)*e.scale+e.offset,w=(e,t)=>e.y.type===`log`?Math.log10(t):t,T=(e,t)=>e.y.type===`log`?10**t:t,re=(e,t)=>{for(let n of[e.barBase,e.stackBase])if(n)for(let e=0;e<n.length;e++)n[e]===-1/0&&(n[e]=t)},ie=(e,t)=>{let[n,r]=e.valueRange,i=e.colorMidpoint,a;return a=i!==null&&i>n&&i<r?t<i?(t-n)/(i-n)*.5:.5+(t-i)/(r-i)*.5:(t-n)/(r-n||1),a<0?0:a>1?1:a},ae=(t,n,r,i)=>{let a=e.luminance(r.background)<.4;if(t===`diverging`){let t=e.mixOklab(r.surface,r.textMuted,a?.12:.08),o=t=>a?e.withLightness(t,.7,1.25):e.withLightness(t,.5,1.05),s=n=>e.mixOklab(t,o(n),.5);return[o(i),s(i),t,s(n),o(n)]}return a?[e.mixOklab(r.surface,n,.14),e.withLightness(n,.46,.95),e.withLightness(n,.64,1.2),e.withLightness(n,.8,1.15)]:[e.mixOklab(r.surface,n,.06),e.withLightness(n,.8,.6),e.withLightness(n,.58,1),e.withLightness(n,.36,.9)]},E=(o,c,p,v,y=null)=>{let x=y??c.resolve??((t,n)=>e.resolveStaticColor(t,{},n)),w=o.series,T=n.resolveLocale(o.locale),E=typeof o.tooltip==`object`?o.tooltip:void 0,D=a.chartLabels(T,{...d(E?.labels),...d(o.labels)}),O=w.map(e=>e.data),k=o.xAxis?.type??l(O),A=k===`category`?[...o.xAxis?.categories??t.collectCategories(O)]:[],oe=new Map(A.map((e,t)=>[e,t])),se=t.xResolver(k,e=>oe.get(e)??NaN),j=o.yAxis,ce=w.filter(e=>e.type===`heatmap`).map(e=>e.data),M=j?.type===`category`||!j?.type&&ce.length?[...j?.categories??t.collectYCategories(ce)]:[],N=j?.type===`category`||M.length?`category`:j?.type===`time`||!j?.type&&_(O)?`time`:j?.type===`log`?`log`:`linear`,P=N===`log`,le=new Map(M.map((e,t)=>[e,t])),ue=e=>typeof e==`number`?e:typeof e==`string`?N===`category`?le.get(e)??NaN:N===`time`?Date.parse(e):Number(e):e instanceof Date?e.getTime():NaN,F=`${k}|${A.join(``)}|${N}|${M.join(``)}`,I=o.stackMode===`percent`,L=o.orientation===`horizontal`,R=new Set,z=w.map((n,r)=>{let i=n.id??`#${r}`;for(;R.has(i);)i+=`'`;R.add(i);let a=v.get(i);(!a||a.data!==n.data||a.resolverKey!==F)&&(a={data:n.data,resolverKey:F,cols:t.normalizeData(n.data,se,ue)},v.set(i,a));let o=n.type??`line`,s=c.palette[r%c.palette.length],l=n.color?x(n.color,s):s,u=a.cols,d=null;if((o===`scatter`||o===`bar`||o===`boxplot`)&&u.colors){let e=new Map;d=u.colors.map(t=>{if(t===void 0)return;let n=e.get(t);return n||e.set(t,n=x(t,l)),n})}let f=[],m=[0,1],h=null,_=null,y=null;if(o===`heatmap`){let t=n.colorScale,r=t===`diverging`?`diverging`:`sequential`;f=typeof t==`object`&&t.length?t.map(e=>x(e,l)):ae(r,l,c,x(g,[.86,.15,.15,1])),m=n.valueRange?[n.valueRange[0],n.valueRange[1]]:[u.valueMin,u.valueMax],Number.isFinite(m[0])||(m=[0,1]);let[i,a]=m;_=n.colorMidpoint??(r===`diverging`&&typeof t!=`object`?i<0&&a>0?0:(i+a)/2:null);let o=e.oklabRamp(f);y=o;let s=u.value??u.y,d={valueRange:m,colorMidpoint:_};h=new Uint32Array(u.count);for(let e=0;e<u.count;e++){let t=s[e];Number.isFinite(t)&&Number.isFinite(u.y[e])&&(h[e]=o[Math.round(ie(d,t)*255)])}}let b=n.connector?typeof n.connector==`object`?n.connector:{}:null,S=n.id??String(r);return{index:r,key:i,id:S,name:n.name??`${D.series} ${r+1}`,type:o,color:l,colorCss:e.toCss(l),lineWidth:n.lineWidth??(o===`candlestick`?1:o===`boxplot`?1.5:2),pointSize:n.pointSize??(o===`boxplot`?6:8),opacity:n.opacity??(o===`area`?.28:o===`scatter`?.78:o===`boxplot`?.22:1),hidden:!!n.hidden||p.has(S),showLabels:!!n.showLabels,curve:n.curve??`linear`,cols:u,raw:u,yAxis:n.yAxis===`right`&&!L?`right`:`left`,floating:o===`bar`&&!!u.y0,barOffset:0,barHalfWidth:0,barBase:null,barTop:null,stackBase:null,stackTop:null,pointColors:d,upColor:o===`candlestick`?x(n.upColor??ee,[.09,.64,.29,1]):l,downColor:o===`candlestick`?x(n.downColor??g,[.86,.15,.15,1]):l,cellColors:h,cellHalf:{x:.5,y:.5},colorScale:f,valueRange:m,colorMidpoint:_,colorLut:y,tooltip:n.tooltip!==!1,outlierShape:n.outlierShape??`hollow`,outlierSize:n.outlierSize??n.pointSize??7,connector:b&&o===`bar`?{color:b.color?x(b.color,c.textMuted):c.textMuted,dash:[...b.dash??[3,3]],width:b.width??1}:null,radius:n.radius??(o===`heatmap`?2:o===`boxplot`?0:3),format:n.format,valueName:n.valueName}}),B=z.filter(e=>!e.hidden),V=z.length>0&&z.every(e=>e.type===`scatter`||e.type===`heatmap`),H=B.filter(e=>e.type===`bar`||e.type===`boxplot`),U=B.filter(e=>e.type===`bar`),de=m(H,`x`,k===`category`);if(H.length){let e=new Map,t=e=>w[e.index].stack??`\u0000${e.key}`;for(let n of H)e.has(t(n))||e.set(t(n),e.size);let n=0;for(let e of H){let t=w[e.index].barWidth;t!==void 0&&t>n&&(n=Math.min(1,t))}let r=de*(n||(e.size>1?.78:.62)),i=r/e.size;for(let n of H){let a=e.get(t(n))??0;n.barOffset=-r/2+i*(a+.5),n.barHalfWidth=i/2*(e.size>1?.86:1)}let a=U.filter(e=>!e.floating),o=h(a.map(e=>({s:e,stack:t(e)})),!1),s=I?h(a.filter(e=>w[e.index].stack!==void 0).map(e=>({s:e,stack:t(e)})),!0):[],c=0;a.forEach((e,t)=>{let n=I&&w[e.index].stack!==void 0?s[c++]:o[t];e.barBase=n.base,e.barTop=n.top});for(let e of U){let{y:t,y0:n,count:r}=e.cols;if(!e.floating||!n)continue;let i=new Float64Array(r),a=new Float64Array(r);for(let e=0;e<r;e++){let r=Number.isFinite(t[e]);i[e]=r?Number.isFinite(n[e])?n[e]:0:NaN,a[e]=r?t[e]:NaN}e.barBase=i,e.barTop=a}}for(let e of B)e.type===`area`&&e.cols.y0&&w[e.index].stack===void 0&&(e.stackBase=e.cols.y0);let W=B.filter(e=>(e.type===`line`||e.type===`area`)&&w[e.index].stack!==void 0);if(W.length){let e=h(W.map(e=>({s:e,stack:w[e.index].stack??``})),I);W.forEach((t,n)=>{t.stackBase=e[n].base,t.stackTop=e[n].top})}let G=B.filter(e=>e.type===`candlestick`),fe=m(G,`x`,k===`category`);for(let e of G)e.barHalfWidth=fe*.3;let K=B.filter(e=>e.type===`heatmap`);if(K.length){let e=m(K,`x`,k===`category`)/2,t=m(K,`y`,N===`category`)/2;for(let n of K)n.cellHalf={x:e,y:t}}let q=o.xAxis,J;if(k===`category`)J=[-.5,Math.max(1,A.length)-.5];else{let e=[];for(let t of B){e.push(t.cols.xMin,t.cols.xMax);let n=t.type===`bar`||t.type===`boxplot`?de/2:t.type===`candlestick`?fe/2:t.type===`heatmap`?t.cellHalf.x:0;n&&e.push(t.cols.xMin-n,t.cols.xMax+n)}J=r.ensureSpan(...f(e),k===`time`?[Date.now()-864e5,Date.now()]:[0,1]);let t=z.every(e=>e.type===`scatter`);if(t){let e=(J[1]-J[0])*.04;J=[J[0]-e,J[1]+e]}(q?.nice??(t&&k===`linear`))&&k===`linear`&&(J=r.niceDomain(J[0],J[1],q?.tickCount??6))}if(q?.min!==void 0&&(J[0]=q.min),q?.max!==void 0&&(J[1]=q.max),J=r.ensureSpan(J[0],J[1]),P)for(let e of z)e.yAxis!==`right`&&e.type!==`heatmap`&&ne(e,s);let pe=(e,t,n=!1)=>{let r=[];for(let t of e)t.type===`bar`&&t.barBase&&t.barTop?r.push(...f(t.barBase),...f(t.barTop)):t.stackBase&&t.stackTop?r.push(...f(t.stackBase),...f(t.stackTop)):t.type===`heatmap`?r.push(t.cols.yMin-t.cellHalf.y,t.cols.yMax+t.cellHalf.y):r.push(t.cols.yMin,t.cols.yMax);let i=e.filter(e=>e.type===`bar`);if(!n&&(i.some(e=>!e.floating)||t)&&r.push(0),i.some(e=>e.showLabels)){let[e,t]=f(r);t>0&&r.push(t+(t-Math.min(0,e))*.1),e<0&&r.push(e-(Math.max(0,t)-e)*.1)}return r},me=B.filter(e=>e.yAxis===`left`),Y=me.length?me:B,he=Y.filter(e=>e.type===`bar`),X;if(N===`category`)X=[-.5,Math.max(1,M.length)-.5];else{let e=pe(Y,j?.zero,P),t=he.length>0||Y.some(e=>e.type===`area`);if(X=r.ensureSpan(...f(e)),z.every(e=>e.type===`scatter`)){let e=(X[1]-X[0])*.06;X=[X[0]-e,X[1]+e]}else if((G.length||Y.some(e=>e.type===`boxplot`))&&!he.length){let e=(X[1]-X[0])*.04;X=[X[0]-e,X[1]+e]}(j?.nice??!K.length)&&N===`linear`&&(X=r.niceDomain(X[0],X[1],j?.tickCount??5)),P&&j?.nice!==!1&&(X=te(X)),I&&(U.length||W.length)&&(X=[f(e)[0]<0?-100:0,100]),t&&!j?.zero&&!P&&X[0]<0&&f(e)[0]>=0&&(X[0]=0)}let ge=e=>P?Math.log10(e):e;if(j?.min!==void 0&&(X[0]=ge(j.min)),j?.max!==void 0&&(X[1]=ge(j.max)),X=r.ensureSpan(X[0],X[1]),P)for(let e of z)e.yAxis===`left`&&re(e,X[0]);let Z=o.yAxis2,_e=null,ve=null,Q=z.filter(e=>e.yAxis===`right`);if(Q.length&&N!==`category`){let e=Z?.type===`log`,t=Q.filter(e=>!e.hidden),n=e?t.flatMap(e=>{let t=S(e.raw,s);return[t.yMin,t.yMax]}):pe(t,Z?.zero),[i,a]=r.ensureSpan(...f(n)),o=Z?.nice===!1?[i,a]:e?te([i,a]):b(i,a,X,j?.tickCount??5),c=t=>e?Math.log10(t):t;Z?.min!==void 0&&(o[0]=c(Z.min)),Z?.max!==void 0&&(o[1]=c(Z.max)),o=r.ensureSpan(o[0],o[1]);let l=(X[1]-X[0])/(o[1]-o[0]),d={scale:l,offset:X[0]-o[0]*l,log:e};ve=d;let p=e?X[0]:C(d)(Math.min(Math.max(0,o[0]),o[1]));for(let e of Q)ne(e,d,p),re(e,X[0]);_e=u(Z,e?`log`:`linear`,[],!1,T)}let ye=N===`time`&&z.some(e=>e.type===`bar`)&&z.every(e=>e.type===`bar`?e.floating:e.type===`scatter`),$=o.interaction===!1?!1:o.interaction===!0||o.interaction===void 0?!0:o.interaction.zoom??!0,be=$===!1?{x:!1,y:!1}:$===!0?{x:!0,y:V}:{x:$.includes(`x`),y:$.includes(`y`)},xe=j?.format??(I&&(U.length||W.length)?e=>i.formatPercent(e,T):void 0);return{series:z,x:u(q,k,A,!1,T),y:{...u(j,N,M,N!==`category`,T),format:xe},y2:_e,y2Map:ve,horizontal:L,locale:T,labels:D,formatValue:i.valueFormatter(T),base:{x:J,y:X},allScatter:V,zoom:be,tooltipMode:E?.mode??(V?`nearest`:ye?`item`:`axis`),baseline:P?X[0]:Math.min(Math.max(0,X[0]),X[1]),minSpan:{x:k===`category`?1:(J[1]-J[0])*1e-7,y:N===`category`?1:(X[1]-X[0])*1e-7},percent:I,stacks:w.map(e=>e.stack!==void 0&&(e.type===`bar`||e.type===`line`||e.type===`area`||!e.type)?`${e.type===`bar`?`bar`:`line`}:${e.stack}`:null)}},D=(e,t)=>e.barTop?e.barTop[t]:e.stackTop?e.stackTop[t]:e.cols.y[t],O=new WeakMap,k=e=>{let t=O.get(e.cols);return t||(t=new o.GridIndex(e.cols.x,e.cols.y,e.cols.count),O.set(e.cols,t)),t};exports.alignedDomain=b,exports.buildModel=E,exports.detectXType=l,exports.fromPlotY=T,exports.gridOf=k,exports.heatPosition=ie,exports.heatmapStops=ae,exports.plottedY=D,exports.toPlotY=w;
2
2
  //# sourceMappingURL=model.cjs.map