@mui/x-charts 6.0.0-alpha.9 → 6.18.1

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 (325) hide show
  1. package/BarChart/BarChart.d.ts +26 -5
  2. package/BarChart/BarChart.js +93 -17
  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 +797 -59
  10. package/ChartContainer/index.js +7 -5
  11. package/ChartsAxis/ChartsAxis.d.ts +9 -0
  12. package/ChartsAxis/ChartsAxis.js +33 -7
  13. package/ChartsAxis/axisClasses.d.ts +3 -3
  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 +45 -24
  20. package/ChartsLegend/ChartsLegend.js +193 -151
  21. package/ChartsLegend/chartsLegendClasses.d.ts +1 -1
  22. package/ChartsLegend/chartsLegendClasses.js +3 -4
  23. package/ChartsLegend/utils.d.ts +1 -6
  24. package/ChartsReferenceLine/ChartsReferenceLine.d.ts +10 -0
  25. package/ChartsReferenceLine/ChartsReferenceLine.js +78 -0
  26. package/ChartsReferenceLine/ChartsXReferenceLine.d.ts +13 -0
  27. package/ChartsReferenceLine/ChartsXReferenceLine.js +112 -0
  28. package/ChartsReferenceLine/ChartsYReferenceLine.d.ts +13 -0
  29. package/ChartsReferenceLine/ChartsYReferenceLine.js +112 -0
  30. package/ChartsReferenceLine/chartsReferenceLineClasses.d.ts +15 -0
  31. package/ChartsReferenceLine/chartsReferenceLineClasses.js +14 -0
  32. package/ChartsReferenceLine/common.d.ts +41 -0
  33. package/ChartsReferenceLine/common.js +27 -0
  34. package/ChartsReferenceLine/index.d.ts +2 -0
  35. package/ChartsReferenceLine/index.js +27 -0
  36. package/ChartsReferenceLine/package.json +6 -0
  37. package/ChartsSurface.d.ts +12 -1
  38. package/ChartsSurface.js +9 -18
  39. package/ChartsTooltip/ChartsAxisTooltipContent.d.ts +1 -0
  40. package/ChartsTooltip/ChartsAxisTooltipContent.js +46 -32
  41. package/ChartsTooltip/ChartsItemTooltipContent.d.ts +3 -2
  42. package/ChartsTooltip/ChartsItemTooltipContent.js +18 -9
  43. package/ChartsTooltip/ChartsTooltip.d.ts +32 -0
  44. package/ChartsTooltip/ChartsTooltip.js +62 -18
  45. package/ChartsTooltip/ChartsTooltipTable.d.ts +3 -10
  46. package/ChartsTooltip/ChartsTooltipTable.js +22 -20
  47. package/ChartsTooltip/tooltipClasses.js +1 -2
  48. package/ChartsTooltip/utils.js +2 -2
  49. package/ChartsXAxis/ChartsXAxis.d.ts +9 -0
  50. package/ChartsXAxis/ChartsXAxis.js +170 -45
  51. package/ChartsYAxis/ChartsYAxis.d.ts +9 -0
  52. package/ChartsYAxis/ChartsYAxis.js +95 -38
  53. package/LineChart/AreaElement.d.ts +11 -1
  54. package/LineChart/AreaElement.js +14 -6
  55. package/LineChart/AreaPlot.d.ts +11 -0
  56. package/LineChart/AreaPlot.js +27 -8
  57. package/LineChart/LineChart.d.ts +23 -3
  58. package/LineChart/LineChart.js +89 -17
  59. package/LineChart/LineElement.d.ts +11 -1
  60. package/LineChart/LineElement.js +14 -6
  61. package/LineChart/LineHighlightElement.d.ts +10 -0
  62. package/LineChart/LineHighlightElement.js +13 -4
  63. package/LineChart/LineHighlightPlot.d.ts +10 -0
  64. package/LineChart/LineHighlightPlot.js +15 -4
  65. package/LineChart/LinePlot.d.ts +10 -0
  66. package/LineChart/LinePlot.js +25 -12
  67. package/LineChart/MarkElement.d.ts +10 -0
  68. package/LineChart/MarkElement.js +14 -5
  69. package/LineChart/MarkPlot.d.ts +10 -0
  70. package/LineChart/MarkPlot.js +42 -10
  71. package/LineChart/formatter.js +5 -5
  72. package/LineChart/legend.js +1 -2
  73. package/PieChart/PieArc.d.ts +11 -13
  74. package/PieChart/PieArc.js +28 -60
  75. package/PieChart/PieArcLabel.d.ts +8 -9
  76. package/PieChart/PieArcLabel.js +46 -38
  77. package/PieChart/PieArcLabelPlot.d.ts +28 -0
  78. package/PieChart/PieArcLabelPlot.js +99 -0
  79. package/PieChart/PieArcPlot.d.ts +35 -0
  80. package/PieChart/PieArcPlot.js +92 -0
  81. package/PieChart/PieChart.d.ts +19 -5
  82. package/PieChart/PieChart.js +95 -18
  83. package/PieChart/PiePlot.d.ts +15 -9
  84. package/PieChart/PiePlot.js +77 -55
  85. package/PieChart/dataTransform/transition.d.ts +4 -0
  86. package/PieChart/dataTransform/transition.js +136 -0
  87. package/PieChart/dataTransform/useTransformData.d.ts +15 -0
  88. package/PieChart/dataTransform/useTransformData.js +67 -0
  89. package/PieChart/formatter.js +1 -2
  90. package/PieChart/legend.js +1 -2
  91. package/README.md +8 -14
  92. package/ResponsiveChartContainer/index.d.ts +13 -3
  93. package/ResponsiveChartContainer/index.js +7 -8
  94. package/ScatterChart/Scatter.d.ts +10 -0
  95. package/ScatterChart/Scatter.js +12 -2
  96. package/ScatterChart/ScatterChart.d.ts +16 -3
  97. package/ScatterChart/ScatterChart.js +77 -16
  98. package/ScatterChart/ScatterPlot.d.ts +10 -0
  99. package/ScatterChart/ScatterPlot.js +12 -2
  100. package/ScatterChart/formatter.js +1 -2
  101. package/ScatterChart/legend.js +1 -2
  102. package/SparkLineChart/SparkLineChart.d.ts +12 -3
  103. package/SparkLineChart/SparkLineChart.js +50 -7
  104. package/colorPalettes/colorPalettes.js +6 -12
  105. package/constants.js +5 -8
  106. package/context/CartesianContextProvider.d.ts +26 -1
  107. package/context/CartesianContextProvider.js +42 -16
  108. package/context/DrawingProvider.d.ts +25 -0
  109. package/context/DrawingProvider.js +18 -6
  110. package/context/HighlightProvider.d.ts +17 -0
  111. package/context/HighlightProvider.js +3 -4
  112. package/context/InteractionProvider.d.ts +6 -0
  113. package/context/InteractionProvider.js +3 -4
  114. package/context/SeriesContextProvider.d.ts +5 -0
  115. package/context/SeriesContextProvider.js +3 -4
  116. package/esm/BarChart/BarChart.js +90 -13
  117. package/esm/BarChart/BarElement.js +7 -4
  118. package/esm/BarChart/BarPlot.js +152 -67
  119. package/esm/BarChart/formatter.js +1 -1
  120. package/esm/ChartContainer/index.js +3 -0
  121. package/esm/ChartsAxis/ChartsAxis.js +32 -5
  122. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  123. package/esm/ChartsClipPath/ChartsClipPath.js +5 -0
  124. package/esm/ChartsLegend/ChartsLegend.js +190 -144
  125. package/esm/ChartsLegend/chartsLegendClasses.js +1 -1
  126. package/esm/ChartsReferenceLine/ChartsReferenceLine.js +70 -0
  127. package/esm/ChartsReferenceLine/ChartsXReferenceLine.js +105 -0
  128. package/esm/ChartsReferenceLine/ChartsYReferenceLine.js +105 -0
  129. package/esm/ChartsReferenceLine/chartsReferenceLineClasses.js +6 -0
  130. package/esm/ChartsReferenceLine/common.js +20 -0
  131. package/esm/ChartsReferenceLine/index.js +2 -0
  132. package/esm/ChartsSurface.js +4 -12
  133. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  134. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  135. package/esm/ChartsTooltip/ChartsTooltip.js +59 -14
  136. package/esm/ChartsTooltip/ChartsTooltipTable.js +17 -10
  137. package/esm/ChartsXAxis/ChartsXAxis.js +168 -43
  138. package/esm/ChartsYAxis/ChartsYAxis.js +93 -36
  139. package/esm/LineChart/AreaElement.js +10 -0
  140. package/esm/LineChart/AreaPlot.js +26 -6
  141. package/esm/LineChart/LineChart.js +86 -13
  142. package/esm/LineChart/LineElement.js +10 -0
  143. package/esm/LineChart/LineHighlightElement.js +10 -0
  144. package/esm/LineChart/LineHighlightPlot.js +13 -2
  145. package/esm/LineChart/LinePlot.js +25 -14
  146. package/esm/LineChart/MarkElement.js +11 -1
  147. package/esm/LineChart/MarkPlot.js +40 -8
  148. package/esm/LineChart/formatter.js +7 -3
  149. package/esm/PieChart/PieArc.js +26 -58
  150. package/esm/PieChart/PieArcLabel.js +43 -34
  151. package/esm/PieChart/PieArcLabelPlot.js +92 -0
  152. package/esm/PieChart/PieArcPlot.js +84 -0
  153. package/esm/PieChart/PieChart.js +93 -16
  154. package/esm/PieChart/PiePlot.js +76 -57
  155. package/esm/PieChart/dataTransform/transition.js +130 -0
  156. package/esm/PieChart/dataTransform/useTransformData.js +59 -0
  157. package/esm/ResponsiveChartContainer/index.js +3 -3
  158. package/esm/ScatterChart/Scatter.js +10 -0
  159. package/esm/ScatterChart/ScatterChart.js +74 -12
  160. package/esm/ScatterChart/ScatterPlot.js +10 -0
  161. package/esm/SparkLineChart/SparkLineChart.js +47 -3
  162. package/esm/constants.js +1 -1
  163. package/esm/context/CartesianContextProvider.js +41 -14
  164. package/esm/context/DrawingProvider.js +14 -0
  165. package/esm/hooks/useChartDimensions.js +2 -0
  166. package/esm/hooks/useMounted.js +16 -0
  167. package/esm/hooks/useReducedMotion.js +27 -0
  168. package/esm/hooks/useTicks.js +15 -9
  169. package/esm/index.js +1 -0
  170. package/esm/internals/components/AxisSharedComponents.js +15 -70
  171. package/esm/internals/components/ChartsText.js +77 -0
  172. package/esm/internals/domUtils.js +113 -0
  173. package/esm/internals/geometry.js +36 -0
  174. package/hooks/useAxisEvents.js +2 -2
  175. package/hooks/useChartDimensions.d.ts +2 -0
  176. package/hooks/useChartDimensions.js +5 -4
  177. package/hooks/useDrawingArea.js +2 -2
  178. package/hooks/useInteractionItemProps.js +2 -2
  179. package/hooks/useMounted.d.ts +1 -0
  180. package/hooks/useMounted.js +25 -0
  181. package/hooks/useReducedMotion.d.ts +8 -0
  182. package/hooks/useReducedMotion.js +33 -0
  183. package/hooks/useScale.d.ts +2 -2
  184. package/hooks/useScale.js +2 -2
  185. package/hooks/useTicks.d.ts +19 -11
  186. package/hooks/useTicks.js +19 -14
  187. package/index.d.ts +1 -0
  188. package/index.js +12 -1
  189. package/internals/components/AxisSharedComponents.d.ts +0 -4
  190. package/internals/components/AxisSharedComponents.js +18 -78
  191. package/internals/components/ChartsText.d.ts +35 -0
  192. package/internals/components/ChartsText.js +87 -0
  193. package/internals/defaultizeColor.d.ts +7 -2
  194. package/internals/defaultizeValueFormatter.js +1 -2
  195. package/internals/domUtils.d.ts +13 -0
  196. package/internals/domUtils.js +122 -0
  197. package/internals/geometry.d.ts +9 -0
  198. package/internals/geometry.js +42 -0
  199. package/internals/isBandScale.d.ts +3 -1
  200. package/internals/stackSeries.js +2 -4
  201. package/internals/utils.d.ts +5 -0
  202. package/legacy/BarChart/BarChart.js +90 -13
  203. package/legacy/BarChart/BarElement.js +6 -3
  204. package/legacy/BarChart/BarPlot.js +151 -63
  205. package/legacy/BarChart/formatter.js +1 -1
  206. package/legacy/ChartContainer/index.js +3 -0
  207. package/legacy/ChartsAxis/ChartsAxis.js +32 -5
  208. package/legacy/ChartsAxisHighlight/ChartsAxisHighlight.js +60 -20
  209. package/legacy/ChartsClipPath/ChartsClipPath.js +5 -0
  210. package/legacy/ChartsLegend/ChartsLegend.js +205 -142
  211. package/legacy/ChartsLegend/chartsLegendClasses.js +1 -1
  212. package/legacy/ChartsReferenceLine/ChartsReferenceLine.js +70 -0
  213. package/legacy/ChartsReferenceLine/ChartsXReferenceLine.js +105 -0
  214. package/legacy/ChartsReferenceLine/ChartsYReferenceLine.js +105 -0
  215. package/legacy/ChartsReferenceLine/chartsReferenceLineClasses.js +6 -0
  216. package/legacy/ChartsReferenceLine/common.js +20 -0
  217. package/legacy/ChartsReferenceLine/index.js +2 -0
  218. package/legacy/ChartsSurface.js +3 -12
  219. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +22 -10
  220. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  221. package/legacy/ChartsTooltip/ChartsTooltip.js +62 -14
  222. package/legacy/ChartsTooltip/ChartsTooltipTable.js +34 -26
  223. package/legacy/ChartsXAxis/ChartsXAxis.js +176 -50
  224. package/legacy/ChartsYAxis/ChartsYAxis.js +97 -41
  225. package/legacy/LineChart/AreaElement.js +10 -0
  226. package/legacy/LineChart/AreaPlot.js +31 -7
  227. package/legacy/LineChart/LineChart.js +86 -13
  228. package/legacy/LineChart/LineElement.js +10 -0
  229. package/legacy/LineChart/LineHighlightElement.js +10 -0
  230. package/legacy/LineChart/LineHighlightPlot.js +13 -2
  231. package/legacy/LineChart/LinePlot.js +29 -12
  232. package/legacy/LineChart/MarkElement.js +11 -1
  233. package/legacy/LineChart/MarkPlot.js +39 -8
  234. package/legacy/LineChart/formatter.js +7 -3
  235. package/legacy/PieChart/PieArc.js +30 -62
  236. package/legacy/PieChart/PieArcLabel.js +48 -34
  237. package/legacy/PieChart/PieArcLabelPlot.js +93 -0
  238. package/legacy/PieChart/PieArcPlot.js +84 -0
  239. package/legacy/PieChart/PieChart.js +93 -16
  240. package/legacy/PieChart/PiePlot.js +76 -59
  241. package/legacy/PieChart/dataTransform/transition.js +142 -0
  242. package/legacy/PieChart/dataTransform/useTransformData.js +60 -0
  243. package/legacy/ResponsiveChartContainer/index.js +3 -3
  244. package/legacy/ScatterChart/Scatter.js +10 -0
  245. package/legacy/ScatterChart/ScatterChart.js +74 -12
  246. package/legacy/ScatterChart/ScatterPlot.js +10 -0
  247. package/legacy/SparkLineChart/SparkLineChart.js +47 -3
  248. package/legacy/constants.js +1 -1
  249. package/legacy/context/CartesianContextProvider.js +41 -14
  250. package/legacy/context/DrawingProvider.js +14 -0
  251. package/legacy/hooks/useChartDimensions.js +2 -0
  252. package/legacy/hooks/useMounted.js +21 -0
  253. package/legacy/hooks/useReducedMotion.js +27 -0
  254. package/legacy/hooks/useTicks.js +16 -9
  255. package/legacy/index.js +2 -1
  256. package/legacy/internals/components/AxisSharedComponents.js +11 -65
  257. package/legacy/internals/components/ChartsText.js +79 -0
  258. package/legacy/internals/domUtils.js +121 -0
  259. package/legacy/internals/geometry.js +37 -0
  260. package/models/axis.d.ts +58 -20
  261. package/models/layout.d.ts +13 -6
  262. package/models/seriesType/common.d.ts +16 -0
  263. package/models/seriesType/line.d.ts +8 -3
  264. package/models/seriesType/pie.d.ts +5 -1
  265. package/modern/BarChart/BarChart.js +90 -13
  266. package/modern/BarChart/BarElement.js +7 -4
  267. package/modern/BarChart/BarPlot.js +149 -65
  268. package/modern/BarChart/formatter.js +1 -1
  269. package/modern/ChartContainer/index.js +3 -0
  270. package/modern/ChartsAxis/ChartsAxis.js +31 -5
  271. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  272. package/modern/ChartsClipPath/ChartsClipPath.js +5 -0
  273. package/modern/ChartsLegend/ChartsLegend.js +190 -144
  274. package/modern/ChartsLegend/chartsLegendClasses.js +1 -1
  275. package/modern/ChartsReferenceLine/ChartsReferenceLine.js +70 -0
  276. package/modern/ChartsReferenceLine/ChartsXReferenceLine.js +104 -0
  277. package/modern/ChartsReferenceLine/ChartsYReferenceLine.js +104 -0
  278. package/modern/ChartsReferenceLine/chartsReferenceLineClasses.js +6 -0
  279. package/modern/ChartsReferenceLine/common.js +20 -0
  280. package/modern/ChartsReferenceLine/index.js +2 -0
  281. package/modern/ChartsSurface.js +4 -12
  282. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  283. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  284. package/modern/ChartsTooltip/ChartsTooltip.js +58 -14
  285. package/modern/ChartsTooltip/ChartsTooltipTable.js +17 -10
  286. package/modern/ChartsXAxis/ChartsXAxis.js +167 -42
  287. package/modern/ChartsYAxis/ChartsYAxis.js +92 -35
  288. package/modern/LineChart/AreaElement.js +10 -0
  289. package/modern/LineChart/AreaPlot.js +25 -6
  290. package/modern/LineChart/LineChart.js +86 -13
  291. package/modern/LineChart/LineElement.js +10 -0
  292. package/modern/LineChart/LineHighlightElement.js +10 -0
  293. package/modern/LineChart/LineHighlightPlot.js +13 -2
  294. package/modern/LineChart/LinePlot.js +23 -10
  295. package/modern/LineChart/MarkElement.js +11 -1
  296. package/modern/LineChart/MarkPlot.js +40 -8
  297. package/modern/LineChart/formatter.js +4 -3
  298. package/modern/PieChart/PieArc.js +26 -57
  299. package/modern/PieChart/PieArcLabel.js +43 -34
  300. package/modern/PieChart/PieArcLabelPlot.js +90 -0
  301. package/modern/PieChart/PieArcPlot.js +83 -0
  302. package/modern/PieChart/PieChart.js +93 -16
  303. package/modern/PieChart/PiePlot.js +76 -55
  304. package/modern/PieChart/dataTransform/transition.js +130 -0
  305. package/modern/PieChart/dataTransform/useTransformData.js +58 -0
  306. package/modern/ResponsiveChartContainer/index.js +3 -3
  307. package/modern/ScatterChart/Scatter.js +10 -0
  308. package/modern/ScatterChart/ScatterChart.js +74 -12
  309. package/modern/ScatterChart/ScatterPlot.js +10 -0
  310. package/modern/SparkLineChart/SparkLineChart.js +47 -3
  311. package/modern/constants.js +1 -1
  312. package/modern/context/CartesianContextProvider.js +40 -13
  313. package/modern/context/DrawingProvider.js +14 -0
  314. package/modern/hooks/useChartDimensions.js +2 -0
  315. package/modern/hooks/useMounted.js +16 -0
  316. package/modern/hooks/useReducedMotion.js +27 -0
  317. package/modern/hooks/useTicks.js +15 -9
  318. package/modern/index.js +2 -1
  319. package/modern/internals/components/AxisSharedComponents.js +15 -70
  320. package/modern/internals/components/ChartsText.js +77 -0
  321. package/modern/internals/domUtils.js +113 -0
  322. package/modern/internals/geometry.js +36 -0
  323. package/package.json +9 -6
  324. package/themeAugmentation/components.d.ts +1 -0
  325. package/themeAugmentation/overrides.d.ts +2 -0
@@ -1,7 +1,7 @@
1
1
  import { DefaultizedProps } from '../helpers';
2
2
  import { CartesianSeriesType, CommonDefaultizedProps, CommonSeriesType, StackableSeriesType } from './common';
3
3
  export type CurveType = 'catmullRom' | 'linear' | 'monotoneX' | 'monotoneY' | 'natural' | 'step' | 'stepBefore' | 'stepAfter';
4
- export interface ShowMarkParams {
4
+ export interface ShowMarkParams<AxisValue = number | Date> {
5
5
  /**
6
6
  * The item index.
7
7
  */
@@ -17,7 +17,7 @@ export interface ShowMarkParams {
17
17
  /**
18
18
  * The item position value. It likely comes from the axis `data` property.
19
19
  */
20
- position: number | Date;
20
+ position: AxisValue;
21
21
  /**
22
22
  * The item value. It comes from the series `data` property.
23
23
  */
@@ -28,7 +28,7 @@ export interface LineSeriesType extends CommonSeriesType<number>, CartesianSerie
28
28
  /**
29
29
  * Data associated to the line.
30
30
  */
31
- data?: number[];
31
+ data?: (number | null)[];
32
32
  /**
33
33
  * The key used to retrive data from the dataset.
34
34
  */
@@ -48,6 +48,11 @@ export interface LineSeriesType extends CommonSeriesType<number>, CartesianSerie
48
48
  * @default false
49
49
  */
50
50
  disableHighlight?: boolean;
51
+ /**
52
+ * If `true`, line and area connect points separated by `null` values.
53
+ * @default false
54
+ */
55
+ connectNulls?: boolean;
51
56
  }
52
57
  /**
53
58
  * An object that allows to identify a single line.
@@ -7,7 +7,7 @@ export type PieValueType = {
7
7
  label?: string;
8
8
  color?: string;
9
9
  };
10
- export type DefaultizedPieValueType = PieValueType & D3PieArcDatum<any> & {
10
+ export type DefaultizedPieValueType = PieValueType & Omit<D3PieArcDatum<any>, 'data'> & {
11
11
  color: string;
12
12
  formattedValue: string;
13
13
  };
@@ -76,6 +76,8 @@ export interface PieSeriesType<Tdata = PieValueType> extends CommonSeriesType<Td
76
76
  innerRadius?: number;
77
77
  outerRadius?: number;
78
78
  cornerRadius?: number;
79
+ paddingAngle?: number;
80
+ color?: string;
79
81
  };
80
82
  /**
81
83
  * Override the arc attibutes when it is faded.
@@ -89,6 +91,8 @@ export interface PieSeriesType<Tdata = PieValueType> extends CommonSeriesType<Td
89
91
  innerRadius?: number;
90
92
  outerRadius?: number;
91
93
  cornerRadius?: number;
94
+ paddingAngle?: number;
95
+ color?: string;
92
96
  };
93
97
  }
94
98
  /**
@@ -12,6 +12,17 @@ import { ChartsAxisHighlight } from '../ChartsAxisHighlight';
12
12
  import { ChartsClipPath } from '../ChartsClipPath';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  import { jsxs as _jsxs } from "react/jsx-runtime";
15
+ /**
16
+ * Demos:
17
+ *
18
+ * - [Bars](https://mui.com/x/react-charts/bars/)
19
+ * - [Bar demonstration](https://mui.com/x/react-charts/bar-demo/)
20
+ * - [Stacking](https://mui.com/x/react-charts/stacking/)
21
+ *
22
+ * API:
23
+ *
24
+ * - [BarChart API](https://mui.com/x/api/charts/bar-chart/)
25
+ */
15
26
  const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
16
27
  const {
17
28
  xAxis,
@@ -31,6 +42,7 @@ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
31
42
  leftAxis,
32
43
  rightAxis,
33
44
  bottomAxis,
45
+ skipAnimation,
34
46
  children,
35
47
  slots,
36
48
  slotProps
@@ -73,7 +85,8 @@ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
73
85
  clipPath: `url(#${clipPathId})`,
74
86
  children: /*#__PURE__*/_jsx(BarPlot, {
75
87
  slots: slots,
76
- slotProps: slotProps
88
+ slotProps: slotProps,
89
+ skipAnimation: skipAnimation
77
90
  })
78
91
  }), /*#__PURE__*/_jsx(ChartsAxis, {
79
92
  topAxis: topAxis,
@@ -98,6 +111,13 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
98
111
  // | These PropTypes are generated from the TypeScript type definitions |
99
112
  // | To update them edit the TypeScript types and run "yarn proptypes" |
100
113
  // ----------------------------------------------------------------------
114
+ /**
115
+ * Object `{ x, y }` that defines how the charts highlight the mouse position along the x- and y-axes.
116
+ * The two properties accept the following values:
117
+ * - 'none': display nothing.
118
+ * - 'line': display a line at the current mouse position.
119
+ * - 'band': display a band at the current mouse position. Only available with band scale.
120
+ */
101
121
  axisHighlight: PropTypes.shape({
102
122
  x: PropTypes.oneOf(['band', 'line', 'none']),
103
123
  y: PropTypes.oneOf(['band', 'line', 'none'])
@@ -108,18 +128,22 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
108
128
  * @default xAxisIds[0] The id of the first provided axis
109
129
  */
110
130
  bottomAxis: PropTypes.oneOfType([PropTypes.shape({
111
- axisId: PropTypes.string.isRequired,
131
+ axisId: PropTypes.string,
112
132
  classes: PropTypes.object,
113
133
  disableLine: PropTypes.bool,
114
134
  disableTicks: PropTypes.bool,
115
135
  fill: PropTypes.string,
116
136
  label: PropTypes.string,
117
137
  labelFontSize: PropTypes.number,
138
+ labelStyle: PropTypes.object,
118
139
  position: PropTypes.oneOf(['bottom', 'top']),
119
140
  slotProps: PropTypes.object,
120
141
  slots: PropTypes.object,
121
142
  stroke: PropTypes.string,
122
143
  tickFontSize: PropTypes.number,
144
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
145
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
146
+ tickLabelStyle: PropTypes.object,
123
147
  tickMaxStep: PropTypes.number,
124
148
  tickMinStep: PropTypes.number,
125
149
  tickNumber: PropTypes.number,
@@ -131,9 +155,21 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
131
155
  * Color palette used to colorize multiple series.
132
156
  */
133
157
  colors: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.func]),
158
+ /**
159
+ * An array of objects that can be used to populate series and axes data using their `dataKey` property.
160
+ */
134
161
  dataset: PropTypes.arrayOf(PropTypes.object),
135
162
  desc: PropTypes.string,
163
+ /**
164
+ * If `true`, the charts will not listen to the mouse move event.
165
+ * It might break interactive features, but will improve performance.
166
+ * @default false
167
+ */
136
168
  disableAxisListener: PropTypes.bool,
169
+ /**
170
+ * The height of the chart in px. If not defined, it takes the height of the parent element.
171
+ * @default undefined
172
+ */
137
173
  height: PropTypes.number,
138
174
  layout: PropTypes.oneOf(['horizontal', 'vertical']),
139
175
  /**
@@ -142,41 +178,47 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
142
178
  * @default yAxisIds[0] The id of the first provided axis
143
179
  */
144
180
  leftAxis: PropTypes.oneOfType([PropTypes.shape({
145
- axisId: PropTypes.string.isRequired,
181
+ axisId: PropTypes.string,
146
182
  classes: PropTypes.object,
147
183
  disableLine: PropTypes.bool,
148
184
  disableTicks: PropTypes.bool,
149
185
  fill: PropTypes.string,
150
186
  label: PropTypes.string,
151
187
  labelFontSize: PropTypes.number,
188
+ labelStyle: PropTypes.object,
152
189
  position: PropTypes.oneOf(['left', 'right']),
153
190
  slotProps: PropTypes.object,
154
191
  slots: PropTypes.object,
155
192
  stroke: PropTypes.string,
156
193
  tickFontSize: PropTypes.number,
194
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
195
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
196
+ tickLabelStyle: PropTypes.object,
157
197
  tickMaxStep: PropTypes.number,
158
198
  tickMinStep: PropTypes.number,
159
199
  tickNumber: PropTypes.number,
160
200
  tickSize: PropTypes.number
161
201
  }), PropTypes.string]),
202
+ /**
203
+ * @deprecated Consider using `slotProps.legend` instead.
204
+ */
162
205
  legend: PropTypes.shape({
163
206
  classes: PropTypes.object,
164
207
  direction: PropTypes.oneOf(['column', 'row']),
165
208
  hidden: PropTypes.bool,
166
- itemWidth: PropTypes.number,
167
- markSize: PropTypes.number,
168
- offset: PropTypes.shape({
169
- x: PropTypes.number,
170
- y: PropTypes.number
171
- }),
172
209
  position: PropTypes.shape({
173
210
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
174
211
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
175
212
  }),
176
213
  slotProps: PropTypes.object,
177
- slots: PropTypes.object,
178
- spacing: PropTypes.number
214
+ slots: PropTypes.object
179
215
  }),
216
+ /**
217
+ * The margin between the SVG and the drawing area.
218
+ * It's used for leaving some space for extra information such as the x- and y-axis or legend.
219
+ * Accepts an object with the optional properties: `top`, `bottom`, `left`, and `right`.
220
+ * @default object Depends on the charts type.
221
+ */
180
222
  margin: PropTypes.shape({
181
223
  bottom: PropTypes.number,
182
224
  left: PropTypes.number,
@@ -189,18 +231,22 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
189
231
  * @default null
190
232
  */
191
233
  rightAxis: PropTypes.oneOfType([PropTypes.shape({
192
- axisId: PropTypes.string.isRequired,
234
+ axisId: PropTypes.string,
193
235
  classes: PropTypes.object,
194
236
  disableLine: PropTypes.bool,
195
237
  disableTicks: PropTypes.bool,
196
238
  fill: PropTypes.string,
197
239
  label: PropTypes.string,
198
240
  labelFontSize: PropTypes.number,
241
+ labelStyle: PropTypes.object,
199
242
  position: PropTypes.oneOf(['left', 'right']),
200
243
  slotProps: PropTypes.object,
201
244
  slots: PropTypes.object,
202
245
  stroke: PropTypes.string,
203
246
  tickFontSize: PropTypes.number,
247
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
248
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
249
+ tickLabelStyle: PropTypes.object,
204
250
  tickMaxStep: PropTypes.number,
205
251
  tickMinStep: PropTypes.number,
206
252
  tickNumber: PropTypes.number,
@@ -225,6 +271,11 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
225
271
  xAxisKey: PropTypes.string,
226
272
  yAxisKey: PropTypes.string
227
273
  })).isRequired,
274
+ /**
275
+ * If `true`, animations are skiped.
276
+ * @default false
277
+ */
278
+ skipAnimation: PropTypes.bool,
228
279
  /**
229
280
  * The props used for each component slot.
230
281
  * @default {}
@@ -241,6 +292,8 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
241
292
  axisContent: PropTypes.elementType,
242
293
  classes: PropTypes.object,
243
294
  itemContent: PropTypes.elementType,
295
+ slotProps: PropTypes.object,
296
+ slots: PropTypes.object,
244
297
  trigger: PropTypes.oneOf(['axis', 'item', 'none'])
245
298
  }),
246
299
  /**
@@ -249,18 +302,22 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
249
302
  * @default null
250
303
  */
251
304
  topAxis: PropTypes.oneOfType([PropTypes.shape({
252
- axisId: PropTypes.string.isRequired,
305
+ axisId: PropTypes.string,
253
306
  classes: PropTypes.object,
254
307
  disableLine: PropTypes.bool,
255
308
  disableTicks: PropTypes.bool,
256
309
  fill: PropTypes.string,
257
310
  label: PropTypes.string,
258
311
  labelFontSize: PropTypes.number,
312
+ labelStyle: PropTypes.object,
259
313
  position: PropTypes.oneOf(['bottom', 'top']),
260
314
  slotProps: PropTypes.object,
261
315
  slots: PropTypes.object,
262
316
  stroke: PropTypes.string,
263
317
  tickFontSize: PropTypes.number,
318
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
319
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
320
+ tickLabelStyle: PropTypes.object,
264
321
  tickMaxStep: PropTypes.number,
265
322
  tickMinStep: PropTypes.number,
266
323
  tickNumber: PropTypes.number,
@@ -272,7 +329,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
272
329
  x: PropTypes.number,
273
330
  y: PropTypes.number
274
331
  }),
332
+ /**
333
+ * The width of the chart in px. If not defined, it takes the width of the parent element.
334
+ * @default undefined
335
+ */
275
336
  width: PropTypes.number,
337
+ /**
338
+ * The configuration of the x-axes.
339
+ * If not provided, a default axis config is used with id set to `DEFAULT_X_AXIS_KEY`.
340
+ */
276
341
  xAxis: PropTypes.arrayOf(PropTypes.shape({
277
342
  axisId: PropTypes.string,
278
343
  classes: PropTypes.object,
@@ -285,6 +350,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
285
350
  id: PropTypes.string,
286
351
  label: PropTypes.string,
287
352
  labelFontSize: PropTypes.number,
353
+ labelStyle: PropTypes.object,
288
354
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
289
355
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
290
356
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -293,12 +359,19 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
293
359
  slots: PropTypes.object,
294
360
  stroke: PropTypes.string,
295
361
  tickFontSize: PropTypes.number,
362
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
363
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
364
+ tickLabelStyle: PropTypes.object,
296
365
  tickMaxStep: PropTypes.number,
297
366
  tickMinStep: PropTypes.number,
298
367
  tickNumber: PropTypes.number,
299
368
  tickSize: PropTypes.number,
300
369
  valueFormatter: PropTypes.func
301
370
  })),
371
+ /**
372
+ * The configuration of the y-axes.
373
+ * If not provided, a default axis config is used with id set to `DEFAULT_Y_AXIS_KEY`.
374
+ */
302
375
  yAxis: PropTypes.arrayOf(PropTypes.shape({
303
376
  axisId: PropTypes.string,
304
377
  classes: PropTypes.object,
@@ -311,6 +384,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
311
384
  id: PropTypes.string,
312
385
  label: PropTypes.string,
313
386
  labelFontSize: PropTypes.number,
387
+ labelStyle: PropTypes.object,
314
388
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
315
389
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
316
390
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -319,6 +393,9 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
319
393
  slots: PropTypes.object,
320
394
  stroke: PropTypes.string,
321
395
  tickFontSize: PropTypes.number,
396
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
397
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
398
+ tickLabelStyle: PropTypes.object,
322
399
  tickMaxStep: PropTypes.number,
323
400
  tickMinStep: PropTypes.number,
324
401
  tickNumber: PropTypes.number,
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["id", "dataIndex", "classes", "color", "highlightScope", "slots", "slotProps"];
3
+ const _excluded = ["id", "dataIndex", "classes", "color", "highlightScope", "slots", "slotProps", "style"];
4
4
  import * as React from 'react';
5
5
  import composeClasses from '@mui/utils/composeClasses';
6
6
  import { useSlotProps } from '@mui/base/utils';
@@ -8,13 +8,14 @@ import generateUtilityClass from '@mui/utils/generateUtilityClass';
8
8
  import { styled } from '@mui/material/styles';
9
9
  import { color as d3Color } from 'd3-color';
10
10
  import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
11
+ import { animated } from '@react-spring/web';
11
12
  import { getIsFaded, getIsHighlighted, useInteractionItemProps } from '../hooks/useInteractionItemProps';
12
13
  import { InteractionContext } from '../context/InteractionProvider';
13
14
  import { jsx as _jsx } from "react/jsx-runtime";
14
15
  export function getBarElementUtilityClass(slot) {
15
16
  return generateUtilityClass('MuiBarElement', slot);
16
17
  }
17
- export const lineElementClasses = generateUtilityClasses('MuiBarElement', ['root']);
18
+ export const barElementClasses = generateUtilityClasses('MuiBarElement', ['root']);
18
19
  const useUtilityClasses = ownerState => {
19
20
  const {
20
21
  classes,
@@ -25,7 +26,7 @@ const useUtilityClasses = ownerState => {
25
26
  };
26
27
  return composeClasses(slots, getBarElementUtilityClass, classes);
27
28
  };
28
- export const BarElementPath = styled('rect', {
29
+ export const BarElementPath = styled(animated.rect, {
29
30
  name: 'MuiBarElement',
30
31
  slot: 'Root',
31
32
  overridesResolver: (_, styles) => styles.root
@@ -46,7 +47,8 @@ export function BarElement(props) {
46
47
  color,
47
48
  highlightScope,
48
49
  slots,
49
- slotProps
50
+ slotProps,
51
+ style
50
52
  } = props,
51
53
  other = _objectWithoutPropertiesLoose(props, _excluded);
52
54
  const getInteractionItemProps = useInteractionItemProps(highlightScope);
@@ -81,6 +83,7 @@ export function BarElement(props) {
81
83
  seriesId: id,
82
84
  dataIndex
83
85
  }), {
86
+ style,
84
87
  className: classes.root
85
88
  }),
86
89
  ownerState
@@ -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,