@mui/x-charts-pro 8.3.0 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/BarChartPro/BarChartPro.js +37 -20
  2. package/CHANGELOG.md +206 -10
  3. package/ChartContainerPro/ChartContainerPro.js +1 -0
  4. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  5. package/ChartZoomSlider/index.d.ts +1 -1
  6. package/ChartZoomSlider/index.js +4 -4
  7. package/ChartZoomSlider/internals/ChartAxisZoomSlider.js +94 -60
  8. package/ChartZoomSlider/internals/ChartAxisZoomSliderThumb.d.ts +12 -0
  9. package/ChartZoomSlider/internals/ChartAxisZoomSliderThumb.js +92 -0
  10. package/ChartZoomSlider/internals/ChartsTooltipZoomSliderValue.d.ts +11 -0
  11. package/ChartZoomSlider/internals/ChartsTooltipZoomSliderValue.js +58 -0
  12. package/ChartZoomSlider/internals/chartAxisZoomSliderThumbClasses.d.ts +17 -0
  13. package/ChartZoomSlider/internals/{chartAxisZoomSliderHandleClasses.js → chartAxisZoomSliderThumbClasses.js} +6 -6
  14. package/FunnelChart/FunnelChart.js +4 -3
  15. package/FunnelChart/FunnelPlot.js +2 -0
  16. package/FunnelChart/FunnelSection.js +2 -1
  17. package/FunnelChart/curves/curve.types.d.ts +4 -0
  18. package/FunnelChart/curves/pyramid.d.ts +3 -1
  19. package/FunnelChart/curves/pyramid.js +37 -10
  20. package/FunnelChart/curves/step-pyramid.d.ts +10 -2
  21. package/FunnelChart/curves/step-pyramid.js +96 -20
  22. package/FunnelChart/curves/step.d.ts +5 -1
  23. package/FunnelChart/curves/step.js +20 -2
  24. package/FunnelChart/funnel.types.d.ts +7 -0
  25. package/FunnelChart/seriesConfig/seriesProcessor.js +47 -1
  26. package/Heatmap/Heatmap.d.ts +1 -1
  27. package/Heatmap/Heatmap.js +25 -21
  28. package/Heatmap/HeatmapTooltip/HeatmapTooltip.classes.d.ts +2 -0
  29. package/Heatmap/HeatmapTooltip/HeatmapTooltip.classes.js +27 -0
  30. package/Heatmap/HeatmapTooltip/HeatmapTooltip.d.ts +1 -10
  31. package/Heatmap/HeatmapTooltip/HeatmapTooltip.js +4 -102
  32. package/Heatmap/HeatmapTooltip/HeatmapTooltip.types.d.ts +10 -0
  33. package/Heatmap/HeatmapTooltip/HeatmapTooltip.types.js +5 -0
  34. package/Heatmap/HeatmapTooltip/HeatmapTooltipContent.d.ts +7 -0
  35. package/Heatmap/HeatmapTooltip/HeatmapTooltipContent.js +96 -0
  36. package/Heatmap/HeatmapTooltip/index.d.ts +3 -1
  37. package/Heatmap/HeatmapTooltip/index.js +11 -0
  38. package/LineChartPro/LineChartPro.js +37 -20
  39. package/ScatterChartPro/ScatterChartPro.js +38 -21
  40. package/esm/BarChartPro/BarChartPro.js +35 -18
  41. package/esm/ChartContainerPro/ChartContainerPro.js +1 -0
  42. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  43. package/esm/ChartZoomSlider/index.d.ts +1 -1
  44. package/esm/ChartZoomSlider/index.js +1 -1
  45. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.js +94 -60
  46. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderThumb.d.ts +12 -0
  47. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderThumb.js +85 -0
  48. package/esm/ChartZoomSlider/internals/ChartsTooltipZoomSliderValue.d.ts +11 -0
  49. package/esm/ChartZoomSlider/internals/ChartsTooltipZoomSliderValue.js +52 -0
  50. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderThumbClasses.d.ts +17 -0
  51. package/esm/ChartZoomSlider/internals/{chartAxisZoomSliderHandleClasses.js → chartAxisZoomSliderThumbClasses.js} +4 -4
  52. package/esm/FunnelChart/FunnelChart.js +4 -3
  53. package/esm/FunnelChart/FunnelPlot.js +2 -0
  54. package/esm/FunnelChart/FunnelSection.js +1 -0
  55. package/esm/FunnelChart/curves/curve.types.d.ts +4 -0
  56. package/esm/FunnelChart/curves/pyramid.d.ts +3 -1
  57. package/esm/FunnelChart/curves/pyramid.js +37 -10
  58. package/esm/FunnelChart/curves/step-pyramid.d.ts +10 -2
  59. package/esm/FunnelChart/curves/step-pyramid.js +96 -20
  60. package/esm/FunnelChart/curves/step.d.ts +5 -1
  61. package/esm/FunnelChart/curves/step.js +20 -2
  62. package/esm/FunnelChart/funnel.types.d.ts +7 -0
  63. package/esm/FunnelChart/seriesConfig/seriesProcessor.js +47 -1
  64. package/esm/Heatmap/Heatmap.d.ts +1 -1
  65. package/esm/Heatmap/Heatmap.js +23 -19
  66. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.classes.d.ts +2 -0
  67. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.classes.js +19 -0
  68. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.d.ts +1 -10
  69. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.js +5 -103
  70. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.types.d.ts +10 -0
  71. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.types.js +1 -0
  72. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltipContent.d.ts +7 -0
  73. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltipContent.js +89 -0
  74. package/esm/Heatmap/HeatmapTooltip/index.d.ts +3 -1
  75. package/esm/Heatmap/HeatmapTooltip/index.js +3 -1
  76. package/esm/LineChartPro/LineChartPro.js +35 -18
  77. package/esm/ScatterChartPro/ScatterChartPro.js +36 -19
  78. package/esm/index.d.ts +1 -1
  79. package/esm/index.js +1 -3
  80. package/esm/internals/plugins/useChartProExport/exportImage.js +1 -1
  81. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +2 -2
  82. package/index.d.ts +1 -1
  83. package/index.js +1 -68
  84. package/internals/plugins/useChartProExport/exportImage.js +1 -1
  85. package/internals/plugins/useChartProZoom/useChartProZoom.js +2 -2
  86. package/package.json +5 -5
  87. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +0 -12
  88. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +0 -92
  89. package/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +0 -17
  90. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +0 -12
  91. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +0 -85
  92. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +0 -17
@@ -15,17 +15,18 @@ var _internals = require("@mui/x-charts/internals");
15
15
  var _styles = require("@mui/material/styles");
16
16
  var _hooks = require("@mui/x-charts/hooks");
17
17
  var _rafThrottle = require("@mui/x-internals/rafThrottle");
18
+ var _ChartsTooltipZoomSliderValue = require("./ChartsTooltipZoomSliderValue");
18
19
  var _useChartProZoom = require("../../internals/plugins/useChartProZoom");
19
- var _ChartAxisZoomSliderHandle = require("./ChartAxisZoomSliderHandle");
20
+ var _ChartAxisZoomSliderThumb = require("./ChartAxisZoomSliderThumb");
20
21
  var _jsxRuntime = require("react/jsx-runtime");
21
- const BackgroundRect = (0, _styles.styled)('rect')(({
22
+ const ZoomSliderTrack = (0, _styles.styled)('rect')(({
22
23
  theme
23
24
  }) => ({
24
25
  '&': {
25
26
  fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[800] : (theme.vars || theme).palette.grey[300]
26
27
  }
27
28
  }));
28
- const ZoomRangePreviewRect = (0, _styles.styled)('rect')(({
29
+ const ZoomSliderActiveTrackRect = (0, _styles.styled)('rect')(({
29
30
  theme
30
31
  }) => ({
31
32
  '&': {
@@ -33,11 +34,11 @@ const ZoomRangePreviewRect = (0, _styles.styled)('rect')(({
33
34
  cursor: 'grab'
34
35
  }
35
36
  }));
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);
37
+ const ZOOM_SLIDER_TRACK_SIZE = 8;
38
+ const ZOOM_SLIDER_ACTIVE_TRACK_SIZE = 10;
39
+ const ZOOM_SLIDER_THUMB_HEIGHT = 20;
40
+ const ZOOM_SLIDER_THUMB_WIDTH = 10;
41
+ const ZOOM_SLIDER_SIZE = Math.max(ZOOM_SLIDER_TRACK_SIZE, ZOOM_SLIDER_ACTIVE_TRACK_SIZE, ZOOM_SLIDER_THUMB_HEIGHT, ZOOM_SLIDER_THUMB_WIDTH);
41
42
 
42
43
  /**
43
44
  * Renders the zoom slider for a specific axis.
@@ -62,48 +63,58 @@ function ChartAxisZoomSlider({
62
63
  let x;
63
64
  let y;
64
65
  let reverse;
66
+ let axisPosition;
65
67
  if (axisDirection === 'x') {
66
68
  const axis = xAxis[axisId];
67
- if (!axis) {
69
+ if (!axis || axis.position === 'none') {
68
70
  return null;
69
71
  }
70
72
  const axisSize = axis.height;
71
73
  x = drawingArea.left;
72
74
  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
75
  reverse = axis.reverse ?? false;
76
+ axisPosition = axis.position ?? 'bottom';
74
77
  } else {
75
78
  const axis = yAxis[axisId];
76
- if (!axis) {
79
+ if (!axis || axis.position === 'none') {
77
80
  return null;
78
81
  }
79
82
  const axisSize = axis.width;
80
83
  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
84
  y = drawingArea.top;
82
85
  reverse = axis.reverse ?? false;
86
+ axisPosition = axis.position ?? 'left';
83
87
  }
84
- const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_BACKGROUND_SIZE) / 2;
88
+ const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_TRACK_SIZE) / 2;
85
89
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
86
90
  transform: `translate(${x} ${y})`,
87
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(BackgroundRect, {
91
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomSliderTrack, {
88
92
  x: axisDirection === 'x' ? 0 : backgroundRectOffset,
89
93
  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, {
94
+ height: axisDirection === 'x' ? ZOOM_SLIDER_TRACK_SIZE : drawingArea.height,
95
+ width: axisDirection === 'x' ? drawingArea.width : ZOOM_SLIDER_TRACK_SIZE,
96
+ rx: ZOOM_SLIDER_TRACK_SIZE / 2,
97
+ ry: ZOOM_SLIDER_TRACK_SIZE / 2
98
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(ChartAxisZoomSliderActiveTrack, {
95
99
  zoomData: zoomData,
96
100
  axisId: axisId,
101
+ axisPosition: axisPosition,
97
102
  axisDirection: axisDirection,
98
103
  reverse: reverse
99
104
  })]
100
105
  });
101
106
  }
102
- function ChartAxisZoomSliderSpan({
107
+ const formatter = Intl.NumberFormat(undefined, {
108
+ maximumFractionDigits: 0
109
+ });
110
+ const zoomValueFormatter = value => formatter.format(value);
111
+ function ChartAxisZoomSliderActiveTrack({
103
112
  axisId,
104
113
  axisDirection,
114
+ axisPosition,
105
115
  zoomData,
106
- reverse
116
+ reverse,
117
+ valueFormatter = zoomValueFormatter
107
118
  }) {
108
119
  const {
109
120
  instance,
@@ -112,8 +123,11 @@ function ChartAxisZoomSliderSpan({
112
123
  const store = (0, _internals.useStore)();
113
124
  const drawingArea = (0, _internals.useDrawingArea)();
114
125
  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;
126
+ const [startThumbEl, setStartThumbEl] = React.useState(null);
127
+ const [endThumbEl, setEndThumbEl] = React.useState(null);
128
+ const [showTooltip, setShowTooltip] = React.useState(null);
129
+ const previewThumbWidth = axisDirection === 'x' ? ZOOM_SLIDER_THUMB_WIDTH : ZOOM_SLIDER_THUMB_HEIGHT;
130
+ const previewThumbHeight = axisDirection === 'x' ? ZOOM_SLIDER_THUMB_HEIGHT : ZOOM_SLIDER_THUMB_WIDTH;
117
131
  React.useEffect(() => {
118
132
  const activePreviewRect = activePreviewRectRef.current;
119
133
  if (!activePreviewRect) {
@@ -154,6 +168,7 @@ function ChartAxisZoomSliderSpan({
154
168
  const onPointerUp = () => {
155
169
  activePreviewRect.removeEventListener('pointermove', onPointerMove);
156
170
  activePreviewRect.removeEventListener('pointerup', onPointerUp);
171
+ setShowTooltip(null);
157
172
  };
158
173
  const onPointerDown = event => {
159
174
  // Prevent text selection when dragging
@@ -185,6 +200,7 @@ function ChartAxisZoomSliderSpan({
185
200
  prevPointerZoom = pointerDownZoom;
186
201
  pointerZoomMin = pointerDownZoom - axisZoomData.start;
187
202
  pointerZoomMax = 100 - (axisZoomData.end - pointerDownZoom);
203
+ setShowTooltip('both');
188
204
  activePreviewRect.addEventListener('pointerup', onPointerUp);
189
205
  activePreviewRect.addEventListener('pointermove', onPointerMove);
190
206
  };
@@ -196,7 +212,7 @@ function ChartAxisZoomSliderSpan({
196
212
  onPointerMove.clear();
197
213
  };
198
214
  }, [axisDirection, axisId, instance, reverse, store, svgRef]);
199
- const onResizeStart = event => {
215
+ const onStartThumbMove = event => {
200
216
  const element = svgRef.current;
201
217
  if (!element) {
202
218
  return;
@@ -229,7 +245,7 @@ function ChartAxisZoomSliderSpan({
229
245
  });
230
246
  });
231
247
  };
232
- const onResizeEnd = event => {
248
+ const onEndThumbMove = event => {
233
249
  const element = svgRef.current;
234
250
  if (!element) {
235
251
  return;
@@ -266,67 +282,85 @@ function ChartAxisZoomSliderSpan({
266
282
  let previewY;
267
283
  let previewWidth;
268
284
  let previewHeight;
269
- let startHandleX;
270
- let startHandleY;
271
- let endHandleX;
272
- let endHandleY;
285
+ let startThumbX;
286
+ let startThumbY;
287
+ let endThumbX;
288
+ let endThumbY;
273
289
  if (axisDirection === 'x') {
274
290
  previewX = zoomData.start / 100 * drawingArea.width;
275
291
  previewY = 0;
276
292
  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;
293
+ previewHeight = ZOOM_SLIDER_ACTIVE_TRACK_SIZE;
294
+ startThumbX = zoomData.start / 100 * drawingArea.width;
295
+ startThumbY = 0;
296
+ endThumbX = zoomData.end / 100 * drawingArea.width;
297
+ endThumbY = 0;
282
298
  if (reverse) {
283
299
  previewX = drawingArea.width - previewX - previewWidth;
284
- startHandleX = drawingArea.width - startHandleX;
285
- endHandleX = drawingArea.width - endHandleX;
300
+ startThumbX = drawingArea.width - startThumbX;
301
+ endThumbX = drawingArea.width - endThumbX;
286
302
  }
287
- startHandleX -= previewHandleWidth / 2;
288
- endHandleX -= previewHandleWidth / 2;
303
+ startThumbX -= previewThumbWidth / 2;
304
+ endThumbX -= previewThumbWidth / 2;
289
305
  } else {
290
306
  previewX = 0;
291
307
  previewY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
292
- previewWidth = ZOOM_SLIDER_FOREGROUND_SIZE;
308
+ previewWidth = ZOOM_SLIDER_ACTIVE_TRACK_SIZE;
293
309
  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;
310
+ startThumbX = 0;
311
+ startThumbY = drawingArea.height - zoomData.start / 100 * drawingArea.height;
312
+ endThumbX = 0;
313
+ endThumbY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
298
314
  if (reverse) {
299
315
  previewY = drawingArea.height - previewY - previewHeight;
300
- startHandleY = drawingArea.height - startHandleY;
301
- endHandleY = drawingArea.height - endHandleY;
316
+ startThumbY = drawingArea.height - startThumbY;
317
+ endThumbY = drawingArea.height - endThumbY;
302
318
  }
303
- startHandleY -= previewHandleHeight / 2;
304
- endHandleY -= previewHandleHeight / 2;
319
+ startThumbY -= previewThumbHeight / 2;
320
+ endThumbY -= previewThumbHeight / 2;
305
321
  }
306
- const previewOffset = (ZOOM_SLIDER_HANDLE_HEIGHT - ZOOM_SLIDER_FOREGROUND_SIZE) / 2;
322
+ const previewOffset = (ZOOM_SLIDER_THUMB_HEIGHT - ZOOM_SLIDER_ACTIVE_TRACK_SIZE) / 2;
307
323
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
308
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomRangePreviewRect, {
324
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomSliderActiveTrackRect, {
309
325
  ref: activePreviewRectRef,
310
326
  x: previewX + (axisDirection === 'x' ? 0 : previewOffset),
311
327
  y: previewY + (axisDirection === 'x' ? previewOffset : 0),
312
328
  width: previewWidth,
313
- height: previewHeight
314
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderHandle.ChartAxisZoomSliderHandle, {
315
- x: startHandleX,
316
- y: startHandleY,
317
- width: previewHandleWidth,
318
- height: previewHandleHeight,
329
+ height: previewHeight,
330
+ onPointerEnter: () => setShowTooltip('both'),
331
+ onPointerLeave: () => setShowTooltip(null)
332
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderThumb.ChartAxisZoomSliderThumb, {
333
+ ref: setStartThumbEl,
334
+ x: startThumbX,
335
+ y: startThumbY,
336
+ width: previewThumbWidth,
337
+ height: previewThumbHeight,
319
338
  orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
320
- onResize: onResizeStart,
339
+ onMove: onStartThumbMove,
340
+ onPointerEnter: () => setShowTooltip('start'),
341
+ onPointerLeave: () => setShowTooltip(null),
321
342
  placement: "start"
322
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderHandle.ChartAxisZoomSliderHandle, {
323
- x: endHandleX,
324
- y: endHandleY,
325
- width: previewHandleWidth,
326
- height: previewHandleHeight,
343
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderThumb.ChartAxisZoomSliderThumb, {
344
+ ref: setEndThumbEl,
345
+ x: endThumbX,
346
+ y: endThumbY,
347
+ width: previewThumbWidth,
348
+ height: previewThumbHeight,
327
349
  orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
328
- onResize: onResizeEnd,
350
+ onMove: onEndThumbMove,
351
+ onPointerEnter: () => setShowTooltip('end'),
352
+ onPointerLeave: () => setShowTooltip(null),
329
353
  placement: "end"
354
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsTooltipZoomSliderValue.ChartsTooltipZoomSliderValue, {
355
+ anchorEl: startThumbEl,
356
+ open: showTooltip === 'start' || showTooltip === 'both',
357
+ placement: axisPosition,
358
+ children: valueFormatter(zoomData.start)
359
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsTooltipZoomSliderValue.ChartsTooltipZoomSliderValue, {
360
+ anchorEl: endThumbEl,
361
+ open: showTooltip === 'end' || showTooltip === 'both',
362
+ placement: axisPosition,
363
+ children: valueFormatter(zoomData.end)
330
364
  })]
331
365
  });
332
366
  }
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ export interface ChartZoomSliderThumbOwnerState {
3
+ onMove: (event: PointerEvent) => void;
4
+ orientation: 'horizontal' | 'vertical';
5
+ placement: 'start' | 'end';
6
+ }
7
+ export interface ChartZoomSliderThumbProps extends Omit<React.ComponentProps<'rect'>, 'orientation'>, ChartZoomSliderThumbOwnerState {}
8
+ /**
9
+ * Renders the zoom slider thumb, which is responsible for resizing the zoom range.
10
+ * @internal
11
+ */
12
+ export declare const ChartAxisZoomSliderThumb: React.ForwardRefExoticComponent<Omit<ChartZoomSliderThumbProps, "ref"> & 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.ChartAxisZoomSliderThumb = void 0;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
+ var React = _interopRequireWildcard(require("react"));
13
+ var _styles = require("@mui/material/styles");
14
+ var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
15
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
16
+ var _rafThrottle = require("@mui/x-internals/rafThrottle");
17
+ var _clsx = _interopRequireDefault(require("clsx"));
18
+ var _chartAxisZoomSliderThumbClasses = require("./chartAxisZoomSliderThumbClasses");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ const _excluded = ["className", "onMove", "orientation", "placement", "rx", "ry"];
21
+ const Rect = (0, _styles.styled)('rect')(({
22
+ theme
23
+ }) => ({
24
+ [`&.${_chartAxisZoomSliderThumbClasses.chartAxisZoomSliderThumbClasses.root}`]: {
25
+ fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[300] : (theme.vars || theme).palette.common.white,
26
+ stroke: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[600] : (theme.vars || theme).palette.grey[500]
27
+ },
28
+ [`&.${_chartAxisZoomSliderThumbClasses.chartAxisZoomSliderThumbClasses.horizontal}`]: {
29
+ cursor: 'ew-resize'
30
+ },
31
+ [`&.${_chartAxisZoomSliderThumbClasses.chartAxisZoomSliderThumbClasses.vertical}`]: {
32
+ cursor: 'ns-resize'
33
+ }
34
+ }));
35
+ /**
36
+ * Renders the zoom slider thumb, which is responsible for resizing the zoom range.
37
+ * @internal
38
+ */
39
+ const ChartAxisZoomSliderThumb = exports.ChartAxisZoomSliderThumb = /*#__PURE__*/React.forwardRef(function ChartAxisZoomSliderThumb(_ref, forwardedRef) {
40
+ let {
41
+ className,
42
+ onMove,
43
+ orientation,
44
+ placement,
45
+ rx = 4,
46
+ ry = 4
47
+ } = _ref,
48
+ rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
49
+ const classes = (0, _chartAxisZoomSliderThumbClasses.useUtilityClasses)({
50
+ onMove,
51
+ orientation,
52
+ placement
53
+ });
54
+ const thumbRef = React.useRef(null);
55
+ const ref = (0, _useForkRef.default)(thumbRef, forwardedRef);
56
+ const onMoveEvent = (0, _useEventCallback.default)(onMove);
57
+ React.useEffect(() => {
58
+ const thumb = thumbRef.current;
59
+ if (!thumb) {
60
+ return;
61
+ }
62
+ const onPointerMove = (0, _rafThrottle.rafThrottle)(event => {
63
+ onMoveEvent(event);
64
+ });
65
+ const onPointerUp = () => {
66
+ thumb.removeEventListener('pointermove', onPointerMove);
67
+ thumb.removeEventListener('pointerup', onPointerUp);
68
+ };
69
+ const onPointerDown = event => {
70
+ // Prevent text selection when dragging the thumb
71
+ event.preventDefault();
72
+ event.stopPropagation();
73
+ thumb.setPointerCapture(event.pointerId);
74
+ thumb.addEventListener('pointerup', onPointerUp);
75
+ thumb.addEventListener('pointermove', onPointerMove);
76
+ };
77
+ thumb.addEventListener('pointerdown', onPointerDown);
78
+
79
+ // eslint-disable-next-line consistent-return
80
+ return () => {
81
+ thumb.removeEventListener('pointerdown', onPointerDown);
82
+ onPointerMove.clear();
83
+ };
84
+ }, [onMoveEvent, orientation]);
85
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Rect, (0, _extends2.default)({
86
+ className: (0, _clsx.default)(classes.root, className),
87
+ ref: ref,
88
+ rx: rx,
89
+ ry: ry
90
+ }, rest));
91
+ });
92
+ if (process.env.NODE_ENV !== "production") ChartAxisZoomSliderThumb.displayName = "ChartAxisZoomSliderThumb";
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import { PopperProps } from '@mui/material/Popper';
3
+ interface ChartsTooltipZoomSliderValueProps extends Pick<PopperProps, 'anchorEl' | 'open' | 'modifiers' | 'placement'>, React.PropsWithChildren {}
4
+ export declare function ChartsTooltipZoomSliderValue({
5
+ anchorEl,
6
+ open,
7
+ placement,
8
+ modifiers,
9
+ children
10
+ }: ChartsTooltipZoomSliderValueProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ChartsTooltipZoomSliderValue = ChartsTooltipZoomSliderValue;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _NoSsr = _interopRequireDefault(require("@mui/material/NoSsr"));
11
+ var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
12
+ var _ChartsTooltip = require("@mui/x-charts/ChartsTooltip");
13
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
14
+ var _styles = require("@mui/material/styles");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ /**
17
+ * The root component of the zoom slider tooltip.
18
+ * @ignore - internal component.
19
+ */const ChartsZoomSliderTooltipRoot = (0, _styles.styled)(_Popper.default, {
20
+ name: 'MuiChartsZoomSliderTooltip',
21
+ slot: 'Root'
22
+ })(({
23
+ theme
24
+ }) => ({
25
+ pointerEvents: 'none',
26
+ zIndex: theme.zIndex.modal
27
+ }));
28
+ const MODIFIERS = [{
29
+ name: 'offset',
30
+ options: {
31
+ offset: [0, 4]
32
+ }
33
+ }];
34
+ function ChartsTooltipZoomSliderValue({
35
+ anchorEl,
36
+ open,
37
+ placement,
38
+ modifiers = MODIFIERS,
39
+ children
40
+ }) {
41
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_NoSsr.default, {
42
+ children: open ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ChartsZoomSliderTooltipRoot, {
43
+ open: open,
44
+ anchorEl: anchorEl,
45
+ placement: placement,
46
+ modifiers: modifiers,
47
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsTooltip.ChartsTooltipPaper, {
48
+ sx: {
49
+ paddingX: 0.5
50
+ },
51
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
52
+ variant: "caption",
53
+ children: children
54
+ })
55
+ })
56
+ }) : null
57
+ });
58
+ }
@@ -0,0 +1,17 @@
1
+ import type { ChartZoomSliderThumbOwnerState } from "./ChartAxisZoomSliderThumb.js";
2
+ export interface ChartAxisZoomSliderThumbClasses {
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 thumb. */
10
+ start: string;
11
+ /** Styles applied to the root element when it is an end thumb. */
12
+ end: string;
13
+ }
14
+ export type ChartAxisZoomSliderThumbClassKey = keyof ChartAxisZoomSliderThumbClasses;
15
+ export declare const chartAxisZoomSliderThumbClasses: ChartAxisZoomSliderThumbClasses;
16
+ export declare function getAxisZoomSliderThumbUtilityClass(slot: string): string;
17
+ export declare const useUtilityClasses: (ownerState: ChartZoomSliderThumbOwnerState) => Record<"root", string>;
@@ -4,15 +4,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.chartAxisZoomSliderHandleClasses = void 0;
8
- exports.getAxisZoomSliderHandleUtilityClass = getAxisZoomSliderHandleUtilityClass;
7
+ exports.chartAxisZoomSliderThumbClasses = void 0;
8
+ exports.getAxisZoomSliderThumbUtilityClass = getAxisZoomSliderThumbUtilityClass;
9
9
  exports.useUtilityClasses = void 0;
10
10
  var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generateUtilityClasses"));
11
11
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
12
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);
13
+ const chartAxisZoomSliderThumbClasses = exports.chartAxisZoomSliderThumbClasses = (0, _generateUtilityClasses.default)('MuiChartAxisZoomSliderThumb', ['root', 'horizontal', 'vertical', 'start', 'end']);
14
+ function getAxisZoomSliderThumbUtilityClass(slot) {
15
+ return (0, _generateUtilityClass.default)('MuiChartAxisZoomSliderThumb', slot);
16
16
  }
17
17
  const useUtilityClasses = ownerState => {
18
18
  const {
@@ -22,6 +22,6 @@ const useUtilityClasses = ownerState => {
22
22
  const slots = {
23
23
  root: ['root', orientation === 'horizontal' ? 'horizontal' : 'vertical', placement === 'start' ? 'start' : 'end']
24
24
  };
25
- return (0, _composeClasses.default)(slots, getAxisZoomSliderHandleUtilityClass);
25
+ return (0, _composeClasses.default)(slots, getAxisZoomSliderThumbUtilityClass);
26
26
  };
27
27
  exports.useUtilityClasses = useUtilityClasses;
@@ -51,13 +51,14 @@ const FunnelChart = exports.FunnelChart = /*#__PURE__*/React.forwardRef(function
51
51
  seriesConfig: seriesConfig,
52
52
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_internals.ChartsWrapper, (0, _extends2.default)({}, chartsWrapperProps, {
53
53
  children: [!themedProps.hideLegend && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsLegend.ChartsLegend, (0, _extends2.default)({}, legendProps)), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ChartsSurface.ChartsSurface, (0, _extends2.default)({}, chartsSurfaceProps, {
54
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_FunnelPlot.FunnelPlot, (0, _extends2.default)({}, funnelPlotProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsOverlay.ChartsOverlay, (0, _extends2.default)({}, overlayProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxisHighlight.ChartsAxisHighlight, (0, _extends2.default)({}, axisHighlightProps)), !themedProps.loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, (0, _extends2.default)({}, themedProps.slotProps?.tooltip, {
55
- trigger: "item"
56
- })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxis.ChartsAxis, (0, _extends2.default)({}, chartsAxisProps)), children]
54
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_FunnelPlot.FunnelPlot, (0, _extends2.default)({}, funnelPlotProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsOverlay.ChartsOverlay, (0, _extends2.default)({}, overlayProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxisHighlight.ChartsAxisHighlight, (0, _extends2.default)({}, axisHighlightProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxis.ChartsAxis, (0, _extends2.default)({}, chartsAxisProps)), children]
55
+ })), !themedProps.loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, (0, _extends2.default)({}, themedProps.slotProps?.tooltip, {
56
+ trigger: "item"
57
57
  }))]
58
58
  }))
59
59
  }));
60
60
  });
61
+ if (process.env.NODE_ENV !== "production") FunnelChart.displayName = "FunnelChart";
61
62
  process.env.NODE_ENV !== "production" ? FunnelChart.propTypes = {
62
63
  // ----------------------------- Warning --------------------------------
63
64
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -86,12 +86,14 @@ const useAggregatedData = gap => {
86
86
  seriesId,
87
87
  value: currentSeries.data[dataIndex].value
88
88
  }) : currentSeries.sectionLabel;
89
+ const isIncreasing = currentSeries.dataDirection === 'increasing';
89
90
  const curve = (0, _curves.getFunnelCurve)(currentSeries.curve, {
90
91
  isHorizontal,
91
92
  gap,
92
93
  position: dataIndex,
93
94
  sections: currentSeries.dataPoints.length,
94
95
  borderRadius: currentSeries.borderRadius,
96
+ isIncreasing,
95
97
  min: minPoint,
96
98
  max: maxPoint
97
99
  });
@@ -64,4 +64,5 @@ const FunnelSection = exports.FunnelSection = (0, _internals.consumeSlots)('MuiF
64
64
  }, other, {
65
65
  ref: ref
66
66
  }));
67
- }));
67
+ }));
68
+ if (process.env.NODE_ENV !== "production") FunnelSection.displayName = "FunnelSection";
@@ -8,6 +8,10 @@ export type CurveOptions = {
8
8
  * Indicates if the main axis of the visualization.
9
9
  */
10
10
  isHorizontal?: boolean;
11
+ /**
12
+ * Indicates if the segments values are increasing or decreasing.
13
+ */
14
+ isIncreasing?: boolean;
11
15
  /**
12
16
  * The order position of the segment.
13
17
  */
@@ -11,6 +11,7 @@ export declare class Pyramid implements CurveGenerator {
11
11
  private position;
12
12
  private sections;
13
13
  private isHorizontal;
14
+ private isIncreasing;
14
15
  private gap;
15
16
  private borderRadius;
16
17
  private min;
@@ -23,7 +24,8 @@ export declare class Pyramid implements CurveGenerator {
23
24
  sections,
24
25
  borderRadius,
25
26
  min,
26
- max
27
+ max,
28
+ isIncreasing
27
29
  }: CurveOptions);
28
30
  areaStart(): void;
29
31
  areaEnd(): void;