@mui/x-charts-pro 8.2.0 → 8.3.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 (154) hide show
  1. package/BarChartPro/BarChartPro.d.ts +7 -1
  2. package/BarChartPro/BarChartPro.js +60 -4
  3. package/CHANGELOG.md +199 -6
  4. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  5. package/ChartZoomSlider/ChartZoomSlider.d.ts +5 -0
  6. package/ChartZoomSlider/ChartZoomSlider.js +47 -0
  7. package/ChartZoomSlider/index.d.ts +2 -0
  8. package/ChartZoomSlider/index.js +27 -0
  9. package/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +23 -0
  10. package/ChartZoomSlider/internals/ChartAxisZoomSlider.js +348 -0
  11. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +12 -0
  12. package/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +92 -0
  13. package/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +17 -0
  14. package/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.js +27 -0
  15. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +2 -0
  16. package/ChartsToolbarPro/ChartsToolbarPro.js +31 -0
  17. package/ChartsToolbarPro/index.d.ts +1 -0
  18. package/ChartsToolbarPro/index.js +16 -0
  19. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +13 -0
  20. package/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +36 -0
  21. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +13 -0
  22. package/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +36 -0
  23. package/FunnelChart/FunnelChart.js +2 -7
  24. package/FunnelChart/FunnelPlot.js +24 -3
  25. package/FunnelChart/FunnelSection.d.ts +1 -0
  26. package/FunnelChart/FunnelSection.js +12 -7
  27. package/FunnelChart/curves/borderRadiusPolygon.d.ts +8 -0
  28. package/FunnelChart/curves/borderRadiusPolygon.js +42 -0
  29. package/FunnelChart/curves/bump.d.ts +8 -5
  30. package/FunnelChart/curves/bump.js +21 -22
  31. package/FunnelChart/curves/curve.types.d.ts +33 -3
  32. package/FunnelChart/curves/getFunnelCurve.d.ts +2 -2
  33. package/FunnelChart/curves/getFunnelCurve.js +12 -4
  34. package/FunnelChart/curves/linear.d.ts +17 -9
  35. package/FunnelChart/curves/linear.js +62 -87
  36. package/FunnelChart/curves/pyramid.d.ts +34 -0
  37. package/FunnelChart/curves/pyramid.js +127 -0
  38. package/FunnelChart/curves/step-pyramid.d.ts +31 -0
  39. package/FunnelChart/curves/step-pyramid.js +107 -0
  40. package/FunnelChart/curves/step.d.ts +32 -0
  41. package/FunnelChart/curves/step.js +88 -0
  42. package/FunnelChart/curves/utils.d.ts +4 -0
  43. package/FunnelChart/curves/utils.js +29 -0
  44. package/FunnelChart/funnel.types.d.ts +23 -2
  45. package/FunnelChart/funnelSectionClasses.d.ts +5 -1
  46. package/FunnelChart/funnelSectionClasses.js +5 -2
  47. package/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +1 -0
  48. package/FunnelChart/useFunnelChartProps.d.ts +0 -5
  49. package/FunnelChart/useFunnelChartProps.js +0 -11
  50. package/Heatmap/Heatmap.d.ts +3 -3
  51. package/Heatmap/Heatmap.js +2 -20
  52. package/LineChartPro/LineChartPro.d.ts +7 -1
  53. package/LineChartPro/LineChartPro.js +60 -4
  54. package/ScatterChartPro/ScatterChartPro.d.ts +7 -1
  55. package/ScatterChartPro/ScatterChartPro.js +60 -4
  56. package/esm/BarChartPro/BarChartPro.d.ts +7 -1
  57. package/esm/BarChartPro/BarChartPro.js +60 -4
  58. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  59. package/esm/ChartZoomSlider/ChartZoomSlider.d.ts +5 -0
  60. package/esm/ChartZoomSlider/ChartZoomSlider.js +41 -0
  61. package/esm/ChartZoomSlider/index.d.ts +2 -0
  62. package/esm/ChartZoomSlider/index.js +2 -0
  63. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.d.ts +23 -0
  64. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.js +339 -0
  65. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.d.ts +12 -0
  66. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderHandle.js +85 -0
  67. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.d.ts +17 -0
  68. package/esm/ChartZoomSlider/internals/chartAxisZoomSliderHandleClasses.js +17 -0
  69. package/esm/ChartsToolbarPro/ChartsToolbarPro.d.ts +2 -0
  70. package/esm/ChartsToolbarPro/ChartsToolbarPro.js +24 -0
  71. package/esm/ChartsToolbarPro/index.d.ts +1 -0
  72. package/esm/ChartsToolbarPro/index.js +1 -0
  73. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.d.ts +13 -0
  74. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomInButton.js +29 -0
  75. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.d.ts +13 -0
  76. package/esm/ChartsToolbarPro/internal/ChartsToolbarZoomOutButton.js +29 -0
  77. package/esm/FunnelChart/FunnelChart.js +2 -7
  78. package/esm/FunnelChart/FunnelPlot.js +24 -3
  79. package/esm/FunnelChart/FunnelSection.d.ts +1 -0
  80. package/esm/FunnelChart/FunnelSection.js +12 -7
  81. package/esm/FunnelChart/curves/borderRadiusPolygon.d.ts +8 -0
  82. package/esm/FunnelChart/curves/borderRadiusPolygon.js +36 -0
  83. package/esm/FunnelChart/curves/bump.d.ts +8 -5
  84. package/esm/FunnelChart/curves/bump.js +21 -22
  85. package/esm/FunnelChart/curves/curve.types.d.ts +33 -3
  86. package/esm/FunnelChart/curves/getFunnelCurve.d.ts +2 -2
  87. package/esm/FunnelChart/curves/getFunnelCurve.js +12 -4
  88. package/esm/FunnelChart/curves/linear.d.ts +17 -9
  89. package/esm/FunnelChart/curves/linear.js +62 -86
  90. package/esm/FunnelChart/curves/pyramid.d.ts +34 -0
  91. package/esm/FunnelChart/curves/pyramid.js +121 -0
  92. package/esm/FunnelChart/curves/step-pyramid.d.ts +31 -0
  93. package/esm/FunnelChart/curves/step-pyramid.js +101 -0
  94. package/esm/FunnelChart/curves/step.d.ts +32 -0
  95. package/esm/FunnelChart/curves/step.js +82 -0
  96. package/esm/FunnelChart/curves/utils.d.ts +4 -0
  97. package/esm/FunnelChart/curves/utils.js +19 -0
  98. package/esm/FunnelChart/funnel.types.d.ts +23 -2
  99. package/esm/FunnelChart/funnelSectionClasses.d.ts +5 -1
  100. package/esm/FunnelChart/funnelSectionClasses.js +5 -2
  101. package/esm/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +1 -0
  102. package/esm/FunnelChart/useFunnelChartProps.d.ts +0 -5
  103. package/esm/FunnelChart/useFunnelChartProps.js +0 -11
  104. package/esm/Heatmap/Heatmap.d.ts +3 -3
  105. package/esm/Heatmap/Heatmap.js +2 -20
  106. package/esm/LineChartPro/LineChartPro.d.ts +7 -1
  107. package/esm/LineChartPro/LineChartPro.js +60 -4
  108. package/esm/ScatterChartPro/ScatterChartPro.d.ts +7 -1
  109. package/esm/ScatterChartPro/ScatterChartPro.js +60 -4
  110. package/esm/index.d.ts +4 -1
  111. package/esm/index.js +4 -3
  112. package/esm/internals/material/icons.d.ts +3 -0
  113. package/esm/internals/material/icons.js +13 -0
  114. package/esm/internals/material/index.d.ts +4 -0
  115. package/esm/internals/material/index.js +12 -0
  116. package/esm/internals/plugins/useChartProZoom/calculateZoom.d.ts +23 -0
  117. package/esm/internals/plugins/useChartProZoom/calculateZoom.js +32 -0
  118. package/esm/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -1
  119. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +45 -3
  120. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +63 -11
  121. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +3 -2
  122. package/esm/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +17 -2
  123. package/esm/internals/slots/chartBaseSlotProps.d.ts +10 -0
  124. package/esm/internals/slots/chartBaseSlotProps.js +1 -0
  125. package/esm/internals/slots/chartsBaseSlots.d.ts +6 -0
  126. package/esm/internals/slots/chartsBaseSlots.js +1 -0
  127. package/esm/internals/slots/chartsIconSlots.d.ts +14 -0
  128. package/esm/internals/slots/chartsIconSlots.js +1 -0
  129. package/esm/typeOverloads/modules.d.ts +1 -1
  130. package/index.d.ts +4 -1
  131. package/index.js +23 -1
  132. package/internals/material/icons.d.ts +3 -0
  133. package/internals/material/icons.js +20 -0
  134. package/internals/material/index.d.ts +4 -0
  135. package/internals/material/index.js +19 -0
  136. package/internals/plugins/useChartProZoom/calculateZoom.d.ts +23 -0
  137. package/internals/plugins/useChartProZoom/calculateZoom.js +39 -0
  138. package/internals/plugins/useChartProZoom/useChartProZoom.d.ts +1 -1
  139. package/internals/plugins/useChartProZoom/useChartProZoom.js +44 -2
  140. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +63 -11
  141. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +3 -2
  142. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +17 -2
  143. package/internals/slots/chartBaseSlotProps.d.ts +10 -0
  144. package/internals/slots/chartBaseSlotProps.js +5 -0
  145. package/internals/slots/chartsBaseSlots.d.ts +6 -0
  146. package/internals/slots/chartsBaseSlots.js +5 -0
  147. package/internals/slots/chartsIconSlots.d.ts +14 -0
  148. package/internals/slots/chartsIconSlots.js +5 -0
  149. package/package.json +7 -7
  150. package/typeOverloads/modules.d.ts +1 -1
  151. package/FunnelChart/curves/funnelStep.d.ts +0 -25
  152. package/FunnelChart/curves/funnelStep.js +0 -87
  153. package/esm/FunnelChart/curves/funnelStep.d.ts +0 -25
  154. package/esm/FunnelChart/curves/funnelStep.js +0 -80
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["initialZoom", "zoomData", "onZoomChange", "apiRef"];
5
+ const _excluded = ["initialZoom", "zoomData", "onZoomChange", "apiRef", "showToolbar"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import { useThemeProps } from '@mui/material/styles';
@@ -16,6 +16,8 @@ import { ChartsTooltip } from '@mui/x-charts/ChartsTooltip';
16
16
  import { ChartsClipPath } from '@mui/x-charts/ChartsClipPath';
17
17
  import { ChartsSurface } from '@mui/x-charts/ChartsSurface';
18
18
  import { useLineChartProps, ChartsWrapper } from '@mui/x-charts/internals';
19
+ import { ChartZoomSlider } from "../ChartZoomSlider/index.js";
20
+ import { ChartsToolbarPro } from "../ChartsToolbarPro/index.js";
19
21
  import { useChartContainerProProps } from "../ChartContainerPro/useChartContainerProProps.js";
20
22
  import { ChartDataProviderPro } from "../ChartDataProviderPro/index.js";
21
23
  import { LINE_CHART_PRO_PLUGINS } from "./LineChartPro.plugins.js";
@@ -39,7 +41,8 @@ const LineChartPro = /*#__PURE__*/React.forwardRef(function LineChartPro(inProps
39
41
  initialZoom,
40
42
  zoomData,
41
43
  onZoomChange,
42
- apiRef
44
+ apiRef,
45
+ showToolbar
43
46
  } = props,
44
47
  other = _objectWithoutPropertiesLoose(props, _excluded);
45
48
  const {
@@ -71,10 +74,10 @@ const LineChartPro = /*#__PURE__*/React.forwardRef(function LineChartPro(inProps
71
74
  const Tooltip = props.slots?.tooltip ?? ChartsTooltip;
72
75
  return /*#__PURE__*/_jsx(ChartDataProviderPro, _extends({}, chartDataProviderProProps, {
73
76
  children: /*#__PURE__*/_jsxs(ChartsWrapper, _extends({}, chartsWrapperProps, {
74
- children: [!props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), /*#__PURE__*/_jsxs(ChartsSurface, _extends({}, chartsSurfaceProps, {
77
+ children: [showToolbar ? /*#__PURE__*/_jsx(ChartsToolbarPro, {}) : null, !props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), /*#__PURE__*/_jsxs(ChartsSurface, _extends({}, chartsSurfaceProps, {
75
78
  children: [/*#__PURE__*/_jsx(ChartsGrid, _extends({}, gridProps)), /*#__PURE__*/_jsxs("g", _extends({}, clipPathGroupProps, {
76
79
  children: [/*#__PURE__*/_jsx(AreaPlot, _extends({}, areaPlotProps)), /*#__PURE__*/_jsx(LinePlot, _extends({}, linePlotProps)), /*#__PURE__*/_jsx(ChartsOverlay, _extends({}, overlayProps)), /*#__PURE__*/_jsx(ChartsAxisHighlight, _extends({}, axisHighlightProps))]
77
- })), /*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx("g", {
80
+ })), /*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx(ChartZoomSlider, {}), /*#__PURE__*/_jsx("g", {
78
81
  "data-drawing-container": true,
79
82
  children: /*#__PURE__*/_jsx(MarkPlot, _extends({}, markPlotProps))
80
83
  }), /*#__PURE__*/_jsx(LineHighlightPlot, _extends({}, lineHighlightPlotProps)), !props.loading && /*#__PURE__*/_jsx(Tooltip, _extends({}, props.slotProps?.tooltip)), /*#__PURE__*/_jsx(ChartsClipPath, _extends({}, clipPathProps)), children]
@@ -219,6 +222,11 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
219
222
  * An array of [[LineSeriesType]] objects.
220
223
  */
221
224
  series: PropTypes.arrayOf(PropTypes.object).isRequired,
225
+ /**
226
+ * If true, shows the default chart toolbar.
227
+ * @default false
228
+ */
229
+ showToolbar: PropTypes.bool,
222
230
  /**
223
231
  * If `true`, animations are skipped.
224
232
  * @default false
@@ -306,6 +314,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
306
314
  minSpan: PropTypes.number,
307
315
  minStart: PropTypes.number,
308
316
  panning: PropTypes.bool,
317
+ slider: PropTypes.shape({
318
+ enabled: PropTypes.bool
319
+ }),
309
320
  step: PropTypes.number
310
321
  }), PropTypes.bool])
311
322
  }), PropTypes.shape({
@@ -366,6 +377,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
366
377
  minSpan: PropTypes.number,
367
378
  minStart: PropTypes.number,
368
379
  panning: PropTypes.bool,
380
+ slider: PropTypes.shape({
381
+ enabled: PropTypes.bool
382
+ }),
369
383
  step: PropTypes.number
370
384
  }), PropTypes.bool])
371
385
  }), PropTypes.shape({
@@ -421,6 +435,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
421
435
  minSpan: PropTypes.number,
422
436
  minStart: PropTypes.number,
423
437
  panning: PropTypes.bool,
438
+ slider: PropTypes.shape({
439
+ enabled: PropTypes.bool
440
+ }),
424
441
  step: PropTypes.number
425
442
  }), PropTypes.bool])
426
443
  }), PropTypes.shape({
@@ -476,6 +493,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
476
493
  minSpan: PropTypes.number,
477
494
  minStart: PropTypes.number,
478
495
  panning: PropTypes.bool,
496
+ slider: PropTypes.shape({
497
+ enabled: PropTypes.bool
498
+ }),
479
499
  step: PropTypes.number
480
500
  }), PropTypes.bool])
481
501
  }), PropTypes.shape({
@@ -531,6 +551,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
531
551
  minSpan: PropTypes.number,
532
552
  minStart: PropTypes.number,
533
553
  panning: PropTypes.bool,
554
+ slider: PropTypes.shape({
555
+ enabled: PropTypes.bool
556
+ }),
534
557
  step: PropTypes.number
535
558
  }), PropTypes.bool])
536
559
  }), PropTypes.shape({
@@ -586,6 +609,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
586
609
  minSpan: PropTypes.number,
587
610
  minStart: PropTypes.number,
588
611
  panning: PropTypes.bool,
612
+ slider: PropTypes.shape({
613
+ enabled: PropTypes.bool
614
+ }),
589
615
  step: PropTypes.number
590
616
  }), PropTypes.bool])
591
617
  }), PropTypes.shape({
@@ -641,6 +667,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
641
667
  minSpan: PropTypes.number,
642
668
  minStart: PropTypes.number,
643
669
  panning: PropTypes.bool,
670
+ slider: PropTypes.shape({
671
+ enabled: PropTypes.bool
672
+ }),
644
673
  step: PropTypes.number
645
674
  }), PropTypes.bool])
646
675
  }), PropTypes.shape({
@@ -696,6 +725,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
696
725
  minSpan: PropTypes.number,
697
726
  minStart: PropTypes.number,
698
727
  panning: PropTypes.bool,
728
+ slider: PropTypes.shape({
729
+ enabled: PropTypes.bool
730
+ }),
699
731
  step: PropTypes.number
700
732
  }), PropTypes.bool])
701
733
  })]).isRequired),
@@ -763,6 +795,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
763
795
  minSpan: PropTypes.number,
764
796
  minStart: PropTypes.number,
765
797
  panning: PropTypes.bool,
798
+ slider: PropTypes.shape({
799
+ enabled: PropTypes.bool
800
+ }),
766
801
  step: PropTypes.number
767
802
  }), PropTypes.bool])
768
803
  }), PropTypes.shape({
@@ -822,6 +857,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
822
857
  minSpan: PropTypes.number,
823
858
  minStart: PropTypes.number,
824
859
  panning: PropTypes.bool,
860
+ slider: PropTypes.shape({
861
+ enabled: PropTypes.bool
862
+ }),
825
863
  step: PropTypes.number
826
864
  }), PropTypes.bool])
827
865
  }), PropTypes.shape({
@@ -876,6 +914,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
876
914
  minSpan: PropTypes.number,
877
915
  minStart: PropTypes.number,
878
916
  panning: PropTypes.bool,
917
+ slider: PropTypes.shape({
918
+ enabled: PropTypes.bool
919
+ }),
879
920
  step: PropTypes.number
880
921
  }), PropTypes.bool])
881
922
  }), PropTypes.shape({
@@ -930,6 +971,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
930
971
  minSpan: PropTypes.number,
931
972
  minStart: PropTypes.number,
932
973
  panning: PropTypes.bool,
974
+ slider: PropTypes.shape({
975
+ enabled: PropTypes.bool
976
+ }),
933
977
  step: PropTypes.number
934
978
  }), PropTypes.bool])
935
979
  }), PropTypes.shape({
@@ -984,6 +1028,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
984
1028
  minSpan: PropTypes.number,
985
1029
  minStart: PropTypes.number,
986
1030
  panning: PropTypes.bool,
1031
+ slider: PropTypes.shape({
1032
+ enabled: PropTypes.bool
1033
+ }),
987
1034
  step: PropTypes.number
988
1035
  }), PropTypes.bool])
989
1036
  }), PropTypes.shape({
@@ -1038,6 +1085,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
1038
1085
  minSpan: PropTypes.number,
1039
1086
  minStart: PropTypes.number,
1040
1087
  panning: PropTypes.bool,
1088
+ slider: PropTypes.shape({
1089
+ enabled: PropTypes.bool
1090
+ }),
1041
1091
  step: PropTypes.number
1042
1092
  }), PropTypes.bool])
1043
1093
  }), PropTypes.shape({
@@ -1092,6 +1142,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
1092
1142
  minSpan: PropTypes.number,
1093
1143
  minStart: PropTypes.number,
1094
1144
  panning: PropTypes.bool,
1145
+ slider: PropTypes.shape({
1146
+ enabled: PropTypes.bool
1147
+ }),
1095
1148
  step: PropTypes.number
1096
1149
  }), PropTypes.bool])
1097
1150
  }), PropTypes.shape({
@@ -1146,6 +1199,9 @@ process.env.NODE_ENV !== "production" ? LineChartPro.propTypes = {
1146
1199
  minSpan: PropTypes.number,
1147
1200
  minStart: PropTypes.number,
1148
1201
  panning: PropTypes.bool,
1202
+ slider: PropTypes.shape({
1203
+ enabled: PropTypes.bool
1204
+ }),
1149
1205
  step: PropTypes.number
1150
1206
  }), PropTypes.bool])
1151
1207
  })]).isRequired),
@@ -2,7 +2,13 @@ import * as React from 'react';
2
2
  import { ScatterChartProps } from '@mui/x-charts/ScatterChart';
3
3
  import { ChartContainerProProps } from "../ChartContainerPro/ChartContainerPro.js";
4
4
  import { ScatterChartProPluginsSignatures } from "./ScatterChartPro.plugins.js";
5
- export interface ScatterChartProProps extends Omit<ScatterChartProps, 'apiRef'>, Omit<ChartContainerProProps<'scatter', ScatterChartProPluginsSignatures>, 'series' | 'plugins' | 'seriesConfig' | 'onItemClick'> {}
5
+ export interface ScatterChartProProps extends Omit<ScatterChartProps, 'apiRef'>, Omit<ChartContainerProProps<'scatter', ScatterChartProPluginsSignatures>, 'series' | 'plugins' | 'seriesConfig' | 'onItemClick'> {
6
+ /**
7
+ * If true, shows the default chart toolbar.
8
+ * @default false
9
+ */
10
+ showToolbar?: boolean;
11
+ }
6
12
  /**
7
13
  * Demos:
8
14
  *
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["initialZoom", "zoomData", "onZoomChange", "apiRef"];
5
+ const _excluded = ["initialZoom", "zoomData", "onZoomChange", "apiRef", "showToolbar"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import { useThemeProps } from '@mui/material/styles';
@@ -15,6 +15,8 @@ import { ChartsSurface } from '@mui/x-charts/ChartsSurface';
15
15
  import { ChartsAxisHighlight } from '@mui/x-charts/ChartsAxisHighlight';
16
16
  import { ChartsTooltip } from '@mui/x-charts/ChartsTooltip';
17
17
  import { useScatterChartProps, ChartsWrapper } from '@mui/x-charts/internals';
18
+ import { ChartZoomSlider } from "../ChartZoomSlider/index.js";
19
+ import { ChartsToolbarPro } from "../ChartsToolbarPro/index.js";
18
20
  import { useChartContainerProProps } from "../ChartContainerPro/useChartContainerProProps.js";
19
21
  import { ChartDataProviderPro } from "../ChartDataProviderPro/index.js";
20
22
  import { SCATTER_CHART_PRO_PLUGINS } from "./ScatterChartPro.plugins.js";
@@ -38,7 +40,8 @@ const ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(i
38
40
  initialZoom,
39
41
  zoomData,
40
42
  onZoomChange,
41
- apiRef
43
+ apiRef,
44
+ showToolbar
42
45
  } = props,
43
46
  other = _objectWithoutPropertiesLoose(props, _excluded);
44
47
  const {
@@ -65,8 +68,8 @@ const ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(i
65
68
  const Tooltip = props.slots?.tooltip ?? ChartsTooltip;
66
69
  return /*#__PURE__*/_jsx(ChartDataProviderPro, _extends({}, chartDataProviderProProps, {
67
70
  children: /*#__PURE__*/_jsxs(ChartsWrapper, _extends({}, chartsWrapperProps, {
68
- children: [!props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), /*#__PURE__*/_jsxs(ChartsSurface, _extends({}, chartsSurfaceProps, {
69
- children: [/*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx(ChartsGrid, _extends({}, gridProps)), /*#__PURE__*/_jsx("g", {
71
+ children: [showToolbar ? /*#__PURE__*/_jsx(ChartsToolbarPro, {}) : null, !props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), /*#__PURE__*/_jsxs(ChartsSurface, _extends({}, chartsSurfaceProps, {
72
+ children: [/*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx(ChartZoomSlider, {}), /*#__PURE__*/_jsx(ChartsGrid, _extends({}, gridProps)), /*#__PURE__*/_jsx("g", {
70
73
  "data-drawing-container": true,
71
74
  children: /*#__PURE__*/_jsx(ScatterPlot, _extends({}, scatterPlotProps))
72
75
  }), /*#__PURE__*/_jsx(ChartsOverlay, _extends({}, overlayProps)), /*#__PURE__*/_jsx(ChartsAxisHighlight, _extends({}, axisHighlightProps)), !props.loading && /*#__PURE__*/_jsx(Tooltip, _extends({}, props?.slotProps?.tooltip, {
@@ -208,6 +211,11 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
208
211
  * An array of [[ScatterSeriesType]] objects.
209
212
  */
210
213
  series: PropTypes.arrayOf(PropTypes.object).isRequired,
214
+ /**
215
+ * If true, shows the default chart toolbar.
216
+ * @default false
217
+ */
218
+ showToolbar: PropTypes.bool,
211
219
  /**
212
220
  * If `true`, animations are skipped.
213
221
  * If unset or `false`, the animations respects the user's `prefers-reduced-motion` setting.
@@ -300,6 +308,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
300
308
  minSpan: PropTypes.number,
301
309
  minStart: PropTypes.number,
302
310
  panning: PropTypes.bool,
311
+ slider: PropTypes.shape({
312
+ enabled: PropTypes.bool
313
+ }),
303
314
  step: PropTypes.number
304
315
  }), PropTypes.bool])
305
316
  }), PropTypes.shape({
@@ -360,6 +371,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
360
371
  minSpan: PropTypes.number,
361
372
  minStart: PropTypes.number,
362
373
  panning: PropTypes.bool,
374
+ slider: PropTypes.shape({
375
+ enabled: PropTypes.bool
376
+ }),
363
377
  step: PropTypes.number
364
378
  }), PropTypes.bool])
365
379
  }), PropTypes.shape({
@@ -415,6 +429,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
415
429
  minSpan: PropTypes.number,
416
430
  minStart: PropTypes.number,
417
431
  panning: PropTypes.bool,
432
+ slider: PropTypes.shape({
433
+ enabled: PropTypes.bool
434
+ }),
418
435
  step: PropTypes.number
419
436
  }), PropTypes.bool])
420
437
  }), PropTypes.shape({
@@ -470,6 +487,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
470
487
  minSpan: PropTypes.number,
471
488
  minStart: PropTypes.number,
472
489
  panning: PropTypes.bool,
490
+ slider: PropTypes.shape({
491
+ enabled: PropTypes.bool
492
+ }),
473
493
  step: PropTypes.number
474
494
  }), PropTypes.bool])
475
495
  }), PropTypes.shape({
@@ -525,6 +545,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
525
545
  minSpan: PropTypes.number,
526
546
  minStart: PropTypes.number,
527
547
  panning: PropTypes.bool,
548
+ slider: PropTypes.shape({
549
+ enabled: PropTypes.bool
550
+ }),
528
551
  step: PropTypes.number
529
552
  }), PropTypes.bool])
530
553
  }), PropTypes.shape({
@@ -580,6 +603,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
580
603
  minSpan: PropTypes.number,
581
604
  minStart: PropTypes.number,
582
605
  panning: PropTypes.bool,
606
+ slider: PropTypes.shape({
607
+ enabled: PropTypes.bool
608
+ }),
583
609
  step: PropTypes.number
584
610
  }), PropTypes.bool])
585
611
  }), PropTypes.shape({
@@ -635,6 +661,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
635
661
  minSpan: PropTypes.number,
636
662
  minStart: PropTypes.number,
637
663
  panning: PropTypes.bool,
664
+ slider: PropTypes.shape({
665
+ enabled: PropTypes.bool
666
+ }),
638
667
  step: PropTypes.number
639
668
  }), PropTypes.bool])
640
669
  }), PropTypes.shape({
@@ -690,6 +719,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
690
719
  minSpan: PropTypes.number,
691
720
  minStart: PropTypes.number,
692
721
  panning: PropTypes.bool,
722
+ slider: PropTypes.shape({
723
+ enabled: PropTypes.bool
724
+ }),
693
725
  step: PropTypes.number
694
726
  }), PropTypes.bool])
695
727
  })]).isRequired),
@@ -757,6 +789,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
757
789
  minSpan: PropTypes.number,
758
790
  minStart: PropTypes.number,
759
791
  panning: PropTypes.bool,
792
+ slider: PropTypes.shape({
793
+ enabled: PropTypes.bool
794
+ }),
760
795
  step: PropTypes.number
761
796
  }), PropTypes.bool])
762
797
  }), PropTypes.shape({
@@ -816,6 +851,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
816
851
  minSpan: PropTypes.number,
817
852
  minStart: PropTypes.number,
818
853
  panning: PropTypes.bool,
854
+ slider: PropTypes.shape({
855
+ enabled: PropTypes.bool
856
+ }),
819
857
  step: PropTypes.number
820
858
  }), PropTypes.bool])
821
859
  }), PropTypes.shape({
@@ -870,6 +908,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
870
908
  minSpan: PropTypes.number,
871
909
  minStart: PropTypes.number,
872
910
  panning: PropTypes.bool,
911
+ slider: PropTypes.shape({
912
+ enabled: PropTypes.bool
913
+ }),
873
914
  step: PropTypes.number
874
915
  }), PropTypes.bool])
875
916
  }), PropTypes.shape({
@@ -924,6 +965,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
924
965
  minSpan: PropTypes.number,
925
966
  minStart: PropTypes.number,
926
967
  panning: PropTypes.bool,
968
+ slider: PropTypes.shape({
969
+ enabled: PropTypes.bool
970
+ }),
927
971
  step: PropTypes.number
928
972
  }), PropTypes.bool])
929
973
  }), PropTypes.shape({
@@ -978,6 +1022,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
978
1022
  minSpan: PropTypes.number,
979
1023
  minStart: PropTypes.number,
980
1024
  panning: PropTypes.bool,
1025
+ slider: PropTypes.shape({
1026
+ enabled: PropTypes.bool
1027
+ }),
981
1028
  step: PropTypes.number
982
1029
  }), PropTypes.bool])
983
1030
  }), PropTypes.shape({
@@ -1032,6 +1079,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
1032
1079
  minSpan: PropTypes.number,
1033
1080
  minStart: PropTypes.number,
1034
1081
  panning: PropTypes.bool,
1082
+ slider: PropTypes.shape({
1083
+ enabled: PropTypes.bool
1084
+ }),
1035
1085
  step: PropTypes.number
1036
1086
  }), PropTypes.bool])
1037
1087
  }), PropTypes.shape({
@@ -1086,6 +1136,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
1086
1136
  minSpan: PropTypes.number,
1087
1137
  minStart: PropTypes.number,
1088
1138
  panning: PropTypes.bool,
1139
+ slider: PropTypes.shape({
1140
+ enabled: PropTypes.bool
1141
+ }),
1089
1142
  step: PropTypes.number
1090
1143
  }), PropTypes.bool])
1091
1144
  }), PropTypes.shape({
@@ -1140,6 +1193,9 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
1140
1193
  minSpan: PropTypes.number,
1141
1194
  minStart: PropTypes.number,
1142
1195
  panning: PropTypes.bool,
1196
+ slider: PropTypes.shape({
1197
+ enabled: PropTypes.bool
1198
+ }),
1143
1199
  step: PropTypes.number
1144
1200
  }), PropTypes.bool])
1145
1201
  })]).isRequired),
package/esm/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export * from '@mui/x-charts/RadarChart';
25
25
  export * from '@mui/x-charts/ChartsSurface';
26
26
  export * from '@mui/x-charts/ChartDataProvider';
27
27
  export * from '@mui/x-charts/ChartsLabel';
28
+ export type { ZoomData, ZoomFilterMode, ZoomOptions, ZoomSliderOptions } from '@mui/x-charts/internals';
28
29
  export * from "./hooks/index.js";
29
30
  export * from "./Heatmap/index.js";
30
31
  export * from "./ChartContainerPro/index.js";
@@ -32,4 +33,6 @@ export * from "./ChartDataProviderPro/index.js";
32
33
  export * from "./ScatterChartPro/index.js";
33
34
  export * from "./BarChartPro/index.js";
34
35
  export * from "./LineChartPro/index.js";
35
- export * from "./FunnelChart/index.js";
36
+ export * from "./FunnelChart/index.js";
37
+ export * from "./ChartZoomSlider/index.js";
38
+ export * from "./ChartsToolbarPro/index.js";
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v8.2.0
2
+ * @mui/x-charts-pro v8.3.1
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -34,7 +34,6 @@ export * from '@mui/x-charts/RadarChart';
34
34
  export * from '@mui/x-charts/ChartsSurface';
35
35
  export * from '@mui/x-charts/ChartDataProvider';
36
36
  export * from '@mui/x-charts/ChartsLabel';
37
-
38
37
  // Pro components
39
38
  export * from "./hooks/index.js";
40
39
  export * from "./Heatmap/index.js";
@@ -43,4 +42,6 @@ export * from "./ChartDataProviderPro/index.js";
43
42
  export * from "./ScatterChartPro/index.js";
44
43
  export * from "./BarChartPro/index.js";
45
44
  export * from "./LineChartPro/index.js";
46
- export * from "./FunnelChart/index.js";
45
+ export * from "./FunnelChart/index.js";
46
+ export * from "./ChartZoomSlider/index.js";
47
+ export * from "./ChartsToolbarPro/index.js";
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ export declare const ChartsZoomInIcon: (props: import("@mui/x-charts").ChartBaseIconProps) => React.ReactNode;
3
+ export declare const ChartsZoomOutIcon: (props: import("@mui/x-charts").ChartBaseIconProps) => React.ReactNode;
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { createSvgIcon } from '@mui/x-charts/internals';
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ export const ChartsZoomInIcon = createSvgIcon(/*#__PURE__*/_jsxs(React.Fragment, {
5
+ children: [/*#__PURE__*/_jsx("path", {
6
+ d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"
7
+ }), /*#__PURE__*/_jsx("path", {
8
+ d: "M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"
9
+ })]
10
+ }), 'ZoomIn');
11
+ export const ChartsZoomOutIcon = createSvgIcon(/*#__PURE__*/_jsx("path", {
12
+ d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"
13
+ }), 'ZoomOut');
@@ -0,0 +1,4 @@
1
+ import { ChartsBaseSlotsPro } from "../slots/chartsBaseSlots.js";
2
+ import { ChartsIconSlotsPro } from "../slots/chartsIconSlots.js";
3
+ export type ChartsSlotsPro = ChartsBaseSlotsPro & ChartsIconSlotsPro;
4
+ export declare const defaultSlotsMaterial: ChartsSlotsPro;
@@ -0,0 +1,12 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import Tooltip from '@mui/material/Tooltip';
3
+ import { defaultSlotsMaterial as communityDefaultSlotsMaterial } from '@mui/x-charts/internals';
4
+ import { ChartsZoomInIcon, ChartsZoomOutIcon } from "./icons.js";
5
+ const baseSlots = {
6
+ baseTooltip: Tooltip
7
+ };
8
+ const iconSlots = {
9
+ zoomInIcon: ChartsZoomInIcon,
10
+ zoomOutIcon: ChartsZoomOutIcon
11
+ };
12
+ export const defaultSlotsMaterial = _extends({}, communityDefaultSlotsMaterial, baseSlots, iconSlots);
@@ -0,0 +1,23 @@
1
+ import { DefaultizedZoomOptions, ZoomData } from '@mui/x-charts/internals';
2
+ /**
3
+ * Calculates the new zoom range based on the current zoom, step, and constraints.
4
+ *
5
+ * A step of 0.1 or -0.1 means that 10% of the current range will be subtracted/added, respectively, and assuming no
6
+ * constraints (e.g., minSpan, maxEnd) are faced.
7
+ *
8
+ * @param zoom Current zoom range with start and end values.
9
+ * @param step Percentage of the current zoom range to adjust (positive to zoom in, negative to zoom out). Ranges from 0 to 1.
10
+ * @param minSpan Minimum allowed span between start and end values.
11
+ * @param maxSpan Maximum allowed span between start and end values.
12
+ * @param minStart Minimum allowed start value.
13
+ * @param maxEnd Maximum allowed end value.
14
+ */
15
+ export declare function calculateZoom<T extends Readonly<Pick<ZoomData, 'start' | 'end'>>>(zoom: T, step: number, {
16
+ minSpan,
17
+ maxSpan,
18
+ minStart,
19
+ maxEnd
20
+ }: Pick<DefaultizedZoomOptions, 'minSpan' | 'maxSpan' | 'minStart' | 'maxEnd'>): T & {
21
+ start: number;
22
+ end: number;
23
+ };
@@ -0,0 +1,32 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ /**
3
+ * Calculates the new zoom range based on the current zoom, step, and constraints.
4
+ *
5
+ * A step of 0.1 or -0.1 means that 10% of the current range will be subtracted/added, respectively, and assuming no
6
+ * constraints (e.g., minSpan, maxEnd) are faced.
7
+ *
8
+ * @param zoom Current zoom range with start and end values.
9
+ * @param step Percentage of the current zoom range to adjust (positive to zoom in, negative to zoom out). Ranges from 0 to 1.
10
+ * @param minSpan Minimum allowed span between start and end values.
11
+ * @param maxSpan Maximum allowed span between start and end values.
12
+ * @param minStart Minimum allowed start value.
13
+ * @param maxEnd Maximum allowed end value.
14
+ */
15
+ export function calculateZoom(zoom, step, {
16
+ minSpan,
17
+ maxSpan,
18
+ minStart,
19
+ maxEnd
20
+ }) {
21
+ const span = zoom.end - zoom.start;
22
+ let delta = span * step / 2;
23
+ if (delta > 0) {
24
+ delta = Math.min(delta, (span - minSpan) / 2);
25
+ } else {
26
+ delta = Math.max(delta, (span - maxSpan) / 2);
27
+ }
28
+ return _extends({}, zoom, {
29
+ start: Math.max(minStart, zoom.start + delta),
30
+ end: Math.min(maxEnd, zoom.end - delta)
31
+ });
32
+ }
@@ -1,4 +1,4 @@
1
1
  import { ChartPlugin, AxisId, DefaultizedZoomOptions, ZoomData } from '@mui/x-charts/internals';
2
2
  import { UseChartProZoomSignature } from "./useChartProZoom.types.js";
3
- export declare function initializeZoomData(options: Record<AxisId, DefaultizedZoomOptions>, zoomData?: readonly ZoomData[]): ZoomData[];
3
+ export declare function initializeZoomData(options: Record<AxisId, Pick<DefaultizedZoomOptions, 'axisId' | 'minStart' | 'maxEnd'>>, zoomData?: readonly ZoomData[]): ZoomData[];
4
4
  export declare const useChartProZoom: ChartPlugin<UseChartProZoomSignature>;
@@ -2,10 +2,11 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
- import { useSelector, getSVGPoint, selectorChartDrawingArea, createZoomLookup, selectorChartZoomOptionsLookup } from '@mui/x-charts/internals';
5
+ import { useSelector, getSVGPoint, selectorChartDrawingArea, createZoomLookup, selectorChartZoomOptionsLookup, selectorChartAxisZoomOptionsLookup } from '@mui/x-charts/internals';
6
6
  import { useEventCallback } from '@mui/material/utils';
7
7
  import { rafThrottle } from '@mui/x-internals/rafThrottle';
8
8
  import debounce from '@mui/utils/debounce';
9
+ import { calculateZoom } from "./calculateZoom.js";
9
10
  import { getDiff, getHorizontalCenterRatio, getPinchScaleRatio, getVerticalCenterRatio, getWheelScaleRatio, isSpanValid, preventDefault, zoomAtPoint } from "./useChartProZoom.utils.js";
10
11
 
11
12
  // It is helpful to avoid the need to provide the possibly auto-generated id for each axis.
@@ -101,6 +102,34 @@ export const useChartProZoom = ({
101
102
  });
102
103
  });
103
104
  }, [onZoomChange, store, removeIsInteracting]);
105
+ const moveZoomRange = React.useCallback((axisId, by) => {
106
+ setZoomDataCallback(prevZoomData => {
107
+ return prevZoomData.map(zoom => {
108
+ if (zoom.axisId !== axisId) {
109
+ return zoom;
110
+ }
111
+ const options = optionsLookup[axisId];
112
+ if (!options) {
113
+ return zoom;
114
+ }
115
+ let start = zoom.start;
116
+ let end = zoom.end;
117
+ if (by > 0) {
118
+ const span = end - start;
119
+ end = Math.min(end + by, options.maxEnd);
120
+ start = end - span;
121
+ } else {
122
+ const span = end - start;
123
+ start = Math.max(start + by, options.minStart);
124
+ end = start + span;
125
+ }
126
+ return _extends({}, zoom, {
127
+ start,
128
+ end
129
+ });
130
+ });
131
+ });
132
+ }, [optionsLookup, setZoomDataCallback]);
104
133
  React.useEffect(() => {
105
134
  return () => {
106
135
  removeIsInteracting.clear();
@@ -327,12 +356,25 @@ export const useChartProZoom = ({
327
356
  rafThrottledSetZoomData.clear();
328
357
  };
329
358
  }, [svgRef, drawingArea, isZoomEnabled, optionsLookup, instance, setZoomDataCallback]);
359
+ const zoom = React.useCallback(step => {
360
+ setZoomDataCallback(prev => prev.map(zoomData => {
361
+ const zoomOptions = selectorChartAxisZoomOptionsLookup(store.getSnapshot(), zoomData.axisId);
362
+ return calculateZoom(zoomData, step, zoomOptions);
363
+ }));
364
+ }, [setZoomDataCallback, store]);
365
+ const zoomIn = React.useCallback(() => zoom(0.1), [zoom]);
366
+ const zoomOut = React.useCallback(() => zoom(-0.1), [zoom]);
330
367
  return {
331
368
  publicAPI: {
332
- setZoomData: setZoomDataCallback
369
+ setZoomData: setZoomDataCallback,
370
+ zoomIn,
371
+ zoomOut
333
372
  },
334
373
  instance: {
335
- setZoomData: setZoomDataCallback
374
+ setZoomData: setZoomDataCallback,
375
+ moveZoomRange,
376
+ zoomIn,
377
+ zoomOut
336
378
  }
337
379
  };
338
380
  };