@mui/x-charts-pro 8.4.0 → 8.5.1

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 (184) hide show
  1. package/BarChartPro/BarChartPro.d.ts +13 -5
  2. package/BarChartPro/BarChartPro.js +19 -1
  3. package/CHANGELOG.md +215 -0
  4. package/ChartContainerPro/ChartContainerPro.d.ts +0 -1
  5. package/ChartContainerPro/ChartProApi.d.ts +28 -0
  6. package/ChartContainerPro/ChartProApi.js +5 -0
  7. package/ChartContainerPro/index.d.ts +2 -1
  8. package/ChartContainerPro/index.js +11 -0
  9. package/ChartDataProviderPro/ChartDataProviderPro.d.ts +11 -1
  10. package/ChartDataProviderPro/ChartDataProviderPro.js +19 -3
  11. package/ChartDataProviderPro/useChartDataProviderProProps.d.ts +2 -0
  12. package/ChartDataProviderPro/useChartDataProviderProProps.js +5 -1
  13. package/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +1 -3
  14. package/ChartZoomSlider/internals/ChartAxisZoomSlider.js +25 -315
  15. package/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.d.ts +22 -0
  16. package/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.js +283 -0
  17. package/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.d.ts +18 -0
  18. package/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.js +138 -0
  19. package/ChartZoomSlider/internals/constants.d.ts +5 -0
  20. package/ChartZoomSlider/internals/constants.js +11 -0
  21. package/ChartZoomSlider/internals/zoom-utils.d.ts +4 -0
  22. package/ChartZoomSlider/internals/zoom-utils.js +48 -0
  23. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +5 -1
  24. package/ChartsToolbarPro/ChartsToolbarPro.js +35 -7
  25. package/ChartsToolbarPro/ChartsToolbarZoomInTrigger.d.ts +17 -0
  26. package/ChartsToolbarPro/ChartsToolbarZoomInTrigger.js +57 -0
  27. package/ChartsToolbarPro/ChartsToolbarZoomOutTrigger.d.ts +17 -0
  28. package/ChartsToolbarPro/ChartsToolbarZoomOutTrigger.js +57 -0
  29. package/ChartsToolbarPro/index.d.ts +3 -1
  30. package/ChartsToolbarPro/index.js +22 -0
  31. package/FunnelChart/FunnelChart.d.ts +2 -1
  32. package/FunnelChart/FunnelChart.js +2 -20
  33. package/FunnelChart/FunnelChart.plugins.d.ts +4 -0
  34. package/FunnelChart/FunnelChart.plugins.js +9 -0
  35. package/FunnelChart/FunnelPlot.js +10 -22
  36. package/FunnelChart/FunnelSection.d.ts +1 -1
  37. package/FunnelChart/FunnelSectionLabel.d.ts +21 -0
  38. package/FunnelChart/FunnelSectionLabel.js +52 -0
  39. package/FunnelChart/curves/bump.d.ts +10 -4
  40. package/FunnelChart/curves/bump.js +73 -41
  41. package/FunnelChart/curves/curve.types.d.ts +6 -1
  42. package/FunnelChart/curves/getFunnelCurve.js +3 -0
  43. package/FunnelChart/curves/linear.d.ts +9 -1
  44. package/FunnelChart/curves/linear.js +82 -5
  45. package/FunnelChart/funnel.types.d.ts +1 -0
  46. package/FunnelChart/funnelPlotSlots.types.d.ts +11 -0
  47. package/FunnelChart/funnelSectionClasses.d.ts +2 -0
  48. package/FunnelChart/funnelSectionClasses.js +17 -4
  49. package/FunnelChart/funnelSlots.types.d.ts +4 -3
  50. package/FunnelChart/index.d.ts +3 -1
  51. package/FunnelChart/index.js +18 -2
  52. package/FunnelChart/useFunnelChartProps.d.ts +2 -1
  53. package/FunnelChart/useFunnelChartProps.js +3 -1
  54. package/Heatmap/Heatmap.d.ts +22 -4
  55. package/Heatmap/Heatmap.js +64 -22
  56. package/Heatmap/Heatmap.plugins.d.ts +2 -1
  57. package/Heatmap/Heatmap.plugins.js +2 -1
  58. package/Heatmap/HeatmapTooltip/HeatmapTooltipAxesValue.d.ts +1 -1
  59. package/LineChartPro/LineChartPro.d.ts +13 -5
  60. package/LineChartPro/LineChartPro.js +19 -1
  61. package/PieChartPro/PieChartPro.d.ts +21 -0
  62. package/PieChartPro/PieChartPro.js +204 -0
  63. package/PieChartPro/PieChartPro.plugins.d.ts +4 -0
  64. package/PieChartPro/PieChartPro.plugins.js +9 -0
  65. package/PieChartPro/index.d.ts +1 -0
  66. package/PieChartPro/index.js +16 -0
  67. package/RadarChartPro/RadarChartPro.d.ts +15 -0
  68. package/RadarChartPro/RadarChartPro.js +202 -0
  69. package/RadarChartPro/RadarChartPro.plugins.d.ts +4 -0
  70. package/RadarChartPro/RadarChartPro.plugins.js +9 -0
  71. package/RadarChartPro/index.d.ts +1 -0
  72. package/RadarChartPro/index.js +16 -0
  73. package/ScatterChartPro/ScatterChartPro.d.ts +13 -5
  74. package/ScatterChartPro/ScatterChartPro.js +19 -1
  75. package/context/index.d.ts +1 -0
  76. package/context/index.js +16 -0
  77. package/context/useChartApiContext.d.ts +9 -0
  78. package/context/useChartApiContext.js +17 -0
  79. package/esm/BarChartPro/BarChartPro.d.ts +13 -5
  80. package/esm/BarChartPro/BarChartPro.js +19 -1
  81. package/esm/ChartContainerPro/ChartContainerPro.d.ts +0 -1
  82. package/esm/ChartContainerPro/ChartProApi.d.ts +28 -0
  83. package/esm/ChartContainerPro/ChartProApi.js +1 -0
  84. package/esm/ChartContainerPro/index.d.ts +2 -1
  85. package/esm/ChartContainerPro/index.js +2 -1
  86. package/esm/ChartDataProviderPro/ChartDataProviderPro.d.ts +11 -1
  87. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +20 -4
  88. package/esm/ChartDataProviderPro/useChartDataProviderProProps.d.ts +2 -0
  89. package/esm/ChartDataProviderPro/useChartDataProviderProProps.js +5 -1
  90. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +1 -3
  91. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.js +19 -306
  92. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.d.ts +22 -0
  93. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.js +275 -0
  94. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.d.ts +18 -0
  95. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.js +130 -0
  96. package/esm/ChartZoomSlider/internals/constants.d.ts +5 -0
  97. package/esm/ChartZoomSlider/internals/constants.js +5 -0
  98. package/esm/ChartZoomSlider/internals/zoom-utils.d.ts +4 -0
  99. package/esm/ChartZoomSlider/internals/zoom-utils.js +40 -0
  100. package/esm/ChartsToolbarPro/ChartsToolbarPro.d.ts +5 -1
  101. package/esm/ChartsToolbarPro/ChartsToolbarPro.js +36 -9
  102. package/esm/ChartsToolbarPro/ChartsToolbarZoomInTrigger.d.ts +17 -0
  103. package/esm/ChartsToolbarPro/ChartsToolbarZoomInTrigger.js +51 -0
  104. package/esm/ChartsToolbarPro/ChartsToolbarZoomOutTrigger.d.ts +17 -0
  105. package/esm/ChartsToolbarPro/ChartsToolbarZoomOutTrigger.js +51 -0
  106. package/esm/ChartsToolbarPro/index.d.ts +3 -1
  107. package/esm/ChartsToolbarPro/index.js +3 -1
  108. package/esm/FunnelChart/FunnelChart.d.ts +2 -1
  109. package/esm/FunnelChart/FunnelChart.js +2 -20
  110. package/esm/FunnelChart/FunnelChart.plugins.d.ts +4 -0
  111. package/esm/FunnelChart/FunnelChart.plugins.js +3 -0
  112. package/esm/FunnelChart/FunnelPlot.js +10 -22
  113. package/esm/FunnelChart/FunnelSection.d.ts +1 -1
  114. package/esm/FunnelChart/FunnelSectionLabel.d.ts +21 -0
  115. package/esm/FunnelChart/FunnelSectionLabel.js +46 -0
  116. package/esm/FunnelChart/curves/bump.d.ts +10 -4
  117. package/esm/FunnelChart/curves/bump.js +73 -41
  118. package/esm/FunnelChart/curves/curve.types.d.ts +6 -1
  119. package/esm/FunnelChart/curves/getFunnelCurve.js +3 -0
  120. package/esm/FunnelChart/curves/linear.d.ts +9 -1
  121. package/esm/FunnelChart/curves/linear.js +82 -5
  122. package/esm/FunnelChart/funnel.types.d.ts +1 -0
  123. package/esm/FunnelChart/funnelPlotSlots.types.d.ts +11 -0
  124. package/esm/FunnelChart/funnelSectionClasses.d.ts +2 -0
  125. package/esm/FunnelChart/funnelSectionClasses.js +15 -3
  126. package/esm/FunnelChart/funnelSlots.types.d.ts +4 -3
  127. package/esm/FunnelChart/index.d.ts +3 -1
  128. package/esm/FunnelChart/index.js +3 -1
  129. package/esm/FunnelChart/useFunnelChartProps.d.ts +2 -1
  130. package/esm/FunnelChart/useFunnelChartProps.js +3 -1
  131. package/esm/Heatmap/Heatmap.d.ts +22 -4
  132. package/esm/Heatmap/Heatmap.js +64 -22
  133. package/esm/Heatmap/Heatmap.plugins.d.ts +2 -1
  134. package/esm/Heatmap/Heatmap.plugins.js +2 -1
  135. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltipAxesValue.d.ts +1 -1
  136. package/esm/LineChartPro/LineChartPro.d.ts +13 -5
  137. package/esm/LineChartPro/LineChartPro.js +19 -1
  138. package/esm/PieChartPro/PieChartPro.d.ts +21 -0
  139. package/esm/PieChartPro/PieChartPro.js +197 -0
  140. package/esm/PieChartPro/PieChartPro.plugins.d.ts +4 -0
  141. package/esm/PieChartPro/PieChartPro.plugins.js +3 -0
  142. package/esm/PieChartPro/index.d.ts +1 -0
  143. package/esm/PieChartPro/index.js +1 -0
  144. package/esm/RadarChartPro/RadarChartPro.d.ts +15 -0
  145. package/esm/RadarChartPro/RadarChartPro.js +195 -0
  146. package/esm/RadarChartPro/RadarChartPro.plugins.d.ts +4 -0
  147. package/esm/RadarChartPro/RadarChartPro.plugins.js +3 -0
  148. package/esm/RadarChartPro/index.d.ts +1 -0
  149. package/esm/RadarChartPro/index.js +1 -0
  150. package/esm/ScatterChartPro/ScatterChartPro.d.ts +13 -5
  151. package/esm/ScatterChartPro/ScatterChartPro.js +19 -1
  152. package/esm/context/index.d.ts +1 -0
  153. package/esm/context/index.js +1 -0
  154. package/esm/context/useChartApiContext.d.ts +9 -0
  155. package/esm/context/useChartApiContext.js +11 -0
  156. package/esm/hooks/index.d.ts +2 -1
  157. package/esm/hooks/index.js +2 -1
  158. package/esm/index.d.ts +3 -1
  159. package/esm/index.js +3 -1
  160. package/esm/internals/material/index.d.ts +1 -0
  161. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +10 -0
  162. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +358 -0
  163. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +15 -1
  164. package/esm/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +7 -0
  165. package/esm/models/index.d.ts +1 -1
  166. package/hooks/index.d.ts +2 -1
  167. package/hooks/index.js +21 -10
  168. package/index.d.ts +3 -1
  169. package/index.js +23 -1
  170. package/internals/material/index.d.ts +1 -0
  171. package/internals/plugins/useChartProZoom/useChartProZoom.js +10 -0
  172. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +358 -0
  173. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +16 -2
  174. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +7 -0
  175. package/models/index.d.ts +1 -1
  176. package/package.json +7 -7
  177. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +0 -13
  178. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +0 -36
  179. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +0 -13
  180. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +0 -36
  181. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +0 -13
  182. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +0 -29
  183. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +0 -13
  184. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +0 -29
@@ -2,44 +2,18 @@
2
2
  'use client';
3
3
 
4
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
5
  Object.defineProperty(exports, "__esModule", {
7
6
  value: true
8
7
  });
9
8
  exports.ChartAxisZoomSlider = ChartAxisZoomSlider;
10
- exports.calculateZoomEnd = calculateZoomEnd;
11
- exports.calculateZoomStart = calculateZoomStart;
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
9
  var React = _interopRequireWildcard(require("react"));
14
10
  var _internals = require("@mui/x-charts/internals");
15
- var _styles = require("@mui/material/styles");
16
11
  var _hooks = require("@mui/x-charts/hooks");
17
- var _rafThrottle = require("@mui/x-internals/rafThrottle");
18
- var _ChartsTooltipZoomSliderValue = require("./ChartsTooltipZoomSliderValue");
12
+ var _constants = require("./constants");
19
13
  var _useChartProZoom = require("../../internals/plugins/useChartProZoom");
20
- var _ChartAxisZoomSliderThumb = require("./ChartAxisZoomSliderThumb");
14
+ var _ChartAxisZoomSliderTrack = require("./ChartAxisZoomSliderTrack");
15
+ var _ChartAxisZoomSliderActiveTrack = require("./ChartAxisZoomSliderActiveTrack");
21
16
  var _jsxRuntime = require("react/jsx-runtime");
22
- const ZoomSliderTrack = (0, _styles.styled)('rect')(({
23
- theme
24
- }) => ({
25
- '&': {
26
- fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[800] : (theme.vars || theme).palette.grey[300]
27
- }
28
- }));
29
- const ZoomSliderActiveTrackRect = (0, _styles.styled)('rect')(({
30
- theme
31
- }) => ({
32
- '&': {
33
- fill: theme.palette.mode === 'dark' ? (theme.vars || theme).palette.grey[500] : (theme.vars || theme).palette.grey[600],
34
- cursor: 'grab'
35
- }
36
- }));
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);
42
-
43
17
  /**
44
18
  * Renders the zoom slider for a specific axis.
45
19
  * @internal
@@ -51,6 +25,7 @@ function ChartAxisZoomSlider({
51
25
  const store = (0, _internals.useStore)();
52
26
  const drawingArea = (0, _internals.useDrawingArea)();
53
27
  const zoomData = (0, _internals.useSelector)(store, _useChartProZoom.selectorChartAxisZoomData, axisId);
28
+ const [showTooltip, setShowTooltip] = React.useState(false);
54
29
  const {
55
30
  xAxis
56
31
  } = (0, _hooks.useXAxes)();
@@ -64,6 +39,7 @@ function ChartAxisZoomSlider({
64
39
  let y;
65
40
  let reverse;
66
41
  let axisPosition;
42
+ let tooltipConditions;
67
43
  if (axisDirection === 'x') {
68
44
  const axis = xAxis[axisId];
69
45
  if (!axis || axis.position === 'none') {
@@ -71,312 +47,46 @@ function ChartAxisZoomSlider({
71
47
  }
72
48
  const axisSize = axis.height;
73
49
  x = drawingArea.left;
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;
50
+ y = axis.position === 'bottom' ? drawingArea.top + drawingArea.height + axis.offset + axisSize + _internals.ZOOM_SLIDER_MARGIN : drawingArea.top - axis.offset - axisSize - _constants.ZOOM_SLIDER_SIZE - _internals.ZOOM_SLIDER_MARGIN;
75
51
  reverse = axis.reverse ?? false;
76
52
  axisPosition = axis.position ?? 'bottom';
53
+ tooltipConditions = axis.zoom?.slider?.showTooltip ?? _internals.DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP;
77
54
  } else {
78
55
  const axis = yAxis[axisId];
79
56
  if (!axis || axis.position === 'none') {
80
57
  return null;
81
58
  }
82
59
  const axisSize = axis.width;
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;
60
+ x = axis.position === 'right' ? drawingArea.left + drawingArea.width + axis.offset + axisSize + _internals.ZOOM_SLIDER_MARGIN : drawingArea.left - axis.offset - axisSize - _constants.ZOOM_SLIDER_SIZE - _internals.ZOOM_SLIDER_MARGIN;
84
61
  y = drawingArea.top;
85
62
  reverse = axis.reverse ?? false;
86
63
  axisPosition = axis.position ?? 'left';
64
+ tooltipConditions = axis.zoom?.slider?.showTooltip ?? _internals.DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP;
87
65
  }
88
- const backgroundRectOffset = (ZOOM_SLIDER_SIZE - ZOOM_SLIDER_TRACK_SIZE) / 2;
66
+ const backgroundRectOffset = (_constants.ZOOM_SLIDER_SIZE - _constants.ZOOM_SLIDER_TRACK_SIZE) / 2;
89
67
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
90
68
  transform: `translate(${x} ${y})`,
91
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomSliderTrack, {
69
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderTrack.ChartAxisZoomSliderTrack, {
92
70
  x: axisDirection === 'x' ? 0 : backgroundRectOffset,
93
71
  y: axisDirection === 'x' ? backgroundRectOffset : 0,
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, {
72
+ height: axisDirection === 'x' ? _constants.ZOOM_SLIDER_TRACK_SIZE : drawingArea.height,
73
+ width: axisDirection === 'x' ? drawingArea.width : _constants.ZOOM_SLIDER_TRACK_SIZE,
74
+ rx: _constants.ZOOM_SLIDER_TRACK_SIZE / 2,
75
+ ry: _constants.ZOOM_SLIDER_TRACK_SIZE / 2,
76
+ axisId: axisId,
77
+ axisDirection: axisDirection,
78
+ reverse: reverse,
79
+ onSelectStart: tooltipConditions === 'hover' ? () => setShowTooltip(true) : undefined,
80
+ onSelectEnd: tooltipConditions === 'hover' ? () => setShowTooltip(false) : undefined
81
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderActiveTrack.ChartAxisZoomSliderActiveTrack, {
99
82
  zoomData: zoomData,
100
83
  axisId: axisId,
101
84
  axisPosition: axisPosition,
102
85
  axisDirection: axisDirection,
103
- reverse: reverse
104
- })]
105
- });
106
- }
107
- const formatter = Intl.NumberFormat(undefined, {
108
- maximumFractionDigits: 0
109
- });
110
- const zoomValueFormatter = value => formatter.format(value);
111
- function ChartAxisZoomSliderActiveTrack({
112
- axisId,
113
- axisDirection,
114
- axisPosition,
115
- zoomData,
116
- reverse,
117
- valueFormatter = zoomValueFormatter
118
- }) {
119
- const {
120
- instance,
121
- svgRef
122
- } = (0, _internals.useChartContext)();
123
- const store = (0, _internals.useStore)();
124
- const drawingArea = (0, _internals.useDrawingArea)();
125
- const activePreviewRectRef = React.useRef(null);
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;
131
- React.useEffect(() => {
132
- const activePreviewRect = activePreviewRectRef.current;
133
- if (!activePreviewRect) {
134
- return;
135
- }
136
-
137
- /* min and max values of zoom to ensure the pointer anchor in the slider is maintained */
138
- let pointerZoomMin;
139
- let pointerZoomMax;
140
- let prevPointerZoom = 0;
141
- const onPointerMove = (0, _rafThrottle.rafThrottle)(event => {
142
- const {
143
- left,
144
- top,
145
- height,
146
- width
147
- } = (0, _internals.selectorChartDrawingArea)(store.getSnapshot());
148
- const axisZoomData = (0, _useChartProZoom.selectorChartAxisZoomData)(store.getSnapshot(), axisId);
149
- const element = svgRef.current;
150
- if (!axisZoomData || !element) {
151
- return;
152
- }
153
- const point = (0, _internals.getSVGPoint)(element, event);
154
- let pointerZoom;
155
- if (axisDirection === 'x') {
156
- pointerZoom = (point.x - left) / width * 100;
157
- } else {
158
- pointerZoom = (top + height - point.y) / height * 100;
159
- }
160
- if (reverse) {
161
- pointerZoom = 100 - pointerZoom;
162
- }
163
- pointerZoom = Math.max(pointerZoomMin, Math.min(pointerZoomMax, pointerZoom));
164
- const deltaZoom = pointerZoom - prevPointerZoom;
165
- prevPointerZoom = pointerZoom;
166
- instance.moveZoomRange(axisId, deltaZoom);
167
- });
168
- const onPointerUp = () => {
169
- activePreviewRect.removeEventListener('pointermove', onPointerMove);
170
- activePreviewRect.removeEventListener('pointerup', onPointerUp);
171
- setShowTooltip(null);
172
- };
173
- const onPointerDown = event => {
174
- // Prevent text selection when dragging
175
- event.preventDefault();
176
- activePreviewRect.setPointerCapture(event.pointerId);
177
- const {
178
- left,
179
- top,
180
- height,
181
- width
182
- } = (0, _internals.selectorChartDrawingArea)(store.getSnapshot());
183
- const axisZoomData = (0, _useChartProZoom.selectorChartAxisZoomData)(store.getSnapshot(), axisId);
184
- const element = svgRef.current;
185
- if (!axisZoomData || !element) {
186
- return;
187
- }
188
- const point = (0, _internals.getSVGPoint)(element, event);
189
-
190
- // The corresponding value of zoom where the pointer was pressed
191
- let pointerDownZoom;
192
- if (axisDirection === 'x') {
193
- pointerDownZoom = (point.x - left) / width * 100;
194
- } else {
195
- pointerDownZoom = (top + height - point.y) / height * 100;
196
- }
197
- if (reverse) {
198
- pointerDownZoom = 100 - pointerDownZoom;
199
- }
200
- prevPointerZoom = pointerDownZoom;
201
- pointerZoomMin = pointerDownZoom - axisZoomData.start;
202
- pointerZoomMax = 100 - (axisZoomData.end - pointerDownZoom);
203
- setShowTooltip('both');
204
- activePreviewRect.addEventListener('pointerup', onPointerUp);
205
- activePreviewRect.addEventListener('pointermove', onPointerMove);
206
- };
207
- activePreviewRect.addEventListener('pointerdown', onPointerDown);
208
-
209
- // eslint-disable-next-line consistent-return
210
- return () => {
211
- activePreviewRect.removeEventListener('pointerdown', onPointerDown);
212
- onPointerMove.clear();
213
- };
214
- }, [axisDirection, axisId, instance, reverse, store, svgRef]);
215
- const onStartThumbMove = event => {
216
- const element = svgRef.current;
217
- if (!element) {
218
- return;
219
- }
220
- const point = (0, _internals.getSVGPoint)(element, event);
221
- instance.setZoomData(prevZoomData => {
222
- const {
223
- left,
224
- top,
225
- width,
226
- height
227
- } = (0, _internals.selectorChartDrawingArea)(store.value);
228
- const zoomOptions = (0, _internals.selectorChartAxisZoomOptionsLookup)(store.value, axisId);
229
- return prevZoomData.map(zoom => {
230
- if (zoom.axisId === axisId) {
231
- let newStart;
232
- if (axisDirection === 'x') {
233
- newStart = (point.x - left) / width * 100;
234
- } else {
235
- newStart = (top + height - point.y) / height * 100;
236
- }
237
- if (reverse) {
238
- newStart = 100 - newStart;
239
- }
240
- return (0, _extends2.default)({}, zoom, {
241
- start: calculateZoomStart(newStart, zoom, zoomOptions)
242
- });
243
- }
244
- return zoom;
245
- });
246
- });
247
- };
248
- const onEndThumbMove = event => {
249
- const element = svgRef.current;
250
- if (!element) {
251
- return;
252
- }
253
- const point = (0, _internals.getSVGPoint)(element, event);
254
- instance.setZoomData(prevZoomData => {
255
- const {
256
- left,
257
- top,
258
- width,
259
- height
260
- } = (0, _internals.selectorChartDrawingArea)(store.value);
261
- const zoomOptions = (0, _internals.selectorChartAxisZoomOptionsLookup)(store.value, axisId);
262
- return prevZoomData.map(zoom => {
263
- if (zoom.axisId === axisId) {
264
- let newEnd;
265
- if (axisDirection === 'x') {
266
- newEnd = (point.x - left) / width * 100;
267
- } else {
268
- newEnd = (top + height - point.y) / height * 100;
269
- }
270
- if (reverse) {
271
- newEnd = 100 - newEnd;
272
- }
273
- return (0, _extends2.default)({}, zoom, {
274
- end: calculateZoomEnd(newEnd, zoom, zoomOptions)
275
- });
276
- }
277
- return zoom;
278
- });
279
- });
280
- };
281
- let previewX;
282
- let previewY;
283
- let previewWidth;
284
- let previewHeight;
285
- let startThumbX;
286
- let startThumbY;
287
- let endThumbX;
288
- let endThumbY;
289
- if (axisDirection === 'x') {
290
- previewX = zoomData.start / 100 * drawingArea.width;
291
- previewY = 0;
292
- previewWidth = drawingArea.width * (zoomData.end - zoomData.start) / 100;
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;
298
- if (reverse) {
299
- previewX = drawingArea.width - previewX - previewWidth;
300
- startThumbX = drawingArea.width - startThumbX;
301
- endThumbX = drawingArea.width - endThumbX;
302
- }
303
- startThumbX -= previewThumbWidth / 2;
304
- endThumbX -= previewThumbWidth / 2;
305
- } else {
306
- previewX = 0;
307
- previewY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
308
- previewWidth = ZOOM_SLIDER_ACTIVE_TRACK_SIZE;
309
- previewHeight = drawingArea.height * (zoomData.end - zoomData.start) / 100;
310
- startThumbX = 0;
311
- startThumbY = drawingArea.height - zoomData.start / 100 * drawingArea.height;
312
- endThumbX = 0;
313
- endThumbY = drawingArea.height - zoomData.end / 100 * drawingArea.height;
314
- if (reverse) {
315
- previewY = drawingArea.height - previewY - previewHeight;
316
- startThumbY = drawingArea.height - startThumbY;
317
- endThumbY = drawingArea.height - endThumbY;
318
- }
319
- startThumbY -= previewThumbHeight / 2;
320
- endThumbY -= previewThumbHeight / 2;
321
- }
322
- const previewOffset = (ZOOM_SLIDER_THUMB_HEIGHT - ZOOM_SLIDER_ACTIVE_TRACK_SIZE) / 2;
323
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
324
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomSliderActiveTrackRect, {
325
- ref: activePreviewRectRef,
326
- x: previewX + (axisDirection === 'x' ? 0 : previewOffset),
327
- y: previewY + (axisDirection === 'x' ? previewOffset : 0),
328
- width: previewWidth,
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,
338
- orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
339
- onMove: onStartThumbMove,
340
- onPointerEnter: () => setShowTooltip('start'),
341
- onPointerLeave: () => setShowTooltip(null),
342
- placement: "start"
343
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartAxisZoomSliderThumb.ChartAxisZoomSliderThumb, {
344
- ref: setEndThumbEl,
345
- x: endThumbX,
346
- y: endThumbY,
347
- width: previewThumbWidth,
348
- height: previewThumbHeight,
349
- orientation: axisDirection === 'x' ? 'horizontal' : 'vertical',
350
- onMove: onEndThumbMove,
351
- onPointerEnter: () => setShowTooltip('end'),
352
- onPointerLeave: () => setShowTooltip(null),
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)
86
+ reverse: reverse,
87
+ showTooltip: showTooltip && tooltipConditions !== 'never' || tooltipConditions === 'always',
88
+ onPointerEnter: tooltipConditions === 'hover' ? () => setShowTooltip(true) : undefined,
89
+ onPointerLeave: tooltipConditions === 'hover' ? () => setShowTooltip(false) : undefined
364
90
  })]
365
91
  });
366
- }
367
- function calculateZoomStart(newStart, currentZoom, options) {
368
- const {
369
- minStart,
370
- minSpan,
371
- maxSpan
372
- } = options;
373
- return Math.max(minStart, currentZoom.end - maxSpan, Math.min(currentZoom.end - minSpan, newStart));
374
- }
375
- function calculateZoomEnd(newEnd, currentZoom, options) {
376
- const {
377
- maxEnd,
378
- minSpan,
379
- maxSpan
380
- } = options;
381
- return Math.min(maxEnd, currentZoom.start + maxSpan, Math.max(currentZoom.start + minSpan, newEnd));
382
92
  }
@@ -0,0 +1,22 @@
1
+ import { AxisId, ZoomData } from '@mui/x-charts/internals';
2
+ import * as React from 'react';
3
+ export interface ChartAxisZoomSliderActiveTrackProps {
4
+ axisId: AxisId;
5
+ axisDirection: 'x' | 'y';
6
+ axisPosition: 'top' | 'bottom' | 'left' | 'right';
7
+ zoomData: ZoomData;
8
+ reverse?: boolean;
9
+ showTooltip: boolean;
10
+ onPointerEnter?: () => void;
11
+ onPointerLeave?: () => void;
12
+ }
13
+ export declare function ChartAxisZoomSliderActiveTrack({
14
+ axisId,
15
+ axisDirection,
16
+ axisPosition,
17
+ zoomData,
18
+ reverse,
19
+ showTooltip,
20
+ onPointerEnter,
21
+ onPointerLeave
22
+ }: ChartAxisZoomSliderActiveTrackProps): React.JSX.Element;