@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
package/CHANGELOG.md CHANGED
@@ -5,6 +5,113 @@
5
5
  All notable changes to this project will be documented in this file.
6
6
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
7
7
 
8
+ ## 8.6.0
9
+
10
+ _Jun 27, 2025_
11
+
12
+ We'd like to extend a big thank you to the 12 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 📊 Add export menu to charts toolbar
15
+ - 📅 Add `usePickerAdapter` hook to access the date adapter.
16
+
17
+ You can use the adapter in your custom components if you need them to work with multiple date libraries — [Learn more](https://mui.com/x/react-date-pickers/custom-components/#access-date-adapter).
18
+ - 🌎 Improve Danish (da-DK) locale
19
+ - 🌎 Improve German (de-DE) locale
20
+
21
+ Special thanks go out to the community members for their valuable contributions:
22
+ @ShahrazH, @vadimka123
23
+
24
+ The following are all team members who have contributed to this release:
25
+ @arminmeh, @bernardobelchior, @JCQuintas, @KenanYusuf, @LukasTy, @MBilalShafi, @michelengelen, @noraleonte, @rita-codes, @sai6855
26
+
27
+ ### Data Grid
28
+
29
+ #### `@mui/x-data-grid@8.6.0`
30
+
31
+ - [DataGrid] Fix `label` type in `GridActionsCellItem` type (#18175) @sai6855
32
+ - [DataGrid] Fix grid menu not closing when pressing escape/tab (#18300) @KenanYusuf
33
+ - [l10n] Improve Danish (da-DK) locale (#18428) @ShahrazH
34
+ - [l10n] Improve German (de-DE) locale (#18388) @omalyutin
35
+
36
+ #### `@mui/x-data-grid-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
37
+
38
+ Same changes as in `@mui/x-data-grid@8.6.0`, plus:
39
+
40
+ - [DataGridPro] Fix lazy loading params calculated from rendering context (#18460) @arminmeh
41
+
42
+ #### `@mui/x-data-grid-premium@8.6.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")
43
+
44
+ Same changes as in `@mui/x-data-grid-pro@8.6.0`.
45
+
46
+ ### Date and Time Pickers
47
+
48
+ #### `@mui/x-date-pickers@8.6.0`
49
+
50
+ - [pickers] Add `usePickerAdapter` hook (#18457) @LukasTy
51
+ - [pickers] Fix to use latest `value` when updating `lastCommittedValue` in internal state (#18518) @LukasTy
52
+ - [pickers] Use `usePickerAdapter` hook internally instead of `useUtils` (#18465) @LukasTy
53
+
54
+ #### `@mui/x-date-pickers-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
55
+
56
+ Same changes as in `@mui/x-date-pickers@8.6.0`.
57
+
58
+ ### Charts
59
+
60
+ #### `@mui/x-charts@8.6.0`
61
+
62
+ - [charts] Add `data-series` to charts legend item (#18414) @bernardobelchior
63
+ - [charts] Add `data-series` to bar charts (#18413) @bernardobelchior
64
+ - [charts] Add `data-series` to elements of line chart (#18409) @bernardobelchior
65
+ - [charts] Add `data-series` to pie charts (#18432) @bernardobelchior
66
+ - [charts] Fix missing key in bar plot (#18502) @bernardobelchior
67
+ - [charts] Split axis utils from main file (#18517) @JCQuintas
68
+ - [charts] Improve touch behavior for polar axis (#18531) @JCQuintas
69
+ - [charts] Add `isElementInside` helper (#18530) @JCQuintas
70
+
71
+ #### `@mui/x-charts-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
72
+
73
+ Same changes as in `@mui/x-charts@8.6.0`, plus:
74
+
75
+ - [charts-pro] Add export menu to charts toolbar (#18210) @bernardobelchior
76
+ - [charts-pro] Fix export docs mentioning tooltip instead of toolbar (#18490) @bernardobelchior
77
+ - [charts-pro] Fix iframe not being removed after print export (#18500) @bernardobelchior
78
+
79
+ ### Tree View
80
+
81
+ #### `@mui/x-tree-view@8.6.0`
82
+
83
+ Internal changes.
84
+
85
+ #### `@mui/x-tree-view-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
86
+
87
+ Same changes as in `@mui/x-tree-view@8.6.0`, plus:
88
+
89
+ - [tree view pro] Fix theme augmentation (#18437) @LukasTy
90
+
91
+ ### Codemod
92
+
93
+ #### `@mui/x-codemod@8.6.0`
94
+
95
+ Internal changes.
96
+
97
+ ### Docs
98
+
99
+ - [docs] Document `GridRenderContext` (#18492) @arminmeh
100
+ - [docs] Prevent stale rows to appear on sort and filter change in the lazy loading demo (#18461) @arminmeh
101
+ - [docs][pickers] Update action bar demo to use the `nextOrAccept` action (#18505) @LukasTy
102
+ - [docs] Update indeterminate checkbox section in migration guide (#18229) @michelengelen
103
+ - [docs] Data source nested pagination recipe (#14777) @MBilalShafi
104
+
105
+ ### Core
106
+
107
+ - [core] Avoid json stringify whole window object (#18512) @vadimka123
108
+
109
+ ### Miscellaneous
110
+
111
+ - [code-infra] Dynamically get pickers adapters dependencies versions (#18446) @JCQuintas
112
+ - [infra] Adjust inquirer version and usage (#18495) @michelengelen
113
+ - [infra] Use `String.raw` for creating the remote regex (#18462) @michelengelen
114
+
8
115
  ## 8.5.3
9
116
 
10
117
  _Jun 19, 2025_
@@ -18,7 +18,7 @@ var _material = require("../internals/material");
18
18
  var _allPlugins = require("../internals/plugins/allPlugins");
19
19
  var _useChartDataProviderProProps = require("./useChartDataProviderProProps");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
- const releaseInfo = "MTc1MDI4NDAwMDAwMA==";
21
+ const releaseInfo = "MTc1MDk3NTIwMDAwMA==";
22
22
  const packageIdentifier = 'x-charts-pro';
23
23
  /**
24
24
  * 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,77 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ChartsToolbarImageExportTrigger = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _forwardRef = require("@mui/x-internals/forwardRef");
14
+ var _useComponentRenderer = require("@mui/x-internals/useComponentRenderer");
15
+ var _internals = require("@mui/x-charts/internals");
16
+ var _context = require("../context");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ const _excluded = ["render", "options", "onClick"];
19
+ /**
20
+ * A button that triggers an image export.
21
+ * It renders the `baseButton` slot.
22
+ *
23
+ * Demos:
24
+ *
25
+ * - [Export](https://mui.com/x/react-charts/export/)
26
+ */
27
+ const ChartsToolbarImageExportTrigger = exports.ChartsToolbarImageExportTrigger = (0, _forwardRef.forwardRef)(function ChartsToolbarImageExportTrigger(props, ref) {
28
+ const {
29
+ render,
30
+ options,
31
+ onClick
32
+ } = props,
33
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
34
+ const {
35
+ slots,
36
+ slotProps
37
+ } = (0, _internals.useChartsSlots)();
38
+ const apiRef = (0, _context.useChartApiContext)();
39
+ const handleClick = event => {
40
+ apiRef.current.exportAsImage(options);
41
+ onClick?.(event);
42
+ };
43
+ const element = (0, _useComponentRenderer.useComponentRenderer)(slots.baseButton, render, (0, _extends2.default)({}, slotProps?.baseButton, {
44
+ onClick: handleClick
45
+ }, other, {
46
+ ref
47
+ }));
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
49
+ children: element
50
+ });
51
+ });
52
+ if (process.env.NODE_ENV !== "production") ChartsToolbarImageExportTrigger.displayName = "ChartsToolbarImageExportTrigger";
53
+ process.env.NODE_ENV !== "production" ? ChartsToolbarImageExportTrigger.propTypes = {
54
+ // ----------------------------- Warning --------------------------------
55
+ // | These PropTypes are generated from the TypeScript type definitions |
56
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
57
+ // ----------------------------------------------------------------------
58
+ className: _propTypes.default.string,
59
+ disabled: _propTypes.default.bool,
60
+ id: _propTypes.default.string,
61
+ /**
62
+ * The options to apply on the image export.
63
+ * @demos
64
+ * - [Export as Image](https://mui.com/x/react-charts/export/#export-as-image)
65
+ */
66
+ options: _propTypes.default.shape({
67
+ fileName: _propTypes.default.string,
68
+ quality: _propTypes.default.number,
69
+ type: _propTypes.default.string.isRequired
70
+ }),
71
+ /**
72
+ * A function to customize the rendering of the component.
73
+ */
74
+ render: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
75
+ style: _propTypes.default.object,
76
+ tabIndex: _propTypes.default.number
77
+ } : void 0;
@@ -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,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ChartsToolbarPrintExportTrigger = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _forwardRef = require("@mui/x-internals/forwardRef");
14
+ var _useComponentRenderer = require("@mui/x-internals/useComponentRenderer");
15
+ var _internals = require("@mui/x-charts/internals");
16
+ var _context = require("../context");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ const _excluded = ["render", "options", "onClick"];
19
+ /**
20
+ * A button that triggers a print export.
21
+ * It renders the `baseButton` slot.
22
+ *
23
+ * Demos:
24
+ *
25
+ * - [Export](https://mui.com/x/react-charts/export/)
26
+ */
27
+ const ChartsToolbarPrintExportTrigger = exports.ChartsToolbarPrintExportTrigger = (0, _forwardRef.forwardRef)(function ChartsToolbarPrintExportTrigger(props, ref) {
28
+ const {
29
+ render,
30
+ options,
31
+ onClick
32
+ } = props,
33
+ other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
34
+ const {
35
+ slots,
36
+ slotProps
37
+ } = (0, _internals.useChartsSlots)();
38
+ const apiRef = (0, _context.useChartApiContext)();
39
+ const handleClick = event => {
40
+ apiRef.current.exportAsPrint(options);
41
+ onClick?.(event);
42
+ };
43
+ const element = (0, _useComponentRenderer.useComponentRenderer)(slots.baseButton, render, (0, _extends2.default)({}, slotProps?.baseButton, {
44
+ onClick: handleClick
45
+ }, other, {
46
+ ref
47
+ }));
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
49
+ children: element
50
+ });
51
+ });
52
+ if (process.env.NODE_ENV !== "production") ChartsToolbarPrintExportTrigger.displayName = "ChartsToolbarPrintExportTrigger";
53
+ process.env.NODE_ENV !== "production" ? ChartsToolbarPrintExportTrigger.propTypes = {
54
+ // ----------------------------- Warning --------------------------------
55
+ // | These PropTypes are generated from the TypeScript type definitions |
56
+ // | To update them edit the TypeScript types and run "pnpm proptypes" |
57
+ // ----------------------------------------------------------------------
58
+ className: _propTypes.default.string,
59
+ disabled: _propTypes.default.bool,
60
+ id: _propTypes.default.string,
61
+ /**
62
+ * The options to apply on the Print export.
63
+ * @demos
64
+ * - [Print/Export as PDF](https://mui.com/x/react-charts/export/#print-export-as-pdf)
65
+ */
66
+ options: _propTypes.default.shape({
67
+ fileName: _propTypes.default.string
68
+ }),
69
+ /**
70
+ * A function to customize the rendering of the component.
71
+ */
72
+ render: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.func]),
73
+ style: _propTypes.default.object,
74
+ tabIndex: _propTypes.default.number
75
+ } : void 0;
@@ -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 };