minerva-design 1.0.2 → 1.2.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 (354) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +21 -19
  3. package/dist/charts/canvas.d.cts +7 -0
  4. package/dist/charts/canvas.d.ts +7 -0
  5. package/dist/charts/core.cjs +1 -0
  6. package/dist/charts/core.d.cts +7 -0
  7. package/dist/charts/core.d.ts +7 -0
  8. package/dist/charts/core.js +6 -0
  9. package/dist/charts/engine/axis.cjs +2 -0
  10. package/dist/charts/engine/axis.cjs.map +1 -0
  11. package/dist/charts/engine/axis.d.cts +13 -0
  12. package/dist/charts/engine/axis.d.ts +13 -0
  13. package/dist/charts/engine/axis.js +38 -0
  14. package/dist/charts/engine/axis.js.map +1 -0
  15. package/dist/charts/engine/canvas.cjs +2 -0
  16. package/dist/charts/engine/canvas.cjs.map +1 -0
  17. package/dist/charts/engine/canvas.d.cts +85 -0
  18. package/dist/charts/engine/canvas.d.ts +85 -0
  19. package/dist/charts/engine/canvas.js +165 -0
  20. package/dist/charts/engine/canvas.js.map +1 -0
  21. package/dist/charts/engine/chart.cjs +3 -0
  22. package/dist/charts/engine/chart.cjs.map +1 -0
  23. package/dist/charts/engine/chart.d.cts +6 -0
  24. package/dist/charts/engine/chart.d.ts +6 -0
  25. package/dist/charts/engine/chart.js +566 -0
  26. package/dist/charts/engine/chart.js.map +1 -0
  27. package/dist/charts/engine/color.cjs +2 -0
  28. package/dist/charts/engine/color.cjs.map +1 -0
  29. package/dist/charts/engine/color.d.cts +33 -0
  30. package/dist/charts/engine/color.d.ts +33 -0
  31. package/dist/charts/engine/color.js +167 -0
  32. package/dist/charts/engine/color.js.map +1 -0
  33. package/dist/charts/engine/controller.cjs +3 -0
  34. package/dist/charts/engine/controller.cjs.map +1 -0
  35. package/dist/charts/engine/controller.d.cts +182 -0
  36. package/dist/charts/engine/controller.d.ts +182 -0
  37. package/dist/charts/engine/controller.js +528 -0
  38. package/dist/charts/engine/controller.js.map +1 -0
  39. package/dist/charts/engine/data.cjs +2 -0
  40. package/dist/charts/engine/data.cjs.map +1 -0
  41. package/dist/charts/engine/data.d.cts +29 -0
  42. package/dist/charts/engine/data.d.ts +29 -0
  43. package/dist/charts/engine/data.js +104 -0
  44. package/dist/charts/engine/data.js.map +1 -0
  45. package/dist/charts/engine/decimate.cjs +2 -0
  46. package/dist/charts/engine/decimate.cjs.map +1 -0
  47. package/dist/charts/engine/decimate.d.cts +13 -0
  48. package/dist/charts/engine/decimate.d.ts +13 -0
  49. package/dist/charts/engine/decimate.js +28 -0
  50. package/dist/charts/engine/decimate.js.map +1 -0
  51. package/dist/charts/engine/dom.cjs +2 -0
  52. package/dist/charts/engine/dom.cjs.map +1 -0
  53. package/dist/charts/engine/dom.d.cts +21 -0
  54. package/dist/charts/engine/dom.d.ts +21 -0
  55. package/dist/charts/engine/dom.js +125 -0
  56. package/dist/charts/engine/dom.js.map +1 -0
  57. package/dist/charts/engine/format.cjs +2 -0
  58. package/dist/charts/engine/format.cjs.map +1 -0
  59. package/dist/charts/engine/format.d.cts +9 -0
  60. package/dist/charts/engine/format.d.ts +9 -0
  61. package/dist/charts/engine/format.js +34 -0
  62. package/dist/charts/engine/format.js.map +1 -0
  63. package/dist/charts/engine/items.cjs +2 -0
  64. package/dist/charts/engine/items.cjs.map +1 -0
  65. package/dist/charts/engine/items.d.cts +8 -0
  66. package/dist/charts/engine/items.d.ts +8 -0
  67. package/dist/charts/engine/items.js +91 -0
  68. package/dist/charts/engine/items.js.map +1 -0
  69. package/dist/charts/engine/layout.cjs +2 -0
  70. package/dist/charts/engine/layout.cjs.map +1 -0
  71. package/dist/charts/engine/layout.d.cts +37 -0
  72. package/dist/charts/engine/layout.d.ts +37 -0
  73. package/dist/charts/engine/layout.js +26 -0
  74. package/dist/charts/engine/layout.js.map +1 -0
  75. package/dist/charts/engine/model.cjs +2 -0
  76. package/dist/charts/engine/model.cjs.map +1 -0
  77. package/dist/charts/engine/model.d.cts +74 -0
  78. package/dist/charts/engine/model.d.ts +74 -0
  79. package/dist/charts/engine/model.js +175 -0
  80. package/dist/charts/engine/model.js.map +1 -0
  81. package/dist/charts/engine/overlay.cjs +2 -0
  82. package/dist/charts/engine/overlay.cjs.map +1 -0
  83. package/dist/charts/engine/overlay.d.cts +78 -0
  84. package/dist/charts/engine/overlay.d.ts +78 -0
  85. package/dist/charts/engine/overlay.js +137 -0
  86. package/dist/charts/engine/overlay.js.map +1 -0
  87. package/dist/charts/engine/presets.cjs +3 -0
  88. package/dist/charts/engine/presets.cjs.map +1 -0
  89. package/dist/charts/engine/presets.d.cts +103 -0
  90. package/dist/charts/engine/presets.d.ts +103 -0
  91. package/dist/charts/engine/presets.js +153 -0
  92. package/dist/charts/engine/presets.js.map +1 -0
  93. package/dist/charts/engine/renderers/canvas2d.cjs +2 -0
  94. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -0
  95. package/dist/charts/engine/renderers/canvas2d.d.cts +20 -0
  96. package/dist/charts/engine/renderers/canvas2d.d.ts +20 -0
  97. package/dist/charts/engine/renderers/canvas2d.js +193 -0
  98. package/dist/charts/engine/renderers/canvas2d.js.map +1 -0
  99. package/dist/charts/engine/renderers/detect.cjs +2 -0
  100. package/dist/charts/engine/renderers/detect.cjs.map +1 -0
  101. package/dist/charts/engine/renderers/detect.d.cts +12 -0
  102. package/dist/charts/engine/renderers/detect.d.ts +12 -0
  103. package/dist/charts/engine/renderers/detect.js +33 -0
  104. package/dist/charts/engine/renderers/detect.js.map +1 -0
  105. package/dist/charts/engine/renderers/range.cjs +2 -0
  106. package/dist/charts/engine/renderers/range.cjs.map +1 -0
  107. package/dist/charts/engine/renderers/range.d.cts +5 -0
  108. package/dist/charts/engine/renderers/range.d.ts +5 -0
  109. package/dist/charts/engine/renderers/range.js +32 -0
  110. package/dist/charts/engine/renderers/range.js.map +1 -0
  111. package/dist/charts/engine/renderers/shaders.cjs +266 -0
  112. package/dist/charts/engine/renderers/shaders.cjs.map +1 -0
  113. package/dist/charts/engine/renderers/shaders.d.cts +20 -0
  114. package/dist/charts/engine/renderers/shaders.d.ts +20 -0
  115. package/dist/charts/engine/renderers/shaders.js +251 -0
  116. package/dist/charts/engine/renderers/shaders.js.map +1 -0
  117. package/dist/charts/engine/renderers/types.cjs +2 -0
  118. package/dist/charts/engine/renderers/types.cjs.map +1 -0
  119. package/dist/charts/engine/renderers/types.d.cts +83 -0
  120. package/dist/charts/engine/renderers/types.d.ts +83 -0
  121. package/dist/charts/engine/renderers/types.js +6 -0
  122. package/dist/charts/engine/renderers/types.js.map +1 -0
  123. package/dist/charts/engine/renderers/webgl2.cjs +2 -0
  124. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -0
  125. package/dist/charts/engine/renderers/webgl2.d.cts +5 -0
  126. package/dist/charts/engine/renderers/webgl2.d.ts +5 -0
  127. package/dist/charts/engine/renderers/webgl2.js +134 -0
  128. package/dist/charts/engine/renderers/webgl2.js.map +1 -0
  129. package/dist/charts/engine/renderers/webgpu.cjs +2 -0
  130. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -0
  131. package/dist/charts/engine/renderers/webgpu.d.cts +6 -0
  132. package/dist/charts/engine/renderers/webgpu.d.ts +6 -0
  133. package/dist/charts/engine/renderers/webgpu.js +220 -0
  134. package/dist/charts/engine/renderers/webgpu.js.map +1 -0
  135. package/dist/charts/engine/scale.cjs +2 -0
  136. package/dist/charts/engine/scale.cjs.map +1 -0
  137. package/dist/charts/engine/scale.d.cts +13 -0
  138. package/dist/charts/engine/scale.d.ts +13 -0
  139. package/dist/charts/engine/scale.js +37 -0
  140. package/dist/charts/engine/scale.js.map +1 -0
  141. package/dist/charts/engine/scene.cjs +2 -0
  142. package/dist/charts/engine/scene.cjs.map +1 -0
  143. package/dist/charts/engine/scene.d.cts +89 -0
  144. package/dist/charts/engine/scene.d.ts +89 -0
  145. package/dist/charts/engine/scene.js +241 -0
  146. package/dist/charts/engine/scene.js.map +1 -0
  147. package/dist/charts/engine/spatial.cjs +2 -0
  148. package/dist/charts/engine/spatial.cjs.map +1 -0
  149. package/dist/charts/engine/spatial.d.cts +18 -0
  150. package/dist/charts/engine/spatial.d.ts +18 -0
  151. package/dist/charts/engine/spatial.js +53 -0
  152. package/dist/charts/engine/spatial.js.map +1 -0
  153. package/dist/charts/engine/theme.cjs +2 -0
  154. package/dist/charts/engine/theme.cjs.map +1 -0
  155. package/dist/charts/engine/theme.d.cts +45 -0
  156. package/dist/charts/engine/theme.d.ts +45 -0
  157. package/dist/charts/engine/theme.js +86 -0
  158. package/dist/charts/engine/theme.js.map +1 -0
  159. package/dist/charts/engine/time.cjs +2 -0
  160. package/dist/charts/engine/time.cjs.map +1 -0
  161. package/dist/charts/engine/time.d.cts +10 -0
  162. package/dist/charts/engine/time.d.ts +10 -0
  163. package/dist/charts/engine/time.js +189 -0
  164. package/dist/charts/engine/time.js.map +1 -0
  165. package/dist/charts/engine/types.d.cts +356 -0
  166. package/dist/charts/engine/types.d.ts +356 -0
  167. package/dist/charts/engine/viewport.cjs +2 -0
  168. package/dist/charts/engine/viewport.cjs.map +1 -0
  169. package/dist/charts/engine/viewport.d.cts +12 -0
  170. package/dist/charts/engine/viewport.d.ts +12 -0
  171. package/dist/charts/engine/viewport.js +15 -0
  172. package/dist/charts/engine/viewport.js.map +1 -0
  173. package/dist/charts/index.cjs +1 -0
  174. package/dist/charts/index.d.cts +4 -0
  175. package/dist/charts/index.d.ts +4 -0
  176. package/dist/charts/index.js +10 -0
  177. package/dist/charts/react/Chart.cjs +2 -0
  178. package/dist/charts/react/Chart.cjs.map +1 -0
  179. package/dist/charts/react/Chart.d.cts +35 -0
  180. package/dist/charts/react/Chart.d.ts +35 -0
  181. package/dist/charts/react/Chart.js +117 -0
  182. package/dist/charts/react/Chart.js.map +1 -0
  183. package/dist/charts/react/charts.cjs +2 -0
  184. package/dist/charts/react/charts.cjs.map +1 -0
  185. package/dist/charts/react/charts.d.cts +13 -0
  186. package/dist/charts/react/charts.d.ts +13 -0
  187. package/dist/charts/react/charts.js +133 -0
  188. package/dist/charts/react/charts.js.map +1 -0
  189. package/dist/charts/react/types.d.cts +136 -0
  190. package/dist/charts/react/types.d.ts +136 -0
  191. package/dist/native/charts/src/canvas.cjs +1 -0
  192. package/dist/native/charts/src/canvas.js +6 -0
  193. package/dist/native/charts/src/engine/axis.cjs +2 -0
  194. package/dist/native/charts/src/engine/axis.cjs.map +1 -0
  195. package/dist/native/charts/src/engine/axis.js +38 -0
  196. package/dist/native/charts/src/engine/axis.js.map +1 -0
  197. package/dist/native/charts/src/engine/canvas.cjs +1 -0
  198. package/dist/native/charts/src/engine/canvas.js +1 -0
  199. package/dist/native/charts/src/engine/color.cjs +2 -0
  200. package/dist/native/charts/src/engine/color.cjs.map +1 -0
  201. package/dist/native/charts/src/engine/color.js +130 -0
  202. package/dist/native/charts/src/engine/color.js.map +1 -0
  203. package/dist/native/charts/src/engine/controller.cjs +3 -0
  204. package/dist/native/charts/src/engine/controller.cjs.map +1 -0
  205. package/dist/native/charts/src/engine/controller.js +528 -0
  206. package/dist/native/charts/src/engine/controller.js.map +1 -0
  207. package/dist/native/charts/src/engine/data.cjs +2 -0
  208. package/dist/native/charts/src/engine/data.cjs.map +1 -0
  209. package/dist/native/charts/src/engine/data.js +104 -0
  210. package/dist/native/charts/src/engine/data.js.map +1 -0
  211. package/dist/native/charts/src/engine/decimate.cjs +2 -0
  212. package/dist/native/charts/src/engine/decimate.cjs.map +1 -0
  213. package/dist/native/charts/src/engine/decimate.js +28 -0
  214. package/dist/native/charts/src/engine/decimate.js.map +1 -0
  215. package/dist/native/charts/src/engine/format.cjs +2 -0
  216. package/dist/native/charts/src/engine/format.cjs.map +1 -0
  217. package/dist/native/charts/src/engine/format.js +34 -0
  218. package/dist/native/charts/src/engine/format.js.map +1 -0
  219. package/dist/native/charts/src/engine/layout.cjs +2 -0
  220. package/dist/native/charts/src/engine/layout.cjs.map +1 -0
  221. package/dist/native/charts/src/engine/layout.js +26 -0
  222. package/dist/native/charts/src/engine/layout.js.map +1 -0
  223. package/dist/native/charts/src/engine/model.cjs +2 -0
  224. package/dist/native/charts/src/engine/model.cjs.map +1 -0
  225. package/dist/native/charts/src/engine/model.js +175 -0
  226. package/dist/native/charts/src/engine/model.js.map +1 -0
  227. package/dist/native/charts/src/engine/overlay.cjs +2 -0
  228. package/dist/native/charts/src/engine/overlay.cjs.map +1 -0
  229. package/dist/native/charts/src/engine/overlay.js +49 -0
  230. package/dist/native/charts/src/engine/overlay.js.map +1 -0
  231. package/dist/native/charts/src/engine/presets.cjs +3 -0
  232. package/dist/native/charts/src/engine/presets.cjs.map +1 -0
  233. package/dist/native/charts/src/engine/presets.js +147 -0
  234. package/dist/native/charts/src/engine/presets.js.map +1 -0
  235. package/dist/native/charts/src/engine/scale.cjs +2 -0
  236. package/dist/native/charts/src/engine/scale.cjs.map +1 -0
  237. package/dist/native/charts/src/engine/scale.js +37 -0
  238. package/dist/native/charts/src/engine/scale.js.map +1 -0
  239. package/dist/native/charts/src/engine/scene.cjs +2 -0
  240. package/dist/native/charts/src/engine/scene.cjs.map +1 -0
  241. package/dist/native/charts/src/engine/scene.js +241 -0
  242. package/dist/native/charts/src/engine/scene.js.map +1 -0
  243. package/dist/native/charts/src/engine/spatial.cjs +2 -0
  244. package/dist/native/charts/src/engine/spatial.cjs.map +1 -0
  245. package/dist/native/charts/src/engine/spatial.js +53 -0
  246. package/dist/native/charts/src/engine/spatial.js.map +1 -0
  247. package/dist/native/charts/src/engine/theme.cjs +2 -0
  248. package/dist/native/charts/src/engine/theme.cjs.map +1 -0
  249. package/dist/native/charts/src/engine/theme.js +62 -0
  250. package/dist/native/charts/src/engine/theme.js.map +1 -0
  251. package/dist/native/charts/src/engine/time.cjs +2 -0
  252. package/dist/native/charts/src/engine/time.cjs.map +1 -0
  253. package/dist/native/charts/src/engine/time.js +189 -0
  254. package/dist/native/charts/src/engine/time.js.map +1 -0
  255. package/dist/native/charts/src/engine/viewport.cjs +2 -0
  256. package/dist/native/charts/src/engine/viewport.cjs.map +1 -0
  257. package/dist/native/charts/src/engine/viewport.js +12 -0
  258. package/dist/native/charts/src/engine/viewport.js.map +1 -0
  259. package/dist/native/components/Chart/ChartBase.cjs +2 -0
  260. package/dist/native/components/Chart/ChartBase.cjs.map +1 -0
  261. package/dist/native/components/Chart/ChartBase.d.cts +29 -0
  262. package/dist/native/components/Chart/ChartBase.d.ts +29 -0
  263. package/dist/native/components/Chart/ChartBase.js +287 -0
  264. package/dist/native/components/Chart/ChartBase.js.map +1 -0
  265. package/dist/native/components/Chart/charts.cjs +2 -0
  266. package/dist/native/components/Chart/charts.cjs.map +1 -0
  267. package/dist/native/components/Chart/charts.d.cts +19 -0
  268. package/dist/native/components/Chart/charts.d.ts +19 -0
  269. package/dist/native/components/Chart/charts.js +173 -0
  270. package/dist/native/components/Chart/charts.js.map +1 -0
  271. package/dist/native/components/Chart/index.cjs +1 -0
  272. package/dist/native/components/Chart/index.d.cts +2 -0
  273. package/dist/native/components/Chart/index.d.ts +2 -0
  274. package/dist/native/components/Chart/index.js +2 -0
  275. package/dist/native/components/Chart/measure.cjs +2 -0
  276. package/dist/native/components/Chart/measure.cjs.map +1 -0
  277. package/dist/native/components/Chart/measure.d.cts +5 -0
  278. package/dist/native/components/Chart/measure.d.ts +5 -0
  279. package/dist/native/components/Chart/measure.js +11 -0
  280. package/dist/native/components/Chart/measure.js.map +1 -0
  281. package/dist/native/components/Chart/scene.cjs +2 -0
  282. package/dist/native/components/Chart/scene.cjs.map +1 -0
  283. package/dist/native/components/Chart/scene.d.cts +41 -0
  284. package/dist/native/components/Chart/scene.d.ts +41 -0
  285. package/dist/native/components/Chart/scene.js +419 -0
  286. package/dist/native/components/Chart/scene.js.map +1 -0
  287. package/dist/native/components/Chart/theme.cjs +2 -0
  288. package/dist/native/components/Chart/theme.cjs.map +1 -0
  289. package/dist/native/components/Chart/theme.d.cts +10 -0
  290. package/dist/native/components/Chart/theme.d.ts +10 -0
  291. package/dist/native/components/Chart/theme.js +10 -0
  292. package/dist/native/components/Chart/theme.js.map +1 -0
  293. package/dist/native/components/Chart/types.d.cts +129 -0
  294. package/dist/native/components/Chart/types.d.ts +129 -0
  295. package/dist/native/index.cjs +1 -1
  296. package/dist/native/index.d.cts +1 -0
  297. package/dist/native/index.d.ts +1 -0
  298. package/dist/native/index.js +6 -4
  299. package/dist/native/manifest.d.cts +7 -0
  300. package/dist/native/manifest.d.ts +7 -0
  301. package/dist/native/source/components/Chart/ChartBase.tsx +545 -0
  302. package/dist/native/source/components/Chart/charts.tsx +291 -0
  303. package/dist/native/source/components/Chart/index.ts +8 -0
  304. package/dist/native/source/components/Chart/measure.ts +50 -0
  305. package/dist/native/source/components/Chart/scene.tsx +987 -0
  306. package/dist/native/source/components/Chart/theme.ts +16 -0
  307. package/dist/native/source/components/Chart/types.ts +194 -0
  308. package/dist/native/source/index.ts +1 -0
  309. package/dist/native/source/manifest.ts +14 -0
  310. package/dist/taro/charts.d.ts +144 -0
  311. package/dist/taro/index.d.ts +1 -0
  312. package/dist/taro/index.js +3064 -618
  313. package/dist/uni/BarChart.vue +75 -0
  314. package/dist/uni/BarChart.vue.d.ts +111 -0
  315. package/dist/uni/Chart.vue +68 -0
  316. package/dist/uni/Chart.vue.d.ts +100 -0
  317. package/dist/uni/LineChart.vue +75 -0
  318. package/dist/uni/LineChart.vue.d.ts +111 -0
  319. package/dist/uni/ProgressIndicator.vue.d.ts +1 -1
  320. package/dist/uni/QuadrantChart.vue +184 -0
  321. package/dist/uni/QuadrantChart.vue.d.ts +173 -0
  322. package/dist/uni/ScatterChart.vue +69 -0
  323. package/dist/uni/ScatterChart.vue.d.ts +100 -0
  324. package/dist/uni/chart-canvas.d.ts +68 -0
  325. package/dist/uni/chart-canvas.js +363 -0
  326. package/dist/uni/chart-types.d.ts +135 -0
  327. package/dist/uni/chart-types.js +84 -0
  328. package/dist/uni/charts-canvas.d.ts +1 -0
  329. package/dist/uni/charts-canvas.js +8 -0
  330. package/dist/uni/index.d.ts +6 -0
  331. package/dist/uni/index.js +6 -0
  332. package/dist/weapp/bar-chart/index.js +1 -0
  333. package/dist/weapp/bar-chart/index.json +1 -0
  334. package/dist/weapp/bar-chart/index.wxml +1 -0
  335. package/dist/weapp/bar-chart/index.wxss +1 -0
  336. package/dist/weapp/chart/index.js +1 -0
  337. package/dist/weapp/chart/index.json +1 -0
  338. package/dist/weapp/chart/index.wxml +1 -0
  339. package/dist/weapp/chart/index.wxss +1 -0
  340. package/dist/weapp/controls.js +4019 -266
  341. package/dist/weapp/line-chart/index.js +1 -0
  342. package/dist/weapp/line-chart/index.json +1 -0
  343. package/dist/weapp/line-chart/index.wxml +1 -0
  344. package/dist/weapp/line-chart/index.wxss +1 -0
  345. package/dist/weapp/quadrant-chart/index.js +1 -0
  346. package/dist/weapp/quadrant-chart/index.json +1 -0
  347. package/dist/weapp/quadrant-chart/index.wxml +1 -0
  348. package/dist/weapp/quadrant-chart/index.wxss +1 -0
  349. package/dist/weapp/scatter-chart/index.js +1 -0
  350. package/dist/weapp/scatter-chart/index.json +1 -0
  351. package/dist/weapp/scatter-chart/index.wxml +1 -0
  352. package/dist/weapp/scatter-chart/index.wxss +1 -0
  353. package/dist/weapp/types.d.ts +295 -0
  354. package/package.json +48 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.cjs","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectCategories","seen","add","datas","xs","i","list","item","finalize","xMin","xMax","yMin","yMax","sorted","prev","count","xi","x","yi","y","empty","extra","normalizeData","none","resolveX","size","colors","labels","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 count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none) */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\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\" ? v : v === null || v === undefined ? NaN : Number(v);\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: Pick<SeriesColumns, \"size\" | \"colors\" | \"labels\">,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\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 }\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 ...extra,\n };\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n): SeriesColumns => {\n const none = { size: null, colors: null, labels: null };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const xs = data.x;\n for (let i = 0; i < count; i++) {\n y[i] = toNumber(data.y[i]);\n x[i] = xs ? resolveX(xs[i] as ChartXValue, i) : 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, { ...none, size });\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\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] = toNumber(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | null;\n size?: number;\n color?: string;\n label?: string;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = toNumber(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 } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, { size, colors, labels });\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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"}
@@ -0,0 +1,104 @@
1
+ //#region ../charts/src/engine/data.ts
2
+ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t = (e, t) => (n, r) => {
3
+ if (typeof n == "number") return n;
4
+ if (n instanceof Date) return n.getTime();
5
+ if (typeof n == "string") {
6
+ if (e === "category") return t(n);
7
+ if (e === "time") return Date.parse(n);
8
+ let i = Number(n);
9
+ return Number.isNaN(i) ? r : i;
10
+ }
11
+ return r;
12
+ }, n = (e) => typeof e == "number" ? e : e == null ? NaN : Number(e), r = (t) => {
13
+ let n = /* @__PURE__ */ new Set(), r = (e) => {
14
+ typeof e == "string" && n.add(e);
15
+ };
16
+ for (let n of t) {
17
+ if (e(n)) {
18
+ let e = n.x;
19
+ if (e && !ArrayBuffer.isView(e)) for (let t = 0; t < e.length; t++) r(e[t]);
20
+ continue;
21
+ }
22
+ let t = n;
23
+ for (let e = 0; e < t.length; e++) {
24
+ let n = t[e];
25
+ Array.isArray(n) ? r(n[0]) : n && typeof n == "object" && r(n.x);
26
+ }
27
+ }
28
+ return [...n];
29
+ }, i = (e, t, n, r) => {
30
+ let i = Infinity, a = -Infinity, o = Infinity, s = -Infinity, c = !0, l = -Infinity;
31
+ for (let r = 0; r < n; r++) {
32
+ let n = e[r];
33
+ if (!Number.isFinite(n)) {
34
+ t[r] = NaN;
35
+ continue;
36
+ }
37
+ n < l && (c = !1), l = n;
38
+ let u = t[r];
39
+ Number.isFinite(u) && (n < i && (i = n), n > a && (a = n), u < o && (o = u), u > s && (s = u));
40
+ }
41
+ let u = i > a;
42
+ return {
43
+ x: e,
44
+ y: t,
45
+ count: n,
46
+ sorted: c,
47
+ xMin: u ? NaN : i,
48
+ xMax: u ? NaN : a,
49
+ yMin: u ? NaN : o,
50
+ yMax: u ? NaN : s,
51
+ ...r
52
+ };
53
+ }, a = (t, r) => {
54
+ let a = {
55
+ size: null,
56
+ colors: null,
57
+ labels: null
58
+ };
59
+ if (e(t)) {
60
+ let e = t.y.length, o = new Float64Array(e), s = new Float64Array(e), c = t.x;
61
+ for (let i = 0; i < e; i++) s[i] = n(t.y[i]), o[i] = c ? r(c[i], i) : i;
62
+ let l = null;
63
+ if (t.size) {
64
+ l = new Float32Array(e);
65
+ for (let r = 0; r < e; r++) l[r] = n(t.size[r]);
66
+ }
67
+ return i(o, s, e, {
68
+ ...a,
69
+ size: l
70
+ });
71
+ }
72
+ let o = t, s = o.length, c = new Float64Array(s), l = new Float64Array(s), u = null, d = null, f = null;
73
+ for (let e = 0; e < s; e++) {
74
+ let t = o[e];
75
+ if (t == null || typeof t == "number") c[e] = e, l[e] = n(t);
76
+ else if (Array.isArray(t)) c[e] = r(t[0], e), l[e] = n(t[1]);
77
+ else if (typeof t == "object") {
78
+ let i = t;
79
+ c[e] = i.x === void 0 ? e : r(i.x, e), l[e] = n(i.y), i.size !== void 0 && (u ?? (u = new Float32Array(s).fill(NaN)), u[e] = i.size), i.color !== void 0 && (d ?? (d = Array(s)), d[e] = i.color), i.label !== void 0 && (f ?? (f = Array(s)), f[e] = i.label);
80
+ } else c[e] = e, l[e] = NaN;
81
+ }
82
+ return i(c, l, s, {
83
+ size: u,
84
+ colors: d,
85
+ labels: f
86
+ });
87
+ }, o = (e, t, n) => {
88
+ let r = 0, i = t;
89
+ for (; r < i;) {
90
+ let t = r + i >>> 1;
91
+ e[t] < n ? r = t + 1 : i = t;
92
+ }
93
+ return r;
94
+ }, s = (e, t, n, r) => {
95
+ if (n === 0) return -1;
96
+ let i = o(e, n, r), a = i - 1, s = i;
97
+ for (; a >= 0 && !Number.isFinite(t[a]);) a--;
98
+ for (; s < n && !Number.isFinite(t[s]);) s++;
99
+ return a < 0 ? s < n ? s : -1 : s >= n || r - e[a] <= e[s] - r ? a : s;
100
+ };
101
+ //#endregion
102
+ export { r as collectCategories, o as lowerBound, s as nearestIndex, a as normalizeData, t as xResolver };
103
+
104
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectCategories","seen","add","datas","xs","i","list","item","finalize","xMin","xMax","yMin","yMax","sorted","prev","count","xi","x","yi","y","empty","extra","normalizeData","none","resolveX","size","colors","labels","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 count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none) */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\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\" ? v : v === null || v === undefined ? NaN : Number(v);\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: Pick<SeriesColumns, \"size\" | \"colors\" | \"labels\">,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\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 }\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 ...extra,\n };\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n): SeriesColumns => {\n const none = { size: null, colors: null, labels: null };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const xs = data.x;\n for (let i = 0; i < count; i++) {\n y[i] = toNumber(data.y[i]);\n x[i] = xs ? resolveX(xs[i] as ChartXValue, i) : 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, { ...none, size });\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\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] = toNumber(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | null;\n size?: number;\n color?: string;\n label?: string;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = toNumber(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 } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, { size, colors, labels });\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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"}
@@ -0,0 +1,2 @@
1
+ var e=(e,t,n,r,i=1/0)=>{let a=new Float64Array(Math.max(0,n-t)*2),o=0,s=NaN,c=-1,l=-1,u=-1,d=-1,f=t=>{a[o*2]=e[t*2],a[o*2+1]=e[t*2+1],o++},p=()=>{if(c<0)return;f(c);let e=Math.min(l,u),t=Math.max(l,u);e!==c&&f(e),t!==e&&t!==c&&f(t),d!==t&&d!==e&&d!==c&&f(d),c=-1},m=e=>Number.isFinite(e)&&Math.abs(e)<i;for(let i=t;i<n;i++){let t=e[i*2],n=e[i*2+1];if(!m(t)||!m(n)){p(),s=NaN,o>0&&!Number.isNaN(a[o*2-1])&&(a[o*2]=t,a[o*2+1]=NaN,o++);continue}let f=Math.floor(r(t));f!==s||c<0?(p(),s=f,c=l=u=d=i):(n<e[l*2+1]&&(l=i),n>e[u*2+1]&&(u=i),d=i)}return p(),{points:a,length:o}};exports.decimateMinMax=e;
2
+ //# sourceMappingURL=decimate.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decimate.cjs","names":["decimateMinMax","out","end","start","length","col","first","min","max","last","push","points","i","flush","lo","hi","valid","v","gap","x","y","c","column"],"sources":["../../../../../../charts/src/engine/decimate.ts"],"sourcesContent":["// Min-max decimation: keeps the shape of a sorted line with at most four\n// points per pixel column (first, min, max, last).\n\nexport interface DecimatedLine {\n /** Interleaved x, y; NaN y marks a gap */\n points: Float64Array;\n /** Number of points */\n length: number;\n}\n\n/**\n * Decimates the points `[start, end)` of a line with sorted x, given as\n * interleaved `x, y` values. `column` maps an x value to its pixel column.\n * Missing values (NaN or `gap`) are kept as a single NaN point so the\n * gaps survive.\n */\nexport const decimateMinMax = (\n points: ArrayLike<number>,\n start: number,\n end: number,\n column: (x: number) => number,\n gap = Infinity,\n): DecimatedLine => {\n const out = new Float64Array(Math.max(0, end - start) * 2);\n let length = 0;\n let col = NaN;\n let first = -1;\n let min = -1;\n let max = -1;\n let last = -1;\n\n const push = (i: number) => {\n out[length * 2] = points[i * 2];\n out[length * 2 + 1] = points[i * 2 + 1];\n length++;\n };\n const flush = () => {\n if (first < 0) return;\n push(first);\n const lo = Math.min(min, max);\n const hi = Math.max(min, max);\n if (lo !== first) push(lo);\n if (hi !== lo && hi !== first) push(hi);\n if (last !== hi && last !== lo && last !== first) push(last);\n first = -1;\n };\n const valid = (v: number) => Number.isFinite(v) && Math.abs(v) < gap;\n\n for (let i = start; i < end; i++) {\n const x = points[i * 2];\n const y = points[i * 2 + 1];\n if (!valid(x) || !valid(y)) {\n flush();\n col = NaN;\n if (length > 0 && !Number.isNaN(out[length * 2 - 1])) {\n out[length * 2] = x;\n out[length * 2 + 1] = NaN;\n length++;\n }\n continue;\n }\n const c = Math.floor(column(x));\n if (c !== col || first < 0) {\n flush();\n col = c;\n first = min = max = last = i;\n } else {\n if (y < points[min * 2 + 1]) min = i;\n if (y > points[max * 2 + 1]) max = i;\n last = i;\n }\n }\n flush();\n return { points: out, length };\n};\n"],"mappings":"AAgBA,IAAaA,GACX,EACA,EACA,EACA,EACA,EAAM,MACY,CAClB,IAAMC,EAAM,IAAI,aAAa,KAAK,IAAI,EAAGC,EAAMC,CAAK,EAAI,CAAC,EACrDC,EAAS,EACTC,EAAM,IACNC,EAAQ,GACRC,EAAM,GACNC,EAAM,GACNC,EAAO,GAELC,EAAQ,GAAc,CAC1B,EAAIN,EAAS,GAAKO,EAAOC,EAAI,GAC7B,EAAIR,EAAS,EAAI,GAAKO,EAAOC,EAAI,EAAI,GACrC,GACF,EACMC,MAAc,CAClB,GAAIP,EAAQ,EAAG,OACfI,EAAKJ,CAAK,EACV,IAAMQ,EAAK,KAAK,IAAIP,EAAKC,CAAG,EACtBO,EAAK,KAAK,IAAIR,EAAKC,CAAG,EACxBM,IAAOR,GAAOI,EAAKI,CAAE,EACrBC,IAAOD,GAAMC,IAAOT,GAAOI,EAAKK,CAAE,EAClCN,IAASM,GAAMN,IAASK,GAAML,IAASH,GAAOI,EAAKD,CAAI,EAC3D,EAAQ,EACV,EACMO,EAAS,GAAc,OAAO,SAASC,CAAC,GAAK,KAAK,IAAIA,CAAC,EAAIC,EAEjE,IAAK,IAAI,EAAIf,EAAO,EAAID,EAAK,IAAK,CAChC,IAAMiB,EAAIR,EAAO,EAAI,GACfS,EAAIT,EAAO,EAAI,EAAI,GACzB,GAAI,CAACK,EAAMG,CAAC,GAAK,CAACH,EAAMI,CAAC,EAAG,CAC1BP,EAAM,EACN,EAAM,IACFT,EAAS,GAAK,CAAC,OAAO,MAAMH,EAAIG,EAAS,EAAI,EAAE,IACjD,EAAIA,EAAS,GAAKe,EAClB,EAAIf,EAAS,EAAI,GAAK,IACtB,KAEF,QACF,CACA,IAAMiB,EAAI,KAAK,MAAMC,EAAOH,CAAC,CAAC,EAC1BE,IAAMhB,GAAOC,EAAQ,GACvBO,EAAM,EACN,EAAMQ,EACN,EAAQ,EAAM,EAAM,EAAO,IAEvBD,EAAIT,EAAOJ,EAAM,EAAI,KAAI,EAAM,GAC/Ba,EAAIT,EAAOH,EAAM,EAAI,KAAI,EAAM,GACnC,EAAO,EAEX,CAEA,OADAK,EAAM,EACC,CAAE,OAAQZ,EAAK,QAAO,CAC/B"}
@@ -0,0 +1,28 @@
1
+ //#region ../charts/src/engine/decimate.ts
2
+ var e = (e, t, n, r, i = Infinity) => {
3
+ let a = new Float64Array(Math.max(0, n - t) * 2), o = 0, s = NaN, c = -1, l = -1, u = -1, d = -1, f = (t) => {
4
+ a[o * 2] = e[t * 2], a[o * 2 + 1] = e[t * 2 + 1], o++;
5
+ }, p = () => {
6
+ if (c < 0) return;
7
+ f(c);
8
+ let e = Math.min(l, u), t = Math.max(l, u);
9
+ e !== c && f(e), t !== e && t !== c && f(t), d !== t && d !== e && d !== c && f(d), c = -1;
10
+ }, m = (e) => Number.isFinite(e) && Math.abs(e) < i;
11
+ for (let i = t; i < n; i++) {
12
+ let t = e[i * 2], n = e[i * 2 + 1];
13
+ if (!m(t) || !m(n)) {
14
+ p(), s = NaN, o > 0 && !Number.isNaN(a[o * 2 - 1]) && (a[o * 2] = t, a[o * 2 + 1] = NaN, o++);
15
+ continue;
16
+ }
17
+ let f = Math.floor(r(t));
18
+ f !== s || c < 0 ? (p(), s = f, c = l = u = d = i) : (n < e[l * 2 + 1] && (l = i), n > e[u * 2 + 1] && (u = i), d = i);
19
+ }
20
+ return p(), {
21
+ points: a,
22
+ length: o
23
+ };
24
+ };
25
+ //#endregion
26
+ export { e as decimateMinMax };
27
+
28
+ //# sourceMappingURL=decimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decimate.js","names":["decimateMinMax","out","end","start","length","col","first","min","max","last","push","points","i","flush","lo","hi","valid","v","gap","x","y","c","column"],"sources":["../../../../../../charts/src/engine/decimate.ts"],"sourcesContent":["// Min-max decimation: keeps the shape of a sorted line with at most four\n// points per pixel column (first, min, max, last).\n\nexport interface DecimatedLine {\n /** Interleaved x, y; NaN y marks a gap */\n points: Float64Array;\n /** Number of points */\n length: number;\n}\n\n/**\n * Decimates the points `[start, end)` of a line with sorted x, given as\n * interleaved `x, y` values. `column` maps an x value to its pixel column.\n * Missing values (NaN or `gap`) are kept as a single NaN point so the\n * gaps survive.\n */\nexport const decimateMinMax = (\n points: ArrayLike<number>,\n start: number,\n end: number,\n column: (x: number) => number,\n gap = Infinity,\n): DecimatedLine => {\n const out = new Float64Array(Math.max(0, end - start) * 2);\n let length = 0;\n let col = NaN;\n let first = -1;\n let min = -1;\n let max = -1;\n let last = -1;\n\n const push = (i: number) => {\n out[length * 2] = points[i * 2];\n out[length * 2 + 1] = points[i * 2 + 1];\n length++;\n };\n const flush = () => {\n if (first < 0) return;\n push(first);\n const lo = Math.min(min, max);\n const hi = Math.max(min, max);\n if (lo !== first) push(lo);\n if (hi !== lo && hi !== first) push(hi);\n if (last !== hi && last !== lo && last !== first) push(last);\n first = -1;\n };\n const valid = (v: number) => Number.isFinite(v) && Math.abs(v) < gap;\n\n for (let i = start; i < end; i++) {\n const x = points[i * 2];\n const y = points[i * 2 + 1];\n if (!valid(x) || !valid(y)) {\n flush();\n col = NaN;\n if (length > 0 && !Number.isNaN(out[length * 2 - 1])) {\n out[length * 2] = x;\n out[length * 2 + 1] = NaN;\n length++;\n }\n continue;\n }\n const c = Math.floor(column(x));\n if (c !== col || first < 0) {\n flush();\n col = c;\n first = min = max = last = i;\n } else {\n if (y < points[min * 2 + 1]) min = i;\n if (y > points[max * 2 + 1]) max = i;\n last = i;\n }\n }\n flush();\n return { points: out, length };\n};\n"],"mappings":";AAgBA,IAAaA,KACX,GACA,GACA,GACA,GACA,IAAM,aACY;CAClB,IAAMC,IAAM,IAAI,aAAa,KAAK,IAAI,GAAGC,IAAMC,CAAK,IAAI,CAAC,GACrDC,IAAS,GACTC,IAAM,KACNC,IAAQ,IACRC,IAAM,IACNC,IAAM,IACNC,IAAO,IAELC,KAAQ,MAAc;EAG1B,AAFA,EAAIN,IAAS,KAAKO,EAAOC,IAAI,IAC7B,EAAIR,IAAS,IAAI,KAAKO,EAAOC,IAAI,IAAI,IACrC;CACF,GACMC,UAAc;EAClB,IAAIP,IAAQ,GAAG;EACf,EAAKA,CAAK;EACV,IAAMQ,IAAK,KAAK,IAAIP,GAAKC,CAAG,GACtBO,IAAK,KAAK,IAAIR,GAAKC,CAAG;EAI5B,AAHIM,MAAOR,KAAOI,EAAKI,CAAE,GACrBC,MAAOD,KAAMC,MAAOT,KAAOI,EAAKK,CAAE,GAClCN,MAASM,KAAMN,MAASK,KAAML,MAASH,KAAOI,EAAKD,CAAI,GAC3D,IAAQ;CACV,GACMO,KAAS,MAAc,OAAO,SAASC,CAAC,KAAK,KAAK,IAAIA,CAAC,IAAIC;CAEjE,KAAK,IAAI,IAAIf,GAAO,IAAID,GAAK,KAAK;EAChC,IAAMiB,IAAIR,EAAO,IAAI,IACfS,IAAIT,EAAO,IAAI,IAAI;EACzB,IAAI,CAACK,EAAMG,CAAC,KAAK,CAACH,EAAMI,CAAC,GAAG;GAG1B,AAFAP,EAAM,GACN,IAAM,KACFT,IAAS,KAAK,CAAC,OAAO,MAAMH,EAAIG,IAAS,IAAI,EAAE,MACjD,EAAIA,IAAS,KAAKe,GAClB,EAAIf,IAAS,IAAI,KAAK,KACtB;GAEF;EACF;EACA,IAAMiB,IAAI,KAAK,MAAMC,EAAOH,CAAC,CAAC;EAC9B,AAAIE,MAAMhB,KAAOC,IAAQ,KACvBO,EAAM,GACN,IAAMQ,GACN,IAAQ,IAAM,IAAM,IAAO,MAEvBD,IAAIT,EAAOJ,IAAM,IAAI,OAAI,IAAM,IAC/Ba,IAAIT,EAAOH,IAAM,IAAI,OAAI,IAAM,IACnC,IAAO;CAEX;CAEA,OADAK,EAAM,GACC;EAAE,QAAQZ;EAAK;CAAO;AAC/B"}
@@ -0,0 +1,2 @@
1
+ const e=require("./scale.cjs");var t=[[0xe8d4a51000,`T`],[1e9,`B`],[1e6,`M`],[1e3,`k`]],n=e=>e.includes(`.`)?e.replace(/\.?0+$/,``):e,r=(r,i=2)=>{if(!Number.isFinite(r))return String(r);if(Object.is(r,-0)||r===0)return`0`;let a=Math.abs(r);for(let[e,o]of t)if(a>=e)return n((r/e).toFixed(i))+o;if(a<1e-4)return r.toExponential(1);let o=Math.min(6,Math.max(i,e.stepDecimals(a)+2));return n(r.toFixed(o))},i=(n,i)=>{if(i>=1e4){let a=t.find(([e])=>i>=e)?.[0]??1,o=Math.min(3,e.stepDecimals(n/a));return e=>r(e,o)}let a=e.stepDecimals(n);return e=>{let t=e.toFixed(a);return/^-0(\.0*)?$/.test(t)?t.slice(1):t}},a=e=>{if(!Number.isFinite(e))return`–`;let t=Math.abs(e);return t>=1e6?r(e,2):Number.isInteger(e)?e.toLocaleString(`en-US`):n(e.toFixed(t>=100?2:t>=1?3:4))};exports.formatCompact=r,exports.formatValue=a,exports.tickFormatter=i;
2
+ //# sourceMappingURL=format.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.cjs","names":["stepDecimals","require_scale","UNITS","trim","text","formatCompact","value","abs","unit","suffix","maxDecimals","decimals","tickFormatter","maxAbs","u","step","formatValue"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values.\n\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 trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\n/** `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0` */\nexport const formatCompact = (value: number, maxDecimals = 2): 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 UNITS) {\n if (abs >= unit) return 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 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, ...) when the values are large.\n */\nexport const tickFormatter = (step: number, maxAbs: number) => {\n if (maxAbs >= 1e4) {\n const unit = UNITS.find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals);\n }\n const decimals = stepDecimals(step);\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/** Value of a tooltip: up to 4 significant decimals */\nexport const formatValue = (value: number): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2);\n if (Number.isInteger(value)) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(abs >= 100 ? 2 : abs >= 1 ? 3 : 4));\n};\n"],"mappings":"+BAIA,IAAME,EAAqC,CACzC,CAAC,aAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,CACX,EAEMC,EAAQ,GACZC,EAAK,SAAS,GAAG,EAAIA,EAAK,QAAQ,SAAU,EAAE,EAAIA,EAGvCC,GAAiB,EAAe,EAAc,IAAc,CACvE,GAAI,CAAC,OAAO,SAASC,CAAK,EAAG,OAAO,OAAOA,CAAK,EAChD,GAAI,OAAO,GAAGA,EAAO,EAAE,GAAKA,IAAU,EAAG,MAAO,IAChD,IAAMC,EAAM,KAAK,IAAID,CAAK,EAC1B,IAAK,GAAM,CAACE,EAAMC,KAAWP,EAC3B,GAAIK,GAAOC,EAAM,OAAOL,GAAMG,EAAQE,EAAA,CAAM,QAAQE,CAAW,CAAC,EAAID,EAEtE,GAAIF,EAAM,KAAM,OAAOD,EAAM,cAAc,CAAC,EAC5C,IAAMK,EAAW,KAAK,IAAI,EAAG,KAAK,IAAID,EAAaV,EAAAA,aAAaO,CAAG,EAAI,CAAC,CAAC,EACzE,OAAOJ,EAAKG,EAAM,QAAQK,CAAQ,CAAC,CACrC,EAMaC,GAAiB,EAAc,IAAmB,CAC7D,GAAIC,GAAU,IAAK,CACjB,IAAML,EAAON,EAAM,MAAM,CAACY,KAAOD,GAAUC,CAAC,CAAC,GAAG,IAAM,EAChDH,EAAW,KAAK,IAAI,EAAGX,EAAAA,aAAae,EAAOP,CAAI,CAAC,EACtD,MAAQ,IAAkBH,EAAcC,EAAOK,CAAQ,CACzD,CACA,IAAMA,EAAWX,EAAAA,aAAae,CAAI,EAClC,MAAQ,IAAkB,CACxB,IAAMX,EAAOE,EAAM,QAAQK,CAAQ,EACnC,MAAO,cAAc,KAAKP,CAAI,EAAIA,EAAK,MAAM,CAAC,EAAIA,CACpD,CACF,EAGaY,EAAe,GAA0B,CACpD,GAAI,CAAC,OAAO,SAASV,CAAK,EAAG,MAAO,IACpC,IAAMC,EAAM,KAAK,IAAID,CAAK,EAG1B,OAFIC,GAAO,IAAYF,EAAcC,EAAO,CAAC,EACzC,OAAO,UAAUA,CAAK,EAAUA,EAAM,eAAe,OAAO,EACzDH,EAAKG,EAAM,QAAQC,GAAO,IAAM,EAAIA,GAAO,EAAI,EAAI,CAAC,CAAC,CAC9D"}
@@ -0,0 +1,34 @@
1
+ import { stepDecimals as e } from "./scale.js";
2
+ //#region ../charts/src/engine/format.ts
3
+ var t = [
4
+ [0xe8d4a51000, "T"],
5
+ [1e9, "B"],
6
+ [1e6, "M"],
7
+ [1e3, "k"]
8
+ ], n = (e) => e.includes(".") ? e.replace(/\.?0+$/, "") : e, r = (r, i = 2) => {
9
+ if (!Number.isFinite(r)) return String(r);
10
+ if (Object.is(r, -0) || r === 0) return "0";
11
+ let a = Math.abs(r);
12
+ for (let [e, o] of t) if (a >= e) return n((r / e).toFixed(i)) + o;
13
+ if (a < 1e-4) return r.toExponential(1);
14
+ let o = Math.min(6, Math.max(i, e(a) + 2));
15
+ return n(r.toFixed(o));
16
+ }, i = (n, i) => {
17
+ if (i >= 1e4) {
18
+ let a = t.find(([e]) => i >= e)?.[0] ?? 1, o = Math.min(3, e(n / a));
19
+ return (e) => r(e, o);
20
+ }
21
+ let a = e(n);
22
+ return (e) => {
23
+ let t = e.toFixed(a);
24
+ return /^-0(\.0*)?$/.test(t) ? t.slice(1) : t;
25
+ };
26
+ }, a = (e) => {
27
+ if (!Number.isFinite(e)) return "–";
28
+ let t = Math.abs(e);
29
+ return t >= 1e6 ? r(e, 2) : Number.isInteger(e) ? e.toLocaleString("en-US") : n(e.toFixed(t >= 100 ? 2 : t >= 1 ? 3 : 4));
30
+ };
31
+ //#endregion
32
+ export { r as formatCompact, a as formatValue, i as tickFormatter };
33
+
34
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","names":["UNITS","trim","text","formatCompact","value","abs","unit","suffix","maxDecimals","decimals","stepDecimals","tickFormatter","maxAbs","u","step","formatValue"],"sources":["../../../../../../charts/src/engine/format.ts"],"sourcesContent":["// Number formatting of tick labels and tooltip values.\n\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 trim = (text: string) =>\n text.includes(\".\") ? text.replace(/\\.?0+$/, \"\") : text;\n\n/** `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0` */\nexport const formatCompact = (value: number, maxDecimals = 2): 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 UNITS) {\n if (abs >= unit) return 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 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, ...) when the values are large.\n */\nexport const tickFormatter = (step: number, maxAbs: number) => {\n if (maxAbs >= 1e4) {\n const unit = UNITS.find(([u]) => maxAbs >= u)?.[0] ?? 1;\n const decimals = Math.min(3, stepDecimals(step / unit));\n return (value: number) => formatCompact(value, decimals);\n }\n const decimals = stepDecimals(step);\n return (value: number) => {\n const text = value.toFixed(decimals);\n return /^-0(\\.0*)?$/.test(text) ? text.slice(1) : text;\n };\n};\n\n/** Value of a tooltip: up to 4 significant decimals */\nexport const formatValue = (value: number): string => {\n if (!Number.isFinite(value)) return \"–\";\n const abs = Math.abs(value);\n if (abs >= 1e6) return formatCompact(value, 2);\n if (Number.isInteger(value)) return value.toLocaleString(\"en-US\");\n return trim(value.toFixed(abs >= 100 ? 2 : abs >= 1 ? 3 : 4));\n};\n"],"mappings":";;AAIA,IAAMA,IAAqC;CACzC,CAAC,cAAM,GAAG;CACV,CAAC,KAAK,GAAG;CACT,CAAC,KAAK,GAAG;CACT,CAAC,KAAK,GAAG;AACX,GAEMC,KAAQ,MACZC,EAAK,SAAS,GAAG,IAAIA,EAAK,QAAQ,UAAU,EAAE,IAAIA,GAGvCC,KAAiB,GAAe,IAAc,MAAc;CACvE,IAAI,CAAC,OAAO,SAASC,CAAK,GAAG,OAAO,OAAOA,CAAK;CAChD,IAAI,OAAO,GAAGA,GAAO,EAAE,KAAKA,MAAU,GAAG,OAAO;CAChD,IAAMC,IAAM,KAAK,IAAID,CAAK;CAC1B,KAAK,IAAM,CAACE,GAAMC,MAAWP,GAC3B,IAAIK,KAAOC,GAAM,OAAOL,GAAMG,IAAQE,EAAA,CAAM,QAAQE,CAAW,CAAC,IAAID;CAEtE,IAAIF,IAAM,MAAM,OAAOD,EAAM,cAAc,CAAC;CAC5C,IAAMK,IAAW,KAAK,IAAI,GAAG,KAAK,IAAID,GAAaE,EAAaL,CAAG,IAAI,CAAC,CAAC;CACzE,OAAOJ,EAAKG,EAAM,QAAQK,CAAQ,CAAC;AACrC,GAMaE,KAAiB,GAAc,MAAmB;CAC7D,IAAIC,KAAU,KAAK;EACjB,IAAMN,IAAON,EAAM,MAAM,CAACa,OAAOD,KAAUC,CAAC,CAAC,GAAG,MAAM,GAChDJ,IAAW,KAAK,IAAI,GAAGC,EAAaI,IAAOR,CAAI,CAAC;EACtD,QAAQ,MAAkBH,EAAcC,GAAOK,CAAQ;CACzD;CACA,IAAMA,IAAWC,EAAaI,CAAI;CAClC,QAAQ,MAAkB;EACxB,IAAMZ,IAAOE,EAAM,QAAQK,CAAQ;EACnC,OAAO,cAAc,KAAKP,CAAI,IAAIA,EAAK,MAAM,CAAC,IAAIA;CACpD;AACF,GAGaa,KAAe,MAA0B;CACpD,IAAI,CAAC,OAAO,SAASX,CAAK,GAAG,OAAO;CACpC,IAAMC,IAAM,KAAK,IAAID,CAAK;CAG1B,OAFIC,KAAO,MAAYF,EAAcC,GAAO,CAAC,IACzC,OAAO,UAAUA,CAAK,IAAUA,EAAM,eAAe,OAAO,IACzDH,EAAKG,EAAM,QAAQC,KAAO,MAAM,IAAIA,KAAO,IAAI,IAAI,CAAC,CAAC;AAC9D"}
@@ -0,0 +1,2 @@
1
+ var e=(e,t,n,r)=>{let[i,a]=t.x,[o,s]=t.y,c=e.width/(a-i||1),l=e.height/(s-o||1),u=e.x,d=e.x+e.width,f=e.y,p=e.y+e.height;return{plot:e,view:t,xToPx:n?e=>d-(e-i)*c:e=>u+(e-i)*c,yToPx:r?e=>f+(e-o)*l:e=>p-(e-o)*l,pxToX:n?e=>i+(d-e)/c:e=>i+(e-u)/c,pxToY:r?e=>o+(e-f)/l:e=>o+(p-e)/l,xPerPx:1/c,yPerPx:1/l}},t=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=r.right;return{x:Math.round(o),y:Math.round(c),width:Math.max(10,Math.round(t-o-l)),height:Math.max(10,Math.round(n-c-s))}};exports.computePlot=t,exports.createScales=e;
2
+ //# sourceMappingURL=layout.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.cjs","names":["createScales","x0","x1","view","y0","y1","xs","plot","ys","left","right","top","bottom","reverseX","v","reverseY","p","computePlot","input","line","fontSize","padding","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\nexport interface Scales {\n plot: Rect;\n view: ChartView;\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): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\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 return {\n plot,\n view,\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\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest y tick label (0 when the axis is hidden) */\n yLabelWidth: number;\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 right = 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":"AAuBA,IAAaA,GACX,EACA,EACA,EACA,IACW,CACX,GAAM,CAACC,EAAIC,GAAMC,EAAK,EAChB,CAACC,EAAIC,GAAMF,EAAK,EAChBG,EAAKC,EAAK,OAASL,EAAKD,GAAM,GAC9BO,EAAKD,EAAK,QAAUF,EAAKD,GAAM,GAC/BK,EAAOF,EAAK,EACZG,EAAQH,EAAK,EAAIA,EAAK,MACtBI,EAAMJ,EAAK,EACXK,EAASL,EAAK,EAAIA,EAAK,OAC7B,MAAO,CACL,OACA,OACA,MAAOM,EACF,GAAMH,GAASI,EAAIb,GAAMK,EACzB,GAAMG,GAAQK,EAAIb,GAAMK,EAC7B,MAAOS,EACF,GAAMJ,GAAOG,EAAIV,GAAMI,EACvB,GAAMI,GAAUE,EAAIV,GAAMI,EAC/B,MAAOK,EACF,GAAMZ,GAAMS,EAAQM,GAAKV,EACzB,GAAML,GAAMe,EAAIP,GAAQH,EAC7B,MAAOS,EACF,GAAMX,GAAMY,EAAIL,GAAOH,EACvB,GAAMJ,GAAMQ,EAASI,GAAKR,EAC/B,OAAQ,EAAIF,EACZ,OAAQ,EAAIE,CACd,CACF,EAeaS,EAAe,GAA6B,CACvD,GAAM,CAAE,QAAO,SAAQ,UAAS,YAAaC,EACvCC,EAAO,KAAK,KAAKC,EAAW,GAAG,EAC/BX,EACJY,EAAQ,MACPH,EAAM,YAAc,EAAIA,EAAM,YAAc,EAAI,IAChDA,EAAM,OAASC,EAAO,EAAI,GACvBP,EACJS,EAAQ,QACPH,EAAM,aAAeC,EAAO,EAAI,IAChCD,EAAM,OAASC,EAAO,EAAI,GACvBR,EAAMU,EAAQ,IACdX,EAAQW,EAAQ,MACtB,MAAO,CACL,EAAG,KAAK,MAAMZ,CAAI,EAClB,EAAG,KAAK,MAAME,CAAG,EACjB,MAAO,KAAK,IAAI,GAAI,KAAK,MAAMW,EAAQb,EAAOC,CAAK,CAAC,EACpD,OAAQ,KAAK,IAAI,GAAI,KAAK,MAAMa,EAASZ,EAAMC,CAAM,CAAC,CACxD,CACF"}
@@ -0,0 +1,26 @@
1
+ //#region ../charts/src/engine/layout.ts
2
+ var e = (e, t, n, r) => {
3
+ let [i, a] = t.x, [o, s] = t.y, c = e.width / (a - i || 1), l = e.height / (s - o || 1), u = e.x, d = e.x + e.width, f = e.y, p = e.y + e.height;
4
+ return {
5
+ plot: e,
6
+ view: t,
7
+ xToPx: n ? (e) => d - (e - i) * c : (e) => u + (e - i) * c,
8
+ yToPx: r ? (e) => f + (e - o) * l : (e) => p - (e - o) * l,
9
+ pxToX: n ? (e) => i + (d - e) / c : (e) => i + (e - u) / c,
10
+ pxToY: r ? (e) => o + (e - f) / l : (e) => o + (p - e) / l,
11
+ xPerPx: 1 / c,
12
+ yPerPx: 1 / l
13
+ };
14
+ }, t = (e) => {
15
+ 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 = r.right;
16
+ return {
17
+ x: Math.round(o),
18
+ y: Math.round(c),
19
+ width: Math.max(10, Math.round(t - o - l)),
20
+ height: Math.max(10, Math.round(n - c - s))
21
+ };
22
+ };
23
+ //#endregion
24
+ export { t as computePlot, e as createScales };
25
+
26
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","names":["createScales","x0","x1","view","y0","y1","xs","plot","ys","left","right","top","bottom","reverseX","v","reverseY","p","computePlot","input","line","fontSize","padding","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\nexport interface Scales {\n plot: Rect;\n view: ChartView;\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): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\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 return {\n plot,\n view,\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\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest y tick label (0 when the axis is hidden) */\n yLabelWidth: number;\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 right = 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":";AAuBA,IAAaA,KACX,GACA,GACA,GACA,MACW;CACX,IAAM,CAACC,GAAIC,KAAMC,EAAK,GAChB,CAACC,GAAIC,KAAMF,EAAK,GAChBG,IAAKC,EAAK,SAASL,IAAKD,KAAM,IAC9BO,IAAKD,EAAK,UAAUF,IAAKD,KAAM,IAC/BK,IAAOF,EAAK,GACZG,IAAQH,EAAK,IAAIA,EAAK,OACtBI,IAAMJ,EAAK,GACXK,IAASL,EAAK,IAAIA,EAAK;CAC7B,OAAO;EACL;EACA;EACA,OAAOM,KACF,MAAMH,KAASI,IAAIb,KAAMK,KACzB,MAAMG,KAAQK,IAAIb,KAAMK;EAC7B,OAAOS,KACF,MAAMJ,KAAOG,IAAIV,KAAMI,KACvB,MAAMI,KAAUE,IAAIV,KAAMI;EAC/B,OAAOK,KACF,MAAMZ,KAAMS,IAAQM,KAAKV,KACzB,MAAML,KAAMe,IAAIP,KAAQH;EAC7B,OAAOS,KACF,MAAMX,KAAMY,IAAIL,KAAOH,KACvB,MAAMJ,KAAMQ,IAASI,KAAKR;EAC/B,QAAQ,IAAIF;EACZ,QAAQ,IAAIE;CACd;AACF,GAeaS,KAAe,MAA6B;CACvD,IAAM,EAAE,UAAO,WAAQ,YAAS,gBAAaC,GACvCC,IAAO,KAAK,KAAKC,IAAW,GAAG,GAC/BX,IACJY,EAAQ,QACPH,EAAM,cAAc,IAAIA,EAAM,cAAc,IAAI,MAChDA,EAAM,SAASC,IAAO,IAAI,IACvBP,IACJS,EAAQ,UACPH,EAAM,eAAeC,IAAO,IAAI,MAChCD,EAAM,SAASC,IAAO,IAAI,IACvBR,IAAMU,EAAQ,KACdX,IAAQW,EAAQ;CACtB,OAAO;EACL,GAAG,KAAK,MAAMZ,CAAI;EAClB,GAAG,KAAK,MAAME,CAAG;EACjB,OAAO,KAAK,IAAI,IAAI,KAAK,MAAMW,IAAQb,IAAOC,CAAK,CAAC;EACpD,QAAQ,KAAK,IAAI,IAAI,KAAK,MAAMa,IAASZ,IAAMC,CAAM,CAAC;CACxD;AACF"}
@@ -0,0 +1,2 @@
1
+ const e=require("./color.cjs"),t=require("./data.cjs"),n=require("./scale.cjs"),r=require("./spatial.cjs");var i=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}},a=e=>{for(let t of e){let e=i(t);if(e instanceof Date)return`time`;if(typeof e==`string`)return`category`}return`linear`},o=(e,t,n,r)=>({type:t,reverse:!!e?.reverse,categories:n,title:e?.title,format:e?.format,grid:e?.grid??r,visible:e?.visible??!0,tickCount:e?.tickCount}),s=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]},c=e=>{let t=1/0;for(let n of e){let e=n.sorted?n.x:Float64Array.from(n.x).sort();for(let r=1;r<n.count;r++){let n=e[r]-e[r-1];n>0&&n<t&&(t=n)}}return t},l=(r,i,l,u,d=null)=>{let f=d??i.resolve??((t,n)=>e.resolveStaticColor(t,{},n)),p=r.series,m=p.map(e=>e.data),h=r.xAxis?.type??a(m),g=h===`category`?[...r.xAxis?.categories??t.collectCategories(m)]:[],_=new Map(g.map((e,t)=>[e,t])),v=t.xResolver(h,e=>_.get(e)??NaN),y=`${h}|${g.join(``)}`,b=new Set,x=p.map((n,r)=>{let a=n.id??`#${r}`;for(;b.has(a);)a+=`'`;b.add(a);let o=u.get(a);(!o||o.data!==n.data||o.resolverKey!==y)&&(o={data:n.data,resolverKey:y,cols:t.normalizeData(n.data,v)},u.set(a,o));let s=n.type??`line`,c=n.color?f(n.color,i.palette[r%i.palette.length]):i.palette[r%i.palette.length],d=o.cols,p=null;if(s===`scatter`&&d.colors){let e=new Map;p=d.colors.map(t=>{if(t===void 0)return;let n=e.get(t);return n||e.set(t,n=f(t,c)),n})}let m=n.id??String(r);return{index:r,key:a,id:m,name:n.name??`Series ${r+1}`,type:s,color:c,colorCss:e.toCss(c),lineWidth:n.lineWidth??2,pointSize:n.pointSize??8,opacity:n.opacity??(s===`area`?.28:s===`scatter`?.78:1),hidden:!!n.hidden||l.has(m),showLabels:!!n.showLabels,cols:d,barOffset:0,barHalfWidth:0,barBase:null,barTop:null,pointColors:p}}),S=x.filter(e=>!e.hidden),C=x.length>0&&x.every(e=>e.type===`scatter`),w=S.filter(e=>e.type===`bar`),T=h===`category`?1:(()=>{let e=c(w.map(e=>e.cols));return Number.isFinite(e)?e:1})();if(w.length){let e=new Map;for(let t of w){let n=p[t.index].stack??`\u0000${t.key}`;e.has(n)||e.set(n,e.size)}let t=T*(e.size>1?.78:.62),n=t/e.size,r=new Map;for(let i of w){let a=p[i.index].stack??`\u0000${i.key}`,o=e.get(a)??0;i.barOffset=-t/2+n*(o+.5),i.barHalfWidth=n/2*(e.size>1?.86:1);let s=r.get(a);s||r.set(a,s=new Map);let{x:c,y:l,count:u}=i.cols;i.barBase=new Float64Array(u),i.barTop=new Float64Array(u);for(let e=0;e<u;e++){let t=l[e];if(!Number.isFinite(t)){i.barBase[e]=NaN,i.barTop[e]=NaN;continue}let n=s.get(c[e])??[0,0],r=t>=0?n[0]:n[1];i.barBase[e]=r,i.barTop[e]=r+t,t>=0?n[0]+=t:n[1]+=t,s.set(c[e],n)}}}let E=r.xAxis,D;if(h===`category`)D=[-.5,Math.max(1,g.length)-.5];else{let e=[];for(let t of S)e.push(t.cols.xMin,t.cols.xMax),t.type===`bar`&&e.push(t.cols.xMin-T/2,t.cols.xMax+T/2);if(D=n.ensureSpan(...s(e),h===`time`?[Date.now()-864e5,Date.now()]:[0,1]),C){let e=(D[1]-D[0])*.04;D=[D[0]-e,D[1]+e]}(E?.nice??(C&&h===`linear`))&&h===`linear`&&(D=n.niceDomain(D[0],D[1],E?.tickCount??6))}E?.min!==void 0&&(D[0]=E.min),E?.max!==void 0&&(D[1]=E.max),D=n.ensureSpan(D[0],D[1]);let O=r.yAxis,k=[];for(let e of S)e.type===`bar`&&e.barBase&&e.barTop?k.push(...s(e.barBase),...s(e.barTop)):k.push(e.cols.yMin,e.cols.yMax);(w.length||O?.zero)&&k.push(0);let A=n.ensureSpan(...s(k));if(C){let e=(A[1]-A[0])*.06;A=[A[0]-e,A[1]+e]}(O?.nice??!0)&&(O?.type??`linear`)===`linear`&&(A=n.niceDomain(A[0],A[1],O?.tickCount??5)),w.length&&!O?.zero&&A[0]<0&&s(k)[0]>=0&&(A[0]=0),O?.min!==void 0&&(A[0]=O.min),O?.max!==void 0&&(A[1]=O.max),A=n.ensureSpan(A[0],A[1]);let j=r.interaction===!1?!1:r.interaction===!0||r.interaction===void 0?!0:r.interaction.zoom??!0,M=j===!1?{x:!1,y:!1}:j===!0?{x:!0,y:C}:{x:j.includes(`x`),y:j.includes(`y`)},N=typeof r.tooltip==`object`?r.tooltip:void 0;return{series:x,x:o(E,h,g,!1),y:o(O,O?.type===`time`?`time`:`linear`,[],!0),base:{x:D,y:A},allScatter:C,zoom:M,tooltipMode:N?.mode??(C?`nearest`:`axis`),baseline:Math.min(Math.max(0,A[0]),A[1]),minSpan:{x:h===`category`?1:(D[1]-D[0])*1e-7,y:(A[1]-A[0])*1e-7}}},u=new WeakMap,d=e=>{let t=u.get(e.cols);return t||(t=new r.GridIndex(e.cols.x,e.cols.y,e.cols.count),u.set(e.cols,t)),t};exports.buildModel=l,exports.detectXType=a,exports.gridOf=d;
2
+ //# sourceMappingURL=model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.cjs","names":["resolveStaticColor","collectCategories","xResolver","normalizeData","toCss","ensureSpan","niceDomain","GridIndex","require_color","require_data","require_scale","require_spatial","firstX","data","xs","list","i","item","detectXType","datas","x","axisModel","options","gridDefault","extent","min","max","values","v","smallestStep","step","c","cols","d","buildModel","resolve","resolver","theme","value","fallback","input","s","xType","categories","categoryMap","resolveX","name","resolverKey","usedKeys","series","key","index","entry","cache","type","color","pointColors","resolved","rgba","id","hidden","visible","allScatter","bars","band","slots","stack","group","slotWidth","sums","slot","totals","count","y","t","base","xOpts","xRange","pad","yOpts","yValues","yRange","zoomOption","zoomAxes","tooltip","grids","gridOf","grid"],"sources":["../../../../../../charts/src/engine/model.ts"],"sourcesContent":["// Options -> chart model: normalized data, colors, bar layout and the full\n// ranges of the axes. Pure (colors go through the theme's resolver).\n\nimport {\n resolveStaticColor,\n toCss,\n type ColorResolver,\n type Rgba,\n} from \"./color\";\nimport {\n collectCategories,\n normalizeData,\n xResolver,\n type SeriesColumns,\n} from \"./data\";\nimport { ensureSpan, niceDomain } from \"./scale\";\nimport { GridIndex } from \"./spatial\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAxisOptions,\n ChartAxisType,\n ChartOptions,\n ChartSeriesData,\n ChartSeriesType,\n} from \"./types\";\nimport type { Range } from \"./viewport\";\n\nexport interface AxisModel {\n type: ChartAxisType;\n reverse: boolean;\n categories: string[];\n title?: string;\n format?: (value: number) => string;\n grid: boolean;\n visible: boolean;\n tickCount?: number;\n}\n\nexport interface SeriesModel {\n index: number;\n /** Key of the GPU resources and of the data cache */\n key: string;\n id: string;\n name: string;\n type: ChartSeriesType;\n color: Rgba;\n colorCss: string;\n lineWidth: number;\n pointSize: number;\n opacity: number;\n hidden: boolean;\n showLabels: boolean;\n cols: SeriesColumns;\n /** Bars: x offset of the series inside a group and half of the bar width */\n barOffset: number;\n barHalfWidth: number;\n /** Bars: bottom / top of every bar (stacks included) */\n barBase: Float64Array | null;\n barTop: Float64Array | null;\n /** Scatter: resolved per-point colors */\n pointColors: (Rgba | undefined)[] | null;\n}\n\nexport interface ChartModel {\n series: SeriesModel[];\n x: AxisModel;\n y: AxisModel;\n /** Full ranges (zoomed out) */\n base: { x: Range; y: Range };\n allScatter: boolean;\n zoom: { x: boolean; y: boolean };\n tooltipMode: \"nearest\" | \"axis\";\n /** Y value the areas are filled to */\n baseline: number;\n /** Smallest zoomed spans */\n minSpan: { x: number; y: number };\n}\n\nexport interface DataCacheEntry {\n data: ChartSeriesData;\n resolverKey: string;\n cols: SeriesColumns;\n}\n\nexport type DataCache = Map<string, DataCacheEntry>;\n\nconst firstX = (data: ChartSeriesData): unknown => {\n if (typeof data === \"object\" && data !== null && !(\"length\" in data)) {\n const xs = (data as { x?: ArrayLike<unknown> }).x;\n return xs && xs.length ? xs[0] : undefined;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < Math.min(list.length, 8); i++) {\n const item = list[i];\n if (Array.isArray(item)) return item[0];\n if (item && typeof item === \"object\") return (item as { x?: unknown }).x;\n }\n return undefined;\n};\n\n/** Axis type when not given: dates -> time, strings -> category */\nexport const detectXType = (\n datas: readonly ChartSeriesData[],\n): ChartAxisType => {\n for (const data of datas) {\n const x = firstX(data);\n if (x instanceof Date) return \"time\";\n if (typeof x === \"string\") return \"category\";\n }\n return \"linear\";\n};\n\nconst axisModel = (\n options: ChartAxisOptions | undefined,\n type: ChartAxisType,\n categories: string[],\n gridDefault: boolean,\n): AxisModel => ({\n type,\n reverse: !!options?.reverse,\n categories,\n title: options?.title,\n format: options?.format,\n grid: options?.grid ?? gridDefault,\n visible: options?.visible ?? true,\n tickCount: options?.tickCount,\n});\n\nconst extent = (values: ArrayLike<number>): Range => {\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (!Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return [min, max];\n};\n\n/** Smallest positive gap between consecutive x values (bar width on numeric axes) */\nconst smallestStep = (cols: SeriesColumns[]): number => {\n let step = Infinity;\n for (const c of cols) {\n const xs = c.sorted ? c.x : Float64Array.from(c.x).sort();\n for (let i = 1; i < c.count; i++) {\n const d = xs[i] - xs[i - 1];\n if (d > 0 && d < step) step = d;\n }\n }\n return step;\n};\n\nexport const buildModel = (\n options: ChartOptions,\n theme: ChartTheme,\n hidden: ReadonlySet<string>,\n cache: DataCache,\n resolver: ColorResolver | null = null,\n): ChartModel => {\n const resolve: ColorResolver =\n resolver ??\n theme.resolve ??\n ((value, fallback) => resolveStaticColor(value, {}, fallback));\n const input = options.series;\n const datas = input.map((s) => s.data);\n const xType = options.xAxis?.type ?? detectXType(datas);\n const categories =\n xType === \"category\"\n ? [...(options.xAxis?.categories ?? collectCategories(datas))]\n : [];\n const categoryMap = new Map(categories.map((c, i) => [c, i]));\n const resolveX = xResolver(xType, (name) => categoryMap.get(name) ?? NaN);\n const resolverKey = `${xType}|${categories.join(\"\\u0001\")}`;\n\n const usedKeys = new Set<string>();\n const series: SeriesModel[] = input.map((s, index) => {\n let key = s.id ?? `#${index}`;\n while (usedKeys.has(key)) key += \"'\";\n usedKeys.add(key);\n let entry = cache.get(key);\n if (!entry || entry.data !== s.data || entry.resolverKey !== resolverKey) {\n entry = {\n data: s.data,\n resolverKey,\n cols: normalizeData(s.data, resolveX),\n };\n cache.set(key, entry);\n }\n const type = s.type ?? \"line\";\n const color = s.color\n ? resolve(s.color, theme.palette[index % theme.palette.length])\n : theme.palette[index % theme.palette.length];\n const cols = entry.cols;\n let pointColors: (Rgba | undefined)[] | null = null;\n if (type === \"scatter\" && cols.colors) {\n const resolved = new Map<string, Rgba>();\n pointColors = cols.colors.map((c) => {\n if (c === undefined) return undefined;\n let rgba = resolved.get(c);\n if (!rgba) resolved.set(c, (rgba = resolve(c, color)));\n return rgba;\n });\n }\n const id = s.id ?? String(index);\n return {\n index,\n key,\n id,\n name: s.name ?? `Series ${index + 1}`,\n type,\n color,\n colorCss: toCss(color),\n lineWidth: s.lineWidth ?? 2,\n pointSize: s.pointSize ?? 8,\n opacity:\n s.opacity ?? (type === \"area\" ? 0.28 : type === \"scatter\" ? 0.78 : 1),\n hidden: !!s.hidden || hidden.has(id),\n showLabels: !!s.showLabels,\n cols,\n barOffset: 0,\n barHalfWidth: 0,\n barBase: null,\n barTop: null,\n pointColors,\n };\n });\n\n const visible = series.filter((s) => !s.hidden);\n const allScatter =\n series.length > 0 && series.every((s) => s.type === \"scatter\");\n\n // Bars: groups (one slot per stack) and stacking\n const bars = visible.filter((s) => s.type === \"bar\");\n const band =\n xType === \"category\"\n ? 1\n : (() => {\n const step = smallestStep(bars.map((s) => s.cols));\n return Number.isFinite(step) ? step : 1;\n })();\n if (bars.length) {\n const slots = new Map<string, number>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n if (!slots.has(stack)) slots.set(stack, slots.size);\n }\n const group = band * (slots.size > 1 ? 0.78 : 0.62);\n const slotWidth = group / slots.size;\n const sums = new Map<string, Map<number, [number, number]>>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n const slot = slots.get(stack) ?? 0;\n s.barOffset = -group / 2 + slotWidth * (slot + 0.5);\n s.barHalfWidth = (slotWidth / 2) * (slots.size > 1 ? 0.86 : 1);\n let totals = sums.get(stack);\n if (!totals) sums.set(stack, (totals = new Map()));\n const { x, y, count } = s.cols;\n s.barBase = new Float64Array(count);\n s.barTop = new Float64Array(count);\n for (let i = 0; i < count; i++) {\n const v = y[i];\n if (!Number.isFinite(v)) {\n s.barBase[i] = NaN;\n s.barTop[i] = NaN;\n continue;\n }\n const t = totals.get(x[i]) ?? [0, 0];\n const base = v >= 0 ? t[0] : t[1];\n s.barBase[i] = base;\n s.barTop[i] = base + v;\n if (v >= 0) t[0] += v;\n else t[1] += v;\n totals.set(x[i], t);\n }\n }\n }\n\n // X range\n const xOpts = options.xAxis;\n let xRange: Range;\n if (xType === \"category\") {\n xRange = [-0.5, Math.max(1, categories.length) - 0.5];\n } else {\n const values: number[] = [];\n for (const s of visible) {\n values.push(s.cols.xMin, s.cols.xMax);\n if (s.type === \"bar\") {\n values.push(s.cols.xMin - band / 2, s.cols.xMax + band / 2);\n }\n }\n xRange = ensureSpan(\n ...extent(values),\n xType === \"time\" ? [Date.now() - 86400000, Date.now()] : [0, 1],\n );\n if (allScatter) {\n const pad = (xRange[1] - xRange[0]) * 0.04;\n xRange = [xRange[0] - pad, xRange[1] + pad];\n }\n const nice = xOpts?.nice ?? (allScatter && xType === \"linear\");\n if (nice && xType === \"linear\") {\n xRange = niceDomain(xRange[0], xRange[1], xOpts?.tickCount ?? 6);\n }\n }\n if (xOpts?.min !== undefined) xRange[0] = xOpts.min;\n if (xOpts?.max !== undefined) xRange[1] = xOpts.max;\n xRange = ensureSpan(xRange[0], xRange[1]);\n\n // Y range\n const yOpts = options.yAxis;\n const yValues: number[] = [];\n for (const s of visible) {\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n yValues.push(...extent(s.barBase), ...extent(s.barTop));\n } else {\n yValues.push(s.cols.yMin, s.cols.yMax);\n }\n }\n if (bars.length || yOpts?.zero) yValues.push(0);\n let yRange = ensureSpan(...extent(yValues));\n if (allScatter) {\n const pad = (yRange[1] - yRange[0]) * 0.06;\n yRange = [yRange[0] - pad, yRange[1] + pad];\n }\n if ((yOpts?.nice ?? true) && (yOpts?.type ?? \"linear\") === \"linear\") {\n yRange = niceDomain(yRange[0], yRange[1], yOpts?.tickCount ?? 5);\n }\n if (bars.length && !yOpts?.zero) {\n // bars start at zero: no padding below / above it\n if (yRange[0] < 0 && extent(yValues)[0] >= 0) yRange[0] = 0;\n }\n if (yOpts?.min !== undefined) yRange[0] = yOpts.min;\n if (yOpts?.max !== undefined) yRange[1] = yOpts.max;\n yRange = ensureSpan(yRange[0], yRange[1]);\n\n const zoomOption =\n options.interaction === false\n ? false\n : options.interaction === true || options.interaction === undefined\n ? true\n : (options.interaction.zoom ?? true);\n const zoomAxes =\n zoomOption === false\n ? { x: false, y: false }\n : zoomOption === true\n ? { x: true, y: allScatter }\n : { x: zoomOption.includes(\"x\"), y: zoomOption.includes(\"y\") };\n\n const tooltip =\n typeof options.tooltip === \"object\" ? options.tooltip : undefined;\n\n return {\n series,\n x: axisModel(xOpts, xType, categories, false),\n y: axisModel(yOpts, yOpts?.type === \"time\" ? \"time\" : \"linear\", [], true),\n base: { x: xRange, y: yRange },\n allScatter,\n zoom: zoomAxes,\n tooltipMode: tooltip?.mode ?? (allScatter ? \"nearest\" : \"axis\"),\n baseline: Math.min(Math.max(0, yRange[0]), yRange[1]),\n minSpan: {\n x: xType === \"category\" ? 1 : (xRange[1] - xRange[0]) * 1e-7,\n y: (yRange[1] - yRange[0]) * 1e-7,\n },\n };\n};\n\nconst grids = new WeakMap<SeriesColumns, GridIndex>();\n\n/** Spatial index of a scatter series, built on first use and kept with its data */\nexport const gridOf = (s: SeriesModel): GridIndex => {\n let grid = grids.get(s.cols);\n if (!grid) {\n grid = new GridIndex(s.cols.x, s.cols.y, s.cols.count);\n grids.set(s.cols, grid);\n }\n return grid;\n};\n"],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { resolveStaticColor as e, toCss as t } from "./color.js";
2
+ import { collectCategories as n, normalizeData as r, xResolver as i } from "./data.js";
3
+ import { ensureSpan as a, niceDomain as o } from "./scale.js";
4
+ import { GridIndex as s } from "./spatial.js";
5
+ //#region ../charts/src/engine/model.ts
6
+ var c = (e) => {
7
+ if (typeof e == "object" && e && !("length" in e)) {
8
+ let t = e.x;
9
+ return t && t.length ? t[0] : void 0;
10
+ }
11
+ let t = e;
12
+ for (let e = 0; e < Math.min(t.length, 8); e++) {
13
+ let n = t[e];
14
+ if (Array.isArray(n)) return n[0];
15
+ if (n && typeof n == "object") return n.x;
16
+ }
17
+ }, l = (e) => {
18
+ for (let t of e) {
19
+ let e = c(t);
20
+ if (e instanceof Date) return "time";
21
+ if (typeof e == "string") return "category";
22
+ }
23
+ return "linear";
24
+ }, u = (e, t, n, r) => ({
25
+ type: t,
26
+ reverse: !!e?.reverse,
27
+ categories: n,
28
+ title: e?.title,
29
+ format: e?.format,
30
+ grid: e?.grid ?? r,
31
+ visible: e?.visible ?? !0,
32
+ tickCount: e?.tickCount
33
+ }), d = (e) => {
34
+ let t = Infinity, n = -Infinity;
35
+ for (let r = 0; r < e.length; r++) {
36
+ let i = e[r];
37
+ Number.isFinite(i) && (i < t && (t = i), i > n && (n = i));
38
+ }
39
+ return [t, n];
40
+ }, f = (e) => {
41
+ let t = Infinity;
42
+ for (let n of e) {
43
+ let e = n.sorted ? n.x : Float64Array.from(n.x).sort();
44
+ for (let r = 1; r < n.count; r++) {
45
+ let n = e[r] - e[r - 1];
46
+ n > 0 && n < t && (t = n);
47
+ }
48
+ }
49
+ return t;
50
+ }, p = (s, c, p, m, h = null) => {
51
+ let g = h ?? c.resolve ?? ((t, n) => e(t, {}, n)), _ = s.series, v = _.map((e) => e.data), y = s.xAxis?.type ?? l(v), b = y === "category" ? [...s.xAxis?.categories ?? n(v)] : [], x = new Map(b.map((e, t) => [e, t])), S = i(y, (e) => x.get(e) ?? NaN), C = `${y}|${b.join("")}`, w = /* @__PURE__ */ new Set(), T = _.map((e, n) => {
52
+ let i = e.id ?? `#${n}`;
53
+ for (; w.has(i);) i += "'";
54
+ w.add(i);
55
+ let a = m.get(i);
56
+ (!a || a.data !== e.data || a.resolverKey !== C) && (a = {
57
+ data: e.data,
58
+ resolverKey: C,
59
+ cols: r(e.data, S)
60
+ }, m.set(i, a));
61
+ let o = e.type ?? "line", s = e.color ? g(e.color, c.palette[n % c.palette.length]) : c.palette[n % c.palette.length], l = a.cols, u = null;
62
+ if (o === "scatter" && l.colors) {
63
+ let e = /* @__PURE__ */ new Map();
64
+ u = l.colors.map((t) => {
65
+ if (t === void 0) return;
66
+ let n = e.get(t);
67
+ return n || e.set(t, n = g(t, s)), n;
68
+ });
69
+ }
70
+ let d = e.id ?? String(n);
71
+ return {
72
+ index: n,
73
+ key: i,
74
+ id: d,
75
+ name: e.name ?? `Series ${n + 1}`,
76
+ type: o,
77
+ color: s,
78
+ colorCss: t(s),
79
+ lineWidth: e.lineWidth ?? 2,
80
+ pointSize: e.pointSize ?? 8,
81
+ opacity: e.opacity ?? (o === "area" ? .28 : o === "scatter" ? .78 : 1),
82
+ hidden: !!e.hidden || p.has(d),
83
+ showLabels: !!e.showLabels,
84
+ cols: l,
85
+ barOffset: 0,
86
+ barHalfWidth: 0,
87
+ barBase: null,
88
+ barTop: null,
89
+ pointColors: u
90
+ };
91
+ }), E = T.filter((e) => !e.hidden), D = T.length > 0 && T.every((e) => e.type === "scatter"), O = E.filter((e) => e.type === "bar"), k = y === "category" ? 1 : (() => {
92
+ let e = f(O.map((e) => e.cols));
93
+ return Number.isFinite(e) ? e : 1;
94
+ })();
95
+ if (O.length) {
96
+ let e = /* @__PURE__ */ new Map();
97
+ for (let t of O) {
98
+ let n = _[t.index].stack ?? `\u0000${t.key}`;
99
+ e.has(n) || e.set(n, e.size);
100
+ }
101
+ let t = k * (e.size > 1 ? .78 : .62), n = t / e.size, r = /* @__PURE__ */ new Map();
102
+ for (let i of O) {
103
+ let a = _[i.index].stack ?? `\u0000${i.key}`, o = e.get(a) ?? 0;
104
+ i.barOffset = -t / 2 + n * (o + .5), i.barHalfWidth = n / 2 * (e.size > 1 ? .86 : 1);
105
+ let s = r.get(a);
106
+ s || r.set(a, s = /* @__PURE__ */ new Map());
107
+ let { x: c, y: l, count: u } = i.cols;
108
+ i.barBase = new Float64Array(u), i.barTop = new Float64Array(u);
109
+ for (let e = 0; e < u; e++) {
110
+ let t = l[e];
111
+ if (!Number.isFinite(t)) {
112
+ i.barBase[e] = NaN, i.barTop[e] = NaN;
113
+ continue;
114
+ }
115
+ let n = s.get(c[e]) ?? [0, 0], r = t >= 0 ? n[0] : n[1];
116
+ i.barBase[e] = r, i.barTop[e] = r + t, t >= 0 ? n[0] += t : n[1] += t, s.set(c[e], n);
117
+ }
118
+ }
119
+ }
120
+ let A = s.xAxis, j;
121
+ if (y === "category") j = [-.5, Math.max(1, b.length) - .5];
122
+ else {
123
+ let e = [];
124
+ for (let t of E) e.push(t.cols.xMin, t.cols.xMax), t.type === "bar" && e.push(t.cols.xMin - k / 2, t.cols.xMax + k / 2);
125
+ if (j = a(...d(e), y === "time" ? [Date.now() - 864e5, Date.now()] : [0, 1]), D) {
126
+ let e = (j[1] - j[0]) * .04;
127
+ j = [j[0] - e, j[1] + e];
128
+ }
129
+ (A?.nice ?? (D && y === "linear")) && y === "linear" && (j = o(j[0], j[1], A?.tickCount ?? 6));
130
+ }
131
+ A?.min !== void 0 && (j[0] = A.min), A?.max !== void 0 && (j[1] = A.max), j = a(j[0], j[1]);
132
+ let M = s.yAxis, N = [];
133
+ for (let e of E) e.type === "bar" && e.barBase && e.barTop ? N.push(...d(e.barBase), ...d(e.barTop)) : N.push(e.cols.yMin, e.cols.yMax);
134
+ (O.length || M?.zero) && N.push(0);
135
+ let P = a(...d(N));
136
+ if (D) {
137
+ let e = (P[1] - P[0]) * .06;
138
+ P = [P[0] - e, P[1] + e];
139
+ }
140
+ (M?.nice ?? !0) && (M?.type ?? "linear") === "linear" && (P = o(P[0], P[1], M?.tickCount ?? 5)), O.length && !M?.zero && P[0] < 0 && d(N)[0] >= 0 && (P[0] = 0), M?.min !== void 0 && (P[0] = M.min), M?.max !== void 0 && (P[1] = M.max), P = a(P[0], P[1]);
141
+ let F = s.interaction === !1 ? !1 : s.interaction === !0 || s.interaction === void 0 ? !0 : s.interaction.zoom ?? !0, I = F === !1 ? {
142
+ x: !1,
143
+ y: !1
144
+ } : F === !0 ? {
145
+ x: !0,
146
+ y: D
147
+ } : {
148
+ x: F.includes("x"),
149
+ y: F.includes("y")
150
+ }, L = typeof s.tooltip == "object" ? s.tooltip : void 0;
151
+ return {
152
+ series: T,
153
+ x: u(A, y, b, !1),
154
+ y: u(M, M?.type === "time" ? "time" : "linear", [], !0),
155
+ base: {
156
+ x: j,
157
+ y: P
158
+ },
159
+ allScatter: D,
160
+ zoom: I,
161
+ tooltipMode: L?.mode ?? (D ? "nearest" : "axis"),
162
+ baseline: Math.min(Math.max(0, P[0]), P[1]),
163
+ minSpan: {
164
+ x: y === "category" ? 1 : (j[1] - j[0]) * 1e-7,
165
+ y: (P[1] - P[0]) * 1e-7
166
+ }
167
+ };
168
+ }, m = /* @__PURE__ */ new WeakMap(), h = (e) => {
169
+ let t = m.get(e.cols);
170
+ return t || (t = new s(e.cols.x, e.cols.y, e.cols.count), m.set(e.cols, t)), t;
171
+ };
172
+ //#endregion
173
+ export { p as buildModel, l as detectXType, h as gridOf };
174
+
175
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","names":["firstX","data","xs","list","i","item","detectXType","datas","x","axisModel","options","gridDefault","extent","min","max","values","v","smallestStep","step","c","cols","d","buildModel","resolve","resolver","theme","resolveStaticColor","value","fallback","input","s","xType","categories","collectCategories","categoryMap","resolveX","xResolver","name","resolverKey","usedKeys","series","key","index","entry","cache","normalizeData","type","color","pointColors","resolved","rgba","id","toCss","hidden","visible","allScatter","bars","band","slots","stack","group","slotWidth","sums","slot","totals","count","y","t","base","xOpts","xRange","ensureSpan","pad","niceDomain","yOpts","yValues","yRange","zoomOption","zoomAxes","tooltip","grids","gridOf","grid","GridIndex"],"sources":["../../../../../../charts/src/engine/model.ts"],"sourcesContent":["// Options -> chart model: normalized data, colors, bar layout and the full\n// ranges of the axes. Pure (colors go through the theme's resolver).\n\nimport {\n resolveStaticColor,\n toCss,\n type ColorResolver,\n type Rgba,\n} from \"./color\";\nimport {\n collectCategories,\n normalizeData,\n xResolver,\n type SeriesColumns,\n} from \"./data\";\nimport { ensureSpan, niceDomain } from \"./scale\";\nimport { GridIndex } from \"./spatial\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAxisOptions,\n ChartAxisType,\n ChartOptions,\n ChartSeriesData,\n ChartSeriesType,\n} from \"./types\";\nimport type { Range } from \"./viewport\";\n\nexport interface AxisModel {\n type: ChartAxisType;\n reverse: boolean;\n categories: string[];\n title?: string;\n format?: (value: number) => string;\n grid: boolean;\n visible: boolean;\n tickCount?: number;\n}\n\nexport interface SeriesModel {\n index: number;\n /** Key of the GPU resources and of the data cache */\n key: string;\n id: string;\n name: string;\n type: ChartSeriesType;\n color: Rgba;\n colorCss: string;\n lineWidth: number;\n pointSize: number;\n opacity: number;\n hidden: boolean;\n showLabels: boolean;\n cols: SeriesColumns;\n /** Bars: x offset of the series inside a group and half of the bar width */\n barOffset: number;\n barHalfWidth: number;\n /** Bars: bottom / top of every bar (stacks included) */\n barBase: Float64Array | null;\n barTop: Float64Array | null;\n /** Scatter: resolved per-point colors */\n pointColors: (Rgba | undefined)[] | null;\n}\n\nexport interface ChartModel {\n series: SeriesModel[];\n x: AxisModel;\n y: AxisModel;\n /** Full ranges (zoomed out) */\n base: { x: Range; y: Range };\n allScatter: boolean;\n zoom: { x: boolean; y: boolean };\n tooltipMode: \"nearest\" | \"axis\";\n /** Y value the areas are filled to */\n baseline: number;\n /** Smallest zoomed spans */\n minSpan: { x: number; y: number };\n}\n\nexport interface DataCacheEntry {\n data: ChartSeriesData;\n resolverKey: string;\n cols: SeriesColumns;\n}\n\nexport type DataCache = Map<string, DataCacheEntry>;\n\nconst firstX = (data: ChartSeriesData): unknown => {\n if (typeof data === \"object\" && data !== null && !(\"length\" in data)) {\n const xs = (data as { x?: ArrayLike<unknown> }).x;\n return xs && xs.length ? xs[0] : undefined;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < Math.min(list.length, 8); i++) {\n const item = list[i];\n if (Array.isArray(item)) return item[0];\n if (item && typeof item === \"object\") return (item as { x?: unknown }).x;\n }\n return undefined;\n};\n\n/** Axis type when not given: dates -> time, strings -> category */\nexport const detectXType = (\n datas: readonly ChartSeriesData[],\n): ChartAxisType => {\n for (const data of datas) {\n const x = firstX(data);\n if (x instanceof Date) return \"time\";\n if (typeof x === \"string\") return \"category\";\n }\n return \"linear\";\n};\n\nconst axisModel = (\n options: ChartAxisOptions | undefined,\n type: ChartAxisType,\n categories: string[],\n gridDefault: boolean,\n): AxisModel => ({\n type,\n reverse: !!options?.reverse,\n categories,\n title: options?.title,\n format: options?.format,\n grid: options?.grid ?? gridDefault,\n visible: options?.visible ?? true,\n tickCount: options?.tickCount,\n});\n\nconst extent = (values: ArrayLike<number>): Range => {\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (!Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return [min, max];\n};\n\n/** Smallest positive gap between consecutive x values (bar width on numeric axes) */\nconst smallestStep = (cols: SeriesColumns[]): number => {\n let step = Infinity;\n for (const c of cols) {\n const xs = c.sorted ? c.x : Float64Array.from(c.x).sort();\n for (let i = 1; i < c.count; i++) {\n const d = xs[i] - xs[i - 1];\n if (d > 0 && d < step) step = d;\n }\n }\n return step;\n};\n\nexport const buildModel = (\n options: ChartOptions,\n theme: ChartTheme,\n hidden: ReadonlySet<string>,\n cache: DataCache,\n resolver: ColorResolver | null = null,\n): ChartModel => {\n const resolve: ColorResolver =\n resolver ??\n theme.resolve ??\n ((value, fallback) => resolveStaticColor(value, {}, fallback));\n const input = options.series;\n const datas = input.map((s) => s.data);\n const xType = options.xAxis?.type ?? detectXType(datas);\n const categories =\n xType === \"category\"\n ? [...(options.xAxis?.categories ?? collectCategories(datas))]\n : [];\n const categoryMap = new Map(categories.map((c, i) => [c, i]));\n const resolveX = xResolver(xType, (name) => categoryMap.get(name) ?? NaN);\n const resolverKey = `${xType}|${categories.join(\"\\u0001\")}`;\n\n const usedKeys = new Set<string>();\n const series: SeriesModel[] = input.map((s, index) => {\n let key = s.id ?? `#${index}`;\n while (usedKeys.has(key)) key += \"'\";\n usedKeys.add(key);\n let entry = cache.get(key);\n if (!entry || entry.data !== s.data || entry.resolverKey !== resolverKey) {\n entry = {\n data: s.data,\n resolverKey,\n cols: normalizeData(s.data, resolveX),\n };\n cache.set(key, entry);\n }\n const type = s.type ?? \"line\";\n const color = s.color\n ? resolve(s.color, theme.palette[index % theme.palette.length])\n : theme.palette[index % theme.palette.length];\n const cols = entry.cols;\n let pointColors: (Rgba | undefined)[] | null = null;\n if (type === \"scatter\" && cols.colors) {\n const resolved = new Map<string, Rgba>();\n pointColors = cols.colors.map((c) => {\n if (c === undefined) return undefined;\n let rgba = resolved.get(c);\n if (!rgba) resolved.set(c, (rgba = resolve(c, color)));\n return rgba;\n });\n }\n const id = s.id ?? String(index);\n return {\n index,\n key,\n id,\n name: s.name ?? `Series ${index + 1}`,\n type,\n color,\n colorCss: toCss(color),\n lineWidth: s.lineWidth ?? 2,\n pointSize: s.pointSize ?? 8,\n opacity:\n s.opacity ?? (type === \"area\" ? 0.28 : type === \"scatter\" ? 0.78 : 1),\n hidden: !!s.hidden || hidden.has(id),\n showLabels: !!s.showLabels,\n cols,\n barOffset: 0,\n barHalfWidth: 0,\n barBase: null,\n barTop: null,\n pointColors,\n };\n });\n\n const visible = series.filter((s) => !s.hidden);\n const allScatter =\n series.length > 0 && series.every((s) => s.type === \"scatter\");\n\n // Bars: groups (one slot per stack) and stacking\n const bars = visible.filter((s) => s.type === \"bar\");\n const band =\n xType === \"category\"\n ? 1\n : (() => {\n const step = smallestStep(bars.map((s) => s.cols));\n return Number.isFinite(step) ? step : 1;\n })();\n if (bars.length) {\n const slots = new Map<string, number>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n if (!slots.has(stack)) slots.set(stack, slots.size);\n }\n const group = band * (slots.size > 1 ? 0.78 : 0.62);\n const slotWidth = group / slots.size;\n const sums = new Map<string, Map<number, [number, number]>>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n const slot = slots.get(stack) ?? 0;\n s.barOffset = -group / 2 + slotWidth * (slot + 0.5);\n s.barHalfWidth = (slotWidth / 2) * (slots.size > 1 ? 0.86 : 1);\n let totals = sums.get(stack);\n if (!totals) sums.set(stack, (totals = new Map()));\n const { x, y, count } = s.cols;\n s.barBase = new Float64Array(count);\n s.barTop = new Float64Array(count);\n for (let i = 0; i < count; i++) {\n const v = y[i];\n if (!Number.isFinite(v)) {\n s.barBase[i] = NaN;\n s.barTop[i] = NaN;\n continue;\n }\n const t = totals.get(x[i]) ?? [0, 0];\n const base = v >= 0 ? t[0] : t[1];\n s.barBase[i] = base;\n s.barTop[i] = base + v;\n if (v >= 0) t[0] += v;\n else t[1] += v;\n totals.set(x[i], t);\n }\n }\n }\n\n // X range\n const xOpts = options.xAxis;\n let xRange: Range;\n if (xType === \"category\") {\n xRange = [-0.5, Math.max(1, categories.length) - 0.5];\n } else {\n const values: number[] = [];\n for (const s of visible) {\n values.push(s.cols.xMin, s.cols.xMax);\n if (s.type === \"bar\") {\n values.push(s.cols.xMin - band / 2, s.cols.xMax + band / 2);\n }\n }\n xRange = ensureSpan(\n ...extent(values),\n xType === \"time\" ? [Date.now() - 86400000, Date.now()] : [0, 1],\n );\n if (allScatter) {\n const pad = (xRange[1] - xRange[0]) * 0.04;\n xRange = [xRange[0] - pad, xRange[1] + pad];\n }\n const nice = xOpts?.nice ?? (allScatter && xType === \"linear\");\n if (nice && xType === \"linear\") {\n xRange = niceDomain(xRange[0], xRange[1], xOpts?.tickCount ?? 6);\n }\n }\n if (xOpts?.min !== undefined) xRange[0] = xOpts.min;\n if (xOpts?.max !== undefined) xRange[1] = xOpts.max;\n xRange = ensureSpan(xRange[0], xRange[1]);\n\n // Y range\n const yOpts = options.yAxis;\n const yValues: number[] = [];\n for (const s of visible) {\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n yValues.push(...extent(s.barBase), ...extent(s.barTop));\n } else {\n yValues.push(s.cols.yMin, s.cols.yMax);\n }\n }\n if (bars.length || yOpts?.zero) yValues.push(0);\n let yRange = ensureSpan(...extent(yValues));\n if (allScatter) {\n const pad = (yRange[1] - yRange[0]) * 0.06;\n yRange = [yRange[0] - pad, yRange[1] + pad];\n }\n if ((yOpts?.nice ?? true) && (yOpts?.type ?? \"linear\") === \"linear\") {\n yRange = niceDomain(yRange[0], yRange[1], yOpts?.tickCount ?? 5);\n }\n if (bars.length && !yOpts?.zero) {\n // bars start at zero: no padding below / above it\n if (yRange[0] < 0 && extent(yValues)[0] >= 0) yRange[0] = 0;\n }\n if (yOpts?.min !== undefined) yRange[0] = yOpts.min;\n if (yOpts?.max !== undefined) yRange[1] = yOpts.max;\n yRange = ensureSpan(yRange[0], yRange[1]);\n\n const zoomOption =\n options.interaction === false\n ? false\n : options.interaction === true || options.interaction === undefined\n ? true\n : (options.interaction.zoom ?? true);\n const zoomAxes =\n zoomOption === false\n ? { x: false, y: false }\n : zoomOption === true\n ? { x: true, y: allScatter }\n : { x: zoomOption.includes(\"x\"), y: zoomOption.includes(\"y\") };\n\n const tooltip =\n typeof options.tooltip === \"object\" ? options.tooltip : undefined;\n\n return {\n series,\n x: axisModel(xOpts, xType, categories, false),\n y: axisModel(yOpts, yOpts?.type === \"time\" ? \"time\" : \"linear\", [], true),\n base: { x: xRange, y: yRange },\n allScatter,\n zoom: zoomAxes,\n tooltipMode: tooltip?.mode ?? (allScatter ? \"nearest\" : \"axis\"),\n baseline: Math.min(Math.max(0, yRange[0]), yRange[1]),\n minSpan: {\n x: xType === \"category\" ? 1 : (xRange[1] - xRange[0]) * 1e-7,\n y: (yRange[1] - yRange[0]) * 1e-7,\n },\n };\n};\n\nconst grids = new WeakMap<SeriesColumns, GridIndex>();\n\n/** Spatial index of a scatter series, built on first use and kept with its data */\nexport const gridOf = (s: SeriesModel): GridIndex => {\n let grid = grids.get(s.cols);\n if (!grid) {\n grid = new GridIndex(s.cols.x, s.cols.y, s.cols.count);\n grids.set(s.cols, grid);\n }\n return grid;\n};\n"],"mappings":"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"}