@mui/x-charts-pro 8.1.0 → 8.2.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 (94) hide show
  1. package/BarChartPro/BarChartPro.js +2 -1
  2. package/CHANGELOG.md +126 -7
  3. package/ChartContainerPro/useChartContainerProProps.d.ts +1 -1
  4. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  5. package/ChartDataProviderPro/useChartDataProviderProProps.d.ts +2 -2
  6. package/FunnelChart/FunnelChart.js +7 -1
  7. package/FunnelChart/FunnelPlot.d.ts +5 -0
  8. package/FunnelChart/FunnelPlot.js +13 -16
  9. package/FunnelChart/curves/bump.d.ts +24 -0
  10. package/FunnelChart/curves/bump.js +82 -0
  11. package/FunnelChart/curves/curve.types.d.ts +8 -0
  12. package/FunnelChart/curves/curve.types.js +5 -0
  13. package/FunnelChart/curves/funnelStep.d.ts +25 -0
  14. package/FunnelChart/{funnelStepCurve.js → curves/funnelStep.js} +32 -19
  15. package/FunnelChart/curves/getFunnelCurve.d.ts +3 -0
  16. package/FunnelChart/curves/getFunnelCurve.js +22 -0
  17. package/FunnelChart/curves/index.d.ts +2 -0
  18. package/FunnelChart/curves/index.js +27 -0
  19. package/FunnelChart/curves/linear.d.ts +24 -0
  20. package/FunnelChart/curves/linear.js +113 -0
  21. package/FunnelChart/funnel.types.d.ts +2 -2
  22. package/FunnelChart/funnelPlotSlots.types.d.ts +1 -1
  23. package/FunnelChart/funnelSectionClasses.d.ts +1 -1
  24. package/FunnelChart/index.d.ts +3 -2
  25. package/FunnelChart/useFunnelChartProps.d.ts +1 -1
  26. package/FunnelChart/useFunnelChartProps.js +7 -4
  27. package/Heatmap/Heatmap.js +1 -1
  28. package/LineChartPro/LineChartPro.js +2 -1
  29. package/ScatterChartPro/ScatterChartPro.js +2 -1
  30. package/esm/BarChartPro/BarChartPro.js +2 -1
  31. package/esm/ChartContainerPro/useChartContainerProProps.d.ts +1 -1
  32. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  33. package/esm/ChartDataProviderPro/useChartDataProviderProProps.d.ts +2 -2
  34. package/esm/FunnelChart/FunnelChart.js +7 -1
  35. package/esm/FunnelChart/FunnelPlot.d.ts +5 -0
  36. package/esm/FunnelChart/FunnelPlot.js +14 -17
  37. package/esm/FunnelChart/curves/bump.d.ts +24 -0
  38. package/esm/FunnelChart/curves/bump.js +75 -0
  39. package/esm/FunnelChart/curves/curve.types.d.ts +8 -0
  40. package/esm/FunnelChart/curves/curve.types.js +1 -0
  41. package/esm/FunnelChart/curves/funnelStep.d.ts +25 -0
  42. package/esm/FunnelChart/{funnelStepCurve.js → curves/funnelStep.js} +32 -19
  43. package/esm/FunnelChart/curves/getFunnelCurve.d.ts +3 -0
  44. package/esm/FunnelChart/curves/getFunnelCurve.js +15 -0
  45. package/esm/FunnelChart/curves/index.d.ts +2 -0
  46. package/esm/FunnelChart/curves/index.js +2 -0
  47. package/esm/FunnelChart/curves/linear.d.ts +24 -0
  48. package/esm/FunnelChart/curves/linear.js +106 -0
  49. package/esm/FunnelChart/funnel.types.d.ts +2 -2
  50. package/esm/FunnelChart/funnelPlotSlots.types.d.ts +1 -1
  51. package/esm/FunnelChart/funnelSectionClasses.d.ts +1 -1
  52. package/esm/FunnelChart/index.d.ts +3 -2
  53. package/esm/FunnelChart/useFunnelChartProps.d.ts +1 -1
  54. package/esm/FunnelChart/useFunnelChartProps.js +7 -4
  55. package/esm/Heatmap/Heatmap.js +1 -1
  56. package/esm/LineChartPro/LineChartPro.js +2 -1
  57. package/esm/ScatterChartPro/ScatterChartPro.js +2 -1
  58. package/esm/index.js +1 -1
  59. package/esm/internals/plugins/useChartProExport/common.d.ts +1 -0
  60. package/esm/internals/plugins/useChartProExport/common.js +8 -0
  61. package/esm/internals/plugins/useChartProExport/exportImage.d.ts +3 -0
  62. package/esm/internals/plugins/useChartProExport/exportImage.js +85 -0
  63. package/esm/internals/plugins/useChartProExport/print.js +6 -50
  64. package/esm/internals/plugins/useChartProExport/useChartProExport.js +22 -2
  65. package/esm/internals/plugins/useChartProExport/useChartProExport.types.d.ts +32 -0
  66. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +1 -1
  67. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +25 -25
  68. package/esm/themeAugmentation/components.d.ts +0 -4
  69. package/esm/themeAugmentation/components.js +1 -0
  70. package/esm/themeAugmentation/index.d.ts +3 -3
  71. package/esm/themeAugmentation/overrides.d.ts +0 -3
  72. package/esm/themeAugmentation/overrides.js +2 -0
  73. package/esm/themeAugmentation/props.d.ts +0 -6
  74. package/esm/themeAugmentation/props.js +2 -0
  75. package/index.js +1 -1
  76. package/internals/plugins/useChartProExport/common.d.ts +1 -0
  77. package/internals/plugins/useChartProExport/common.js +14 -0
  78. package/internals/plugins/useChartProExport/exportImage.d.ts +3 -0
  79. package/internals/plugins/useChartProExport/exportImage.js +95 -0
  80. package/internals/plugins/useChartProExport/print.js +6 -50
  81. package/internals/plugins/useChartProExport/useChartProExport.js +22 -2
  82. package/internals/plugins/useChartProExport/useChartProExport.types.d.ts +32 -0
  83. package/internals/plugins/useChartProZoom/useChartProZoom.js +1 -1
  84. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +25 -25
  85. package/package.json +7 -4
  86. package/themeAugmentation/components.d.ts +0 -4
  87. package/themeAugmentation/components.js +5 -0
  88. package/themeAugmentation/index.d.ts +3 -3
  89. package/themeAugmentation/overrides.d.ts +0 -3
  90. package/themeAugmentation/overrides.js +5 -0
  91. package/themeAugmentation/props.d.ts +0 -6
  92. package/themeAugmentation/props.js +5 -0
  93. package/FunnelChart/funnelStepCurve.d.ts +0 -4
  94. package/esm/FunnelChart/funnelStepCurve.d.ts +0 -4
@@ -54,7 +54,7 @@ export const useChartProZoom = ({
54
54
  }
55
55
  store.update(prevState => {
56
56
  if (process.env.NODE_ENV !== 'production' && !prevState.zoom.isControlled) {
57
- console.error([`MUI X: A chart component is changing the \`zoomData\` from uncontrolled to controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
57
+ console.error([`MUI X Charts: A chart component is changing the \`zoomData\` from uncontrolled to controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
58
58
  }
59
59
  return _extends({}, prevState, {
60
60
  zoom: _extends({}, prevState.zoom, {
@@ -1,7 +1,7 @@
1
1
  import { ChartRootSelector } from '@mui/x-charts/internals';
2
2
  import { UseChartProZoomSignature } from "./useChartProZoom.types.js";
3
3
  export declare const selectorChartZoomState: ChartRootSelector<UseChartProZoomSignature>;
4
- export declare const selectorChartZoomIsInteracting: ((state: import("@mui/x-charts/internals/plugins/corePlugins/useChartId/useChartId.types").UseChartIdState & import("@mui/x-charts/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.types").UseChartDimensionsState & import("@mui/x-charts/internals/plugins/corePlugins/useChartSeries/useChartSeries.types").UseChartSeriesState<keyof import("@mui/x-charts/internals").ChartsSeriesConfig> & import("@mui/x-charts/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.types").UseChartAnimationState & import("./useChartProZoom.types").UseChartProZoomState & Partial<{}> & {
4
+ export declare const selectorChartZoomIsInteracting: ((state: import("@mui/x-charts/internals/plugins/corePlugins/useChartId/useChartId.types").UseChartIdState & import("@mui/x-charts/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.types").UseChartDimensionsState & import("@mui/x-charts/internals/plugins/corePlugins/useChartSeries/useChartSeries.types").UseChartSeriesState<keyof import("@mui/x-charts/internals").ChartsSeriesConfig> & import("@mui/x-charts/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.types").UseChartAnimationState & import("./useChartProZoom.types.js").UseChartProZoomState & Partial<{}> & {
5
5
  cacheKey: import("@mui/x-charts/internals").ChartStateCacheKey;
6
6
  }) => boolean) & {
7
7
  clearCache: () => void;
@@ -85,8 +85,8 @@ export declare const selectorChartZoomIsEnabled: ((state: import("@mui/x-charts/
85
85
  resultsCount: () => number;
86
86
  resetResultsCount: () => void;
87
87
  } & {
88
- resultFunc: (resultFuncArgs_0: import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
89
- memoizedResultFunc: ((resultFuncArgs_0: import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>) & {
88
+ resultFunc: (resultFuncArgs_0: import("@mui/x-charts/internals").DefaultedXAxis[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
89
+ memoizedResultFunc: ((resultFuncArgs_0: import("@mui/x-charts/internals").DefaultedXAxis[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>) & {
90
90
  clearCache: () => void;
91
91
  resultsCount: () => number;
92
92
  resetResultsCount: () => void;
@@ -94,27 +94,27 @@ export declare const selectorChartZoomIsEnabled: ((state: import("@mui/x-charts/
94
94
  lastResult: () => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
95
95
  dependencies: [((state: import("@mui/x-charts/internals/plugins/corePlugins/useChartId/useChartId.types").UseChartIdState & import("@mui/x-charts/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.types").UseChartDimensionsState & import("@mui/x-charts/internals/plugins/corePlugins/useChartSeries/useChartSeries.types").UseChartSeriesState<keyof import("@mui/x-charts/internals").ChartsSeriesConfig> & import("@mui/x-charts/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.types").UseChartAnimationState & Partial<import("@mui/x-charts/internals").UseChartCartesianAxisState> & {
96
96
  cacheKey: import("@mui/x-charts/internals").ChartStateCacheKey;
97
- }) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined) & {
97
+ }) => import("@mui/x-charts/internals").DefaultedXAxis[] | undefined) & {
98
98
  clearCache: () => void;
99
99
  resultsCount: () => number;
100
100
  resetResultsCount: () => void;
101
101
  } & {
102
102
  resultFunc: (resultFuncArgs_0: {
103
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
104
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
105
- } | undefined) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined;
103
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
104
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
105
+ } | undefined) => import("@mui/x-charts/internals").DefaultedXAxis[] | undefined;
106
106
  memoizedResultFunc: ((resultFuncArgs_0: {
107
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
108
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
109
- } | undefined) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined) & {
107
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
108
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
109
+ } | undefined) => import("@mui/x-charts/internals").DefaultedXAxis[] | undefined) & {
110
110
  clearCache: () => void;
111
111
  resultsCount: () => number;
112
112
  resetResultsCount: () => void;
113
113
  };
114
- lastResult: () => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsXAxisProps>[] | undefined;
114
+ lastResult: () => import("@mui/x-charts/internals").DefaultedXAxis[] | undefined;
115
115
  dependencies: [(state: import("@mui/x-charts/internals").ChartState<[], [import("@mui/x-charts/internals").UseChartCartesianAxisSignature]>) => {
116
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
117
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
116
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
117
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
118
118
  } | undefined];
119
119
  recomputations: () => number;
120
120
  resetRecomputations: () => void;
@@ -138,8 +138,8 @@ export declare const selectorChartZoomIsEnabled: ((state: import("@mui/x-charts/
138
138
  resultsCount: () => number;
139
139
  resetResultsCount: () => void;
140
140
  } & {
141
- resultFunc: (resultFuncArgs_0: import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
142
- memoizedResultFunc: ((resultFuncArgs_0: import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>) & {
141
+ resultFunc: (resultFuncArgs_0: import("@mui/x-charts/internals").DefaultedYAxis[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
142
+ memoizedResultFunc: ((resultFuncArgs_0: import("@mui/x-charts/internals").DefaultedYAxis[] | undefined) => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>) & {
143
143
  clearCache: () => void;
144
144
  resultsCount: () => number;
145
145
  resetResultsCount: () => void;
@@ -147,27 +147,27 @@ export declare const selectorChartZoomIsEnabled: ((state: import("@mui/x-charts/
147
147
  lastResult: () => Record<import("@mui/x-charts/internals").AxisId, import("@mui/x-charts/internals").DefaultizedZoomOptions>;
148
148
  dependencies: [((state: import("@mui/x-charts/internals/plugins/corePlugins/useChartId/useChartId.types").UseChartIdState & import("@mui/x-charts/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.types").UseChartDimensionsState & import("@mui/x-charts/internals/plugins/corePlugins/useChartSeries/useChartSeries.types").UseChartSeriesState<keyof import("@mui/x-charts/internals").ChartsSeriesConfig> & import("@mui/x-charts/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.types").UseChartAnimationState & Partial<import("@mui/x-charts/internals").UseChartCartesianAxisState> & {
149
149
  cacheKey: import("@mui/x-charts/internals").ChartStateCacheKey;
150
- }) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined) & {
150
+ }) => import("@mui/x-charts/internals").DefaultedYAxis[] | undefined) & {
151
151
  clearCache: () => void;
152
152
  resultsCount: () => number;
153
153
  resetResultsCount: () => void;
154
154
  } & {
155
155
  resultFunc: (resultFuncArgs_0: {
156
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
157
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
158
- } | undefined) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined;
156
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
157
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
158
+ } | undefined) => import("@mui/x-charts/internals").DefaultedYAxis[] | undefined;
159
159
  memoizedResultFunc: ((resultFuncArgs_0: {
160
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
161
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
162
- } | undefined) => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined) & {
160
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
161
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
162
+ } | undefined) => import("@mui/x-charts/internals").DefaultedYAxis[] | undefined) & {
163
163
  clearCache: () => void;
164
164
  resultsCount: () => number;
165
165
  resetResultsCount: () => void;
166
166
  };
167
- lastResult: () => import("@mui/x-charts").AxisConfig<keyof import("@mui/x-charts/internals").AxisScaleConfig, any, import("@mui/x-charts").ChartsYAxisProps>[] | undefined;
167
+ lastResult: () => import("@mui/x-charts/internals").DefaultedYAxis[] | undefined;
168
168
  dependencies: [(state: import("@mui/x-charts/internals").ChartState<[], [import("@mui/x-charts/internals").UseChartCartesianAxisSignature]>) => {
169
- x: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsXAxisProps>[];
170
- y: import("@mui/x-charts").AxisConfig<import("@mui/x-charts").ScaleName, any, import("@mui/x-charts").ChartsYAxisProps>[];
169
+ x: import("@mui/x-charts/internals").DefaultedXAxis[];
170
+ y: import("@mui/x-charts/internals").DefaultedYAxis[];
171
171
  } | undefined];
172
172
  recomputations: () => number;
173
173
  resetRecomputations: () => void;
@@ -1,19 +1,15 @@
1
1
  import { ComponentsProps, ComponentsOverrides } from '@mui/material/styles';
2
2
  export interface ChartsProComponents<Theme = unknown> {
3
- // BarChartPro components
4
3
  MuiBarChartPro?: {
5
4
  defaultProps?: ComponentsProps['MuiBarChartPro'];
6
5
  };
7
- // LineChartPro components
8
6
  MuiLineChartPro?: {
9
7
  defaultProps?: ComponentsProps['MuiLineChartPro'];
10
8
  };
11
- // Heatmap components
12
9
  MuiHeatmap?: {
13
10
  defaultProps?: ComponentsProps['MuiHeatmap'];
14
11
  styleOverrides?: ComponentsOverrides<Theme>['MuiHeatmap'];
15
12
  };
16
- // ScatterChartPro components
17
13
  MuiScatterChartPro?: {
18
14
  defaultProps?: ComponentsProps['MuiScatterChartPro'];
19
15
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
1
  export type * from '@mui/x-charts/themeAugmentation';
2
- export type * from './overrides';
3
- export type * from './props';
4
- export type * from './components';
2
+ export type * from "./overrides.js";
3
+ export type * from "./props.js";
4
+ export type * from "./components.js";
@@ -1,11 +1,8 @@
1
1
  import { HeatmapClassKey } from "../Heatmap/index.js";
2
2
  export interface ChartsProComponentNameToClassKey {
3
- // Heatmap components
4
3
  MuiHeatmap: HeatmapClassKey;
5
4
  }
6
5
  declare module '@mui/material/styles' {
7
6
  interface ComponentNameToClassKey extends ChartsProComponentNameToClassKey {}
8
7
  }
9
-
10
- // disable automatic export
11
8
  export {};
@@ -0,0 +1,2 @@
1
+ // disable automatic export
2
+ export {};
@@ -3,18 +3,12 @@ import { BarChartProProps } from "../BarChartPro/index.js";
3
3
  import { HeatmapProps } from "../Heatmap/Heatmap.js";
4
4
  import { LineChartProProps } from "../LineChartPro/index.js";
5
5
  export interface ChartsProComponentsPropsList {
6
- // BarChartPro components
7
6
  MuiBarChartPro: BarChartProProps;
8
- // LineChartPro components
9
7
  MuiLineChartPro: LineChartProProps;
10
- // Heatmap components
11
8
  MuiHeatmap: HeatmapProps;
12
- // ScatterChartPro components
13
9
  MuiScatterChartPro: ScatterChartProProps;
14
10
  }
15
11
  declare module '@mui/material/styles' {
16
12
  interface ComponentsPropsList extends ChartsProComponentsPropsList {}
17
13
  }
18
-
19
- // disable automatic export
20
14
  export {};
@@ -0,0 +1,2 @@
1
+ // disable automatic export
2
+ export {};
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v8.1.0
2
+ * @mui/x-charts-pro v8.2.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -0,0 +1 @@
1
+ export declare function createExportIframe(title?: string): HTMLIFrameElement;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExportIframe = createExportIframe;
7
+ function createExportIframe(title) {
8
+ const iframeEl = document.createElement('iframe');
9
+ iframeEl.style.position = 'absolute';
10
+ iframeEl.style.width = '0px';
11
+ iframeEl.style.height = '0px';
12
+ iframeEl.title = title || document.title;
13
+ return iframeEl;
14
+ }
@@ -0,0 +1,3 @@
1
+ import { ChartImageExportOptions } from "./useChartProExport.types.js";
2
+ export declare const getDrawDocument: () => Promise<typeof import("rasterizehtml").drawDocument>;
3
+ export declare function exportImage(element: HTMLElement | SVGElement, params?: ChartImageExportOptions): Promise<void>;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.exportImage = exportImage;
8
+ exports.getDrawDocument = void 0;
9
+ var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard"));
10
+ var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
11
+ var _export = require("@mui/x-internals/export");
12
+ var _common = require("./common");
13
+ const getDrawDocument = async () => {
14
+ try {
15
+ const module = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require('rasterizehtml')));
16
+ return module.drawDocument;
17
+ } catch (error) {
18
+ throw new Error(`MUI X Charts: Failed to import 'rasterizehtml' module. This dependency is mandatory when exporting a chart as an image. Make sure you have it installed as a dependency.`, {
19
+ cause: error
20
+ });
21
+ }
22
+ };
23
+ exports.getDrawDocument = getDrawDocument;
24
+ async function exportImage(element, params) {
25
+ const {
26
+ fileName,
27
+ type = 'image/png',
28
+ quality = 0.9
29
+ } = params ?? {};
30
+ const drawDocumentPromise = getDrawDocument();
31
+ const {
32
+ width,
33
+ height
34
+ } = element.getBoundingClientRect();
35
+ const doc = (0, _ownerDocument.default)(element);
36
+ const canvas = document.createElement('canvas');
37
+ const ratio = window.devicePixelRatio || 1;
38
+ canvas.width = width * ratio;
39
+ canvas.height = height * ratio;
40
+ canvas.style.width = `${width}px`;
41
+ canvas.style.height = `${height}px`;
42
+ const iframe = (0, _common.createExportIframe)(fileName);
43
+ let resolve;
44
+ const iframeLoadPromise = new Promise(res => {
45
+ resolve = res;
46
+ });
47
+ iframe.onload = async () => {
48
+ const exportDoc = iframe.contentDocument;
49
+ const elementClone = element.cloneNode(true);
50
+ const container = document.createElement('div');
51
+ container.appendChild(elementClone);
52
+ exportDoc.body.innerHTML = container.innerHTML;
53
+ exportDoc.body.style.margin = '0px';
54
+ const rootCandidate = element.getRootNode();
55
+ const root = rootCandidate.constructor.name === 'ShadowRoot' ? rootCandidate : doc;
56
+ await Promise.all((0, _export.loadStyleSheets)(exportDoc, root));
57
+ resolve();
58
+ };
59
+ doc.body.appendChild(iframe);
60
+ const [drawDocument] = await Promise.all([drawDocumentPromise, iframeLoadPromise]);
61
+ try {
62
+ await drawDocument(iframe.contentDocument, canvas, {
63
+ // Handle retina displays: https://github.com/cburgmer/rasterizeHTML.js/blob/262b3404d1c469ce4a7750a2976dec09b8ae2d6c/examples/retina.html#L71
64
+ zoom: ratio
65
+ });
66
+ } finally {
67
+ doc.body.removeChild(iframe);
68
+ }
69
+ let resolveBlobPromise;
70
+ const blobPromise = new Promise(res => {
71
+ resolveBlobPromise = res;
72
+ });
73
+ canvas.toBlob(blob => resolveBlobPromise(blob), type, quality);
74
+ let blob;
75
+ try {
76
+ blob = await blobPromise;
77
+ } catch (error) {
78
+ throw new Error('MUI X Charts: Failed to create blob from canvas.', {
79
+ cause: error
80
+ });
81
+ }
82
+ if (!blob) {
83
+ throw new Error('MUI X Charts: Failed to create blob from canvas.');
84
+ return;
85
+ }
86
+ const url = URL.createObjectURL(blob);
87
+ triggerDownload(url, fileName || document.title);
88
+ URL.revokeObjectURL(url);
89
+ }
90
+ function triggerDownload(url, name) {
91
+ const a = document.createElement('a');
92
+ a.href = url;
93
+ a.download = name;
94
+ a.click();
95
+ }
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.printChart = printChart;
8
8
  var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
9
+ var _export = require("@mui/x-internals/export");
10
+ var _common = require("./common");
9
11
  function printChart(element, {
10
12
  fileName
11
13
  } = {}) {
12
- const printWindow = buildPrintWindow(fileName);
14
+ const printWindow = (0, _common.createExportIframe)(fileName);
13
15
  const doc = (0, _ownerDocument.default)(element);
14
16
  printWindow.onload = async () => {
15
17
  const printDoc = printWindow.contentDocument;
@@ -17,7 +19,9 @@ function printChart(element, {
17
19
  const container = document.createElement('div');
18
20
  container.appendChild(elementClone);
19
21
  printDoc.body.innerHTML = container.innerHTML;
20
- await loadStyleSheets(printDoc, element);
22
+ const rootCandidate = element.getRootNode();
23
+ const root = rootCandidate.constructor.name === 'ShadowRoot' ? rootCandidate : doc;
24
+ await Promise.all((0, _export.loadStyleSheets)(printDoc, root));
21
25
  printWindow.contentWindow.print();
22
26
  const mediaQueryList = printWindow.contentWindow.matchMedia('print');
23
27
  mediaQueryList.addEventListener('change', mql => {
@@ -28,52 +32,4 @@ function printChart(element, {
28
32
  });
29
33
  };
30
34
  doc.body.appendChild(printWindow);
31
- }
32
- function buildPrintWindow(title) {
33
- const iframeEl = document.createElement('iframe');
34
- iframeEl.style.position = 'absolute';
35
- iframeEl.style.width = '0px';
36
- iframeEl.style.height = '0px';
37
- iframeEl.title = title || document.title;
38
- return iframeEl;
39
- }
40
- function loadStyleSheets(printDoc, element) {
41
- const stylesheetLoadPromises = [];
42
- const doc = (0, _ownerDocument.default)(element);
43
- const rootCandidate = element.getRootNode();
44
- const root = rootCandidate.constructor.name === 'ShadowRoot' ? rootCandidate : doc;
45
- const headStyleElements = root.querySelectorAll("style, link[rel='stylesheet']");
46
- for (let i = 0; i < headStyleElements.length; i += 1) {
47
- const node = headStyleElements[i];
48
- if (node.tagName === 'STYLE') {
49
- const newHeadStyleElements = printDoc.createElement(node.tagName);
50
- const sheet = node.sheet;
51
- if (sheet) {
52
- let styleCSS = '';
53
- // NOTE: for-of is not supported by IE
54
- for (let j = 0; j < sheet.cssRules.length; j += 1) {
55
- if (typeof sheet.cssRules[j].cssText === 'string') {
56
- styleCSS += `${sheet.cssRules[j].cssText}\r\n`;
57
- }
58
- }
59
- newHeadStyleElements.appendChild(printDoc.createTextNode(styleCSS));
60
- printDoc.head.appendChild(newHeadStyleElements);
61
- }
62
- } else if (node.getAttribute('href')) {
63
- // If `href` tag is empty, avoid loading these links
64
-
65
- const newHeadStyleElements = printDoc.createElement(node.tagName);
66
- for (let j = 0; j < node.attributes.length; j += 1) {
67
- const attr = node.attributes[j];
68
- if (attr) {
69
- newHeadStyleElements.setAttribute(attr.nodeName, attr.nodeValue || '');
70
- }
71
- }
72
- stylesheetLoadPromises.push(new Promise(resolve => {
73
- newHeadStyleElements.addEventListener('load', () => resolve());
74
- }));
75
- printDoc.head.appendChild(newHeadStyleElements);
76
- }
77
- }
78
- return Promise.all(stylesheetLoadPromises);
79
35
  }
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useChartProExport = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _print = require("./print");
10
+ var _exportImage = require("./exportImage");
10
11
  function waitForAnimationFrame() {
11
12
  let resolve;
12
13
  const promise = new Promise(res => {
@@ -29,6 +30,23 @@ const useChartProExport = ({
29
30
  // Wait for animation frame to ensure the animation finished
30
31
  await waitForAnimationFrame();
31
32
  (0, _print.printChart)(chartRoot, options);
33
+ } catch (error) {
34
+ console.error('MUI X Charts: Error exporting chart as print:', error);
35
+ } finally {
36
+ enableAnimation();
37
+ }
38
+ }
39
+ };
40
+ const exportAsImage = async options => {
41
+ const chartRoot = chartRootRef.current;
42
+ if (chartRoot) {
43
+ const enableAnimation = instance.disableAnimation();
44
+ try {
45
+ // Wait for animation frame to ensure the animation finished
46
+ await waitForAnimationFrame();
47
+ await (0, _exportImage.exportImage)(chartRoot, options);
48
+ } catch (error) {
49
+ console.error('MUI X Charts: Error exporting chart as image:', error);
32
50
  } finally {
33
51
  enableAnimation();
34
52
  }
@@ -36,10 +54,12 @@ const useChartProExport = ({
36
54
  };
37
55
  return {
38
56
  publicAPI: {
39
- exportAsPrint
57
+ exportAsPrint,
58
+ exportAsImage
40
59
  },
41
60
  instance: {
42
- exportAsPrint
61
+ exportAsPrint,
62
+ exportAsImage
43
63
  }
44
64
  };
45
65
  };
@@ -16,6 +16,30 @@ export interface ChartPrintExportOptions {
16
16
  */
17
17
  fileName?: string;
18
18
  }
19
+ /**
20
+ * The options to apply on the image export.
21
+ * @demos
22
+ * - [Image export](/x/react-charts/export/#export-as-image)
23
+ */
24
+ export interface ChartImageExportOptions {
25
+ /**
26
+ * The value to be used as the print window title.
27
+ * @default The title of the page.
28
+ */
29
+ fileName?: string;
30
+ /**
31
+ * The format of the image to be exported.
32
+ * Browsers are required to support 'image/png'. Some browsers also support 'image/jpeg' and 'image/webp'.
33
+ * @default 'image/png'
34
+ */
35
+ type?: 'image/png' | string;
36
+ /**
37
+ * The quality of the image to be exported between 0 and 1. This is only applicable for lossy formats, such as
38
+ * 'image/jpeg' and 'image/webp'. 'image/png' does not support this option.
39
+ * @default 0.9
40
+ */
41
+ quality?: number;
42
+ }
19
43
  export interface UseChartProExportPublicApi {
20
44
  /**
21
45
  * Opens the browser's print dialog, which can be used to print the chart or export it as PDF.
@@ -23,6 +47,14 @@ export interface UseChartProExportPublicApi {
23
47
  * @returns {void}
24
48
  */
25
49
  exportAsPrint: (options?: ChartPrintExportOptions) => void;
50
+ /**
51
+ * Exports the chart as an image.
52
+ * If the provided `type` is not supported by the browser, it will default to `image/png`.
53
+ *
54
+ * @param {ChartPrintExportOptions} options Options to customize the print export.
55
+ * @returns {void}
56
+ */
57
+ exportAsImage: (options?: ChartImageExportOptions) => void;
26
58
  }
27
59
  export interface UseChartProExportInstance extends UseChartProExportPublicApi {}
28
60
  export type UseChartProExportSignature = ChartPluginSignature<{
@@ -61,7 +61,7 @@ const useChartProZoom = ({
61
61
  }
62
62
  store.update(prevState => {
63
63
  if (process.env.NODE_ENV !== 'production' && !prevState.zoom.isControlled) {
64
- console.error([`MUI X: A chart component is changing the \`zoomData\` from uncontrolled to controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
64
+ console.error([`MUI X Charts: A chart component is changing the \`zoomData\` from uncontrolled to controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled for the lifetime of the component.', "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", 'More info: https://fb.me/react-controlled-components'].join('\n'));
65
65
  }
66
66
  return (0, _extends2.default)({}, prevState, {
67
67
  zoom: (0, _extends2.default)({}, prevState.zoom, {