@mui/x-charts-pro 7.0.0-alpha.1 → 7.0.0-alpha.3

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 (45) hide show
  1. package/BarChartPro/BarChartPro.js +6 -1
  2. package/CHANGELOG.md +151 -2
  3. package/ChartContainerPro/ChartContainerPro.js +2 -0
  4. package/Heatmap/Heatmap.js +9 -2
  5. package/LineChartPro/LineChartPro.js +6 -1
  6. package/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
  7. package/ScatterChartPro/ScatterChartPro.js +8 -1
  8. package/context/CartesianProviderPro/CartesianProviderPro.js +44 -8
  9. package/context/CartesianProviderPro/createAxisFilterMapper.d.ts +12 -0
  10. package/context/CartesianProviderPro/createAxisFilterMapper.js +60 -0
  11. package/context/ZoomProvider/Zoom.types.d.ts +10 -0
  12. package/context/ZoomProvider/defaultizeZoom.js +2 -1
  13. package/index.js +1 -1
  14. package/internals/utils/releaseInfo.js +1 -1
  15. package/modern/BarChartPro/BarChartPro.js +6 -1
  16. package/modern/ChartContainerPro/ChartContainerPro.js +2 -0
  17. package/modern/Heatmap/Heatmap.js +9 -2
  18. package/modern/LineChartPro/LineChartPro.js +6 -1
  19. package/modern/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
  20. package/modern/ScatterChartPro/ScatterChartPro.js +8 -1
  21. package/modern/context/CartesianProviderPro/CartesianProviderPro.js +44 -8
  22. package/modern/context/CartesianProviderPro/createAxisFilterMapper.js +60 -0
  23. package/modern/context/ZoomProvider/defaultizeZoom.js +2 -1
  24. package/modern/index.js +1 -1
  25. package/modern/internals/utils/releaseInfo.js +1 -1
  26. package/modern/themeAugmentation/index.js +4 -0
  27. package/node/BarChartPro/BarChartPro.js +6 -1
  28. package/node/ChartContainerPro/ChartContainerPro.js +2 -0
  29. package/node/Heatmap/Heatmap.js +9 -2
  30. package/node/LineChartPro/LineChartPro.js +6 -1
  31. package/node/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
  32. package/node/ScatterChartPro/ScatterChartPro.js +8 -1
  33. package/node/context/CartesianProviderPro/CartesianProviderPro.js +45 -8
  34. package/node/context/CartesianProviderPro/createAxisFilterMapper.js +68 -0
  35. package/node/context/ZoomProvider/defaultizeZoom.js +2 -1
  36. package/node/index.js +1 -1
  37. package/node/internals/utils/releaseInfo.js +1 -1
  38. package/node/themeAugmentation/index.js +49 -0
  39. package/package.json +8 -8
  40. package/themeAugmentation/components.d.ts +25 -0
  41. package/themeAugmentation/index.d.ts +4 -0
  42. package/themeAugmentation/index.js +4 -0
  43. package/themeAugmentation/overrides.d.ts +13 -0
  44. package/themeAugmentation/package.json +6 -0
  45. package/themeAugmentation/props.d.ts +22 -0
@@ -3,6 +3,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
3
3
  const _excluded = ["zoom", "onZoomChange"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
+ import { useThemeProps } from '@mui/material/styles';
6
7
  import { ChartsOverlay } from '@mui/x-charts/ChartsOverlay';
7
8
  import { ScatterPlot } from '@mui/x-charts/ScatterChart';
8
9
  import { ZAxisContextProvider } from '@mui/x-charts/context';
@@ -26,7 +27,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
27
  *
27
28
  * - [ScatterChart API](https://mui.com/x/api/charts/scatter-chart/)
28
29
  */
29
- const ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(props, ref) {
30
+ const ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(inProps, ref) {
31
+ const props = useThemeProps({
32
+ props: inProps,
33
+ name: 'MuiScatterChartPro'
34
+ });
30
35
  const {
31
36
  zoom,
32
37
  onZoomChange
@@ -284,6 +289,7 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
284
289
  tickSize: PropTypes.number,
285
290
  valueFormatter: PropTypes.func,
286
291
  zoom: PropTypes.oneOfType([PropTypes.shape({
292
+ filterMode: PropTypes.oneOf(['discard', 'keep']),
287
293
  maxEnd: PropTypes.number,
288
294
  maxSpan: PropTypes.number,
289
295
  minSpan: PropTypes.number,
@@ -345,6 +351,7 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
345
351
  tickSize: PropTypes.number,
346
352
  valueFormatter: PropTypes.func,
347
353
  zoom: PropTypes.oneOfType([PropTypes.shape({
354
+ filterMode: PropTypes.oneOf(['discard', 'keep']),
348
355
  maxEnd: PropTypes.number,
349
356
  maxSpan: PropTypes.number,
350
357
  minSpan: PropTypes.number,
@@ -1,6 +1,8 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
3
  import { useDrawingArea, useSeries, CartesianContext, cartesianProviderUtils, useXExtremumGetter, useYExtremumGetter } from '@mui/x-charts/internals';
3
4
  import { useZoom } from '../ZoomProvider/useZoom';
5
+ import { createAxisFilterMapper, createGetAxisFilters } from './createAxisFilterMapper';
4
6
  import { jsx as _jsx } from "react/jsx-runtime";
5
7
  const {
6
8
  computeValue
@@ -9,34 +11,68 @@ function CartesianProviderPro(props) {
9
11
  const {
10
12
  xAxis,
11
13
  yAxis,
12
- dataset,
13
14
  children
14
15
  } = props;
15
16
  const formattedSeries = useSeries();
16
17
  const drawingArea = useDrawingArea();
17
18
  const {
18
- zoomData
19
+ zoomData,
20
+ options
19
21
  } = useZoom();
20
22
  const xExtremumGetters = useXExtremumGetter();
21
23
  const yExtremumGetters = useYExtremumGetter();
24
+ const getFilters = React.useMemo(() => {
25
+ const xMapper = createAxisFilterMapper({
26
+ zoomData,
27
+ extremumGetter: xExtremumGetters,
28
+ formattedSeries,
29
+ direction: 'x'
30
+ });
31
+ const yMapper = createAxisFilterMapper({
32
+ zoomData,
33
+ extremumGetter: yExtremumGetters,
34
+ formattedSeries,
35
+ direction: 'y'
36
+ });
37
+ const xFilters = xAxis.reduce((acc, axis, index) => {
38
+ const filter = xMapper(axis, index);
39
+ if (filter !== null) {
40
+ acc[axis.id] = filter;
41
+ }
42
+ return acc;
43
+ }, {});
44
+ const yFilters = yAxis.reduce((acc, axis, index) => {
45
+ const filter = yMapper(axis, index);
46
+ if (filter !== null) {
47
+ acc[axis.id] = filter;
48
+ }
49
+ return acc;
50
+ }, {});
51
+ if (Object.keys(xFilters).length === 0 && Object.keys(yFilters).length === 0) {
52
+ return undefined;
53
+ }
54
+ return createGetAxisFilters(_extends({}, xFilters, yFilters));
55
+ }, [formattedSeries, xAxis, xExtremumGetters, yAxis, yExtremumGetters, zoomData]);
22
56
  const xValues = React.useMemo(() => computeValue({
23
57
  drawingArea,
24
58
  formattedSeries,
25
59
  axis: xAxis,
26
60
  extremumGetters: xExtremumGetters,
27
- dataset,
28
61
  axisDirection: 'x',
29
- zoomData
30
- }), [drawingArea, formattedSeries, xAxis, xExtremumGetters, dataset, zoomData]);
62
+ zoomData,
63
+ zoomOptions: options,
64
+ getFilters
65
+ }), [drawingArea, formattedSeries, xAxis, xExtremumGetters, zoomData, options, getFilters]);
31
66
  const yValues = React.useMemo(() => computeValue({
32
67
  drawingArea,
33
68
  formattedSeries,
34
69
  axis: yAxis,
35
70
  extremumGetters: yExtremumGetters,
36
- dataset,
37
71
  axisDirection: 'y',
38
- zoomData
39
- }), [drawingArea, formattedSeries, yAxis, yExtremumGetters, dataset, zoomData]);
72
+ zoomData,
73
+ zoomOptions: options,
74
+ getFilters
75
+ }), [drawingArea, formattedSeries, yAxis, yExtremumGetters, zoomData, options, getFilters]);
40
76
  const value = React.useMemo(() => ({
41
77
  isInitialized: true,
42
78
  data: {
@@ -0,0 +1,60 @@
1
+ import { getAxisExtremum, isDefined, getScale } from '@mui/x-charts/internals';
2
+ export const createAxisFilterMapper = ({
3
+ zoomData,
4
+ extremumGetter,
5
+ formattedSeries,
6
+ direction
7
+ }) => (axis, axisIndex) => {
8
+ if (typeof axis.zoom !== 'object' || axis.zoom.filterMode !== 'discard') {
9
+ return null;
10
+ }
11
+ const zoom = zoomData?.find(({
12
+ axisId
13
+ }) => axisId === axis.id);
14
+ if (zoom === undefined || zoom.start <= 0 && zoom.end >= 100) {
15
+ // No zoom, or zoom with all data visible
16
+ return null;
17
+ }
18
+ let extremums = [];
19
+ const scaleType = axis.scaleType;
20
+ if (scaleType === 'point' || scaleType === 'band') {
21
+ extremums = [0, (axis.data?.length ?? 1) - 1];
22
+ } else {
23
+ extremums = getAxisExtremum(axis, extremumGetter, axisIndex === 0, formattedSeries);
24
+ }
25
+ let min;
26
+ let max;
27
+
28
+ // @ts-expect-error The function defaults to linear scale if the scaleType is not recognized.
29
+ [min, max] = getScale(scaleType, extremums, [0, 100]).nice().domain();
30
+ min = min instanceof Date ? min.getTime() : min;
31
+ max = max instanceof Date ? max.getTime() : max;
32
+ const minVal = min + zoom.start * (max - min) / 100;
33
+ const maxVal = min + zoom.end * (max - min) / 100;
34
+ return (value, dataIndex) => {
35
+ const val = value[direction] ?? axis.data?.[dataIndex];
36
+ if (val == null) {
37
+ // If the value does not exist because of missing data point, or out of range index, we just ignore.
38
+ return true;
39
+ }
40
+ if (axis.scaleType === 'point' || axis.scaleType === 'band' || typeof val === 'string') {
41
+ return dataIndex >= minVal && dataIndex <= maxVal;
42
+ }
43
+ return val >= minVal && val <= maxVal;
44
+ };
45
+ };
46
+ export const createGetAxisFilters = filters => ({
47
+ currentAxisId,
48
+ seriesXAxisId,
49
+ seriesYAxisId,
50
+ isDefaultAxis
51
+ }) => {
52
+ return (value, dataIndex) => {
53
+ const axisId = currentAxisId === seriesXAxisId ? seriesYAxisId : seriesXAxisId;
54
+ if (!axisId || isDefaultAxis) {
55
+ return Object.values(filters ?? {})[0]?.(value, dataIndex) ?? true;
56
+ }
57
+ const data = [seriesYAxisId, seriesXAxisId].filter(id => id !== currentAxisId).map(id => filters[id ?? '']).filter(isDefined);
58
+ return data.every(f => f(value, dataIndex));
59
+ };
60
+ };
@@ -6,7 +6,8 @@ const defaultZoomOptions = {
6
6
  step: 5,
7
7
  minSpan: 10,
8
8
  maxSpan: 100,
9
- panning: true
9
+ panning: true,
10
+ filterMode: 'keep'
10
11
  };
11
12
  export const defaultizeZoom = (axis, axisDirection) => {
12
13
  if (!axis) {
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v7.0.0-alpha.1
2
+ * @mui/x-charts-pro v7.0.0-alpha.3
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTcyMzc1NTYwMDAwMA==";
3
+ const releaseInfo = "MTcyNDg4MjQwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -0,0 +1,4 @@
1
+ export * from '@mui/x-charts/themeAugmentation';
2
+ export * from './overrides';
3
+ export * from './props';
4
+ export * from './components';
@@ -9,6 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _styles = require("@mui/material/styles");
12
13
  var _BarChart = require("@mui/x-charts/BarChart");
13
14
  var _ChartsOnAxisClickHandler = require("@mui/x-charts/ChartsOnAxisClickHandler");
14
15
  var _ChartsGrid = require("@mui/x-charts/ChartsGrid");
@@ -37,7 +38,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
37
38
  *
38
39
  * - [BarChart API](https://mui.com/x/api/charts/bar-chart/)
39
40
  */
40
- const BarChartPro = exports.BarChartPro = /*#__PURE__*/React.forwardRef(function BarChartPro(props, ref) {
41
+ const BarChartPro = exports.BarChartPro = /*#__PURE__*/React.forwardRef(function BarChartPro(inProps, ref) {
42
+ const props = (0, _styles.useThemeProps)({
43
+ props: inProps,
44
+ name: 'MuiBarChartPro'
45
+ });
41
46
  const {
42
47
  zoom,
43
48
  onZoomChange
@@ -187,6 +187,7 @@ process.env.NODE_ENV !== "production" ? ChartContainerPro.propTypes = {
187
187
  tickSize: _propTypes.default.number,
188
188
  valueFormatter: _propTypes.default.func,
189
189
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
190
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
190
191
  maxEnd: _propTypes.default.number,
191
192
  maxSpan: _propTypes.default.number,
192
193
  minSpan: _propTypes.default.number,
@@ -248,6 +249,7 @@ process.env.NODE_ENV !== "production" ? ChartContainerPro.propTypes = {
248
249
  tickSize: _propTypes.default.number,
249
250
  valueFormatter: _propTypes.default.func,
250
251
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
252
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
251
253
  maxEnd: _propTypes.default.number,
252
254
  maxSpan: _propTypes.default.number,
253
255
  minSpan: _propTypes.default.number,
@@ -8,8 +8,9 @@ exports.Heatmap = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
- var _d3Interpolate = require("@mui/x-charts-vendor/d3-interpolate");
11
+ var _styles = require("@mui/material/styles");
12
12
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
13
+ var _d3Interpolate = require("@mui/x-charts-vendor/d3-interpolate");
13
14
  var _ChartsAxis = require("@mui/x-charts/ChartsAxis");
14
15
  var _ChartsTooltip = require("@mui/x-charts/ChartsTooltip");
15
16
  var _ChartsClipPath = require("@mui/x-charts/ChartsClipPath");
@@ -24,7 +25,11 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
24
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
26
  // The GnBu: https://github.com/d3/d3-scale-chromatic/blob/main/src/sequential-multi/GnBu.js
26
27
  const defaultColorMap = (0, _d3Interpolate.interpolateRgbBasis)(['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081']);
27
- const Heatmap = exports.Heatmap = /*#__PURE__*/React.forwardRef(function Heatmap(props, ref) {
28
+ const Heatmap = exports.Heatmap = /*#__PURE__*/React.forwardRef(function Heatmap(inProps, ref) {
29
+ const props = (0, _styles.useThemeProps)({
30
+ props: inProps,
31
+ name: 'MuiHeatmap'
32
+ });
28
33
  const {
29
34
  xAxis,
30
35
  yAxis,
@@ -298,6 +303,7 @@ process.env.NODE_ENV !== "production" ? Heatmap.propTypes = {
298
303
  tickSize: _propTypes.default.number,
299
304
  valueFormatter: _propTypes.default.func,
300
305
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
306
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
301
307
  maxEnd: _propTypes.default.number,
302
308
  maxSpan: _propTypes.default.number,
303
309
  minSpan: _propTypes.default.number,
@@ -361,6 +367,7 @@ process.env.NODE_ENV !== "production" ? Heatmap.propTypes = {
361
367
  tickSize: _propTypes.default.number,
362
368
  valueFormatter: _propTypes.default.func,
363
369
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
370
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
364
371
  maxEnd: _propTypes.default.number,
365
372
  maxSpan: _propTypes.default.number,
366
373
  minSpan: _propTypes.default.number,
@@ -9,6 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _styles = require("@mui/material/styles");
12
13
  var _LineChart = require("@mui/x-charts/LineChart");
13
14
  var _ChartsOnAxisClickHandler = require("@mui/x-charts/ChartsOnAxisClickHandler");
14
15
  var _ChartsGrid = require("@mui/x-charts/ChartsGrid");
@@ -36,7 +37,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
36
37
  *
37
38
  * - [LineChart API](https://mui.com/x/api/charts/line-chart/)
38
39
  */
39
- const LineChartPro = exports.LineChartPro = /*#__PURE__*/React.forwardRef(function LineChartPro(props, ref) {
40
+ const LineChartPro = exports.LineChartPro = /*#__PURE__*/React.forwardRef(function LineChartPro(inProps, ref) {
41
+ const props = (0, _styles.useThemeProps)({
42
+ props: inProps,
43
+ name: 'MuiLineChartPro'
44
+ });
40
45
  const {
41
46
  zoom,
42
47
  onZoomChange
@@ -164,6 +164,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainerPro.propTypes =
164
164
  tickSize: _propTypes.default.number,
165
165
  valueFormatter: _propTypes.default.func,
166
166
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
167
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
167
168
  maxEnd: _propTypes.default.number,
168
169
  maxSpan: _propTypes.default.number,
169
170
  minSpan: _propTypes.default.number,
@@ -225,6 +226,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainerPro.propTypes =
225
226
  tickSize: _propTypes.default.number,
226
227
  valueFormatter: _propTypes.default.func,
227
228
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
229
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
228
230
  maxEnd: _propTypes.default.number,
229
231
  maxSpan: _propTypes.default.number,
230
232
  minSpan: _propTypes.default.number,
@@ -9,6 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _styles = require("@mui/material/styles");
12
13
  var _ChartsOverlay = require("@mui/x-charts/ChartsOverlay");
13
14
  var _ScatterChart = require("@mui/x-charts/ScatterChart");
14
15
  var _context = require("@mui/x-charts/context");
@@ -35,7 +36,11 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
35
36
  *
36
37
  * - [ScatterChart API](https://mui.com/x/api/charts/scatter-chart/)
37
38
  */
38
- const ScatterChartPro = exports.ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(props, ref) {
39
+ const ScatterChartPro = exports.ScatterChartPro = /*#__PURE__*/React.forwardRef(function ScatterChartPro(inProps, ref) {
40
+ const props = (0, _styles.useThemeProps)({
41
+ props: inProps,
42
+ name: 'MuiScatterChartPro'
43
+ });
39
44
  const {
40
45
  zoom,
41
46
  onZoomChange
@@ -293,6 +298,7 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
293
298
  tickSize: _propTypes.default.number,
294
299
  valueFormatter: _propTypes.default.func,
295
300
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
301
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
296
302
  maxEnd: _propTypes.default.number,
297
303
  maxSpan: _propTypes.default.number,
298
304
  minSpan: _propTypes.default.number,
@@ -354,6 +360,7 @@ process.env.NODE_ENV !== "production" ? ScatterChartPro.propTypes = {
354
360
  tickSize: _propTypes.default.number,
355
361
  valueFormatter: _propTypes.default.func,
356
362
  zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
363
+ filterMode: _propTypes.default.oneOf(['discard', 'keep']),
357
364
  maxEnd: _propTypes.default.number,
358
365
  maxSpan: _propTypes.default.number,
359
366
  minSpan: _propTypes.default.number,
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.CartesianProviderPro = CartesianProviderPro;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
9
  var React = _interopRequireWildcard(require("react"));
8
10
  var _internals = require("@mui/x-charts/internals");
9
11
  var _useZoom = require("../ZoomProvider/useZoom");
12
+ var _createAxisFilterMapper = require("./createAxisFilterMapper");
10
13
  var _jsxRuntime = require("react/jsx-runtime");
11
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -17,34 +20,68 @@ function CartesianProviderPro(props) {
17
20
  const {
18
21
  xAxis,
19
22
  yAxis,
20
- dataset,
21
23
  children
22
24
  } = props;
23
25
  const formattedSeries = (0, _internals.useSeries)();
24
26
  const drawingArea = (0, _internals.useDrawingArea)();
25
27
  const {
26
- zoomData
28
+ zoomData,
29
+ options
27
30
  } = (0, _useZoom.useZoom)();
28
31
  const xExtremumGetters = (0, _internals.useXExtremumGetter)();
29
32
  const yExtremumGetters = (0, _internals.useYExtremumGetter)();
33
+ const getFilters = React.useMemo(() => {
34
+ const xMapper = (0, _createAxisFilterMapper.createAxisFilterMapper)({
35
+ zoomData,
36
+ extremumGetter: xExtremumGetters,
37
+ formattedSeries,
38
+ direction: 'x'
39
+ });
40
+ const yMapper = (0, _createAxisFilterMapper.createAxisFilterMapper)({
41
+ zoomData,
42
+ extremumGetter: yExtremumGetters,
43
+ formattedSeries,
44
+ direction: 'y'
45
+ });
46
+ const xFilters = xAxis.reduce((acc, axis, index) => {
47
+ const filter = xMapper(axis, index);
48
+ if (filter !== null) {
49
+ acc[axis.id] = filter;
50
+ }
51
+ return acc;
52
+ }, {});
53
+ const yFilters = yAxis.reduce((acc, axis, index) => {
54
+ const filter = yMapper(axis, index);
55
+ if (filter !== null) {
56
+ acc[axis.id] = filter;
57
+ }
58
+ return acc;
59
+ }, {});
60
+ if (Object.keys(xFilters).length === 0 && Object.keys(yFilters).length === 0) {
61
+ return undefined;
62
+ }
63
+ return (0, _createAxisFilterMapper.createGetAxisFilters)((0, _extends2.default)({}, xFilters, yFilters));
64
+ }, [formattedSeries, xAxis, xExtremumGetters, yAxis, yExtremumGetters, zoomData]);
30
65
  const xValues = React.useMemo(() => computeValue({
31
66
  drawingArea,
32
67
  formattedSeries,
33
68
  axis: xAxis,
34
69
  extremumGetters: xExtremumGetters,
35
- dataset,
36
70
  axisDirection: 'x',
37
- zoomData
38
- }), [drawingArea, formattedSeries, xAxis, xExtremumGetters, dataset, zoomData]);
71
+ zoomData,
72
+ zoomOptions: options,
73
+ getFilters
74
+ }), [drawingArea, formattedSeries, xAxis, xExtremumGetters, zoomData, options, getFilters]);
39
75
  const yValues = React.useMemo(() => computeValue({
40
76
  drawingArea,
41
77
  formattedSeries,
42
78
  axis: yAxis,
43
79
  extremumGetters: yExtremumGetters,
44
- dataset,
45
80
  axisDirection: 'y',
46
- zoomData
47
- }), [drawingArea, formattedSeries, yAxis, yExtremumGetters, dataset, zoomData]);
81
+ zoomData,
82
+ zoomOptions: options,
83
+ getFilters
84
+ }), [drawingArea, formattedSeries, yAxis, yExtremumGetters, zoomData, options, getFilters]);
48
85
  const value = React.useMemo(() => ({
49
86
  isInitialized: true,
50
87
  data: {
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createGetAxisFilters = exports.createAxisFilterMapper = void 0;
7
+ var _internals = require("@mui/x-charts/internals");
8
+ const createAxisFilterMapper = ({
9
+ zoomData,
10
+ extremumGetter,
11
+ formattedSeries,
12
+ direction
13
+ }) => (axis, axisIndex) => {
14
+ if (typeof axis.zoom !== 'object' || axis.zoom.filterMode !== 'discard') {
15
+ return null;
16
+ }
17
+ const zoom = zoomData?.find(({
18
+ axisId
19
+ }) => axisId === axis.id);
20
+ if (zoom === undefined || zoom.start <= 0 && zoom.end >= 100) {
21
+ // No zoom, or zoom with all data visible
22
+ return null;
23
+ }
24
+ let extremums = [];
25
+ const scaleType = axis.scaleType;
26
+ if (scaleType === 'point' || scaleType === 'band') {
27
+ extremums = [0, (axis.data?.length ?? 1) - 1];
28
+ } else {
29
+ extremums = (0, _internals.getAxisExtremum)(axis, extremumGetter, axisIndex === 0, formattedSeries);
30
+ }
31
+ let min;
32
+ let max;
33
+
34
+ // @ts-expect-error The function defaults to linear scale if the scaleType is not recognized.
35
+ [min, max] = (0, _internals.getScale)(scaleType, extremums, [0, 100]).nice().domain();
36
+ min = min instanceof Date ? min.getTime() : min;
37
+ max = max instanceof Date ? max.getTime() : max;
38
+ const minVal = min + zoom.start * (max - min) / 100;
39
+ const maxVal = min + zoom.end * (max - min) / 100;
40
+ return (value, dataIndex) => {
41
+ const val = value[direction] ?? axis.data?.[dataIndex];
42
+ if (val == null) {
43
+ // If the value does not exist because of missing data point, or out of range index, we just ignore.
44
+ return true;
45
+ }
46
+ if (axis.scaleType === 'point' || axis.scaleType === 'band' || typeof val === 'string') {
47
+ return dataIndex >= minVal && dataIndex <= maxVal;
48
+ }
49
+ return val >= minVal && val <= maxVal;
50
+ };
51
+ };
52
+ exports.createAxisFilterMapper = createAxisFilterMapper;
53
+ const createGetAxisFilters = filters => ({
54
+ currentAxisId,
55
+ seriesXAxisId,
56
+ seriesYAxisId,
57
+ isDefaultAxis
58
+ }) => {
59
+ return (value, dataIndex) => {
60
+ const axisId = currentAxisId === seriesXAxisId ? seriesYAxisId : seriesXAxisId;
61
+ if (!axisId || isDefaultAxis) {
62
+ return Object.values(filters ?? {})[0]?.(value, dataIndex) ?? true;
63
+ }
64
+ const data = [seriesYAxisId, seriesXAxisId].filter(id => id !== currentAxisId).map(id => filters[id ?? '']).filter(_internals.isDefined);
65
+ return data.every(f => f(value, dataIndex));
66
+ };
67
+ };
68
+ exports.createGetAxisFilters = createGetAxisFilters;
@@ -13,7 +13,8 @@ const defaultZoomOptions = {
13
13
  step: 5,
14
14
  minSpan: 10,
15
15
  maxSpan: 100,
16
- panning: true
16
+ panning: true,
17
+ filterMode: 'keep'
17
18
  };
18
19
  const defaultizeZoom = (axis, axisDirection) => {
19
20
  if (!axis) {
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v7.0.0-alpha.1
2
+ * @mui/x-charts-pro v7.0.0-alpha.3
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getReleaseInfo = void 0;
7
7
  var _utils = require("@mui/utils");
8
8
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTcyMzc1NTYwMDAwMA==";
9
+ const releaseInfo = "MTcyNDg4MjQwMDAwMA==";
10
10
  if (process.env.NODE_ENV !== 'production') {
11
11
  // A simple hack to set the value in the test environment (has no build step).
12
12
  // eslint-disable-next-line no-useless-concat
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _themeAugmentation = require("@mui/x-charts/themeAugmentation");
7
+ Object.keys(_themeAugmentation).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _themeAugmentation[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _themeAugmentation[key];
14
+ }
15
+ });
16
+ });
17
+ var _overrides = require("./overrides");
18
+ Object.keys(_overrides).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _overrides[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _overrides[key];
25
+ }
26
+ });
27
+ });
28
+ var _props = require("./props");
29
+ Object.keys(_props).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _props[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _props[key];
36
+ }
37
+ });
38
+ });
39
+ var _components = require("./components");
40
+ Object.keys(_components).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _components[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _components[key];
47
+ }
48
+ });
49
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts-pro",
3
- "version": "7.0.0-alpha.1",
3
+ "version": "7.0.0-alpha.3",
4
4
  "description": "The Pro plan edition of the Charts components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -29,21 +29,21 @@
29
29
  "directory": "packages/x-charts-pro"
30
30
  },
31
31
  "dependencies": {
32
- "@babel/runtime": "^7.25.0",
33
- "@mui/system": "^5.16.5",
34
- "@mui/utils": "^5.16.5",
32
+ "@babel/runtime": "^7.25.4",
33
+ "@mui/utils": "^5.16.6",
35
34
  "@react-spring/rafz": "^9.7.4",
36
35
  "@react-spring/web": "^9.7.4",
37
36
  "clsx": "^2.1.1",
38
37
  "prop-types": "^15.8.1",
39
- "@mui/x-charts": "7.13.0",
40
- "@mui/x-charts-vendor": "7.13.0",
41
- "@mui/x-license": "7.13.0"
38
+ "@mui/x-license": "7.15.0",
39
+ "@mui/x-charts-vendor": "7.15.0",
40
+ "@mui/x-charts": "7.15.0"
42
41
  },
43
42
  "peerDependencies": {
44
43
  "@emotion/react": "^11.9.0",
45
44
  "@emotion/styled": "^11.8.1",
46
- "@mui/material": "^5.15.14",
45
+ "@mui/material": "^5.15.14 || ^6.0.0",
46
+ "@mui/system": "^5.15.14 || ^6.0.0",
47
47
  "react": "^17.0.0 || ^18.0.0",
48
48
  "react-dom": "^17.0.0 || ^18.0.0"
49
49
  },