@mui/x-charts-pro 8.14.1 → 8.16.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 (104) hide show
  1. package/BarChartPro/BarChartPro.js +19 -2
  2. package/BarChartPro/BarChartPro.plugins.d.ts +2 -2
  3. package/BarChartPro/BarChartPro.plugins.js +1 -1
  4. package/CHANGELOG.md +207 -0
  5. package/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  6. package/ChartsBrushOverlay/index.d.ts +1 -0
  7. package/ChartsBrushOverlay/index.js +16 -0
  8. package/FunnelChart/FunnelPlot.js +3 -23
  9. package/FunnelChart/coordinateMapper.d.ts +3 -0
  10. package/FunnelChart/coordinateMapper.js +18 -0
  11. package/FunnelChart/funnelAxisPlugin/computeAxisValue.js +1 -2
  12. package/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +5 -6
  13. package/FunnelChart/seriesConfig/index.js +2 -0
  14. package/FunnelChart/seriesConfig/tooltipPosition.d.ts +3 -0
  15. package/FunnelChart/seriesConfig/tooltipPosition.js +62 -0
  16. package/Heatmap/Heatmap.plugins.d.ts +1 -1
  17. package/Heatmap/Heatmap.plugins.js +1 -1
  18. package/Heatmap/HeatmapTooltip/HeatmapTooltip.js +9 -0
  19. package/Heatmap/seriesConfig/getSeriesWithDefaultValues.js +3 -2
  20. package/Heatmap/seriesConfig/index.js +2 -0
  21. package/Heatmap/seriesConfig/tooltipPosition.d.ts +3 -0
  22. package/Heatmap/seriesConfig/tooltipPosition.js +57 -0
  23. package/LineChartPro/LineChartPro.js +19 -2
  24. package/LineChartPro/LineChartPro.plugins.d.ts +2 -2
  25. package/LineChartPro/LineChartPro.plugins.js +1 -1
  26. package/RadarChartPro/RadarChartPro.plugins.d.ts +1 -1
  27. package/RadarChartPro/RadarChartPro.plugins.js +1 -1
  28. package/SankeyChart/SankeyTooltip/SankeyTooltip.js +9 -0
  29. package/ScatterChartPro/ScatterChartPro.js +19 -2
  30. package/ScatterChartPro/ScatterChartPro.plugins.d.ts +2 -2
  31. package/ScatterChartPro/ScatterChartPro.plugins.js +1 -1
  32. package/esm/BarChartPro/BarChartPro.js +19 -2
  33. package/esm/BarChartPro/BarChartPro.plugins.d.ts +2 -2
  34. package/esm/BarChartPro/BarChartPro.plugins.js +2 -2
  35. package/esm/ChartDataProviderPro/ChartDataProviderPro.js +1 -1
  36. package/esm/ChartsBrushOverlay/index.d.ts +1 -0
  37. package/esm/ChartsBrushOverlay/index.js +2 -0
  38. package/esm/FunnelChart/FunnelPlot.js +4 -24
  39. package/esm/FunnelChart/coordinateMapper.d.ts +3 -0
  40. package/esm/FunnelChart/coordinateMapper.js +11 -0
  41. package/esm/FunnelChart/funnelAxisPlugin/computeAxisValue.js +1 -2
  42. package/esm/FunnelChart/seriesConfig/getSeriesWithDefaultValues.js +5 -6
  43. package/esm/FunnelChart/seriesConfig/index.js +2 -0
  44. package/esm/FunnelChart/seriesConfig/tooltipPosition.d.ts +3 -0
  45. package/esm/FunnelChart/seriesConfig/tooltipPosition.js +56 -0
  46. package/esm/Heatmap/Heatmap.plugins.d.ts +1 -1
  47. package/esm/Heatmap/Heatmap.plugins.js +1 -1
  48. package/esm/Heatmap/HeatmapTooltip/HeatmapTooltip.js +9 -0
  49. package/esm/Heatmap/seriesConfig/getSeriesWithDefaultValues.js +3 -2
  50. package/esm/Heatmap/seriesConfig/index.js +2 -0
  51. package/esm/Heatmap/seriesConfig/tooltipPosition.d.ts +3 -0
  52. package/esm/Heatmap/seriesConfig/tooltipPosition.js +51 -0
  53. package/esm/LineChartPro/LineChartPro.js +19 -2
  54. package/esm/LineChartPro/LineChartPro.plugins.d.ts +2 -2
  55. package/esm/LineChartPro/LineChartPro.plugins.js +2 -2
  56. package/esm/RadarChartPro/RadarChartPro.plugins.d.ts +1 -1
  57. package/esm/RadarChartPro/RadarChartPro.plugins.js +1 -1
  58. package/esm/SankeyChart/SankeyTooltip/SankeyTooltip.js +9 -0
  59. package/esm/ScatterChartPro/ScatterChartPro.js +19 -2
  60. package/esm/ScatterChartPro/ScatterChartPro.plugins.d.ts +2 -2
  61. package/esm/ScatterChartPro/ScatterChartPro.plugins.js +2 -2
  62. package/esm/index.js +1 -1
  63. package/esm/internals/plugins/allPlugins.d.ts +5 -5
  64. package/esm/internals/plugins/allPlugins.js +3 -3
  65. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.d.ts +11 -2
  66. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.js +3 -2
  67. package/esm/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.d.ts +11 -3
  68. package/esm/internals/plugins/useChartProZoom/gestureHooks/usePanOnDrag.js +1 -1
  69. package/esm/internals/plugins/useChartProZoom/gestureHooks/usePanOnPressAndDrag.js +1 -1
  70. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.d.ts +2 -2
  71. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.js +8 -5
  72. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnBrush.d.ts +8 -0
  73. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnBrush.js +100 -0
  74. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnDoubleTapReset.d.ts +8 -0
  75. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnDoubleTapReset.js +57 -0
  76. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnPinch.js +2 -2
  77. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.js +2 -2
  78. package/esm/internals/plugins/useChartProZoom/gestureHooks/useZoomOnWheel.js +2 -2
  79. package/esm/internals/plugins/useChartProZoom/useChartProZoom.js +4 -0
  80. package/esm/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +1 -1
  81. package/esm/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +2 -2
  82. package/esm/tests/constants.js +1 -0
  83. package/index.js +1 -1
  84. package/internals/plugins/allPlugins.d.ts +5 -5
  85. package/internals/plugins/allPlugins.js +2 -2
  86. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.d.ts +11 -2
  87. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.selectors.js +3 -2
  88. package/internals/plugins/useChartProZoom/ZoomInteractionConfig.types.d.ts +11 -3
  89. package/internals/plugins/useChartProZoom/gestureHooks/usePanOnDrag.js +1 -1
  90. package/internals/plugins/useChartProZoom/gestureHooks/usePanOnPressAndDrag.js +1 -1
  91. package/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.d.ts +2 -2
  92. package/internals/plugins/useChartProZoom/gestureHooks/useZoom.utils.js +8 -5
  93. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnBrush.d.ts +8 -0
  94. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnBrush.js +107 -0
  95. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnDoubleTapReset.d.ts +8 -0
  96. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnDoubleTapReset.js +64 -0
  97. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnPinch.js +2 -2
  98. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnTapAndDrag.js +2 -2
  99. package/internals/plugins/useChartProZoom/gestureHooks/useZoomOnWheel.js +2 -2
  100. package/internals/plugins/useChartProZoom/useChartProZoom.js +4 -0
  101. package/internals/plugins/useChartProZoom/useChartProZoom.selectors.d.ts +1 -1
  102. package/internals/plugins/useChartProZoom/useChartProZoom.types.d.ts +2 -2
  103. package/package.json +6 -6
  104. package/tests/constants.js +7 -0
@@ -23,6 +23,7 @@ var _ChartsClipPath = require("@mui/x-charts/ChartsClipPath");
23
23
  var _internals = require("@mui/x-charts/internals");
24
24
  var _ChartsSurface = require("@mui/x-charts/ChartsSurface");
25
25
  var _ChartsWrapper = require("@mui/x-charts/ChartsWrapper");
26
+ var _ChartsBrushOverlay = require("@mui/x-charts/ChartsBrushOverlay");
26
27
  var _ChartZoomSlider = require("../ChartZoomSlider");
27
28
  var _ChartsToolbarPro = require("../ChartsToolbarPro");
28
29
  var _useChartContainerProProps = require("../ChartContainerPro/useChartContainerProProps");
@@ -84,7 +85,7 @@ const BarChartPro = exports.BarChartPro = /*#__PURE__*/React.forwardRef(function
84
85
  children: [showToolbar ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Toolbar, (0, _extends2.default)({}, props.slotProps?.toolbar)) : null, !props.hideLegend && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsLegend.ChartsLegend, (0, _extends2.default)({}, legendProps)), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ChartsSurface.ChartsSurface, (0, _extends2.default)({}, chartsSurfaceProps, {
85
86
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsGrid.ChartsGrid, (0, _extends2.default)({}, gridProps)), /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", (0, _extends2.default)({}, clipPathGroupProps, {
86
87
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_BarChart.BarPlot, (0, _extends2.default)({}, barPlotProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsOverlay.ChartsOverlay, (0, _extends2.default)({}, overlayProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxisHighlight.ChartsAxisHighlight, (0, _extends2.default)({}, axisHighlightProps))]
87
- })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxis.ChartsAxis, (0, _extends2.default)({}, chartsAxisProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartZoomSlider.ChartZoomSlider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsClipPath.ChartsClipPath, (0, _extends2.default)({}, clipPathProps)), children]
88
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxis.ChartsAxis, (0, _extends2.default)({}, chartsAxisProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartZoomSlider.ChartZoomSlider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsBrushOverlay.ChartsBrushOverlay, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsClipPath.ChartsClipPath, (0, _extends2.default)({}, clipPathProps)), children]
88
89
  })), !props.loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, (0, _extends2.default)({}, props.slotProps?.tooltip))]
89
90
  }))
90
91
  }));
@@ -125,6 +126,14 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
125
126
  * Defines the border radius of the bar element.
126
127
  */
127
128
  borderRadius: _propTypes.default.number,
129
+ /**
130
+ * Configuration for the brush interaction.
131
+ */
132
+ brushConfig: _propTypes.default.shape({
133
+ enabled: _propTypes.default.bool,
134
+ preventHighlight: _propTypes.default.bool,
135
+ preventTooltip: _propTypes.default.bool
136
+ }),
128
137
  children: _propTypes.default.node,
129
138
  className: _propTypes.default.string,
130
139
  /**
@@ -1445,7 +1454,7 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1445
1454
  requiredKeys: _propTypes.default.arrayOf(_propTypes.default.string),
1446
1455
  type: _propTypes.default.oneOf(['pressAndDrag']).isRequired
1447
1456
  })]).isRequired),
1448
- zoom: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf(['pinch', 'tapAndDrag', 'wheel']), _propTypes.default.shape({
1457
+ zoom: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf(['brush', 'doubleTapReset', 'pinch', 'tapAndDrag', 'wheel']), _propTypes.default.shape({
1449
1458
  pointerMode: _propTypes.default.any,
1450
1459
  requiredKeys: _propTypes.default.arrayOf(_propTypes.default.string),
1451
1460
  type: _propTypes.default.oneOf(['wheel']).isRequired
@@ -1457,6 +1466,14 @@ process.env.NODE_ENV !== "production" ? BarChartPro.propTypes = {
1457
1466
  pointerMode: _propTypes.default.oneOf(['mouse', 'touch']),
1458
1467
  requiredKeys: _propTypes.default.arrayOf(_propTypes.default.string),
1459
1468
  type: _propTypes.default.oneOf(['tapAndDrag']).isRequired
1469
+ }), _propTypes.default.shape({
1470
+ pointerMode: _propTypes.default.oneOf(['mouse', 'touch']),
1471
+ requiredKeys: _propTypes.default.arrayOf(_propTypes.default.string),
1472
+ type: _propTypes.default.oneOf(['doubleTapReset']).isRequired
1473
+ }), _propTypes.default.shape({
1474
+ pointerMode: _propTypes.default.any,
1475
+ requiredKeys: _propTypes.default.array,
1476
+ type: _propTypes.default.oneOf(['brush']).isRequired
1460
1477
  })]).isRequired)
1461
1478
  })
1462
1479
  } : void 0;
@@ -1,5 +1,5 @@
1
- import { UseChartZAxisSignature, UseChartCartesianAxisSignature, UseChartInteractionSignature, UseChartHighlightSignature, UseChartKeyboardNavigationSignature, ConvertSignaturesIntoPlugins } from '@mui/x-charts/internals';
1
+ import { UseChartZAxisSignature, UseChartCartesianAxisSignature, UseChartInteractionSignature, UseChartHighlightSignature, UseChartKeyboardNavigationSignature, UseChartBrushSignature, ConvertSignaturesIntoPlugins } from '@mui/x-charts/internals';
2
2
  import { UseChartProExportSignature } from "../internals/plugins/useChartProExport/index.js";
3
3
  import { UseChartProZoomSignature } from "../internals/plugins/useChartProZoom/index.js";
4
- export type BarChartProPluginSignatures = [UseChartZAxisSignature, UseChartCartesianAxisSignature<'bar'>, UseChartInteractionSignature, UseChartHighlightSignature, UseChartKeyboardNavigationSignature, UseChartProZoomSignature, UseChartProExportSignature];
4
+ export type BarChartProPluginSignatures = [UseChartZAxisSignature, UseChartBrushSignature, UseChartInteractionSignature, UseChartCartesianAxisSignature<'bar'>, UseChartHighlightSignature, UseChartKeyboardNavigationSignature, UseChartProZoomSignature, UseChartProExportSignature];
5
5
  export declare const BAR_CHART_PRO_PLUGINS: ConvertSignaturesIntoPlugins<BarChartProPluginSignatures>;
@@ -7,4 +7,4 @@ exports.BAR_CHART_PRO_PLUGINS = void 0;
7
7
  var _internals = require("@mui/x-charts/internals");
8
8
  var _useChartProExport = require("../internals/plugins/useChartProExport");
9
9
  var _useChartProZoom = require("../internals/plugins/useChartProZoom");
10
- const BAR_CHART_PRO_PLUGINS = exports.BAR_CHART_PRO_PLUGINS = [_internals.useChartZAxis, _internals.useChartCartesianAxis, _internals.useChartInteraction, _internals.useChartHighlight, _internals.useChartKeyboardNavigation, _useChartProZoom.useChartProZoom, _useChartProExport.useChartProExport];
10
+ const BAR_CHART_PRO_PLUGINS = exports.BAR_CHART_PRO_PLUGINS = [_internals.useChartZAxis, _internals.useChartBrush, _internals.useChartInteraction, _internals.useChartCartesianAxis, _internals.useChartHighlight, _internals.useChartKeyboardNavigation, _useChartProZoom.useChartProZoom, _useChartProExport.useChartProExport];
package/CHANGELOG.md CHANGED
@@ -5,6 +5,213 @@
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.16.0
9
+
10
+ _Oct 29, 2025_
11
+
12
+ We'd like to extend a big thank you to the 14 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🖌️ Add `brush` zoom interaction to charts
15
+ - 🔁 [Server-side update](https://mui.com/x/react-data-grid/server-side-data/#updating-server-side-data) in a grid with tree data/row grouping and aggregation will trigger re-fetch for all parent levels of that row to update aggregated values. See the [demo](https://mui.com/x/react-data-grid/server-side-data/aggregation/#usage-with-tree-data).
16
+
17
+ Special thanks go out to the community members for their valuable contributions:
18
+ @felix-wg, @frncesc, @sai6855
19
+
20
+ The following are all team members who have contributed to this release:
21
+ @alexfauquette, @arminmeh, @bernardobelchior, @brijeshb42, @flaviendelangle, @JCQuintas, @MBilalShafi, @mbrookes, @michelengelen, @noraleonte, @rita-codes
22
+
23
+ ### Data Grid
24
+
25
+ #### `@mui/x-data-grid@8.16.0`
26
+
27
+ - [DataGrid] Ignore `Ctrl+A` key combination for the row selection in the community version (#20110) @felix-wg
28
+ - [DataGrid][l10n] Improve Spanish (es-ES) locale (#20134) @frncesc
29
+
30
+ #### `@mui/x-data-grid-pro@8.16.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
31
+
32
+ Same changes as in `@mui/x-data-grid@8.16.0`, plus:
33
+
34
+ - [DataGridPro] Add explicit return type to `getVisibleRowsLookup()` to fix the build with `tsc` (#20116) @arminmeh
35
+ - [DataGridPro] Retain the expansion state with expansion configuration props (#20126) @MBilalShafi
36
+
37
+ #### `@mui/x-data-grid-premium@8.16.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
38
+
39
+ Same changes as in `@mui/x-data-grid-pro@8.16.0`, plus:
40
+
41
+ - [DataGridPremium] Export and restore chart integration state (#20079) @arminmeh
42
+ - [DataGridPremium] Fix grouping column `valueFormatter()` crash (#20070) @sai6855
43
+ - [DataGridPremium] Refetch aggregation data after row update with server-side aggregation (#20039) @arminmeh
44
+
45
+ ### Date and Time Pickers
46
+
47
+ #### `@mui/x-date-pickers@8.16.0`
48
+
49
+ - [pickers] Prevent blur event propagation on individual sections (#19825) @michelengelen
50
+
51
+ #### `@mui/x-date-pickers-pro@8.16.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
52
+
53
+ Same changes as in `@mui/x-date-pickers@8.16.0`.
54
+
55
+ ### Charts
56
+
57
+ #### `@mui/x-charts@8.16.0`
58
+
59
+ - [charts] Allow tooltip to anchor items (#19954) @alexfauquette
60
+ - [charts] Fix behavior of grouped axis (#20118) @JCQuintas
61
+ - [charts] Move scale symlog inside scales (#20137) @JCQuintas
62
+ - [charts] Fix AreaChartConnectNulls demo height not correctly resizing (#20078) @sai6855
63
+ - [charts] Fix charts resizing overflow (#20080) @alexfauquette
64
+ - [charts] Fix tooltip not showing on first render (#20115) @bernardobelchior
65
+ - [charts] Handle `undefined` id and color in series (#20087) @bernardobelchior
66
+ - [charts] Remove `useMemo` from isZoomOn*Enabled and isPanOn*Enabled hooks (#20132) @Copilot
67
+ - [charts] Use static data for perf (#20072) @JCQuintas
68
+ - [charts] Move scale symlog inside scales (#20137) @JCQuintas
69
+
70
+ #### `@mui/x-charts-pro@8.16.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
71
+
72
+ Same changes as in `@mui/x-charts@8.16.0`, plus:
73
+
74
+ - [charts-pro] Add `brush` zoom interaction (#19899) @JCQuintas
75
+ - [charts-pro] Add sankey performance check (#20069) @JCQuintas
76
+
77
+ #### `@mui/x-charts-premium@8.16.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
78
+
79
+ Same changes as in `@mui/x-charts-pro@8.16.0`.
80
+
81
+ ### Tree View
82
+
83
+ #### `@mui/x-tree-view@8.16.0`
84
+
85
+ Internal changes.
86
+
87
+ #### `@mui/x-tree-view-pro@8.16.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
88
+
89
+ Same changes as in `@mui/x-tree-view@8.16.0`.
90
+
91
+ ### Codemod
92
+
93
+ #### `@mui/x-codemod@8.16.0`
94
+
95
+ Internal changes.
96
+
97
+ ### Core
98
+
99
+ - [code-infra] Setup eslint compat plugin (#20105) @brijeshb42
100
+ - [code-infra] Improve store types (#20129) @JCQuintas
101
+ - [docs] Update the callout in `rows` prop documentation (#20127) @MBilalShafi
102
+ - [docs-infra] Refine changelog contributor acknowledgment messages (#20123) @mbrookes
103
+
104
+ ### Miscellaneous
105
+
106
+ - [x-telemetry] Skip telemetry tests on browser mode (#20122) @bernardobelchior
107
+
108
+ ## 8.15.0
109
+
110
+ _Oct 23, 2025_
111
+
112
+ We'd like to extend a big thank you to the 14 contributors who made this release possible. Here are some highlights ✨:
113
+
114
+ - 🖌️ Add new [`brush` charts interaction](https://mui.com/x/react-charts/brush/) for building custom behavior.
115
+ ![brush visualization example](https://github.com/user-attachments/assets/60c382a1-e418-4736-8dcb-1567c4e361e3)
116
+ - ⚡️ Performance improvements for large bar charts
117
+ - 🤖 Data Grid AI assistant can now [visualize the query results](https://mui.com/x/react-data-grid/ai-assistant/#data-visualization) by controlling the chart integration settings
118
+ - 📦 DataGrid uses an internal MUI fork of ExcelJS that does not depend on vulnerable versions of NPM packages
119
+ - 🐞 Bugfixes
120
+ - 📚 Documentation improvements
121
+
122
+ Special thanks go out to the community members for their valuable contributions:
123
+ @ZagrebaAlex
124
+
125
+ The following are all team members who have contributed to this release:
126
+ @alexfauquette, @bernardobelchior, @cherniavskii, @flaviendelangle, @Janpot, @JCQuintas, @KenanYusuf, @prakhargupta1, @rita-codes, @siriwatknp, @arminmeh, @brijeshb42, @noraleonte
127
+
128
+ ### Data Grid
129
+
130
+ #### `@mui/x-data-grid@8.15.0`
131
+
132
+ - [DataGrid] Fix `dataSource.fetchRows` API's return type (#20068) @arminmeh
133
+
134
+ #### `@mui/x-data-grid-pro@8.15.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
135
+
136
+ Same changes as in `@mui/x-data-grid@8.15.0`, plus:
137
+
138
+ - [DataGridPro] Keep children in the tree after parent row is re-fetched with the data source (#19934) @arminmeh
139
+ - [DataGridPro] Support scroll shadows customization (#19982) @KenanYusuf
140
+
141
+ #### `@mui/x-data-grid-premium@8.15.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
142
+
143
+ Same changes as in `@mui/x-data-grid-pro@8.15.0`, plus:
144
+
145
+ - [DataGridPremium] Use ExcelJS fork (#19796) @cherniavskii
146
+ - [DataGridPremium] Support data visualization in AI Assistant (#19831) @arminmeh
147
+
148
+ ### Date and Time Pickers
149
+
150
+ #### `@mui/x-date-pickers@8.15.0`
151
+
152
+ Internal changes.
153
+
154
+ #### `@mui/x-date-pickers-pro@8.15.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
155
+
156
+ Same changes as in `@mui/x-date-pickers@8.15.0`.
157
+
158
+ ### Charts
159
+
160
+ #### `@mui/x-charts@8.15.0`
161
+
162
+ - [charts] Add `ChartsBrushOverlay` and allow brush configuration (#19956) @JCQuintas
163
+ - [charts] Add `getStringSize` benchmark. Remove benchmarks from built package. (#19995) @bernardobelchior
164
+ - [charts] Batch string size measurement (#19994) @bernardobelchior
165
+ - [charts] Fix console issue (#20025) @JCQuintas
166
+ - [charts] Fix is[ZoomFeature]Enabled type (#20058) @alexfauquette
167
+ - [charts] Fix reference line middle spacing (#20004) @JCQuintas
168
+ - [charts] Improve `getStringSize` and `batchMeasureStrings` performance (#19996) @bernardobelchior
169
+ - [charts] Improve deep export script (#20007) @JCQuintas
170
+ - [charts] Improve string measurement benchmarks (#19999) @bernardobelchior
171
+ - [charts] Measure string sizes using SVG elements (#19981) @bernardobelchior
172
+ - [l10n] Improve Greek (gr-GR) locale (#20060) @ZagrebaAlex
173
+
174
+ #### `@mui/x-charts-pro@8.15.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
175
+
176
+ Same changes as in `@mui/x-charts@8.15.0`, plus:
177
+
178
+ - [charts-pro] Fix pan with `axis.reverse` (#20031) @JCQuintas
179
+
180
+ #### `@mui/x-charts-premium@8.15.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
181
+
182
+ Same changes as in `@mui/x-charts-pro@8.15.0`.
183
+
184
+ ### Tree View
185
+
186
+ #### `@mui/x-tree-view@8.15.0`
187
+
188
+ - [tree view] Multi character type-ahead (#19942) @noraleonte
189
+
190
+ #### `@mui/x-tree-view-pro@8.15.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
191
+
192
+ Same changes as in `@mui/x-tree-view@8.15.0`.
193
+
194
+ ### Codemod
195
+
196
+ #### `@mui/x-codemod@8.14.0`
197
+
198
+ Internal changes.
199
+
200
+ ### Docs
201
+
202
+ - [docs] Add overview section for scatter chart and heatmap (#19888) @prakhargupta1
203
+ - [docs] Add charts bell curve example (#20003) @JCQuintas
204
+ - [docs] Add grouped multiple fields for Data Grid row grouping recipe (#19964) @siriwatknp
205
+ - [docs] Add Data Grid loading state recipe (#19958) @siriwatknp
206
+
207
+ ### Core
208
+
209
+ - [code-infra] Remove @mui/monorepo usage for react versioning (#19894) @Janpot
210
+ - [code-infra] Remove invalid `environment: 'browser'` from vitest browser config (#19993) @bernardobelchior
211
+ - [code-infra] Remove unused babel aliases (#19987) @Janpot
212
+ - [code-infra] Turn on all testing-library eslint rules (#19946) @brijeshb42
213
+ - [docs-infra] Fix broken hash link (#20062) @Janpot
214
+
8
215
  ## 8.14.1
9
216
 
10
217
  _Oct 16, 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 = "MTc2MDU3MjgwMDAwMA==";
21
+ const releaseInfo = "MTc2MTY5NjAwMDAwMA==";
22
22
  const packageIdentifier = 'x-charts-pro';
23
23
  /**
24
24
  * Orchestrates the data providers for the chart components and hooks.
@@ -0,0 +1 @@
1
+ export * from '@mui/x-charts/ChartsBrushOverlay';
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _ChartsBrushOverlay = require("@mui/x-charts/ChartsBrushOverlay");
7
+ Object.keys(_ChartsBrushOverlay).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _ChartsBrushOverlay[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _ChartsBrushOverlay[key];
14
+ }
15
+ });
16
+ });
@@ -19,6 +19,7 @@ var _useFunnelSeries = require("../hooks/useFunnelSeries");
19
19
  var _curves = require("./curves");
20
20
  var _FunnelSectionLabel = require("./FunnelSectionLabel");
21
21
  var _useChartFunnelAxisRendering = require("./funnelAxisPlugin/useChartFunnelAxisRendering.selectors");
22
+ var _coordinateMapper = require("./coordinateMapper");
22
23
  var _jsxRuntime = require("react/jsx-runtime");
23
24
  const _excluded = ["onItemClick"];
24
25
  _internals.cartesianSeriesTypes.addType('funnel');
@@ -51,31 +52,10 @@ const useAggregatedData = () => {
51
52
  const yAxisId = currentSeries.yAxisId ?? defaultYAxisId;
52
53
  const valueFormatter = currentSeries.valueFormatter;
53
54
  const baseScaleConfig = isHorizontal ? xAxis[xAxisId] : yAxis[yAxisId];
54
- const isXAxisBand = xAxis[xAxisId].scaleType === 'band';
55
- const isYAxisBand = yAxis[yAxisId].scaleType === 'band';
56
- const bandWidth = (isXAxisBand || isYAxisBand) && baseScaleConfig.scale?.bandwidth() || 0;
57
55
  const xScale = xAxis[xAxisId].scale;
58
56
  const yScale = yAxis[yAxisId].scale;
59
- const xPosition = (value, bandIndex, bandIdentifier, stackOffset, useBand) => {
60
- if ((0, _internals.isOrdinalScale)(xScale)) {
61
- const position = xScale(bandIdentifier);
62
- return useBand ? position + bandWidth : position;
63
- }
64
- if (isHorizontal) {
65
- return xScale(value + (stackOffset || 0)) + bandIndex * gap;
66
- }
67
- return xScale(value);
68
- };
69
- const yPosition = (value, bandIndex, bandIdentifier, stackOffset, useBand) => {
70
- if ((0, _internals.isOrdinalScale)(yScale)) {
71
- const position = yScale(bandIdentifier);
72
- return useBand ? position + bandWidth : position;
73
- }
74
- if (isHorizontal) {
75
- return yScale(value);
76
- }
77
- return yScale(value + (stackOffset || 0)) + bandIndex * gap;
78
- };
57
+ const xPosition = (0, _coordinateMapper.createPositionGetter)(xScale, isHorizontal, gap);
58
+ const yPosition = (0, _coordinateMapper.createPositionGetter)(yScale, !isHorizontal, gap);
79
59
  const allY = currentSeries.dataPoints.flatMap((d, dataIndex) => d.flatMap(v => yPosition(v.y, dataIndex, baseScaleConfig.data?.[dataIndex], v.stackOffset, v.useBandWidth)));
80
60
  const allX = currentSeries.dataPoints.flatMap((d, dataIndex) => d.flatMap(v => xPosition(v.x, dataIndex, baseScaleConfig.data?.[dataIndex], v.stackOffset, v.useBandWidth)));
81
61
  const minPoint = {
@@ -0,0 +1,3 @@
1
+ import { D3Scale } from '@mui/x-charts/internals';
2
+ import { PositionGetter } from "./curves/curve.types.js";
3
+ export declare const createPositionGetter: (scale: D3Scale, isCategoryDirection: boolean, gap: number) => PositionGetter;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createPositionGetter = void 0;
7
+ var _internals = require("@mui/x-charts/internals");
8
+ const createPositionGetter = (scale, isCategoryDirection, gap) => (value, bandIndex, bandIdentifier, stackOffset, useBand) => {
9
+ if ((0, _internals.isOrdinalScale)(scale)) {
10
+ const position = scale(bandIdentifier);
11
+ return useBand ? position + scale.bandwidth() : position;
12
+ }
13
+ if (isCategoryDirection) {
14
+ return scale(value + (stackOffset || 0)) + bandIndex * gap;
15
+ }
16
+ return scale(value);
17
+ };
18
+ exports.createPositionGetter = createPositionGetter;
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.computeAxisValue = computeAxisValue;
8
8
  exports.yRangeGetter = exports.xRangeGetter = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _d3Scale = require("@mui/x-charts-vendor/d3-scale");
11
10
  var _internals = require("@mui/x-charts/internals");
12
11
  const xRangeGetter = (drawingArea, reverse, removedSpace = 0) => {
13
12
  const range = [drawingArea.left, drawingArea.left + drawingArea.width - removedSpace];
@@ -59,7 +58,7 @@ function computeAxisValue({
59
58
  triggerTooltip
60
59
  }, axis, {
61
60
  data,
62
- scale: (0, _d3Scale.scaleBand)(axis.data, scaleRange).paddingInner(gap / step).paddingOuter(0),
61
+ scale: (0, _internals.scaleBand)(axis.data, scaleRange).paddingInner(gap / step).paddingOuter(0),
63
62
  tickNumber: axis.data.length,
64
63
  colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? (0, _internals.getOrdinalColorScale)((0, _extends2.default)({
65
64
  values: axis.data
@@ -7,13 +7,12 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  const getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {
10
- return (0, _extends2.default)({
11
- id: seriesData.id ?? `auto-generated-id-${seriesIndex}`
12
- }, seriesData, {
10
+ return (0, _extends2.default)({}, seriesData, {
11
+ id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,
13
12
  borderRadius: seriesData.borderRadius ?? 8,
14
- data: seriesData.data.map((d, index) => (0, _extends2.default)({
15
- color: colors[index % colors.length]
16
- }, d))
13
+ data: seriesData.data.map((d, index) => (0, _extends2.default)({}, d, {
14
+ color: d.color ?? colors[index % colors.length]
15
+ }))
17
16
  });
18
17
  };
19
18
  var _default = exports.default = getSeriesWithDefaultValues;
@@ -11,11 +11,13 @@ var _getColor = _interopRequireDefault(require("./getColor"));
11
11
  var _legend = _interopRequireDefault(require("./legend"));
12
12
  var _tooltip = _interopRequireDefault(require("./tooltip"));
13
13
  var _getSeriesWithDefaultValues = _interopRequireDefault(require("./getSeriesWithDefaultValues"));
14
+ var _tooltipPosition = _interopRequireDefault(require("./tooltipPosition"));
14
15
  const seriesConfig = exports.seriesConfig = {
15
16
  seriesProcessor: _seriesProcessor.default,
16
17
  colorProcessor: _getColor.default,
17
18
  legendGetter: _legend.default,
18
19
  tooltipGetter: _tooltip.default,
20
+ tooltipItemPositionGetter: _tooltipPosition.default,
19
21
  xExtremumGetter: _extremums.getExtremumX,
20
22
  yExtremumGetter: _extremums.getExtremumY,
21
23
  getSeriesWithDefaultValues: _getSeriesWithDefaultValues.default
@@ -0,0 +1,3 @@
1
+ import { TooltipItemPositionGetter } from '@mui/x-charts/internals';
2
+ declare const tooltipItemPositionGetter: TooltipItemPositionGetter<'funnel'>;
3
+ export default tooltipItemPositionGetter;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _internals = require("@mui/x-charts/internals");
8
+ var _coordinateMapper = require("../coordinateMapper");
9
+ const tooltipItemPositionGetter = params => {
10
+ const {
11
+ series,
12
+ identifier,
13
+ axesConfig,
14
+ placement
15
+ } = params;
16
+ if (!identifier || identifier.dataIndex === undefined) {
17
+ return null;
18
+ }
19
+ const itemSeries = series.funnel?.series[identifier.seriesId];
20
+ if (itemSeries == null) {
21
+ return null;
22
+ }
23
+ if (axesConfig.x === undefined || axesConfig.y === undefined) {
24
+ return null;
25
+ }
26
+ const isHorizontal = itemSeries.layout === 'horizontal';
27
+ const baseScaleConfig = isHorizontal ? axesConfig.x : axesConfig.y;
28
+
29
+ // FIXME gap should be obtained from the store.
30
+ // Maybe moving it to the series would be a good idea similar to what we do with bar charts and their stackingGroups
31
+ const gap = 0;
32
+ const xPosition = (0, _coordinateMapper.createPositionGetter)(axesConfig.x.scale, isHorizontal, gap);
33
+ const yPosition = (0, _coordinateMapper.createPositionGetter)(axesConfig.y.scale, !isHorizontal, gap);
34
+ const allY = itemSeries.dataPoints[identifier.dataIndex].map(v => yPosition(v.y, identifier.dataIndex, baseScaleConfig.data?.[identifier.dataIndex], v.stackOffset, v.useBandWidth));
35
+ const allX = itemSeries.dataPoints[identifier.dataIndex].map(v => xPosition(v.x, identifier.dataIndex, baseScaleConfig.data?.[identifier.dataIndex], v.stackOffset, v.useBandWidth));
36
+ const [x0, x1] = (0, _internals.findMinMax)(allX);
37
+ const [y0, y1] = (0, _internals.findMinMax)(allY);
38
+ switch (placement) {
39
+ case 'bottom':
40
+ return {
41
+ x: (x1 + x0) / 2,
42
+ y: y1
43
+ };
44
+ case 'left':
45
+ return {
46
+ x: x0,
47
+ y: (y1 + y0) / 2
48
+ };
49
+ case 'right':
50
+ return {
51
+ x: x1,
52
+ y: (y1 + y0) / 2
53
+ };
54
+ case 'top':
55
+ default:
56
+ return {
57
+ x: (x1 + x0) / 2,
58
+ y: y0
59
+ };
60
+ }
61
+ };
62
+ var _default = exports.default = tooltipItemPositionGetter;
@@ -1,4 +1,4 @@
1
1
  import { UseChartZAxisSignature, UseChartCartesianAxisSignature, UseChartInteractionSignature, UseChartHighlightSignature, ConvertSignaturesIntoPlugins } from '@mui/x-charts/internals';
2
2
  import { UseChartProExportSignature } from "../internals/plugins/useChartProExport/index.js";
3
- export type HeatmapPluginSignatures = [UseChartZAxisSignature, UseChartCartesianAxisSignature<'heatmap'>, UseChartInteractionSignature, UseChartHighlightSignature, UseChartProExportSignature];
3
+ export type HeatmapPluginSignatures = [UseChartZAxisSignature, UseChartInteractionSignature, UseChartCartesianAxisSignature<'heatmap'>, UseChartHighlightSignature, UseChartProExportSignature];
4
4
  export declare const HEATMAP_PLUGINS: ConvertSignaturesIntoPlugins<HeatmapPluginSignatures>;
@@ -6,4 +6,4 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.HEATMAP_PLUGINS = void 0;
7
7
  var _internals = require("@mui/x-charts/internals");
8
8
  var _useChartProExport = require("../internals/plugins/useChartProExport");
9
- const HEATMAP_PLUGINS = exports.HEATMAP_PLUGINS = [_internals.useChartZAxis, _internals.useChartCartesianAxis, _internals.useChartInteraction, _internals.useChartHighlight, _useChartProExport.useChartProExport];
9
+ const HEATMAP_PLUGINS = exports.HEATMAP_PLUGINS = [_internals.useChartZAxis, _internals.useChartInteraction, _internals.useChartCartesianAxis, _internals.useChartHighlight, _useChartProExport.useChartProExport];
@@ -33,6 +33,11 @@ process.env.NODE_ENV !== "production" ? HeatmapTooltip.propTypes = {
33
33
  // | These PropTypes are generated from the TypeScript type definitions |
34
34
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
35
35
  // ----------------------------------------------------------------------
36
+ /**
37
+ * Determine if the tooltip should be placed on the pointer location or on the node.
38
+ * @default 'pointer'
39
+ */
40
+ anchor: _propTypes.default.oneOf(['node', 'pointer']),
36
41
  /**
37
42
  * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),
38
43
  * or a function that returns either.
@@ -162,6 +167,10 @@ process.env.NODE_ENV !== "production" ? HeatmapTooltip.propTypes = {
162
167
  update: _propTypes.default.func.isRequired
163
168
  })
164
169
  })]),
170
+ /**
171
+ * Determines the tooltip position relatively to the anchor.
172
+ */
173
+ position: _propTypes.default.oneOf(['bottom', 'left', 'right', 'top']),
165
174
  /**
166
175
  * The props used for each slot inside the Popper.
167
176
  * @default {}
@@ -8,8 +8,9 @@ exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  const getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {
10
10
  return (0, _extends2.default)({
11
- id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,
12
11
  color: colors[seriesIndex % colors.length]
13
- }, seriesData);
12
+ }, seriesData, {
13
+ id: seriesData.id ?? `auto-generated-id-${seriesIndex}`
14
+ });
14
15
  };
15
16
  var _default = exports.default = getSeriesWithDefaultValues;
@@ -10,11 +10,13 @@ var _seriesProcessor = _interopRequireDefault(require("./seriesProcessor"));
10
10
  var _getColor = _interopRequireDefault(require("./getColor"));
11
11
  var _tooltip = _interopRequireDefault(require("./tooltip"));
12
12
  var _getSeriesWithDefaultValues = _interopRequireDefault(require("./getSeriesWithDefaultValues"));
13
+ var _tooltipPosition = _interopRequireDefault(require("./tooltipPosition"));
13
14
  const seriesConfig = exports.seriesConfig = {
14
15
  seriesProcessor: _seriesProcessor.default,
15
16
  colorProcessor: _getColor.default,
16
17
  legendGetter: () => [],
17
18
  tooltipGetter: _tooltip.default,
19
+ tooltipItemPositionGetter: _tooltipPosition.default,
18
20
  xExtremumGetter: _extremums.getBaseExtremum,
19
21
  yExtremumGetter: _extremums.getBaseExtremum,
20
22
  getSeriesWithDefaultValues: _getSeriesWithDefaultValues.default
@@ -0,0 +1,3 @@
1
+ import { TooltipItemPositionGetter } from '@mui/x-charts/internals';
2
+ declare const tooltipItemPositionGetter: TooltipItemPositionGetter<'heatmap'>;
3
+ export default tooltipItemPositionGetter;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _internals = require("@mui/x-charts/internals");
8
+ const tooltipItemPositionGetter = params => {
9
+ const {
10
+ series,
11
+ identifier,
12
+ axesConfig,
13
+ placement
14
+ } = params;
15
+ if (!identifier || identifier.dataIndex === undefined) {
16
+ return null;
17
+ }
18
+ const itemSeries = series.heatmap?.series[identifier.seriesId];
19
+ if (itemSeries == null) {
20
+ return null;
21
+ }
22
+ if (axesConfig.x === undefined || axesConfig.y === undefined || !(0, _internals.isBandScaleConfig)(axesConfig.x) || !(0, _internals.isBandScaleConfig)(axesConfig.y)) {
23
+ return null;
24
+ }
25
+ const [xIndex, yIndex] = itemSeries.data[identifier.dataIndex];
26
+ const x = axesConfig.x.scale(axesConfig.x.scale.domain()[xIndex]);
27
+ const y = axesConfig.y.scale(axesConfig.y.scale.domain()[yIndex]);
28
+ if (x === undefined || y === undefined) {
29
+ return null;
30
+ }
31
+ const width = axesConfig.x.scale.bandwidth();
32
+ const height = axesConfig.y.scale.bandwidth();
33
+ switch (placement) {
34
+ case 'bottom':
35
+ return {
36
+ x: x + width / 2,
37
+ y: y + height
38
+ };
39
+ case 'left':
40
+ return {
41
+ x,
42
+ y: y + height / 2
43
+ };
44
+ case 'right':
45
+ return {
46
+ x: x + width,
47
+ y: y + height / 2
48
+ };
49
+ case 'top':
50
+ default:
51
+ return {
52
+ x: x + width / 2,
53
+ y
54
+ };
55
+ }
56
+ };
57
+ var _default = exports.default = tooltipItemPositionGetter;