@mui/x-charts 8.11.3 → 8.12.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 (282) hide show
  1. package/BarChart/BarChart.d.ts +2 -2
  2. package/BarChart/BarChart.js +1 -0
  3. package/BarChart/BarChart.plugins.d.ts +3 -2
  4. package/BarChart/BarChart.plugins.js +2 -1
  5. package/BarChart/BarElement.js +10 -2
  6. package/BarChart/index.d.ts +1 -0
  7. package/BarChart/index.js +12 -0
  8. package/BarChart/useBarChartProps.d.ts +2 -2
  9. package/CHANGELOG.md +151 -6
  10. package/ChartContainer/ChartContainer.js +4 -2
  11. package/ChartContainer/useChartContainerProps.js +4 -2
  12. package/ChartsLegend/ContinuousColorLegend.js +1 -0
  13. package/ChartsLegend/PiecewiseColorLegend.js +1 -0
  14. package/ChartsSurface/ChartsSurface.js +21 -2
  15. package/ChartsWrapper/ChartsWrapper.d.ts +2 -1
  16. package/ChartsWrapper/ChartsWrapper.js +49 -46
  17. package/ChartsXAxis/useAxisTicksProps.d.ts +3 -3
  18. package/ChartsYAxis/useAxisTicksProps.d.ts +3 -3
  19. package/LineChart/FocusedMark.d.ts +2 -0
  20. package/LineChart/FocusedMark.js +44 -0
  21. package/LineChart/LineChart.d.ts +2 -2
  22. package/LineChart/LineChart.js +3 -1
  23. package/LineChart/LineChart.plugins.d.ts +3 -2
  24. package/LineChart/LineChart.plugins.js +2 -1
  25. package/LineChart/index.d.ts +1 -0
  26. package/LineChart/index.js +12 -0
  27. package/LineChart/useLineChartProps.d.ts +2 -2
  28. package/PieChart/PieArc.d.ts +1 -0
  29. package/PieChart/PieArc.js +7 -3
  30. package/PieChart/PieArcPlot.js +1 -0
  31. package/PieChart/PieChart.js +1 -0
  32. package/PieChart/PieChart.plugins.d.ts +2 -1
  33. package/PieChart/PieChart.plugins.js +2 -1
  34. package/PieChart/dataTransform/useTransformData.d.ts +1 -0
  35. package/PieChart/dataTransform/useTransformData.js +9 -1
  36. package/PieChart/index.d.ts +1 -0
  37. package/PieChart/index.js +12 -0
  38. package/RadarChart/RadarChart.plugins.d.ts +1 -1
  39. package/RadarChart/RadarDataProvider/RadarDataProvider.d.ts +3 -3
  40. package/RadarChart/index.d.ts +2 -1
  41. package/RadarChart/index.js +12 -0
  42. package/RadarChart/useRadarChartProps.d.ts +2 -2
  43. package/ScatterChart/BatchScatter.d.ts +32 -0
  44. package/ScatterChart/BatchScatter.js +171 -0
  45. package/ScatterChart/Scatter.js +13 -5
  46. package/ScatterChart/ScatterChart.d.ts +4 -4
  47. package/ScatterChart/ScatterChart.js +13 -2
  48. package/ScatterChart/ScatterChart.plugins.d.ts +4 -3
  49. package/ScatterChart/ScatterChart.plugins.js +3 -2
  50. package/ScatterChart/ScatterPlot.d.ts +10 -0
  51. package/ScatterChart/ScatterPlot.js +14 -2
  52. package/ScatterChart/index.d.ts +1 -0
  53. package/ScatterChart/index.js +12 -0
  54. package/ScatterChart/useScatterChartProps.d.ts +2 -2
  55. package/ScatterChart/useScatterChartProps.js +8 -5
  56. package/SparkLineChart/SparkLineChart.js +10 -5
  57. package/Toolbar/Toolbar.js +1 -2
  58. package/colorPalettes/types.d.ts +1 -1
  59. package/context/ChartApi.d.ts +6 -6
  60. package/esm/BarChart/BarChart.d.ts +2 -2
  61. package/esm/BarChart/BarChart.js +1 -0
  62. package/esm/BarChart/BarChart.plugins.d.ts +3 -2
  63. package/esm/BarChart/BarChart.plugins.js +2 -1
  64. package/esm/BarChart/BarElement.js +10 -2
  65. package/esm/BarChart/index.d.ts +1 -0
  66. package/esm/BarChart/index.js +1 -0
  67. package/esm/BarChart/useBarChartProps.d.ts +2 -2
  68. package/esm/ChartContainer/ChartContainer.js +4 -2
  69. package/esm/ChartContainer/useChartContainerProps.js +4 -2
  70. package/esm/ChartsLegend/ContinuousColorLegend.js +1 -0
  71. package/esm/ChartsLegend/PiecewiseColorLegend.js +1 -0
  72. package/esm/ChartsSurface/ChartsSurface.js +21 -2
  73. package/esm/ChartsWrapper/ChartsWrapper.d.ts +2 -1
  74. package/esm/ChartsWrapper/ChartsWrapper.js +49 -46
  75. package/esm/ChartsXAxis/useAxisTicksProps.d.ts +3 -3
  76. package/esm/ChartsYAxis/useAxisTicksProps.d.ts +3 -3
  77. package/esm/LineChart/FocusedMark.d.ts +2 -0
  78. package/esm/LineChart/FocusedMark.js +38 -0
  79. package/esm/LineChart/LineChart.d.ts +2 -2
  80. package/esm/LineChart/LineChart.js +3 -1
  81. package/esm/LineChart/LineChart.plugins.d.ts +3 -2
  82. package/esm/LineChart/LineChart.plugins.js +2 -1
  83. package/esm/LineChart/index.d.ts +1 -0
  84. package/esm/LineChart/index.js +1 -0
  85. package/esm/LineChart/useLineChartProps.d.ts +2 -2
  86. package/esm/PieChart/PieArc.d.ts +1 -0
  87. package/esm/PieChart/PieArc.js +7 -3
  88. package/esm/PieChart/PieArcPlot.js +1 -0
  89. package/esm/PieChart/PieChart.js +1 -0
  90. package/esm/PieChart/PieChart.plugins.d.ts +2 -1
  91. package/esm/PieChart/PieChart.plugins.js +2 -1
  92. package/esm/PieChart/dataTransform/useTransformData.d.ts +1 -0
  93. package/esm/PieChart/dataTransform/useTransformData.js +9 -1
  94. package/esm/PieChart/index.d.ts +1 -0
  95. package/esm/PieChart/index.js +1 -0
  96. package/esm/RadarChart/RadarChart.plugins.d.ts +1 -1
  97. package/esm/RadarChart/RadarDataProvider/RadarDataProvider.d.ts +3 -3
  98. package/esm/RadarChart/index.d.ts +2 -1
  99. package/esm/RadarChart/index.js +2 -1
  100. package/esm/RadarChart/useRadarChartProps.d.ts +2 -2
  101. package/esm/ScatterChart/BatchScatter.d.ts +32 -0
  102. package/esm/ScatterChart/BatchScatter.js +165 -0
  103. package/esm/ScatterChart/Scatter.js +13 -5
  104. package/esm/ScatterChart/ScatterChart.d.ts +4 -4
  105. package/esm/ScatterChart/ScatterChart.js +13 -2
  106. package/esm/ScatterChart/ScatterChart.plugins.d.ts +4 -3
  107. package/esm/ScatterChart/ScatterChart.plugins.js +3 -2
  108. package/esm/ScatterChart/ScatterPlot.d.ts +10 -0
  109. package/esm/ScatterChart/ScatterPlot.js +14 -2
  110. package/esm/ScatterChart/index.d.ts +1 -0
  111. package/esm/ScatterChart/index.js +1 -0
  112. package/esm/ScatterChart/useScatterChartProps.d.ts +2 -2
  113. package/esm/ScatterChart/useScatterChartProps.js +8 -5
  114. package/esm/SparkLineChart/SparkLineChart.js +10 -5
  115. package/esm/Toolbar/Toolbar.js +1 -2
  116. package/esm/colorPalettes/types.d.ts +1 -1
  117. package/esm/context/ChartApi.d.ts +6 -6
  118. package/esm/hooks/useAxis.d.ts +5 -5
  119. package/esm/hooks/useDrawingArea.d.ts +20 -2
  120. package/esm/hooks/useFocusedItem.d.ts +15 -0
  121. package/esm/hooks/useFocusedItem.js +20 -0
  122. package/esm/hooks/useIsItemFocused.d.ts +12 -0
  123. package/esm/hooks/useIsItemFocused.js +15 -0
  124. package/esm/hooks/useIsItemFocusedGetter.d.ts +8 -0
  125. package/esm/hooks/useIsItemFocusedGetter.js +14 -0
  126. package/esm/hooks/useScale.js +6 -0
  127. package/esm/index.d.ts +1 -0
  128. package/esm/index.js +2 -1
  129. package/esm/internals/animation/Transition.js +1 -3
  130. package/esm/internals/index.d.ts +3 -2
  131. package/esm/internals/index.js +3 -2
  132. package/esm/internals/plugins/allPlugins.d.ts +5 -4
  133. package/esm/internals/plugins/allPlugins.js +3 -2
  134. package/esm/internals/plugins/corePlugins/useChartSeries/processSeries.d.ts +1 -1
  135. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.d.ts +2 -0
  136. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.js +66 -72
  137. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/createAxisFilterMapper.d.ts +3 -19
  138. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/createAxisFilterMapper.js +10 -18
  139. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisDomainLimit.d.ts +1 -1
  140. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/{getAxisExtremum.d.ts → getAxisExtrema.d.ts} +1 -1
  141. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisExtrema.js +24 -0
  142. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisScale.d.ts +63 -0
  143. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisScale.js +123 -0
  144. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxis.js +8 -6
  145. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisPreview.selectors.d.ts +2 -0
  146. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisPreview.selectors.js +46 -4
  147. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.d.ts +10 -0
  148. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js +32 -21
  149. package/esm/internals/plugins/featurePlugins/useChartClosestPoint/index.d.ts +3 -0
  150. package/esm/internals/plugins/featurePlugins/useChartClosestPoint/index.js +2 -0
  151. package/esm/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.d.ts +3 -0
  152. package/esm/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.js → useChartClosestPoint/useChartClosestPoint.js} +9 -7
  153. package/esm/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.selectors.d.ts +5 -0
  154. package/esm/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.selectors.js +3 -0
  155. package/esm/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.types.d.ts → useChartClosestPoint/useChartClosestPoint.types.d.ts} +8 -4
  156. package/esm/internals/plugins/featurePlugins/useChartHighlight/highlightStates.d.ts +16 -0
  157. package/esm/internals/plugins/featurePlugins/useChartHighlight/highlightStates.js +32 -0
  158. package/esm/internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.selectors.d.ts +4 -0
  159. package/esm/internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.selectors.js +5 -0
  160. package/esm/internals/plugins/featurePlugins/useChartInteraction/checkHasInteractionPlugin.d.ts +3 -0
  161. package/esm/internals/plugins/featurePlugins/useChartInteraction/checkHasInteractionPlugin.js +3 -0
  162. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/index.d.ts +3 -0
  163. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/index.js +2 -0
  164. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.d.ts +3 -0
  165. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.helpers.d.ts +20 -0
  166. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.helpers.js +88 -0
  167. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.js +210 -0
  168. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.selectors.d.ts +25 -0
  169. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.selectors.js +7 -0
  170. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.types.d.ts +34 -0
  171. package/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.types.js +1 -0
  172. package/esm/internals/plugins/featurePlugins/useChartPolarAxis/useChartPolarAxis.js +10 -8
  173. package/esm/internals/plugins/featurePlugins/useChartPolarAxis/useChartPolarAxis.types.d.ts +2 -1
  174. package/esm/internals/plugins/models/seriesConfig/getSeriesWithDefaultValues.types.d.ts +1 -1
  175. package/esm/internals/scaleGuards.d.ts +7 -0
  176. package/esm/internals/scaleGuards.js +6 -0
  177. package/esm/locales/elGR.d.ts +96 -0
  178. package/esm/locales/elGR.js +100 -0
  179. package/esm/locales/enUS.d.ts +96 -0
  180. package/esm/locales/enUS.js +99 -1
  181. package/esm/locales/frFR.d.ts +96 -0
  182. package/esm/locales/frFR.js +100 -2
  183. package/esm/locales/ptBR.d.ts +96 -0
  184. package/esm/locales/ptBR.js +100 -0
  185. package/esm/locales/ptPT.d.ts +96 -0
  186. package/esm/locales/ptPT.js +100 -0
  187. package/esm/locales/svSE.d.ts +97 -1
  188. package/esm/locales/svSE.js +100 -0
  189. package/esm/locales/utils/chartsLocaleTextApi.d.ts +384 -0
  190. package/esm/locales/utils/getChartsLocalization.d.ts +96 -0
  191. package/esm/plugins/index.d.ts +6 -0
  192. package/esm/plugins/index.js +12 -0
  193. package/hooks/useAxis.d.ts +5 -5
  194. package/hooks/useDrawingArea.d.ts +20 -2
  195. package/hooks/useFocusedItem.d.ts +15 -0
  196. package/hooks/useFocusedItem.js +26 -0
  197. package/hooks/useIsItemFocused.d.ts +12 -0
  198. package/hooks/useIsItemFocused.js +20 -0
  199. package/hooks/useIsItemFocusedGetter.d.ts +8 -0
  200. package/hooks/useIsItemFocusedGetter.js +18 -0
  201. package/hooks/useScale.js +6 -0
  202. package/index.d.ts +1 -0
  203. package/index.js +13 -1
  204. package/internals/animation/Transition.js +0 -2
  205. package/internals/index.d.ts +3 -2
  206. package/internals/index.js +20 -8
  207. package/internals/plugins/allPlugins.d.ts +5 -4
  208. package/internals/plugins/allPlugins.js +3 -2
  209. package/internals/plugins/corePlugins/useChartSeries/processSeries.d.ts +1 -1
  210. package/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.d.ts +2 -0
  211. package/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.js +63 -69
  212. package/internals/plugins/featurePlugins/useChartCartesianAxis/createAxisFilterMapper.d.ts +3 -19
  213. package/internals/plugins/featurePlugins/useChartCartesianAxis/createAxisFilterMapper.js +10 -18
  214. package/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisDomainLimit.d.ts +1 -1
  215. package/internals/plugins/featurePlugins/useChartCartesianAxis/{getAxisExtremum.d.ts → getAxisExtrema.d.ts} +1 -1
  216. package/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisExtrema.js +30 -0
  217. package/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisScale.d.ts +63 -0
  218. package/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisScale.js +134 -0
  219. package/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxis.js +8 -6
  220. package/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisPreview.selectors.d.ts +2 -0
  221. package/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisPreview.selectors.js +47 -5
  222. package/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.d.ts +10 -0
  223. package/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js +33 -22
  224. package/internals/plugins/featurePlugins/useChartClosestPoint/index.d.ts +3 -0
  225. package/internals/plugins/featurePlugins/useChartClosestPoint/index.js +27 -0
  226. package/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.d.ts +3 -0
  227. package/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.js → useChartClosestPoint/useChartClosestPoint.js} +11 -9
  228. package/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.selectors.d.ts +5 -0
  229. package/internals/plugins/featurePlugins/useChartClosestPoint/useChartClosestPoint.selectors.js +9 -0
  230. package/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.types.d.ts → useChartClosestPoint/useChartClosestPoint.types.d.ts} +8 -4
  231. package/internals/plugins/featurePlugins/useChartHighlight/highlightStates.d.ts +16 -0
  232. package/internals/plugins/featurePlugins/useChartHighlight/highlightStates.js +41 -0
  233. package/internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.selectors.d.ts +4 -0
  234. package/internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.selectors.js +6 -1
  235. package/internals/plugins/featurePlugins/useChartInteraction/checkHasInteractionPlugin.d.ts +3 -0
  236. package/internals/plugins/featurePlugins/useChartInteraction/checkHasInteractionPlugin.js +9 -0
  237. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/index.d.ts +3 -0
  238. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/index.js +27 -0
  239. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.d.ts +3 -0
  240. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.helpers.d.ts +20 -0
  241. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.helpers.js +96 -0
  242. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.js +218 -0
  243. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.selectors.d.ts +25 -0
  244. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.selectors.js +13 -0
  245. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.types.d.ts +34 -0
  246. package/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.types.js +5 -0
  247. package/internals/plugins/featurePlugins/useChartPolarAxis/useChartPolarAxis.js +10 -8
  248. package/internals/plugins/featurePlugins/useChartPolarAxis/useChartPolarAxis.types.d.ts +2 -1
  249. package/internals/plugins/models/seriesConfig/getSeriesWithDefaultValues.types.d.ts +1 -1
  250. package/internals/scaleGuards.d.ts +7 -0
  251. package/internals/scaleGuards.js +8 -0
  252. package/locales/elGR.d.ts +96 -0
  253. package/locales/elGR.js +100 -0
  254. package/locales/enUS.d.ts +96 -0
  255. package/locales/enUS.js +99 -1
  256. package/locales/frFR.d.ts +96 -0
  257. package/locales/frFR.js +100 -2
  258. package/locales/ptBR.d.ts +96 -0
  259. package/locales/ptBR.js +100 -0
  260. package/locales/ptPT.d.ts +96 -0
  261. package/locales/ptPT.js +100 -0
  262. package/locales/svSE.d.ts +97 -1
  263. package/locales/svSE.js +100 -0
  264. package/locales/utils/chartsLocaleTextApi.d.ts +384 -0
  265. package/locales/utils/getChartsLocalization.d.ts +96 -0
  266. package/package.json +4 -4
  267. package/plugins/index.d.ts +6 -0
  268. package/plugins/index.js +47 -0
  269. package/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisExtremum.js +0 -22
  270. package/esm/internals/plugins/featurePlugins/useChartVoronoi/index.d.ts +0 -3
  271. package/esm/internals/plugins/featurePlugins/useChartVoronoi/index.js +0 -2
  272. package/esm/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.d.ts +0 -3
  273. package/esm/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.selectors.d.ts +0 -5
  274. package/esm/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.selectors.js +0 -3
  275. package/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisExtremum.js +0 -29
  276. package/internals/plugins/featurePlugins/useChartVoronoi/index.d.ts +0 -3
  277. package/internals/plugins/featurePlugins/useChartVoronoi/index.js +0 -27
  278. package/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.d.ts +0 -3
  279. package/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.selectors.d.ts +0 -5
  280. package/internals/plugins/featurePlugins/useChartVoronoi/useChartVoronoi.selectors.js +0 -9
  281. /package/esm/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.types.js → useChartClosestPoint/useChartClosestPoint.types.js} +0 -0
  282. /package/internals/plugins/featurePlugins/{useChartVoronoi/useChartVoronoi.types.js → useChartClosestPoint/useChartClosestPoint.types.js} +0 -0
@@ -1,9 +1,27 @@
1
1
  export type ChartDrawingArea = {
2
- top: number;
2
+ /**
3
+ * The gap between the left border of the SVG and the drawing area.
4
+ */
3
5
  left: number;
4
- right: number;
6
+ /**
7
+ * The gap between the top border of the SVG and the drawing area.
8
+ */
9
+ top: number;
10
+ /**
11
+ * The gap between the bottom border of the SVG and the drawing area.
12
+ */
5
13
  bottom: number;
14
+ /**
15
+ * The gap between the right border of the SVG and the drawing area.
16
+ */
17
+ right: number;
18
+ /**
19
+ * The width of the drawing area.
20
+ */
6
21
  width: number;
22
+ /**
23
+ * The height of the drawing area.
24
+ */
7
25
  height: number;
8
26
  };
9
27
  /**
@@ -0,0 +1,15 @@
1
+ import { ChartSeriesType } from "../models/seriesType/config.js";
2
+ import { SeriesId } from "../models/seriesType/common.js";
3
+ export type FocusedItemData = {
4
+ seriesType: ChartSeriesType;
5
+ seriesId: SeriesId;
6
+ dataIndex: number;
7
+ };
8
+ /**
9
+ * Get the focused item from keyboard navigation.
10
+ */
11
+ export declare function useFocusedItem(): {
12
+ seriesType: keyof import("../internals/index.js").ChartsSeriesConfig;
13
+ seriesId: SeriesId;
14
+ dataIndex: number;
15
+ } | null;
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { useStore } from "../internals/store/useStore.js";
5
+ import { useSelector } from "../internals/store/useSelector.js";
6
+ import { selectorChartsFocusedSeriesType, selectorChartsFocusedSeriesId, selectorChartsFocusedDataIndex } from "../internals/plugins/featurePlugins/useChartKeyboardNavigation/index.js";
7
+ /**
8
+ * Get the focused item from keyboard navigation.
9
+ */
10
+ export function useFocusedItem() {
11
+ const store = useStore();
12
+ const focusedSeriesType = useSelector(store, selectorChartsFocusedSeriesType);
13
+ const focusedSeriesId = useSelector(store, selectorChartsFocusedSeriesId);
14
+ const focusedDataIndex = useSelector(store, selectorChartsFocusedDataIndex);
15
+ return React.useMemo(() => focusedSeriesType === undefined || focusedSeriesId === undefined || focusedDataIndex === undefined ? null : {
16
+ seriesType: focusedSeriesType,
17
+ seriesId: focusedSeriesId,
18
+ dataIndex: focusedDataIndex
19
+ }, [focusedSeriesType, focusedSeriesId, focusedDataIndex]);
20
+ }
@@ -0,0 +1,12 @@
1
+ import { FocusedItemData } from "./useFocusedItem.js";
2
+ type UseItemFocusedParams = FocusedItemData;
3
+ /**
4
+ * A hook to check if an item has the focus.
5
+ *
6
+ * If you need to process multiple points, use the `useIsItemFocusedGetter` hook instead.
7
+ *
8
+ * @param {FocusedItemData} item is the item to check
9
+ * @returns {boolean} the focus state
10
+ */
11
+ export declare function useIsItemFocused(item: UseItemFocusedParams): boolean;
12
+ export {};
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+
3
+ import { useFocusedItem } from "./useFocusedItem.js";
4
+ /**
5
+ * A hook to check if an item has the focus.
6
+ *
7
+ * If you need to process multiple points, use the `useIsItemFocusedGetter` hook instead.
8
+ *
9
+ * @param {FocusedItemData} item is the item to check
10
+ * @returns {boolean} the focus state
11
+ */
12
+ export function useIsItemFocused(item) {
13
+ const focusedItem = useFocusedItem();
14
+ return focusedItem !== null && focusedItem.seriesType === item.seriesType && focusedItem.seriesId === item.seriesId && focusedItem.dataIndex === item.dataIndex;
15
+ }
@@ -0,0 +1,8 @@
1
+ import { FocusedItemData } from "./useFocusedItem.js";
2
+ /**
3
+ * A hook to check focus state of multiple items.
4
+ * If you're interested by a single one, consider using `useIsItemFocused`.
5
+ *
6
+ * @returns {(item: FocusedItemData) => boolean} callback to get the state of the item.
7
+ */
8
+ export declare function useIsItemFocusedGetter(): (item: FocusedItemData) => boolean;
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import { useFocusedItem } from "./useFocusedItem.js";
4
+
5
+ /**
6
+ * A hook to check focus state of multiple items.
7
+ * If you're interested by a single one, consider using `useIsItemFocused`.
8
+ *
9
+ * @returns {(item: FocusedItemData) => boolean} callback to get the state of the item.
10
+ */
11
+ export function useIsItemFocusedGetter() {
12
+ const focusedItem = useFocusedItem();
13
+ return item => focusedItem !== null && focusedItem.seriesType === item.seriesType && focusedItem.seriesId === item.seriesId && focusedItem.dataIndex === item.dataIndex;
14
+ }
@@ -13,6 +13,12 @@ export function getValueToPositionMapper(scale) {
13
13
  if (isOrdinalScale(scale)) {
14
14
  return value => (scale(value) ?? 0) + scale.bandwidth() / 2;
15
15
  }
16
+ const domain = scale.domain();
17
+
18
+ // Fixes https://github.com/mui/mui-x/issues/18999#issuecomment-3173787401
19
+ if (domain[0] === domain[1]) {
20
+ return value => value === domain[0] ? scale(value) : NaN;
21
+ }
16
22
  return value => scale(value);
17
23
  }
18
24
 
package/esm/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./constants/index.js";
2
2
  export * from "./context/index.js";
3
3
  export * from "./hooks/index.js";
4
+ export * from "./plugins/index.js";
4
5
  export * from "./colorPalettes/index.js";
5
6
  export * from "./models/index.js";
6
7
  export * from "./ChartsClipPath/index.js";
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v8.11.3
2
+ * @mui/x-charts v8.12.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -8,6 +8,7 @@
8
8
  export * from "./constants/index.js";
9
9
  export * from "./context/index.js";
10
10
  export * from "./hooks/index.js";
11
+ export * from "./plugins/index.js";
11
12
  export * from "./colorPalettes/index.js";
12
13
  export * from "./models/index.js";
13
14
  export * from "./ChartsClipPath/index.js";
@@ -1,4 +1,4 @@
1
- import { timer, now, timeout, timerFlush } from '@mui/x-charts-vendor/d3-timer';
1
+ import { timer, now, timeout } from '@mui/x-charts-vendor/d3-timer';
2
2
 
3
3
  /**
4
4
  * A resumable transition class inspired by d3-transition.
@@ -50,7 +50,6 @@ export class Transition {
50
50
  /* If we're resuming the transition, then subtract elapsed to continue the easing. */
51
51
  const time = now() - this.elapsed;
52
52
  this.timer = timer(elapsed => this.timerCallback(elapsed), 0, time);
53
- timerFlush();
54
53
  return this;
55
54
  }
56
55
 
@@ -74,7 +73,6 @@ export class Transition {
74
73
  finish() {
75
74
  this.stop();
76
75
  timeout(() => this.timerCallback(this.duration));
77
- timerFlush();
78
76
  return this;
79
77
  }
80
78
  }
@@ -25,7 +25,8 @@ export * from "./plugins/featurePlugins/useChartCartesianAxis/index.js";
25
25
  export * from "./plugins/featurePlugins/useChartPolarAxis/index.js";
26
26
  export * from "./plugins/featurePlugins/useChartInteraction/index.js";
27
27
  export * from "./plugins/featurePlugins/useChartHighlight/index.js";
28
- export * from "./plugins/featurePlugins/useChartVoronoi/index.js";
28
+ export * from "./plugins/featurePlugins/useChartKeyboardNavigation/index.js";
29
+ export * from "./plugins/featurePlugins/useChartClosestPoint/index.js";
29
30
  export * from "./plugins/utils/selectors.js";
30
31
  export { getAxisTriggerTooltip as getCartesianAxisTriggerTooltip } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisTriggerTooltip.js";
31
32
  export { getAxisIndex as getCartesianAxisIndex } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisValue.js";
@@ -54,7 +55,7 @@ export * from "./dateHelpers.js";
54
55
  export * from "./invertScale.js";
55
56
  export * from "./scaleGuards.js";
56
57
  export * from "./findMinMax.js";
57
- export { getAxisExtremum } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisExtremum.js";
58
+ export { getAxisExtrema } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisExtrema.js";
58
59
  export * from "../context/ChartProvider/index.js";
59
60
  export * from "../context/ChartsSlotsContext.js";
60
61
  export * from "../models/seriesType/config.js";
@@ -30,7 +30,8 @@ export * from "./plugins/featurePlugins/useChartCartesianAxis/index.js";
30
30
  export * from "./plugins/featurePlugins/useChartPolarAxis/index.js";
31
31
  export * from "./plugins/featurePlugins/useChartInteraction/index.js";
32
32
  export * from "./plugins/featurePlugins/useChartHighlight/index.js";
33
- export * from "./plugins/featurePlugins/useChartVoronoi/index.js";
33
+ export * from "./plugins/featurePlugins/useChartKeyboardNavigation/index.js";
34
+ export * from "./plugins/featurePlugins/useChartClosestPoint/index.js";
34
35
  export * from "./plugins/utils/selectors.js";
35
36
  export { getAxisTriggerTooltip as getCartesianAxisTriggerTooltip } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisTriggerTooltip.js";
36
37
  export { getAxisIndex as getCartesianAxisIndex } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisValue.js";
@@ -66,7 +67,7 @@ export * from "./scaleGuards.js";
66
67
  export * from "./findMinMax.js";
67
68
 
68
69
  // contexts
69
- export { getAxisExtremum } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisExtremum.js";
70
+ export { getAxisExtrema } from "./plugins/featurePlugins/useChartCartesianAxis/getAxisExtrema.js";
70
71
  export * from "../context/ChartProvider/index.js";
71
72
  export * from "../context/ChartsSlotsContext.js";
72
73
 
@@ -2,9 +2,10 @@ import { ChartSeriesType } from "../../models/seriesType/config.js";
2
2
  import { UseChartCartesianAxisSignature } from "./featurePlugins/useChartCartesianAxis/index.js";
3
3
  import { UseChartHighlightSignature } from "./featurePlugins/useChartHighlight/index.js";
4
4
  import { UseChartInteractionSignature } from "./featurePlugins/useChartInteraction/index.js";
5
+ import { UseChartKeyboardNavigationSignature } from "./featurePlugins/useChartKeyboardNavigation/index.js";
5
6
  import { UseChartPolarAxisSignature } from "./featurePlugins/useChartPolarAxis/index.js";
6
- import { UseChartVoronoiSignature } from "./featurePlugins/useChartVoronoi/index.js";
7
+ import { UseChartClosestPointSignature } from "./featurePlugins/useChartClosestPoint/index.js";
7
8
  import { UseChartZAxisSignature } from "./featurePlugins/useChartZAxis/index.js";
8
- export type AllPluginSignatures<TSeries extends ChartSeriesType = ChartSeriesType> = [UseChartZAxisSignature, UseChartCartesianAxisSignature<TSeries>, UseChartPolarAxisSignature, UseChartInteractionSignature, UseChartHighlightSignature, UseChartVoronoiSignature];
9
- export type DefaultPluginSignatures<TSeries extends ChartSeriesType = ChartSeriesType> = [UseChartZAxisSignature, UseChartCartesianAxisSignature<TSeries>, UseChartInteractionSignature, UseChartHighlightSignature, UseChartVoronoiSignature];
10
- export declare const DEFAULT_PLUGINS: readonly [import("./models/index.js").ChartPlugin<UseChartZAxisSignature>, import("./models/index.js").ChartPlugin<UseChartCartesianAxisSignature<any>>, import("./models/index.js").ChartPlugin<UseChartInteractionSignature>, import("./models/index.js").ChartPlugin<UseChartHighlightSignature>, import("./models/index.js").ChartPlugin<UseChartVoronoiSignature>];
9
+ export type AllPluginSignatures<TSeries extends ChartSeriesType = ChartSeriesType> = [UseChartZAxisSignature, UseChartCartesianAxisSignature<TSeries>, UseChartPolarAxisSignature, UseChartInteractionSignature, UseChartHighlightSignature, UseChartClosestPointSignature, UseChartKeyboardNavigationSignature];
10
+ export type DefaultPluginSignatures<TSeries extends ChartSeriesType = ChartSeriesType> = [UseChartZAxisSignature, UseChartCartesianAxisSignature<TSeries>, UseChartInteractionSignature, UseChartHighlightSignature, UseChartClosestPointSignature, UseChartKeyboardNavigationSignature];
11
+ export declare const DEFAULT_PLUGINS: readonly [import("./models/index.js").ChartPlugin<UseChartZAxisSignature>, import("./models/index.js").ChartPlugin<UseChartCartesianAxisSignature<any>>, import("./models/index.js").ChartPlugin<UseChartInteractionSignature>, import("./models/index.js").ChartPlugin<UseChartHighlightSignature>, import("./models/index.js").ChartPlugin<UseChartClosestPointSignature>, import("./models/index.js").ChartPlugin<UseChartKeyboardNavigationSignature>];
@@ -3,6 +3,7 @@
3
3
  import { useChartCartesianAxis } from "./featurePlugins/useChartCartesianAxis/index.js";
4
4
  import { useChartHighlight } from "./featurePlugins/useChartHighlight/index.js";
5
5
  import { useChartInteraction } from "./featurePlugins/useChartInteraction/index.js";
6
- import { useChartVoronoi } from "./featurePlugins/useChartVoronoi/index.js";
6
+ import { useChartKeyboardNavigation } from "./featurePlugins/useChartKeyboardNavigation/index.js";
7
+ import { useChartClosestPoint } from "./featurePlugins/useChartClosestPoint/index.js";
7
8
  import { useChartZAxis } from "./featurePlugins/useChartZAxis/index.js";
8
- export const DEFAULT_PLUGINS = [useChartZAxis, useChartCartesianAxis, useChartInteraction, useChartHighlight, useChartVoronoi];
9
+ export const DEFAULT_PLUGINS = [useChartZAxis, useChartCartesianAxis, useChartInteraction, useChartHighlight, useChartClosestPoint, useChartKeyboardNavigation];
@@ -17,7 +17,7 @@ export declare const preprocessSeries: <TSeriesType extends ChartSeriesType>({
17
17
  dataset
18
18
  }: {
19
19
  series: Readonly<AllSeriesType<TSeriesType>[]>;
20
- colors: string[];
20
+ colors: readonly string[];
21
21
  seriesConfig: ChartSeriesConfig<TSeriesType>;
22
22
  dataset?: Readonly<DatasetType>;
23
23
  }) => { [type in TSeriesType]?: SeriesProcessorResult<TSeriesType> | undefined };
@@ -5,11 +5,13 @@ import { ChartSeriesConfig } from "../../models/seriesConfig/index.js";
5
5
  import { ComputedAxisConfig, DefaultizedZoomOptions } from "./useChartCartesianAxis.types.js";
6
6
  import { ProcessedSeries } from "../../corePlugins/useChartSeries/useChartSeries.types.js";
7
7
  import { GetZoomAxisFilters, ZoomData } from "./zoom.types.js";
8
+ import { ScaleDefinition } from "./getAxisScale.js";
8
9
  export type ComputeResult<T extends ChartsAxisProps> = {
9
10
  axis: ComputedAxisConfig<T>;
10
11
  axisIds: AxisId[];
11
12
  };
12
13
  type ComputeCommonParams<T extends ChartSeriesType = ChartSeriesType> = {
14
+ scales: Record<AxisId, ScaleDefinition>;
13
15
  drawingArea: ChartDrawingArea;
14
16
  formattedSeries: ProcessedSeries<T>;
15
17
  seriesConfig: ChartSeriesConfig<T>;
@@ -1,15 +1,14 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { scaleBand, scalePoint } from '@mui/x-charts-vendor/d3-scale';
3
2
  import { createScalarFormatter } from "../../../defaultValueFormatters.js";
4
- import { isBandScaleConfig, isPointScaleConfig, isSymlogScaleConfig } from "../../../../models/axis.js";
5
- import { getColorScale, getOrdinalColorScale } from "../../../colorScale.js";
6
- import { getTickNumber, scaleTickNumberByRange } from "../../../ticks.js";
3
+ import { isBandScaleConfig, isPointScaleConfig } from "../../../../models/axis.js";
4
+ import { getColorScale, getOrdinalColorScale, getSequentialColorScale } from "../../../colorScale.js";
5
+ import { scaleTickNumberByRange } from "../../../ticks.js";
7
6
  import { getScale } from "../../../getScale.js";
8
7
  import { isDateData, createDateFormatter } from "../../../dateHelpers.js";
9
- import { zoomScaleRange } from "./zoom.js";
10
- import { getAxisExtremum } from "./getAxisExtremum.js";
8
+ import { getAxisExtrema } from "./getAxisExtrema.js";
11
9
  import { getAxisTriggerTooltip } from "./getAxisTriggerTooltip.js";
12
- import { getAxisDomainLimit } from "./getAxisDomainLimit.js";
10
+ import { applyDomainLimit, getActualAxisExtrema, getDomainLimit } from "./getAxisScale.js";
11
+ import { isBandScale, isOrdinalScale } from "../../../scaleGuards.js";
13
12
  function getRange(drawingArea, axisDirection,
14
13
  // | 'rotation' | 'radius',
15
14
  reverse) {
@@ -19,6 +18,7 @@ reverse) {
19
18
  const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
20
19
  const DEFAULT_BAR_GAP_RATIO = 0.1;
21
20
  export function computeAxisValue({
21
+ scales,
22
22
  drawingArea,
23
23
  formattedSeries,
24
24
  axis: allAxis,
@@ -39,97 +39,91 @@ export function computeAxisValue({
39
39
  const completeAxis = {};
40
40
  allAxis.forEach((eachAxis, axisIndex) => {
41
41
  const axis = eachAxis;
42
+ const scaleDefinition = scales[axis.id];
43
+ let scale = scaleDefinition.scale;
42
44
  const zoomOption = zoomOptions?.[axis.id];
43
45
  const zoom = zoomMap?.get(axis.id);
44
46
  const zoomRange = zoom ? [zoom.start, zoom.end] : [0, 100];
45
47
  const range = getRange(drawingArea, axisDirection, axis.reverse ?? false);
46
- const [minData, maxData] = getAxisExtremum(axis, axisDirection, seriesConfig, axisIndex, formattedSeries, zoom === undefined && !zoomOption ? getFilters : undefined // Do not apply filtering if zoom is already defined.
47
- );
48
48
  const triggerTooltip = !axis.ignoreTooltip && axisIdsTriggeringTooltip.has(axis.id);
49
49
  const data = axis.data ?? [];
50
- if (isBandScaleConfig(axis)) {
51
- const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
52
- const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
50
+ if (isOrdinalScale(scale)) {
53
51
  // Reverse range because ordinal scales are presented from top to bottom on y-axis
54
52
  const scaleRange = axisDirection === 'y' ? [range[1], range[0]] : range;
55
- const zoomedRange = zoomScaleRange(scaleRange, zoomRange);
56
- completeAxis[axis.id] = _extends({
57
- offset: 0,
58
- height: 0,
59
- categoryGapRatio,
60
- barGapRatio,
61
- triggerTooltip
62
- }, axis, {
63
- data,
64
- scale: scaleBand(axis.data, zoomedRange).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
65
- tickNumber: axis.data.length,
66
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
67
- values: axis.data
68
- }, axis.colorMap)) : getColorScale(axis.colorMap))
69
- });
70
- if (isDateData(axis.data)) {
71
- const dateFormatter = createDateFormatter(axis.data, scaleRange, axis.tickNumber);
72
- completeAxis[axis.id].valueFormatter = axis.valueFormatter ?? dateFormatter;
53
+ if (isBandScale(scale) && isBandScaleConfig(axis)) {
54
+ const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
55
+ const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
56
+ completeAxis[axis.id] = _extends({
57
+ offset: 0,
58
+ height: 0,
59
+ categoryGapRatio,
60
+ barGapRatio,
61
+ triggerTooltip
62
+ }, axis, {
63
+ data,
64
+ scale,
65
+ tickNumber: axis.data.length,
66
+ colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
67
+ values: axis.data
68
+ }, axis.colorMap)) : getColorScale(axis.colorMap))
69
+ });
70
+ }
71
+ if (isPointScaleConfig(axis)) {
72
+ completeAxis[axis.id] = _extends({
73
+ offset: 0,
74
+ height: 0,
75
+ triggerTooltip
76
+ }, axis, {
77
+ data,
78
+ scale,
79
+ tickNumber: axis.data.length,
80
+ colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
81
+ values: axis.data
82
+ }, axis.colorMap)) : getColorScale(axis.colorMap))
83
+ });
73
84
  }
74
- }
75
- if (isPointScaleConfig(axis)) {
76
- const scaleRange = axisDirection === 'y' ? [...range].reverse() : range;
77
- const zoomedRange = zoomScaleRange(scaleRange, zoomRange);
78
- completeAxis[axis.id] = _extends({
79
- offset: 0,
80
- height: 0,
81
- triggerTooltip
82
- }, axis, {
83
- data,
84
- scale: scalePoint(axis.data, zoomedRange),
85
- tickNumber: axis.data.length,
86
- colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
87
- values: axis.data
88
- }, axis.colorMap)) : getColorScale(axis.colorMap))
89
- });
90
85
  if (isDateData(axis.data)) {
91
86
  const dateFormatter = createDateFormatter(axis.data, scaleRange, axis.tickNumber);
92
87
  completeAxis[axis.id].valueFormatter = axis.valueFormatter ?? dateFormatter;
93
88
  }
89
+ return;
94
90
  }
95
91
  if (axis.scaleType === 'band' || axis.scaleType === 'point') {
96
92
  // Could be merged with the two previous "if conditions" but then TS does not get that `axis.scaleType` can't be `band` or `point`.
97
93
  return;
98
94
  }
99
- const scaleType = axis.scaleType ?? 'linear';
100
- const domainLimit = preferStrictDomainInLineCharts ? getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries) : axis.domainLimit ?? 'nice';
101
- const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
102
- if (typeof domainLimit === 'function') {
103
- const {
104
- min,
105
- max
106
- } = domainLimit(minData, maxData);
107
- axisExtremums[0] = min;
108
- axisExtremums[1] = max;
109
- }
110
- const rawTickNumber = getTickNumber(_extends({}, axis, {
111
- range,
112
- domain: axisExtremums
113
- }));
95
+ const rawTickNumber = scaleDefinition.tickNumber;
96
+ const continuousAxis = axis;
97
+ const scaleType = continuousAxis.scaleType ?? 'linear';
114
98
  const tickNumber = scaleTickNumberByRange(rawTickNumber, zoomRange);
115
- const zoomedRange = zoomScaleRange(range, zoomRange);
116
- const scale = getScale(scaleType, axisExtremums, zoomedRange);
117
- if (isSymlogScaleConfig(axis) && axis.constant != null) {
118
- scale.constant(axis.constant);
99
+ const filter = zoom === undefined && !zoomOption ? getFilters : undefined; // Do not apply filtering if zoom is already defined.
100
+ if (filter) {
101
+ const [minData, maxData] = getAxisExtrema(axis, axisDirection, seriesConfig, axisIndex, formattedSeries, filter);
102
+ scale = scale.copy();
103
+ scale.domain([minData, maxData]);
104
+ const domainLimit = getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts);
105
+ const axisExtrema = getActualAxisExtrema(axis, minData, maxData);
106
+ if (typeof domainLimit === 'function') {
107
+ const {
108
+ min,
109
+ max
110
+ } = domainLimit(minData, maxData);
111
+ axisExtrema[0] = min;
112
+ axisExtrema[1] = max;
113
+ }
114
+ scale.domain(axisExtrema);
115
+ applyDomainLimit(scale, axis, domainLimit, rawTickNumber);
119
116
  }
120
- const finalScale = domainLimit === 'nice' ? scale.nice(rawTickNumber) : scale;
121
- const [minDomain, maxDomain] = finalScale.domain();
122
- const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];
123
117
  completeAxis[axis.id] = _extends({
124
118
  offset: 0,
125
119
  height: 0,
126
120
  triggerTooltip
127
- }, axis, {
121
+ }, continuousAxis, {
128
122
  data,
129
- scaleType: scaleType,
130
- scale: finalScale.domain(domain),
123
+ scaleType,
124
+ scale,
131
125
  tickNumber,
132
- colorScale: axis.colorMap && getColorScale(axis.colorMap),
126
+ colorScale: continuousAxis.colorMap && getSequentialColorScale(continuousAxis.colorMap),
133
127
  valueFormatter: axis.valueFormatter ?? createScalarFormatter(tickNumber, getScale(scaleType, range.map(v => scale.invert(v)), range))
134
128
  });
135
129
  });
@@ -1,24 +1,8 @@
1
- import { AxisId, ChartsXAxisProps, ChartsYAxisProps, ContinuousScaleName, ScaleName } from "../../../../models/axis.js";
2
- import { CartesianChartSeriesType } from "../../../../models/seriesType/config.js";
3
- import { ProcessedSeries } from "../../corePlugins/useChartSeries/index.js";
1
+ import { AxisId, D3ContinuousScale, D3Scale } from "../../../../models/axis.js";
4
2
  import { AxisConfig } from "../../../../models/index.js";
5
- import { ChartSeriesConfig } from "../../models/seriesConfig/index.js";
6
3
  import { DefaultizedZoomOptions, ExtremumFilter } from "./useChartCartesianAxis.types.js";
7
4
  import { GetZoomAxisFilters, ZoomAxisFilters, ZoomData } from "./zoom.types.js";
8
- export declare function createAxisFilterMapper(params: {
9
- zoomMap: Map<AxisId, ZoomData>;
10
- zoomOptions: Record<AxisId, DefaultizedZoomOptions>;
11
- seriesConfig: ChartSeriesConfig<CartesianChartSeriesType>;
12
- formattedSeries: ProcessedSeries;
13
- direction: 'x';
14
- }): (axis: AxisConfig<ScaleName, any, ChartsXAxisProps>, axisIndex: number) => ExtremumFilter | null;
15
- export declare function createAxisFilterMapper(params: {
16
- zoomMap: Map<AxisId, ZoomData>;
17
- zoomOptions: Record<AxisId, DefaultizedZoomOptions>;
18
- seriesConfig: ChartSeriesConfig<CartesianChartSeriesType>;
19
- formattedSeries: ProcessedSeries;
20
- direction: 'y';
21
- }): (axis: AxisConfig<ScaleName, any, ChartsYAxisProps>, axisIndex: number) => ExtremumFilter | null;
5
+ export declare function createAxisFilterMapper(zoomMap: Map<AxisId, ZoomData>, zoomOptions: Record<AxisId, DefaultizedZoomOptions>, direction: 'x' | 'y'): (axisId: AxisId, axisData: AxisConfig['data'], scale: D3Scale) => ExtremumFilter | null;
22
6
  export declare function createDiscreteScaleGetAxisFilter(axisData: AxisConfig['data'], zoomStart: number, zoomEnd: number, direction: 'x' | 'y'): ExtremumFilter;
23
- export declare function createContinuousScaleGetAxisFilter(scaleType: ContinuousScaleName | undefined, extrema: readonly [number, number], zoomStart: number, zoomEnd: number, direction: 'x' | 'y', axisData: AxisConfig['data']): ExtremumFilter;
7
+ export declare function createContinuousScaleGetAxisFilter(scale: D3ContinuousScale, zoomStart: number, zoomEnd: number, direction: 'x' | 'y', axisData: AxisConfig['data']): ExtremumFilter;
24
8
  export declare const createGetAxisFilters: (filters: ZoomAxisFilters) => GetZoomAxisFilters;
@@ -1,28 +1,20 @@
1
1
  import { isDefined } from "../../../isDefined.js";
2
- import { getAxisExtremum } from "./getAxisExtremum.js";
3
- import { getScale } from "../../../getScale.js";
4
- export function createAxisFilterMapper({
5
- zoomMap,
6
- zoomOptions,
7
- seriesConfig,
8
- formattedSeries,
9
- direction
10
- }) {
11
- return (axis, axisIndex) => {
12
- const zoomOption = zoomOptions[axis.id];
2
+ import { isOrdinalScale } from "../../../scaleGuards.js";
3
+ export function createAxisFilterMapper(zoomMap, zoomOptions, direction) {
4
+ return (axisId, axisData, scale) => {
5
+ const zoomOption = zoomOptions[axisId];
13
6
  if (!zoomOption || zoomOption.filterMode !== 'discard') {
14
7
  return null;
15
8
  }
16
- const zoom = zoomMap?.get(axis.id);
9
+ const zoom = zoomMap?.get(axisId);
17
10
  if (zoom === undefined || zoom.start <= 0 && zoom.end >= 100) {
18
11
  // No zoom, or zoom with all data visible
19
12
  return null;
20
13
  }
21
- const scaleType = axis.scaleType;
22
- if (scaleType === 'point' || scaleType === 'band') {
23
- return createDiscreteScaleGetAxisFilter(axis.data, zoom.start, zoom.end, direction);
14
+ if (isOrdinalScale(scale)) {
15
+ return createDiscreteScaleGetAxisFilter(axisData, zoom.start, zoom.end, direction);
24
16
  }
25
- return createContinuousScaleGetAxisFilter(scaleType, getAxisExtremum(axis, direction, seriesConfig, axisIndex, formattedSeries), zoom.start, zoom.end, direction, axis.data);
17
+ return createContinuousScaleGetAxisFilter(scale, zoom.start, zoom.end, direction, axisData);
26
18
  };
27
19
  }
28
20
  export function createDiscreteScaleGetAxisFilter(axisData, zoomStart, zoomEnd, direction) {
@@ -38,10 +30,10 @@ export function createDiscreteScaleGetAxisFilter(axisData, zoomStart, zoomEnd, d
38
30
  return dataIndex >= minVal && dataIndex < maxVal;
39
31
  };
40
32
  }
41
- export function createContinuousScaleGetAxisFilter(scaleType, extrema, zoomStart, zoomEnd, direction, axisData) {
33
+ export function createContinuousScaleGetAxisFilter(scale, zoomStart, zoomEnd, direction, axisData) {
42
34
  let min;
43
35
  let max;
44
- [min, max] = getScale(scaleType ?? 'linear', extrema, [0, 100]).nice().domain();
36
+ [min, max] = scale.domain();
45
37
  min = min instanceof Date ? min.getTime() : min;
46
38
  max = max instanceof Date ? max.getTime() : max;
47
39
  const minVal = min + zoomStart * (max - min) / 100;
@@ -1,7 +1,7 @@
1
1
  import { AxisConfig } from "../../../../models/axis.js";
2
2
  import { CartesianChartSeriesType } from "../../../../models/seriesType/config.js";
3
3
  import { ProcessedSeries } from "../../corePlugins/useChartSeries/index.js";
4
- export declare const getAxisDomainLimit: <T extends CartesianChartSeriesType>(axis: AxisConfig, axisDirection: "x" | "y", axisIndex: number, formattedSeries: ProcessedSeries<T | "line">) => "nice" | "strict" | ((min: number, max: number) => {
4
+ export declare const getAxisDomainLimit: <T extends CartesianChartSeriesType>(axis: Pick<AxisConfig, "id" | "domainLimit">, axisDirection: "x" | "y", axisIndex: number, formattedSeries: ProcessedSeries<T | "line">) => "nice" | "strict" | ((min: number, max: number) => {
5
5
  min: number;
6
6
  max: number;
7
7
  });
@@ -3,4 +3,4 @@ import { CartesianChartSeriesType } from "../../../../models/seriesType/config.j
3
3
  import { ChartSeriesConfig } from "../../models/seriesConfig/index.js";
4
4
  import { ProcessedSeries } from "../../corePlugins/useChartSeries/useChartSeries.types.js";
5
5
  import { GetZoomAxisFilters } from "./zoom.types.js";
6
- export declare const getAxisExtremum: <T extends CartesianChartSeriesType>(axis: AxisConfig, axisDirection: "x" | "y", seriesConfig: ChartSeriesConfig<T>, axisIndex: number, formattedSeries: ProcessedSeries<T>, getFilters?: GetZoomAxisFilters) => [number, number];
6
+ export declare function getAxisExtrema<T extends CartesianChartSeriesType>(axis: AxisConfig, axisDirection: 'x' | 'y', seriesConfig: ChartSeriesConfig<T>, axisIndex: number, formattedSeries: ProcessedSeries<T>, getFilters?: GetZoomAxisFilters): [number, number];
@@ -0,0 +1,24 @@
1
+ import { isCartesianSeriesType } from "../../../isCartesian.js";
2
+ const axisExtremumCallback = (chartType, axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters) => {
3
+ const getter = axisDirection === 'x' ? seriesConfig[chartType].xExtremumGetter : seriesConfig[chartType].yExtremumGetter;
4
+ const series = formattedSeries[chartType]?.series ?? {};
5
+ return getter?.({
6
+ series,
7
+ axis,
8
+ axisIndex,
9
+ isDefaultAxis: axisIndex === 0,
10
+ getFilters
11
+ }) ?? [Infinity, -Infinity];
12
+ };
13
+ export function getAxisExtrema(axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters) {
14
+ const cartesianChartTypes = Object.keys(seriesConfig).filter(isCartesianSeriesType);
15
+ let extrema = [Infinity, -Infinity];
16
+ for (const chartType of cartesianChartTypes) {
17
+ const [min, max] = axisExtremumCallback(chartType, axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters);
18
+ extrema = [Math.min(extrema[0], min), Math.max(extrema[1], max)];
19
+ }
20
+ if (Number.isNaN(extrema[0]) || Number.isNaN(extrema[1])) {
21
+ return [Infinity, -Infinity];
22
+ }
23
+ return extrema;
24
+ }