@mui/x-charts-pro 8.11.3 → 8.13.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 (144) hide show
  1. package/BarChartPro/BarChartPro.d.ts +2 -2
  2. package/BarChartPro/BarChartPro.js +25 -1
  3. package/BarChartPro/BarChartPro.plugins.d.ts +3 -3
  4. package/BarChartPro/BarChartPro.plugins.js +1 -1
  5. package/BarChartPro/index.d.ts +2 -1
  6. package/BarChartPro/index.js +11 -0
  7. package/CHANGELOG.md +296 -6
  8. package/ChartContainerPro/useChartContainerProProps.js +3 -1
  9. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  10. package/FunnelChart/FunnelChart.d.ts +2 -2
  11. package/FunnelChart/FunnelChart.plugins.d.ts +2 -2
  12. package/FunnelChart/funnelAxisPlugin/computeAxisValue.js +2 -5
  13. package/FunnelChart/index.d.ts +1 -0
  14. package/FunnelChart/index.js +12 -0
  15. package/FunnelChart/useFunnelChartProps.d.ts +2 -2
  16. package/Heatmap/Heatmap.d.ts +2 -2
  17. package/Heatmap/Heatmap.plugins.d.ts +2 -2
  18. package/Heatmap/index.d.ts +1 -0
  19. package/Heatmap/index.js +12 -0
  20. package/LineChartPro/LineChartPro.d.ts +2 -2
  21. package/LineChartPro/LineChartPro.js +25 -1
  22. package/LineChartPro/LineChartPro.plugins.d.ts +3 -3
  23. package/LineChartPro/LineChartPro.plugins.js +1 -1
  24. package/LineChartPro/index.d.ts +2 -1
  25. package/LineChartPro/index.js +11 -0
  26. package/PieChartPro/PieChartPro.js +1 -0
  27. package/PieChartPro/PieChartPro.plugins.d.ts +2 -2
  28. package/PieChartPro/index.d.ts +2 -1
  29. package/PieChartPro/index.js +11 -0
  30. package/RadarChartPro/RadarChartPro.d.ts +2 -2
  31. package/RadarChartPro/RadarChartPro.plugins.d.ts +2 -2
  32. package/RadarChartPro/index.d.ts +2 -1
  33. package/RadarChartPro/index.js +11 -0
  34. package/SankeyChart/SankeyChart.d.ts +2 -2
  35. package/SankeyChart/SankeyChart.js +4 -1
  36. package/SankeyChart/SankeyChart.plugins.d.ts +3 -2
  37. package/SankeyChart/SankeyChart.plugins.js +2 -4
  38. package/SankeyChart/SankeyLinkLabel.js +12 -1
  39. package/SankeyChart/calculateSankeyLayout.js +8 -2
  40. package/SankeyChart/sankey.types.d.ts +55 -5
  41. package/SankeyChart/seriesConfig/getSeriesWithDefaultValues.js +2 -0
  42. package/SankeyChart/seriesConfig/tooltipGetter.js +13 -3
  43. package/SankeyChart/useSankeyChartProps.d.ts +2 -2
  44. package/ScatterChartPro/ScatterChartPro.d.ts +2 -2
  45. package/ScatterChartPro/ScatterChartPro.js +37 -3
  46. package/ScatterChartPro/ScatterChartPro.plugins.d.ts +3 -3
  47. package/ScatterChartPro/ScatterChartPro.plugins.js +1 -1
  48. package/ScatterChartPro/index.d.ts +2 -1
  49. package/ScatterChartPro/index.js +11 -0
  50. package/context/ChartProApi.d.ts +14 -12
  51. package/esm/BarChartPro/BarChartPro.d.ts +2 -2
  52. package/esm/BarChartPro/BarChartPro.js +25 -1
  53. package/esm/BarChartPro/BarChartPro.plugins.d.ts +3 -3
  54. package/esm/BarChartPro/BarChartPro.plugins.js +2 -2
  55. package/esm/BarChartPro/index.d.ts +2 -1
  56. package/esm/BarChartPro/index.js +2 -1
  57. package/esm/ChartContainerPro/useChartContainerProProps.js +3 -1
  58. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  59. package/esm/FunnelChart/FunnelChart.d.ts +2 -2
  60. package/esm/FunnelChart/FunnelChart.plugins.d.ts +2 -2
  61. package/esm/FunnelChart/funnelAxisPlugin/computeAxisValue.js +3 -6
  62. package/esm/FunnelChart/index.d.ts +1 -0
  63. package/esm/FunnelChart/index.js +1 -0
  64. package/esm/FunnelChart/useFunnelChartProps.d.ts +2 -2
  65. package/esm/Heatmap/Heatmap.d.ts +2 -2
  66. package/esm/Heatmap/Heatmap.plugins.d.ts +2 -2
  67. package/esm/Heatmap/index.d.ts +1 -0
  68. package/esm/Heatmap/index.js +1 -0
  69. package/esm/LineChartPro/LineChartPro.d.ts +2 -2
  70. package/esm/LineChartPro/LineChartPro.js +25 -1
  71. package/esm/LineChartPro/LineChartPro.plugins.d.ts +3 -3
  72. package/esm/LineChartPro/LineChartPro.plugins.js +2 -2
  73. package/esm/LineChartPro/index.d.ts +2 -1
  74. package/esm/LineChartPro/index.js +2 -1
  75. package/esm/PieChartPro/PieChartPro.js +1 -0
  76. package/esm/PieChartPro/PieChartPro.plugins.d.ts +2 -2
  77. package/esm/PieChartPro/index.d.ts +2 -1
  78. package/esm/PieChartPro/index.js +2 -1
  79. package/esm/RadarChartPro/RadarChartPro.d.ts +2 -2
  80. package/esm/RadarChartPro/RadarChartPro.plugins.d.ts +2 -2
  81. package/esm/RadarChartPro/index.d.ts +2 -1
  82. package/esm/RadarChartPro/index.js +2 -1
  83. package/esm/SankeyChart/SankeyChart.d.ts +2 -2
  84. package/esm/SankeyChart/SankeyChart.js +4 -1
  85. package/esm/SankeyChart/SankeyChart.plugins.d.ts +3 -2
  86. package/esm/SankeyChart/SankeyChart.plugins.js +2 -6
  87. package/esm/SankeyChart/SankeyLinkLabel.js +12 -1
  88. package/esm/SankeyChart/calculateSankeyLayout.js +8 -2
  89. package/esm/SankeyChart/sankey.types.d.ts +55 -5
  90. package/esm/SankeyChart/seriesConfig/getSeriesWithDefaultValues.js +2 -0
  91. package/esm/SankeyChart/seriesConfig/tooltipGetter.js +13 -3
  92. package/esm/SankeyChart/useSankeyChartProps.d.ts +2 -2
  93. package/esm/ScatterChartPro/ScatterChartPro.d.ts +2 -2
  94. package/esm/ScatterChartPro/ScatterChartPro.js +37 -3
  95. package/esm/ScatterChartPro/ScatterChartPro.plugins.d.ts +3 -3
  96. package/esm/ScatterChartPro/ScatterChartPro.plugins.js +2 -2
  97. package/esm/ScatterChartPro/index.d.ts +2 -1
  98. package/esm/ScatterChartPro/index.js +2 -1
  99. package/esm/context/ChartProApi.d.ts +14 -12
  100. package/esm/index.d.ts +1 -0
  101. package/esm/index.js +2 -1
  102. package/esm/internals/plugins/useChartProExport/useChartProExport.types.d.ts +1 -2
  103. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.d.ts +22 -0
  104. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.js +4 -0
  105. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.d.ts +92 -0
  106. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.js +1 -0
  107. package/esm/internals/plugins/useChartProZoom/gestureHooks/usePanOnDrag.js +21 -6
  108. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.js +1 -1
  109. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnPinch.js +18 -9
  110. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.d.ts +8 -0
  111. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.js +73 -0
  112. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnWheel.js +14 -4
  113. package/esm/internals/plugins/useChartProZoom/initializeZoomData.d.ts +2 -0
  114. package/esm/internals/plugins/useChartProZoom/initializeZoomData.js +26 -0
  115. package/esm/internals/plugins/useChartProZoom/initializeZoomInteractionConfig.d.ts +2 -0
  116. package/esm/internals/plugins/useChartProZoom/initializeZoomInteractionConfig.js +86 -0
  117. package/esm/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -2
  118. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +25 -44
  119. package/esm/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +9 -0
  120. package/esm/plugins/index.d.ts +3 -0
  121. package/esm/plugins/index.js +3 -0
  122. package/index.d.ts +1 -0
  123. package/index.js +13 -1
  124. package/internals/plugins/useChartProExport/useChartProExport.types.d.ts +1 -2
  125. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.d.ts +22 -0
  126. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.js +10 -0
  127. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.d.ts +92 -0
  128. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.js +5 -0
  129. package/internals/plugins/useChartProZoom/gestureHooks/usePanOnDrag.js +21 -6
  130. package/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.js +1 -1
  131. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnPinch.js +18 -9
  132. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.d.ts +8 -0
  133. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.js +80 -0
  134. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnWheel.js +14 -4
  135. package/internals/plugins/useChartProZoom/initializeZoomData.d.ts +2 -0
  136. package/internals/plugins/useChartProZoom/initializeZoomData.js +31 -0
  137. package/internals/plugins/useChartProZoom/initializeZoomInteractionConfig.d.ts +2 -0
  138. package/internals/plugins/useChartProZoom/initializeZoomInteractionConfig.js +92 -0
  139. package/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -2
  140. package/internals/plugins/useChartProZoom/useChartProZoom.js +26 -45
  141. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +9 -0
  142. package/package.json +7 -7
  143. package/plugins/index.d.ts +3 -0
  144. package/plugins/index.js +35 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useZoomOnTapAndDrag = void 0;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _internals = require("@mui/x-charts/internals");
11
+ var _rafThrottle = require("@mui/x-internals/rafThrottle");
12
+ var _useZoom = require("./useZoom.utils");
13
+ var _ZoomInteractionConfig = require("../ZoomInteractionConfig.selectors");
14
+ const useZoomOnTapAndDrag = ({
15
+ store,
16
+ instance,
17
+ svgRef
18
+ }, setZoomDataCallback) => {
19
+ const drawingArea = (0, _internals.useSelector)(store, _internals.selectorChartDrawingArea);
20
+ const optionsLookup = (0, _internals.useSelector)(store, _internals.selectorChartZoomOptionsLookup);
21
+ const config = (0, _internals.useSelector)(store, _ZoomInteractionConfig.selectorZoomInteractionConfig, ['tapAndDrag']);
22
+ const isZoomOnTapAndDragEnabled = React.useMemo(() => Object.keys(optionsLookup).length > 0 && config || false, [optionsLookup, config]);
23
+ React.useEffect(() => {
24
+ if (!isZoomOnTapAndDragEnabled) {
25
+ return;
26
+ }
27
+ instance.updateZoomInteractionListeners('zoomTapAndDrag', {
28
+ requiredKeys: config.requiredKeys,
29
+ pointerMode: config.pointerMode,
30
+ pointerOptions: {
31
+ mouse: config.mouse,
32
+ touch: config.touch
33
+ }
34
+ });
35
+ }, [config, isZoomOnTapAndDragEnabled, instance]);
36
+
37
+ // Zoom on tap and drag
38
+ React.useEffect(() => {
39
+ const element = svgRef.current;
40
+ if (element === null || !isZoomOnTapAndDragEnabled) {
41
+ return () => {};
42
+ }
43
+ const rafThrottledCallback = (0, _rafThrottle.rafThrottle)(event => {
44
+ // If the delta is 0, we didn't move
45
+ if (event.detail.deltaY === 0) {
46
+ return;
47
+ }
48
+ setZoomDataCallback(prev => {
49
+ return prev.map(zoom => {
50
+ const option = optionsLookup[zoom.axisId];
51
+ if (!option) {
52
+ return zoom;
53
+ }
54
+ const isZoomIn = event.detail.deltaY > 0;
55
+ const scaleRatio = 1 + event.detail.deltaY / 100;
56
+ const point = (0, _internals.getSVGPoint)(element, {
57
+ clientX: event.detail.initialCentroid.x,
58
+ clientY: event.detail.initialCentroid.y
59
+ });
60
+ const centerRatio = option.axisDirection === 'x' ? (0, _useZoom.getHorizontalCenterRatio)(point, drawingArea) : (0, _useZoom.getVerticalCenterRatio)(point, drawingArea);
61
+ const [newMinRange, newMaxRange] = (0, _useZoom.zoomAtPoint)(centerRatio, scaleRatio, zoom, option);
62
+ if (!(0, _useZoom.isSpanValid)(newMinRange, newMaxRange, isZoomIn, option)) {
63
+ return zoom;
64
+ }
65
+ return {
66
+ axisId: zoom.axisId,
67
+ start: newMinRange,
68
+ end: newMaxRange
69
+ };
70
+ });
71
+ });
72
+ });
73
+ const zoomHandler = instance.addInteractionListener('zoomTapAndDrag', rafThrottledCallback);
74
+ return () => {
75
+ zoomHandler.cleanup();
76
+ rafThrottledCallback.clear();
77
+ };
78
+ }, [svgRef, drawingArea, isZoomOnTapAndDragEnabled, optionsLookup, store, instance, setZoomDataCallback]);
79
+ };
80
+ exports.useZoomOnTapAndDrag = useZoomOnTapAndDrag;
@@ -10,6 +10,7 @@ var React = _interopRequireWildcard(require("react"));
10
10
  var _internals = require("@mui/x-charts/internals");
11
11
  var _rafThrottle = require("@mui/x-internals/rafThrottle");
12
12
  var _useZoom = require("./useZoom.utils");
13
+ var _ZoomInteractionConfig = require("../ZoomInteractionConfig.selectors");
13
14
  const useZoomOnWheel = ({
14
15
  store,
15
16
  instance,
@@ -17,18 +18,27 @@ const useZoomOnWheel = ({
17
18
  }, setZoomDataCallback) => {
18
19
  const drawingArea = (0, _internals.useSelector)(store, _internals.selectorChartDrawingArea);
19
20
  const optionsLookup = (0, _internals.useSelector)(store, _internals.selectorChartZoomOptionsLookup);
20
- const isZoomEnabled = Object.keys(optionsLookup).length > 0;
21
21
  const startedOutsideRef = React.useRef(false);
22
22
  const startedOutsideTimeoutRef = React.useRef(null);
23
+ const config = (0, _internals.useSelector)(store, _ZoomInteractionConfig.selectorZoomInteractionConfig, ['wheel']);
24
+ const isZoomOnWheelEnabled = React.useMemo(() => Object.keys(optionsLookup).length > 0 && config || false, [optionsLookup, config]);
25
+ React.useEffect(() => {
26
+ if (!isZoomOnWheelEnabled) {
27
+ return;
28
+ }
29
+ instance.updateZoomInteractionListeners('zoomTurnWheel', {
30
+ requiredKeys: config.requiredKeys
31
+ });
32
+ }, [config, isZoomOnWheelEnabled, instance]);
23
33
 
24
34
  // Add event for chart zoom in/out
25
35
  React.useEffect(() => {
26
36
  const element = svgRef.current;
27
- if (element === null || !isZoomEnabled) {
37
+ if (element === null || !isZoomOnWheelEnabled) {
28
38
  return () => {};
29
39
  }
30
40
  const rafThrottledSetZoomData = (0, _rafThrottle.rafThrottle)(setZoomDataCallback);
31
- const zoomOnWheelHandler = instance.addInteractionListener('turnWheel', event => {
41
+ const zoomOnWheelHandler = instance.addInteractionListener('zoomTurnWheel', event => {
32
42
  const point = (0, _internals.getSVGPoint)(element, {
33
43
  clientX: event.detail.centroid.x,
34
44
  clientY: event.detail.centroid.y
@@ -81,6 +91,6 @@ const useZoomOnWheel = ({
81
91
  startedOutsideRef.current = false;
82
92
  rafThrottledSetZoomData.clear();
83
93
  };
84
- }, [svgRef, drawingArea, isZoomEnabled, optionsLookup, instance, setZoomDataCallback, store]);
94
+ }, [svgRef, drawingArea, isZoomOnWheelEnabled, optionsLookup, instance, setZoomDataCallback, store]);
85
95
  };
86
96
  exports.useZoomOnWheel = useZoomOnWheel;
@@ -0,0 +1,2 @@
1
+ import type { AxisId, DefaultizedZoomOptions, ZoomData } from '@mui/x-charts/internals';
2
+ export declare function initializeZoomData(options: Record<AxisId, Pick<DefaultizedZoomOptions, 'axisId' | 'minStart' | 'maxEnd'>>, zoomData?: readonly ZoomData[]): ZoomData[];
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.initializeZoomData = initializeZoomData;
8
+ // This is helpful to avoid the need to provide the possibly auto-generated id for each axis.
9
+ function initializeZoomData(options, zoomData) {
10
+ const zoomDataMap = new Map();
11
+ zoomData?.forEach(zoom => {
12
+ const option = options[zoom.axisId];
13
+ if (option) {
14
+ zoomDataMap.set(zoom.axisId, zoom);
15
+ }
16
+ });
17
+ return Object.values(options).map(({
18
+ axisId,
19
+ minStart: start,
20
+ maxEnd: end
21
+ }) => {
22
+ if (zoomDataMap.has(axisId)) {
23
+ return zoomDataMap.get(axisId);
24
+ }
25
+ return {
26
+ axisId,
27
+ start,
28
+ end
29
+ };
30
+ });
31
+ }
@@ -0,0 +1,2 @@
1
+ import type { ZoomInteractionConfig, DefaultizedZoomInteractionConfig } from "./ZoomInteractionConfig.types.js";
2
+ export declare const initializeZoomInteractionConfig: (zoomInteractionConfig?: ZoomInteractionConfig) => DefaultizedZoomInteractionConfig;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.initializeZoomInteractionConfig = void 0;
8
+ const initializeZoomInteractionConfig = zoomInteractionConfig => {
9
+ const defaultizedConfig = {
10
+ zoom: {},
11
+ pan: {}
12
+ };
13
+ if (!zoomInteractionConfig?.zoom) {
14
+ defaultizedConfig.zoom = {
15
+ wheel: {
16
+ type: 'wheel',
17
+ requiredKeys: [],
18
+ mouse: {},
19
+ touch: {}
20
+ },
21
+ pinch: {
22
+ type: 'pinch',
23
+ requiredKeys: [],
24
+ mouse: {},
25
+ touch: {}
26
+ }
27
+ };
28
+ } else {
29
+ defaultizedConfig.zoom = initializeFor(zoomInteractionConfig.zoom);
30
+ }
31
+ if (!zoomInteractionConfig?.pan) {
32
+ defaultizedConfig.pan = {
33
+ drag: {
34
+ type: 'drag',
35
+ requiredKeys: [],
36
+ mouse: {},
37
+ touch: {}
38
+ }
39
+ };
40
+ } else {
41
+ defaultizedConfig.pan = initializeFor(zoomInteractionConfig.pan);
42
+ }
43
+ return defaultizedConfig;
44
+ };
45
+ exports.initializeZoomInteractionConfig = initializeZoomInteractionConfig;
46
+ function initializeFor(zoomInteractionConfig) {
47
+ // We aggregate interactions by type
48
+ const aggregation = zoomInteractionConfig.reduce((acc, interaction) => {
49
+ if (typeof interaction === 'string') {
50
+ if (!acc[interaction]) {
51
+ acc[interaction] = [];
52
+ }
53
+ acc[interaction].push({
54
+ type: interaction,
55
+ requiredKeys: []
56
+ });
57
+ return acc;
58
+ }
59
+ const type = interaction.type;
60
+ if (!acc[type]) {
61
+ acc[type] = [];
62
+ }
63
+ acc[type].push({
64
+ type,
65
+ pointerMode: interaction.pointerMode,
66
+ requiredKeys: interaction.requiredKeys
67
+ });
68
+ return acc;
69
+ }, {});
70
+
71
+ // We then need to generate a usable config by type
72
+ // When a gesture type is provided without options, it means we enable it for all pointer modes
73
+ // Any interaction with a specific pointer mode should be restricted to that mode
74
+ const acc = {};
75
+ for (const [type, config] of Object.entries(aggregation)) {
76
+ const lastEmpty = config.findLast(item => !item.pointerMode);
77
+ const lastMouse = config.findLast(item => item.pointerMode === 'mouse');
78
+ const lastTouch = config.findLast(item => item.pointerMode === 'touch');
79
+ acc[type] = {
80
+ type,
81
+ pointerMode: lastEmpty ? [] : Array.from(new Set(config.filter(c => c.pointerMode).map(c => c.pointerMode))),
82
+ requiredKeys: lastEmpty?.requiredKeys ?? [],
83
+ mouse: lastMouse ? {
84
+ requiredKeys: lastMouse?.requiredKeys ?? []
85
+ } : {},
86
+ touch: lastTouch ? {
87
+ requiredKeys: lastTouch?.requiredKeys ?? []
88
+ } : {}
89
+ };
90
+ }
91
+ return acc;
92
+ }
@@ -1,4 +1,3 @@
1
- import { ChartPlugin, AxisId, DefaultizedZoomOptions, ZoomData } from '@mui/x-charts/internals';
1
+ import { ChartPlugin } from '@mui/x-charts/internals';
2
2
  import { UseChartProZoomSignature } from "./useChartProZoom.types.js";
3
- export declare function initializeZoomData(options: Record<AxisId, Pick<DefaultizedZoomOptions, 'axisId' | 'minStart' | 'maxEnd'>>, zoomData?: readonly ZoomData[]): ZoomData[];
4
3
  export declare const useChartProZoom: ChartPlugin<UseChartProZoomSignature>;
@@ -6,53 +6,41 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.initializeZoomData = initializeZoomData;
10
9
  exports.useChartProZoom = void 0;
11
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
11
  var React = _interopRequireWildcard(require("react"));
13
12
  var _internals = require("@mui/x-charts/internals");
14
13
  var _debounce = _interopRequireDefault(require("@mui/utils/debounce"));
14
+ var _useEffectAfterFirstRender = require("@mui/x-internals/useEffectAfterFirstRender");
15
15
  var _utils = require("@mui/material/utils");
16
16
  var _calculateZoom = require("./calculateZoom");
17
17
  var _useZoomOnWheel = require("./gestureHooks/useZoomOnWheel");
18
18
  var _useZoomOnPinch = require("./gestureHooks/useZoomOnPinch");
19
19
  var _usePanOnDrag = require("./gestureHooks/usePanOnDrag");
20
- // It is helpful to avoid the need to provide the possibly auto-generated id for each axis.
21
- function initializeZoomData(options, zoomData) {
22
- const zoomDataMap = new Map();
23
- zoomData?.forEach(zoom => {
24
- const option = options[zoom.axisId];
25
- if (option) {
26
- zoomDataMap.set(zoom.axisId, zoom);
27
- }
28
- });
29
- return Object.values(options).map(({
30
- axisId,
31
- minStart: start,
32
- maxEnd: end
33
- }) => {
34
- if (zoomDataMap.has(axisId)) {
35
- return zoomDataMap.get(axisId);
36
- }
37
- return {
38
- axisId,
39
- start,
40
- end
41
- };
42
- });
43
- }
44
- const useChartProZoom = ({
45
- store,
46
- instance,
47
- svgRef,
48
- params
49
- }) => {
20
+ var _useZoomOnTapAndDrag = require("./gestureHooks/useZoomOnTapAndDrag");
21
+ var _initializeZoomInteractionConfig = require("./initializeZoomInteractionConfig");
22
+ var _initializeZoomData = require("./initializeZoomData");
23
+ const useChartProZoom = pluginData => {
24
+ const {
25
+ store,
26
+ params
27
+ } = pluginData;
50
28
  const {
51
29
  zoomData: paramsZoomData,
52
- onZoomChange: onZoomChangeProp
30
+ onZoomChange: onZoomChangeProp,
31
+ zoomInteractionConfig
53
32
  } = params;
54
33
  const onZoomChange = (0, _utils.useEventCallback)(onZoomChangeProp ?? (() => {}));
55
34
  const optionsLookup = (0, _internals.useSelector)(store, _internals.selectorChartZoomOptionsLookup);
35
+ (0, _useEffectAfterFirstRender.useEffectAfterFirstRender)(() => {
36
+ store.update(prevState => {
37
+ return (0, _extends2.default)({}, prevState, {
38
+ zoom: (0, _extends2.default)({}, prevState.zoom, {
39
+ zoomInteractionConfig: (0, _initializeZoomInteractionConfig.initializeZoomInteractionConfig)(zoomInteractionConfig)
40
+ })
41
+ });
42
+ });
43
+ }, [store, zoomInteractionConfig]);
56
44
 
57
45
  // Manage controlled state
58
46
  React.useEffect(() => {
@@ -151,14 +139,10 @@ const useChartProZoom = ({
151
139
  }, [removeIsInteracting]);
152
140
 
153
141
  // Add events
154
- const pluginData = {
155
- store,
156
- instance,
157
- svgRef
158
- };
159
142
  (0, _usePanOnDrag.usePanOnDrag)(pluginData, setZoomDataCallback);
160
143
  (0, _useZoomOnWheel.useZoomOnWheel)(pluginData, setZoomDataCallback);
161
144
  (0, _useZoomOnPinch.useZoomOnPinch)(pluginData, setZoomDataCallback);
145
+ (0, _useZoomOnTapAndDrag.useZoomOnTapAndDrag)(pluginData, setZoomDataCallback);
162
146
  const zoom = React.useCallback(step => {
163
147
  setZoomDataCallback(prev => prev.map(zoomData => {
164
148
  const zoomOptions = (0, _internals.selectorChartAxisZoomOptionsLookup)(store.getSnapshot(), zoomData.axisId);
@@ -187,12 +171,8 @@ exports.useChartProZoom = useChartProZoom;
187
171
  useChartProZoom.params = {
188
172
  initialZoom: true,
189
173
  onZoomChange: true,
190
- zoomData: true
191
- };
192
- useChartProZoom.getDefaultizedParams = ({
193
- params
194
- }) => {
195
- return (0, _extends2.default)({}, params);
174
+ zoomData: true,
175
+ zoomInteractionConfig: true
196
176
  };
197
177
  useChartProZoom.getInitialState = params => {
198
178
  const {
@@ -207,9 +187,10 @@ useChartProZoom.getInitialState = params => {
207
187
  zoomData !== undefined ? zoomData : initialZoom !== undefined ? initialZoom : undefined;
208
188
  return {
209
189
  zoom: {
210
- zoomData: initializeZoomData(optionsLookup, userZoomData),
190
+ zoomData: (0, _initializeZoomData.initializeZoomData)(optionsLookup, userZoomData),
211
191
  isInteracting: false,
212
- isControlled: zoomData !== undefined
192
+ isControlled: zoomData !== undefined,
193
+ zoomInteractionConfig: (0, _initializeZoomInteractionConfig.initializeZoomInteractionConfig)(params.zoomInteractionConfig)
213
194
  }
214
195
  };
215
196
  };
@@ -1,4 +1,5 @@
1
1
  import { UseChartSeriesSignature, ChartPluginSignature, UseChartCartesianAxisSignature, UseChartCartesianAxisDefaultizedParameters, ZoomData, AxisId } from '@mui/x-charts/internals';
2
+ import { ZoomInteractionConfig, DefaultizedZoomInteractionConfig } from "./ZoomInteractionConfig.types.js";
2
3
  export interface UseChartProZoomParameters {
3
4
  /**
4
5
  * The list of zoom data related to each axis.
@@ -15,6 +16,10 @@ export interface UseChartProZoomParameters {
15
16
  * The list of zoom data related to each axis.
16
17
  */
17
18
  zoomData?: readonly ZoomData[];
19
+ /**
20
+ * Configuration for zoom interactions.
21
+ */
22
+ zoomInteractionConfig?: ZoomInteractionConfig;
18
23
  }
19
24
  export type UseChartProZoomDefaultizedParameters = UseChartProZoomParameters & UseChartCartesianAxisDefaultizedParameters;
20
25
  export interface UseChartProZoomState {
@@ -32,6 +37,10 @@ export interface UseChartProZoomState {
32
37
  * Internal information to know if the user control the state or not.
33
38
  */
34
39
  isControlled: boolean;
40
+ /**
41
+ * Configuration for zoom interactions.
42
+ */
43
+ zoomInteractionConfig: DefaultizedZoomInteractionConfig;
35
44
  };
36
45
  }
37
46
  export interface UseChartProZoomPublicApi {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts-pro",
3
- "version": "8.11.3",
3
+ "version": "8.13.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The Pro plan edition of the MUI X Charts components.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -27,15 +27,15 @@
27
27
  "directory": "packages/x-charts-pro"
28
28
  },
29
29
  "dependencies": {
30
- "@babel/runtime": "^7.28.2",
30
+ "@babel/runtime": "^7.28.4",
31
31
  "@mui/utils": "^7.3.2",
32
32
  "clsx": "^2.1.1",
33
33
  "prop-types": "^15.8.1",
34
- "@mui/x-charts": "8.11.3",
35
- "@mui/x-internal-gestures": "0.2.6",
36
- "@mui/x-charts-vendor": "8.11.3",
37
- "@mui/x-internals": "8.11.3",
38
- "@mui/x-license": "8.11.3"
34
+ "@mui/x-charts": "8.13.0",
35
+ "@mui/x-internals": "8.12.0",
36
+ "@mui/x-license": "8.12.0",
37
+ "@mui/x-charts-vendor": "8.12.0",
38
+ "@mui/x-internal-gestures": "0.3.1"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@emotion/react": "^11.9.0",
@@ -0,0 +1,3 @@
1
+ export * from '@mui/x-charts/plugins';
2
+ export { useChartProExport, type UseChartProExportSignature } from "../internals/plugins/useChartProExport/index.js";
3
+ export { useChartProZoom, type UseChartProZoomSignature } from "../internals/plugins/useChartProZoom/index.js";
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ useChartProExport: true,
8
+ useChartProZoom: true
9
+ };
10
+ Object.defineProperty(exports, "useChartProExport", {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _useChartProExport.useChartProExport;
14
+ }
15
+ });
16
+ Object.defineProperty(exports, "useChartProZoom", {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _useChartProZoom.useChartProZoom;
20
+ }
21
+ });
22
+ var _plugins = require("@mui/x-charts/plugins");
23
+ Object.keys(_plugins).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _plugins[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _plugins[key];
31
+ }
32
+ });
33
+ });
34
+ var _useChartProExport = require("../internals/plugins/useChartProExport");
35
+ var _useChartProZoom = require("../internals/plugins/useChartProZoom");