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":"AAuBA,IAAMA,EACJ,GAMA,OAAOC,GAAS,YAChBA,GACA,EAAE,WAAYA,IACd,MAAOA,EAGIC,GACX,EACA,KAEQ,EAAO,IAAU,CACvB,GAAI,OAAOC,GAAU,SAAU,OAAOA,EACtC,GAAIA,aAAiB,KAAM,OAAOA,EAAM,QAAQ,EAChD,GAAI,OAAOA,GAAU,SAAU,CAC7B,GAAIC,IAAS,WAAY,OAAOC,EAAcF,CAAK,EACnD,GAAIC,IAAS,OAAQ,OAAO,KAAK,MAAMD,CAAK,EAC5C,IAAMG,EAAI,OAAOH,CAAK,EACtB,OAAO,OAAO,MAAMG,CAAC,EAAIC,EAAQD,CACnC,CACA,OAAOC,CACT,EAGIC,EAAY,GAChB,OAAOC,GAAM,SAAWA,EAAIA,GAAM,KAA0B,IAAM,OAAOA,CAAC,EAG/DC,EACX,GACa,CACb,IAAMC,EAAO,IAAI,IACXC,EAAO,GAAe,CACtB,OAAOH,GAAM,UAAUE,EAAK,IAAIF,CAAC,CACvC,EACA,IAAK,IAAMR,KAAQY,EAAO,CACxB,GAAIb,EAAUC,CAAI,EAAG,CACnB,IAAMa,EAAKb,EAAK,EAChB,GAAIa,GAAM,CAAC,YAAY,OAAOA,CAAE,EAC9B,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAG,OAAQ,IAAKF,EAAIE,EAAGC,EAAE,EAE/C,QACF,CACA,IAAMC,EAAOf,EACb,IAAK,IAAIc,EAAI,EAAGA,EAAIC,EAAK,OAAQ,IAAK,CACpC,IAAMC,EAAOD,EAAKD,GACd,MAAM,QAAQE,CAAI,EAAGL,EAAIK,EAAK,EAAE,EAC3BA,GAAQ,OAAOA,GAAS,UAC/BL,EAAKK,EAAyB,CAAC,CACnC,CACF,CACA,MAAO,CAAC,GAAGN,CAAI,CACjB,EAEMO,GACJ,EACA,EACA,EACA,IACkB,CAClB,IAAIC,EAAO,IACPC,EAAO,KACPC,EAAO,IACPC,EAAO,KACPC,EAAS,GACTC,EAAO,KACX,IAAK,IAAIT,EAAI,EAAGA,EAAIU,EAAO,IAAK,CAC9B,IAAMC,EAAKC,EAAEZ,GACb,GAAI,CAAC,OAAO,SAASW,CAAE,EAAG,CACxB,EAAEX,GAAK,IACP,QACF,CACIW,EAAKF,IAAM,EAAS,IACxB,EAAOE,EACP,IAAME,EAAKC,EAAEd,GACR,OAAO,SAASa,CAAE,IACnBF,EAAKP,IAAM,EAAOO,GAClBA,EAAKN,IAAM,EAAOM,GAClBE,EAAKP,IAAM,EAAOO,GAClBA,EAAKN,IAAM,EAAOM,GACxB,CACA,IAAME,EAAQX,EAAOC,EACrB,MAAO,CACL,IACA,IACA,QACA,SACA,KAAMU,EAAQ,IAAMX,EACpB,KAAMW,EAAQ,IAAMV,EACpB,KAAMU,EAAQ,IAAMT,EACpB,KAAMS,EAAQ,IAAMR,EACpB,GAAGS,CACL,CACF,EAGaC,GACX,EACA,IACkB,CAClB,IAAMC,EAAO,CAAE,KAAM,KAAM,OAAQ,KAAM,OAAQ,IAAK,EACtD,GAAIjC,EAAUC,CAAI,EAAG,CACnB,IAAMwB,EAAQxB,EAAK,EAAE,OACf0B,EAAI,IAAI,aAAaF,CAAK,EAC1BI,EAAI,IAAI,aAAaJ,CAAK,EAC1BX,EAAKb,EAAK,EAChB,IAAK,IAAI,EAAI,EAAG,EAAIwB,EAAO,IACzB,EAAE,GAAKjB,EAASP,EAAK,EAAE,EAAE,EACzB,EAAE,GAAKa,EAAKoB,EAASpB,EAAG,GAAmB,CAAC,EAAI,EAElD,IAAIqB,EAA4B,KAChC,GAAIlC,EAAK,KAAM,CACb,EAAO,IAAI,aAAawB,CAAK,EAC7B,IAAK,IAAIV,EAAI,EAAGA,EAAIU,EAAO,IAAK,EAAKV,GAAKP,EAASP,EAAK,KAAKc,EAAE,CACjE,CACA,OAAOG,EAASS,EAAGE,EAAGJ,EAAO,CAAE,GAAGQ,EAAM,MAAK,CAAC,CAChD,CAEA,IAAMjB,EAAOf,EACPwB,EAAQT,EAAK,OACbW,EAAI,IAAI,aAAaF,CAAK,EAC1BI,EAAI,IAAI,aAAaJ,CAAK,EAC5BU,EAA4B,KAC5BC,EAAwC,KACxCC,EAAwC,KAE5C,IAAK,IAAItB,EAAI,EAAGA,EAAIU,EAAO,IAAK,CAC9B,IAAMR,EAAOD,EAAKD,GAClB,GAAIE,GAAS,MAA8B,OAAOA,GAAS,SACzD,EAAEF,GAAKA,EACP,EAAEA,GAAKP,EAASS,CAAI,OACf,GAAI,MAAM,QAAQA,CAAI,EAC3B,EAAEF,GAAKmB,EAASjB,EAAK,GAAmBF,CAAC,EACzC,EAAEA,GAAKP,EAASS,EAAK,EAAE,OAClB,GAAI,OAAOA,GAAS,SAAU,CACnC,IAAMqB,EAAIrB,EAOV,EAAEF,GAAKuB,EAAE,IAAM,IAAA,GAAYvB,EAAImB,EAASI,EAAE,EAAGvB,CAAC,EAC9C,EAAEA,GAAKP,EAAS8B,EAAE,CAAC,EACfA,EAAE,OAAS,IAAA,KACbH,IAAA,EAAS,IAAI,aAAaV,CAAK,CAAC,CAAC,KAAK,GAAG,GACzC,EAAKV,GAAKuB,EAAE,MAEVA,EAAE,QAAU,IAAA,KACdF,IAAA,EAAe,MAA0BX,CAAK,GAC9C,EAAOV,GAAKuB,EAAE,OAEZA,EAAE,QAAU,IAAA,KACdD,IAAA,EAAe,MAA0BZ,CAAK,GAC9C,EAAOV,GAAKuB,EAAE,MAElB,KACE,GAAEvB,GAAKA,EACP,EAAEA,GAAK,GAEX,CACA,OAAOG,EAASS,EAAGE,EAAGJ,EAAO,CAAE,OAAM,SAAQ,QAAO,CAAC,CACvD,EAGac,GACX,EACA,EACA,IACW,CACX,IAAIC,EAAK,EACLC,EAAKhB,EACT,KAAOe,EAAKC,GAAI,CACd,IAAMC,EAAOF,EAAKC,IAAQ,EACtBd,EAAEe,GAAOvC,EAAO,EAAKuC,EAAM,EAC1B,EAAKA,CACZ,CACA,OAAOF,CACT,EAGaG,GACX,EACA,EACA,EACA,IACW,CACX,GAAIlB,IAAU,EAAG,MAAO,GACxB,IAAM,EAAIc,EAAWZ,EAAGF,EAAOtB,CAAK,EAChCyC,EAAO,EAAI,EACXC,EAAQ,EACZ,KAAOD,GAAQ,GAAK,CAAC,OAAO,SAASf,EAAEe,EAAK,GAAG,IAC/C,KAAOC,EAAQpB,GAAS,CAAC,OAAO,SAASI,EAAEgB,EAAM,GAAG,IAGpD,OAFID,EAAO,EAAUC,EAAQpB,EAAQoB,EAAQ,GACzCA,GAASpB,GACNtB,EAAQwB,EAAEiB,IAASjB,EAAEkB,GAAS1C,EADVyC,EACyBC,CACtD"}
@@ -0,0 +1,29 @@
1
+ import { ChartAxisType, ChartSeriesData, ChartXValue } from './types.cjs';
2
+ export interface SeriesColumns {
3
+ x: Float64Array;
4
+ /** NaN where the value is missing */
5
+ y: Float64Array;
6
+ size: Float32Array | null;
7
+ colors: (string | undefined)[] | null;
8
+ labels: (string | undefined)[] | null;
9
+ count: number;
10
+ /** x is non-decreasing (binary search, decimation) */
11
+ sorted: boolean;
12
+ /** Extent of the finite points (NaN when there is none) */
13
+ xMin: number;
14
+ xMax: number;
15
+ yMin: number;
16
+ yMax: number;
17
+ }
18
+ type XResolver = (value: ChartXValue, index: number) => number;
19
+ /** Converts an x value to a number for the axis type */
20
+ export declare const xResolver: (type: ChartAxisType, categoryIndex: (name: string) => number) => XResolver;
21
+ /** Category names used by string x values, in order of appearance */
22
+ export declare const collectCategories: (datas: readonly ChartSeriesData[]) => string[];
23
+ /** Turns any supported data form into columns */
24
+ export declare const normalizeData: (data: ChartSeriesData, resolveX: XResolver) => SeriesColumns;
25
+ /** First index whose x is >= value (sorted x) */
26
+ export declare const lowerBound: (x: ArrayLike<number>, count: number, value: number) => number;
27
+ /** Index of the point with the closest x and a finite y (sorted x), -1 if none */
28
+ export declare const nearestIndex: (x: ArrayLike<number>, y: ArrayLike<number>, count: number, value: number) => number;
29
+ export {};
@@ -0,0 +1,29 @@
1
+ import { ChartAxisType, ChartSeriesData, ChartXValue } from './types.js';
2
+ export interface SeriesColumns {
3
+ x: Float64Array;
4
+ /** NaN where the value is missing */
5
+ y: Float64Array;
6
+ size: Float32Array | null;
7
+ colors: (string | undefined)[] | null;
8
+ labels: (string | undefined)[] | null;
9
+ count: number;
10
+ /** x is non-decreasing (binary search, decimation) */
11
+ sorted: boolean;
12
+ /** Extent of the finite points (NaN when there is none) */
13
+ xMin: number;
14
+ xMax: number;
15
+ yMin: number;
16
+ yMax: number;
17
+ }
18
+ type XResolver = (value: ChartXValue, index: number) => number;
19
+ /** Converts an x value to a number for the axis type */
20
+ export declare const xResolver: (type: ChartAxisType, categoryIndex: (name: string) => number) => XResolver;
21
+ /** Category names used by string x values, in order of appearance */
22
+ export declare const collectCategories: (datas: readonly ChartSeriesData[]) => string[];
23
+ /** Turns any supported data form into columns */
24
+ export declare const normalizeData: (data: ChartSeriesData, resolveX: XResolver) => SeriesColumns;
25
+ /** First index whose x is >= value (sorted x) */
26
+ export declare const lowerBound: (x: ArrayLike<number>, count: number, value: number) => number;
27
+ /** Index of the point with the closest x and a finite y (sorted x), -1 if none */
28
+ export declare const nearestIndex: (x: ArrayLike<number>, y: ArrayLike<number>, count: number, value: number) => number;
29
+ export {};
@@ -0,0 +1,104 @@
1
+ //#region 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,13 @@
1
+ export interface DecimatedLine {
2
+ /** Interleaved x, y; NaN y marks a gap */
3
+ points: Float64Array;
4
+ /** Number of points */
5
+ length: number;
6
+ }
7
+ /**
8
+ * Decimates the points `[start, end)` of a line with sorted x, given as
9
+ * interleaved `x, y` values. `column` maps an x value to its pixel column.
10
+ * Missing values (NaN or `gap`) are kept as a single NaN point so the
11
+ * gaps survive.
12
+ */
13
+ export declare const decimateMinMax: (points: ArrayLike<number>, start: number, end: number, column: (x: number) => number, gap?: number) => DecimatedLine;
@@ -0,0 +1,13 @@
1
+ export interface DecimatedLine {
2
+ /** Interleaved x, y; NaN y marks a gap */
3
+ points: Float64Array;
4
+ /** Number of points */
5
+ length: number;
6
+ }
7
+ /**
8
+ * Decimates the points `[start, end)` of a line with sorted x, given as
9
+ * interleaved `x, y` values. `column` maps an x value to its pixel column.
10
+ * Missing values (NaN or `gap`) are kept as a single NaN point so the
11
+ * gaps survive.
12
+ */
13
+ export declare const decimateMinMax: (points: ArrayLike<number>, start: number, end: number, column: (x: number) => number, gap?: number) => DecimatedLine;
@@ -0,0 +1,28 @@
1
+ //#region 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
+ var e=(e,t)=>(Object.assign(e.style,t),e),t=(t,n)=>e(t.createElement(n),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),n=n=>{let r=n.ownerDocument,i=e(r.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});i.className=`minerva-chart`;let a=e(r.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 14px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});a.className=`minerva-chart-legend`;let o=e(r.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,outline:`none`,touchAction:`pan-y`,userSelect:`none`,borderRadius:`6px`});o.className=`minerva-chart-stage`,o.setAttribute(`role`,`figure`),o.setAttribute(`aria-roledescription`,`chart`);let s=t(r,`canvas`),c=t(r,`canvas`);s.setAttribute(`aria-hidden`,`true`),c.setAttribute(`aria-hidden`,`true`);let l=e(t(r,`div`),{right:`0`,bottom:`0`,overflow:`hidden`});l.setAttribute(`aria-hidden`,`true`);let u=e(r.createElement(`div`),{position:`absolute`,width:`0`,borderLeft:`1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)`,display:`none`});l.appendChild(u);let d=e(r.createElement(`div`),{position:`absolute`,left:`0`,top:`0`,zIndex:`2`,display:`none`,pointerEvents:`none`,minWidth:`128px`,maxWidth:`320px`,padding:`8px 10px`,borderRadius:`8px`,border:`1px solid var(--border-color, #e5e7eb)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)`,fontSize:`12px`,lineHeight:`18px`,whiteSpace:`nowrap`,transition:`transform 60ms ease-out`});d.className=`minerva-chart-tooltip`,d.setAttribute(`role`,`tooltip`);let f=e(r.createElement(`div`),{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});return f.setAttribute(`aria-live`,`polite`),o.append(s,c,l,d,f),i.append(a,o),n.appendChild(i),{root:i,legend:a,stage:o,background:s,foreground:c,hover:l,crosshair:u,tooltip:d,live:f}},r=e=>{let n=t(e,`canvas`);return n.setAttribute(`aria-hidden`,`true`),n.className=`minerva-chart-data`,n},i=(t,n,r)=>{let i=t.createElement(`span`);return e(i,{display:`inline-block`,flex:`none`,width:r===`line`?`14px`:`9px`,height:r===`line`?`3px`:`9px`,borderRadius:r===`dot`?`50%`:`2px`,background:n}),i},a=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`50%`,border:`2px solid var(--surface-color, var(--background-color, #fff))`,boxShadow:`0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)`,transform:`translate(-50%, -50%)`}),o=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`4px`,background:`rgba(255, 255, 255, 0.18)`,boxShadow:`0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset`});exports.createBarHighlight=o,exports.createChartDom=n,exports.createDataCanvas=r,exports.createMarker=a,exports.styleElement=e,exports.swatch=i;
2
+ //# sourceMappingURL=dom.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.cjs","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBarHighlight"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 10px\",\n borderRadius: \"8px\",\n border: \"1px solid var(--border-color, #e5e7eb)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 60ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point (dot with a ring in the background color) */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n boxShadow:\n \"0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)\",\n transform: \"translate(-50%, -50%)\",\n }) as HTMLDivElement;\n\n/** Highlight of a hovered bar */\nexport const createBarHighlight = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"4px\",\n background: \"rgba(255, 255, 255, 0.18)\",\n boxShadow:\n \"0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ChartDom {
2
+ root: HTMLDivElement;
3
+ legend: HTMLDivElement;
4
+ stage: HTMLDivElement;
5
+ background: HTMLCanvasElement;
6
+ foreground: HTMLCanvasElement;
7
+ hover: HTMLDivElement;
8
+ crosshair: HTMLDivElement;
9
+ tooltip: HTMLDivElement;
10
+ live: HTMLDivElement;
11
+ }
12
+ declare const assign: (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => HTMLElement;
13
+ export declare const createChartDom: (container: HTMLElement) => ChartDom;
14
+ /** Canvas of the data layer, placed over the plot area */
15
+ export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
16
+ export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
17
+ /** Marker of a hovered point (dot with a ring in the background color) */
18
+ export declare const createMarker: (doc: Document) => HTMLDivElement;
19
+ /** Highlight of a hovered bar */
20
+ export declare const createBarHighlight: (doc: Document) => HTMLDivElement;
21
+ export { assign as styleElement };
@@ -0,0 +1,21 @@
1
+ export interface ChartDom {
2
+ root: HTMLDivElement;
3
+ legend: HTMLDivElement;
4
+ stage: HTMLDivElement;
5
+ background: HTMLCanvasElement;
6
+ foreground: HTMLCanvasElement;
7
+ hover: HTMLDivElement;
8
+ crosshair: HTMLDivElement;
9
+ tooltip: HTMLDivElement;
10
+ live: HTMLDivElement;
11
+ }
12
+ declare const assign: (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => HTMLElement;
13
+ export declare const createChartDom: (container: HTMLElement) => ChartDom;
14
+ /** Canvas of the data layer, placed over the plot area */
15
+ export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
16
+ export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
17
+ /** Marker of a hovered point (dot with a ring in the background color) */
18
+ export declare const createMarker: (doc: Document) => HTMLDivElement;
19
+ /** Highlight of a hovered bar */
20
+ export declare const createBarHighlight: (doc: Document) => HTMLDivElement;
21
+ export { assign as styleElement };
@@ -0,0 +1,125 @@
1
+ //#region src/engine/dom.ts
2
+ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElement(n), {
3
+ position: "absolute",
4
+ left: "0",
5
+ top: "0",
6
+ pointerEvents: "none"
7
+ }), n = (n) => {
8
+ let r = n.ownerDocument, i = e(r.createElement("div"), {
9
+ position: "relative",
10
+ display: "flex",
11
+ flexDirection: "column",
12
+ width: "100%",
13
+ height: "100%",
14
+ minHeight: "0",
15
+ fontFamily: "var(--font-family-sans, system-ui, sans-serif)",
16
+ color: "var(--text-color, #1f2937)"
17
+ });
18
+ i.className = "minerva-chart";
19
+ let a = e(r.createElement("div"), {
20
+ display: "none",
21
+ flexWrap: "wrap",
22
+ alignItems: "center",
23
+ gap: "4px 14px",
24
+ padding: "0 4px 8px",
25
+ fontSize: "12px",
26
+ lineHeight: "18px"
27
+ });
28
+ a.className = "minerva-chart-legend";
29
+ let o = e(r.createElement("div"), {
30
+ position: "relative",
31
+ flex: "1 1 auto",
32
+ minHeight: "0",
33
+ outline: "none",
34
+ touchAction: "pan-y",
35
+ userSelect: "none",
36
+ borderRadius: "6px"
37
+ });
38
+ o.className = "minerva-chart-stage", o.setAttribute("role", "figure"), o.setAttribute("aria-roledescription", "chart");
39
+ let s = t(r, "canvas"), c = t(r, "canvas");
40
+ s.setAttribute("aria-hidden", "true"), c.setAttribute("aria-hidden", "true");
41
+ let l = e(t(r, "div"), {
42
+ right: "0",
43
+ bottom: "0",
44
+ overflow: "hidden"
45
+ });
46
+ l.setAttribute("aria-hidden", "true");
47
+ let u = e(r.createElement("div"), {
48
+ position: "absolute",
49
+ width: "0",
50
+ borderLeft: "1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)",
51
+ display: "none"
52
+ });
53
+ l.appendChild(u);
54
+ let d = e(r.createElement("div"), {
55
+ position: "absolute",
56
+ left: "0",
57
+ top: "0",
58
+ zIndex: "2",
59
+ display: "none",
60
+ pointerEvents: "none",
61
+ minWidth: "128px",
62
+ maxWidth: "320px",
63
+ padding: "8px 10px",
64
+ borderRadius: "8px",
65
+ border: "1px solid var(--border-color, #e5e7eb)",
66
+ background: "var(--surface-elevated-color, var(--background-color, #fff))",
67
+ color: "var(--text-color, #1f2937)",
68
+ boxShadow: "0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)",
69
+ fontSize: "12px",
70
+ lineHeight: "18px",
71
+ whiteSpace: "nowrap",
72
+ transition: "transform 60ms ease-out"
73
+ });
74
+ d.className = "minerva-chart-tooltip", d.setAttribute("role", "tooltip");
75
+ let f = e(r.createElement("div"), {
76
+ position: "absolute",
77
+ width: "1px",
78
+ height: "1px",
79
+ overflow: "hidden",
80
+ clip: "rect(0 0 0 0)",
81
+ clipPath: "inset(50%)",
82
+ whiteSpace: "nowrap"
83
+ });
84
+ return f.setAttribute("aria-live", "polite"), o.append(s, c, l, d, f), i.append(a, o), n.appendChild(i), {
85
+ root: i,
86
+ legend: a,
87
+ stage: o,
88
+ background: s,
89
+ foreground: c,
90
+ hover: l,
91
+ crosshair: u,
92
+ tooltip: d,
93
+ live: f
94
+ };
95
+ }, r = (e) => {
96
+ let n = t(e, "canvas");
97
+ return n.setAttribute("aria-hidden", "true"), n.className = "minerva-chart-data", n;
98
+ }, i = (t, n, r) => {
99
+ let i = t.createElement("span");
100
+ return e(i, {
101
+ display: "inline-block",
102
+ flex: "none",
103
+ width: r === "line" ? "14px" : "9px",
104
+ height: r === "line" ? "3px" : "9px",
105
+ borderRadius: r === "dot" ? "50%" : "2px",
106
+ background: n
107
+ }), i;
108
+ }, a = (t) => e(t.createElement("div"), {
109
+ position: "absolute",
110
+ boxSizing: "border-box",
111
+ borderRadius: "50%",
112
+ border: "2px solid var(--surface-color, var(--background-color, #fff))",
113
+ boxShadow: "0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)",
114
+ transform: "translate(-50%, -50%)"
115
+ }), o = (t) => e(t.createElement("div"), {
116
+ position: "absolute",
117
+ boxSizing: "border-box",
118
+ borderRadius: "4px",
119
+ background: "rgba(255, 255, 255, 0.18)",
120
+ boxShadow: "0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset"
121
+ });
122
+ //#endregion
123
+ export { o as createBarHighlight, n as createChartDom, r as createDataCanvas, a as createMarker, e as styleElement, i as swatch };
124
+
125
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBarHighlight"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 10px\",\n borderRadius: \"8px\",\n border: \"1px solid var(--border-color, #e5e7eb)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 60ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point (dot with a ring in the background color) */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n boxShadow:\n \"0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)\",\n transform: \"translate(-50%, -50%)\",\n }) as HTMLDivElement;\n\n/** Highlight of a hovered bar */\nexport const createBarHighlight = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"4px\",\n background: \"rgba(255, 255, 255, 0.18)\",\n boxShadow:\n \"0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
@@ -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,9 @@
1
+ /** `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0` */
2
+ export declare const formatCompact: (value: number, maxDecimals?: number) => string;
3
+ /**
4
+ * Formatter of the ticks of a linear axis: enough decimals to tell the
5
+ * ticks apart; compact units (k, M, ...) when the values are large.
6
+ */
7
+ export declare const tickFormatter: (step: number, maxAbs: number) => (value: number) => string;
8
+ /** Value of a tooltip: up to 4 significant decimals */
9
+ export declare const formatValue: (value: number) => string;
@@ -0,0 +1,9 @@
1
+ /** `1234567` -> `1.23M`, `0.5` -> `0.5`; `-0` is printed as `0` */
2
+ export declare const formatCompact: (value: number, maxDecimals?: number) => string;
3
+ /**
4
+ * Formatter of the ticks of a linear axis: enough decimals to tell the
5
+ * ticks apart; compact units (k, M, ...) when the values are large.
6
+ */
7
+ export declare const tickFormatter: (step: number, maxAbs: number) => (value: number) => string;
8
+ /** Value of a tooltip: up to 4 significant decimals */
9
+ export declare const formatValue: (value: number) => string;
@@ -0,0 +1,34 @@
1
+ import { stepDecimals as e } from "./scale.js";
2
+ //#region 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
+ const e=require("./color.cjs"),t=require("./renderers/types.cjs");var n=(e,n)=>Number.isFinite(e)?e-n:t.GAP,r=(e,r,i,a)=>{let o=new Float32Array(i*2);for(let s=0;s<i;s++)o[s*2]=n(e[s],a.x),o[s*2+1]=Number.isFinite(r[s])?r[s]-a.y:t.GAP;return o},i={area:0,bar:1,line:2,scatter:3},a=(a,o,s)=>{let c=[],l=[],u=a.series.filter(e=>!e.hidden).sort((e,t)=>i[e.type]-i[t.type]||e.index-t.index);for(let i of u){let{x:u,y:d,count:f,sorted:p}=i.cols;switch((i.type===`line`||i.type===`scatter`)&&l.length&&c.push(...l.splice(0)),i.type){case`line`:case`area`:{let e=r(u,d,f,o);i.type===`area`&&c.push({kind:`area`,key:`${i.key}:area`,version:s,color:i.color,points:e,count:f,baseline:a.baseline-o.y,opacity:i.opacity,sorted:p}),(i.type===`area`?l:c).push({kind:`line`,key:`${i.key}:line`,version:s,color:i.color,points:e,count:f,width:i.lineWidth,sorted:p});break}case`bar`:{let e=i.barBase??new Float64Array(f),r=i.barTop??d,l=new Float32Array(f*3);for(let a=0;a<f;a++){let s=Number.isFinite(r[a])&&Number.isFinite(e[a]);l[a*3]=n(u[a]+i.barOffset,o.x),l[a*3+1]=s?e[a]-o.y:t.GAP,l[a*3+2]=s?r[a]-o.y:t.GAP}c.push({kind:`bar`,key:`${i.key}:bar`,version:s,color:i.color,instances:l,count:f,halfWidth:i.barHalfWidth,sorted:p,radius:a.series.some(e=>e!==i&&!e.hidden&&e.type===`bar`&&e.barOffset===i.barOffset)?0:3});break}default:{let n=new ArrayBuffer(f*16),r=new Float32Array(n),a=new Uint32Array(n),l=e.packColor(i.color),p=i.cols.size;for(let n=0;n<f;n++){let s=Number.isFinite(d[n])&&Number.isFinite(u[n]);r[n*4]=s?u[n]-o.x:t.GAP,r[n*4+1]=s?d[n]-o.y:t.GAP;let c=p?p[n]:NaN;r[n*4+2]=Number.isFinite(c)&&c>0?c:i.pointSize;let f=i.pointColors?.[n];a[n*4+3]=f?e.packColor(f):l}c.push({kind:`scatter`,key:`${i.key}:scatter`,version:s,color:i.color,instances:n,count:f,opacity:i.opacity,stroke:f<=5e3?1.25:0});break}}}return c.push(...l),c};exports.buildItems=a;
2
+ //# sourceMappingURL=items.cjs.map