@mui/x-charts 6.0.0-alpha.15 → 6.0.0-alpha.16

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 (173) hide show
  1. package/BarChart/BarChart.d.ts +13 -2
  2. package/BarChart/BarChart.js +45 -3
  3. package/BarChart/BarElement.d.ts +1318 -3
  4. package/BarChart/BarElement.js +10 -8
  5. package/BarChart/BarPlot.d.ts +17 -1
  6. package/BarChart/BarPlot.js +152 -66
  7. package/CHANGELOG.md +65 -0
  8. package/ChartContainer/index.js +5 -2
  9. package/ChartsAxis/ChartsAxis.js +18 -2
  10. package/ChartsAxis/axisClasses.d.ts +1 -1
  11. package/ChartsAxisHighlight/ChartsAxisHighlight.js +2 -2
  12. package/ChartsClipPath/ChartsClipPath.js +2 -2
  13. package/ChartsLegend/ChartsLegend.d.ts +2 -1
  14. package/ChartsLegend/ChartsLegend.js +12 -8
  15. package/ChartsSurface.js +2 -2
  16. package/ChartsTooltip/ChartsAxisTooltipContent.js +2 -2
  17. package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  18. package/ChartsTooltip/ChartsTooltip.js +2 -2
  19. package/ChartsTooltip/utils.js +2 -2
  20. package/ChartsXAxis/ChartsXAxis.js +123 -35
  21. package/ChartsYAxis/ChartsYAxis.js +38 -16
  22. package/LineChart/AreaElement.d.ts +10 -0
  23. package/LineChart/AreaElement.js +12 -2
  24. package/LineChart/AreaPlot.d.ts +11 -0
  25. package/LineChart/AreaPlot.js +13 -2
  26. package/LineChart/LineChart.d.ts +10 -0
  27. package/LineChart/LineChart.js +36 -2
  28. package/LineChart/LineElement.d.ts +10 -0
  29. package/LineChart/LineElement.js +12 -2
  30. package/LineChart/LineHighlightElement.d.ts +10 -0
  31. package/LineChart/LineHighlightElement.js +12 -2
  32. package/LineChart/LineHighlightPlot.d.ts +10 -0
  33. package/LineChart/LineHighlightPlot.js +12 -2
  34. package/LineChart/LinePlot.d.ts +10 -0
  35. package/LineChart/LinePlot.js +12 -2
  36. package/LineChart/MarkElement.d.ts +10 -0
  37. package/LineChart/MarkElement.js +12 -2
  38. package/LineChart/MarkPlot.d.ts +10 -0
  39. package/LineChart/MarkPlot.js +12 -2
  40. package/PieChart/PieArc.js +2 -2
  41. package/PieChart/PieArcLabel.js +2 -2
  42. package/PieChart/PieChart.d.ts +10 -0
  43. package/PieChart/PieChart.js +37 -2
  44. package/PieChart/PiePlot.d.ts +10 -0
  45. package/PieChart/PiePlot.js +12 -2
  46. package/ResponsiveChartContainer/index.js +4 -4
  47. package/ScatterChart/Scatter.d.ts +10 -0
  48. package/ScatterChart/Scatter.js +12 -2
  49. package/ScatterChart/ScatterChart.d.ts +10 -0
  50. package/ScatterChart/ScatterChart.js +36 -2
  51. package/ScatterChart/ScatterPlot.d.ts +10 -0
  52. package/ScatterChart/ScatterPlot.js +12 -2
  53. package/SparkLineChart/SparkLineChart.d.ts +9 -0
  54. package/SparkLineChart/SparkLineChart.js +16 -2
  55. package/context/CartesianContextProvider.js +10 -2
  56. package/context/DrawingProvider.js +2 -2
  57. package/context/HighlightProvider.js +2 -2
  58. package/context/InteractionProvider.js +2 -2
  59. package/context/SeriesContextProvider.js +2 -2
  60. package/esm/BarChart/BarChart.js +43 -1
  61. package/esm/BarChart/BarElement.js +7 -4
  62. package/esm/BarChart/BarPlot.js +152 -67
  63. package/esm/ChartContainer/index.js +3 -0
  64. package/esm/ChartsAxis/ChartsAxis.js +16 -0
  65. package/esm/ChartsLegend/ChartsLegend.js +10 -6
  66. package/esm/ChartsXAxis/ChartsXAxis.js +122 -34
  67. package/esm/ChartsYAxis/ChartsYAxis.js +36 -14
  68. package/esm/LineChart/AreaElement.js +10 -0
  69. package/esm/LineChart/AreaPlot.js +11 -0
  70. package/esm/LineChart/LineChart.js +34 -0
  71. package/esm/LineChart/LineElement.js +10 -0
  72. package/esm/LineChart/LineHighlightElement.js +10 -0
  73. package/esm/LineChart/LineHighlightPlot.js +10 -0
  74. package/esm/LineChart/LinePlot.js +10 -0
  75. package/esm/LineChart/MarkElement.js +10 -0
  76. package/esm/LineChart/MarkPlot.js +10 -0
  77. package/esm/PieChart/PieChart.js +35 -0
  78. package/esm/PieChart/PiePlot.js +10 -0
  79. package/esm/ResponsiveChartContainer/index.js +2 -2
  80. package/esm/ScatterChart/Scatter.js +10 -0
  81. package/esm/ScatterChart/ScatterChart.js +34 -0
  82. package/esm/ScatterChart/ScatterPlot.js +10 -0
  83. package/esm/SparkLineChart/SparkLineChart.js +14 -0
  84. package/esm/context/CartesianContextProvider.js +8 -0
  85. package/esm/hooks/useMounted.js +16 -0
  86. package/esm/hooks/useReducedMotion.js +27 -0
  87. package/esm/hooks/useTicks.js +12 -6
  88. package/esm/internals/components/ChartsText.js +17 -13
  89. package/esm/internals/geometry.js +36 -0
  90. package/hooks/useAxisEvents.js +2 -2
  91. package/hooks/useChartDimensions.js +2 -2
  92. package/hooks/useDrawingArea.js +2 -2
  93. package/hooks/useInteractionItemProps.js +2 -2
  94. package/hooks/useMounted.d.ts +1 -0
  95. package/hooks/useMounted.js +25 -0
  96. package/hooks/useReducedMotion.d.ts +8 -0
  97. package/hooks/useReducedMotion.js +33 -0
  98. package/hooks/useScale.d.ts +2 -2
  99. package/hooks/useScale.js +2 -2
  100. package/hooks/useTicks.d.ts +18 -9
  101. package/hooks/useTicks.js +14 -8
  102. package/index.js +1 -1
  103. package/internals/components/ChartsText.d.ts +11 -8
  104. package/internals/components/ChartsText.js +19 -15
  105. package/internals/defaultizeColor.d.ts +1 -1
  106. package/internals/domUtils.d.ts +0 -1
  107. package/internals/geometry.d.ts +9 -0
  108. package/internals/geometry.js +42 -0
  109. package/legacy/BarChart/BarChart.js +43 -1
  110. package/legacy/BarChart/BarElement.js +6 -3
  111. package/legacy/BarChart/BarPlot.js +151 -63
  112. package/legacy/ChartContainer/index.js +3 -0
  113. package/legacy/ChartsAxis/ChartsAxis.js +16 -0
  114. package/legacy/ChartsLegend/ChartsLegend.js +14 -7
  115. package/legacy/ChartsXAxis/ChartsXAxis.js +126 -36
  116. package/legacy/ChartsYAxis/ChartsYAxis.js +36 -14
  117. package/legacy/LineChart/AreaElement.js +10 -0
  118. package/legacy/LineChart/AreaPlot.js +11 -0
  119. package/legacy/LineChart/LineChart.js +34 -0
  120. package/legacy/LineChart/LineElement.js +10 -0
  121. package/legacy/LineChart/LineHighlightElement.js +10 -0
  122. package/legacy/LineChart/LineHighlightPlot.js +10 -0
  123. package/legacy/LineChart/LinePlot.js +10 -0
  124. package/legacy/LineChart/MarkElement.js +10 -0
  125. package/legacy/LineChart/MarkPlot.js +10 -0
  126. package/legacy/PieChart/PieChart.js +35 -0
  127. package/legacy/PieChart/PiePlot.js +10 -0
  128. package/legacy/ResponsiveChartContainer/index.js +2 -2
  129. package/legacy/ScatterChart/Scatter.js +10 -0
  130. package/legacy/ScatterChart/ScatterChart.js +34 -0
  131. package/legacy/ScatterChart/ScatterPlot.js +10 -0
  132. package/legacy/SparkLineChart/SparkLineChart.js +14 -0
  133. package/legacy/context/CartesianContextProvider.js +8 -0
  134. package/legacy/hooks/useMounted.js +21 -0
  135. package/legacy/hooks/useReducedMotion.js +27 -0
  136. package/legacy/hooks/useTicks.js +13 -6
  137. package/legacy/index.js +1 -1
  138. package/legacy/internals/components/ChartsText.js +15 -15
  139. package/legacy/internals/geometry.js +37 -0
  140. package/models/axis.d.ts +19 -2
  141. package/models/seriesType/line.d.ts +2 -2
  142. package/modern/BarChart/BarChart.js +43 -1
  143. package/modern/BarChart/BarElement.js +7 -4
  144. package/modern/BarChart/BarPlot.js +149 -65
  145. package/modern/ChartContainer/index.js +3 -0
  146. package/modern/ChartsAxis/ChartsAxis.js +16 -0
  147. package/modern/ChartsLegend/ChartsLegend.js +10 -6
  148. package/modern/ChartsXAxis/ChartsXAxis.js +122 -34
  149. package/modern/ChartsYAxis/ChartsYAxis.js +36 -14
  150. package/modern/LineChart/AreaElement.js +10 -0
  151. package/modern/LineChart/AreaPlot.js +11 -0
  152. package/modern/LineChart/LineChart.js +34 -0
  153. package/modern/LineChart/LineElement.js +10 -0
  154. package/modern/LineChart/LineHighlightElement.js +10 -0
  155. package/modern/LineChart/LineHighlightPlot.js +10 -0
  156. package/modern/LineChart/LinePlot.js +10 -0
  157. package/modern/LineChart/MarkElement.js +10 -0
  158. package/modern/LineChart/MarkPlot.js +10 -0
  159. package/modern/PieChart/PieChart.js +35 -0
  160. package/modern/PieChart/PiePlot.js +10 -0
  161. package/modern/ResponsiveChartContainer/index.js +2 -2
  162. package/modern/ScatterChart/Scatter.js +10 -0
  163. package/modern/ScatterChart/ScatterChart.js +34 -0
  164. package/modern/ScatterChart/ScatterPlot.js +10 -0
  165. package/modern/SparkLineChart/SparkLineChart.js +14 -0
  166. package/modern/context/CartesianContextProvider.js +8 -0
  167. package/modern/hooks/useMounted.js +16 -0
  168. package/modern/hooks/useReducedMotion.js +27 -0
  169. package/modern/hooks/useTicks.js +12 -6
  170. package/modern/index.js +1 -1
  171. package/modern/internals/components/ChartsText.js +17 -13
  172. package/modern/internals/geometry.js +36 -0
  173. package/package.json +5 -3
@@ -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
@@ -76,7 +88,8 @@ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
76
88
  clipPath: `url(#${clipPathId})`,
77
89
  children: /*#__PURE__*/_jsx(BarPlot, {
78
90
  slots: slots,
79
- slotProps: slotProps
91
+ slotProps: slotProps,
92
+ skipAnimation: skipAnimation
80
93
  })
81
94
  }), /*#__PURE__*/_jsx(ChartsAxis, {
82
95
  topAxis: topAxis,
@@ -118,11 +131,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
118
131
  fill: PropTypes.string,
119
132
  label: PropTypes.string,
120
133
  labelFontSize: PropTypes.number,
134
+ labelStyle: PropTypes.object,
121
135
  position: PropTypes.oneOf(['bottom', 'top']),
122
136
  slotProps: PropTypes.object,
123
137
  slots: PropTypes.object,
124
138
  stroke: PropTypes.string,
125
139
  tickFontSize: PropTypes.number,
140
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
141
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
142
+ tickLabelStyle: PropTypes.object,
126
143
  tickMaxStep: PropTypes.number,
127
144
  tickMinStep: PropTypes.number,
128
145
  tickNumber: PropTypes.number,
@@ -152,11 +169,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
152
169
  fill: PropTypes.string,
153
170
  label: PropTypes.string,
154
171
  labelFontSize: PropTypes.number,
172
+ labelStyle: PropTypes.object,
155
173
  position: PropTypes.oneOf(['left', 'right']),
156
174
  slotProps: PropTypes.object,
157
175
  slots: PropTypes.object,
158
176
  stroke: PropTypes.string,
159
177
  tickFontSize: PropTypes.number,
178
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
179
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
180
+ tickLabelStyle: PropTypes.object,
160
181
  tickMaxStep: PropTypes.number,
161
182
  tickMinStep: PropTypes.number,
162
183
  tickNumber: PropTypes.number,
@@ -195,11 +216,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
195
216
  fill: PropTypes.string,
196
217
  label: PropTypes.string,
197
218
  labelFontSize: PropTypes.number,
219
+ labelStyle: PropTypes.object,
198
220
  position: PropTypes.oneOf(['left', 'right']),
199
221
  slotProps: PropTypes.object,
200
222
  slots: PropTypes.object,
201
223
  stroke: PropTypes.string,
202
224
  tickFontSize: PropTypes.number,
225
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
226
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
227
+ tickLabelStyle: PropTypes.object,
203
228
  tickMaxStep: PropTypes.number,
204
229
  tickMinStep: PropTypes.number,
205
230
  tickNumber: PropTypes.number,
@@ -224,6 +249,11 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
224
249
  xAxisKey: PropTypes.string,
225
250
  yAxisKey: PropTypes.string
226
251
  })).isRequired,
252
+ /**
253
+ * If `true`, animations are skiped.
254
+ * @default false
255
+ */
256
+ skipAnimation: PropTypes.bool,
227
257
  /**
228
258
  * The props used for each component slot.
229
259
  * @default {}
@@ -257,11 +287,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
257
287
  fill: PropTypes.string,
258
288
  label: PropTypes.string,
259
289
  labelFontSize: PropTypes.number,
290
+ labelStyle: PropTypes.object,
260
291
  position: PropTypes.oneOf(['bottom', 'top']),
261
292
  slotProps: PropTypes.object,
262
293
  slots: PropTypes.object,
263
294
  stroke: PropTypes.string,
264
295
  tickFontSize: PropTypes.number,
296
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
297
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
298
+ tickLabelStyle: PropTypes.object,
265
299
  tickMaxStep: PropTypes.number,
266
300
  tickMinStep: PropTypes.number,
267
301
  tickNumber: PropTypes.number,
@@ -286,6 +320,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
286
320
  id: PropTypes.string,
287
321
  label: PropTypes.string,
288
322
  labelFontSize: PropTypes.number,
323
+ labelStyle: PropTypes.object,
289
324
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
290
325
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
291
326
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -294,6 +329,9 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
294
329
  slots: PropTypes.object,
295
330
  stroke: PropTypes.string,
296
331
  tickFontSize: PropTypes.number,
332
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
333
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
334
+ tickLabelStyle: PropTypes.object,
297
335
  tickMaxStep: PropTypes.number,
298
336
  tickMinStep: PropTypes.number,
299
337
  tickNumber: PropTypes.number,
@@ -312,6 +350,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
312
350
  id: PropTypes.string,
313
351
  label: PropTypes.string,
314
352
  labelFontSize: PropTypes.number,
353
+ labelStyle: PropTypes.object,
315
354
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
316
355
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
317
356
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -320,6 +359,9 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
320
359
  slots: PropTypes.object,
321
360
  stroke: PropTypes.string,
322
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,
323
365
  tickMaxStep: PropTypes.number,
324
366
  tickMinStep: PropTypes.number,
325
367
  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
@@ -47,7 +48,8 @@ export function BarElement(props) {
47
48
  color,
48
49
  highlightScope,
49
50
  slots,
50
- slotProps
51
+ slotProps,
52
+ style
51
53
  } = props,
52
54
  other = _objectWithoutPropertiesLoose(props, _excluded);
53
55
  const getInteractionItemProps = useInteractionItemProps(highlightScope);
@@ -82,6 +84,7 @@ export function BarElement(props) {
82
84
  seriesId: id,
83
85
  dataIndex
84
86
  }), {
87
+ style,
85
88
  className: classes.root
86
89
  }),
87
90
  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,14 @@ function getBandSize({
34
36
  offset
35
37
  };
36
38
  }
37
- function BarPlot(props) {
38
- const seriesData = React.useContext(SeriesContext).bar;
39
+ const useCompletedData = () => {
40
+ var _React$useContext$bar;
41
+ const seriesData = (_React$useContext$bar = React.useContext(SeriesContext).bar) != null ? _React$useContext$bar : {
42
+ series: {},
43
+ stackingGroups: [],
44
+ seriesOrder: []
45
+ };
39
46
  const axisData = React.useContext(CartesianContext);
40
- if (seriesData === undefined) {
41
- return null;
42
- }
43
47
  const {
44
48
  series,
45
49
  stackingGroups
@@ -52,68 +56,144 @@ function BarPlot(props) {
52
56
  } = axisData;
53
57
  const defaultXAxisId = xAxisIds[0];
54
58
  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
- var _series$seriesId$xAxi, _series$seriesId$yAxi;
61
- const xAxisKey = (_series$seriesId$xAxi = series[seriesId].xAxisKey) != null ? _series$seriesId$xAxi : defaultXAxisId;
62
- const yAxisKey = (_series$seriesId$yAxi = series[seriesId].yAxisKey) != null ? _series$seriesId$yAxi : defaultYAxisId;
63
- const xAxisConfig = xAxis[xAxisKey];
64
- const yAxisConfig = yAxis[yAxisKey];
65
- const verticalLayout = series[seriesId].layout === 'vertical';
66
- let baseScaleConfig;
67
- if (verticalLayout) {
68
- if (!isBandScaleConfig(xAxisConfig)) {
69
- throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
70
- }
71
- if (xAxis[xAxisKey].data === undefined) {
72
- throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
73
- }
74
- baseScaleConfig = xAxisConfig;
75
- } else {
76
- if (!isBandScaleConfig(yAxisConfig)) {
77
- throw new Error(`Axis with id "${yAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
78
- }
79
- if (yAxis[yAxisKey].data === undefined) {
80
- throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
81
- }
82
- baseScaleConfig = yAxisConfig;
59
+ const data = stackingGroups.flatMap(({
60
+ ids: groupIds
61
+ }, groupIndex) => {
62
+ return groupIds.flatMap(seriesId => {
63
+ var _series$seriesId$xAxi, _series$seriesId$yAxi;
64
+ const xAxisKey = (_series$seriesId$xAxi = series[seriesId].xAxisKey) != null ? _series$seriesId$xAxi : defaultXAxisId;
65
+ const yAxisKey = (_series$seriesId$yAxi = series[seriesId].yAxisKey) != null ? _series$seriesId$yAxi : defaultYAxisId;
66
+ const xAxisConfig = xAxis[xAxisKey];
67
+ const yAxisConfig = yAxis[yAxisKey];
68
+ const verticalLayout = series[seriesId].layout === 'vertical';
69
+ let baseScaleConfig;
70
+ if (verticalLayout) {
71
+ if (!isBandScaleConfig(xAxisConfig)) {
72
+ throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
73
+ }
74
+ if (xAxis[xAxisKey].data === undefined) {
75
+ throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
76
+ }
77
+ baseScaleConfig = xAxisConfig;
78
+ } else {
79
+ if (!isBandScaleConfig(yAxisConfig)) {
80
+ throw new Error(`Axis with id "${yAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
83
81
  }
84
- const xScale = xAxisConfig.scale;
85
- const yScale = yAxisConfig.scale;
86
- const bandWidth = baseScaleConfig.scale.bandwidth();
87
- const {
88
- barWidth,
89
- offset
90
- } = getBandSize({
91
- bandWidth,
92
- numberOfGroups: stackingGroups.length,
93
- gapRatio: baseScaleConfig.barGapRatio
94
- });
95
- const barOffset = groupIndex * (barWidth + offset);
96
- const {
97
- stackedData,
98
- color
99
- } = series[seriesId];
100
- return stackedData.map((values, dataIndex) => {
101
- var _xAxis$xAxisKey$data, _yAxis$yAxisKey$data;
102
- const baseline = Math.min(...values);
103
- const value = Math.max(...values);
104
- return /*#__PURE__*/_jsx(BarElement, _extends({
105
- id: seriesId,
106
- dataIndex: dataIndex,
107
- x: verticalLayout ? xScale((_xAxis$xAxisKey$data = xAxis[xAxisKey].data) == null ? void 0 : _xAxis$xAxisKey$data[dataIndex]) + barOffset : xScale(baseline),
108
- y: verticalLayout ? yScale(value) : yScale((_yAxis$yAxisKey$data = yAxis[yAxisKey].data) == null ? void 0 : _yAxis$yAxisKey$data[dataIndex]) + barOffset,
109
- height: verticalLayout ? Math.abs(yScale(baseline) - yScale(value)) : barWidth,
110
- width: verticalLayout ? barWidth : Math.abs(xScale(baseline) - xScale(value)),
111
- color: color,
112
- highlightScope: series[seriesId].highlightScope
113
- }, props), `${seriesId}-${dataIndex}`);
114
- });
82
+ if (yAxis[yAxisKey].data === undefined) {
83
+ throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
84
+ }
85
+ baseScaleConfig = yAxisConfig;
86
+ }
87
+ const xScale = xAxisConfig.scale;
88
+ const yScale = yAxisConfig.scale;
89
+ const bandWidth = baseScaleConfig.scale.bandwidth();
90
+ const {
91
+ barWidth,
92
+ offset
93
+ } = getBandSize({
94
+ bandWidth,
95
+ numberOfGroups: stackingGroups.length,
96
+ gapRatio: baseScaleConfig.barGapRatio
97
+ });
98
+ const barOffset = groupIndex * (barWidth + offset);
99
+ const {
100
+ stackedData,
101
+ color
102
+ } = series[seriesId];
103
+ return stackedData.map((values, dataIndex) => {
104
+ var _xAxis$xAxisKey$data, _yAxis$yAxisKey$data;
105
+ const bottom = Math.min(...values);
106
+ const top = Math.max(...values);
107
+ return {
108
+ bottom,
109
+ top,
110
+ seriesId,
111
+ dataIndex,
112
+ layout: series[seriesId].layout,
113
+ x: verticalLayout ? xScale((_xAxis$xAxisKey$data = xAxis[xAxisKey].data) == null ? void 0 : _xAxis$xAxisKey$data[dataIndex]) + barOffset : xScale(bottom),
114
+ y: verticalLayout ? yScale(top) : yScale((_yAxis$yAxisKey$data = yAxis[yAxisKey].data) == null ? void 0 : _yAxis$yAxisKey$data[dataIndex]) + barOffset,
115
+ xOrigin: xScale(0),
116
+ yOrigin: yScale(0),
117
+ height: verticalLayout ? Math.abs(yScale(bottom) - yScale(top)) : barWidth,
118
+ width: verticalLayout ? barWidth : Math.abs(xScale(bottom) - xScale(top)),
119
+ color,
120
+ highlightScope: series[seriesId].highlightScope
121
+ };
115
122
  });
116
- })
123
+ });
124
+ });
125
+ return data;
126
+ };
127
+ const getOutStyle = ({
128
+ layout,
129
+ yOrigin,
130
+ x,
131
+ width,
132
+ y,
133
+ xOrigin,
134
+ height
135
+ }) => _extends({}, layout === 'vertical' ? {
136
+ y: yOrigin,
137
+ x,
138
+ height: 0,
139
+ width
140
+ } : {
141
+ y,
142
+ x: xOrigin,
143
+ height,
144
+ width: 0
145
+ });
146
+ const getInStyle = ({
147
+ x,
148
+ width,
149
+ y,
150
+ height
151
+ }) => ({
152
+ y,
153
+ x,
154
+ height,
155
+ width
156
+ });
157
+
158
+ /**
159
+ * Demos:
160
+ *
161
+ * - [Bars](https://mui.com/x/react-charts/bars/)
162
+ * - [Bar demonstration](https://mui.com/x/react-charts/bar-demo/)
163
+ * - [Stacking](https://mui.com/x/react-charts/stacking/)
164
+ *
165
+ * API:
166
+ *
167
+ * - [BarPlot API](https://mui.com/x/api/charts/bar-plot/)
168
+ */
169
+ function BarPlot(props) {
170
+ const completedData = useCompletedData();
171
+ const {
172
+ skipAnimation
173
+ } = props,
174
+ other = _objectWithoutPropertiesLoose(props, _excluded);
175
+ const transition = useTransition(completedData, {
176
+ keys: bar => `${bar.seriesId}-${bar.dataIndex}`,
177
+ from: getOutStyle,
178
+ leave: getOutStyle,
179
+ enter: getInStyle,
180
+ update: getInStyle,
181
+ immediate: skipAnimation
182
+ });
183
+ return /*#__PURE__*/_jsx(React.Fragment, {
184
+ children: transition((style, {
185
+ seriesId,
186
+ dataIndex,
187
+ color,
188
+ highlightScope
189
+ }) => /*#__PURE__*/_jsx(BarElement, _extends({
190
+ id: seriesId,
191
+ dataIndex: dataIndex,
192
+ highlightScope: highlightScope,
193
+ color: color
194
+ }, other, {
195
+ style: style
196
+ })))
117
197
  });
118
198
  }
119
199
  process.env.NODE_ENV !== "production" ? BarPlot.propTypes = {
@@ -121,6 +201,11 @@ process.env.NODE_ENV !== "production" ? BarPlot.propTypes = {
121
201
  // | These PropTypes are generated from the TypeScript type definitions |
122
202
  // | To update them edit the TypeScript types and run "yarn proptypes" |
123
203
  // ----------------------------------------------------------------------
204
+ /**
205
+ * If `true`, animations are skiped.
206
+ * @default false
207
+ */
208
+ skipAnimation: PropTypes.bool,
124
209
  /**
125
210
  * The props used for each component slot.
126
211
  * @default {}
@@ -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,
@@ -97,11 +97,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
97
97
  fill: PropTypes.string,
98
98
  label: PropTypes.string,
99
99
  labelFontSize: PropTypes.number,
100
+ labelStyle: PropTypes.object,
100
101
  position: PropTypes.oneOf(['bottom', 'top']),
101
102
  slotProps: PropTypes.object,
102
103
  slots: PropTypes.object,
103
104
  stroke: PropTypes.string,
104
105
  tickFontSize: PropTypes.number,
106
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
107
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
108
+ tickLabelStyle: PropTypes.object,
105
109
  tickMaxStep: PropTypes.number,
106
110
  tickMinStep: PropTypes.number,
107
111
  tickNumber: PropTypes.number,
@@ -120,11 +124,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
120
124
  fill: PropTypes.string,
121
125
  label: PropTypes.string,
122
126
  labelFontSize: PropTypes.number,
127
+ labelStyle: PropTypes.object,
123
128
  position: PropTypes.oneOf(['left', 'right']),
124
129
  slotProps: PropTypes.object,
125
130
  slots: PropTypes.object,
126
131
  stroke: PropTypes.string,
127
132
  tickFontSize: PropTypes.number,
133
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
134
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
135
+ tickLabelStyle: PropTypes.object,
128
136
  tickMaxStep: PropTypes.number,
129
137
  tickMinStep: PropTypes.number,
130
138
  tickNumber: PropTypes.number,
@@ -143,11 +151,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
143
151
  fill: PropTypes.string,
144
152
  label: PropTypes.string,
145
153
  labelFontSize: PropTypes.number,
154
+ labelStyle: PropTypes.object,
146
155
  position: PropTypes.oneOf(['left', 'right']),
147
156
  slotProps: PropTypes.object,
148
157
  slots: PropTypes.object,
149
158
  stroke: PropTypes.string,
150
159
  tickFontSize: PropTypes.number,
160
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
161
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
162
+ tickLabelStyle: PropTypes.object,
151
163
  tickMaxStep: PropTypes.number,
152
164
  tickMinStep: PropTypes.number,
153
165
  tickNumber: PropTypes.number,
@@ -176,11 +188,15 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
176
188
  fill: PropTypes.string,
177
189
  label: PropTypes.string,
178
190
  labelFontSize: PropTypes.number,
191
+ labelStyle: PropTypes.object,
179
192
  position: PropTypes.oneOf(['bottom', 'top']),
180
193
  slotProps: PropTypes.object,
181
194
  slots: PropTypes.object,
182
195
  stroke: PropTypes.string,
183
196
  tickFontSize: PropTypes.number,
197
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
198
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
199
+ tickLabelStyle: PropTypes.object,
184
200
  tickMaxStep: PropTypes.number,
185
201
  tickMinStep: PropTypes.number,
186
202
  tickNumber: PropTypes.number,
@@ -1,6 +1,7 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["label"];
3
+ const _excluded = ["rotate", "dominantBaseline"],
4
+ _excluded2 = ["label"];
4
5
  import * as React from 'react';
5
6
  import { useSlotProps } from '@mui/base/utils';
6
7
  import { NoSsr } from '@mui/base/NoSsr';
@@ -75,11 +76,16 @@ function DefaultChartsLegend(props) {
75
76
  const theme = useTheme();
76
77
  const labelStyle = React.useMemo(() => _extends({}, theme.typography.subtitle1, {
77
78
  color: 'inherit',
79
+ dominantBaseline: 'central',
80
+ textAnchor: 'start',
78
81
  fill: (theme.vars || theme).palette.text.primary,
79
82
  lineHeight: 1
80
- }, inLabelStyle), [inLabelStyle, theme]);
83
+ }, inLabelStyle),
84
+ // To say to TS that the dominantBaseline and textAnchor are correct
85
+ [inLabelStyle, theme]);
81
86
  const padding = React.useMemo(() => getStandardizedPadding(paddingProps), [paddingProps]);
82
- const getItemSpace = React.useCallback((label, style) => {
87
+ const getItemSpace = React.useCallback((label, inStyle = {}) => {
88
+ const style = _objectWithoutPropertiesLoose(inStyle, _excluded);
83
89
  const linesSize = getWordsByLines({
84
90
  style,
85
91
  needsComputation: true,
@@ -112,7 +118,7 @@ function DefaultChartsLegend(props) {
112
118
  let {
113
119
  label
114
120
  } = _ref,
115
- other = _objectWithoutPropertiesLoose(_ref, _excluded);
121
+ other = _objectWithoutPropertiesLoose(_ref, _excluded2);
116
122
  const itemSpace = getItemSpace(label, labelStyle);
117
123
  const rep = _extends({}, other, {
118
124
  label,
@@ -219,8 +225,6 @@ function DefaultChartsLegend(props) {
219
225
  fill: color
220
226
  }), /*#__PURE__*/_jsx(ChartsText, {
221
227
  style: labelStyle,
222
- dominantBaseline: "central",
223
- textAnchor: "start",
224
228
  text: label,
225
229
  x: itemMarkWidth + markGap,
226
230
  y: 0