@mui/x-charts-pro 9.3.0 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/BarChartPro/BarChartPro.js +32 -2
  2. package/BarChartPro/BarChartPro.mjs +32 -2
  3. package/CHANGELOG.md +196 -0
  4. package/ChartsDataProviderPro/ChartsDataProviderPro.js +2 -2
  5. package/ChartsDataProviderPro/ChartsDataProviderPro.mjs +2 -2
  6. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.js +1 -0
  7. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.mjs +1 -0
  8. package/ChartsToolbarPro/ChartsToolbarPro.d.mts +1 -1
  9. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +1 -1
  10. package/ChartsToolbarPro/ChartsToolbarRangeButtonTrigger.d.mts +1 -1
  11. package/ChartsToolbarPro/ChartsToolbarRangeButtonTrigger.d.ts +1 -1
  12. package/ChartsToolbarPro/ChartsToolbarRangeButtonTrigger.js +35 -38
  13. package/ChartsToolbarPro/ChartsToolbarRangeButtonTrigger.mjs +37 -40
  14. package/ChartsToolbarPro/Toolbar.types.d.mts +3 -2
  15. package/ChartsToolbarPro/Toolbar.types.d.ts +3 -2
  16. package/ChartsToolbarPro/rangeButtonValueToZoom.d.mts +18 -2
  17. package/ChartsToolbarPro/rangeButtonValueToZoom.d.ts +18 -2
  18. package/ChartsToolbarPro/rangeButtonValueToZoom.js +73 -10
  19. package/ChartsToolbarPro/rangeButtonValueToZoom.mjs +72 -10
  20. package/ChartsZoomSlider/internals/chartsAxisZoomSliderThumbClasses.js +9 -2
  21. package/ChartsZoomSlider/internals/chartsAxisZoomSliderThumbClasses.mjs +9 -2
  22. package/ChartsZoomSlider/internals/previews/ScatterPreviewPlot.js +2 -1
  23. package/ChartsZoomSlider/internals/previews/ScatterPreviewPlot.mjs +2 -1
  24. package/FunnelChart/funnelPlotSlots.types.d.mts +5 -4
  25. package/FunnelChart/funnelPlotSlots.types.d.ts +5 -4
  26. package/Heatmap/Heatmap.d.mts +3 -2
  27. package/Heatmap/Heatmap.d.ts +3 -2
  28. package/Heatmap/Heatmap.js +32 -2
  29. package/Heatmap/Heatmap.mjs +32 -2
  30. package/Heatmap/HeatmapItem.d.mts +3 -2
  31. package/Heatmap/HeatmapItem.d.ts +3 -2
  32. package/Heatmap/HeatmapItem.js +2 -0
  33. package/Heatmap/HeatmapItem.mjs +2 -0
  34. package/Heatmap/HeatmapTooltip/HeatmapTooltip.types.d.mts +3 -2
  35. package/Heatmap/HeatmapTooltip/HeatmapTooltip.types.d.ts +3 -2
  36. package/LineChartPro/LineChartPro.js +32 -2
  37. package/LineChartPro/LineChartPro.mjs +32 -2
  38. package/ScatterChartPro/ScatterChartPro.d.mts +2 -1
  39. package/ScatterChartPro/ScatterChartPro.d.ts +2 -1
  40. package/ScatterChartPro/ScatterChartPro.js +32 -2
  41. package/ScatterChartPro/ScatterChartPro.mjs +32 -2
  42. package/index.js +1 -1
  43. package/index.mjs +1 -1
  44. package/internals/plugins/useChartProExport/exportImage.js +8 -2
  45. package/internals/plugins/useChartProExport/exportImage.mjs +8 -2
  46. package/internals/plugins/useChartProExport/print.js +1 -0
  47. package/internals/plugins/useChartProExport/print.mjs +1 -0
  48. package/internals/plugins/useChartProExport/useChartProExport.types.d.mts +6 -0
  49. package/internals/plugins/useChartProExport/useChartProExport.types.d.ts +6 -0
  50. package/internals/plugins/useChartProZoom/useChartProZoom.js +77 -14
  51. package/internals/plugins/useChartProZoom/useChartProZoom.mjs +79 -15
  52. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.mts +0 -3
  53. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +0 -3
  54. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +1 -2
  55. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.mjs +0 -1
  56. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.mts +28 -11
  57. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +28 -11
  58. package/internals/slots/chartsBaseSlots.d.mts +6 -5
  59. package/internals/slots/chartsBaseSlots.d.ts +6 -5
  60. package/internals/slots/chartsIconSlots.d.mts +4 -3
  61. package/internals/slots/chartsIconSlots.d.ts +4 -3
  62. package/models/chartsSlotsComponentsPropsPro.d.mts +11 -0
  63. package/models/chartsSlotsComponentsPropsPro.d.ts +11 -0
  64. package/models/chartsSlotsComponentsPropsPro.js +5 -0
  65. package/models/chartsSlotsComponentsPropsPro.mjs +1 -0
  66. package/models/index.d.mts +1 -0
  67. package/models/index.d.ts +1 -0
  68. package/models/index.js +12 -0
  69. package/models/index.mjs +1 -0
  70. package/package.json +6 -6
@@ -144,12 +144,21 @@ process.env.NODE_ENV !== "production" ? Heatmap.propTypes = {
144
144
  /**
145
145
  * The list of zoom data related to each axis.
146
146
  * Used to initialize the zoom in a specific configuration without controlling it.
147
+ *
148
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
149
+ * range value (`{ axisId, value }`) resolved against the axis domain.
147
150
  */
148
- initialZoom: PropTypes.arrayOf(PropTypes.shape({
151
+ initialZoom: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.shape({
149
152
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
150
153
  end: PropTypes.number.isRequired,
151
154
  start: PropTypes.number.isRequired
152
- })),
155
+ }), PropTypes.shape({
156
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
157
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.instanceOf(Date).isRequired), PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func, PropTypes.shape({
158
+ step: PropTypes.number,
159
+ unit: PropTypes.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
160
+ })])
161
+ })]).isRequired),
153
162
  /**
154
163
  * If `true`, a loading overlay is displayed.
155
164
  * @default false
@@ -298,6 +307,27 @@ process.env.NODE_ENV !== "production" ? Heatmap.propTypes = {
298
307
  id: PropTypes.string,
299
308
  max: PropTypes.number,
300
309
  min: PropTypes.number,
310
+ sizeMap: PropTypes.oneOfType([PropTypes.shape({
311
+ interpolator: PropTypes.oneOf(['linear', 'log', 'sqrt']),
312
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
313
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
314
+ size: PropTypes.arrayOf(PropTypes.number.isRequired).isRequired,
315
+ type: PropTypes.oneOf(['continuous']).isRequired
316
+ }), PropTypes.shape({
317
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
318
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
319
+ size: PropTypes.func.isRequired,
320
+ type: PropTypes.oneOf(['continuous']).isRequired
321
+ }), PropTypes.shape({
322
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
323
+ thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
324
+ type: PropTypes.oneOf(['piecewise']).isRequired
325
+ }), PropTypes.shape({
326
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
327
+ type: PropTypes.oneOf(['ordinal']).isRequired,
328
+ unknownSize: PropTypes.number,
329
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
330
+ })]),
301
331
  valueGetter: PropTypes.func
302
332
  })),
303
333
  /**
@@ -1,15 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { type SeriesId } from '@mui/x-charts/internals';
3
3
  import { type HeatmapCellProps } from "./HeatmapCell.mjs";
4
+ import type { CellPropsOverrides } from "../models/chartsSlotsComponentsPropsPro.mjs";
4
5
  export interface HeatmapItemSlots {
5
6
  /**
6
7
  * The component that renders the heatmap cell.
7
8
  * @default HeatmapCell
8
9
  */
9
- cell?: React.ElementType;
10
+ cell?: React.ElementType<HeatmapCellProps & CellPropsOverrides>;
10
11
  }
11
12
  export interface HeatmapItemSlotProps {
12
- cell?: Partial<HeatmapCellProps>;
13
+ cell?: Partial<HeatmapCellProps> & CellPropsOverrides;
13
14
  }
14
15
  export interface HeatmapItemProps {
15
16
  seriesId: SeriesId;
@@ -1,15 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { type SeriesId } from '@mui/x-charts/internals';
3
3
  import { type HeatmapCellProps } from "./HeatmapCell.js";
4
+ import type { CellPropsOverrides } from "../models/chartsSlotsComponentsPropsPro.js";
4
5
  export interface HeatmapItemSlots {
5
6
  /**
6
7
  * The component that renders the heatmap cell.
7
8
  * @default HeatmapCell
8
9
  */
9
- cell?: React.ElementType;
10
+ cell?: React.ElementType<HeatmapCellProps & CellPropsOverrides>;
10
11
  }
11
12
  export interface HeatmapItemSlotProps {
12
- cell?: Partial<HeatmapCellProps>;
13
+ cell?: Partial<HeatmapCellProps> & CellPropsOverrides;
13
14
  }
14
15
  export interface HeatmapItemProps {
15
16
  seriesId: SeriesId;
@@ -52,6 +52,8 @@ function HeatmapItem(props) {
52
52
  ownerState,
53
53
  className: classes.cell
54
54
  });
55
+
56
+ // `useSlotProps` returns a loosely-typed object; the required `x/y/width/height` flow in via `...other`.
55
57
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Cell, (0, _extends2.default)({}, cellProps));
56
58
  }
57
59
  process.env.NODE_ENV !== "production" ? HeatmapItem.propTypes = {
@@ -44,6 +44,8 @@ function HeatmapItem(props) {
44
44
  ownerState,
45
45
  className: classes.cell
46
46
  });
47
+
48
+ // `useSlotProps` returns a loosely-typed object; the required `x/y/width/height` flow in via `...other`.
47
49
  return /*#__PURE__*/_jsx(Cell, _extends({}, cellProps));
48
50
  }
49
51
  process.env.NODE_ENV !== "production" ? HeatmapItem.propTypes = {
@@ -1,17 +1,18 @@
1
1
  import { type ChartsTooltipContainerProps, type ChartsTooltipClasses } from '@mui/x-charts/ChartsTooltip';
2
+ import type { TooltipPropsOverrides } from '@mui/x-charts/models';
2
3
  export interface HeatmapTooltipSlots {
3
4
  /**
4
5
  * Custom component for the tooltip popper.
5
6
  * @default ChartsTooltipRoot
6
7
  */
7
- tooltip?: React.ElementType<HeatmapTooltipProps>;
8
+ tooltip?: React.ElementType<HeatmapTooltipProps & TooltipPropsOverrides>;
8
9
  }
9
10
  export interface HeatmapTooltipSlotProps {
10
11
  /**
11
12
  * Custom component for the tooltip popper.
12
13
  * @default ChartsTooltipRoot
13
14
  */
14
- tooltip?: Partial<HeatmapTooltipProps>;
15
+ tooltip?: Partial<HeatmapTooltipProps> & TooltipPropsOverrides;
15
16
  }
16
17
  export interface HeatmapTooltipClasses extends ChartsTooltipClasses {}
17
18
  export interface HeatmapTooltipContentClasses extends ChartsTooltipClasses {}
@@ -1,17 +1,18 @@
1
1
  import { type ChartsTooltipContainerProps, type ChartsTooltipClasses } from '@mui/x-charts/ChartsTooltip';
2
+ import type { TooltipPropsOverrides } from '@mui/x-charts/models';
2
3
  export interface HeatmapTooltipSlots {
3
4
  /**
4
5
  * Custom component for the tooltip popper.
5
6
  * @default ChartsTooltipRoot
6
7
  */
7
- tooltip?: React.ElementType<HeatmapTooltipProps>;
8
+ tooltip?: React.ElementType<HeatmapTooltipProps & TooltipPropsOverrides>;
8
9
  }
9
10
  export interface HeatmapTooltipSlotProps {
10
11
  /**
11
12
  * Custom component for the tooltip popper.
12
13
  * @default ChartsTooltipRoot
13
14
  */
14
- tooltip?: Partial<HeatmapTooltipProps>;
15
+ tooltip?: Partial<HeatmapTooltipProps> & TooltipPropsOverrides;
15
16
  }
16
17
  export interface HeatmapTooltipClasses extends ChartsTooltipClasses {}
17
18
  export interface HeatmapTooltipContentClasses extends ChartsTooltipClasses {}
@@ -270,12 +270,21 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
270
270
  /**
271
271
  * The list of zoom data related to each axis.
272
272
  * Used to initialize the zoom in a specific configuration without controlling it.
273
+ *
274
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
275
+ * range value (`{ axisId, value }`) resolved against the axis domain.
273
276
  */
274
- initialZoom: _propTypes.default.arrayOf(_propTypes.default.shape({
277
+ initialZoom: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({
275
278
  axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
276
279
  end: _propTypes.default.number.isRequired,
277
280
  start: _propTypes.default.number.isRequired
278
- })),
281
+ }), _propTypes.default.shape({
282
+ axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
283
+ value: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.instanceOf(Date).isRequired), _propTypes.default.arrayOf(_propTypes.default.string.isRequired), _propTypes.default.func, _propTypes.default.shape({
284
+ step: _propTypes.default.number,
285
+ unit: _propTypes.default.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
286
+ })])
287
+ })]).isRequired),
279
288
  /**
280
289
  * If `true`, a loading overlay is displayed.
281
290
  * @default false
@@ -447,6 +456,27 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
447
456
  id: _propTypes.default.string,
448
457
  max: _propTypes.default.number,
449
458
  min: _propTypes.default.number,
459
+ sizeMap: _propTypes.default.oneOfType([_propTypes.default.shape({
460
+ interpolator: _propTypes.default.oneOf(['linear', 'log', 'sqrt']),
461
+ max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
462
+ min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
463
+ size: _propTypes.default.arrayOf(_propTypes.default.number.isRequired).isRequired,
464
+ type: _propTypes.default.oneOf(['continuous']).isRequired
465
+ }), _propTypes.default.shape({
466
+ max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
467
+ min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
468
+ size: _propTypes.default.func.isRequired,
469
+ type: _propTypes.default.oneOf(['continuous']).isRequired
470
+ }), _propTypes.default.shape({
471
+ sizes: _propTypes.default.arrayOf(_propTypes.default.number).isRequired,
472
+ thresholds: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired).isRequired,
473
+ type: _propTypes.default.oneOf(['piecewise']).isRequired
474
+ }), _propTypes.default.shape({
475
+ sizes: _propTypes.default.arrayOf(_propTypes.default.number).isRequired,
476
+ type: _propTypes.default.oneOf(['ordinal']).isRequired,
477
+ unknownSize: _propTypes.default.number,
478
+ values: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired)
479
+ })]),
450
480
  valueGetter: _propTypes.default.func
451
481
  })),
452
482
  /**
@@ -263,12 +263,21 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
263
263
  /**
264
264
  * The list of zoom data related to each axis.
265
265
  * Used to initialize the zoom in a specific configuration without controlling it.
266
+ *
267
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
268
+ * range value (`{ axisId, value }`) resolved against the axis domain.
266
269
  */
267
- initialZoom: PropTypes.arrayOf(PropTypes.shape({
270
+ initialZoom: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.shape({
268
271
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
269
272
  end: PropTypes.number.isRequired,
270
273
  start: PropTypes.number.isRequired
271
- })),
274
+ }), PropTypes.shape({
275
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
276
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.instanceOf(Date).isRequired), PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func, PropTypes.shape({
277
+ step: PropTypes.number,
278
+ unit: PropTypes.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
279
+ })])
280
+ })]).isRequired),
272
281
  /**
273
282
  * If `true`, a loading overlay is displayed.
274
283
  * @default false
@@ -440,6 +449,27 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
440
449
  id: PropTypes.string,
441
450
  max: PropTypes.number,
442
451
  min: PropTypes.number,
452
+ sizeMap: PropTypes.oneOfType([PropTypes.shape({
453
+ interpolator: PropTypes.oneOf(['linear', 'log', 'sqrt']),
454
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
455
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
456
+ size: PropTypes.arrayOf(PropTypes.number.isRequired).isRequired,
457
+ type: PropTypes.oneOf(['continuous']).isRequired
458
+ }), PropTypes.shape({
459
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
460
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
461
+ size: PropTypes.func.isRequired,
462
+ type: PropTypes.oneOf(['continuous']).isRequired
463
+ }), PropTypes.shape({
464
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
465
+ thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
466
+ type: PropTypes.oneOf(['piecewise']).isRequired
467
+ }), PropTypes.shape({
468
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
469
+ type: PropTypes.oneOf(['ordinal']).isRequired,
470
+ unknownSize: PropTypes.number,
471
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
472
+ })]),
443
473
  valueGetter: PropTypes.func
444
474
  })),
445
475
  /**
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { type ScatterChartProps, type ScatterChartSlotProps, type ScatterChartSlots } from '@mui/x-charts/ScatterChart';
3
3
  import { type ChartsTooltipProps } from '@mui/x-charts/ChartsTooltip';
4
+ import type { TooltipPropsOverrides } from '@mui/x-charts/models';
4
5
  import { type ChartsSlotPropsPro, type ChartsSlotsPro } from "../internals/material/index.mjs";
5
6
  import { type ChartsContainerProProps } from "../ChartsContainerPro/ChartsContainerPro.mjs";
6
7
  import { type ScatterChartProPluginSignatures } from "./ScatterChartPro.plugins.mjs";
@@ -11,7 +12,7 @@ export interface ScatterChartProSlotProps extends Omit<ScatterChartSlotProps, 't
11
12
  * Slot props for the tooltip component.
12
13
  * @default {}
13
14
  */
14
- tooltip?: Partial<ChartsTooltipProps<'item' | 'none'>>;
15
+ tooltip?: Partial<ChartsTooltipProps<'item' | 'none'>> & TooltipPropsOverrides;
15
16
  }
16
17
  export interface ScatterChartProProps extends Omit<ScatterChartProps, 'apiRef' | 'slots' | 'slotProps' | 'plugins' | 'seriesConfig'>, Omit<ChartsContainerProProps<'scatter', ScatterChartProPluginSignatures>, 'series' | 'onItemClick' | 'slots' | 'slotProps' | 'highlightedAxis' | 'onHighlightedAxisChange'> {
17
18
  /**
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { type ScatterChartProps, type ScatterChartSlotProps, type ScatterChartSlots } from '@mui/x-charts/ScatterChart';
3
3
  import { type ChartsTooltipProps } from '@mui/x-charts/ChartsTooltip';
4
+ import type { TooltipPropsOverrides } from '@mui/x-charts/models';
4
5
  import { type ChartsSlotPropsPro, type ChartsSlotsPro } from "../internals/material/index.js";
5
6
  import { type ChartsContainerProProps } from "../ChartsContainerPro/ChartsContainerPro.js";
6
7
  import { type ScatterChartProPluginSignatures } from "./ScatterChartPro.plugins.js";
@@ -11,7 +12,7 @@ export interface ScatterChartProSlotProps extends Omit<ScatterChartSlotProps, 't
11
12
  * Slot props for the tooltip component.
12
13
  * @default {}
13
14
  */
14
- tooltip?: Partial<ChartsTooltipProps<'item' | 'none'>>;
15
+ tooltip?: Partial<ChartsTooltipProps<'item' | 'none'>> & TooltipPropsOverrides;
15
16
  }
16
17
  export interface ScatterChartProProps extends Omit<ScatterChartProps, 'apiRef' | 'slots' | 'slotProps' | 'plugins' | 'seriesConfig'>, Omit<ChartsContainerProProps<'scatter', ScatterChartProPluginSignatures>, 'series' | 'onItemClick' | 'slots' | 'slotProps' | 'highlightedAxis' | 'onHighlightedAxisChange'> {
17
18
  /**
@@ -273,12 +273,21 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
273
273
  /**
274
274
  * The list of zoom data related to each axis.
275
275
  * Used to initialize the zoom in a specific configuration without controlling it.
276
+ *
277
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
278
+ * range value (`{ axisId, value }`) resolved against the axis domain.
276
279
  */
277
- initialZoom: _propTypes.default.arrayOf(_propTypes.default.shape({
280
+ initialZoom: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({
278
281
  axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
279
282
  end: _propTypes.default.number.isRequired,
280
283
  start: _propTypes.default.number.isRequired
281
- })),
284
+ }), _propTypes.default.shape({
285
+ axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
286
+ value: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.instanceOf(Date).isRequired), _propTypes.default.arrayOf(_propTypes.default.string.isRequired), _propTypes.default.func, _propTypes.default.shape({
287
+ step: _propTypes.default.number,
288
+ unit: _propTypes.default.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
289
+ })])
290
+ })]).isRequired),
282
291
  /**
283
292
  * If `true`, a loading overlay is displayed.
284
293
  * @default false
@@ -445,6 +454,27 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
445
454
  id: _propTypes.default.string,
446
455
  max: _propTypes.default.number,
447
456
  min: _propTypes.default.number,
457
+ sizeMap: _propTypes.default.oneOfType([_propTypes.default.shape({
458
+ interpolator: _propTypes.default.oneOf(['linear', 'log', 'sqrt']),
459
+ max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
460
+ min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
461
+ size: _propTypes.default.arrayOf(_propTypes.default.number.isRequired).isRequired,
462
+ type: _propTypes.default.oneOf(['continuous']).isRequired
463
+ }), _propTypes.default.shape({
464
+ max: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
465
+ min: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]),
466
+ size: _propTypes.default.func.isRequired,
467
+ type: _propTypes.default.oneOf(['continuous']).isRequired
468
+ }), _propTypes.default.shape({
469
+ sizes: _propTypes.default.arrayOf(_propTypes.default.number).isRequired,
470
+ thresholds: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired).isRequired,
471
+ type: _propTypes.default.oneOf(['piecewise']).isRequired
472
+ }), _propTypes.default.shape({
473
+ sizes: _propTypes.default.arrayOf(_propTypes.default.number).isRequired,
474
+ type: _propTypes.default.oneOf(['ordinal']).isRequired,
475
+ unknownSize: _propTypes.default.number,
476
+ values: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired)
477
+ })]),
448
478
  valueGetter: _propTypes.default.func
449
479
  })),
450
480
  /**
@@ -266,12 +266,21 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
266
266
  /**
267
267
  * The list of zoom data related to each axis.
268
268
  * Used to initialize the zoom in a specific configuration without controlling it.
269
+ *
270
+ * Each entry is either explicit zoom percentages (`{ axisId, start, end }`) or a
271
+ * range value (`{ axisId, value }`) resolved against the axis domain.
269
272
  */
270
- initialZoom: PropTypes.arrayOf(PropTypes.shape({
273
+ initialZoom: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.shape({
271
274
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
272
275
  end: PropTypes.number.isRequired,
273
276
  start: PropTypes.number.isRequired
274
- })),
277
+ }), PropTypes.shape({
278
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
279
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.instanceOf(Date).isRequired), PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func, PropTypes.shape({
280
+ step: PropTypes.number,
281
+ unit: PropTypes.oneOf(['day', 'hour', 'microsecond', 'millisecond', 'minute', 'month', 'second', 'week', 'year']).isRequired
282
+ })])
283
+ })]).isRequired),
275
284
  /**
276
285
  * If `true`, a loading overlay is displayed.
277
286
  * @default false
@@ -438,6 +447,27 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
438
447
  id: PropTypes.string,
439
448
  max: PropTypes.number,
440
449
  min: PropTypes.number,
450
+ sizeMap: PropTypes.oneOfType([PropTypes.shape({
451
+ interpolator: PropTypes.oneOf(['linear', 'log', 'sqrt']),
452
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
453
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
454
+ size: PropTypes.arrayOf(PropTypes.number.isRequired).isRequired,
455
+ type: PropTypes.oneOf(['continuous']).isRequired
456
+ }), PropTypes.shape({
457
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
458
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
459
+ size: PropTypes.func.isRequired,
460
+ type: PropTypes.oneOf(['continuous']).isRequired
461
+ }), PropTypes.shape({
462
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
463
+ thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
464
+ type: PropTypes.oneOf(['piecewise']).isRequired
465
+ }), PropTypes.shape({
466
+ sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
467
+ type: PropTypes.oneOf(['ordinal']).isRequired,
468
+ unknownSize: PropTypes.number,
469
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
470
+ })]),
441
471
  valueGetter: PropTypes.func
442
472
  })),
443
473
  /**
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v9.3.0
2
+ * @mui/x-charts-pro v9.4.0
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v9.3.0
2
+ * @mui/x-charts-pro v9.4.0
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
@@ -10,6 +10,7 @@ var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/form
10
10
  var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
11
11
  var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
12
12
  var _export = require("@mui/x-internals/export");
13
+ var _warning = require("@mui/x-internals/warning");
13
14
  var _common = require("./common");
14
15
  var _defaults = require("./defaults");
15
16
  const getDrawDocument = async () => {
@@ -30,11 +31,15 @@ async function exportImage(element, svg, params) {
30
31
  quality = 0.9,
31
32
  onBeforeExport = _defaults.defaultOnBeforeExport,
32
33
  copyStyles = true,
33
- nonce
34
+ nonce,
35
+ pixelRatio
34
36
  } = params ?? {};
37
+ if (process.env.NODE_ENV !== 'production' && pixelRatio !== undefined && (!Number.isFinite(pixelRatio) || pixelRatio <= 0)) {
38
+ (0, _warning.warnOnce)('MUI X Charts: `pixelRatio` must be a finite number greater than 0 when exporting a chart as an image.', 'error');
39
+ }
35
40
  const drawDocumentPromise = getDrawDocument();
36
41
  const doc = (0, _ownerDocument.default)(element);
37
- const ratio = Math.max(window.devicePixelRatio || 1, 1);
42
+ const ratio = pixelRatio ?? Math.max(window.devicePixelRatio || 1, 1);
38
43
  const iframe = (0, _common.createExportIframe)(fileName);
39
44
  /* We apply the min/max width and height to ensure the SVG doesn't resize in the export.
40
45
  * We apply to the original SVG so that the cloned tree will contain the styles and revert these
@@ -49,6 +54,7 @@ async function exportImage(element, svg, params) {
49
54
  iframe.onload = async () => {
50
55
  const exportDoc = iframe.contentDocument;
51
56
  const elementClone = element.cloneNode(true);
57
+ elementClone.querySelectorAll('[data-hide-on-export]').forEach(el => el.remove());
52
58
  (0, _common.applyStyles)(svg, previousStyles);
53
59
  exportDoc.body.replaceChildren(elementClone);
54
60
  exportDoc.body.style.margin = '0px';
@@ -1,6 +1,7 @@
1
1
  import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
2
2
  import ownerDocument from '@mui/utils/ownerDocument';
3
3
  import { loadStyleSheets } from '@mui/x-internals/export';
4
+ import { warnOnce } from '@mui/x-internals/warning';
4
5
  import { applyStyles, copyCanvasesContent, createExportIframe } from "./common.mjs";
5
6
  import { defaultOnBeforeExport } from "./defaults.mjs";
6
7
  export const getDrawDocument = async () => {
@@ -20,11 +21,15 @@ export async function exportImage(element, svg, params) {
20
21
  quality = 0.9,
21
22
  onBeforeExport = defaultOnBeforeExport,
22
23
  copyStyles = true,
23
- nonce
24
+ nonce,
25
+ pixelRatio
24
26
  } = params ?? {};
27
+ if (process.env.NODE_ENV !== 'production' && pixelRatio !== undefined && (!Number.isFinite(pixelRatio) || pixelRatio <= 0)) {
28
+ warnOnce('MUI X Charts: `pixelRatio` must be a finite number greater than 0 when exporting a chart as an image.', 'error');
29
+ }
25
30
  const drawDocumentPromise = getDrawDocument();
26
31
  const doc = ownerDocument(element);
27
- const ratio = Math.max(window.devicePixelRatio || 1, 1);
32
+ const ratio = pixelRatio ?? Math.max(window.devicePixelRatio || 1, 1);
28
33
  const iframe = createExportIframe(fileName);
29
34
  /* We apply the min/max width and height to ensure the SVG doesn't resize in the export.
30
35
  * We apply to the original SVG so that the cloned tree will contain the styles and revert these
@@ -39,6 +44,7 @@ export async function exportImage(element, svg, params) {
39
44
  iframe.onload = async () => {
40
45
  const exportDoc = iframe.contentDocument;
41
46
  const elementClone = element.cloneNode(true);
47
+ elementClone.querySelectorAll('[data-hide-on-export]').forEach(el => el.remove());
42
48
  applyStyles(svg, previousStyles);
43
49
  exportDoc.body.replaceChildren(elementClone);
44
50
  exportDoc.body.style.margin = '0px';
@@ -20,6 +20,7 @@ function printChart(element, {
20
20
  printWindow.onload = async () => {
21
21
  const printDoc = printWindow.contentDocument;
22
22
  const elementClone = element.cloneNode(true);
23
+ elementClone.querySelectorAll('[data-hide-on-export]').forEach(el => el.remove());
23
24
  printDoc.body.replaceChildren(elementClone);
24
25
  printDoc.body.style.margin = '0px';
25
26
  const rootCandidate = element.getRootNode();
@@ -13,6 +13,7 @@ export function printChart(element, {
13
13
  printWindow.onload = async () => {
14
14
  const printDoc = printWindow.contentDocument;
15
15
  const elementClone = element.cloneNode(true);
16
+ elementClone.querySelectorAll('[data-hide-on-export]').forEach(el => el.remove());
16
17
  printDoc.body.replaceChildren(elementClone);
17
18
  printDoc.body.style.margin = '0px';
18
19
  const rootCandidate = element.getRootNode();
@@ -55,6 +55,12 @@ export interface ChartImageExportOptions extends ChartExportOptions {
55
55
  * @default 0.9
56
56
  */
57
57
  quality?: number;
58
+ /**
59
+ * The pixel ratio used when rasterizing the chart to a canvas. Higher values produce
60
+ * sharper images at the cost of a larger file size.
61
+ * @default The larger of `window.devicePixelRatio` and `1`
62
+ */
63
+ pixelRatio?: number;
58
64
  }
59
65
  export interface UseChartProExportPublicApi {
60
66
  /**
@@ -55,6 +55,12 @@ export interface ChartImageExportOptions extends ChartExportOptions {
55
55
  * @default 0.9
56
56
  */
57
57
  quality?: number;
58
+ /**
59
+ * The pixel ratio used when rasterizing the chart to a canvas. Higher values produce
60
+ * sharper images at the cost of a larger file size.
61
+ * @default The larger of `window.devicePixelRatio` and `1`
62
+ */
63
+ pixelRatio?: number;
58
64
  }
59
65
  export interface UseChartProExportPublicApi {
60
66
  /**