@mui/x-charts 6.0.0-alpha.8 → 6.18.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 (286) hide show
  1. package/BarChart/BarChart.d.ts +19 -5
  2. package/BarChart/BarChart.js +52 -13
  3. package/BarChart/BarElement.d.ts +1319 -4
  4. package/BarChart/BarElement.js +10 -10
  5. package/BarChart/BarPlot.d.ts +17 -1
  6. package/BarChart/BarPlot.js +152 -66
  7. package/BarChart/formatter.js +2 -3
  8. package/BarChart/legend.js +1 -2
  9. package/CHANGELOG.md +786 -48
  10. package/ChartContainer/index.js +7 -5
  11. package/ChartsAxis/ChartsAxis.d.ts +9 -0
  12. package/ChartsAxis/ChartsAxis.js +28 -2
  13. package/ChartsAxis/axisClasses.d.ts +1 -1
  14. package/ChartsAxis/axisClasses.js +1 -2
  15. package/ChartsAxisHighlight/ChartsAxisHighlight.d.ts +21 -0
  16. package/ChartsAxisHighlight/ChartsAxisHighlight.js +61 -22
  17. package/ChartsClipPath/ChartsClipPath.d.ts +5 -0
  18. package/ChartsClipPath/ChartsClipPath.js +7 -2
  19. package/ChartsLegend/ChartsLegend.d.ts +44 -24
  20. package/ChartsLegend/ChartsLegend.js +192 -150
  21. package/ChartsLegend/chartsLegendClasses.js +1 -2
  22. package/ChartsLegend/utils.d.ts +1 -6
  23. package/ChartsSurface.d.ts +1 -1
  24. package/ChartsSurface.js +9 -18
  25. package/ChartsTooltip/ChartsAxisTooltipContent.d.ts +1 -0
  26. package/ChartsTooltip/ChartsAxisTooltipContent.js +46 -32
  27. package/ChartsTooltip/ChartsItemTooltipContent.d.ts +3 -2
  28. package/ChartsTooltip/ChartsItemTooltipContent.js +18 -9
  29. package/ChartsTooltip/ChartsTooltip.d.ts +32 -0
  30. package/ChartsTooltip/ChartsTooltip.js +62 -18
  31. package/ChartsTooltip/ChartsTooltipTable.d.ts +3 -10
  32. package/ChartsTooltip/ChartsTooltipTable.js +22 -20
  33. package/ChartsTooltip/tooltipClasses.js +1 -2
  34. package/ChartsTooltip/utils.js +2 -2
  35. package/ChartsXAxis/ChartsXAxis.d.ts +9 -0
  36. package/ChartsXAxis/ChartsXAxis.js +161 -40
  37. package/ChartsYAxis/ChartsYAxis.d.ts +9 -0
  38. package/ChartsYAxis/ChartsYAxis.js +86 -33
  39. package/LineChart/AreaElement.d.ts +12 -2
  40. package/LineChart/AreaElement.js +14 -6
  41. package/LineChart/AreaPlot.d.ts +11 -0
  42. package/LineChart/AreaPlot.js +27 -8
  43. package/LineChart/LineChart.d.ts +21 -3
  44. package/LineChart/LineChart.js +61 -14
  45. package/LineChart/LineElement.d.ts +12 -2
  46. package/LineChart/LineElement.js +14 -6
  47. package/LineChart/LineHighlightElement.d.ts +31 -0
  48. package/LineChart/LineHighlightElement.js +88 -0
  49. package/LineChart/LineHighlightPlot.d.ts +35 -0
  50. package/LineChart/LineHighlightPlot.js +110 -0
  51. package/LineChart/LinePlot.d.ts +10 -0
  52. package/LineChart/LinePlot.js +25 -12
  53. package/LineChart/MarkElement.d.ts +11 -1
  54. package/LineChart/MarkElement.js +15 -9
  55. package/LineChart/MarkPlot.d.ts +10 -0
  56. package/LineChart/MarkPlot.js +62 -15
  57. package/LineChart/formatter.js +5 -5
  58. package/LineChart/index.d.ts +2 -0
  59. package/LineChart/index.js +20 -0
  60. package/LineChart/legend.js +1 -2
  61. package/PieChart/PieArc.d.ts +12 -14
  62. package/PieChart/PieArc.js +28 -60
  63. package/PieChart/PieArcLabel.d.ts +9 -10
  64. package/PieChart/PieArcLabel.js +46 -38
  65. package/PieChart/PieArcLabelPlot.d.ts +28 -0
  66. package/PieChart/PieArcLabelPlot.js +99 -0
  67. package/PieChart/PieArcPlot.d.ts +35 -0
  68. package/PieChart/PieArcPlot.js +92 -0
  69. package/PieChart/PieChart.d.ts +19 -5
  70. package/PieChart/PieChart.js +61 -14
  71. package/PieChart/PiePlot.d.ts +15 -9
  72. package/PieChart/PiePlot.js +77 -55
  73. package/PieChart/dataTransform/transition.d.ts +4 -0
  74. package/PieChart/dataTransform/transition.js +136 -0
  75. package/PieChart/dataTransform/useTransformData.d.ts +15 -0
  76. package/PieChart/dataTransform/useTransformData.js +67 -0
  77. package/PieChart/formatter.js +1 -2
  78. package/PieChart/legend.js +1 -2
  79. package/README.md +8 -14
  80. package/ResponsiveChartContainer/index.js +7 -8
  81. package/ScatterChart/Scatter.d.ts +10 -0
  82. package/ScatterChart/Scatter.js +12 -2
  83. package/ScatterChart/ScatterChart.d.ts +16 -3
  84. package/ScatterChart/ScatterChart.js +43 -12
  85. package/ScatterChart/ScatterPlot.d.ts +10 -0
  86. package/ScatterChart/ScatterPlot.js +12 -2
  87. package/ScatterChart/formatter.js +1 -2
  88. package/ScatterChart/legend.js +1 -2
  89. package/SparkLineChart/SparkLineChart.d.ts +13 -3
  90. package/SparkLineChart/SparkLineChart.js +34 -18
  91. package/colorPalettes/colorPalettes.js +6 -12
  92. package/constants.js +5 -8
  93. package/context/CartesianContextProvider.d.ts +5 -0
  94. package/context/CartesianContextProvider.js +31 -16
  95. package/context/DrawingProvider.d.ts +7 -0
  96. package/context/DrawingProvider.js +12 -6
  97. package/context/HighlightProvider.js +3 -4
  98. package/context/InteractionProvider.js +3 -4
  99. package/context/SeriesContextProvider.js +3 -4
  100. package/esm/BarChart/BarChart.js +49 -9
  101. package/esm/BarChart/BarElement.js +7 -4
  102. package/esm/BarChart/BarPlot.js +152 -67
  103. package/esm/BarChart/formatter.js +1 -1
  104. package/esm/ChartContainer/index.js +3 -0
  105. package/esm/ChartsAxis/ChartsAxis.js +26 -0
  106. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  107. package/esm/ChartsClipPath/ChartsClipPath.js +5 -0
  108. package/esm/ChartsLegend/ChartsLegend.js +188 -142
  109. package/esm/ChartsSurface.js +4 -12
  110. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  111. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  112. package/esm/ChartsTooltip/ChartsTooltip.js +59 -14
  113. package/esm/ChartsTooltip/ChartsTooltipTable.js +17 -10
  114. package/esm/ChartsXAxis/ChartsXAxis.js +158 -37
  115. package/esm/ChartsYAxis/ChartsYAxis.js +83 -30
  116. package/esm/LineChart/AreaElement.js +10 -0
  117. package/esm/LineChart/AreaPlot.js +26 -6
  118. package/esm/LineChart/LineChart.js +58 -10
  119. package/esm/LineChart/LineElement.js +10 -0
  120. package/esm/LineChart/LineHighlightElement.js +78 -0
  121. package/esm/LineChart/LineHighlightPlot.js +103 -0
  122. package/esm/LineChart/LinePlot.js +25 -14
  123. package/esm/LineChart/MarkElement.js +12 -5
  124. package/esm/LineChart/MarkPlot.js +60 -13
  125. package/esm/LineChart/formatter.js +7 -3
  126. package/esm/LineChart/index.js +3 -1
  127. package/esm/PieChart/PieArc.js +26 -58
  128. package/esm/PieChart/PieArcLabel.js +43 -34
  129. package/esm/PieChart/PieArcLabelPlot.js +92 -0
  130. package/esm/PieChart/PieArcPlot.js +84 -0
  131. package/esm/PieChart/PieChart.js +59 -12
  132. package/esm/PieChart/PiePlot.js +76 -57
  133. package/esm/PieChart/dataTransform/transition.js +130 -0
  134. package/esm/PieChart/dataTransform/useTransformData.js +59 -0
  135. package/esm/ResponsiveChartContainer/index.js +3 -3
  136. package/esm/ScatterChart/Scatter.js +10 -0
  137. package/esm/ScatterChart/ScatterChart.js +40 -8
  138. package/esm/ScatterChart/ScatterPlot.js +10 -0
  139. package/esm/SparkLineChart/SparkLineChart.js +32 -15
  140. package/esm/constants.js +1 -1
  141. package/esm/context/CartesianContextProvider.js +30 -14
  142. package/esm/context/DrawingProvider.js +8 -0
  143. package/esm/hooks/useChartDimensions.js +2 -0
  144. package/esm/hooks/useMounted.js +16 -0
  145. package/esm/hooks/useReducedMotion.js +27 -0
  146. package/esm/hooks/useTicks.js +15 -9
  147. package/esm/internals/components/AxisSharedComponents.js +15 -70
  148. package/esm/internals/components/ChartsText.js +77 -0
  149. package/esm/internals/domUtils.js +113 -0
  150. package/esm/internals/geometry.js +36 -0
  151. package/hooks/useAxisEvents.js +2 -2
  152. package/hooks/useChartDimensions.d.ts +2 -0
  153. package/hooks/useChartDimensions.js +5 -4
  154. package/hooks/useDrawingArea.js +2 -2
  155. package/hooks/useInteractionItemProps.js +2 -2
  156. package/hooks/useMounted.d.ts +1 -0
  157. package/hooks/useMounted.js +25 -0
  158. package/hooks/useReducedMotion.d.ts +8 -0
  159. package/hooks/useReducedMotion.js +33 -0
  160. package/hooks/useScale.d.ts +2 -2
  161. package/hooks/useScale.js +2 -2
  162. package/hooks/useTicks.d.ts +19 -11
  163. package/hooks/useTicks.js +19 -14
  164. package/index.js +1 -1
  165. package/internals/components/AxisSharedComponents.d.ts +0 -4
  166. package/internals/components/AxisSharedComponents.js +18 -78
  167. package/internals/components/ChartsText.d.ts +35 -0
  168. package/internals/components/ChartsText.js +87 -0
  169. package/internals/defaultizeColor.d.ts +8 -1
  170. package/internals/defaultizeValueFormatter.js +1 -2
  171. package/internals/domUtils.d.ts +13 -0
  172. package/internals/domUtils.js +122 -0
  173. package/internals/geometry.d.ts +9 -0
  174. package/internals/geometry.js +42 -0
  175. package/internals/stackSeries.js +2 -4
  176. package/legacy/BarChart/BarChart.js +49 -9
  177. package/legacy/BarChart/BarElement.js +6 -3
  178. package/legacy/BarChart/BarPlot.js +151 -63
  179. package/legacy/BarChart/formatter.js +1 -1
  180. package/legacy/ChartContainer/index.js +3 -0
  181. package/legacy/ChartsAxis/ChartsAxis.js +26 -0
  182. package/legacy/ChartsAxisHighlight/ChartsAxisHighlight.js +60 -20
  183. package/legacy/ChartsClipPath/ChartsClipPath.js +5 -0
  184. package/legacy/ChartsLegend/ChartsLegend.js +203 -140
  185. package/legacy/ChartsSurface.js +3 -12
  186. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +22 -10
  187. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  188. package/legacy/ChartsTooltip/ChartsTooltip.js +62 -14
  189. package/legacy/ChartsTooltip/ChartsTooltipTable.js +34 -26
  190. package/legacy/ChartsXAxis/ChartsXAxis.js +162 -39
  191. package/legacy/ChartsYAxis/ChartsYAxis.js +83 -30
  192. package/legacy/LineChart/AreaElement.js +10 -0
  193. package/legacy/LineChart/AreaPlot.js +31 -7
  194. package/legacy/LineChart/LineChart.js +58 -10
  195. package/legacy/LineChart/LineElement.js +10 -0
  196. package/legacy/LineChart/LineHighlightElement.js +77 -0
  197. package/legacy/LineChart/LineHighlightPlot.js +96 -0
  198. package/legacy/LineChart/LinePlot.js +29 -12
  199. package/legacy/LineChart/MarkElement.js +12 -5
  200. package/legacy/LineChart/MarkPlot.js +50 -5
  201. package/legacy/LineChart/formatter.js +7 -3
  202. package/legacy/LineChart/index.js +3 -1
  203. package/legacy/PieChart/PieArc.js +30 -62
  204. package/legacy/PieChart/PieArcLabel.js +48 -34
  205. package/legacy/PieChart/PieArcLabelPlot.js +93 -0
  206. package/legacy/PieChart/PieArcPlot.js +84 -0
  207. package/legacy/PieChart/PieChart.js +59 -12
  208. package/legacy/PieChart/PiePlot.js +76 -59
  209. package/legacy/PieChart/dataTransform/transition.js +142 -0
  210. package/legacy/PieChart/dataTransform/useTransformData.js +60 -0
  211. package/legacy/ResponsiveChartContainer/index.js +3 -3
  212. package/legacy/ScatterChart/Scatter.js +10 -0
  213. package/legacy/ScatterChart/ScatterChart.js +40 -8
  214. package/legacy/ScatterChart/ScatterPlot.js +10 -0
  215. package/legacy/SparkLineChart/SparkLineChart.js +32 -13
  216. package/legacy/constants.js +1 -1
  217. package/legacy/context/CartesianContextProvider.js +30 -14
  218. package/legacy/context/DrawingProvider.js +8 -0
  219. package/legacy/hooks/useChartDimensions.js +2 -0
  220. package/legacy/hooks/useMounted.js +21 -0
  221. package/legacy/hooks/useReducedMotion.js +27 -0
  222. package/legacy/hooks/useTicks.js +16 -9
  223. package/legacy/index.js +1 -1
  224. package/legacy/internals/components/AxisSharedComponents.js +11 -65
  225. package/legacy/internals/components/ChartsText.js +79 -0
  226. package/legacy/internals/domUtils.js +121 -0
  227. package/legacy/internals/geometry.js +37 -0
  228. package/models/axis.d.ts +27 -9
  229. package/models/layout.d.ts +7 -6
  230. package/models/seriesType/line.d.ts +39 -1
  231. package/models/seriesType/pie.d.ts +5 -1
  232. package/modern/BarChart/BarChart.js +49 -9
  233. package/modern/BarChart/BarElement.js +7 -4
  234. package/modern/BarChart/BarPlot.js +149 -65
  235. package/modern/BarChart/formatter.js +1 -1
  236. package/modern/ChartContainer/index.js +3 -0
  237. package/modern/ChartsAxis/ChartsAxis.js +26 -0
  238. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  239. package/modern/ChartsClipPath/ChartsClipPath.js +5 -0
  240. package/modern/ChartsLegend/ChartsLegend.js +188 -142
  241. package/modern/ChartsSurface.js +4 -12
  242. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  243. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  244. package/modern/ChartsTooltip/ChartsTooltip.js +58 -14
  245. package/modern/ChartsTooltip/ChartsTooltipTable.js +17 -10
  246. package/modern/ChartsXAxis/ChartsXAxis.js +158 -37
  247. package/modern/ChartsYAxis/ChartsYAxis.js +83 -30
  248. package/modern/LineChart/AreaElement.js +10 -0
  249. package/modern/LineChart/AreaPlot.js +25 -6
  250. package/modern/LineChart/LineChart.js +58 -10
  251. package/modern/LineChart/LineElement.js +10 -0
  252. package/modern/LineChart/LineHighlightElement.js +78 -0
  253. package/modern/LineChart/LineHighlightPlot.js +102 -0
  254. package/modern/LineChart/LinePlot.js +23 -10
  255. package/modern/LineChart/MarkElement.js +12 -5
  256. package/modern/LineChart/MarkPlot.js +60 -13
  257. package/modern/LineChart/formatter.js +4 -3
  258. package/modern/LineChart/index.js +3 -1
  259. package/modern/PieChart/PieArc.js +26 -57
  260. package/modern/PieChart/PieArcLabel.js +43 -34
  261. package/modern/PieChart/PieArcLabelPlot.js +90 -0
  262. package/modern/PieChart/PieArcPlot.js +83 -0
  263. package/modern/PieChart/PieChart.js +59 -12
  264. package/modern/PieChart/PiePlot.js +76 -55
  265. package/modern/PieChart/dataTransform/transition.js +130 -0
  266. package/modern/PieChart/dataTransform/useTransformData.js +58 -0
  267. package/modern/ResponsiveChartContainer/index.js +3 -3
  268. package/modern/ScatterChart/Scatter.js +10 -0
  269. package/modern/ScatterChart/ScatterChart.js +40 -8
  270. package/modern/ScatterChart/ScatterPlot.js +10 -0
  271. package/modern/SparkLineChart/SparkLineChart.js +32 -15
  272. package/modern/constants.js +1 -1
  273. package/modern/context/CartesianContextProvider.js +29 -13
  274. package/modern/context/DrawingProvider.js +8 -0
  275. package/modern/hooks/useChartDimensions.js +2 -0
  276. package/modern/hooks/useMounted.js +16 -0
  277. package/modern/hooks/useReducedMotion.js +27 -0
  278. package/modern/hooks/useTicks.js +15 -9
  279. package/modern/index.js +1 -1
  280. package/modern/internals/components/AxisSharedComponents.js +15 -70
  281. package/modern/internals/components/ChartsText.js +77 -0
  282. package/modern/internals/domUtils.js +113 -0
  283. package/modern/internals/geometry.js +36 -0
  284. package/package.json +9 -6
  285. package/themeAugmentation/components.d.ts +1 -0
  286. package/themeAugmentation/overrides.d.ts +2 -0
@@ -1,11 +1,14 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
1
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["skipAnimation"];
2
4
  import * as React from 'react';
3
5
  import PropTypes from 'prop-types';
6
+ import { useTransition } from '@react-spring/web';
4
7
  import { SeriesContext } from '../context/SeriesContextProvider';
5
8
  import { CartesianContext } from '../context/CartesianContextProvider';
6
9
  import { BarElement } from './BarElement';
7
10
  import { isBandScaleConfig } from '../models/axis';
8
-
11
+ import { jsx as _jsx } from "react/jsx-runtime";
9
12
  /**
10
13
  * Solution of the equations
11
14
  * W = barWidth * N + offset * (N-1)
@@ -15,7 +18,6 @@ import { isBandScaleConfig } from '../models/axis';
15
18
  * @param gapRatio The ratio of the gap between bars over the bar width.
16
19
  * @returns The bar width and the offset between bars.
17
20
  */
18
- import { jsx as _jsx } from "react/jsx-runtime";
19
21
  function getBandSize({
20
22
  bandWidth: W,
21
23
  numberOfGroups: N,
@@ -34,12 +36,13 @@ function getBandSize({
34
36
  offset
35
37
  };
36
38
  }
37
- function BarPlot(props) {
38
- const seriesData = React.useContext(SeriesContext).bar;
39
+ const useCompletedData = () => {
40
+ const seriesData = React.useContext(SeriesContext).bar ?? {
41
+ series: {},
42
+ stackingGroups: [],
43
+ seriesOrder: []
44
+ };
39
45
  const axisData = React.useContext(CartesianContext);
40
- if (seriesData === undefined) {
41
- return null;
42
- }
43
46
  const {
44
47
  series,
45
48
  stackingGroups
@@ -52,66 +55,142 @@ function BarPlot(props) {
52
55
  } = axisData;
53
56
  const defaultXAxisId = xAxisIds[0];
54
57
  const defaultYAxisId = yAxisIds[0];
55
- return /*#__PURE__*/_jsx(React.Fragment, {
56
- children: stackingGroups.flatMap(({
57
- ids: groupIds
58
- }, groupIndex) => {
59
- return groupIds.flatMap(seriesId => {
60
- const xAxisKey = series[seriesId].xAxisKey ?? defaultXAxisId;
61
- const yAxisKey = series[seriesId].yAxisKey ?? defaultYAxisId;
62
- const xAxisConfig = xAxis[xAxisKey];
63
- const yAxisConfig = yAxis[yAxisKey];
64
- const verticalLayout = series[seriesId].layout === 'vertical';
65
- let baseScaleConfig;
66
- if (verticalLayout) {
67
- if (!isBandScaleConfig(xAxisConfig)) {
68
- throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
69
- }
70
- if (xAxis[xAxisKey].data === undefined) {
71
- throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
72
- }
73
- baseScaleConfig = xAxisConfig;
74
- } else {
75
- if (!isBandScaleConfig(yAxisConfig)) {
76
- throw new Error(`Axis with id "${yAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
77
- }
78
- if (yAxis[yAxisKey].data === undefined) {
79
- throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
80
- }
81
- baseScaleConfig = yAxisConfig;
58
+ const data = stackingGroups.flatMap(({
59
+ ids: groupIds
60
+ }, groupIndex) => {
61
+ return groupIds.flatMap(seriesId => {
62
+ const xAxisKey = series[seriesId].xAxisKey ?? defaultXAxisId;
63
+ const yAxisKey = series[seriesId].yAxisKey ?? defaultYAxisId;
64
+ const xAxisConfig = xAxis[xAxisKey];
65
+ const yAxisConfig = yAxis[yAxisKey];
66
+ const verticalLayout = series[seriesId].layout === 'vertical';
67
+ let baseScaleConfig;
68
+ if (verticalLayout) {
69
+ if (!isBandScaleConfig(xAxisConfig)) {
70
+ throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
71
+ }
72
+ if (xAxis[xAxisKey].data === undefined) {
73
+ throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
74
+ }
75
+ baseScaleConfig = xAxisConfig;
76
+ } else {
77
+ if (!isBandScaleConfig(yAxisConfig)) {
78
+ throw new Error(`Axis with id "${yAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
82
79
  }
83
- const xScale = xAxisConfig.scale;
84
- const yScale = yAxisConfig.scale;
85
- const bandWidth = baseScaleConfig.scale.bandwidth();
86
- const {
87
- barWidth,
88
- offset
89
- } = getBandSize({
90
- bandWidth,
91
- numberOfGroups: stackingGroups.length,
92
- gapRatio: baseScaleConfig.barGapRatio
93
- });
94
- const barOffset = groupIndex * (barWidth + offset);
95
- const {
96
- stackedData,
97
- color
98
- } = series[seriesId];
99
- return stackedData.map((values, dataIndex) => {
100
- const baseline = Math.min(...values);
101
- const value = Math.max(...values);
102
- return /*#__PURE__*/_jsx(BarElement, _extends({
103
- id: seriesId,
104
- dataIndex: dataIndex,
105
- x: verticalLayout ? xScale(xAxis[xAxisKey].data?.[dataIndex]) + barOffset : xScale(baseline),
106
- y: verticalLayout ? yScale(value) : yScale(yAxis[yAxisKey].data?.[dataIndex]) + barOffset,
107
- height: verticalLayout ? Math.abs(yScale(baseline) - yScale(value)) : barWidth,
108
- width: verticalLayout ? barWidth : Math.abs(xScale(baseline) - xScale(value)),
109
- color: color,
110
- highlightScope: series[seriesId].highlightScope
111
- }, props), `${seriesId}-${dataIndex}`);
112
- });
80
+ if (yAxis[yAxisKey].data === undefined) {
81
+ throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
82
+ }
83
+ baseScaleConfig = yAxisConfig;
84
+ }
85
+ const xScale = xAxisConfig.scale;
86
+ const yScale = yAxisConfig.scale;
87
+ const bandWidth = baseScaleConfig.scale.bandwidth();
88
+ const {
89
+ barWidth,
90
+ offset
91
+ } = getBandSize({
92
+ bandWidth,
93
+ numberOfGroups: stackingGroups.length,
94
+ gapRatio: baseScaleConfig.barGapRatio
95
+ });
96
+ const barOffset = groupIndex * (barWidth + offset);
97
+ const {
98
+ stackedData,
99
+ color
100
+ } = series[seriesId];
101
+ return stackedData.map((values, dataIndex) => {
102
+ const bottom = Math.min(...values);
103
+ const top = Math.max(...values);
104
+ return {
105
+ bottom,
106
+ top,
107
+ seriesId,
108
+ dataIndex,
109
+ layout: series[seriesId].layout,
110
+ x: verticalLayout ? xScale(xAxis[xAxisKey].data?.[dataIndex]) + barOffset : xScale(bottom),
111
+ y: verticalLayout ? yScale(top) : yScale(yAxis[yAxisKey].data?.[dataIndex]) + barOffset,
112
+ xOrigin: xScale(0),
113
+ yOrigin: yScale(0),
114
+ height: verticalLayout ? Math.abs(yScale(bottom) - yScale(top)) : barWidth,
115
+ width: verticalLayout ? barWidth : Math.abs(xScale(bottom) - xScale(top)),
116
+ color,
117
+ highlightScope: series[seriesId].highlightScope
118
+ };
113
119
  });
114
- })
120
+ });
121
+ });
122
+ return data;
123
+ };
124
+ const getOutStyle = ({
125
+ layout,
126
+ yOrigin,
127
+ x,
128
+ width,
129
+ y,
130
+ xOrigin,
131
+ height
132
+ }) => _extends({}, layout === 'vertical' ? {
133
+ y: yOrigin,
134
+ x,
135
+ height: 0,
136
+ width
137
+ } : {
138
+ y,
139
+ x: xOrigin,
140
+ height,
141
+ width: 0
142
+ });
143
+ const getInStyle = ({
144
+ x,
145
+ width,
146
+ y,
147
+ height
148
+ }) => ({
149
+ y,
150
+ x,
151
+ height,
152
+ width
153
+ });
154
+
155
+ /**
156
+ * Demos:
157
+ *
158
+ * - [Bars](https://mui.com/x/react-charts/bars/)
159
+ * - [Bar demonstration](https://mui.com/x/react-charts/bar-demo/)
160
+ * - [Stacking](https://mui.com/x/react-charts/stacking/)
161
+ *
162
+ * API:
163
+ *
164
+ * - [BarPlot API](https://mui.com/x/api/charts/bar-plot/)
165
+ */
166
+ function BarPlot(props) {
167
+ const completedData = useCompletedData();
168
+ const {
169
+ skipAnimation
170
+ } = props,
171
+ other = _objectWithoutPropertiesLoose(props, _excluded);
172
+ const transition = useTransition(completedData, {
173
+ keys: bar => `${bar.seriesId}-${bar.dataIndex}`,
174
+ from: getOutStyle,
175
+ leave: getOutStyle,
176
+ enter: getInStyle,
177
+ update: getInStyle,
178
+ immediate: skipAnimation
179
+ });
180
+ return /*#__PURE__*/_jsx(React.Fragment, {
181
+ children: transition((style, {
182
+ seriesId,
183
+ dataIndex,
184
+ color,
185
+ highlightScope
186
+ }) => /*#__PURE__*/_jsx(BarElement, _extends({
187
+ id: seriesId,
188
+ dataIndex: dataIndex,
189
+ highlightScope: highlightScope,
190
+ color: color
191
+ }, other, {
192
+ style: style
193
+ })))
115
194
  });
116
195
  }
117
196
  process.env.NODE_ENV !== "production" ? BarPlot.propTypes = {
@@ -119,6 +198,11 @@ process.env.NODE_ENV !== "production" ? BarPlot.propTypes = {
119
198
  // | These PropTypes are generated from the TypeScript type definitions |
120
199
  // | To update them edit the TypeScript types and run "yarn proptypes" |
121
200
  // ----------------------------------------------------------------------
201
+ /**
202
+ * If `true`, animations are skiped.
203
+ * @default false
204
+ */
205
+ skipAnimation: PropTypes.bool,
122
206
  /**
123
207
  * The props used for each component slot.
124
208
  * @default {}
@@ -53,7 +53,7 @@ const formatter = (params, dataset) => {
53
53
  return {
54
54
  seriesOrder,
55
55
  stackingGroups,
56
- series: defaultizeValueFormatter(completedSeries, v => v.toLocaleString())
56
+ series: defaultizeValueFormatter(completedSeries, v => v?.toLocaleString())
57
57
  };
58
58
  };
59
59
  export default formatter;
@@ -3,6 +3,7 @@ import useForkRef from '@mui/utils/useForkRef';
3
3
  import { DrawingProvider } from '../context/DrawingProvider';
4
4
  import { SeriesContextProvider } from '../context/SeriesContextProvider';
5
5
  import { InteractionProvider } from '../context/InteractionProvider';
6
+ import { useReducedMotion } from '../hooks/useReducedMotion';
6
7
  import { ChartsSurface } from '../ChartsSurface';
7
8
  import { CartesianContextProvider } from '../context/CartesianContextProvider';
8
9
  import { HighlightProvider } from '../context/HighlightProvider';
@@ -25,6 +26,8 @@ export const ChartContainer = /*#__PURE__*/React.forwardRef(function ChartContai
25
26
  } = props;
26
27
  const svgRef = React.useRef(null);
27
28
  const handleRef = useForkRef(ref, svgRef);
29
+ useReducedMotion(); // a11y reduce motion (see: https://react-spring.dev/docs/utilities/use-reduced-motion)
30
+
28
31
  return /*#__PURE__*/_jsx(DrawingProvider, {
29
32
  width: width,
30
33
  height: height,
@@ -24,6 +24,16 @@ const mergeProps = (axisConfig, slots, slotProps) => {
24
24
  slotProps
25
25
  };
26
26
  };
27
+
28
+ /**
29
+ * Demos:
30
+ *
31
+ * - [Axis](https://mui.com/x/react-charts/axis/)
32
+ *
33
+ * API:
34
+ *
35
+ * - [ChartsAxis API](https://mui.com/x/api/charts/charts-axis/)
36
+ */
27
37
  function ChartsAxis(props) {
28
38
  const {
29
39
  topAxis,
@@ -97,11 +107,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
97
107
  fill: PropTypes.string,
98
108
  label: PropTypes.string,
99
109
  labelFontSize: PropTypes.number,
110
+ labelStyle: PropTypes.object,
100
111
  position: PropTypes.oneOf(['bottom', 'top']),
101
112
  slotProps: PropTypes.object,
102
113
  slots: PropTypes.object,
103
114
  stroke: PropTypes.string,
104
115
  tickFontSize: PropTypes.number,
116
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
117
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
118
+ tickLabelStyle: PropTypes.object,
105
119
  tickMaxStep: PropTypes.number,
106
120
  tickMinStep: PropTypes.number,
107
121
  tickNumber: PropTypes.number,
@@ -120,11 +134,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
120
134
  fill: PropTypes.string,
121
135
  label: PropTypes.string,
122
136
  labelFontSize: PropTypes.number,
137
+ labelStyle: PropTypes.object,
123
138
  position: PropTypes.oneOf(['left', 'right']),
124
139
  slotProps: PropTypes.object,
125
140
  slots: PropTypes.object,
126
141
  stroke: PropTypes.string,
127
142
  tickFontSize: PropTypes.number,
143
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
144
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
145
+ tickLabelStyle: PropTypes.object,
128
146
  tickMaxStep: PropTypes.number,
129
147
  tickMinStep: PropTypes.number,
130
148
  tickNumber: PropTypes.number,
@@ -143,11 +161,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
143
161
  fill: PropTypes.string,
144
162
  label: PropTypes.string,
145
163
  labelFontSize: PropTypes.number,
164
+ labelStyle: PropTypes.object,
146
165
  position: PropTypes.oneOf(['left', 'right']),
147
166
  slotProps: PropTypes.object,
148
167
  slots: PropTypes.object,
149
168
  stroke: PropTypes.string,
150
169
  tickFontSize: PropTypes.number,
170
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
171
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
172
+ tickLabelStyle: PropTypes.object,
151
173
  tickMaxStep: PropTypes.number,
152
174
  tickMinStep: PropTypes.number,
153
175
  tickNumber: PropTypes.number,
@@ -176,11 +198,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
176
198
  fill: PropTypes.string,
177
199
  label: PropTypes.string,
178
200
  labelFontSize: PropTypes.number,
201
+ labelStyle: PropTypes.object,
179
202
  position: PropTypes.oneOf(['bottom', 'top']),
180
203
  slotProps: PropTypes.object,
181
204
  slots: PropTypes.object,
182
205
  stroke: PropTypes.string,
183
206
  tickFontSize: PropTypes.number,
207
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
208
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
209
+ tickLabelStyle: PropTypes.object,
184
210
  tickMaxStep: PropTypes.number,
185
211
  tickMinStep: PropTypes.number,
186
212
  tickNumber: PropTypes.number,
@@ -1,11 +1,51 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
3
  import PropTypes from 'prop-types';
4
+ import composeClasses from '@mui/utils/composeClasses';
5
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
6
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
7
+ import { styled } from '@mui/material/styles';
3
8
  import { InteractionContext } from '../context/InteractionProvider';
4
9
  import { CartesianContext } from '../context/CartesianContextProvider';
5
10
  import { getValueToPositionMapper } from '../hooks/useScale';
6
11
  import { isBandScale } from '../internals/isBandScale';
7
12
  import { jsx as _jsx } from "react/jsx-runtime";
8
13
  import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ export function getAxisHighlightUtilityClass(slot) {
15
+ return generateUtilityClass('MuiChartsAxisHighlight', slot);
16
+ }
17
+ export const chartsAxisHighlightClasses = generateUtilityClasses('MuiChartsAxisHighlight', ['root']);
18
+ const useUtilityClasses = () => {
19
+ const slots = {
20
+ root: ['root']
21
+ };
22
+ return composeClasses(slots, getAxisHighlightUtilityClass);
23
+ };
24
+ export const ChartsAxisHighlightPath = styled('path', {
25
+ name: 'MuiChartsAxisHighlight',
26
+ slot: 'Root',
27
+ overridesResolver: (_, styles) => styles.root
28
+ })(({
29
+ ownerState,
30
+ theme
31
+ }) => _extends({
32
+ pointerEvents: 'none'
33
+ }, ownerState.axisHighlight === 'band' && {
34
+ fill: theme.palette.mode === 'light' ? 'gray' : 'white',
35
+ fillOpacity: 0.1
36
+ }, ownerState.axisHighlight === 'line' && {
37
+ strokeDasharray: '5 2',
38
+ stroke: theme.palette.mode === 'light' ? '#000000' : '#ffffff'
39
+ }));
40
+ /**
41
+ * Demos:
42
+ *
43
+ * - [Custom components](https://mui.com/x/react-charts/components/)
44
+ *
45
+ * API:
46
+ *
47
+ * - [ChartsAxisHighlight API](https://mui.com/x/api/charts/charts-axis-highlight/)
48
+ */
9
49
  function ChartsAxisHighlight(props) {
10
50
  const {
11
51
  x: xAxisHighlight,
@@ -17,6 +57,7 @@ function ChartsAxisHighlight(props) {
17
57
  yAxisIds,
18
58
  yAxis
19
59
  } = React.useContext(CartesianContext);
60
+ const classes = useUtilityClasses();
20
61
  const USED_X_AXIS_ID = xAxisIds[0];
21
62
  const USED_Y_AXIS_ID = yAxisIds[0];
22
63
  const xScale = xAxis[USED_X_AXIS_ID].scale;
@@ -27,33 +68,29 @@ function ChartsAxisHighlight(props) {
27
68
  const getXPosition = getValueToPositionMapper(xScale);
28
69
  const getYPosition = getValueToPositionMapper(yScale);
29
70
  return /*#__PURE__*/_jsxs(React.Fragment, {
30
- children: [xAxisHighlight === 'band' && axis.x !== null && isBandScale(xScale) && /*#__PURE__*/_jsx("path", {
71
+ children: [xAxisHighlight === 'band' && axis.x !== null && isBandScale(xScale) && /*#__PURE__*/_jsx(ChartsAxisHighlightPath, {
31
72
  d: `M ${xScale(axis.x.value) - (xScale.step() - xScale.bandwidth()) / 2} ${yScale.range()[0]} l ${xScale.step()} 0 l 0 ${yScale.range()[1] - yScale.range()[0]} l ${-xScale.step()} 0 Z`,
32
- fill: "gray",
33
- fillOpacity: 0.1,
34
- style: {
35
- pointerEvents: 'none'
73
+ className: classes.root,
74
+ ownerState: {
75
+ axisHighlight: 'band'
36
76
  }
37
- }), yAxisHighlight === 'band' && axis.y !== null && isBandScale(yScale) && /*#__PURE__*/_jsx("path", {
77
+ }), yAxisHighlight === 'band' && axis.y !== null && isBandScale(yScale) && /*#__PURE__*/_jsx(ChartsAxisHighlightPath, {
38
78
  d: `M ${xScale.range()[0]} ${yScale(axis.y.value) - (yScale.step() - yScale.bandwidth()) / 2} l 0 ${yScale.step()} l ${xScale.range()[1] - xScale.range()[0]} 0 l 0 ${-yScale.step()} Z`,
39
- fill: "gray",
40
- fillOpacity: 0.1,
41
- style: {
42
- pointerEvents: 'none'
79
+ className: classes.root,
80
+ ownerState: {
81
+ axisHighlight: 'band'
43
82
  }
44
- }), xAxisHighlight === 'line' && axis.x !== null && /*#__PURE__*/_jsx("path", {
83
+ }), xAxisHighlight === 'line' && axis.x !== null && /*#__PURE__*/_jsx(ChartsAxisHighlightPath, {
45
84
  d: `M ${getXPosition(axis.x.value)} ${yScale.range()[0]} L ${getXPosition(axis.x.value)} ${yScale.range()[1]}`,
46
- stroke: "black",
47
- strokeDasharray: "5 2",
48
- style: {
49
- pointerEvents: 'none'
85
+ className: classes.root,
86
+ ownerState: {
87
+ axisHighlight: 'line'
50
88
  }
51
- }), yAxisHighlight === 'line' && axis.y !== null && /*#__PURE__*/_jsx("path", {
89
+ }), yAxisHighlight === 'line' && axis.y !== null && /*#__PURE__*/_jsx(ChartsAxisHighlightPath, {
52
90
  d: `M ${xScale.range()[0]} ${getYPosition(axis.y.value)} L ${xScale.range()[1]} ${getYPosition(axis.y.value)}`,
53
- stroke: "black",
54
- strokeDasharray: "5 2",
55
- style: {
56
- pointerEvents: 'none'
91
+ className: classes.root,
92
+ ownerState: {
93
+ axisHighlight: 'line'
57
94
  }
58
95
  })]
59
96
  });
@@ -3,6 +3,11 @@ import * as React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { DrawingContext } from '../context/DrawingProvider';
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
+ /**
7
+ * API:
8
+ *
9
+ * - [ChartsClipPath API](https://mui.com/x/api/charts/charts-clip-path/)
10
+ */
6
11
  function ChartsClipPath(props) {
7
12
  const {
8
13
  id,