@mui/x-charts-pro 8.5.3 → 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 (58) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  3. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.d.ts +27 -0
  4. package/ChartsToolbarPro/ChartsToolbarImageExportTrigger.js +77 -0
  5. package/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.d.ts +33 -0
  6. package/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.js +75 -0
  7. package/ChartsToolbarPro/ChartsToolbarPro.d.ts +16 -3
  8. package/ChartsToolbarPro/ChartsToolbarPro.js +118 -8
  9. package/ChartsToolbarPro/index.d.ts +3 -1
  10. package/ChartsToolbarPro/index.js +22 -0
  11. package/ChartsToolbarPro/internals/ChartsMenu.d.ts +14 -0
  12. package/ChartsToolbarPro/internals/ChartsMenu.js +73 -0
  13. package/ChartsToolbarPro/internals/ChartsToolbarDivider.d.ts +5 -0
  14. package/ChartsToolbarPro/internals/ChartsToolbarDivider.js +47 -0
  15. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  16. package/esm/ChartsToolbarPro/ChartsToolbarImageExportTrigger.d.ts +27 -0
  17. package/esm/ChartsToolbarPro/ChartsToolbarImageExportTrigger.js +70 -0
  18. package/esm/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.d.ts +33 -0
  19. package/esm/ChartsToolbarPro/ChartsToolbarPrintExportTrigger.js +68 -0
  20. package/esm/ChartsToolbarPro/ChartsToolbarPro.d.ts +16 -3
  21. package/esm/ChartsToolbarPro/ChartsToolbarPro.js +120 -8
  22. package/esm/ChartsToolbarPro/index.d.ts +3 -1
  23. package/esm/ChartsToolbarPro/index.js +3 -1
  24. package/esm/ChartsToolbarPro/internals/ChartsMenu.d.ts +14 -0
  25. package/esm/ChartsToolbarPro/internals/ChartsMenu.js +67 -0
  26. package/esm/ChartsToolbarPro/internals/ChartsToolbarDivider.d.ts +5 -0
  27. package/esm/ChartsToolbarPro/internals/ChartsToolbarDivider.js +40 -0
  28. package/esm/index.d.ts +2 -1
  29. package/esm/index.js +1 -1
  30. package/esm/internals/material/components/BaseMenuItem.d.ts +3 -0
  31. package/esm/internals/material/components/BaseMenuItem.js +27 -0
  32. package/esm/internals/material/components/BasePopper.d.ts +3 -0
  33. package/esm/internals/material/components/BasePopper.js +122 -0
  34. package/esm/internals/material/icons.d.ts +2 -1
  35. package/esm/internals/material/icons.js +4 -1
  36. package/esm/internals/material/index.d.ts +1 -0
  37. package/esm/internals/material/index.js +12 -3
  38. package/esm/internals/plugins/useChartProExport/print.js +1 -1
  39. package/esm/internals/plugins/useChartProExport/useChartProExport.types.d.ts +7 -6
  40. package/esm/internals/slots/chartBaseSlotProps.d.ts +50 -3
  41. package/esm/internals/slots/chartsBaseSlots.d.ts +5 -1
  42. package/esm/internals/slots/chartsIconSlots.d.ts +5 -0
  43. package/index.d.ts +2 -1
  44. package/index.js +1 -1
  45. package/internals/material/components/BaseMenuItem.d.ts +3 -0
  46. package/internals/material/components/BaseMenuItem.js +35 -0
  47. package/internals/material/components/BasePopper.d.ts +3 -0
  48. package/internals/material/components/BasePopper.js +130 -0
  49. package/internals/material/icons.d.ts +2 -1
  50. package/internals/material/icons.js +5 -2
  51. package/internals/material/index.d.ts +1 -0
  52. package/internals/material/index.js +11 -2
  53. package/internals/plugins/useChartProExport/print.js +1 -1
  54. package/internals/plugins/useChartProExport/useChartProExport.types.d.ts +7 -6
  55. package/internals/slots/chartBaseSlotProps.d.ts +50 -3
  56. package/internals/slots/chartsBaseSlots.d.ts +5 -1
  57. package/internals/slots/chartsIconSlots.d.ts +5 -0
  58. package/package.json +4 -4
@@ -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;
@@ -11,7 +11,7 @@ import { defaultSlotsMaterial } from "../internals/material/index.js";
11
11
  import { DEFAULT_PLUGINS } from "../internals/plugins/allPlugins.js";
12
12
  import { useChartDataProviderProProps } from "./useChartDataProviderProProps.js";
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- const releaseInfo = "MTc1MDI4NDAwMDAwMA==";
14
+ const releaseInfo = "MTc1MDk3NTIwMDAwMA==";
15
15
  const packageIdentifier = 'x-charts-pro';
16
16
  /**
17
17
  * Orchestrates the data providers for the chart components and hooks.
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { RenderProp } from '@mui/x-internals/useComponentRenderer';
3
+ import { ChartImageExportOptions } from "../internals/plugins/useChartProExport/index.js";
4
+ import { ChartsSlotPropsPro } from "../internals/material/index.js";
5
+ export interface ChartsToolbarImageExportOptions extends Omit<ChartImageExportOptions, 'type'>, Required<Pick<ChartImageExportOptions, 'type'>> {}
6
+ export type ChartsToolbarImageExportTriggerProps = ChartsSlotPropsPro['baseButton'] & {
7
+ /**
8
+ * A function to customize the rendering of the component.
9
+ */
10
+ render?: RenderProp<ChartsSlotPropsPro['baseButton']>;
11
+ /**
12
+ * The options to apply on the image export.
13
+ * @demos
14
+ * - [Export as Image](https://mui.com/x/react-charts/export/#export-as-image)
15
+ */
16
+ options?: ChartsToolbarImageExportOptions;
17
+ };
18
+ /**
19
+ * A button that triggers an image export.
20
+ * It renders the `baseButton` slot.
21
+ *
22
+ * Demos:
23
+ *
24
+ * - [Export](https://mui.com/x/react-charts/export/)
25
+ */
26
+ declare const ChartsToolbarImageExportTrigger: React.ForwardRefExoticComponent<ChartsToolbarImageExportTriggerProps> | React.ForwardRefExoticComponent<Omit<ChartsToolbarImageExportTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
27
+ export { ChartsToolbarImageExportTrigger };
@@ -0,0 +1,70 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["render", "options", "onClick"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import { forwardRef } from '@mui/x-internals/forwardRef';
7
+ import { useComponentRenderer } from '@mui/x-internals/useComponentRenderer';
8
+ import { useChartsSlots } from '@mui/x-charts/internals';
9
+ import { useChartApiContext } from "../context/index.js";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ /**
12
+ * A button that triggers an image export.
13
+ * It renders the `baseButton` slot.
14
+ *
15
+ * Demos:
16
+ *
17
+ * - [Export](https://mui.com/x/react-charts/export/)
18
+ */
19
+ const ChartsToolbarImageExportTrigger = forwardRef(function ChartsToolbarImageExportTrigger(props, ref) {
20
+ const {
21
+ render,
22
+ options,
23
+ onClick
24
+ } = props,
25
+ other = _objectWithoutPropertiesLoose(props, _excluded);
26
+ const {
27
+ slots,
28
+ slotProps
29
+ } = useChartsSlots();
30
+ const apiRef = useChartApiContext();
31
+ const handleClick = event => {
32
+ apiRef.current.exportAsImage(options);
33
+ onClick?.(event);
34
+ };
35
+ const element = useComponentRenderer(slots.baseButton, render, _extends({}, slotProps?.baseButton, {
36
+ onClick: handleClick
37
+ }, other, {
38
+ ref
39
+ }));
40
+ return /*#__PURE__*/_jsx(React.Fragment, {
41
+ children: element
42
+ });
43
+ });
44
+ if (process.env.NODE_ENV !== "production") ChartsToolbarImageExportTrigger.displayName = "ChartsToolbarImageExportTrigger";
45
+ process.env.NODE_ENV !== "production" ? ChartsToolbarImageExportTrigger.propTypes = {
46
+ // ----------------------------- Warning --------------------------------
47
+ // | These PropTypes are generated from the TypeScript type definitions |
48
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
49
+ // ----------------------------------------------------------------------
50
+ className: PropTypes.string,
51
+ disabled: PropTypes.bool,
52
+ id: PropTypes.string,
53
+ /**
54
+ * The options to apply on the image export.
55
+ * @demos
56
+ * - [Export as Image](https://mui.com/x/react-charts/export/#export-as-image)
57
+ */
58
+ options: PropTypes.shape({
59
+ fileName: PropTypes.string,
60
+ quality: PropTypes.number,
61
+ type: PropTypes.string.isRequired
62
+ }),
63
+ /**
64
+ * A function to customize the rendering of the component.
65
+ */
66
+ render: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
67
+ style: PropTypes.object,
68
+ tabIndex: PropTypes.number
69
+ } : void 0;
70
+ export { ChartsToolbarImageExportTrigger };
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ import { RenderProp } from '@mui/x-internals/useComponentRenderer';
3
+ import { ChartPrintExportOptions } from "../internals/plugins/useChartProExport/index.js";
4
+ import { ChartsSlotPropsPro } from "../internals/material/index.js";
5
+ export interface ChartsToolbarPrintExportOptions extends ChartPrintExportOptions {
6
+ /**
7
+ * If `true`, this export option will be removed from the ChartsToolbarExport menu.
8
+ * @default false
9
+ */
10
+ disableToolbarButton?: boolean;
11
+ }
12
+ export type ChartsToolbarPrintExportTriggerProps = ChartsSlotPropsPro['baseButton'] & {
13
+ /**
14
+ * A function to customize the rendering of the component.
15
+ */
16
+ render?: RenderProp<ChartsSlotPropsPro['baseButton']>;
17
+ /**
18
+ * The options to apply on the Print export.
19
+ * @demos
20
+ * - [Print/Export as PDF](https://mui.com/x/react-charts/export/#print-export-as-pdf)
21
+ */
22
+ options?: ChartPrintExportOptions;
23
+ };
24
+ /**
25
+ * A button that triggers a print export.
26
+ * It renders the `baseButton` slot.
27
+ *
28
+ * Demos:
29
+ *
30
+ * - [Export](https://mui.com/x/react-charts/export/)
31
+ */
32
+ declare const ChartsToolbarPrintExportTrigger: React.ForwardRefExoticComponent<ChartsToolbarPrintExportTriggerProps> | React.ForwardRefExoticComponent<Omit<ChartsToolbarPrintExportTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
33
+ export { ChartsToolbarPrintExportTrigger };
@@ -0,0 +1,68 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["render", "options", "onClick"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import { forwardRef } from '@mui/x-internals/forwardRef';
7
+ import { useComponentRenderer } from '@mui/x-internals/useComponentRenderer';
8
+ import { useChartsSlots } from '@mui/x-charts/internals';
9
+ import { useChartApiContext } from "../context/index.js";
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ /**
12
+ * A button that triggers a print export.
13
+ * It renders the `baseButton` slot.
14
+ *
15
+ * Demos:
16
+ *
17
+ * - [Export](https://mui.com/x/react-charts/export/)
18
+ */
19
+ const ChartsToolbarPrintExportTrigger = forwardRef(function ChartsToolbarPrintExportTrigger(props, ref) {
20
+ const {
21
+ render,
22
+ options,
23
+ onClick
24
+ } = props,
25
+ other = _objectWithoutPropertiesLoose(props, _excluded);
26
+ const {
27
+ slots,
28
+ slotProps
29
+ } = useChartsSlots();
30
+ const apiRef = useChartApiContext();
31
+ const handleClick = event => {
32
+ apiRef.current.exportAsPrint(options);
33
+ onClick?.(event);
34
+ };
35
+ const element = useComponentRenderer(slots.baseButton, render, _extends({}, slotProps?.baseButton, {
36
+ onClick: handleClick
37
+ }, other, {
38
+ ref
39
+ }));
40
+ return /*#__PURE__*/_jsx(React.Fragment, {
41
+ children: element
42
+ });
43
+ });
44
+ if (process.env.NODE_ENV !== "production") ChartsToolbarPrintExportTrigger.displayName = "ChartsToolbarPrintExportTrigger";
45
+ process.env.NODE_ENV !== "production" ? ChartsToolbarPrintExportTrigger.propTypes = {
46
+ // ----------------------------- Warning --------------------------------
47
+ // | These PropTypes are generated from the TypeScript type definitions |
48
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
49
+ // ----------------------------------------------------------------------
50
+ className: PropTypes.string,
51
+ disabled: PropTypes.bool,
52
+ id: PropTypes.string,
53
+ /**
54
+ * The options to apply on the Print export.
55
+ * @demos
56
+ * - [Print/Export as PDF](https://mui.com/x/react-charts/export/#print-export-as-pdf)
57
+ */
58
+ options: PropTypes.shape({
59
+ fileName: PropTypes.string
60
+ }),
61
+ /**
62
+ * A function to customize the rendering of the component.
63
+ */
64
+ render: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
65
+ style: PropTypes.object,
66
+ tabIndex: PropTypes.number
67
+ } : void 0;
68
+ export { ChartsToolbarPrintExportTrigger };
@@ -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,16 +1,35 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { Toolbar, ToolbarButton } from '@mui/x-charts/Toolbar';
4
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
+ const _excluded = ["printOptions", "imageExportOptions"];
3
6
  import * as React from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { Toolbar, ToolbarButton } from '@mui/x-charts/Toolbar';
4
9
  import { useChartContext, useSelector, useChartsSlots } from '@mui/x-charts/internals';
5
10
  import { useChartsLocalization } from '@mui/x-charts/hooks';
11
+ import useId from '@mui/utils/useId';
12
+ import { ChartsToolbarDivider } from "./internals/ChartsToolbarDivider.js";
13
+ import { ChartsMenu } from "./internals/ChartsMenu.js";
6
14
  import { selectorChartZoomIsEnabled } from "../internals/plugins/useChartProZoom/index.js";
7
15
  import { ChartsToolbarZoomInTrigger } from "./ChartsToolbarZoomInTrigger.js";
8
16
  import { ChartsToolbarZoomOutTrigger } from "./ChartsToolbarZoomOutTrigger.js";
9
- import { jsx as _jsx } from "react/jsx-runtime";
17
+ import { ChartsToolbarPrintExportTrigger } from "./ChartsToolbarPrintExportTrigger.js";
18
+ import { ChartsToolbarImageExportTrigger } from "./ChartsToolbarImageExportTrigger.js";
19
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
+ const DEFAULT_IMAGE_EXPORT_OPTIONS = [{
21
+ type: 'image/png'
22
+ }];
23
+
10
24
  /**
11
25
  * The chart toolbar component for the pro package.
12
26
  */
13
- export function ChartsToolbarPro(props) {
27
+ function ChartsToolbarPro(_ref) {
28
+ let {
29
+ printOptions,
30
+ imageExportOptions: rawImageExportOptions
31
+ } = _ref,
32
+ other = _objectWithoutPropertiesLoose(_ref, _excluded);
14
33
  const {
15
34
  slots,
16
35
  slotProps
@@ -21,7 +40,13 @@ export function ChartsToolbarPro(props) {
21
40
  const {
22
41
  localeText
23
42
  } = useChartsLocalization();
43
+ const [exportMenuOpen, setExportMenuOpen] = React.useState(false);
44
+ const exportMenuTriggerRef = React.useRef(null);
45
+ const exportMenuId = useId();
46
+ const exportMenuTriggerId = useId();
24
47
  const isZoomEnabled = useSelector(store, selectorChartZoomIsEnabled);
48
+ const imageExportOptionList = rawImageExportOptions ?? DEFAULT_IMAGE_EXPORT_OPTIONS;
49
+ const showExportMenu = !printOptions?.disableToolbarButton || imageExportOptionList.length > 0;
25
50
  const children = [];
26
51
  if (isZoomEnabled) {
27
52
  const Tooltip = slots.baseTooltip;
@@ -30,22 +55,109 @@ export function ChartsToolbarPro(props) {
30
55
  children.push(/*#__PURE__*/_jsx(Tooltip, _extends({}, slotProps.baseTooltip, {
31
56
  title: localeText.zoomIn,
32
57
  children: /*#__PURE__*/_jsx(ChartsToolbarZoomInTrigger, {
33
- render: /*#__PURE__*/_jsx(ToolbarButton, {}),
34
- children: /*#__PURE__*/_jsx(ZoomInIcon, _extends({}, slotProps.zoomInIcon))
58
+ render: /*#__PURE__*/_jsx(ToolbarButton, {
59
+ size: "small"
60
+ }),
61
+ children: /*#__PURE__*/_jsx(ZoomInIcon, _extends({
62
+ fontSize: "small"
63
+ }, slotProps.zoomInIcon))
35
64
  })
36
65
  }), "zoom-in"));
37
66
  children.push(/*#__PURE__*/_jsx(Tooltip, _extends({}, slotProps.baseTooltip, {
38
67
  title: localeText.zoomOut,
39
68
  children: /*#__PURE__*/_jsx(ChartsToolbarZoomOutTrigger, {
40
- render: /*#__PURE__*/_jsx(ToolbarButton, {}),
41
- children: /*#__PURE__*/_jsx(ZoomOutIcon, _extends({}, slotProps.zoomOutIcon))
69
+ render: /*#__PURE__*/_jsx(ToolbarButton, {
70
+ size: "small"
71
+ }),
72
+ children: /*#__PURE__*/_jsx(ZoomOutIcon, _extends({
73
+ fontSize: "small"
74
+ }, slotProps.zoomOutIcon))
42
75
  })
43
76
  }), "zoom-out"));
44
77
  }
78
+ if (showExportMenu) {
79
+ const Tooltip = slots.baseTooltip;
80
+ const MenuList = slots.baseMenuList;
81
+ const MenuItem = slots.baseMenuItem;
82
+ const ExportIcon = slots.exportIcon;
83
+ const closeExportMenu = () => setExportMenuOpen(false);
84
+ const handleListKeyDown = event => {
85
+ if (event.key === 'Tab') {
86
+ event.preventDefault();
87
+ }
88
+ if (isHideMenuKey(event.key)) {
89
+ closeExportMenu();
90
+ }
91
+ };
92
+ if (children.length > 0) {
93
+ children.push(/*#__PURE__*/_jsx(ChartsToolbarDivider, {}, "divider"));
94
+ }
95
+ children.push(/*#__PURE__*/_jsxs(React.Fragment, {
96
+ children: [/*#__PURE__*/_jsx(Tooltip, {
97
+ title: localeText.toolbarExport,
98
+ disableInteractive: exportMenuOpen,
99
+ children: /*#__PURE__*/_jsx(ToolbarButton, {
100
+ ref: exportMenuTriggerRef,
101
+ id: exportMenuTriggerId,
102
+ "aria-controls": exportMenuId,
103
+ "aria-haspopup": "true",
104
+ "aria-expanded": exportMenuOpen ? 'true' : undefined,
105
+ onClick: () => setExportMenuOpen(!exportMenuOpen),
106
+ size: "small",
107
+ children: /*#__PURE__*/_jsx(ExportIcon, {
108
+ fontSize: "small"
109
+ })
110
+ })
111
+ }), /*#__PURE__*/_jsx(ChartsMenu, {
112
+ target: exportMenuTriggerRef.current,
113
+ open: exportMenuOpen,
114
+ onClose: closeExportMenu,
115
+ position: "bottom-end",
116
+ children: /*#__PURE__*/_jsxs(MenuList, _extends({
117
+ id: exportMenuId,
118
+ "aria-labelledby": exportMenuTriggerId,
119
+ onKeyDown: handleListKeyDown,
120
+ autoFocusItem: true
121
+ }, slotProps?.baseMenuList, {
122
+ children: [!printOptions?.disableToolbarButton && /*#__PURE__*/_jsx(ChartsToolbarPrintExportTrigger, {
123
+ render: /*#__PURE__*/_jsx(MenuItem, _extends({
124
+ dense: true
125
+ }, slotProps?.baseMenuItem)),
126
+ options: printOptions,
127
+ onClick: closeExportMenu,
128
+ children: localeText.toolbarExportPrint
129
+ }), imageExportOptionList.map(imageExportOptions => /*#__PURE__*/_jsx(ChartsToolbarImageExportTrigger, {
130
+ render: /*#__PURE__*/_jsx(MenuItem, _extends({
131
+ dense: true
132
+ }, slotProps?.baseMenuItem)),
133
+ options: imageExportOptions,
134
+ onClick: closeExportMenu,
135
+ children: localeText.toolbarExportImage(imageExportOptions.type)
136
+ }, imageExportOptions.type))]
137
+ }))
138
+ })]
139
+ }, "export-menu"));
140
+ }
45
141
  if (children.length === 0) {
46
142
  return null;
47
143
  }
48
- return /*#__PURE__*/_jsx(Toolbar, _extends({}, props, {
144
+ return /*#__PURE__*/_jsx(Toolbar, _extends({}, other, {
49
145
  children: children
50
146
  }));
147
+ }
148
+ process.env.NODE_ENV !== "production" ? ChartsToolbarPro.propTypes = {
149
+ // ----------------------------- Warning --------------------------------
150
+ // | These PropTypes are generated from the TypeScript type definitions |
151
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
152
+ // ----------------------------------------------------------------------
153
+ imageExportOptions: PropTypes.arrayOf(PropTypes.shape({
154
+ fileName: PropTypes.string,
155
+ quality: PropTypes.number,
156
+ type: PropTypes.string.isRequired
157
+ })),
158
+ printOptions: PropTypes.object
159
+ } : void 0;
160
+ export { ChartsToolbarPro };
161
+ function isHideMenuKey(key) {
162
+ return key === 'Tab' || key === 'Escape';
51
163
  }
@@ -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";
@@ -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";
@@ -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,67 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
+ const _excluded = ["open", "target", "onClose", "children", "position", "className", "onExited"];
6
+ import * as React from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
9
+ import HTMLElementType from '@mui/utils/HTMLElementType';
10
+ import { useChartsSlots } from '@mui/x-charts/internals';
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ function ChartsMenu(props) {
13
+ const {
14
+ open,
15
+ target,
16
+ onClose,
17
+ children,
18
+ position,
19
+ onExited
20
+ } = props,
21
+ other = _objectWithoutPropertiesLoose(props, _excluded);
22
+ const {
23
+ slots,
24
+ slotProps
25
+ } = useChartsSlots();
26
+ const Popper = slots.basePopper;
27
+ const savedFocusRef = React.useRef(null);
28
+ useEnhancedEffect(() => {
29
+ if (open) {
30
+ savedFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
31
+ } else {
32
+ savedFocusRef.current?.focus?.();
33
+ savedFocusRef.current = null;
34
+ }
35
+ }, [open]);
36
+ const handleClickAway = event => {
37
+ if (event.target && (target === event.target || target?.contains(event.target))) {
38
+ return;
39
+ }
40
+ onClose(event);
41
+ };
42
+ return /*#__PURE__*/_jsx(Popper, _extends({
43
+ open: open,
44
+ target: target,
45
+ transition: true,
46
+ placement: position,
47
+ onClickAway: handleClickAway,
48
+ onExited: onExited,
49
+ clickAwayMouseEvent: "onMouseDown"
50
+ }, other, slotProps?.basePopper, {
51
+ children: children
52
+ }));
53
+ }
54
+ process.env.NODE_ENV !== "production" ? ChartsMenu.propTypes = {
55
+ // ----------------------------- Warning --------------------------------
56
+ // | These PropTypes are generated from the TypeScript type definitions |
57
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
58
+ // ----------------------------------------------------------------------
59
+ children: PropTypes.node,
60
+ className: PropTypes.string,
61
+ onClose: PropTypes.func.isRequired,
62
+ onExited: PropTypes.func,
63
+ open: PropTypes.bool.isRequired,
64
+ position: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
65
+ target: HTMLElementType
66
+ } : void 0;
67
+ export { ChartsMenu };
@@ -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,40 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { styled } from '@mui/system';
5
+ import { NotRendered, useChartsSlots } from '@mui/x-charts/internals';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ // This is workaround because api-docs-builder does not support the `NotRendered<ChartBaseDividerProps>` syntax.
8
+ const NotRenderedDivider = NotRendered;
9
+ const Divider = styled(NotRenderedDivider, {
10
+ name: 'MuiChartsToolbar',
11
+ slot: 'Divider'
12
+ })(({
13
+ theme
14
+ }) => ({
15
+ margin: theme.spacing(0, 0.5),
16
+ height: '50%'
17
+ }));
18
+ const ChartsToolbarDivider = /*#__PURE__*/React.forwardRef(function ChartsToolbarDivider(props, ref) {
19
+ const {
20
+ slots,
21
+ slotProps
22
+ } = useChartsSlots();
23
+ return /*#__PURE__*/_jsx(Divider, _extends({
24
+ as: slots.baseDivider,
25
+ orientation: "vertical"
26
+ }, slotProps.baseDivider, props, {
27
+ ref: ref
28
+ }));
29
+ });
30
+ if (process.env.NODE_ENV !== "production") ChartsToolbarDivider.displayName = "ChartsToolbarDivider";
31
+ process.env.NODE_ENV !== "production" ? ChartsToolbarDivider.propTypes = {
32
+ // ----------------------------- Warning --------------------------------
33
+ // | These PropTypes are generated from the TypeScript type definitions |
34
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
35
+ // ----------------------------------------------------------------------
36
+ className: PropTypes.string,
37
+ orientation: PropTypes.oneOf(['horizontal', 'vertical']),
38
+ style: PropTypes.object
39
+ } : void 0;
40
+ export { ChartsToolbarDivider };
package/esm/index.d.ts CHANGED
@@ -37,4 +37,5 @@ export * from "./PieChartPro/index.js";
37
37
  export * from "./FunnelChart/index.js";
38
38
  export * from "./RadarChartPro/index.js";
39
39
  export * from "./ChartZoomSlider/index.js";
40
- export * from "./ChartsToolbarPro/index.js";
40
+ export * from "./ChartsToolbarPro/index.js";
41
+ export type { ChartImageExportOptions, ChartPrintExportOptions } from "./internals/plugins/useChartProExport/index.js";
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts-pro v8.5.3
2
+ * @mui/x-charts-pro v8.6.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ import { ChartBaseMenuItemProps } from "../../slots/chartBaseSlotProps.js";
3
+ export declare function BaseMenuItem(props: ChartBaseMenuItemProps): React.JSX.Element;
@@ -0,0 +1,27 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["inert", "iconStart", "iconEnd", "children"];
4
+ import * as React from 'react';
5
+ import MenuItem from '@mui/material/MenuItem';
6
+ import ListItemIcon from '@mui/material/ListItemIcon';
7
+ import ListItemText from '@mui/material/ListItemText';
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export function BaseMenuItem(props) {
10
+ const {
11
+ inert,
12
+ iconStart,
13
+ iconEnd,
14
+ children
15
+ } = props,
16
+ other = _objectWithoutPropertiesLoose(props, _excluded);
17
+ return /*#__PURE__*/_jsxs(MenuItem, _extends({}, other, {
18
+ disableRipple: inert ? true : other.disableRipple,
19
+ children: [iconStart && /*#__PURE__*/_jsx(ListItemIcon, {
20
+ children: iconStart
21
+ }, "1"), /*#__PURE__*/_jsx(ListItemText, {
22
+ children: children
23
+ }, "2"), iconEnd && /*#__PURE__*/_jsx(ListItemIcon, {
24
+ children: iconEnd
25
+ }, "3")]
26
+ }));
27
+ }
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ import { ChartBasePopperProps } from "../../slots/chartBaseSlotProps.js";
3
+ export declare function BasePopper(props: ChartBasePopperProps): React.JSX.Element;