@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
@@ -75,11 +75,12 @@ const BarChartPro = /*#__PURE__*/React.forwardRef(function BarChartPro(inProps,
75
75
  children: [showToolbar ? /*#__PURE__*/_jsx(ChartsToolbarPro, {}) : null, !props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), /*#__PURE__*/_jsxs(ChartsSurface, _extends({}, chartsSurfaceProps, {
76
76
  children: [/*#__PURE__*/_jsx(ChartsGrid, _extends({}, gridProps)), /*#__PURE__*/_jsxs("g", _extends({}, clipPathGroupProps, {
77
77
  children: [/*#__PURE__*/_jsx(BarPlot, _extends({}, barPlotProps)), /*#__PURE__*/_jsx(ChartsOverlay, _extends({}, overlayProps)), /*#__PURE__*/_jsx(ChartsAxisHighlight, _extends({}, axisHighlightProps))]
78
- })), /*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx(ChartZoomSlider, {}), !props.loading && /*#__PURE__*/_jsx(Tooltip, _extends({}, props.slotProps?.tooltip)), /*#__PURE__*/_jsx(ChartsClipPath, _extends({}, clipPathProps)), children]
79
- }))]
78
+ })), /*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx(ChartZoomSlider, {}), /*#__PURE__*/_jsx(ChartsClipPath, _extends({}, clipPathProps)), children]
79
+ })), !props.loading && /*#__PURE__*/_jsx(Tooltip, _extends({}, props.slotProps?.tooltip))]
80
80
  }))
81
81
  }));
82
82
  });
83
+ if (process.env.NODE_ENV !== "production") BarChartPro.displayName = "BarChartPro";
83
84
  process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
84
85
  // ----------------------------- Warning --------------------------------
85
86
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -318,7 +319,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
318
319
  minStart: PropTypes.number,
319
320
  panning: PropTypes.bool,
320
321
  slider: PropTypes.shape({
321
- enabled: PropTypes.bool
322
+ enabled: PropTypes.bool,
323
+ size: PropTypes.number
322
324
  }),
323
325
  step: PropTypes.number
324
326
  }), PropTypes.bool])
@@ -381,7 +383,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
381
383
  minStart: PropTypes.number,
382
384
  panning: PropTypes.bool,
383
385
  slider: PropTypes.shape({
384
- enabled: PropTypes.bool
386
+ enabled: PropTypes.bool,
387
+ size: PropTypes.number
385
388
  }),
386
389
  step: PropTypes.number
387
390
  }), PropTypes.bool])
@@ -439,7 +442,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
439
442
  minStart: PropTypes.number,
440
443
  panning: PropTypes.bool,
441
444
  slider: PropTypes.shape({
442
- enabled: PropTypes.bool
445
+ enabled: PropTypes.bool,
446
+ size: PropTypes.number
443
447
  }),
444
448
  step: PropTypes.number
445
449
  }), PropTypes.bool])
@@ -497,7 +501,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
497
501
  minStart: PropTypes.number,
498
502
  panning: PropTypes.bool,
499
503
  slider: PropTypes.shape({
500
- enabled: PropTypes.bool
504
+ enabled: PropTypes.bool,
505
+ size: PropTypes.number
501
506
  }),
502
507
  step: PropTypes.number
503
508
  }), PropTypes.bool])
@@ -555,7 +560,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
555
560
  minStart: PropTypes.number,
556
561
  panning: PropTypes.bool,
557
562
  slider: PropTypes.shape({
558
- enabled: PropTypes.bool
563
+ enabled: PropTypes.bool,
564
+ size: PropTypes.number
559
565
  }),
560
566
  step: PropTypes.number
561
567
  }), PropTypes.bool])
@@ -613,7 +619,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
613
619
  minStart: PropTypes.number,
614
620
  panning: PropTypes.bool,
615
621
  slider: PropTypes.shape({
616
- enabled: PropTypes.bool
622
+ enabled: PropTypes.bool,
623
+ size: PropTypes.number
617
624
  }),
618
625
  step: PropTypes.number
619
626
  }), PropTypes.bool])
@@ -671,7 +678,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
671
678
  minStart: PropTypes.number,
672
679
  panning: PropTypes.bool,
673
680
  slider: PropTypes.shape({
674
- enabled: PropTypes.bool
681
+ enabled: PropTypes.bool,
682
+ size: PropTypes.number
675
683
  }),
676
684
  step: PropTypes.number
677
685
  }), PropTypes.bool])
@@ -729,7 +737,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
729
737
  minStart: PropTypes.number,
730
738
  panning: PropTypes.bool,
731
739
  slider: PropTypes.shape({
732
- enabled: PropTypes.bool
740
+ enabled: PropTypes.bool,
741
+ size: PropTypes.number
733
742
  }),
734
743
  step: PropTypes.number
735
744
  }), PropTypes.bool])
@@ -799,7 +808,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
799
808
  minStart: PropTypes.number,
800
809
  panning: PropTypes.bool,
801
810
  slider: PropTypes.shape({
802
- enabled: PropTypes.bool
811
+ enabled: PropTypes.bool,
812
+ size: PropTypes.number
803
813
  }),
804
814
  step: PropTypes.number
805
815
  }), PropTypes.bool])
@@ -861,7 +871,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
861
871
  minStart: PropTypes.number,
862
872
  panning: PropTypes.bool,
863
873
  slider: PropTypes.shape({
864
- enabled: PropTypes.bool
874
+ enabled: PropTypes.bool,
875
+ size: PropTypes.number
865
876
  }),
866
877
  step: PropTypes.number
867
878
  }), PropTypes.bool])
@@ -918,7 +929,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
918
929
  minStart: PropTypes.number,
919
930
  panning: PropTypes.bool,
920
931
  slider: PropTypes.shape({
921
- enabled: PropTypes.bool
932
+ enabled: PropTypes.bool,
933
+ size: PropTypes.number
922
934
  }),
923
935
  step: PropTypes.number
924
936
  }), PropTypes.bool])
@@ -975,7 +987,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
975
987
  minStart: PropTypes.number,
976
988
  panning: PropTypes.bool,
977
989
  slider: PropTypes.shape({
978
- enabled: PropTypes.bool
990
+ enabled: PropTypes.bool,
991
+ size: PropTypes.number
979
992
  }),
980
993
  step: PropTypes.number
981
994
  }), PropTypes.bool])
@@ -1032,7 +1045,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1032
1045
  minStart: PropTypes.number,
1033
1046
  panning: PropTypes.bool,
1034
1047
  slider: PropTypes.shape({
1035
- enabled: PropTypes.bool
1048
+ enabled: PropTypes.bool,
1049
+ size: PropTypes.number
1036
1050
  }),
1037
1051
  step: PropTypes.number
1038
1052
  }), PropTypes.bool])
@@ -1089,7 +1103,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1089
1103
  minStart: PropTypes.number,
1090
1104
  panning: PropTypes.bool,
1091
1105
  slider: PropTypes.shape({
1092
- enabled: PropTypes.bool
1106
+ enabled: PropTypes.bool,
1107
+ size: PropTypes.number
1093
1108
  }),
1094
1109
  step: PropTypes.number
1095
1110
  }), PropTypes.bool])
@@ -1146,7 +1161,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1146
1161
  minStart: PropTypes.number,
1147
1162
  panning: PropTypes.bool,
1148
1163
  slider: PropTypes.shape({
1149
- enabled: PropTypes.bool
1164
+ enabled: PropTypes.bool,
1165
+ size: PropTypes.number
1150
1166
  }),
1151
1167
  step: PropTypes.number
1152
1168
  }), PropTypes.bool])
@@ -1203,7 +1219,8 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1203
1219
  minStart: PropTypes.number,
1204
1220
  panning: PropTypes.bool,
1205
1221
  slider: PropTypes.shape({
1206
- enabled: PropTypes.bool
1222
+ enabled: PropTypes.bool,
1223
+ size: PropTypes.number
1207
1224
  }),
1208
1225
  step: PropTypes.number
1209
1226
  }), PropTypes.bool])
@@ -45,6 +45,7 @@ const ChartContainerPro = /*#__PURE__*/React.forwardRef(function ChartContainerP
45
45
  });
46
46
 
47
47
  // @ts-expect-error the type coercion breaks the prop types
48
+ if (process.env.NODE_ENV !== "production") ChartContainerPro.displayName = "ChartContainerPro";
48
49
  process.env.NODE_ENV !== "production" ? ChartContainerPro.propTypes = {
49
50
  // ----------------------------- Warning --------------------------------
50
51
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -10,7 +10,7 @@ import { useLicenseVerifier } from '@mui/x-license/useLicenseVerifier';
10
10
  import { DEFAULT_PLUGINS } from "../internals/plugins/allPlugins.js";
11
11
  import { useChartDataProviderProProps } from "./useChartDataProviderProProps.js";
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- const releaseInfo = "MTc0NjY1NTIwMDAwMA==";
13
+ const releaseInfo = "MTc0Nzc3ODQwMDAwMA==";
14
14
  const packageIdentifier = 'x-charts-pro';
15
15
  /**
16
16
  * Orchestrates the data providers for the chart components and hooks.
@@ -1,2 +1,2 @@
1
1
  export * from "./ChartZoomSlider.js";
2
- export { type ChartAxisZoomSliderHandleClasses, type ChartAxisZoomSliderHandleClassKey, chartAxisZoomSliderHandleClasses } from "./internals/chartAxisZoomSliderHandleClasses.js";
2
+ export { type ChartAxisZoomSliderThumbClasses, type ChartAxisZoomSliderThumbClassKey, chartAxisZoomSliderThumbClasses } from "./internals/chartAxisZoomSliderThumbClasses.js";
@@ -1,2 +1,2 @@
1
1
  export * from "./ChartZoomSlider.js";
2
- export { chartAxisZoomSliderHandleClasses } from "./internals/chartAxisZoomSliderHandleClasses.js";
2
+ export { chartAxisZoomSliderThumbClasses } from "./internals/chartAxisZoomSliderThumbClasses.js";
@@ -6,17 +6,18 @@ import { getSVGPoint, selectorChartAxisZoomOptionsLookup, selectorChartDrawingAr
6
6
  import { styled } from '@mui/material/styles';
7
7
  import { useXAxes, useYAxes } from '@mui/x-charts/hooks';
8
8
  import { rafThrottle } from '@mui/x-internals/rafThrottle';
9
+ import { ChartsTooltipZoomSliderValue } from "./ChartsTooltipZoomSliderValue.js";
9
10
  import { selectorChartAxisZoomData } from "../../internals/plugins/useChartProZoom/index.js";
10
- import { ChartAxisZoomSliderHandle } from "./ChartAxisZoomSliderHandle.js";
11
+ import { ChartAxisZoomSliderThumb } from "./ChartAxisZoomSliderThumb.js";
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
- const BackgroundRect = styled('rect')(({
13
+ const ZoomSliderTrack = styled('rect')(({
13
14
  theme
14
15
  }) => ({
15
16
  '&': {
16
17
  fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[800] : (theme.vars || theme).palette.grey[300]
17
18
  }
18
19
  }));
19
- const ZoomRangePreviewRect = styled('rect')(({
20
+ const ZoomSliderActiveTrackRect = styled('rect')(({
20
21
  theme
21
22
  }) => ({
22
23
  '&': {
@@ -24,11 +25,11 @@ const ZoomRangePreviewRect = styled('rect')(({
24
25
  cursor: 'grab'
25
26
  }
26
27
  }));
27
- const ZOOM_SLIDER_BACKGROUND_SIZE = 8;
28
- const ZOOM_SLIDER_FOREGROUND_SIZE = 10;
29
- const ZOOM_SLIDER_HANDLE_HEIGHT = 20;
30
- const ZOOM_SLIDER_HANDLE_WIDTH = 10;
31
- const ZOOM_SLIDER_SIZE = Math.max(ZOOM_SLIDER_BACKGROUND_SIZE, ZOOM_SLIDER_FOREGROUND_SIZE, ZOOM_SLIDER_HANDLE_HEIGHT, ZOOM_SLIDER_HANDLE_WIDTH);
28
+ const ZOOM_SLIDER_TRACK_SIZE = 8;
29
+ const ZOOM_SLIDER_ACTIVE_TRACK_SIZE = 10;
30
+ const ZOOM_SLIDER_THUMB_HEIGHT = 20;
31
+ const ZOOM_SLIDER_THUMB_WIDTH = 10;
32
+ const ZOOM_SLIDER_SIZE = Math.max(ZOOM_SLIDER_TRACK_SIZE, ZOOM_SLIDER_ACTIVE_TRACK_SIZE, ZOOM_SLIDER_THUMB_HEIGHT, ZOOM_SLIDER_THUMB_WIDTH);
32
33
 
33
34
  /**
34
35
  * Renders the zoom slider for a specific axis.
@@ -53,48 +54,58 @@ export function ChartAxisZoomSlider({
53
54
  let x;
54
55
  let y;
55
56
  let reverse;
57
+ let axisPosition;
56
58
  if (axisDirection === 'x') {
57
59
  const axis = xAxis[axisId];
58
- if (!axis) {
60
+ if (!axis || axis.position === 'none') {
59
61
  return null;
60
62
  }
61
63
  const axisSize = axis.height;
62
64
  x = drawingArea.left;
63
65
  y = axis.position === 'bottom' ? drawingArea.top + drawingArea.height + axis.offset + axisSize + ZOOM_SLIDER_MARGIN : drawingArea.top - axis.offset - axisSize - ZOOM_SLIDER_SIZE - ZOOM_SLIDER_MARGIN;
64
66
  reverse = axis.reverse ?? false;
67
+ axisPosition = axis.position ?? 'bottom';
65
68
  } else {
66
69
  const axis = yAxis[axisId];
67
- if (!axis) {
70
+ if (!axis || axis.position === 'none') {
68
71
  return null;
69
72
  }
70
73
  const axisSize = axis.width;
71
74
  x = axis.position === 'right' ? drawingArea.left + drawingArea.width + axis.offset + axisSize + ZOOM_SLIDER_MARGIN : drawingArea.left - axis.offset - axisSize - ZOOM_SLIDER_SIZE - ZOOM_SLIDER_MARGIN;
72
75
  y = drawingArea.top;
73
76
  reverse = axis.reverse ?? false;
77
+ axisPosition = axis.position ?? 'left';
74
78
  }
75
- const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_BACKGROUND_SIZE) / 2;
79
+ const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_TRACK_SIZE) / 2;
76
80
  return /*#__PURE__*/_jsxs("g", {
77
81
  transform: `translate(${x} ${y})`,
78
- children: [/*#__PURE__*/_jsx(BackgroundRect, {
82
+ children: [/*#__PURE__*/_jsx(ZoomSliderTrack, {
79
83
  x: axisDirection === 'x' ? 0 : backgroundRectOffset,
80
84
  y: axisDirection === 'x' ? backgroundRectOffset : 0,
81
- height: axisDirection === 'x' ? ZOOM_SLIDER_BACKGROUND_SIZE : drawingArea.height,
82
- width: axisDirection === 'x' ? drawingArea.width : ZOOM_SLIDER_BACKGROUND_SIZE,
83
- rx: ZOOM_SLIDER_BACKGROUND_SIZE / 2,
84
- ry: ZOOM_SLIDER_BACKGROUND_SIZE / 2
85
- }), /*#__PURE__*/_jsx(ChartAxisZoomSliderSpan, {
85
+ height: axisDirection === 'x' ? ZOOM_SLIDER_TRACK_SIZE : drawingArea.height,
86
+ width: axisDirection === 'x' ? drawingArea.width : ZOOM_SLIDER_TRACK_SIZE,
87
+ rx: ZOOM_SLIDER_TRACK_SIZE / 2,
88
+ ry: ZOOM_SLIDER_TRACK_SIZE / 2
89
+ }), /*#__PURE__*/_jsx(ChartAxisZoomSliderActiveTrack, {
86
90
  zoomData: zoomData,
87
91
  axisId: axisId,
92
+ axisPosition: axisPosition,
88
93
  axisDirection: axisDirection,
89
94
  reverse: reverse
90
95
  })]
91
96
  });
92
97
  }
93
- function ChartAxisZoomSliderSpan({
98
+ const formatter = Intl.NumberFormat(undefined, {
99
+ maximumFractionDigits: 0
100
+ });
101
+ const zoomValueFormatter = value => formatter.format(value);
102
+ function ChartAxisZoomSliderActiveTrack({
94
103
  axisId,
95
104
  axisDirection,
105
+ axisPosition,
96
106
  zoomData,
97
- reverse
107
+ reverse,
108
+ valueFormatter = zoomValueFormatter
98
109
  }) {
99
110
  const {
100
111
  instance,
@@ -103,8 +114,11 @@ function ChartAxisZoomSliderSpan({
103
114
  const store = useStore();
104
115
  const drawingArea = useDrawingArea();
105
116
  const activePreviewRectRef = React.useRef(null);
106
- const previewHandleWidth = axisDirection === 'x' ? ZOOM_SLIDER_HANDLE_WIDTH : ZOOM_SLIDER_HANDLE_HEIGHT;
107
- const previewHandleHeight = axisDirection === 'x' ? ZOOM_SLIDER_HANDLE_HEIGHT : ZOOM_SLIDER_HANDLE_WIDTH;
117
+ const [startThumbEl, setStartThumbEl] = React.useState(null);
118
+ const [endThumbEl, setEndThumbEl] = React.useState(null);
119
+ const [showTooltip, setShowTooltip] = React.useState(null);
120
+ const previewThumbWidth = axisDirection === 'x' ? ZOOM_SLIDER_THUMB_WIDTH : ZOOM_SLIDER_THUMB_HEIGHT;
121
+ const previewThumbHeight = axisDirection === 'x' ? ZOOM_SLIDER_THUMB_HEIGHT : ZOOM_SLIDER_THUMB_WIDTH;
108
122
  React.useEffect(() => {
109
123
  const activePreviewRect = activePreviewRectRef.current;
110
124
  if (!activePreviewRect) {
@@ -145,6 +159,7 @@ function ChartAxisZoomSliderSpan({
145
159
  const onPointerUp = () => {
146
160
  activePreviewRect.removeEventListener('pointermove', onPointerMove);
147
161
  activePreviewRect.removeEventListener('pointerup', onPointerUp);
162
+ setShowTooltip(null);
148
163
  };
149
164
  const onPointerDown = event => {
150
165
  // Prevent text selection when dragging
@@ -176,6 +191,7 @@ function ChartAxisZoomSliderSpan({
176
191
  prevPointerZoom = pointerDownZoom;
177
192
  pointerZoomMin = pointerDownZoom - axisZoomData.start;
178
193
  pointerZoomMax = 100 - (axisZoomData.end - pointerDownZoom);
194
+ setShowTooltip('both');
179
195
  activePreviewRect.addEventListener('pointerup', onPointerUp);
180
196
  activePreviewRect.addEventListener('pointermove', onPointerMove);
181
197
  };
@@ -187,7 +203,7 @@ function ChartAxisZoomSliderSpan({
187
203
  onPointerMove.clear();
188
204
  };
189
205
  }, [axisDirection, axisId, instance, reverse, store, svgRef]);
190
- const onResizeStart = event => {
206
+ const onStartThumbMove = event => {
191
207
  const element = svgRef.current;
192
208
  if (!element) {
193
209
  return;
@@ -220,7 +236,7 @@ function ChartAxisZoomSliderSpan({
220
236
  });
221
237
  });
222
238
  };
223
- const onResizeEnd = event => {
239
+ const onEndThumbMove = event => {
224
240
  const element = svgRef.current;
225
241
  if (!element) {
226
242
  return;
@@ -257,67 +273,85 @@ function ChartAxisZoomSliderSpan({
257
273
  let previewY;
258
274
  let previewWidth;
259
275
  let previewHeight;
260
- let startHandleX;
261
- let startHandleY;
262
- let endHandleX;
263
- let endHandleY;
276
+ let startThumbX;
277
+ let startThumbY;
278
+ let endThumbX;
279
+ let endThumbY;
264
280
  if (axisDirection === 'x') {
265
281
  previewX = zoomData.start / 100 * drawingArea.width;
266
282
  previewY = 0;
267
283
  previewWidth = drawingArea.width * (zoomData.end - zoomData.start) / 100;
268
- previewHeight = ZOOM_SLIDER_FOREGROUND_SIZE;
269
- startHandleX = zoomData.start / 100 * drawingArea.width;
270
- startHandleY = 0;
271
- endHandleX = zoomData.end / 100 * drawingArea.width;
272
- endHandleY = 0;
284
+ previewHeight = ZOOM_SLIDER_ACTIVE_TRACK_SIZE;
285
+ startThumbX = zoomData.start / 100 * drawingArea.width;
286
+ startThumbY = 0;
287
+ endThumbX = zoomData.end / 100 * drawingArea.width;
288
+ endThumbY = 0;
273
289
  if (reverse) {
274
290
  previewX = drawingArea.width - previewX - previewWidth;
275
- startHandleX = drawingArea.width - startHandleX;
276
- endHandleX = drawingArea.width - endHandleX;
291
+ startThumbX = drawingArea.width - startThumbX;
292
+ endThumbX = drawingArea.width - endThumbX;
277
293
  }
278
- startHandleX -= previewHandleWidth / 2;
279
- endHandleX -= previewHandleWidth / 2;
294
+ startThumbX -= previewThumbWidth / 2;
295
+ endThumbX -= previewThumbWidth / 2;
280
296
  } else {
281
297
  previewX = 0;
282
298
  previewY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
283
- previewWidth = ZOOM_SLIDER_FOREGROUND_SIZE;
299
+ previewWidth = ZOOM_SLIDER_ACTIVE_TRACK_SIZE;
284
300
  previewHeight = drawingArea.height * (zoomData.end - zoomData.start) / 100;
285
- startHandleX = 0;
286
- startHandleY = drawingArea.height - zoomData.start / 100 * drawingArea.height;
287
- endHandleX = 0;
288
- endHandleY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
301
+ startThumbX = 0;
302
+ startThumbY = drawingArea.height - zoomData.start / 100 * drawingArea.height;
303
+ endThumbX = 0;
304
+ endThumbY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
289
305
  if (reverse) {
290
306
  previewY = drawingArea.height - previewY - previewHeight;
291
- startHandleY = drawingArea.height - startHandleY;
292
- endHandleY = drawingArea.height - endHandleY;
307
+ startThumbY = drawingArea.height - startThumbY;
308
+ endThumbY = drawingArea.height - endThumbY;
293
309
  }
294
- startHandleY -= previewHandleHeight / 2;
295
- endHandleY -= previewHandleHeight / 2;
310
+ startThumbY -= previewThumbHeight / 2;
311
+ endThumbY -= previewThumbHeight / 2;
296
312
  }
297
- const previewOffset = (ZOOM_SLIDER_HANDLE_HEIGHT - ZOOM_SLIDER_FOREGROUND_SIZE) / 2;
313
+ const previewOffset = (ZOOM_SLIDER_THUMB_HEIGHT - ZOOM_SLIDER_ACTIVE_TRACK_SIZE) / 2;
298
314
  return /*#__PURE__*/_jsxs(React.Fragment, {
299
- children: [/*#__PURE__*/_jsx(ZoomRangePreviewRect, {
315
+ children: [/*#__PURE__*/_jsx(ZoomSliderActiveTrackRect, {
300
316
  ref: activePreviewRectRef,
301
317
  x: previewX + (axisDirection === 'x' ? 0 : previewOffset),
302
318
  y: previewY + (axisDirection === 'x' ? previewOffset : 0),
303
319
  width: previewWidth,
304
- height: previewHeight
305
- }), /*#__PURE__*/_jsx(ChartAxisZoomSliderHandle, {
306
- x: startHandleX,
307
- y: startHandleY,
308
- width: previewHandleWidth,
309
- height: previewHandleHeight,
320
+ height: previewHeight,
321
+ onPointerEnter: () => setShowTooltip('both'),
322
+ onPointerLeave: () => setShowTooltip(null)
323
+ }), /*#__PURE__*/_jsx(ChartAxisZoomSliderThumb, {
324
+ ref: setStartThumbEl,
325
+ x: startThumbX,
326
+ y: startThumbY,
327
+ width: previewThumbWidth,
328
+ height: previewThumbHeight,
310
329
  orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
311
- onResize: onResizeStart,
330
+ onMove: onStartThumbMove,
331
+ onPointerEnter: () => setShowTooltip('start'),
332
+ onPointerLeave: () => setShowTooltip(null),
312
333
  placement: "start"
313
- }), /*#__PURE__*/_jsx(ChartAxisZoomSliderHandle, {
314
- x: endHandleX,
315
- y: endHandleY,
316
- width: previewHandleWidth,
317
- height: previewHandleHeight,
334
+ }), /*#__PURE__*/_jsx(ChartAxisZoomSliderThumb, {
335
+ ref: setEndThumbEl,
336
+ x: endThumbX,
337
+ y: endThumbY,
338
+ width: previewThumbWidth,
339
+ height: previewThumbHeight,
318
340
  orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
319
- onResize: onResizeEnd,
341
+ onMove: onEndThumbMove,
342
+ onPointerEnter: () => setShowTooltip('end'),
343
+ onPointerLeave: () => setShowTooltip(null),
320
344
  placement: "end"
345
+ }), /*#__PURE__*/_jsx(ChartsTooltipZoomSliderValue, {
346
+ anchorEl: startThumbEl,
347
+ open: showTooltip === 'start' || showTooltip === 'both',
348
+ placement: axisPosition,
349
+ children: valueFormatter(zoomData.start)
350
+ }), /*#__PURE__*/_jsx(ChartsTooltipZoomSliderValue, {
351
+ anchorEl: endThumbEl,
352
+ open: showTooltip === 'end' || showTooltip === 'both',
353
+ placement: axisPosition,
354
+ children: valueFormatter(zoomData.end)
321
355
  })]
322
356
  });
323
357
  }
@@ -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,85 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
+ const _excluded = ["className", "onMove", "orientation", "placement", "rx", "ry"];
6
+ import * as React from 'react';
7
+ import { styled } from '@mui/material/styles';
8
+ import useForkRef from '@mui/utils/useForkRef';
9
+ import useEventCallback from '@mui/utils/useEventCallback';
10
+ import { rafThrottle } from '@mui/x-internals/rafThrottle';
11
+ import clsx from 'clsx';
12
+ import { chartAxisZoomSliderThumbClasses, useUtilityClasses } from "./chartAxisZoomSliderThumbClasses.js";
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ const Rect = styled('rect')(({
15
+ theme
16
+ }) => ({
17
+ [`&.${chartAxisZoomSliderThumbClasses.root}`]: {
18
+ fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[300] : (theme.vars || theme).palette.common.white,
19
+ stroke: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[600] : (theme.vars || theme).palette.grey[500]
20
+ },
21
+ [`&.${chartAxisZoomSliderThumbClasses.horizontal}`]: {
22
+ cursor: 'ew-resize'
23
+ },
24
+ [`&.${chartAxisZoomSliderThumbClasses.vertical}`]: {
25
+ cursor: 'ns-resize'
26
+ }
27
+ }));
28
+ /**
29
+ * Renders the zoom slider thumb, which is responsible for resizing the zoom range.
30
+ * @internal
31
+ */
32
+ export const ChartAxisZoomSliderThumb = /*#__PURE__*/React.forwardRef(function ChartAxisZoomSliderThumb(_ref, forwardedRef) {
33
+ let {
34
+ className,
35
+ onMove,
36
+ orientation,
37
+ placement,
38
+ rx = 4,
39
+ ry = 4
40
+ } = _ref,
41
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
42
+ const classes = useUtilityClasses({
43
+ onMove,
44
+ orientation,
45
+ placement
46
+ });
47
+ const thumbRef = React.useRef(null);
48
+ const ref = useForkRef(thumbRef, forwardedRef);
49
+ const onMoveEvent = useEventCallback(onMove);
50
+ React.useEffect(() => {
51
+ const thumb = thumbRef.current;
52
+ if (!thumb) {
53
+ return;
54
+ }
55
+ const onPointerMove = rafThrottle(event => {
56
+ onMoveEvent(event);
57
+ });
58
+ const onPointerUp = () => {
59
+ thumb.removeEventListener('pointermove', onPointerMove);
60
+ thumb.removeEventListener('pointerup', onPointerUp);
61
+ };
62
+ const onPointerDown = event => {
63
+ // Prevent text selection when dragging the thumb
64
+ event.preventDefault();
65
+ event.stopPropagation();
66
+ thumb.setPointerCapture(event.pointerId);
67
+ thumb.addEventListener('pointerup', onPointerUp);
68
+ thumb.addEventListener('pointermove', onPointerMove);
69
+ };
70
+ thumb.addEventListener('pointerdown', onPointerDown);
71
+
72
+ // eslint-disable-next-line consistent-return
73
+ return () => {
74
+ thumb.removeEventListener('pointerdown', onPointerDown);
75
+ onPointerMove.clear();
76
+ };
77
+ }, [onMoveEvent, orientation]);
78
+ return /*#__PURE__*/_jsx(Rect, _extends({
79
+ className: clsx(classes.root, className),
80
+ ref: ref,
81
+ rx: rx,
82
+ ry: ry
83
+ }, rest));
84
+ });
85
+ 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,52 @@
1
+ import * as React from 'react';
2
+ import NoSsr from '@mui/material/NoSsr';
3
+ import Popper from '@mui/material/Popper';
4
+ import { ChartsTooltipPaper } from '@mui/x-charts/ChartsTooltip';
5
+ import Typography from '@mui/material/Typography';
6
+ import { styled } from '@mui/material/styles';
7
+
8
+ /**
9
+ * The root component of the zoom slider tooltip.
10
+ * @ignore - internal component.
11
+ */
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ const ChartsZoomSliderTooltipRoot = styled(Popper, {
14
+ name: 'MuiChartsZoomSliderTooltip',
15
+ slot: 'Root'
16
+ })(({
17
+ theme
18
+ }) => ({
19
+ pointerEvents: 'none',
20
+ zIndex: theme.zIndex.modal
21
+ }));
22
+ const MODIFIERS = [{
23
+ name: 'offset',
24
+ options: {
25
+ offset: [0, 4]
26
+ }
27
+ }];
28
+ export function ChartsTooltipZoomSliderValue({
29
+ anchorEl,
30
+ open,
31
+ placement,
32
+ modifiers = MODIFIERS,
33
+ children
34
+ }) {
35
+ return /*#__PURE__*/_jsx(NoSsr, {
36
+ children: open ? /*#__PURE__*/_jsx(ChartsZoomSliderTooltipRoot, {
37
+ open: open,
38
+ anchorEl: anchorEl,
39
+ placement: placement,
40
+ modifiers: modifiers,
41
+ children: /*#__PURE__*/_jsx(ChartsTooltipPaper, {
42
+ sx: {
43
+ paddingX: 0.5
44
+ },
45
+ children: /*#__PURE__*/_jsx(Typography, {
46
+ variant: "caption",
47
+ children: children
48
+ })
49
+ })
50
+ }) : null
51
+ });
52
+ }
@@ -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>;