@mui/x-charts-pro 8.5.2 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +203 -11
  2. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  3. package/ChartZoomSlider/internals/ChartAxisZoomSlider.js +1 -1
  4. package/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.js +20 -31
  5. package/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.js +1 -8
  6. package/ChartZoomSlider/internals/zoom-utils.d.ts +3 -1
  7. package/ChartZoomSlider/internals/zoom-utils.js +19 -8
  8. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.d.ts +27 -0
  9. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.js +77 -0
  10. package/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.d.ts +33 -0
  11. package/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.js +75 -0
  12. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +16 -3
  13. package/ChartsToolbarPro/ChartsToolbarPro.js +118 -8
  14. package/ChartsToolbarPro/index.d.ts +3 -1
  15. package/ChartsToolbarPro/index.js +22 -0
  16. package/ChartsToolbarPro/internals/ChartsMenu.d.ts +14 -0
  17. package/ChartsToolbarPro/internals/ChartsMenu.js +73 -0
  18. package/ChartsToolbarPro/internals/ChartsToolbarDivider.d.ts +5 -0
  19. package/ChartsToolbarPro/internals/ChartsToolbarDivider.js +47 -0
  20. package/FunnelChart/FunnelPlot.js +56 -40
  21. package/FunnelChart/FunnelSection.js +2 -0
  22. package/FunnelChart/curves/bump.d.ts +3 -3
  23. package/FunnelChart/curves/bump.js +3 -0
  24. package/FunnelChart/curves/curve.types.d.ts +14 -1
  25. package/FunnelChart/curves/getFunnelCurve.d.ts +7 -2
  26. package/FunnelChart/curves/linear.d.ts +3 -3
  27. package/FunnelChart/curves/linear.js +23 -18
  28. package/FunnelChart/curves/pyramid.d.ts +3 -3
  29. package/FunnelChart/curves/pyramid.js +17 -12
  30. package/FunnelChart/curves/step-pyramid.d.ts +5 -5
  31. package/FunnelChart/curves/step-pyramid.js +20 -18
  32. package/FunnelChart/curves/step.d.ts +3 -3
  33. package/FunnelChart/curves/step.js +14 -12
  34. package/FunnelChart/funnelAxisPlugin/useChartFunnelAxisRendering.selectors.d.ts +18 -1444
  35. package/FunnelChart/labelUtils.d.ts +4 -12
  36. package/FunnelChart/labelUtils.js +43 -44
  37. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  38. package/esm/ChartZoomSlider/internals/ChartAxisZoomSlider.js +1 -1
  39. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderActiveTrack.js +21 -32
  40. package/esm/ChartZoomSlider/internals/ChartAxisZoomSliderTrack.js +1 -8
  41. package/esm/ChartZoomSlider/internals/zoom-utils.d.ts +3 -1
  42. package/esm/ChartZoomSlider/internals/zoom-utils.js +19 -9
  43. package/esm/ChartsToolbarPro/ChartsToolbarImageExportTrigger.d.ts +27 -0
  44. package/esm/ChartsToolbarPro/ChartsToolbarImageExportTrigger.js +70 -0
  45. package/esm/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.d.ts +33 -0
  46. package/esm/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.js +68 -0
  47. package/esm/ChartsToolbarPro/ChartsToolbarPro.d.ts +16 -3
  48. package/esm/ChartsToolbarPro/ChartsToolbarPro.js +120 -8
  49. package/esm/ChartsToolbarPro/index.d.ts +3 -1
  50. package/esm/ChartsToolbarPro/index.js +3 -1
  51. package/esm/ChartsToolbarPro/internals/ChartsMenu.d.ts +14 -0
  52. package/esm/ChartsToolbarPro/internals/ChartsMenu.js +67 -0
  53. package/esm/ChartsToolbarPro/internals/ChartsToolbarDivider.d.ts +5 -0
  54. package/esm/ChartsToolbarPro/internals/ChartsToolbarDivider.js +40 -0
  55. package/esm/FunnelChart/FunnelPlot.js +56 -40
  56. package/esm/FunnelChart/FunnelSection.js +2 -0
  57. package/esm/FunnelChart/curves/bump.d.ts +3 -3
  58. package/esm/FunnelChart/curves/bump.js +3 -0
  59. package/esm/FunnelChart/curves/curve.types.d.ts +14 -1
  60. package/esm/FunnelChart/curves/getFunnelCurve.d.ts +7 -2
  61. package/esm/FunnelChart/curves/linear.d.ts +3 -3
  62. package/esm/FunnelChart/curves/linear.js +23 -18
  63. package/esm/FunnelChart/curves/pyramid.d.ts +3 -3
  64. package/esm/FunnelChart/curves/pyramid.js +17 -12
  65. package/esm/FunnelChart/curves/step-pyramid.d.ts +5 -5
  66. package/esm/FunnelChart/curves/step-pyramid.js +20 -18
  67. package/esm/FunnelChart/curves/step.d.ts +3 -3
  68. package/esm/FunnelChart/curves/step.js +14 -12
  69. package/esm/FunnelChart/funnelAxisPlugin/useChartFunnelAxisRendering.selectors.d.ts +18 -1444
  70. package/esm/FunnelChart/labelUtils.d.ts +4 -12
  71. package/esm/FunnelChart/labelUtils.js +43 -44
  72. package/esm/index.d.ts +2 -1
  73. package/esm/index.js +1 -1
  74. package/esm/internals/material/components/BaseMenuItem.d.ts +3 -0
  75. package/esm/internals/material/components/BaseMenuItem.js +27 -0
  76. package/esm/internals/material/components/BasePopper.d.ts +3 -0
  77. package/esm/internals/material/components/BasePopper.js +122 -0
  78. package/esm/internals/material/icons.d.ts +2 -1
  79. package/esm/internals/material/icons.js +4 -1
  80. package/esm/internals/material/index.d.ts +1 -0
  81. package/esm/internals/material/index.js +12 -3
  82. package/esm/internals/plugins/useChartProExport/print.js +1 -1
  83. package/esm/internals/plugins/useChartProExport/useChartProExport.types.d.ts +7 -6
  84. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +16 -595
  85. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +2 -2
  86. package/esm/internals/slots/chartBaseSlotProps.d.ts +50 -3
  87. package/esm/internals/slots/chartsBaseSlots.d.ts +5 -1
  88. package/esm/internals/slots/chartsIconSlots.d.ts +5 -0
  89. package/index.d.ts +2 -1
  90. package/index.js +1 -1
  91. package/internals/material/components/BaseMenuItem.d.ts +3 -0
  92. package/internals/material/components/BaseMenuItem.js +35 -0
  93. package/internals/material/components/BasePopper.d.ts +3 -0
  94. package/internals/material/components/BasePopper.js +130 -0
  95. package/internals/material/icons.d.ts +2 -1
  96. package/internals/material/icons.js +5 -2
  97. package/internals/material/index.d.ts +1 -0
  98. package/internals/material/index.js +11 -2
  99. package/internals/plugins/useChartProExport/print.js +1 -1
  100. package/internals/plugins/useChartProExport/useChartProExport.types.d.ts +7 -6
  101. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +16 -595
  102. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.js +2 -2
  103. package/internals/slots/chartBaseSlotProps.d.ts +50 -3
  104. package/internals/slots/chartsBaseSlots.d.ts +5 -1
  105. package/internals/slots/chartsIconSlots.d.ts +5 -0
  106. package/package.json +5 -5
  107. package/FunnelChart/positionGetter.d.ts +0 -1
  108. package/FunnelChart/positionGetter.js +0 -5
  109. package/esm/FunnelChart/positionGetter.d.ts +0 -1
  110. package/esm/FunnelChart/positionGetter.js +0 -1
@@ -1,7 +1,20 @@
1
- import { ChartsToolbarProps } from '@mui/x-charts/Toolbar';
2
1
  import * as React from 'react';
3
- export interface ChartsToolbarProProps extends ChartsToolbarProps {}
2
+ import { ChartsToolbarProps } from '@mui/x-charts/Toolbar';
3
+ import { ChartsToolbarPrintExportOptions } from "./ChartsToolbarPrintExportTrigger.js";
4
+ import { ChartsToolbarImageExportOptions } from "./ChartsToolbarImageExportTrigger.js";
5
+ export interface ChartsToolbarProProps extends ChartsToolbarProps {
6
+ printOptions?: ChartsToolbarPrintExportOptions;
7
+ imageExportOptions?: ChartsToolbarImageExportOptions[];
8
+ }
4
9
  /**
5
10
  * The chart toolbar component for the pro package.
6
11
  */
7
- export declare function ChartsToolbarPro(props: ChartsToolbarProProps): React.JSX.Element | null;
12
+ declare function ChartsToolbarPro({
13
+ printOptions,
14
+ imageExportOptions: rawImageExportOptions,
15
+ ...other
16
+ }: ChartsToolbarProProps): React.JSX.Element | null;
17
+ declare namespace ChartsToolbarPro {
18
+ var propTypes: any;
19
+ }
20
+ export { ChartsToolbarPro };
@@ -1,24 +1,42 @@
1
1
  "use strict";
2
+ 'use client';
2
3
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
6
  Object.defineProperty(exports, "__esModule", {
6
7
  value: true
7
8
  });
8
9
  exports.ChartsToolbarPro = ChartsToolbarPro;
9
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _Toolbar = require("@mui/x-charts/Toolbar");
11
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12
  var React = _interopRequireWildcard(require("react"));
13
+ var _propTypes = _interopRequireDefault(require("prop-types"));
14
+ var _Toolbar = require("@mui/x-charts/Toolbar");
12
15
  var _internals = require("@mui/x-charts/internals");
13
16
  var _hooks = require("@mui/x-charts/hooks");
17
+ var _useId = _interopRequireDefault(require("@mui/utils/useId"));
18
+ var _ChartsToolbarDivider = require("./internals/ChartsToolbarDivider");
19
+ var _ChartsMenu = require("./internals/ChartsMenu");
14
20
  var _useChartProZoom = require("../internals/plugins/useChartProZoom");
15
21
  var _ChartsToolbarZoomInTrigger = require("./ChartsToolbarZoomInTrigger");
16
22
  var _ChartsToolbarZoomOutTrigger = require("./ChartsToolbarZoomOutTrigger");
23
+ var _ChartsToolbarPrintExportTrigger = require("./ChartsToolbarPrintExportTrigger");
24
+ var _ChartsToolbarImageExportTrigger = require("./ChartsToolbarImageExportTrigger");
17
25
  var _jsxRuntime = require("react/jsx-runtime");
26
+ const _excluded = ["printOptions", "imageExportOptions"];
27
+ const DEFAULT_IMAGE_EXPORT_OPTIONS = [{
28
+ type: 'image/png'
29
+ }];
30
+
18
31
  /**
19
32
  * The chart toolbar component for the pro package.
20
33
  */
21
- function ChartsToolbarPro(props) {
34
+ function ChartsToolbarPro(_ref) {
35
+ let {
36
+ printOptions,
37
+ imageExportOptions: rawImageExportOptions
38
+ } = _ref,
39
+ other = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
22
40
  const {
23
41
  slots,
24
42
  slotProps
@@ -29,7 +47,13 @@ function ChartsToolbarPro(props) {
29
47
  const {
30
48
  localeText
31
49
  } = (0, _hooks.useChartsLocalization)();
50
+ const [exportMenuOpen, setExportMenuOpen] = React.useState(false);
51
+ const exportMenuTriggerRef = React.useRef(null);
52
+ const exportMenuId = (0, _useId.default)();
53
+ const exportMenuTriggerId = (0, _useId.default)();
32
54
  const isZoomEnabled = (0, _internals.useSelector)(store, _useChartProZoom.selectorChartZoomIsEnabled);
55
+ const imageExportOptionList = rawImageExportOptions ?? DEFAULT_IMAGE_EXPORT_OPTIONS;
56
+ const showExportMenu = !printOptions?.disableToolbarButton || imageExportOptionList.length > 0;
33
57
  const children = [];
34
58
  if (isZoomEnabled) {
35
59
  const Tooltip = slots.baseTooltip;
@@ -38,22 +62,108 @@ function ChartsToolbarPro(props) {
38
62
  children.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, (0, _extends2.default)({}, slotProps.baseTooltip, {
39
63
  title: localeText.zoomIn,
40
64
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarZoomInTrigger.ChartsToolbarZoomInTrigger, {
41
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {}),
42
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomInIcon, (0, _extends2.default)({}, slotProps.zoomInIcon))
65
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {
66
+ size: "small"
67
+ }),
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomInIcon, (0, _extends2.default)({
69
+ fontSize: "small"
70
+ }, slotProps.zoomInIcon))
43
71
  })
44
72
  }), "zoom-in"));
45
73
  children.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, (0, _extends2.default)({}, slotProps.baseTooltip, {
46
74
  title: localeText.zoomOut,
47
75
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarZoomOutTrigger.ChartsToolbarZoomOutTrigger, {
48
- render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {}),
49
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomOutIcon, (0, _extends2.default)({}, slotProps.zoomOutIcon))
76
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {
77
+ size: "small"
78
+ }),
79
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomOutIcon, (0, _extends2.default)({
80
+ fontSize: "small"
81
+ }, slotProps.zoomOutIcon))
50
82
  })
51
83
  }), "zoom-out"));
52
84
  }
85
+ if (showExportMenu) {
86
+ const Tooltip = slots.baseTooltip;
87
+ const MenuList = slots.baseMenuList;
88
+ const MenuItem = slots.baseMenuItem;
89
+ const ExportIcon = slots.exportIcon;
90
+ const closeExportMenu = () => setExportMenuOpen(false);
91
+ const handleListKeyDown = event => {
92
+ if (event.key === 'Tab') {
93
+ event.preventDefault();
94
+ }
95
+ if (isHideMenuKey(event.key)) {
96
+ closeExportMenu();
97
+ }
98
+ };
99
+ if (children.length > 0) {
100
+ children.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarDivider.ChartsToolbarDivider, {}, "divider"));
101
+ }
102
+ children.push(/*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
103
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, {
104
+ title: localeText.toolbarExport,
105
+ disableInteractive: exportMenuOpen,
106
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.ToolbarButton, {
107
+ ref: exportMenuTriggerRef,
108
+ id: exportMenuTriggerId,
109
+ "aria-controls": exportMenuId,
110
+ "aria-haspopup": "true",
111
+ "aria-expanded": exportMenuOpen ? 'true' : undefined,
112
+ onClick: () => setExportMenuOpen(!exportMenuOpen),
113
+ size: "small",
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ExportIcon, {
115
+ fontSize: "small"
116
+ })
117
+ })
118
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsMenu.ChartsMenu, {
119
+ target: exportMenuTriggerRef.current,
120
+ open: exportMenuOpen,
121
+ onClose: closeExportMenu,
122
+ position: "bottom-end",
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(MenuList, (0, _extends2.default)({
124
+ id: exportMenuId,
125
+ "aria-labelledby": exportMenuTriggerId,
126
+ onKeyDown: handleListKeyDown,
127
+ autoFocusItem: true
128
+ }, slotProps?.baseMenuList, {
129
+ children: [!printOptions?.disableToolbarButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarPrintExportTrigger.ChartsToolbarPrintExportTrigger, {
130
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuItem, (0, _extends2.default)({
131
+ dense: true
132
+ }, slotProps?.baseMenuItem)),
133
+ options: printOptions,
134
+ onClick: closeExportMenu,
135
+ children: localeText.toolbarExportPrint
136
+ }), imageExportOptionList.map(imageExportOptions => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsToolbarImageExportTrigger.ChartsToolbarImageExportTrigger, {
137
+ render: /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuItem, (0, _extends2.default)({
138
+ dense: true
139
+ }, slotProps?.baseMenuItem)),
140
+ options: imageExportOptions,
141
+ onClick: closeExportMenu,
142
+ children: localeText.toolbarExportImage(imageExportOptions.type)
143
+ }, imageExportOptions.type))]
144
+ }))
145
+ })]
146
+ }, "export-menu"));
147
+ }
53
148
  if (children.length === 0) {
54
149
  return null;
55
150
  }
56
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.Toolbar, (0, _extends2.default)({}, props, {
151
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.Toolbar, (0, _extends2.default)({}, other, {
57
152
  children: children
58
153
  }));
154
+ }
155
+ process.env.NODE_ENV !== "production" ? ChartsToolbarPro.propTypes = {
156
+ // ----------------------------- Warning --------------------------------
157
+ // | These PropTypes are generated from the TypeScript type definitions |
158
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
159
+ // ----------------------------------------------------------------------
160
+ imageExportOptions: _propTypes.default.arrayOf(_propTypes.default.shape({
161
+ fileName: _propTypes.default.string,
162
+ quality: _propTypes.default.number,
163
+ type: _propTypes.default.string.isRequired
164
+ })),
165
+ printOptions: _propTypes.default.object
166
+ } : void 0;
167
+ function isHideMenuKey(key) {
168
+ return key === 'Tab' || key === 'Escape';
59
169
  }
@@ -1,3 +1,5 @@
1
1
  export * from "./ChartsToolbarPro.js";
2
2
  export * from "./ChartsToolbarZoomInTrigger.js";
3
- export * from "./ChartsToolbarZoomOutTrigger.js";
3
+ export * from "./ChartsToolbarZoomOutTrigger.js";
4
+ export * from "./ChartsToolbarPrintExportTrigger.js";
5
+ export * from "./ChartsToolbarImageExportTrigger.js";
@@ -35,4 +35,26 @@ Object.keys(_ChartsToolbarZoomOutTrigger).forEach(function (key) {
35
35
  return _ChartsToolbarZoomOutTrigger[key];
36
36
  }
37
37
  });
38
+ });
39
+ var _ChartsToolbarPrintExportTrigger = require("./ChartsToolbarPrintExportTrigger");
40
+ Object.keys(_ChartsToolbarPrintExportTrigger).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _ChartsToolbarPrintExportTrigger[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _ChartsToolbarPrintExportTrigger[key];
47
+ }
48
+ });
49
+ });
50
+ var _ChartsToolbarImageExportTrigger = require("./ChartsToolbarImageExportTrigger");
51
+ Object.keys(_ChartsToolbarImageExportTrigger).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _ChartsToolbarImageExportTrigger[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _ChartsToolbarImageExportTrigger[key];
58
+ }
59
+ });
38
60
  });
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { ChartBasePopperProps, Placement } from "../../internals/slots/chartBaseSlotProps.js";
3
+ export interface ChartsMenuProps extends Pick<ChartBasePopperProps, 'className' | 'onExited'> {
4
+ open: boolean;
5
+ target: HTMLElement | null;
6
+ onClose: (event?: Event) => void;
7
+ position?: Placement;
8
+ children: React.ReactNode;
9
+ }
10
+ declare function ChartsMenu(props: ChartsMenuProps): React.JSX.Element;
11
+ declare namespace ChartsMenu {
12
+ var propTypes: any;
13
+ }
14
+ export { ChartsMenu };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChartsMenu = ChartsMenu;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
+ var React = _interopRequireWildcard(require("react"));
13
+ var _propTypes = _interopRequireDefault(require("prop-types"));
14
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
15
+ var _HTMLElementType = _interopRequireDefault(require("@mui/utils/HTMLElementType"));
16
+ var _internals = require("@mui/x-charts/internals");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ const _excluded = ["open", "target", "onClose", "children", "position", "className", "onExited"];
19
+ function ChartsMenu(props) {
20
+ const {
21
+ open,
22
+ target,
23
+ onClose,
24
+ children,
25
+ position,
26
+ onExited
27
+ } = props,
28
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
29
+ const {
30
+ slots,
31
+ slotProps
32
+ } = (0, _internals.useChartsSlots)();
33
+ const Popper = slots.basePopper;
34
+ const savedFocusRef = React.useRef(null);
35
+ (0, _useEnhancedEffect.default)(() => {
36
+ if (open) {
37
+ savedFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
38
+ } else {
39
+ savedFocusRef.current?.focus?.();
40
+ savedFocusRef.current = null;
41
+ }
42
+ }, [open]);
43
+ const handleClickAway = event => {
44
+ if (event.target && (target === event.target || target?.contains(event.target))) {
45
+ return;
46
+ }
47
+ onClose(event);
48
+ };
49
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Popper, (0, _extends2.default)({
50
+ open: open,
51
+ target: target,
52
+ transition: true,
53
+ placement: position,
54
+ onClickAway: handleClickAway,
55
+ onExited: onExited,
56
+ clickAwayMouseEvent: "onMouseDown"
57
+ }, other, slotProps?.basePopper, {
58
+ children: children
59
+ }));
60
+ }
61
+ process.env.NODE_ENV !== "production" ? ChartsMenu.propTypes = {
62
+ // ----------------------------- Warning --------------------------------
63
+ // | These PropTypes are generated from the TypeScript type definitions |
64
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
65
+ // ----------------------------------------------------------------------
66
+ children: _propTypes.default.node,
67
+ className: _propTypes.default.string,
68
+ onClose: _propTypes.default.func.isRequired,
69
+ onExited: _propTypes.default.func,
70
+ open: _propTypes.default.bool.isRequired,
71
+ position: _propTypes.default.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
72
+ target: _HTMLElementType.default
73
+ } : void 0;
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { ChartBaseDividerProps } from "../../internals/slots/chartBaseSlotProps.js";
3
+ export interface ChartsToolbarDividerProps extends ChartBaseDividerProps {}
4
+ declare const ChartsToolbarDivider: React.ForwardRefExoticComponent<Omit<ChartsToolbarDividerProps, "ref"> & React.RefAttributes<HTMLHRElement>>;
5
+ export { ChartsToolbarDivider };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ChartsToolbarDivider = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _system = require("@mui/system");
13
+ var _internals = require("@mui/x-charts/internals");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ // This is workaround because api-docs-builder does not support the `NotRendered<ChartBaseDividerProps>` syntax.
16
+ const NotRenderedDivider = _internals.NotRendered;
17
+ const Divider = (0, _system.styled)(NotRenderedDivider, {
18
+ name: 'MuiChartsToolbar',
19
+ slot: 'Divider'
20
+ })(({
21
+ theme
22
+ }) => ({
23
+ margin: theme.spacing(0, 0.5),
24
+ height: '50%'
25
+ }));
26
+ const ChartsToolbarDivider = exports.ChartsToolbarDivider = /*#__PURE__*/React.forwardRef(function ChartsToolbarDivider(props, ref) {
27
+ const {
28
+ slots,
29
+ slotProps
30
+ } = (0, _internals.useChartsSlots)();
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Divider, (0, _extends2.default)({
32
+ as: slots.baseDivider,
33
+ orientation: "vertical"
34
+ }, slotProps.baseDivider, props, {
35
+ ref: ref
36
+ }));
37
+ });
38
+ if (process.env.NODE_ENV !== "production") ChartsToolbarDivider.displayName = "ChartsToolbarDivider";
39
+ process.env.NODE_ENV !== "production" ? ChartsToolbarDivider.propTypes = {
40
+ // ----------------------------- Warning --------------------------------
41
+ // | These PropTypes are generated from the TypeScript type definitions |
42
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
43
+ // ----------------------------------------------------------------------
44
+ className: _propTypes.default.string,
45
+ orientation: _propTypes.default.oneOf(['horizontal', 'vertical']),
46
+ style: _propTypes.default.object
47
+ } : void 0;
@@ -105,21 +105,21 @@ const useAggregatedData = () => {
105
105
  min: minPoint,
106
106
  max: maxPoint
107
107
  });
108
- const line = (0, _d3Shape.line)().x(d => xPosition(d.x, dataIndex, baseScaleConfig.data?.[dataIndex], d.stackOffset, d.useBandWidth)).y(d => yPosition(d.y, dataIndex, baseScaleConfig.data?.[dataIndex], d.stackOffset, d.useBandWidth)).curve(curve);
108
+ const bandPoints = curve({}).processPoints(values.map(v => ({
109
+ x: xPosition(v.x, dataIndex, baseScaleConfig.data?.[dataIndex], v.stackOffset, v.useBandWidth),
110
+ y: yPosition(v.y, dataIndex, baseScaleConfig.data?.[dataIndex], v.stackOffset, v.useBandWidth)
111
+ })));
112
+ const line = (0, _d3Shape.line)().x(v => v.x).y(v => v.y).curve(curve);
109
113
  return {
110
- d: line(values),
114
+ d: line(bandPoints),
111
115
  color,
112
116
  id,
113
117
  seriesId,
114
118
  dataIndex,
115
119
  variant: currentSeries.variant,
116
120
  label: sectionLabel !== false && (0, _extends2.default)({}, (0, _labelUtils.positionLabel)((0, _extends2.default)({}, sectionLabel, {
117
- xPosition,
118
- yPosition,
119
121
  isHorizontal,
120
- values,
121
- dataIndex,
122
- baseScaleData: baseScaleConfig.data ?? []
122
+ values: bandPoints
123
123
  })), (0, _labelUtils.alignLabel)(sectionLabel ?? {}), {
124
124
  value: valueFormatter ? valueFormatter(currentSeries.data[dataIndex], {
125
125
  dataIndex
@@ -128,7 +128,7 @@ const useAggregatedData = () => {
128
128
  };
129
129
  });
130
130
  });
131
- return result.flat();
131
+ return result;
132
132
  }, [seriesData, xAxis, xAxisIds, yAxis, yAxisIds, gap]);
133
133
  return allData;
134
134
  };
@@ -139,41 +139,57 @@ function FunnelPlot(props) {
139
139
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
140
140
  const data = useAggregatedData();
141
141
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
142
- children: [data.map(({
143
- d,
144
- color,
145
- id,
146
- seriesId,
147
- dataIndex,
148
- variant
149
- }) => /*#__PURE__*/(0, _react.createElement)(_FunnelSection.FunnelSection, (0, _extends2.default)({}, other, {
150
- d: d,
151
- color: color,
152
- key: id,
153
- dataIndex: dataIndex,
154
- seriesId: seriesId,
155
- variant: variant,
156
- onClick: onItemClick && (event => {
157
- onItemClick(event, {
158
- type: 'funnel',
142
+ children: [data.map(series => {
143
+ if (series.length === 0) {
144
+ return null;
145
+ }
146
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("g", {
147
+ "data-series": series[0].seriesId,
148
+ children: series.map(({
149
+ d,
150
+ color,
151
+ id,
159
152
  seriesId,
160
- dataIndex
161
- });
162
- })
163
- }))), data.map(({
164
- id,
165
- label,
166
- seriesId,
167
- dataIndex
168
- }) => {
169
- if (!label || !label.value) {
153
+ dataIndex,
154
+ variant
155
+ }) => /*#__PURE__*/(0, _react.createElement)(_FunnelSection.FunnelSection, (0, _extends2.default)({}, other, {
156
+ d: d,
157
+ color: color,
158
+ key: id,
159
+ dataIndex: dataIndex,
160
+ seriesId: seriesId,
161
+ variant: variant,
162
+ onClick: onItemClick && (event => {
163
+ onItemClick(event, {
164
+ type: 'funnel',
165
+ seriesId,
166
+ dataIndex
167
+ });
168
+ })
169
+ })))
170
+ }, series[0].seriesId);
171
+ }), data.map(series => {
172
+ if (series.length === 0) {
170
173
  return null;
171
174
  }
172
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FunnelSectionLabel.FunnelSectionLabel, (0, _extends2.default)({
173
- label: label,
174
- dataIndex: dataIndex,
175
- seriesId: seriesId
176
- }, other), id);
175
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("g", {
176
+ "data-series": series[0].seriesId,
177
+ children: series.map(({
178
+ id,
179
+ label,
180
+ seriesId,
181
+ dataIndex
182
+ }) => {
183
+ if (!label || !label.value) {
184
+ return null;
185
+ }
186
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FunnelSectionLabel.FunnelSectionLabel, (0, _extends2.default)({
187
+ label: label,
188
+ dataIndex: dataIndex,
189
+ seriesId: seriesId
190
+ }, other), id);
191
+ })
192
+ }, series[0].seriesId);
177
193
  })]
178
194
  });
179
195
  }
@@ -60,6 +60,8 @@ const FunnelSection = exports.FunnelSection = (0, _internals.consumeSlots)('MuiF
60
60
  strokeWidth: isOutlined ? 1.5 : 0,
61
61
  cursor: onClick ? 'pointer' : 'unset',
62
62
  onClick: onClick,
63
+ "data-highlighted": isHighlighted || undefined,
64
+ "data-faded": isFaded || undefined,
63
65
  className: (0, _clsx.default)(classes?.root, className, isOutlined ? classes?.outlined : classes?.filled, isHighlighted && classes?.highlighted, isFaded && classes?.faded)
64
66
  }, other, {
65
67
  ref: ref
@@ -1,5 +1,4 @@
1
- import { CurveGenerator } from '@mui/x-charts-vendor/d3-shape';
2
- import { CurveOptions } from "./curve.types.js";
1
+ import { FunnelCurveGenerator, CurveOptions, Point } from "./curve.types.js";
3
2
  /**
4
3
  * This is a custom "bump" curve generator.
5
4
  * It draws smooth curves for the 4 provided points,
@@ -8,7 +7,7 @@ import { CurveOptions } from "./curve.types.js";
8
7
  * The implementation is based on the d3-shape bump curve generator.
9
8
  * https://github.com/d3/d3-shape/blob/a82254af78f08799c71d7ab25df557c4872a3c51/src/curve/bump.js
10
9
  */
11
- export declare class Bump implements CurveGenerator {
10
+ export declare class Bump implements FunnelCurveGenerator {
12
11
  private context;
13
12
  private isHorizontal;
14
13
  private min;
@@ -24,6 +23,7 @@ export declare class Bump implements CurveGenerator {
24
23
  areaEnd(): void;
25
24
  lineStart(): void;
26
25
  lineEnd(): void;
26
+ processPoints(points: Point[]): Point[];
27
27
  point(x: number, y: number): void;
28
28
  private drawPath;
29
29
  private drawHorizontalPath;
@@ -53,6 +53,9 @@ class Bump {
53
53
  areaEnd() {}
54
54
  lineStart() {}
55
55
  lineEnd() {}
56
+ processPoints(points) {
57
+ return points;
58
+ }
56
59
  point(x, y) {
57
60
  this.points.push({
58
61
  x,
@@ -1,3 +1,4 @@
1
+ import { CurveGenerator } from '@mui/x-charts-vendor/d3-shape';
1
2
  export type CurveOptions = {
2
3
  /**
3
4
  * The gap between each segment.
@@ -44,4 +45,16 @@ export type FunnelPointShape = 'square' | 'sharp';
44
45
  export type Point = {
45
46
  x: number;
46
47
  y: number;
47
- };
48
+ };
49
+ export interface FunnelCurveGenerator extends CurveGenerator {
50
+ /**
51
+ * Processes the points to create a curve based on the provided options.
52
+ * This does not draw the curve but prepares the points for rendering.
53
+ *
54
+ * @param points The points to process.
55
+ * @param options The options for the curve.
56
+ * @returns The processed points.
57
+ */
58
+ processPoints(points: Point[], xPosition: PositionGetter, yPosition: PositionGetter): Point[];
59
+ }
60
+ export type PositionGetter = (value: number, bandIndex: number, bandIdentifier: string | number, stackOffset?: number, useBand?: boolean) => number;
@@ -1,3 +1,8 @@
1
- import { CurveFactory } from '@mui/x-charts-vendor/d3-shape';
1
+ import type { Path } from '@mui/x-charts-vendor/d3-path';
2
2
  import { CurveOptions, FunnelCurveType } from "./curve.types.js";
3
- export declare const getFunnelCurve: (curve: FunnelCurveType | undefined, options: CurveOptions) => CurveFactory;
3
+ import { Step } from "./step.js";
4
+ import { Linear } from "./linear.js";
5
+ import { Bump } from "./bump.js";
6
+ import { Pyramid } from "./pyramid.js";
7
+ import { StepPyramid } from "./step-pyramid.js";
8
+ export declare const getFunnelCurve: (curve: FunnelCurveType | undefined, options: CurveOptions) => (context: CanvasRenderingContext2D | Path) => Step | Linear | Bump | Pyramid | StepPyramid;
@@ -1,5 +1,4 @@
1
- import { CurveGenerator } from '@mui/x-charts-vendor/d3-shape';
2
- import { CurveOptions } from "./curve.types.js";
1
+ import { FunnelCurveGenerator, CurveOptions, Point } from "./curve.types.js";
3
2
  /**
4
3
  * This is a custom "linear" curve generator.
5
4
  * It draws straight lines for the 4 provided points,
@@ -8,7 +7,7 @@ import { CurveOptions } from "./curve.types.js";
8
7
  * The implementation is based on the d3-shape linear curve generator.
9
8
  * https://github.com/d3/d3-shape/blob/a82254af78f08799c71d7ab25df557c4872a3c51/src/curve/linear.js
10
9
  */
11
- export declare class Linear implements CurveGenerator {
10
+ export declare class Linear implements FunnelCurveGenerator {
12
11
  private context;
13
12
  private position;
14
13
  private sections;
@@ -36,5 +35,6 @@ export declare class Linear implements CurveGenerator {
36
35
  lineStart(): void;
37
36
  lineEnd(): void;
38
37
  protected getBorderRadius(): number | number[];
38
+ processPoints(points: Point[]): Point[];
39
39
  point(xIn: number, yIn: number): void;
40
40
  }