@mui/x-charts 7.22.1 → 7.22.2

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 (34) hide show
  1. package/BarChart/BarChart.js +2 -0
  2. package/CHANGELOG.md +64 -0
  3. package/ChartContainer/ChartContainer.js +2 -0
  4. package/ChartContainer/useChartContainerProps.d.ts +8 -0
  5. package/ChartContainer/useDefaultizeAxis.d.ts +4 -0
  6. package/LineChart/LineChart.js +2 -0
  7. package/PieChart/PieChart.js +2 -0
  8. package/ResponsiveChartContainer/ResponsiveChartContainer.js +2 -0
  9. package/ScatterChart/ScatterChart.js +2 -0
  10. package/SparkLineChart/SparkLineChart.js +2 -0
  11. package/context/CartesianProvider/defaultizeAxis.d.ts +4 -0
  12. package/index.js +1 -1
  13. package/internals/computeAxisValue.js +13 -5
  14. package/models/axis.d.ts +10 -0
  15. package/models/seriesType/common.d.ts +2 -2
  16. package/modern/BarChart/BarChart.js +2 -0
  17. package/modern/ChartContainer/ChartContainer.js +2 -0
  18. package/modern/LineChart/LineChart.js +2 -0
  19. package/modern/PieChart/PieChart.js +2 -0
  20. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +2 -0
  21. package/modern/ScatterChart/ScatterChart.js +2 -0
  22. package/modern/SparkLineChart/SparkLineChart.js +2 -0
  23. package/modern/index.js +1 -1
  24. package/modern/internals/computeAxisValue.js +13 -5
  25. package/node/BarChart/BarChart.js +2 -0
  26. package/node/ChartContainer/ChartContainer.js +2 -0
  27. package/node/LineChart/LineChart.js +2 -0
  28. package/node/PieChart/PieChart.js +2 -0
  29. package/node/ResponsiveChartContainer/ResponsiveChartContainer.js +2 -0
  30. package/node/ScatterChart/ScatterChart.js +2 -0
  31. package/node/SparkLineChart/SparkLineChart.js +2 -0
  32. package/node/index.js +1 -1
  33. package/node/internals/computeAxisValue.js +13 -5
  34. package/package.json +1 -1
@@ -288,6 +288,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
288
288
  dataKey: PropTypes.string,
289
289
  disableLine: PropTypes.bool,
290
290
  disableTicks: PropTypes.bool,
291
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
291
292
  fill: PropTypes.string,
292
293
  hideTooltip: PropTypes.bool,
293
294
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -341,6 +342,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
341
342
  dataKey: PropTypes.string,
342
343
  disableLine: PropTypes.bool,
343
344
  disableTicks: PropTypes.bool,
345
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
344
346
  fill: PropTypes.string,
345
347
  hideTooltip: PropTypes.bool,
346
348
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
package/CHANGELOG.md CHANGED
@@ -3,6 +3,70 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.22.2
7
+
8
+ _Nov 8, 2024_
9
+
10
+ We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 👨🏽‍💻 API enhancements
13
+ - 🐞 Bugfixes
14
+
15
+ Special thanks go out to the community contributors who have helped make this release possible:
16
+ @clins1994, @GuillaumeMeheut, @k-rajat19.
17
+ Following are all team members who have contributed to this release:
18
+ @LukasTy, @MBilalShafi, @KenanYusuf, @arminmeh.
19
+
20
+ ### Upcoming alpha
21
+
22
+ Keep an eye out for the MUI⠀X `v8.0.0-aplha.0` release soon. It will follow a weekly release schedule as always until it is stable.
23
+
24
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
25
+
26
+ ### Data Grid
27
+
28
+ #### `@mui/x-data-grid@7.22.2`
29
+
30
+ - [DataGrid] Fix `null` reference error in `GridVirtualScrollbar` (#15289) @MBilalShafi
31
+ - [DataGrid] Fix filtering with `boolean` column type (#15257) @k-rajat19
32
+ - [DataGrid] Improve row selection propagation trigger (#15274) @MBilalShafi
33
+ - [DataGrid] Preprocess edit cell props on backspace/delete (#15223) @KenanYusuf
34
+ - [DataGrid] Add a recipe to persist column width and order (#15309) @MBilalShafi
35
+
36
+ #### `@mui/x-data-grid-pro@7.22.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
37
+
38
+ Same changes as in `@mui/x-data-grid@7.22.2`, plus:
39
+
40
+ - [DataGridPro] Apply default properties if they are not passed in a reorder column (#15320) @k-rajat19
41
+ - [DataGridPro] Toggle row expansion with `Enter` key in Tree data (#15313) @k-rajat19
42
+
43
+ #### `@mui/x-data-grid-premium@7.22.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
44
+
45
+ Same changes as in `@mui/x-data-grid-pro@7.22.2`, plus:
46
+
47
+ - [DataGridPremium] Fix incorrect rows selection count when selection propagation is enabled with row grouping (#15222) @arminmeh
48
+
49
+ ### Date and Time Pickers
50
+
51
+ #### `@mui/x-date-pickers@7.22.2`
52
+
53
+ - [pickers] Add support for `moment-hijri@3.0.0` (#15248) @LukasTy
54
+
55
+ #### `@mui/x-date-pickers-pro@7.22.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
56
+
57
+ Same changes as in `@mui/x-date-pickers@7.22.2`.
58
+
59
+ ### Charts
60
+
61
+ #### `@mui/x-charts@7.22.2`
62
+
63
+ - [charts] Allow `SeriesValueFormatter` to return `null` value (#15295) @clins1994
64
+ - [charts] Allow configuring the `domainLimit` for each axis. (#15325) @GuillaumeMeheut
65
+
66
+ #### `@mui/x-charts-pro@7.0.0-beta.7` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
67
+
68
+ Same changes as in `@mui/x-charts@7.22.2`.
69
+
6
70
  ## 7.22.1
7
71
 
8
72
  _Nov 1, 2024_
@@ -152,6 +152,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
152
152
  dataKey: PropTypes.string,
153
153
  disableLine: PropTypes.bool,
154
154
  disableTicks: PropTypes.bool,
155
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
155
156
  fill: PropTypes.string,
156
157
  hideTooltip: PropTypes.bool,
157
158
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -205,6 +206,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
205
206
  dataKey: PropTypes.string,
206
207
  disableLine: PropTypes.bool,
207
208
  disableTicks: PropTypes.bool,
209
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
208
210
  fill: PropTypes.string,
209
211
  hideTooltip: PropTypes.bool,
210
212
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -51,6 +51,10 @@ export declare const useChartContainerProps: (props: ChartContainerProps, ref: R
51
51
  scaleType?: "linear" | "time" | "log" | "band" | "point" | "pow" | "sqrt" | "utc" | undefined;
52
52
  colorMap?: import("../models/colorMapping").ContinuousColorConfig<number | Date> | import("../models/colorMapping").PiecewiseColorConfig<number | Date> | import("../models/colorMapping").OrdinalColorConfig<string | number | Date> | undefined;
53
53
  hideTooltip?: boolean | undefined;
54
+ domainLimit?: ("nice" | "strict" | ((min: number, max: number) => {
55
+ min: number;
56
+ max: number;
57
+ })) | undefined;
54
58
  id: import("../internals").AxisId;
55
59
  }[];
56
60
  yAxis: {
@@ -84,6 +88,10 @@ export declare const useChartContainerProps: (props: ChartContainerProps, ref: R
84
88
  scaleType?: "linear" | "time" | "log" | "band" | "point" | "pow" | "sqrt" | "utc" | undefined;
85
89
  colorMap?: import("../models/colorMapping").ContinuousColorConfig<number | Date> | import("../models/colorMapping").PiecewiseColorConfig<number | Date> | import("../models/colorMapping").OrdinalColorConfig<string | number | Date> | undefined;
86
90
  hideTooltip?: boolean | undefined;
91
+ domainLimit?: ("nice" | "strict" | ((min: number, max: number) => {
92
+ min: number;
93
+ max: number;
94
+ })) | undefined;
87
95
  id: import("../internals").AxisId;
88
96
  }[];
89
97
  };
@@ -33,5 +33,9 @@ export declare const useDefaultizeAxis: (inXAxis: MakeOptional<AxisConfig<ScaleN
33
33
  scaleType?: "linear" | "time" | "log" | "band" | "point" | "pow" | "sqrt" | "utc" | undefined;
34
34
  colorMap?: import("../models/colorMapping").ContinuousColorConfig<number | Date> | import("../models/colorMapping").PiecewiseColorConfig<number | Date> | import("../models/colorMapping").OrdinalColorConfig<string | number | Date> | undefined;
35
35
  hideTooltip?: boolean | undefined;
36
+ domainLimit?: ("nice" | "strict" | ((min: number, max: number) => {
37
+ min: number;
38
+ max: number;
39
+ })) | undefined;
36
40
  id: import("../internals").AxisId;
37
41
  }[][];
@@ -293,6 +293,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
293
293
  dataKey: PropTypes.string,
294
294
  disableLine: PropTypes.bool,
295
295
  disableTicks: PropTypes.bool,
296
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
296
297
  fill: PropTypes.string,
297
298
  hideTooltip: PropTypes.bool,
298
299
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -346,6 +347,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
346
347
  dataKey: PropTypes.string,
347
348
  disableLine: PropTypes.bool,
348
349
  disableTicks: PropTypes.bool,
350
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
349
351
  fill: PropTypes.string,
350
352
  hideTooltip: PropTypes.bool,
351
353
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -333,6 +333,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
333
333
  dataKey: PropTypes.string,
334
334
  disableLine: PropTypes.bool,
335
335
  disableTicks: PropTypes.bool,
336
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
336
337
  fill: PropTypes.string,
337
338
  hideTooltip: PropTypes.bool,
338
339
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -386,6 +387,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
386
387
  dataKey: PropTypes.string,
387
388
  disableLine: PropTypes.bool,
388
389
  disableTicks: PropTypes.bool,
390
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
389
391
  fill: PropTypes.string,
390
392
  hideTooltip: PropTypes.bool,
391
393
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -133,6 +133,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
133
133
  dataKey: PropTypes.string,
134
134
  disableLine: PropTypes.bool,
135
135
  disableTicks: PropTypes.bool,
136
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
136
137
  fill: PropTypes.string,
137
138
  hideTooltip: PropTypes.bool,
138
139
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -186,6 +187,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
186
187
  dataKey: PropTypes.string,
187
188
  disableLine: PropTypes.bool,
188
189
  disableTicks: PropTypes.bool,
190
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
189
191
  fill: PropTypes.string,
190
192
  hideTooltip: PropTypes.bool,
191
193
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -275,6 +275,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
275
275
  dataKey: PropTypes.string,
276
276
  disableLine: PropTypes.bool,
277
277
  disableTicks: PropTypes.bool,
278
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
278
279
  fill: PropTypes.string,
279
280
  hideTooltip: PropTypes.bool,
280
281
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -328,6 +329,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
328
329
  dataKey: PropTypes.string,
329
330
  disableLine: PropTypes.bool,
330
331
  disableTicks: PropTypes.bool,
332
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
331
333
  fill: PropTypes.string,
332
334
  hideTooltip: PropTypes.bool,
333
335
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -282,6 +282,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
282
282
  dataKey: PropTypes.string,
283
283
  disableLine: PropTypes.bool,
284
284
  disableTicks: PropTypes.bool,
285
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
285
286
  fill: PropTypes.string,
286
287
  hideTooltip: PropTypes.bool,
287
288
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -334,6 +335,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
334
335
  dataKey: PropTypes.string,
335
336
  disableLine: PropTypes.bool,
336
337
  disableTicks: PropTypes.bool,
338
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
337
339
  fill: PropTypes.string,
338
340
  hideTooltip: PropTypes.bool,
339
341
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -32,5 +32,9 @@ export declare const defaultizeAxis: (inAxis: MakeOptional<AxisConfig<ScaleName,
32
32
  scaleType?: "linear" | "time" | "log" | "band" | "point" | "pow" | "sqrt" | "utc" | undefined;
33
33
  colorMap?: import("../../models/colorMapping").ContinuousColorConfig<number | Date> | import("../../models/colorMapping").PiecewiseColorConfig<number | Date> | import("../../models/colorMapping").OrdinalColorConfig<string | number | Date> | undefined;
34
34
  hideTooltip?: boolean | undefined;
35
+ domainLimit?: ("nice" | "strict" | ((min: number, max: number) => {
36
+ min: number;
37
+ max: number;
38
+ })) | undefined;
35
39
  id: import("../../internals").AxisId;
36
40
  }[];
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.22.1
2
+ * @mui/x-charts v7.22.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -98,22 +98,30 @@ export function computeAxisValue({
98
98
  return;
99
99
  }
100
100
  const scaleType = axis.scaleType ?? 'linear';
101
+ const domainLimit = axis.domainLimit ?? 'nice';
101
102
  const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
103
+ if (typeof domainLimit === 'function') {
104
+ const {
105
+ min,
106
+ max
107
+ } = domainLimit(minData, maxData);
108
+ axisExtremums[0] = min;
109
+ axisExtremums[1] = max;
110
+ }
102
111
  const rawTickNumber = getTickNumber(_extends({}, axis, {
103
112
  range,
104
113
  domain: axisExtremums
105
114
  }));
106
115
  const tickNumber = rawTickNumber / ((zoomRange[1] - zoomRange[0]) / 100);
107
116
  const zoomedRange = zoomScaleRange(range, zoomRange);
108
-
109
- // TODO: move nice to prop? Disable when there is zoom?
110
- const scale = getScale(scaleType, axisExtremums, zoomedRange).nice(rawTickNumber);
111
- const [minDomain, maxDomain] = scale.domain();
117
+ const scale = getScale(scaleType, axisExtremums, zoomedRange);
118
+ const finalScale = domainLimit === 'nice' ? scale.nice(rawTickNumber) : scale;
119
+ const [minDomain, maxDomain] = finalScale.domain();
112
120
  const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];
113
121
  completeAxis[axis.id] = _extends({}, axis, {
114
122
  data,
115
123
  scaleType: scaleType,
116
- scale: scale.domain(domain),
124
+ scale: finalScale.domain(domain),
117
125
  tickNumber,
118
126
  colorScale: axis.colorMap && getColorScale(axis.colorMap)
119
127
  });
package/models/axis.d.ts CHANGED
@@ -280,6 +280,16 @@ export type AxisConfig<S extends ScaleName = ScaleName, V = any, AxisProps = Cha
280
280
  * If `true`, Reverse the axis scaleBand.
281
281
  */
282
282
  reverse?: boolean;
283
+ /**
284
+ * Defines the axis scale domain based on the min/max values of series linked to it.
285
+ * - 'nice': Rounds the domain at human friendly values.
286
+ * - 'strict': Set the domain to the min/max value provided. No extras space is added.
287
+ * - function: Receives the calculated extremums as parameters, and should return the axis domain.
288
+ */
289
+ domainLimit?: 'nice' | 'strict' | ((min: number, max: number) => {
290
+ min: number;
291
+ max: number;
292
+ });
283
293
  } & Omit<Partial<AxisProps>, 'axisId'> & Partial<Omit<AxisScaleConfig[S], 'scale'>> & TickParams & AxisConfigExtension;
284
294
  export interface AxisConfigExtension {
285
295
  }
@@ -7,7 +7,7 @@ export type SeriesValueFormatterContext = {
7
7
  */
8
8
  dataIndex: number;
9
9
  };
10
- export type SeriesValueFormatter<TValue> = (value: TValue, context: SeriesValueFormatterContext) => string;
10
+ export type SeriesValueFormatter<TValue> = (value: TValue, context: SeriesValueFormatterContext) => string | null;
11
11
  export type CommonSeriesType<TValue> = {
12
12
  id?: SeriesId;
13
13
  color?: string;
@@ -15,7 +15,7 @@ export type CommonSeriesType<TValue> = {
15
15
  * Formatter used to render values in tooltip or other data display.
16
16
  * @param {TValue} value The series' value to render.
17
17
  * @param {SeriesValueFormatterContext} context The rendering context of the value.
18
- * @returns {string} The string to display.
18
+ * @returns {string | null} The string to display or null if the value should not be shown.
19
19
  */
20
20
  valueFormatter?: SeriesValueFormatter<TValue>;
21
21
  /**
@@ -288,6 +288,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
288
288
  dataKey: PropTypes.string,
289
289
  disableLine: PropTypes.bool,
290
290
  disableTicks: PropTypes.bool,
291
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
291
292
  fill: PropTypes.string,
292
293
  hideTooltip: PropTypes.bool,
293
294
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -341,6 +342,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
341
342
  dataKey: PropTypes.string,
342
343
  disableLine: PropTypes.bool,
343
344
  disableTicks: PropTypes.bool,
345
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
344
346
  fill: PropTypes.string,
345
347
  hideTooltip: PropTypes.bool,
346
348
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -152,6 +152,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
152
152
  dataKey: PropTypes.string,
153
153
  disableLine: PropTypes.bool,
154
154
  disableTicks: PropTypes.bool,
155
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
155
156
  fill: PropTypes.string,
156
157
  hideTooltip: PropTypes.bool,
157
158
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -205,6 +206,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
205
206
  dataKey: PropTypes.string,
206
207
  disableLine: PropTypes.bool,
207
208
  disableTicks: PropTypes.bool,
209
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
208
210
  fill: PropTypes.string,
209
211
  hideTooltip: PropTypes.bool,
210
212
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -293,6 +293,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
293
293
  dataKey: PropTypes.string,
294
294
  disableLine: PropTypes.bool,
295
295
  disableTicks: PropTypes.bool,
296
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
296
297
  fill: PropTypes.string,
297
298
  hideTooltip: PropTypes.bool,
298
299
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -346,6 +347,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
346
347
  dataKey: PropTypes.string,
347
348
  disableLine: PropTypes.bool,
348
349
  disableTicks: PropTypes.bool,
350
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
349
351
  fill: PropTypes.string,
350
352
  hideTooltip: PropTypes.bool,
351
353
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -333,6 +333,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
333
333
  dataKey: PropTypes.string,
334
334
  disableLine: PropTypes.bool,
335
335
  disableTicks: PropTypes.bool,
336
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
336
337
  fill: PropTypes.string,
337
338
  hideTooltip: PropTypes.bool,
338
339
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -386,6 +387,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
386
387
  dataKey: PropTypes.string,
387
388
  disableLine: PropTypes.bool,
388
389
  disableTicks: PropTypes.bool,
390
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
389
391
  fill: PropTypes.string,
390
392
  hideTooltip: PropTypes.bool,
391
393
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -133,6 +133,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
133
133
  dataKey: PropTypes.string,
134
134
  disableLine: PropTypes.bool,
135
135
  disableTicks: PropTypes.bool,
136
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
136
137
  fill: PropTypes.string,
137
138
  hideTooltip: PropTypes.bool,
138
139
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -186,6 +187,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
186
187
  dataKey: PropTypes.string,
187
188
  disableLine: PropTypes.bool,
188
189
  disableTicks: PropTypes.bool,
190
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
189
191
  fill: PropTypes.string,
190
192
  hideTooltip: PropTypes.bool,
191
193
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -275,6 +275,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
275
275
  dataKey: PropTypes.string,
276
276
  disableLine: PropTypes.bool,
277
277
  disableTicks: PropTypes.bool,
278
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
278
279
  fill: PropTypes.string,
279
280
  hideTooltip: PropTypes.bool,
280
281
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -328,6 +329,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
328
329
  dataKey: PropTypes.string,
329
330
  disableLine: PropTypes.bool,
330
331
  disableTicks: PropTypes.bool,
332
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
331
333
  fill: PropTypes.string,
332
334
  hideTooltip: PropTypes.bool,
333
335
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -282,6 +282,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
282
282
  dataKey: PropTypes.string,
283
283
  disableLine: PropTypes.bool,
284
284
  disableTicks: PropTypes.bool,
285
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
285
286
  fill: PropTypes.string,
286
287
  hideTooltip: PropTypes.bool,
287
288
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -334,6 +335,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
334
335
  dataKey: PropTypes.string,
335
336
  disableLine: PropTypes.bool,
336
337
  disableTicks: PropTypes.bool,
338
+ domainLimit: PropTypes.oneOfType([PropTypes.oneOf(['nice', 'strict']), PropTypes.func]),
337
339
  fill: PropTypes.string,
338
340
  hideTooltip: PropTypes.bool,
339
341
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.22.1
2
+ * @mui/x-charts v7.22.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -98,22 +98,30 @@ export function computeAxisValue({
98
98
  return;
99
99
  }
100
100
  const scaleType = axis.scaleType ?? 'linear';
101
+ const domainLimit = axis.domainLimit ?? 'nice';
101
102
  const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
103
+ if (typeof domainLimit === 'function') {
104
+ const {
105
+ min,
106
+ max
107
+ } = domainLimit(minData, maxData);
108
+ axisExtremums[0] = min;
109
+ axisExtremums[1] = max;
110
+ }
102
111
  const rawTickNumber = getTickNumber(_extends({}, axis, {
103
112
  range,
104
113
  domain: axisExtremums
105
114
  }));
106
115
  const tickNumber = rawTickNumber / ((zoomRange[1] - zoomRange[0]) / 100);
107
116
  const zoomedRange = zoomScaleRange(range, zoomRange);
108
-
109
- // TODO: move nice to prop? Disable when there is zoom?
110
- const scale = getScale(scaleType, axisExtremums, zoomedRange).nice(rawTickNumber);
111
- const [minDomain, maxDomain] = scale.domain();
117
+ const scale = getScale(scaleType, axisExtremums, zoomedRange);
118
+ const finalScale = domainLimit === 'nice' ? scale.nice(rawTickNumber) : scale;
119
+ const [minDomain, maxDomain] = finalScale.domain();
112
120
  const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];
113
121
  completeAxis[axis.id] = _extends({}, axis, {
114
122
  data,
115
123
  scaleType: scaleType,
116
- scale: scale.domain(domain),
124
+ scale: finalScale.domain(domain),
117
125
  tickNumber,
118
126
  colorScale: axis.colorMap && getColorScale(axis.colorMap)
119
127
  });
@@ -295,6 +295,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
295
295
  dataKey: _propTypes.default.string,
296
296
  disableLine: _propTypes.default.bool,
297
297
  disableTicks: _propTypes.default.bool,
298
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
298
299
  fill: _propTypes.default.string,
299
300
  hideTooltip: _propTypes.default.bool,
300
301
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -348,6 +349,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
348
349
  dataKey: _propTypes.default.string,
349
350
  disableLine: _propTypes.default.bool,
350
351
  disableTicks: _propTypes.default.bool,
352
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
351
353
  fill: _propTypes.default.string,
352
354
  hideTooltip: _propTypes.default.bool,
353
355
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -159,6 +159,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
159
159
  dataKey: _propTypes.default.string,
160
160
  disableLine: _propTypes.default.bool,
161
161
  disableTicks: _propTypes.default.bool,
162
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
162
163
  fill: _propTypes.default.string,
163
164
  hideTooltip: _propTypes.default.bool,
164
165
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -212,6 +213,7 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
212
213
  dataKey: _propTypes.default.string,
213
214
  disableLine: _propTypes.default.bool,
214
215
  disableTicks: _propTypes.default.bool,
216
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
215
217
  fill: _propTypes.default.string,
216
218
  hideTooltip: _propTypes.default.bool,
217
219
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -300,6 +300,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
300
300
  dataKey: _propTypes.default.string,
301
301
  disableLine: _propTypes.default.bool,
302
302
  disableTicks: _propTypes.default.bool,
303
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
303
304
  fill: _propTypes.default.string,
304
305
  hideTooltip: _propTypes.default.bool,
305
306
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -353,6 +354,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
353
354
  dataKey: _propTypes.default.string,
354
355
  disableLine: _propTypes.default.bool,
355
356
  disableTicks: _propTypes.default.bool,
357
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
356
358
  fill: _propTypes.default.string,
357
359
  hideTooltip: _propTypes.default.bool,
358
360
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -340,6 +340,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
340
340
  dataKey: _propTypes.default.string,
341
341
  disableLine: _propTypes.default.bool,
342
342
  disableTicks: _propTypes.default.bool,
343
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
343
344
  fill: _propTypes.default.string,
344
345
  hideTooltip: _propTypes.default.bool,
345
346
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -393,6 +394,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
393
394
  dataKey: _propTypes.default.string,
394
395
  disableLine: _propTypes.default.bool,
395
396
  disableTicks: _propTypes.default.bool,
397
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
396
398
  fill: _propTypes.default.string,
397
399
  hideTooltip: _propTypes.default.bool,
398
400
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -140,6 +140,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
140
140
  dataKey: _propTypes.default.string,
141
141
  disableLine: _propTypes.default.bool,
142
142
  disableTicks: _propTypes.default.bool,
143
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
143
144
  fill: _propTypes.default.string,
144
145
  hideTooltip: _propTypes.default.bool,
145
146
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -193,6 +194,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
193
194
  dataKey: _propTypes.default.string,
194
195
  disableLine: _propTypes.default.bool,
195
196
  disableTicks: _propTypes.default.bool,
197
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
196
198
  fill: _propTypes.default.string,
197
199
  hideTooltip: _propTypes.default.bool,
198
200
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -282,6 +282,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
282
282
  dataKey: _propTypes.default.string,
283
283
  disableLine: _propTypes.default.bool,
284
284
  disableTicks: _propTypes.default.bool,
285
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
285
286
  fill: _propTypes.default.string,
286
287
  hideTooltip: _propTypes.default.bool,
287
288
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -335,6 +336,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
335
336
  dataKey: _propTypes.default.string,
336
337
  disableLine: _propTypes.default.bool,
337
338
  disableTicks: _propTypes.default.bool,
339
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
338
340
  fill: _propTypes.default.string,
339
341
  hideTooltip: _propTypes.default.bool,
340
342
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -289,6 +289,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
289
289
  dataKey: _propTypes.default.string,
290
290
  disableLine: _propTypes.default.bool,
291
291
  disableTicks: _propTypes.default.bool,
292
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
292
293
  fill: _propTypes.default.string,
293
294
  hideTooltip: _propTypes.default.bool,
294
295
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -341,6 +342,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
341
342
  dataKey: _propTypes.default.string,
342
343
  disableLine: _propTypes.default.bool,
343
344
  disableTicks: _propTypes.default.bool,
345
+ domainLimit: _propTypes.default.oneOfType([_propTypes.default.oneOf(['nice', 'strict']), _propTypes.default.func]),
344
346
  fill: _propTypes.default.string,
345
347
  hideTooltip: _propTypes.default.bool,
346
348
  id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.22.1
2
+ * @mui/x-charts v7.22.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -105,22 +105,30 @@ function computeAxisValue({
105
105
  return;
106
106
  }
107
107
  const scaleType = axis.scaleType ?? 'linear';
108
+ const domainLimit = axis.domainLimit ?? 'nice';
108
109
  const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];
110
+ if (typeof domainLimit === 'function') {
111
+ const {
112
+ min,
113
+ max
114
+ } = domainLimit(minData, maxData);
115
+ axisExtremums[0] = min;
116
+ axisExtremums[1] = max;
117
+ }
109
118
  const rawTickNumber = (0, _useTicks.getTickNumber)((0, _extends2.default)({}, axis, {
110
119
  range,
111
120
  domain: axisExtremums
112
121
  }));
113
122
  const tickNumber = rawTickNumber / ((zoomRange[1] - zoomRange[0]) / 100);
114
123
  const zoomedRange = (0, _zoom.zoomScaleRange)(range, zoomRange);
115
-
116
- // TODO: move nice to prop? Disable when there is zoom?
117
- const scale = (0, _getScale.getScale)(scaleType, axisExtremums, zoomedRange).nice(rawTickNumber);
118
- const [minDomain, maxDomain] = scale.domain();
124
+ const scale = (0, _getScale.getScale)(scaleType, axisExtremums, zoomedRange);
125
+ const finalScale = domainLimit === 'nice' ? scale.nice(rawTickNumber) : scale;
126
+ const [minDomain, maxDomain] = finalScale.domain();
119
127
  const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];
120
128
  completeAxis[axis.id] = (0, _extends2.default)({}, axis, {
121
129
  data,
122
130
  scaleType: scaleType,
123
- scale: scale.domain(domain),
131
+ scale: finalScale.domain(domain),
124
132
  tickNumber,
125
133
  colorScale: axis.colorMap && (0, _colorScale.getColorScale)(axis.colorMap)
126
134
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts",
3
- "version": "7.22.1",
3
+ "version": "7.22.2",
4
4
  "description": "The community edition of the Charts components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",