@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.
- package/BarChartPro/BarChartPro.js +6 -1
- package/CHANGELOG.md +151 -2
- package/ChartContainerPro/ChartContainerPro.js +2 -0
- package/Heatmap/Heatmap.js +9 -2
- package/LineChartPro/LineChartPro.js +6 -1
- package/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
- package/ScatterChartPro/ScatterChartPro.js +8 -1
- package/context/CartesianProviderPro/CartesianProviderPro.js +44 -8
- package/context/CartesianProviderPro/createAxisFilterMapper.d.ts +12 -0
- package/context/CartesianProviderPro/createAxisFilterMapper.js +60 -0
- package/context/ZoomProvider/Zoom.types.d.ts +10 -0
- package/context/ZoomProvider/defaultizeZoom.js +2 -1
- package/index.js +1 -1
- package/internals/utils/releaseInfo.js +1 -1
- package/modern/BarChartPro/BarChartPro.js +6 -1
- package/modern/ChartContainerPro/ChartContainerPro.js +2 -0
- package/modern/Heatmap/Heatmap.js +9 -2
- package/modern/LineChartPro/LineChartPro.js +6 -1
- package/modern/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
- package/modern/ScatterChartPro/ScatterChartPro.js +8 -1
- package/modern/context/CartesianProviderPro/CartesianProviderPro.js +44 -8
- package/modern/context/CartesianProviderPro/createAxisFilterMapper.js +60 -0
- package/modern/context/ZoomProvider/defaultizeZoom.js +2 -1
- package/modern/index.js +1 -1
- package/modern/internals/utils/releaseInfo.js +1 -1
- package/modern/themeAugmentation/index.js +4 -0
- package/node/BarChartPro/BarChartPro.js +6 -1
- package/node/ChartContainerPro/ChartContainerPro.js +2 -0
- package/node/Heatmap/Heatmap.js +9 -2
- package/node/LineChartPro/LineChartPro.js +6 -1
- package/node/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +2 -0
- package/node/ScatterChartPro/ScatterChartPro.js +8 -1
- package/node/context/CartesianProviderPro/CartesianProviderPro.js +45 -8
- package/node/context/CartesianProviderPro/createAxisFilterMapper.js +68 -0
- package/node/context/ZoomProvider/defaultizeZoom.js +2 -1
- package/node/index.js +1 -1
- package/node/internals/utils/releaseInfo.js +1 -1
- package/node/themeAugmentation/index.js +49 -0
- package/package.json +8 -8
- package/themeAugmentation/components.d.ts +25 -0
- package/themeAugmentation/index.d.ts +4 -0
- package/themeAugmentation/index.js +4 -0
- package/themeAugmentation/overrides.d.ts +13 -0
- package/themeAugmentation/package.json +6 -0
- 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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
};
|
package/modern/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ponyfillGlobal } from '@mui/utils';
|
|
2
2
|
export const getReleaseInfo = () => {
|
|
3
|
-
const releaseInfo = "
|
|
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
|
|
@@ -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(
|
|
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,
|
package/node/Heatmap/Heatmap.js
CHANGED
|
@@ -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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
package/node/index.js
CHANGED
|
@@ -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 = "
|
|
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.
|
|
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.
|
|
33
|
-
"@mui/
|
|
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-
|
|
40
|
-
"@mui/x-charts-vendor": "7.
|
|
41
|
-
"@mui/x-
|
|
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
|
},
|