@mui/x-charts-pro 8.2.0 → 8.3.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 (154) hide show
  1. package/BarChartPro/BarChartPro.d.ts +7 -1
  2. package/BarChartPro/BarChartPro.js +60 -4
  3. package/CHANGELOG.md +107 -0
  4. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  5. package/ChartZoomSlider/ChartZoomSlider.d.ts +5 -0
  6. package/ChartZoomSlider/ChartZoomSlider.js +47 -0
  7. package/ChartZoomSlider/index.d.ts +2 -0
  8. package/ChartZoomSlider/index.js +27 -0
  9. package/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +23 -0
  10. package/ChartZoomSlider/internals/ChartAxisZoomSlider.js +348 -0
  11. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +12 -0
  12. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +92 -0
  13. package/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +17 -0
  14. package/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.js +27 -0
  15. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +2 -0
  16. package/ChartsToolbarPro/ChartsToolbarPro.js +31 -0
  17. package/ChartsToolbarPro/index.d.ts +1 -0
  18. package/ChartsToolbarPro/index.js +16 -0
  19. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +13 -0
  20. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +36 -0
  21. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +13 -0
  22. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +36 -0
  23. package/FunnelChart/FunnelChart.js +2 -7
  24. package/FunnelChart/FunnelPlot.js +24 -3
  25. package/FunnelChart/FunnelSection.d.ts +1 -0
  26. package/FunnelChart/FunnelSection.js +12 -7
  27. package/FunnelChart/curves/borderRadiusPolygon.d.ts +8 -0
  28. package/FunnelChart/curves/borderRadiusPolygon.js +42 -0
  29. package/FunnelChart/curves/bump.d.ts +8 -5
  30. package/FunnelChart/curves/bump.js +21 -22
  31. package/FunnelChart/curves/curve.types.d.ts +33 -3
  32. package/FunnelChart/curves/getFunnelCurve.d.ts +2 -2
  33. package/FunnelChart/curves/getFunnelCurve.js +12 -4
  34. package/FunnelChart/curves/linear.d.ts +17 -9
  35. package/FunnelChart/curves/linear.js +62 -87
  36. package/FunnelChart/curves/pyramid.d.ts +34 -0
  37. package/FunnelChart/curves/pyramid.js +127 -0
  38. package/FunnelChart/curves/step-pyramid.d.ts +31 -0
  39. package/FunnelChart/curves/step-pyramid.js +107 -0
  40. package/FunnelChart/curves/step.d.ts +32 -0
  41. package/FunnelChart/curves/step.js +88 -0
  42. package/FunnelChart/curves/utils.d.ts +4 -0
  43. package/FunnelChart/curves/utils.js +29 -0
  44. package/FunnelChart/funnel.types.d.ts +23 -2
  45. package/FunnelChart/funnelSectionClasses.d.ts +5 -1
  46. package/FunnelChart/funnelSectionClasses.js +5 -2
  47. package/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +1 -0
  48. package/FunnelChart/useFunnelChartProps.d.ts +0 -5
  49. package/FunnelChart/useFunnelChartProps.js +0 -11
  50. package/Heatmap/Heatmap.d.ts +3 -3
  51. package/Heatmap/Heatmap.js +2 -20
  52. package/LineChartPro/LineChartPro.d.ts +7 -1
  53. package/LineChartPro/LineChartPro.js +60 -4
  54. package/ScatterChartPro/ScatterChartPro.d.ts +7 -1
  55. package/ScatterChartPro/ScatterChartPro.js +60 -4
  56. package/esm/BarChartPro/BarChartPro.d.ts +7 -1
  57. package/esm/BarChartPro/BarChartPro.js +60 -4
  58. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  59. package/esm/ChartZoomSlider/ChartZoomSlider.d.ts +5 -0
  60. package/esm/ChartZoomSlider/ChartZoomSlider.js +41 -0
  61. package/esm/ChartZoomSlider/index.d.ts +2 -0
  62. package/esm/ChartZoomSlider/index.js +2 -0
  63. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +23 -0
  64. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.js +339 -0
  65. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +12 -0
  66. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +85 -0
  67. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +17 -0
  68. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.js +17 -0
  69. package/esm/ChartsToolbarPro/ChartsToolbarPro.d.ts +2 -0
  70. package/esm/ChartsToolbarPro/ChartsToolbarPro.js +24 -0
  71. package/esm/ChartsToolbarPro/index.d.ts +1 -0
  72. package/esm/ChartsToolbarPro/index.js +1 -0
  73. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +13 -0
  74. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +29 -0
  75. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +13 -0
  76. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +29 -0
  77. package/esm/FunnelChart/FunnelChart.js +2 -7
  78. package/esm/FunnelChart/FunnelPlot.js +24 -3
  79. package/esm/FunnelChart/FunnelSection.d.ts +1 -0
  80. package/esm/FunnelChart/FunnelSection.js +12 -7
  81. package/esm/FunnelChart/curves/borderRadiusPolygon.d.ts +8 -0
  82. package/esm/FunnelChart/curves/borderRadiusPolygon.js +36 -0
  83. package/esm/FunnelChart/curves/bump.d.ts +8 -5
  84. package/esm/FunnelChart/curves/bump.js +21 -22
  85. package/esm/FunnelChart/curves/curve.types.d.ts +33 -3
  86. package/esm/FunnelChart/curves/getFunnelCurve.d.ts +2 -2
  87. package/esm/FunnelChart/curves/getFunnelCurve.js +12 -4
  88. package/esm/FunnelChart/curves/linear.d.ts +17 -9
  89. package/esm/FunnelChart/curves/linear.js +62 -86
  90. package/esm/FunnelChart/curves/pyramid.d.ts +34 -0
  91. package/esm/FunnelChart/curves/pyramid.js +121 -0
  92. package/esm/FunnelChart/curves/step-pyramid.d.ts +31 -0
  93. package/esm/FunnelChart/curves/step-pyramid.js +101 -0
  94. package/esm/FunnelChart/curves/step.d.ts +32 -0
  95. package/esm/FunnelChart/curves/step.js +82 -0
  96. package/esm/FunnelChart/curves/utils.d.ts +4 -0
  97. package/esm/FunnelChart/curves/utils.js +19 -0
  98. package/esm/FunnelChart/funnel.types.d.ts +23 -2
  99. package/esm/FunnelChart/funnelSectionClasses.d.ts +5 -1
  100. package/esm/FunnelChart/funnelSectionClasses.js +5 -2
  101. package/esm/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +1 -0
  102. package/esm/FunnelChart/useFunnelChartProps.d.ts +0 -5
  103. package/esm/FunnelChart/useFunnelChartProps.js +0 -11
  104. package/esm/Heatmap/Heatmap.d.ts +3 -3
  105. package/esm/Heatmap/Heatmap.js +2 -20
  106. package/esm/LineChartPro/LineChartPro.d.ts +7 -1
  107. package/esm/LineChartPro/LineChartPro.js +60 -4
  108. package/esm/ScatterChartPro/ScatterChartPro.d.ts +7 -1
  109. package/esm/ScatterChartPro/ScatterChartPro.js +60 -4
  110. package/esm/index.d.ts +4 -1
  111. package/esm/index.js +5 -2
  112. package/esm/internals/material/icons.d.ts +3 -0
  113. package/esm/internals/material/icons.js +13 -0
  114. package/esm/internals/material/index.d.ts +4 -0
  115. package/esm/internals/material/index.js +12 -0
  116. package/esm/internals/plugins/useChartProZoom/calculateZoom.d.ts +23 -0
  117. package/esm/internals/plugins/useChartProZoom/calculateZoom.js +32 -0
  118. package/esm/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -1
  119. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +45 -3
  120. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +63 -11
  121. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +3 -2
  122. package/esm/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +17 -2
  123. package/esm/internals/slots/chartBaseSlotProps.d.ts +10 -0
  124. package/esm/internals/slots/chartBaseSlotProps.js +1 -0
  125. package/esm/internals/slots/chartsBaseSlots.d.ts +6 -0
  126. package/esm/internals/slots/chartsBaseSlots.js +1 -0
  127. package/esm/internals/slots/chartsIconSlots.d.ts +14 -0
  128. package/esm/internals/slots/chartsIconSlots.js +1 -0
  129. package/esm/typeOverloads/modules.d.ts +1 -1
  130. package/index.d.ts +4 -1
  131. package/index.js +90 -1
  132. package/internals/material/icons.d.ts +3 -0
  133. package/internals/material/icons.js +20 -0
  134. package/internals/material/index.d.ts +4 -0
  135. package/internals/material/index.js +19 -0
  136. package/internals/plugins/useChartProZoom/calculateZoom.d.ts +23 -0
  137. package/internals/plugins/useChartProZoom/calculateZoom.js +39 -0
  138. package/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -1
  139. package/internals/plugins/useChartProZoom/useChartProZoom.js +44 -2
  140. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +63 -11
  141. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +3 -2
  142. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +17 -2
  143. package/internals/slots/chartBaseSlotProps.d.ts +10 -0
  144. package/internals/slots/chartBaseSlotProps.js +5 -0
  145. package/internals/slots/chartsBaseSlots.d.ts +6 -0
  146. package/internals/slots/chartsBaseSlots.js +5 -0
  147. package/internals/slots/chartsIconSlots.d.ts +14 -0
  148. package/internals/slots/chartsIconSlots.js +5 -0
  149. package/package.json +7 -7
  150. package/typeOverloads/modules.d.ts +1 -1
  151. package/FunnelChart/curves/funnelStep.d.ts +0 -25
  152. package/FunnelChart/curves/funnelStep.js +0 -87
  153. package/esm/FunnelChart/curves/funnelStep.d.ts +0 -25
  154. package/esm/FunnelChart/curves/funnelStep.js +0 -80
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChartAxisZoomSlider = ChartAxisZoomSlider;
10
+ exports.calculateZoomEnd = calculateZoomEnd;
11
+ exports.calculateZoomStart = calculateZoomStart;
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+ var React = _interopRequireWildcard(require("react"));
14
+ var _internals = require("@mui/x-charts/internals");
15
+ var _styles = require("@mui/material/styles");
16
+ var _hooks = require("@mui/x-charts/hooks");
17
+ var _rafThrottle = require("@mui/x-internals/rafThrottle");
18
+ var _useChartProZoom = require("../../internals/plugins/useChartProZoom");
19
+ var _ChartAxisZoomSliderHandle = require("./ChartAxisZoomSliderHandle");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ const BackgroundRect = (0, _styles.styled)('rect')(({
22
+ theme
23
+ }) => ({
24
+ '&': {
25
+ fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[800] : (theme.vars || theme).palette.grey[300]
26
+ }
27
+ }));
28
+ const ZoomRangePreviewRect = (0, _styles.styled)('rect')(({
29
+ theme
30
+ }) => ({
31
+ '&': {
32
+ fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[500] : (theme.vars || theme).palette.grey[600],
33
+ cursor: 'grab'
34
+ }
35
+ }));
36
+ const ZOOM_SLIDER_BACKGROUND_SIZE = 8;
37
+ const ZOOM_SLIDER_FOREGROUND_SIZE = 10;
38
+ const ZOOM_SLIDER_HANDLE_HEIGHT = 20;
39
+ const ZOOM_SLIDER_HANDLE_WIDTH = 10;
40
+ const ZOOM_SLIDER_SIZE = Math.max(ZOOM_SLIDER_BACKGROUND_SIZE, ZOOM_SLIDER_FOREGROUND_SIZE, ZOOM_SLIDER_HANDLE_HEIGHT, ZOOM_SLIDER_HANDLE_WIDTH);
41
+
42
+ /**
43
+ * Renders the zoom slider for a specific axis.
44
+ * @internal
45
+ */
46
+ function ChartAxisZoomSlider({
47
+ axisDirection,
48
+ axisId
49
+ }) {
50
+ const store = (0, _internals.useStore)();
51
+ const drawingArea = (0, _internals.useDrawingArea)();
52
+ const zoomData = (0, _internals.useSelector)(store, _useChartProZoom.selectorChartAxisZoomData, axisId);
53
+ const {
54
+ xAxis
55
+ } = (0, _hooks.useXAxes)();
56
+ const {
57
+ yAxis
58
+ } = (0, _hooks.useYAxes)();
59
+ if (!zoomData) {
60
+ return null;
61
+ }
62
+ let x;
63
+ let y;
64
+ let reverse;
65
+ if (axisDirection === 'x') {
66
+ const axis = xAxis[axisId];
67
+ if (!axis) {
68
+ return null;
69
+ }
70
+ const axisSize = axis.height;
71
+ x = drawingArea.left;
72
+ y = axis.position === 'bottom' ? drawingArea.top + drawingArea.height + axis.offset + axisSize + _internals.ZOOM_SLIDER_MARGIN : drawingArea.top - axis.offset - axisSize - ZOOM_SLIDER_SIZE - _internals.ZOOM_SLIDER_MARGIN;
73
+ reverse = axis.reverse ?? false;
74
+ } else {
75
+ const axis = yAxis[axisId];
76
+ if (!axis) {
77
+ return null;
78
+ }
79
+ const axisSize = axis.width;
80
+ x = axis.position === 'right' ? drawingArea.left + drawingArea.width + axis.offset + axisSize + _internals.ZOOM_SLIDER_MARGIN : drawingArea.left - axis.offset - axisSize - ZOOM_SLIDER_SIZE - _internals.ZOOM_SLIDER_MARGIN;
81
+ y = drawingArea.top;
82
+ reverse = axis.reverse ?? false;
83
+ }
84
+ const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_BACKGROUND_SIZE) / 2;
85
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
86
+ transform: `translate(${x} ${y})`,
87
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(BackgroundRect, {
88
+ x: axisDirection === 'x' ? 0 : backgroundRectOffset,
89
+ y: axisDirection === 'x' ? backgroundRectOffset : 0,
90
+ height: axisDirection === 'x' ? ZOOM_SLIDER_BACKGROUND_SIZE : drawingArea.height,
91
+ width: axisDirection === 'x' ? drawingArea.width : ZOOM_SLIDER_BACKGROUND_SIZE,
92
+ rx: ZOOM_SLIDER_BACKGROUND_SIZE / 2,
93
+ ry: ZOOM_SLIDER_BACKGROUND_SIZE / 2
94
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(ChartAxisZoomSliderSpan, {
95
+ zoomData: zoomData,
96
+ axisId: axisId,
97
+ axisDirection: axisDirection,
98
+ reverse: reverse
99
+ })]
100
+ });
101
+ }
102
+ function ChartAxisZoomSliderSpan({
103
+ axisId,
104
+ axisDirection,
105
+ zoomData,
106
+ reverse
107
+ }) {
108
+ const {
109
+ instance,
110
+ svgRef
111
+ } = (0, _internals.useChartContext)();
112
+ const store = (0, _internals.useStore)();
113
+ const drawingArea = (0, _internals.useDrawingArea)();
114
+ const activePreviewRectRef = React.useRef(null);
115
+ const previewHandleWidth = axisDirection === 'x' ? ZOOM_SLIDER_HANDLE_WIDTH : ZOOM_SLIDER_HANDLE_HEIGHT;
116
+ const previewHandleHeight = axisDirection === 'x' ? ZOOM_SLIDER_HANDLE_HEIGHT : ZOOM_SLIDER_HANDLE_WIDTH;
117
+ React.useEffect(() => {
118
+ const activePreviewRect = activePreviewRectRef.current;
119
+ if (!activePreviewRect) {
120
+ return;
121
+ }
122
+
123
+ /* min and max values of zoom to ensure the pointer anchor in the slider is maintained */
124
+ let pointerZoomMin;
125
+ let pointerZoomMax;
126
+ let prevPointerZoom = 0;
127
+ const onPointerMove = (0, _rafThrottle.rafThrottle)(event => {
128
+ const {
129
+ left,
130
+ top,
131
+ height,
132
+ width
133
+ } = (0, _internals.selectorChartDrawingArea)(store.getSnapshot());
134
+ const axisZoomData = (0, _useChartProZoom.selectorChartAxisZoomData)(store.getSnapshot(), axisId);
135
+ const element = svgRef.current;
136
+ if (!axisZoomData || !element) {
137
+ return;
138
+ }
139
+ const point = (0, _internals.getSVGPoint)(element, event);
140
+ let pointerZoom;
141
+ if (axisDirection === 'x') {
142
+ pointerZoom = (point.x - left) / width * 100;
143
+ } else {
144
+ pointerZoom = (top + height - point.y) / height * 100;
145
+ }
146
+ if (reverse) {
147
+ pointerZoom = 100 - pointerZoom;
148
+ }
149
+ pointerZoom = Math.max(pointerZoomMin, Math.min(pointerZoomMax, pointerZoom));
150
+ const deltaZoom = pointerZoom - prevPointerZoom;
151
+ prevPointerZoom = pointerZoom;
152
+ instance.moveZoomRange(axisId, deltaZoom);
153
+ });
154
+ const onPointerUp = () => {
155
+ activePreviewRect.removeEventListener('pointermove', onPointerMove);
156
+ activePreviewRect.removeEventListener('pointerup', onPointerUp);
157
+ };
158
+ const onPointerDown = event => {
159
+ // Prevent text selection when dragging
160
+ event.preventDefault();
161
+ activePreviewRect.setPointerCapture(event.pointerId);
162
+ const {
163
+ left,
164
+ top,
165
+ height,
166
+ width
167
+ } = (0, _internals.selectorChartDrawingArea)(store.getSnapshot());
168
+ const axisZoomData = (0, _useChartProZoom.selectorChartAxisZoomData)(store.getSnapshot(), axisId);
169
+ const element = svgRef.current;
170
+ if (!axisZoomData || !element) {
171
+ return;
172
+ }
173
+ const point = (0, _internals.getSVGPoint)(element, event);
174
+
175
+ // The corresponding value of zoom where the pointer was pressed
176
+ let pointerDownZoom;
177
+ if (axisDirection === 'x') {
178
+ pointerDownZoom = (point.x - left) / width * 100;
179
+ } else {
180
+ pointerDownZoom = (top + height - point.y) / height * 100;
181
+ }
182
+ if (reverse) {
183
+ pointerDownZoom = 100 - pointerDownZoom;
184
+ }
185
+ prevPointerZoom = pointerDownZoom;
186
+ pointerZoomMin = pointerDownZoom - axisZoomData.start;
187
+ pointerZoomMax = 100 - (axisZoomData.end - pointerDownZoom);
188
+ activePreviewRect.addEventListener('pointerup', onPointerUp);
189
+ activePreviewRect.addEventListener('pointermove', onPointerMove);
190
+ };
191
+ activePreviewRect.addEventListener('pointerdown', onPointerDown);
192
+
193
+ // eslint-disable-next-line consistent-return
194
+ return () => {
195
+ activePreviewRect.removeEventListener('pointerdown', onPointerDown);
196
+ onPointerMove.clear();
197
+ };
198
+ }, [axisDirection, axisId, instance, reverse, store, svgRef]);
199
+ const onResizeStart = event => {
200
+ const element = svgRef.current;
201
+ if (!element) {
202
+ return;
203
+ }
204
+ const point = (0, _internals.getSVGPoint)(element, event);
205
+ instance.setZoomData(prevZoomData => {
206
+ const {
207
+ left,
208
+ top,
209
+ width,
210
+ height
211
+ } = (0, _internals.selectorChartDrawingArea)(store.value);
212
+ const zoomOptions = (0, _internals.selectorChartAxisZoomOptionsLookup)(store.value, axisId);
213
+ return prevZoomData.map(zoom => {
214
+ if (zoom.axisId === axisId) {
215
+ let newStart;
216
+ if (axisDirection === 'x') {
217
+ newStart = (point.x - left) / width * 100;
218
+ } else {
219
+ newStart = (top + height - point.y) / height * 100;
220
+ }
221
+ if (reverse) {
222
+ newStart = 100 - newStart;
223
+ }
224
+ return (0, _extends2.default)({}, zoom, {
225
+ start: calculateZoomStart(newStart, zoom, zoomOptions)
226
+ });
227
+ }
228
+ return zoom;
229
+ });
230
+ });
231
+ };
232
+ const onResizeEnd = event => {
233
+ const element = svgRef.current;
234
+ if (!element) {
235
+ return;
236
+ }
237
+ const point = (0, _internals.getSVGPoint)(element, event);
238
+ instance.setZoomData(prevZoomData => {
239
+ const {
240
+ left,
241
+ top,
242
+ width,
243
+ height
244
+ } = (0, _internals.selectorChartDrawingArea)(store.value);
245
+ const zoomOptions = (0, _internals.selectorChartAxisZoomOptionsLookup)(store.value, axisId);
246
+ return prevZoomData.map(zoom => {
247
+ if (zoom.axisId === axisId) {
248
+ let newEnd;
249
+ if (axisDirection === 'x') {
250
+ newEnd = (point.x - left) / width * 100;
251
+ } else {
252
+ newEnd = (top + height - point.y) / height * 100;
253
+ }
254
+ if (reverse) {
255
+ newEnd = 100 - newEnd;
256
+ }
257
+ return (0, _extends2.default)({}, zoom, {
258
+ end: calculateZoomEnd(newEnd, zoom, zoomOptions)
259
+ });
260
+ }
261
+ return zoom;
262
+ });
263
+ });
264
+ };
265
+ let previewX;
266
+ let previewY;
267
+ let previewWidth;
268
+ let previewHeight;
269
+ let startHandleX;
270
+ let startHandleY;
271
+ let endHandleX;
272
+ let endHandleY;
273
+ if (axisDirection === 'x') {
274
+ previewX = zoomData.start / 100 * drawingArea.width;
275
+ previewY = 0;
276
+ previewWidth = drawingArea.width * (zoomData.end - zoomData.start) / 100;
277
+ previewHeight = ZOOM_SLIDER_FOREGROUND_SIZE;
278
+ startHandleX = zoomData.start / 100 * drawingArea.width;
279
+ startHandleY = 0;
280
+ endHandleX = zoomData.end / 100 * drawingArea.width;
281
+ endHandleY = 0;
282
+ if (reverse) {
283
+ previewX = drawingArea.width - previewX - previewWidth;
284
+ startHandleX = drawingArea.width - startHandleX;
285
+ endHandleX = drawingArea.width - endHandleX;
286
+ }
287
+ startHandleX -= previewHandleWidth / 2;
288
+ endHandleX -= previewHandleWidth / 2;
289
+ } else {
290
+ previewX = 0;
291
+ previewY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
292
+ previewWidth = ZOOM_SLIDER_FOREGROUND_SIZE;
293
+ previewHeight = drawingArea.height * (zoomData.end - zoomData.start) / 100;
294
+ startHandleX = 0;
295
+ startHandleY = drawingArea.height - zoomData.start / 100 * drawingArea.height;
296
+ endHandleX = 0;
297
+ endHandleY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
298
+ if (reverse) {
299
+ previewY = drawingArea.height - previewY - previewHeight;
300
+ startHandleY = drawingArea.height - startHandleY;
301
+ endHandleY = drawingArea.height - endHandleY;
302
+ }
303
+ startHandleY -= previewHandleHeight / 2;
304
+ endHandleY -= previewHandleHeight / 2;
305
+ }
306
+ const previewOffset = (ZOOM_SLIDER_HANDLE_HEIGHT - ZOOM_SLIDER_FOREGROUND_SIZE) / 2;
307
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
308
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomRangePreviewRect, {
309
+ ref: activePreviewRectRef,
310
+ x: previewX + (axisDirection === 'x' ? 0 : previewOffset),
311
+ y: previewY + (axisDirection === 'x' ? previewOffset : 0),
312
+ width: previewWidth,
313
+ height: previewHeight
314
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderHandle.ChartAxisZoomSliderHandle, {
315
+ x: startHandleX,
316
+ y: startHandleY,
317
+ width: previewHandleWidth,
318
+ height: previewHandleHeight,
319
+ orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
320
+ onResize: onResizeStart,
321
+ placement: "start"
322
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderHandle.ChartAxisZoomSliderHandle, {
323
+ x: endHandleX,
324
+ y: endHandleY,
325
+ width: previewHandleWidth,
326
+ height: previewHandleHeight,
327
+ orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
328
+ onResize: onResizeEnd,
329
+ placement: "end"
330
+ })]
331
+ });
332
+ }
333
+ function calculateZoomStart(newStart, currentZoom, options) {
334
+ const {
335
+ minStart,
336
+ minSpan,
337
+ maxSpan
338
+ } = options;
339
+ return Math.max(minStart, currentZoom.end - maxSpan, Math.min(currentZoom.end - minSpan, newStart));
340
+ }
341
+ function calculateZoomEnd(newEnd, currentZoom, options) {
342
+ const {
343
+ maxEnd,
344
+ minSpan,
345
+ maxSpan
346
+ } = options;
347
+ return Math.min(maxEnd, currentZoom.start + maxSpan, Math.max(currentZoom.start + minSpan, newEnd));
348
+ }
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ export interface ChartZoomSliderHandleOwnerState {
3
+ onResize: (event: PointerEvent) => void;
4
+ orientation: 'horizontal' | 'vertical';
5
+ placement: 'start' | 'end';
6
+ }
7
+ export interface ChartZoomSliderHandleProps extends Pick<React.ComponentProps<'rect'>, 'x' | 'y' | 'width' | 'height' | 'rx' | 'ry'>, ChartZoomSliderHandleOwnerState {}
8
+ /**
9
+ * Renders the zoom slider handle, which is responsible for resizing the zoom range.
10
+ * @internal
11
+ */
12
+ export declare const ChartAxisZoomSliderHandle: React.ForwardRefExoticComponent<ChartZoomSliderHandleProps & React.RefAttributes<SVGRectElement>>;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChartAxisZoomSliderHandle = void 0;
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _styles = require("@mui/material/styles");
12
+ var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
13
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
14
+ var _rafThrottle = require("@mui/x-internals/rafThrottle");
15
+ var _chartAxisZoomSliderHandleClasses = require("./chartAxisZoomSliderHandleClasses");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ const Rect = (0, _styles.styled)('rect')(({
18
+ theme
19
+ }) => ({
20
+ [`&.${_chartAxisZoomSliderHandleClasses.chartAxisZoomSliderHandleClasses.root}`]: {
21
+ fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[300] : (theme.vars || theme).palette.common.white,
22
+ stroke: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[600] : (theme.vars || theme).palette.grey[500]
23
+ },
24
+ [`&.${_chartAxisZoomSliderHandleClasses.chartAxisZoomSliderHandleClasses.horizontal}`]: {
25
+ cursor: 'ew-resize'
26
+ },
27
+ [`&.${_chartAxisZoomSliderHandleClasses.chartAxisZoomSliderHandleClasses.vertical}`]: {
28
+ cursor: 'ns-resize'
29
+ }
30
+ }));
31
+ /**
32
+ * Renders the zoom slider handle, which is responsible for resizing the zoom range.
33
+ * @internal
34
+ */
35
+ const ChartAxisZoomSliderHandle = exports.ChartAxisZoomSliderHandle = /*#__PURE__*/React.forwardRef(function ChartPreviewHandle({
36
+ x,
37
+ y,
38
+ width,
39
+ height,
40
+ onResize,
41
+ orientation,
42
+ placement,
43
+ rx = 4,
44
+ ry = 4
45
+ }, forwardedRef) {
46
+ const classes = (0, _chartAxisZoomSliderHandleClasses.useUtilityClasses)({
47
+ onResize,
48
+ orientation,
49
+ placement
50
+ });
51
+ const handleRef = React.useRef(null);
52
+ const ref = (0, _useForkRef.default)(handleRef, forwardedRef);
53
+ const onResizeEvent = (0, _useEventCallback.default)(onResize);
54
+ React.useEffect(() => {
55
+ const handle = handleRef.current;
56
+ if (!handle) {
57
+ return;
58
+ }
59
+ const onPointerMove = (0, _rafThrottle.rafThrottle)(event => {
60
+ onResizeEvent(event);
61
+ });
62
+ const onPointerUp = () => {
63
+ handle.removeEventListener('pointermove', onPointerMove);
64
+ handle.removeEventListener('pointerup', onPointerUp);
65
+ };
66
+ const onPointerDown = event => {
67
+ // Prevent text selection when dragging the handle
68
+ event.preventDefault();
69
+ event.stopPropagation();
70
+ handle.setPointerCapture(event.pointerId);
71
+ handle.addEventListener('pointerup', onPointerUp);
72
+ handle.addEventListener('pointermove', onPointerMove);
73
+ };
74
+ handle.addEventListener('pointerdown', onPointerDown);
75
+
76
+ // eslint-disable-next-line consistent-return
77
+ return () => {
78
+ handle.removeEventListener('pointerdown', onPointerDown);
79
+ onPointerMove.clear();
80
+ };
81
+ }, [onResizeEvent, orientation]);
82
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Rect, {
83
+ className: classes.root,
84
+ ref: ref,
85
+ x: x,
86
+ y: y,
87
+ width: width,
88
+ height: height,
89
+ rx: rx,
90
+ ry: ry
91
+ });
92
+ });
@@ -0,0 +1,17 @@
1
+ import type { ChartZoomSliderHandleOwnerState } from "./ChartAxisZoomSliderHandle.js";
2
+ export interface ChartAxisZoomSliderHandleClasses {
3
+ /** Styles applied to the root element. */
4
+ root: string;
5
+ /** Styles applied to the root element when it is horizontal. */
6
+ horizontal: string;
7
+ /** Styles applied to the root element when it is vertical. */
8
+ vertical: string;
9
+ /** Styles applied to the root element when it is a start handle. */
10
+ start: string;
11
+ /** Styles applied to the root element when it is an end handle. */
12
+ end: string;
13
+ }
14
+ export type ChartAxisZoomSliderHandleClassKey = keyof ChartAxisZoomSliderHandleClasses;
15
+ export declare const chartAxisZoomSliderHandleClasses: ChartAxisZoomSliderHandleClasses;
16
+ export declare function getAxisZoomSliderHandleUtilityClass(slot: string): string;
17
+ export declare const useUtilityClasses: (ownerState: ChartZoomSliderHandleOwnerState) => Record<"root", string>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.chartAxisZoomSliderHandleClasses = void 0;
8
+ exports.getAxisZoomSliderHandleUtilityClass = getAxisZoomSliderHandleUtilityClass;
9
+ exports.useUtilityClasses = void 0;
10
+ var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generateUtilityClasses"));
11
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
12
+ var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateUtilityClass"));
13
+ const chartAxisZoomSliderHandleClasses = exports.chartAxisZoomSliderHandleClasses = (0, _generateUtilityClasses.default)('MuiChartAxisZoomSliderHandle', ['root', 'horizontal', 'vertical', 'start', 'end']);
14
+ function getAxisZoomSliderHandleUtilityClass(slot) {
15
+ return (0, _generateUtilityClass.default)('MuiChartAxisZoomSliderHandle', slot);
16
+ }
17
+ const useUtilityClasses = ownerState => {
18
+ const {
19
+ orientation,
20
+ placement
21
+ } = ownerState;
22
+ const slots = {
23
+ root: ['root', orientation === 'horizontal' ? 'horizontal' : 'vertical', placement === 'start' ? 'start' : 'end']
24
+ };
25
+ return (0, _composeClasses.default)(slots, getAxisZoomSliderHandleUtilityClass);
26
+ };
27
+ exports.useUtilityClasses = useUtilityClasses;
@@ -0,0 +1,2 @@
1
+ import * as React from 'react';
2
+ export declare function ChartsToolbarPro(): React.JSX.Element | null;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ChartsToolbarPro = ChartsToolbarPro;
8
+ var _Toolbar = require("@mui/x-charts/Toolbar");
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _internals = require("@mui/x-charts/internals");
11
+ var _useChartProZoom = require("../internals/plugins/useChartProZoom");
12
+ var _ChartsToolbarZoomInButton = require("./internal/ChartsToolbarZoomInButton");
13
+ var _ChartsToolbarZoomOutButton = require("./internal/ChartsToolbarZoomOutButton");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ function ChartsToolbarPro() {
16
+ const {
17
+ store
18
+ } = (0, _internals.useChartContext)();
19
+ const isZoomEnabled = (0, _internals.useSelector)(store, _useChartProZoom.selectorChartZoomIsEnabled);
20
+ const children = [];
21
+ if (isZoomEnabled) {
22
+ children.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarZoomInButton.ChartsToolbarZoomInButton, {}, "zoom-in"));
23
+ children.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarZoomOutButton.ChartsToolbarZoomOutButton, {}, "zoom-out"));
24
+ }
25
+ if (children.length === 0) {
26
+ return null;
27
+ }
28
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.Toolbar, {
29
+ children: children
30
+ });
31
+ }
@@ -0,0 +1 @@
1
+ export * from "./ChartsToolbarPro.js";
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _ChartsToolbarPro = require("./ChartsToolbarPro");
7
+ Object.keys(_ChartsToolbarPro).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _ChartsToolbarPro[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _ChartsToolbarPro[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { ChartsSlotsPro } from "../../internals/material/index.js";
3
+ type ChartsToolbarZoomInButtonSlots = Partial<Pick<ChartsSlotsPro, 'baseTooltip' | 'zoomInIcon'>>;
4
+ type ChartsToolbarZoomInButtonSlotProps = { [K in keyof Required<ChartsToolbarZoomInButtonSlots>]: React.ComponentProps<Required<ChartsToolbarZoomInButtonSlots>[K]> };
5
+ interface ChartsToolbarZoomInButtonProps {
6
+ slots?: ChartsToolbarZoomInButtonSlots;
7
+ slotProps?: ChartsToolbarZoomInButtonSlotProps;
8
+ }
9
+ export declare function ChartsToolbarZoomInButton({
10
+ slots,
11
+ slotProps
12
+ }: ChartsToolbarZoomInButtonProps): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChartsToolbarZoomInButton = ChartsToolbarZoomInButton;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _Toolbar = require("@mui/x-charts/Toolbar");
13
+ var _internals = require("@mui/x-charts/internals");
14
+ var _hooks = require("@mui/x-charts/hooks");
15
+ var _material = require("../../internals/material");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function ChartsToolbarZoomInButton({
18
+ slots,
19
+ slotProps
20
+ }) {
21
+ const {
22
+ instance
23
+ } = (0, _internals.useChartContext)();
24
+ const ZoomInIcon = slots?.zoomInIcon ?? _material.defaultSlotsMaterial.zoomInIcon;
25
+ const Tooltip = slots?.baseTooltip ?? _material.defaultSlotsMaterial.baseTooltip;
26
+ const {
27
+ localeText
28
+ } = (0, _hooks.useChartsLocalization)();
29
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, {
30
+ title: localeText.zoomIn,
31
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {
32
+ onClick: () => instance.zoomIn(),
33
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomInIcon, (0, _extends2.default)({}, slotProps?.zoomInIcon))
34
+ })
35
+ });
36
+ }
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { ChartsSlotsPro } from "../../internals/material/index.js";
3
+ type ChartsToolbarZoomOutButtonSlots = Partial<Pick<ChartsSlotsPro, 'baseTooltip' | 'zoomOutIcon'>>;
4
+ type ChartsToolbarZoomOutButtonSlotProps = { [K in keyof Required<ChartsToolbarZoomOutButtonSlots>]: React.ComponentProps<Required<ChartsToolbarZoomOutButtonSlots>[K]> };
5
+ interface ChartsToolbarZoomOutButtonProps {
6
+ slots?: ChartsToolbarZoomOutButtonSlots;
7
+ slotProps?: ChartsToolbarZoomOutButtonSlotProps;
8
+ }
9
+ export declare function ChartsToolbarZoomOutButton({
10
+ slots,
11
+ slotProps
12
+ }: ChartsToolbarZoomOutButtonProps): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChartsToolbarZoomOutButton = ChartsToolbarZoomOutButton;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _Toolbar = require("@mui/x-charts/Toolbar");
13
+ var _internals = require("@mui/x-charts/internals");
14
+ var _hooks = require("@mui/x-charts/hooks");
15
+ var _material = require("../../internals/material");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function ChartsToolbarZoomOutButton({
18
+ slots,
19
+ slotProps
20
+ }) {
21
+ const {
22
+ instance
23
+ } = (0, _internals.useChartContext)();
24
+ const ZoomOutIcon = slots?.zoomOutIcon ?? _material.defaultSlotsMaterial.zoomOutIcon;
25
+ const Tooltip = slots?.baseTooltip ?? _material.defaultSlotsMaterial.baseTooltip;
26
+ const {
27
+ localeText
28
+ } = (0, _hooks.useChartsLocalization)();
29
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, {
30
+ title: localeText.zoomOut,
31
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {
32
+ onClick: () => instance.zoomOut(),
33
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomOutIcon, (0, _extends2.default)({}, slotProps?.zoomOutIcon))
34
+ })
35
+ });
36
+ }