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":"theme.js","names":["DEFAULT_PALETTE","readVar","style","name","readTheme","element","buildTheme","domColorResolver","palette","createTheme","variables","input","staticColorResolver","resolveStaticColor","value","fallback","fallbackGray","resolveColor","resolve","color","names","readVariable","background","text","textMuted","border","colors","c","custom","i","fontFamily","inheritedFont","mix","watchTheme","cleanups","observer","onChange","node","query","fn"],"sources":["../../../../charts/src/engine/theme.ts"],"sourcesContent":["// Chart colors and fonts read from the Minerva CSS variables.\n\nimport {\n domColorResolver,\n mix,\n resolveStaticColor,\n type ColorResolver,\n type Rgba,\n} from \"./color\";\n\nexport interface ChartTheme {\n palette: Rgba[];\n text: Rgba;\n textMuted: Rgba;\n grid: Rgba;\n axis: Rgba;\n background: Rgba;\n surface: Rgba;\n primary: Rgba;\n fontFamily: string;\n /** Tick label font size in CSS pixels */\n fontSize: number;\n /** Resolves the colors of the options (`var(--x)` included); static colors only when omitted */\n resolve?: ColorResolver;\n}\n\n/** Used when no CSS variable is defined (e.g. without the Minerva stylesheet) */\nconst DEFAULT_PALETTE = [\n \"#4f46e5\",\n \"#10b981\",\n \"#f59e0b\",\n \"#ef4444\",\n \"#0ea5e9\",\n \"#8b5cf6\",\n \"#14b8a6\",\n \"#f97316\",\n];\n\nconst readVar = (style: CSSStyleDeclaration | null, name: string) =>\n style?.getPropertyValue(name).trim() ?? \"\";\n\n/** Reads the theme from the computed style of `element` */\nexport const readTheme = (\n element: Element | null,\n palette?: readonly string[],\n): ChartTheme => {\n const style =\n element && typeof getComputedStyle === \"function\"\n ? getComputedStyle(element)\n : null;\n return buildTheme(\n (name) => readVar(style, name),\n domColorResolver(element),\n palette,\n style?.fontFamily ?? \"\",\n );\n};\n\n/** Theme of the charts drawn without a DOM (mini-programs, React Native) */\nexport interface ChartThemeInput {\n /**\n * Values of the Minerva CSS variables (`--primary-color`, `--text-color`,\n * `--chart-series-1`, ...) used for the theme colors and to resolve\n * `var(--name)` colors of the options\n */\n variables?: Readonly<Record<string, string>>;\n /** Series colors (hex / rgb) */\n palette?: readonly string[];\n /** Font family of the labels */\n fontFamily?: string;\n /**\n * Font size of the tick labels, in pixels\n * @default 11\n */\n fontSize?: number;\n}\n\n/** Builds a theme from plain values (no DOM) */\nexport const createTheme = (\n input: ChartThemeInput = {},\n palette?: readonly string[],\n): ChartTheme => {\n const variables = input.variables ?? {};\n const theme = buildTheme(\n (name) => variables[name]?.trim() ?? \"\",\n staticColorResolver(variables),\n palette?.length ? palette : input.palette,\n \"\",\n );\n return {\n ...theme,\n ...(input.fontFamily ? { fontFamily: input.fontFamily } : {}),\n ...(input.fontSize ? { fontSize: input.fontSize } : {}),\n };\n};\n\n/** Resolver of `var(--name, fallback)` colors against plain variables */\nexport const staticColorResolver =\n (variables: Readonly<Record<string, string>>): ColorResolver =>\n (value, fallback) =>\n resolveStaticColor(value, variables, fallback);\n\nconst buildTheme = (\n readVariable: (name: string) => string,\n resolve: ColorResolver,\n palette: readonly string[] | undefined,\n inheritedFont: string,\n): ChartTheme => {\n const fallbackGray: Rgba = [0.4, 0.4, 0.4, 1];\n const resolveColor = (value: string) => resolve(value, fallbackGray);\n const color = (names: string[], fallback: string): Rgba => {\n for (const name of names) {\n if (readVariable(name)) return resolveColor(`var(${name})`);\n }\n return resolveColor(fallback);\n };\n\n const background = color(\n [\"--surface-color\", \"--background-color\"],\n \"#ffffff\",\n );\n const text = color([\"--text-color\"], \"#1f2937\");\n const textMuted = color(\n [\"--text-secondary-color\", \"--text-muted-color\"],\n \"#6b7280\",\n );\n const border = color([\"--border-color\"], \"#e5e7eb\");\n\n let colors: Rgba[];\n if (palette && palette.length) {\n colors = palette.map((c) => resolveColor(c));\n } else {\n const custom: Rgba[] = [];\n for (let i = 1; i <= 8; i++) {\n const name = `--chart-series-${i}`;\n if (readVariable(name)) custom.push(resolveColor(`var(${name})`));\n }\n if (custom.length) {\n colors = custom;\n } else {\n const themed = [\n \"--primary-color\",\n \"--success-color\",\n \"--warning-color\",\n \"--danger-color\",\n \"--info-color\",\n ].map((name, i) =>\n readVariable(name)\n ? resolveColor(`var(${name})`)\n : resolveColor(DEFAULT_PALETTE[i]),\n );\n colors = [\n ...themed,\n ...DEFAULT_PALETTE.slice(5).map((c) => resolveColor(c)),\n ];\n }\n }\n\n const fontFamily =\n readVariable(\"--font-family-sans\") ||\n inheritedFont ||\n \"system-ui, -apple-system, 'Segoe UI', sans-serif\";\n\n return {\n palette: colors,\n text,\n textMuted,\n grid: mix(background, border, 0.75),\n axis: border,\n background,\n surface: background,\n primary: colors[0],\n fontFamily,\n fontSize: 11,\n resolve,\n };\n};\n\n/**\n * Calls `onChange` when the theme may have changed: attributes of `<html>` /\n * `<body>` (class, style, data-theme) and the color scheme.\n */\nexport const watchTheme = (onChange: () => void): (() => void) => {\n if (typeof document === \"undefined\") return () => {};\n const cleanups: (() => void)[] = [];\n if (typeof MutationObserver === \"function\") {\n const observer = new MutationObserver(onChange);\n for (const node of [document.documentElement, document.body]) {\n if (node) {\n observer.observe(node, {\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"data-theme\", \"data-mode\"],\n });\n }\n }\n cleanups.push(() => observer.disconnect());\n }\n if (typeof matchMedia === \"function\") {\n const query = matchMedia(\"(prefers-color-scheme: dark)\");\n query.addEventListener?.(\"change\", onChange);\n cleanups.push(() => query.removeEventListener?.(\"change\", onChange));\n }\n return () => cleanups.forEach((fn) => fn());\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./scale.cjs");var t=1e3,n=60*t,r=60*n,i=24*r,a=30*i,o=365*i,s=[{unit:`second`,step:1,ms:t},{unit:`second`,step:5,ms:5*t},{unit:`second`,step:15,ms:15*t},{unit:`second`,step:30,ms:30*t},{unit:`minute`,step:1,ms:n},{unit:`minute`,step:5,ms:5*n},{unit:`minute`,step:15,ms:15*n},{unit:`minute`,step:30,ms:30*n},{unit:`hour`,step:1,ms:r},{unit:`hour`,step:3,ms:3*r},{unit:`hour`,step:6,ms:6*r},{unit:`hour`,step:12,ms:12*r},{unit:`day`,step:1,ms:i},{unit:`day`,step:2,ms:2*i},{unit:`day`,step:7,ms:7*i},{unit:`month`,step:1,ms:a},{unit:`month`,step:3,ms:3*a},{unit:`month`,step:6,ms:6*a}],c=(e,t=2)=>String(e).padStart(t,`0`),l=(n,r)=>{let i=n/Math.max(1,r);if(i<t*.75)return{unit:`millisecond`,step:e.tickStep(0,n,r),ms:1};for(let e of s)if(e.ms>=i*.75)return e;let a=Math.max(1,e.tickStep(0,n/o,r));return{unit:`year`,step:Math.round(a),ms:Math.round(a)*o}},u=(e,{unit:t,step:n})=>{let r=new Date(e);switch(t){case`second`:r.setMilliseconds(0),r.setSeconds(r.getSeconds()-r.getSeconds()%n);break;case`minute`:r.setSeconds(0,0),r.setMinutes(r.getMinutes()-r.getMinutes()%n);break;case`hour`:r.setMinutes(0,0,0),r.setHours(r.getHours()-r.getHours()%n);break;case`day`:r.setHours(0,0,0,0),n===7&&r.setDate(r.getDate()-(r.getDay()+6)%7);break;case`month`:r.setHours(0,0,0,0),r.setDate(1),r.setMonth(r.getMonth()-r.getMonth()%n);break;case`year`:r.setHours(0,0,0,0),r.setMonth(0,1),r.setFullYear(r.getFullYear()-r.getFullYear()%n)}return r},d=(e,{unit:t,step:n})=>{switch(t){case`second`:e.setSeconds(e.getSeconds()+n);break;case`minute`:e.setMinutes(e.getMinutes()+n);break;case`hour`:e.setHours(e.getHours()+n);break;case`day`:e.setDate(e.getDate()+n);break;case`month`:e.setMonth(e.getMonth()+n);break;case`year`:e.setFullYear(e.getFullYear()+n)}},f=(t,n,r)=>{t>n&&([t,n]=[n,t]);let i=l(n-t,r);if(i.unit===`millisecond`)return{values:e.linearTicks(t,n,r),unit:`millisecond`,format:e=>g(e,`millisecond`)};let a=[],o=u(t,i);for(;o.getTime()<t;)d(o,i);for(;o.getTime()<=n&&a.length<500;)a.push(o.getTime()),d(o,i);let{unit:s}=i;return{values:a,unit:s,format:e=>h(e,s)}},p=e=>`${e.getFullYear()}-${c(e.getMonth()+1)}-${c(e.getDate())}`,m=e=>`${c(e.getHours())}:${c(e.getMinutes())}`,h=(e,t)=>{let n=new Date(e),r=n.getHours()===0&&n.getMinutes()===0&&n.getSeconds()===0;switch(t){case`second`:return`${m(n)}:${c(n.getSeconds())}`;case`minute`:case`hour`:return r?`${c(n.getMonth()+1)}-${c(n.getDate())}`:m(n);case`day`:return n.getMonth()===0&&n.getDate()===1?String(n.getFullYear()):`${c(n.getMonth()+1)}-${c(n.getDate())}`;case`month`:return n.getMonth()===0?String(n.getFullYear()):`${n.getFullYear()}-${c(n.getMonth()+1)}`;default:return String(n.getFullYear())}},g=(e,t=`minute`)=>{let n=new Date(e);if(Number.isNaN(n.getTime()))return`–`;switch(t){case`millisecond`:return`${p(n)} ${m(n)}:${c(n.getSeconds())}.${c(n.getMilliseconds(),3)}`;case`second`:return`${p(n)} ${m(n)}:${c(n.getSeconds())}`;case`minute`:case`hour`:return`${p(n)} ${m(n)}`;default:return p(n)}};exports.formatTime=g,exports.timeTicks=f;
2
+ //# sourceMappingURL=time.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.cjs","names":["tickStep","linearTicks","require_scale","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","INTERVALS","pad","n","width","chooseInterval","target","span","count","interval","years","floorTo","d","t","unit","step","advance","timeTicks","min","max","formatTime","v","values","formatTick","ymd","hm","value","midnight"],"sources":["../../../../charts/src/engine/time.ts"],"sourcesContent":["// Ticks and labels of time axes (timestamps in ms, local time).\n\nimport { linearTicks, tickStep } from \"./scale\";\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nexport type TimeUnit =\n \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"month\" | \"year\";\n\ninterface Interval {\n unit: TimeUnit;\n step: number;\n /** Approximate duration (ms) */\n ms: number;\n}\n\nconst INTERVALS: Interval[] = [\n { unit: \"second\", step: 1, ms: SECOND },\n { unit: \"second\", step: 5, ms: 5 * SECOND },\n { unit: \"second\", step: 15, ms: 15 * SECOND },\n { unit: \"second\", step: 30, ms: 30 * SECOND },\n { unit: \"minute\", step: 1, ms: MINUTE },\n { unit: \"minute\", step: 5, ms: 5 * MINUTE },\n { unit: \"minute\", step: 15, ms: 15 * MINUTE },\n { unit: \"minute\", step: 30, ms: 30 * MINUTE },\n { unit: \"hour\", step: 1, ms: HOUR },\n { unit: \"hour\", step: 3, ms: 3 * HOUR },\n { unit: \"hour\", step: 6, ms: 6 * HOUR },\n { unit: \"hour\", step: 12, ms: 12 * HOUR },\n { unit: \"day\", step: 1, ms: DAY },\n { unit: \"day\", step: 2, ms: 2 * DAY },\n { unit: \"day\", step: 7, ms: 7 * DAY },\n { unit: \"month\", step: 1, ms: MONTH },\n { unit: \"month\", step: 3, ms: 3 * MONTH },\n { unit: \"month\", step: 6, ms: 6 * MONTH },\n];\n\nconst pad = (n: number, width = 2) => String(n).padStart(width, \"0\");\n\nconst chooseInterval = (span: number, count: number): Interval => {\n const target = span / Math.max(1, count);\n if (target < SECOND * 0.75) {\n return { unit: \"millisecond\", step: tickStep(0, span, count), ms: 1 };\n }\n for (const interval of INTERVALS) {\n if (interval.ms >= target * 0.75) return interval;\n }\n const years = Math.max(1, tickStep(0, span / YEAR, count));\n return {\n unit: \"year\",\n step: Math.round(years),\n ms: Math.round(years) * YEAR,\n };\n};\n\n/** Start of the tick sequence: `t` floored to the unit, aligned on the step */\nconst floorTo = (t: number, { unit, step }: Interval): Date => {\n const d = new Date(t);\n switch (unit) {\n case \"second\":\n d.setMilliseconds(0);\n d.setSeconds(d.getSeconds() - (d.getSeconds() % step));\n break;\n case \"minute\":\n d.setSeconds(0, 0);\n d.setMinutes(d.getMinutes() - (d.getMinutes() % step));\n break;\n case \"hour\":\n d.setMinutes(0, 0, 0);\n d.setHours(d.getHours() - (d.getHours() % step));\n break;\n case \"day\":\n d.setHours(0, 0, 0, 0);\n // weeks start on Monday\n if (step === 7) d.setDate(d.getDate() - ((d.getDay() + 6) % 7));\n break;\n case \"month\":\n d.setHours(0, 0, 0, 0);\n d.setDate(1);\n d.setMonth(d.getMonth() - (d.getMonth() % step));\n break;\n case \"year\":\n d.setHours(0, 0, 0, 0);\n d.setMonth(0, 1);\n d.setFullYear(d.getFullYear() - (d.getFullYear() % step));\n break;\n default:\n break;\n }\n return d;\n};\n\nconst advance = (d: Date, { unit, step }: Interval) => {\n switch (unit) {\n case \"second\":\n d.setSeconds(d.getSeconds() + step);\n break;\n case \"minute\":\n d.setMinutes(d.getMinutes() + step);\n break;\n case \"hour\":\n d.setHours(d.getHours() + step);\n break;\n case \"day\":\n d.setDate(d.getDate() + step);\n break;\n case \"month\":\n d.setMonth(d.getMonth() + step);\n break;\n case \"year\":\n d.setFullYear(d.getFullYear() + step);\n break;\n default:\n break;\n }\n};\n\nexport interface TimeTicks {\n values: number[];\n unit: TimeUnit;\n format: (value: number) => string;\n}\n\n/** Calendar-aligned ticks between two timestamps */\nexport const timeTicks = (\n min: number,\n max: number,\n count: number,\n): TimeTicks => {\n if (min > max) [min, max] = [max, min];\n const interval = chooseInterval(max - min, count);\n if (interval.unit === \"millisecond\") {\n return {\n values: linearTicks(min, max, count),\n unit: \"millisecond\",\n format: (v) => formatTime(v, \"millisecond\"),\n };\n }\n const values: number[] = [];\n const d = floorTo(min, interval);\n while (d.getTime() < min) advance(d, interval);\n while (d.getTime() <= max && values.length < 500) {\n values.push(d.getTime());\n advance(d, interval);\n }\n const { unit } = interval;\n return { values, unit, format: (v) => formatTick(v, unit) };\n};\n\nconst ymd = (d: Date) =>\n `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\nconst hm = (d: Date) => `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n\n/** Short tick label; day boundaries show the date, year boundaries the year */\nconst formatTick = (value: number, unit: TimeUnit): string => {\n const d = new Date(value);\n const midnight =\n d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0;\n switch (unit) {\n case \"second\":\n return `${hm(d)}:${pad(d.getSeconds())}`;\n case \"minute\":\n case \"hour\":\n return midnight ? `${pad(d.getMonth() + 1)}-${pad(d.getDate())}` : hm(d);\n case \"day\":\n return d.getMonth() === 0 && d.getDate() === 1\n ? String(d.getFullYear())\n : `${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n case \"month\":\n return d.getMonth() === 0\n ? String(d.getFullYear())\n : `${d.getFullYear()}-${pad(d.getMonth() + 1)}`;\n default:\n return String(d.getFullYear());\n }\n};\n\n/** Full label (tooltips): precision follows the unit of the ticks */\nexport const formatTime = (\n value: number,\n unit: TimeUnit = \"minute\",\n): string => {\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return \"–\";\n switch (unit) {\n case \"millisecond\":\n return `${ymd(d)} ${hm(d)}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(), 3)}`;\n case \"second\":\n return `${ymd(d)} ${hm(d)}:${pad(d.getSeconds())}`;\n case \"minute\":\n case \"hour\":\n return `${ymd(d)} ${hm(d)}`;\n default:\n return ymd(d);\n }\n};\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type TimeUnit = "millisecond" | "second" | "minute" | "hour" | "day" | "month" | "year";
2
+ export interface TimeTicks {
3
+ values: number[];
4
+ unit: TimeUnit;
5
+ format: (value: number) => string;
6
+ }
7
+ /** Calendar-aligned ticks between two timestamps */
8
+ export declare const timeTicks: (min: number, max: number, count: number) => TimeTicks;
9
+ /** Full label (tooltips): precision follows the unit of the ticks */
10
+ export declare const formatTime: (value: number, unit?: TimeUnit) => string;
@@ -0,0 +1,10 @@
1
+ export type TimeUnit = "millisecond" | "second" | "minute" | "hour" | "day" | "month" | "year";
2
+ export interface TimeTicks {
3
+ values: number[];
4
+ unit: TimeUnit;
5
+ format: (value: number) => string;
6
+ }
7
+ /** Calendar-aligned ticks between two timestamps */
8
+ export declare const timeTicks: (min: number, max: number, count: number) => TimeTicks;
9
+ /** Full label (tooltips): precision follows the unit of the ticks */
10
+ export declare const formatTime: (value: number, unit?: TimeUnit) => string;
@@ -0,0 +1,189 @@
1
+ import { linearTicks as e, tickStep as t } from "./scale.js";
2
+ //#region src/engine/time.ts
3
+ var n = 1e3, r = 60 * n, i = 60 * r, a = 24 * i, o = 30 * a, s = 365 * a, c = [
4
+ {
5
+ unit: "second",
6
+ step: 1,
7
+ ms: n
8
+ },
9
+ {
10
+ unit: "second",
11
+ step: 5,
12
+ ms: 5 * n
13
+ },
14
+ {
15
+ unit: "second",
16
+ step: 15,
17
+ ms: 15 * n
18
+ },
19
+ {
20
+ unit: "second",
21
+ step: 30,
22
+ ms: 30 * n
23
+ },
24
+ {
25
+ unit: "minute",
26
+ step: 1,
27
+ ms: r
28
+ },
29
+ {
30
+ unit: "minute",
31
+ step: 5,
32
+ ms: 5 * r
33
+ },
34
+ {
35
+ unit: "minute",
36
+ step: 15,
37
+ ms: 15 * r
38
+ },
39
+ {
40
+ unit: "minute",
41
+ step: 30,
42
+ ms: 30 * r
43
+ },
44
+ {
45
+ unit: "hour",
46
+ step: 1,
47
+ ms: i
48
+ },
49
+ {
50
+ unit: "hour",
51
+ step: 3,
52
+ ms: 3 * i
53
+ },
54
+ {
55
+ unit: "hour",
56
+ step: 6,
57
+ ms: 6 * i
58
+ },
59
+ {
60
+ unit: "hour",
61
+ step: 12,
62
+ ms: 12 * i
63
+ },
64
+ {
65
+ unit: "day",
66
+ step: 1,
67
+ ms: a
68
+ },
69
+ {
70
+ unit: "day",
71
+ step: 2,
72
+ ms: 2 * a
73
+ },
74
+ {
75
+ unit: "day",
76
+ step: 7,
77
+ ms: 7 * a
78
+ },
79
+ {
80
+ unit: "month",
81
+ step: 1,
82
+ ms: o
83
+ },
84
+ {
85
+ unit: "month",
86
+ step: 3,
87
+ ms: 3 * o
88
+ },
89
+ {
90
+ unit: "month",
91
+ step: 6,
92
+ ms: 6 * o
93
+ }
94
+ ], l = (e, t = 2) => String(e).padStart(t, "0"), u = (e, r) => {
95
+ let i = e / Math.max(1, r);
96
+ if (i < n * .75) return {
97
+ unit: "millisecond",
98
+ step: t(0, e, r),
99
+ ms: 1
100
+ };
101
+ for (let e of c) if (e.ms >= i * .75) return e;
102
+ let a = Math.max(1, t(0, e / s, r));
103
+ return {
104
+ unit: "year",
105
+ step: Math.round(a),
106
+ ms: Math.round(a) * s
107
+ };
108
+ }, d = (e, { unit: t, step: n }) => {
109
+ let r = new Date(e);
110
+ switch (t) {
111
+ case "second":
112
+ r.setMilliseconds(0), r.setSeconds(r.getSeconds() - r.getSeconds() % n);
113
+ break;
114
+ case "minute":
115
+ r.setSeconds(0, 0), r.setMinutes(r.getMinutes() - r.getMinutes() % n);
116
+ break;
117
+ case "hour":
118
+ r.setMinutes(0, 0, 0), r.setHours(r.getHours() - r.getHours() % n);
119
+ break;
120
+ case "day":
121
+ r.setHours(0, 0, 0, 0), n === 7 && r.setDate(r.getDate() - (r.getDay() + 6) % 7);
122
+ break;
123
+ case "month":
124
+ r.setHours(0, 0, 0, 0), r.setDate(1), r.setMonth(r.getMonth() - r.getMonth() % n);
125
+ break;
126
+ case "year": r.setHours(0, 0, 0, 0), r.setMonth(0, 1), r.setFullYear(r.getFullYear() - r.getFullYear() % n);
127
+ }
128
+ return r;
129
+ }, f = (e, { unit: t, step: n }) => {
130
+ switch (t) {
131
+ case "second":
132
+ e.setSeconds(e.getSeconds() + n);
133
+ break;
134
+ case "minute":
135
+ e.setMinutes(e.getMinutes() + n);
136
+ break;
137
+ case "hour":
138
+ e.setHours(e.getHours() + n);
139
+ break;
140
+ case "day":
141
+ e.setDate(e.getDate() + n);
142
+ break;
143
+ case "month":
144
+ e.setMonth(e.getMonth() + n);
145
+ break;
146
+ case "year": e.setFullYear(e.getFullYear() + n);
147
+ }
148
+ }, p = (t, n, r) => {
149
+ t > n && ([t, n] = [n, t]);
150
+ let i = u(n - t, r);
151
+ if (i.unit === "millisecond") return {
152
+ values: e(t, n, r),
153
+ unit: "millisecond",
154
+ format: (e) => _(e, "millisecond")
155
+ };
156
+ let a = [], o = d(t, i);
157
+ for (; o.getTime() < t;) f(o, i);
158
+ for (; o.getTime() <= n && a.length < 500;) a.push(o.getTime()), f(o, i);
159
+ let { unit: s } = i;
160
+ return {
161
+ values: a,
162
+ unit: s,
163
+ format: (e) => g(e, s)
164
+ };
165
+ }, m = (e) => `${e.getFullYear()}-${l(e.getMonth() + 1)}-${l(e.getDate())}`, h = (e) => `${l(e.getHours())}:${l(e.getMinutes())}`, g = (e, t) => {
166
+ let n = new Date(e), r = n.getHours() === 0 && n.getMinutes() === 0 && n.getSeconds() === 0;
167
+ switch (t) {
168
+ case "second": return `${h(n)}:${l(n.getSeconds())}`;
169
+ case "minute":
170
+ case "hour": return r ? `${l(n.getMonth() + 1)}-${l(n.getDate())}` : h(n);
171
+ case "day": return n.getMonth() === 0 && n.getDate() === 1 ? String(n.getFullYear()) : `${l(n.getMonth() + 1)}-${l(n.getDate())}`;
172
+ case "month": return n.getMonth() === 0 ? String(n.getFullYear()) : `${n.getFullYear()}-${l(n.getMonth() + 1)}`;
173
+ default: return String(n.getFullYear());
174
+ }
175
+ }, _ = (e, t = "minute") => {
176
+ let n = new Date(e);
177
+ if (Number.isNaN(n.getTime())) return "–";
178
+ switch (t) {
179
+ case "millisecond": return `${m(n)} ${h(n)}:${l(n.getSeconds())}.${l(n.getMilliseconds(), 3)}`;
180
+ case "second": return `${m(n)} ${h(n)}:${l(n.getSeconds())}`;
181
+ case "minute":
182
+ case "hour": return `${m(n)} ${h(n)}`;
183
+ default: return m(n);
184
+ }
185
+ };
186
+ //#endregion
187
+ export { _ as formatTime, p as timeTicks };
188
+
189
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","names":["SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","INTERVALS","pad","n","width","chooseInterval","target","span","count","tickStep","interval","years","floorTo","d","t","unit","step","advance","timeTicks","min","max","linearTicks","formatTime","v","values","formatTick","ymd","hm","value","midnight"],"sources":["../../../../charts/src/engine/time.ts"],"sourcesContent":["// Ticks and labels of time axes (timestamps in ms, local time).\n\nimport { linearTicks, tickStep } from \"./scale\";\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst MONTH = 30 * DAY;\nconst YEAR = 365 * DAY;\n\nexport type TimeUnit =\n \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"month\" | \"year\";\n\ninterface Interval {\n unit: TimeUnit;\n step: number;\n /** Approximate duration (ms) */\n ms: number;\n}\n\nconst INTERVALS: Interval[] = [\n { unit: \"second\", step: 1, ms: SECOND },\n { unit: \"second\", step: 5, ms: 5 * SECOND },\n { unit: \"second\", step: 15, ms: 15 * SECOND },\n { unit: \"second\", step: 30, ms: 30 * SECOND },\n { unit: \"minute\", step: 1, ms: MINUTE },\n { unit: \"minute\", step: 5, ms: 5 * MINUTE },\n { unit: \"minute\", step: 15, ms: 15 * MINUTE },\n { unit: \"minute\", step: 30, ms: 30 * MINUTE },\n { unit: \"hour\", step: 1, ms: HOUR },\n { unit: \"hour\", step: 3, ms: 3 * HOUR },\n { unit: \"hour\", step: 6, ms: 6 * HOUR },\n { unit: \"hour\", step: 12, ms: 12 * HOUR },\n { unit: \"day\", step: 1, ms: DAY },\n { unit: \"day\", step: 2, ms: 2 * DAY },\n { unit: \"day\", step: 7, ms: 7 * DAY },\n { unit: \"month\", step: 1, ms: MONTH },\n { unit: \"month\", step: 3, ms: 3 * MONTH },\n { unit: \"month\", step: 6, ms: 6 * MONTH },\n];\n\nconst pad = (n: number, width = 2) => String(n).padStart(width, \"0\");\n\nconst chooseInterval = (span: number, count: number): Interval => {\n const target = span / Math.max(1, count);\n if (target < SECOND * 0.75) {\n return { unit: \"millisecond\", step: tickStep(0, span, count), ms: 1 };\n }\n for (const interval of INTERVALS) {\n if (interval.ms >= target * 0.75) return interval;\n }\n const years = Math.max(1, tickStep(0, span / YEAR, count));\n return {\n unit: \"year\",\n step: Math.round(years),\n ms: Math.round(years) * YEAR,\n };\n};\n\n/** Start of the tick sequence: `t` floored to the unit, aligned on the step */\nconst floorTo = (t: number, { unit, step }: Interval): Date => {\n const d = new Date(t);\n switch (unit) {\n case \"second\":\n d.setMilliseconds(0);\n d.setSeconds(d.getSeconds() - (d.getSeconds() % step));\n break;\n case \"minute\":\n d.setSeconds(0, 0);\n d.setMinutes(d.getMinutes() - (d.getMinutes() % step));\n break;\n case \"hour\":\n d.setMinutes(0, 0, 0);\n d.setHours(d.getHours() - (d.getHours() % step));\n break;\n case \"day\":\n d.setHours(0, 0, 0, 0);\n // weeks start on Monday\n if (step === 7) d.setDate(d.getDate() - ((d.getDay() + 6) % 7));\n break;\n case \"month\":\n d.setHours(0, 0, 0, 0);\n d.setDate(1);\n d.setMonth(d.getMonth() - (d.getMonth() % step));\n break;\n case \"year\":\n d.setHours(0, 0, 0, 0);\n d.setMonth(0, 1);\n d.setFullYear(d.getFullYear() - (d.getFullYear() % step));\n break;\n default:\n break;\n }\n return d;\n};\n\nconst advance = (d: Date, { unit, step }: Interval) => {\n switch (unit) {\n case \"second\":\n d.setSeconds(d.getSeconds() + step);\n break;\n case \"minute\":\n d.setMinutes(d.getMinutes() + step);\n break;\n case \"hour\":\n d.setHours(d.getHours() + step);\n break;\n case \"day\":\n d.setDate(d.getDate() + step);\n break;\n case \"month\":\n d.setMonth(d.getMonth() + step);\n break;\n case \"year\":\n d.setFullYear(d.getFullYear() + step);\n break;\n default:\n break;\n }\n};\n\nexport interface TimeTicks {\n values: number[];\n unit: TimeUnit;\n format: (value: number) => string;\n}\n\n/** Calendar-aligned ticks between two timestamps */\nexport const timeTicks = (\n min: number,\n max: number,\n count: number,\n): TimeTicks => {\n if (min > max) [min, max] = [max, min];\n const interval = chooseInterval(max - min, count);\n if (interval.unit === \"millisecond\") {\n return {\n values: linearTicks(min, max, count),\n unit: \"millisecond\",\n format: (v) => formatTime(v, \"millisecond\"),\n };\n }\n const values: number[] = [];\n const d = floorTo(min, interval);\n while (d.getTime() < min) advance(d, interval);\n while (d.getTime() <= max && values.length < 500) {\n values.push(d.getTime());\n advance(d, interval);\n }\n const { unit } = interval;\n return { values, unit, format: (v) => formatTick(v, unit) };\n};\n\nconst ymd = (d: Date) =>\n `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\nconst hm = (d: Date) => `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n\n/** Short tick label; day boundaries show the date, year boundaries the year */\nconst formatTick = (value: number, unit: TimeUnit): string => {\n const d = new Date(value);\n const midnight =\n d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0;\n switch (unit) {\n case \"second\":\n return `${hm(d)}:${pad(d.getSeconds())}`;\n case \"minute\":\n case \"hour\":\n return midnight ? `${pad(d.getMonth() + 1)}-${pad(d.getDate())}` : hm(d);\n case \"day\":\n return d.getMonth() === 0 && d.getDate() === 1\n ? String(d.getFullYear())\n : `${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n case \"month\":\n return d.getMonth() === 0\n ? String(d.getFullYear())\n : `${d.getFullYear()}-${pad(d.getMonth() + 1)}`;\n default:\n return String(d.getFullYear());\n }\n};\n\n/** Full label (tooltips): precision follows the unit of the ticks */\nexport const formatTime = (\n value: number,\n unit: TimeUnit = \"minute\",\n): string => {\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) return \"–\";\n switch (unit) {\n case \"millisecond\":\n return `${ymd(d)} ${hm(d)}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(), 3)}`;\n case \"second\":\n return `${ymd(d)} ${hm(d)}:${pad(d.getSeconds())}`;\n case \"minute\":\n case \"hour\":\n return `${ymd(d)} ${hm(d)}`;\n default:\n return ymd(d);\n }\n};\n"],"mappings":"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"}
@@ -0,0 +1,356 @@
1
+ /** GPU / CPU backend that draws the data layer */
2
+ export type ChartRendererKind = "webgpu" | "webgl2" | "canvas2d";
3
+ /**
4
+ * Requested backend: `auto` tries WebGPU, then WebGL2, then Canvas2D, and
5
+ * skips GPU backends that run in software (no hardware acceleration)
6
+ */
7
+ export type ChartRendererPreference = "auto" | ChartRendererKind;
8
+ /** Scale of an axis */
9
+ export type ChartAxisType = "linear" | "time" | "category";
10
+ /** How a series is drawn */
11
+ export type ChartSeriesType = "line" | "area" | "bar" | "scatter";
12
+ /** X value of a datum: a number, a `Date` (time axis) or a category name */
13
+ export type ChartXValue = number | Date | string;
14
+ /** One datum written as an object */
15
+ export interface ChartPointDatum {
16
+ /** X value; the datum index when omitted */
17
+ x?: ChartXValue;
18
+ /** Y value; `null` leaves a gap */
19
+ y: number | null;
20
+ /** Diameter of the dot in CSS pixels (scatter) */
21
+ size?: number;
22
+ /** Color of the dot (scatter); any CSS color */
23
+ color?: string;
24
+ /** Text drawn next to the dot (scatter with `showLabels`) and shown in the tooltip */
25
+ label?: string;
26
+ }
27
+ /** Column-oriented data: the fastest form for large data sets (typed arrays are used as is) */
28
+ export interface ChartColumnData {
29
+ /** X values; the index when omitted */
30
+ x?: ArrayLike<number> | readonly ChartXValue[];
31
+ /** Y values (`NaN` / `null` leave a gap) */
32
+ y: ArrayLike<number> | readonly (number | null)[];
33
+ /** Per-point diameters in CSS pixels (scatter) */
34
+ size?: ArrayLike<number>;
35
+ }
36
+ /**
37
+ * Data of a series: y values only (`[3, 5, 2]`, typed arrays included),
38
+ * `[x, y]` tuples, objects or columns
39
+ */
40
+ export type ChartSeriesData = ArrayLike<number> | readonly (number | null)[] | readonly (readonly [ChartXValue, number | null])[] | readonly ChartPointDatum[] | ChartColumnData;
41
+ /** A data series */
42
+ export interface ChartSeries {
43
+ /** Stable identifier (defaults to the index) */
44
+ id?: string;
45
+ /** Name shown in the legend and the tooltip */
46
+ name?: string;
47
+ /**
48
+ * How the series is drawn
49
+ * @default "line"
50
+ */
51
+ type?: ChartSeriesType;
52
+ /** Data points */
53
+ data: ChartSeriesData;
54
+ /** Series color (any CSS color, `var(--x)` included); the palette when omitted */
55
+ color?: string;
56
+ /**
57
+ * Line width in CSS pixels (line / area)
58
+ * @default 2
59
+ */
60
+ lineWidth?: number;
61
+ /**
62
+ * Dot diameter in CSS pixels (scatter)
63
+ * @default 8
64
+ */
65
+ pointSize?: number;
66
+ /** Fill opacity (area, scatter), 0-1 */
67
+ opacity?: number;
68
+ /** Bars with the same stack id are stacked */
69
+ stack?: string;
70
+ /** Hides the series (it stays in the legend) */
71
+ hidden?: boolean;
72
+ /** Draws the `label` of each point next to it (scatter) */
73
+ showLabels?: boolean;
74
+ }
75
+ /** Options of an axis */
76
+ export interface ChartAxisOptions {
77
+ /**
78
+ * Scale of the axis: `linear` numbers, `time` timestamps / dates, `category` names
79
+ * @default "linear"
80
+ */
81
+ type?: ChartAxisType;
82
+ /** Lower bound; computed from the data when omitted */
83
+ min?: number;
84
+ /** Upper bound; computed from the data when omitted */
85
+ max?: number;
86
+ /** Axis title */
87
+ title?: string;
88
+ /** Category names (`category` axis); collected from the data when omitted */
89
+ categories?: readonly string[];
90
+ /** Formats a tick / tooltip value */
91
+ format?: (value: number) => string;
92
+ /**
93
+ * Approximate number of ticks
94
+ * @default 5 (y), computed from the width (x)
95
+ */
96
+ tickCount?: number;
97
+ /**
98
+ * Draws grid lines at the ticks
99
+ * @default true for y, false for x
100
+ */
101
+ grid?: boolean;
102
+ /**
103
+ * Shows the axis line, ticks and labels
104
+ * @default true
105
+ */
106
+ visible?: boolean;
107
+ /** Keeps zero inside the automatic range (always on for bars) */
108
+ zero?: boolean;
109
+ /** Reverses the direction of the axis */
110
+ reverse?: boolean;
111
+ /** Rounds the automatic range to tick values; on by default except for category axes */
112
+ nice?: boolean;
113
+ }
114
+ /** Position of an annotation label inside its area */
115
+ export type ChartLabelPosition = "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center";
116
+ /** Area annotation: a rectangle in data coordinates (omitted bounds extend to the plot edges) */
117
+ export interface ChartRectAnnotation {
118
+ type: "rect";
119
+ x0?: number;
120
+ x1?: number;
121
+ y0?: number;
122
+ y1?: number;
123
+ /** Fill color (any CSS color) */
124
+ color?: string;
125
+ /** Fill opacity, 0-1 (default 0.08) */
126
+ opacity?: number;
127
+ /** Text drawn inside the area */
128
+ label?: string;
129
+ /** Where the label goes (default `top-left`) */
130
+ labelPosition?: ChartLabelPosition;
131
+ /** Label color (defaults to `color`) */
132
+ labelColor?: string;
133
+ }
134
+ /** Reference line annotation at a value of the x or y axis */
135
+ export interface ChartLineAnnotation {
136
+ type: "line";
137
+ axis: "x" | "y";
138
+ value: number;
139
+ /** Line color (any CSS color) */
140
+ color?: string;
141
+ /** Line width in CSS pixels (default 1) */
142
+ width?: number;
143
+ /** Dash pattern, e.g. `[4, 4]` */
144
+ dash?: readonly number[];
145
+ /** Text drawn at the end of the line */
146
+ label?: string;
147
+ }
148
+ /** Text placed at a data position (omitted coordinates center it on the plot) */
149
+ export interface ChartTextAnnotation {
150
+ type: "text";
151
+ x?: number;
152
+ y?: number;
153
+ text: string;
154
+ /**
155
+ * Side of the text that touches the position: `top` hangs the text below
156
+ * it, `left` starts it there, ...; the text always stays inside the plot
157
+ * @default "center"
158
+ */
159
+ anchor?: "center" | "top" | "bottom" | "left" | "right";
160
+ /** Text color (defaults to the secondary text color) */
161
+ color?: string;
162
+ /**
163
+ * Font weight
164
+ * @default 500
165
+ */
166
+ weight?: number;
167
+ }
168
+ /** Background area, reference line or text */
169
+ export type ChartAnnotation = ChartRectAnnotation | ChartLineAnnotation | ChartTextAnnotation;
170
+ /** Zoom / pan / keyboard options */
171
+ export interface ChartInteractionOptions {
172
+ /**
173
+ * Axes that zoom and pan; `true` = x for line / area / bar charts, both for scatter charts
174
+ * @default true
175
+ */
176
+ zoom?: boolean | "x" | "y" | "xy";
177
+ /**
178
+ * Wheel zoom: only with Ctrl / ⌘ (and trackpad pinch) or always
179
+ * @default "modifier"
180
+ */
181
+ wheel?: "modifier" | "always";
182
+ /**
183
+ * Drag to pan (when zoomed)
184
+ * @default true
185
+ */
186
+ pan?: boolean;
187
+ /**
188
+ * Arrow keys move the highlight, +/- zoom, 0 resets, Esc clears
189
+ * @default true
190
+ */
191
+ keyboard?: boolean;
192
+ /**
193
+ * Scatter points can be dragged: `drag` events follow the pointer and a
194
+ * `drop` event ends the gesture (the data is not changed by the chart)
195
+ * @default false
196
+ */
197
+ dragPoints?: boolean;
198
+ }
199
+ /** Tooltip options */
200
+ export interface ChartTooltipOptions {
201
+ /**
202
+ * `nearest` shows the closest point, `axis` all the series at the closest x
203
+ * @default "axis" ("nearest" when every series is a scatter)
204
+ */
205
+ mode?: "nearest" | "axis";
206
+ /** Renders the tooltip content (a string is set as text) */
207
+ render?: (event: ChartHoverEvent) => string | Node | null;
208
+ }
209
+ /** Legend options */
210
+ export interface ChartLegendOptions {
211
+ /**
212
+ * Legend position
213
+ * @default "top"
214
+ */
215
+ position?: "top" | "bottom";
216
+ /**
217
+ * Clicking an item toggles its series
218
+ * @default true
219
+ */
220
+ toggle?: boolean;
221
+ }
222
+ /** Inner space around the plot area, in CSS pixels */
223
+ export interface ChartPadding {
224
+ top?: number;
225
+ right?: number;
226
+ bottom?: number;
227
+ left?: number;
228
+ }
229
+ /** Options of `createChart` */
230
+ export interface ChartOptions {
231
+ /** Data series */
232
+ series: readonly ChartSeries[];
233
+ /** X axis */
234
+ xAxis?: ChartAxisOptions;
235
+ /** Y axis */
236
+ yAxis?: ChartAxisOptions;
237
+ /**
238
+ * Backend of the data layer
239
+ * @default "auto"
240
+ */
241
+ renderer?: ChartRendererPreference;
242
+ /** Legend; shown by default when there are several named series */
243
+ legend?: boolean | ChartLegendOptions;
244
+ /** Tooltip; `false` disables it */
245
+ tooltip?: boolean | ChartTooltipOptions;
246
+ /** Vertical guide line following the pointer (default on for `axis` tooltips) */
247
+ crosshair?: boolean;
248
+ /** Background areas and reference lines */
249
+ annotations?: readonly ChartAnnotation[];
250
+ /** Zoom / pan / keyboard; `false` makes the chart static */
251
+ interaction?: boolean | ChartInteractionOptions;
252
+ /** Space around the plot area */
253
+ padding?: ChartPadding;
254
+ /** Colors of the series without `color` (defaults to the `--chart-series-1..8` CSS variables, then the theme colors) */
255
+ palette?: readonly string[];
256
+ /** Accessible name of the chart */
257
+ ariaLabel?: string;
258
+ }
259
+ /** A point under the pointer */
260
+ export interface ChartHoverItem {
261
+ seriesIndex: number;
262
+ seriesId: string;
263
+ seriesName: string;
264
+ /** Index of the point in the series data */
265
+ index: number;
266
+ x: number;
267
+ y: number;
268
+ /** Resolved color of the point */
269
+ color: string;
270
+ label?: string;
271
+ }
272
+ /** Hover / click payload */
273
+ export interface ChartHoverEvent {
274
+ /** Points under the pointer (several in `axis` mode) */
275
+ items: ChartHoverItem[];
276
+ /** X value of the first item */
277
+ x: number;
278
+ /** Formatted x value */
279
+ xLabel: string;
280
+ }
281
+ /** Visible range of the axes */
282
+ export interface ChartView {
283
+ x: [number, number];
284
+ y: [number, number];
285
+ }
286
+ /** Rectangle in CSS pixels, relative to the chart's container */
287
+ export interface ChartRect {
288
+ x: number;
289
+ y: number;
290
+ width: number;
291
+ height: number;
292
+ }
293
+ /** A dragged point (`drag` / `drop` events) */
294
+ export interface ChartDragEvent {
295
+ /** The point being dragged */
296
+ item: ChartHoverItem;
297
+ /** Data coordinates under the pointer */
298
+ x: number;
299
+ y: number;
300
+ }
301
+ /** A click (or tap) on the plot area outside the points */
302
+ export interface ChartPlotClickEvent {
303
+ /** Data coordinates of the click */
304
+ x: number;
305
+ y: number;
306
+ }
307
+ /** Events of a chart instance */
308
+ export interface ChartEventMap {
309
+ hover: ChartHoverEvent | null;
310
+ click: ChartHoverEvent;
311
+ /** Click on the plot area where there is no point */
312
+ plotClick: ChartPlotClickEvent;
313
+ zoom: ChartView;
314
+ renderer: ChartRendererKind;
315
+ /** The plot area moved or was resized */
316
+ layout: ChartRect;
317
+ /** A point is dragged (`interaction.dragPoints`) */
318
+ drag: ChartDragEvent;
319
+ /** A dragged point was released */
320
+ drop: ChartDragEvent;
321
+ }
322
+ /** Chart created by `createChart` */
323
+ export interface ChartInstance {
324
+ /** Replaces the options (unchanged data arrays are not processed again) */
325
+ setOptions(options: ChartOptions): void;
326
+ /** Measures the container again (a ResizeObserver does it automatically) */
327
+ resize(): void;
328
+ /** Shows the whole data range */
329
+ resetZoom(): void;
330
+ /** Visible range */
331
+ getView(): ChartView;
332
+ /** Sets the visible range */
333
+ setView(view: Partial<ChartView>): void;
334
+ /** Plot area in CSS pixels of the container (`null` before the first frame) */
335
+ getPlotRect(): ChartRect | null;
336
+ /** Data coordinates -> CSS pixels of the container (`null` before the first frame) */
337
+ toPixel(x: number, y: number): {
338
+ x: number;
339
+ y: number;
340
+ } | null;
341
+ /** CSS pixels of the container -> data coordinates (`null` before the first frame) */
342
+ fromPixel(x: number, y: number): {
343
+ x: number;
344
+ y: number;
345
+ } | null;
346
+ /** Backend in use, `null` until ready */
347
+ getRenderer(): ChartRendererKind | null;
348
+ /** Resolves with the backend once the first frame can be drawn (`null` when the browser has no canvas support) */
349
+ ready: Promise<ChartRendererKind | null>;
350
+ /** Reads the CSS variables again (theme changes on `<html>` / `<body>` are detected automatically) */
351
+ refreshTheme(): void;
352
+ /** Subscribes to an event; returns the unsubscribe function */
353
+ on<K extends keyof ChartEventMap>(type: K, listener: (event: ChartEventMap[K]) => void): () => void;
354
+ /** Removes the DOM and frees the GPU resources */
355
+ destroy(): void;
356
+ }