@mui/x-charts 6.0.0-alpha.2 → 6.0.0-alpha.3

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 (90) hide show
  1. package/BarChart/BarChart.d.ts +1 -4
  2. package/BarChart/BarChart.js +5 -3
  3. package/BarChart/BarPlot.js +42 -8
  4. package/CHANGELOG.md +232 -114
  5. package/ChartContainer/index.d.ts +3 -1
  6. package/ChartContainer/index.js +10 -6
  7. package/ChartsAxisHighlight/ChartsAxisHighlight.js +3 -2
  8. package/LineChart/LineChart.d.ts +1 -4
  9. package/LineChart/LineChart.js +5 -3
  10. package/ResponsiveChartContainer/index.d.ts +1 -1
  11. package/ResponsiveChartContainer/index.js +11 -9
  12. package/ScatterChart/Scatter.d.ts +1 -1
  13. package/ScatterChart/ScatterChart.d.ts +1 -4
  14. package/ScatterChart/ScatterChart.js +5 -3
  15. package/context/CartesianContextProvider.js +31 -20
  16. package/context/SeriesContextProvider.js +2 -2
  17. package/esm/BarChart/BarChart.js +3 -2
  18. package/esm/BarChart/BarPlot.js +44 -8
  19. package/esm/ChartContainer/index.js +7 -5
  20. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +3 -2
  21. package/esm/LineChart/LineChart.js +3 -2
  22. package/esm/ResponsiveChartContainer/index.js +9 -8
  23. package/esm/ScatterChart/ScatterChart.js +3 -2
  24. package/esm/context/CartesianContextProvider.js +31 -18
  25. package/esm/context/SeriesContextProvider.js +2 -2
  26. package/esm/hooks/index.js +2 -0
  27. package/esm/hooks/useAxisEvents.js +12 -7
  28. package/esm/hooks/useDrawingArea.js +16 -0
  29. package/esm/hooks/useScale.js +19 -21
  30. package/esm/hooks/useTicks.js +26 -13
  31. package/esm/index.js +1 -0
  32. package/esm/internals/getScale.js +17 -0
  33. package/esm/internals/isBandScale.js +3 -0
  34. package/esm/models/axis.js +6 -1
  35. package/hooks/index.d.ts +2 -0
  36. package/hooks/index.js +27 -0
  37. package/hooks/package.json +6 -0
  38. package/hooks/useAxisEvents.js +14 -9
  39. package/hooks/useDrawingArea.d.ts +6 -0
  40. package/hooks/useDrawingArea.js +24 -0
  41. package/hooks/useScale.d.ts +3 -6
  42. package/hooks/useScale.js +24 -24
  43. package/hooks/useTicks.d.ts +1 -1
  44. package/hooks/useTicks.js +19 -9
  45. package/index.d.ts +1 -0
  46. package/index.js +12 -1
  47. package/internals/getScale.d.ts +2 -0
  48. package/internals/getScale.js +23 -0
  49. package/internals/isBandScale.d.ts +3 -0
  50. package/internals/isBandScale.js +9 -0
  51. package/legacy/BarChart/BarChart.js +3 -2
  52. package/legacy/BarChart/BarPlot.js +44 -10
  53. package/legacy/ChartContainer/index.js +7 -5
  54. package/legacy/ChartsAxisHighlight/ChartsAxisHighlight.js +3 -2
  55. package/legacy/LineChart/LineChart.js +3 -2
  56. package/legacy/ResponsiveChartContainer/index.js +9 -8
  57. package/legacy/ScatterChart/ScatterChart.js +3 -2
  58. package/legacy/context/CartesianContextProvider.js +31 -18
  59. package/legacy/context/SeriesContextProvider.js +2 -2
  60. package/legacy/hooks/index.js +2 -0
  61. package/legacy/hooks/useAxisEvents.js +12 -7
  62. package/legacy/hooks/useDrawingArea.js +17 -0
  63. package/legacy/hooks/useScale.js +17 -21
  64. package/legacy/hooks/useTicks.js +26 -13
  65. package/legacy/index.js +2 -1
  66. package/legacy/internals/getScale.js +17 -0
  67. package/legacy/internals/isBandScale.js +3 -0
  68. package/legacy/models/axis.js +6 -1
  69. package/models/axis.d.ts +25 -12
  70. package/models/axis.js +9 -1
  71. package/models/seriesType/pie.d.ts +2 -2
  72. package/modern/BarChart/BarChart.js +3 -2
  73. package/modern/BarChart/BarPlot.js +44 -8
  74. package/modern/ChartContainer/index.js +7 -5
  75. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +3 -2
  76. package/modern/LineChart/LineChart.js +3 -2
  77. package/modern/ResponsiveChartContainer/index.js +9 -8
  78. package/modern/ScatterChart/ScatterChart.js +3 -2
  79. package/modern/context/CartesianContextProvider.js +29 -18
  80. package/modern/context/SeriesContextProvider.js +2 -2
  81. package/modern/hooks/index.js +2 -0
  82. package/modern/hooks/useAxisEvents.js +12 -7
  83. package/modern/hooks/useDrawingArea.js +16 -0
  84. package/modern/hooks/useScale.js +19 -21
  85. package/modern/hooks/useTicks.js +18 -8
  86. package/modern/index.js +2 -1
  87. package/modern/internals/getScale.js +17 -0
  88. package/modern/internals/isBandScale.js +3 -0
  89. package/modern/models/axis.js +6 -1
  90. package/package.json +1 -1
@@ -12,8 +12,5 @@ export interface BarChartProps extends Omit<ResponsiveChartContainerProps, 'seri
12
12
  axisHighlight?: ChartsAxisHighlightProps;
13
13
  legend?: ChartsLegendProps;
14
14
  }
15
- declare function BarChart(props: BarChartProps): React.JSX.Element;
16
- declare namespace BarChart {
17
- var propTypes: any;
18
- }
15
+ declare const BarChart: React.ForwardRefExoticComponent<BarChartProps & React.RefAttributes<unknown>>;
19
16
  export { BarChart };
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.BarChart = BarChart;
7
+ exports.BarChart = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
@@ -20,7 +20,7 @@ var _ChartsClipPath = require("../ChartsClipPath");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
- function BarChart(props) {
23
+ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
24
24
  const {
25
25
  xAxis,
26
26
  yAxis,
@@ -42,6 +42,7 @@ function BarChart(props) {
42
42
  const id = (0, _useId.default)();
43
43
  const clipPathId = `${id}-clip-path`;
44
44
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ResponsiveChartContainer.ResponsiveChartContainer, {
45
+ ref: ref,
45
46
  series: series.map(s => (0, _extends2.default)({
46
47
  type: 'bar'
47
48
  }, s)),
@@ -73,7 +74,8 @@ function BarChart(props) {
73
74
  id: clipPathId
74
75
  }), children]
75
76
  });
76
- }
77
+ });
78
+ exports.BarChart = BarChart;
77
79
  process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
78
80
  // ----------------------------- Warning --------------------------------
79
81
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -7,11 +7,37 @@ exports.BarPlot = BarPlot;
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _SeriesContextProvider = require("../context/SeriesContextProvider");
9
9
  var _CartesianContextProvider = require("../context/CartesianContextProvider");
10
- var _useScale = require("../hooks/useScale");
11
10
  var _BarElement = require("./BarElement");
11
+ var _axis = require("../models/axis");
12
12
  var _jsxRuntime = require("react/jsx-runtime");
13
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ /**
16
+ * Solution of the equations
17
+ * W = barWidth * N + offset * (N-1)
18
+ * offset / (offset + barWidth) = r
19
+ * @param bandWidth The width available to place bars.
20
+ * @param numberOfGroups The number of bars to place in that space.
21
+ * @param gapRatio The ratio of the gap between bars over the bar width.
22
+ * @returns The bar width and the offset between bars.
23
+ */function getBandSize({
24
+ bandWidth: W,
25
+ numberOfGroups: N,
26
+ gapRatio: r
27
+ }) {
28
+ if (r === 0) {
29
+ return {
30
+ barWidth: W / N,
31
+ offset: 0
32
+ };
33
+ }
34
+ const barWidth = W / (N + (N - 1) * r);
35
+ const offset = r * barWidth;
36
+ return {
37
+ barWidth,
38
+ offset
39
+ };
40
+ }
15
41
  function BarPlot() {
16
42
  const seriesData = React.useContext(_SeriesContextProvider.SeriesContext).bar;
17
43
  const axisData = React.useContext(_CartesianContextProvider.CartesianContext);
@@ -37,19 +63,27 @@ function BarPlot() {
37
63
  return groupIds.flatMap(seriesId => {
38
64
  const xAxisKey = series[seriesId].xAxisKey ?? defaultXAxisId;
39
65
  const yAxisKey = series[seriesId].yAxisKey ?? defaultYAxisId;
40
- const xScale = xAxis[xAxisKey].scale;
41
- const yScale = yAxis[yAxisKey].scale;
42
- if (!(0, _useScale.isBandScale)(xScale)) {
43
- throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series ${stackingGroups}`);
66
+ const xAxisConfig = xAxis[xAxisKey];
67
+ const yAxisConfig = yAxis[yAxisKey];
68
+ if (!(0, _axis.isBandScaleConfig)(xAxisConfig)) {
69
+ throw new Error(`Axis with id "${xAxisKey}" shoud be of type "band" to display the bar series of id "${seriesId}"`);
44
70
  }
45
71
  if (xAxis[xAxisKey].data === undefined) {
46
72
  throw new Error(`Axis with id "${xAxisKey}" shoud have data property`);
47
73
  }
74
+ const xScale = xAxisConfig.scale;
75
+ const yScale = yAxisConfig.scale;
48
76
 
49
77
  // Currently assuming all bars are vertical
50
78
  const bandWidth = xScale.bandwidth();
51
- const barWidth = 0.9 * bandWidth / stackingGroups.length;
52
- const offset = 0.05 * bandWidth;
79
+ const {
80
+ barWidth,
81
+ offset
82
+ } = getBandSize({
83
+ bandWidth,
84
+ numberOfGroups: stackingGroups.length,
85
+ gapRatio: xAxisConfig.barGapRatio
86
+ });
53
87
 
54
88
  // @ts-ignore TODO: fix when adding a correct API for customisation
55
89
  const {
@@ -62,7 +96,7 @@ function BarPlot() {
62
96
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_BarElement.BarElement, {
63
97
  id: seriesId,
64
98
  dataIndex: dataIndex,
65
- x: xScale(xAxis[xAxisKey].data?.[dataIndex]) + groupIndex * barWidth + offset,
99
+ x: xScale(xAxis[xAxisKey].data?.[dataIndex]) + groupIndex * (barWidth + offset),
66
100
  y: yScale(value),
67
101
  height: yScale(baseline) - yScale(value),
68
102
  width: barWidth,