@mui/x-data-grid 8.27.0 → 8.27.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/DataGrid/DataGrid.js +7 -0
  3. package/DataGrid/index.js +0 -1
  4. package/components/GridColumnSortButton.js +2 -2
  5. package/components/GridScrollArea.js +2 -2
  6. package/components/GridScrollShadows.js +2 -2
  7. package/components/GridSkeletonLoadingOverlay.js +2 -2
  8. package/components/base/GridOverlays.js +3 -3
  9. package/components/columnHeaders/GridColumnHeaderItem.js +31 -1
  10. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -2
  11. package/components/columnHeaders/GridIconButtonContainer.js +2 -2
  12. package/components/containers/GridRootStyles.js +23 -217
  13. package/components/menu/columnMenu/GridColumnMenu.d.ts +2 -2
  14. package/components/menu/columnMenu/GridColumnMenu.js +2 -0
  15. package/components/menu/columnMenu/GridColumnMenuProps.d.ts +9 -1
  16. package/components/menu/columnMenu/index.d.ts +1 -1
  17. package/components/menu/columnMenu/index.js +0 -12
  18. package/components/toolbar/GridToolbarQuickFilter.js +4 -4
  19. package/components/toolbarV8/GridToolbar.js +3 -3
  20. package/components/toolbarV8/Toolbar.d.ts +1 -1
  21. package/components/toolbarV8/Toolbar.js +2 -2
  22. package/components/virtualization/GridBottomContainer.js +2 -2
  23. package/components/virtualization/GridMainContainer.js +3 -3
  24. package/components/virtualization/GridTopContainer.js +2 -2
  25. package/components/virtualization/GridVirtualScrollbar.d.ts +1 -1
  26. package/components/virtualization/GridVirtualScrollbar.js +5 -5
  27. package/components/virtualization/GridVirtualScroller.js +2 -2
  28. package/components/virtualization/GridVirtualScrollerFiller.js +6 -6
  29. package/constants/dataGridPropsDefaultValues.js +1 -0
  30. package/esm/DataGrid/DataGrid.js +7 -0
  31. package/esm/DataGrid/index.js +0 -1
  32. package/esm/components/GridColumnSortButton.js +1 -1
  33. package/esm/components/GridScrollArea.js +1 -1
  34. package/esm/components/GridScrollShadows.js +1 -1
  35. package/esm/components/GridSkeletonLoadingOverlay.js +1 -1
  36. package/esm/components/base/GridOverlays.js +1 -1
  37. package/esm/components/columnHeaders/GridColumnHeaderItem.js +31 -1
  38. package/esm/components/columnHeaders/GridColumnHeaderTitle.js +1 -1
  39. package/esm/components/columnHeaders/GridIconButtonContainer.js +1 -1
  40. package/esm/components/containers/GridRootStyles.js +23 -217
  41. package/esm/components/menu/columnMenu/GridColumnMenu.d.ts +2 -2
  42. package/esm/components/menu/columnMenu/GridColumnMenu.js +2 -0
  43. package/esm/components/menu/columnMenu/GridColumnMenuProps.d.ts +9 -1
  44. package/esm/components/menu/columnMenu/index.d.ts +1 -1
  45. package/esm/components/menu/columnMenu/index.js +0 -1
  46. package/esm/components/toolbar/GridToolbarQuickFilter.js +1 -1
  47. package/esm/components/toolbarV8/GridToolbar.js +1 -1
  48. package/esm/components/toolbarV8/Toolbar.d.ts +1 -1
  49. package/esm/components/toolbarV8/Toolbar.js +1 -1
  50. package/esm/components/virtualization/GridBottomContainer.js +1 -1
  51. package/esm/components/virtualization/GridMainContainer.js +1 -1
  52. package/esm/components/virtualization/GridTopContainer.js +1 -1
  53. package/esm/components/virtualization/GridVirtualScrollbar.d.ts +1 -1
  54. package/esm/components/virtualization/GridVirtualScrollbar.js +1 -1
  55. package/esm/components/virtualization/GridVirtualScroller.js +1 -1
  56. package/esm/components/virtualization/GridVirtualScrollerFiller.js +1 -1
  57. package/esm/constants/dataGridPropsDefaultValues.js +1 -0
  58. package/esm/hooks/features/columnMenu/getColumnMenuItemKeys.d.ts +17 -0
  59. package/esm/hooks/features/columnMenu/getColumnMenuItemKeys.js +36 -0
  60. package/esm/hooks/features/columnMenu/useGridColumnMenuSlots.js +11 -16
  61. package/esm/hooks/features/dataSource/models.d.ts +4 -1
  62. package/esm/hooks/features/dataSource/useGridDataSourceBase.d.ts +5 -2
  63. package/esm/hooks/features/dataSource/useGridDataSourceBase.js +93 -6
  64. package/esm/hooks/features/editing/useGridRowEditing.js +14 -4
  65. package/esm/index.js +1 -1
  66. package/esm/internals/index.d.ts +1 -0
  67. package/esm/models/api/gridEditingApi.d.ts +0 -1
  68. package/esm/models/params/gridRowParams.d.ts +0 -1
  69. package/esm/models/props/DataGridProps.d.ts +7 -0
  70. package/hooks/features/columnMenu/getColumnMenuItemKeys.d.ts +17 -0
  71. package/hooks/features/columnMenu/getColumnMenuItemKeys.js +43 -0
  72. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +11 -16
  73. package/hooks/features/dataSource/models.d.ts +4 -1
  74. package/hooks/features/dataSource/useGridDataSourceBase.d.ts +5 -2
  75. package/hooks/features/dataSource/useGridDataSourceBase.js +92 -5
  76. package/hooks/features/editing/useGridRowEditing.js +14 -4
  77. package/index.js +1 -1
  78. package/internals/index.d.ts +1 -0
  79. package/models/api/gridEditingApi.d.ts +0 -1
  80. package/models/params/gridRowParams.d.ts +0 -1
  81. package/models/props/DataGridProps.d.ts +7 -0
  82. package/package.json +1 -1
  83. package/esm/index.css +0 -5
  84. package/index.css +0 -5
package/CHANGELOG.md CHANGED
@@ -5,6 +5,164 @@
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.27.3
9
+
10
+ _Feb 25, 2026_
11
+
12
+ We'd like to extend a big thank you to the 4 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🐞 Bugfixes
15
+ - ⚡️ Improved dynamic data support and cache invalidation in lazy loading for Data Grid Pro
16
+
17
+ The following team members contributed to this release:
18
+ @cherniavskii, @michelengelen, @MBilalShafi, @arminmeh
19
+
20
+ ### Data Grid
21
+
22
+ #### `@mui/x-data-grid@8.27.3`
23
+
24
+ - [DataGrid] Preserve key input during row edit when using `rowModesModel` (#21457) @michelengelen
25
+
26
+ #### `@mui/x-data-grid-pro@8.27.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
27
+
28
+ Same changes as in `@mui/x-data-grid@8.27.3`, plus:
29
+
30
+ - [DataGridPro] Improve dynamic data support and cache invalidation in lazy loading (#21465) @MBilalShafi
31
+
32
+ #### `@mui/x-data-grid-premium@8.27.3` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
33
+
34
+ Same changes as in `@mui/x-data-grid-pro@8.27.3`.
35
+
36
+ ### Core
37
+
38
+ - [code-infra] Do not append `x` to the last version for the compare API (#21422) @arminmeh
39
+ - [docs-infra] Fix current version detection logic (#21415) @cherniavskii
40
+
41
+ ## 8.27.2
42
+
43
+ _Feb 20, 2026_
44
+
45
+ We'd like to extend a big thank you to the 3 contributors who made this release possible. Here are some highlights ✨:
46
+
47
+ - 🐞 Bugfixes
48
+
49
+ ### Data Grid
50
+
51
+ #### `@mui/x-data-grid@8.27.2`
52
+
53
+ Internal changes.
54
+
55
+ #### `@mui/x-data-grid-pro@8.27.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
56
+
57
+ Same changes as in `@mui/x-data-grid@8.27.2`, plus:
58
+
59
+ - [DataGridPro] Fix number input visibility in header filters (#21345) @michelengelen
60
+
61
+ #### `@mui/x-data-grid-premium@8.27.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
62
+
63
+ Same changes as in `@mui/x-data-grid-pro@8.27.2`.
64
+
65
+ ### Date and Time Pickers
66
+
67
+ #### `@mui/x-date-pickers@8.27.2`
68
+
69
+ - [DatePicker] Add keyboard support for selecting day, month, and year (#21399) @michelengelen
70
+
71
+ #### `@mui/x-date-pickers-pro@8.27.2` [![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-date-pickers@8.27.2`, plus:
74
+
75
+ - [DateRangePicker] Fix timezone update issue leading to `invalidRange` error (#21382) @michelengelen
76
+
77
+ ### Charts
78
+
79
+ #### `@mui/x-charts@8.27.2`
80
+
81
+ Internal changes.
82
+
83
+ #### `@mui/x-charts-pro@8.27.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
84
+
85
+ Same changes as in `@mui/x-charts@8.27.2`, plus:
86
+
87
+ - [charts-pro] Handle edge case in export image (#21206) @bernardobelchior
88
+
89
+ #### `@mui/x-charts-premium@8.27.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
90
+
91
+ Same changes as in `@mui/x-charts-pro@8.27.2`.
92
+
93
+ ### Tree View
94
+
95
+ #### `@mui/x-tree-view@8.27.2`
96
+
97
+ - [tree view] Focus item sibling on unmount instead of the 1st item (#21386) @flaviendelangle
98
+
99
+ #### `@mui/x-tree-view-pro@8.27.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
100
+
101
+ Same changes as in `@mui/x-tree-view@8.27.2`.
102
+
103
+ ### Codemod
104
+
105
+ #### `@mui/x-codemod@8.27.2`
106
+
107
+ Internal changes.
108
+
109
+ ### Core
110
+
111
+ - [code-infra] Only ignore `renovate[bot]` in changelog generation script (#21188) @bernardobelchior
112
+
113
+ ## v8.27.1
114
+
115
+ <!-- generated comparing v8.27.0..v8.x -->
116
+
117
+ _Feb 13, 2026_
118
+
119
+ We'd like to extend a big thank you to the 6 contributors who made this release possible. Here are some highlights ✨:
120
+
121
+ - 📝 CSS bundler support is no longer needed for the Data Grid
122
+ - 🐞 Bugfixes
123
+
124
+ Special thanks go out to these community members for their valuable contributions:
125
+ @sai6855
126
+
127
+ The following team members contributed to this release:
128
+ @arminmeh, @cherniavskii, @flaviendelangle, @mj12albert, @MBilalShafi
129
+
130
+ ### Data Grid
131
+
132
+ #### `@mui/x-data-grid@8.27.1`
133
+
134
+ - [DataGrid] Hide column menu icon when there are no items (#21303) @MBilalShafi
135
+ - [DataGrid] Migrate styled imports and remove `index.css` (#21176) @MBilalShafi
136
+ - [DataGrid] Optimize `GridRootStyles` overrides resolver (#21251) @sai6855
137
+
138
+ #### `@mui/x-data-grid-pro@8.27.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
139
+
140
+ Same changes as in `@mui/x-data-grid@8.27.1`, plus:
141
+
142
+ - [DataGridPro] Fix column pinning issue with `restoreState` (#21305) @MBilalShafi
143
+ - [DataGridPro] Fix lazy loading params for page with one row (#21238) @MBilalShafi
144
+ - [DataGridPro] Properly extract parent path (#21301) @arminmeh
145
+
146
+ #### `@mui/x-data-grid-premium@8.27.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
147
+
148
+ Same changes as in `@mui/x-data-grid-pro@8.27.1`, plus:
149
+
150
+ - [DataGridPremium] Fix aggregation display when `initialState` has both `sortModel` and `pinnedColumns` (#21152) @mj12albert
151
+
152
+ ### Tree View
153
+
154
+ #### `@mui/x-tree-view@8.27.1`
155
+
156
+ - [tree view] Fix `apiRef.current.setItemExpansion()` (#21095) @flaviendelangle
157
+
158
+ #### `@mui/x-tree-view-pro@8.27.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
159
+
160
+ Same changes as in `@mui/x-tree-view@8.27.1`.
161
+
162
+ ### Core
163
+
164
+ - [internal] Add CLI for translation using LLM (#21299) @cherniavskii
165
+
8
166
  ## v8.27.0
9
167
 
10
168
  _Feb 2, 2026_
@@ -180,6 +180,13 @@ DataGridRaw.propTypes = {
180
180
  get: _propTypes.default.func.isRequired,
181
181
  set: _propTypes.default.func.isRequired
182
182
  }),
183
+ /**
184
+ * If positive, the Data Grid will periodically revalidate data source rows by
185
+ * re-fetching them from the server when the cache entry has expired.
186
+ * Set to `0` to disable polling.
187
+ * @default 0
188
+ */
189
+ dataSourceRevalidateMs: _propTypes.default.number,
183
190
  /**
184
191
  * Set the density of the Data Grid.
185
192
  * @default "standard"
package/DataGrid/index.js CHANGED
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- require("../index.css");
7
6
  var _DataGrid = require("./DataGrid");
8
7
  Object.keys(_DataGrid).forEach(function (key) {
9
8
  if (key === "default" || key === "__esModule") return;
@@ -11,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
- var _system = require("@mui/system");
14
+ var _styles = require("@mui/material/styles");
15
15
  var _clsx = _interopRequireDefault(require("clsx"));
16
16
  var _useGridApiContext = require("../hooks/utils/useGridApiContext");
17
17
  var _gridClasses = require("../constants/gridClasses");
@@ -30,7 +30,7 @@ const useUtilityClasses = ownerState => {
30
30
  };
31
31
  return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
32
32
  };
33
- const GridColumnSortButtonRoot = (0, _system.styled)(_assert.NotRendered, {
33
+ const GridColumnSortButtonRoot = (0, _styles.styled)(_assert.NotRendered, {
34
34
  name: 'MuiDataGrid',
35
35
  slot: 'SortButton'
36
36
  })({
@@ -12,7 +12,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
14
14
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
- var _system = require("@mui/system");
15
+ var _styles = require("@mui/material/styles");
16
16
  var _fastMemo = require("@mui/x-internals/fastMemo");
17
17
  var _forwardRef = require("@mui/x-internals/forwardRef");
18
18
  var _useGridRootProps = require("../hooks/utils/useGridRootProps");
@@ -39,7 +39,7 @@ const useUtilityClasses = ownerState => {
39
39
  };
40
40
  return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
41
41
  };
42
- const GridScrollAreaRawRoot = (0, _system.styled)('div', {
42
+ const GridScrollAreaRawRoot = (0, _styles.styled)('div', {
43
43
  name: 'MuiDataGrid',
44
44
  slot: 'ScrollArea',
45
45
  overridesResolver: (props, styles) => [{
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  });
9
9
  exports.GridScrollShadows = GridScrollShadows;
10
10
  var React = _interopRequireWildcard(require("react"));
11
- var _system = require("@mui/system");
11
+ var _styles = require("@mui/material/styles");
12
12
  var _RtlProvider = require("@mui/system/RtlProvider");
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
14
  var _hooks = require("../hooks");
@@ -29,7 +29,7 @@ const useUtilityClasses = ownerState => {
29
29
  };
30
30
  return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
31
31
  };
32
- const ScrollShadow = (0, _system.styled)('div', {
32
+ const ScrollShadow = (0, _styles.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
34
  slot: 'ScrollShadow',
35
35
  overridesResolver: (props, styles) => [styles.root, styles[props.position]]
@@ -11,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
  var _clsx = _interopRequireDefault(require("clsx"));
14
- var _system = require("@mui/system");
14
+ var _styles = require("@mui/material/styles");
15
15
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
16
16
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
17
17
  var _RtlProvider = require("@mui/system/RtlProvider");
@@ -29,7 +29,7 @@ var _rtlFlipSide = require("../utils/rtlFlipSide");
29
29
  var _utils = require("../internals/utils");
30
30
  var _jsxRuntime = require("react/jsx-runtime");
31
31
  const _excluded = ["skeletonRowsCount", "visibleColumns", "showFirstRowBorder"];
32
- const SkeletonOverlay = (0, _system.styled)('div', {
32
+ const SkeletonOverlay = (0, _styles.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
34
  slot: 'SkeletonLoadingOverlay'
35
35
  })({
@@ -9,7 +9,7 @@ exports.GridOverlayWrapper = GridOverlayWrapper;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _system = require("@mui/system");
12
+ var _styles = require("@mui/material/styles");
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
14
  var _gridRowsUtils = require("../../hooks/features/rows/gridRowsUtils");
15
15
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
@@ -18,7 +18,7 @@ var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
18
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
19
19
  var _gridClasses = require("../../constants/gridClasses");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
- const GridOverlayWrapperRoot = (0, _system.styled)('div', {
21
+ const GridOverlayWrapperRoot = (0, _styles.styled)('div', {
22
22
  name: 'MuiDataGrid',
23
23
  slot: 'OverlayWrapper',
24
24
  shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant' && prop !== 'right'
@@ -42,7 +42,7 @@ loadingOverlayVariant !== 'skeleton' ? {
42
42
  zIndex: overlayType === 'loadingOverlay' ? 5 // Should be above pinned columns, pinned rows, and detail panel
43
43
  : 4 // Should be above pinned columns and detail panel
44
44
  } : {});
45
- const GridOverlayWrapperInner = (0, _system.styled)('div', {
45
+ const GridOverlayWrapperInner = (0, _styles.styled)('div', {
46
46
  name: 'MuiDataGrid',
47
47
  slot: 'OverlayWrapperInner',
48
48
  shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant'
@@ -17,6 +17,7 @@ var _fastMemo = require("@mui/x-internals/fastMemo");
17
17
  var _RtlProvider = require("@mui/system/RtlProvider");
18
18
  var _doesSupportPreventScroll = require("../../utils/doesSupportPreventScroll");
19
19
  var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
20
+ var _getColumnMenuItemKeys = require("../../hooks/features/columnMenu/getColumnMenuItemKeys");
20
21
  var _ColumnHeaderMenuIcon = require("./ColumnHeaderMenuIcon");
21
22
  var _GridColumnHeaderMenu = require("../menu/columnMenu/GridColumnHeaderMenu");
22
23
  var _gridClasses = require("../../constants/gridClasses");
@@ -85,6 +86,30 @@ function GridColumnHeaderItem(props) {
85
86
  const columnMenuButtonId = (0, _useId.default)();
86
87
  const iconButtonRef = React.useRef(null);
87
88
  const [showColumnMenuIcon, setShowColumnMenuIcon] = React.useState(columnMenuOpen);
89
+ const columnMenuSlotProps = rootProps.slotProps?.columnMenu;
90
+ const columnMenuComponent = rootProps.slots.columnMenu;
91
+ const defaultSlots = columnMenuComponent?.defaultSlots;
92
+ const defaultSlotProps = columnMenuComponent?.defaultSlotProps;
93
+ const hasKnownDefaultColumnMenu = defaultSlots != null && defaultSlotProps != null;
94
+ const columnMenuItemKeys = React.useMemo(() => {
95
+ if (!hasKnownDefaultColumnMenu) {
96
+ return [];
97
+ }
98
+ return (0, _getColumnMenuItemKeys.getColumnMenuItemKeys)({
99
+ apiRef,
100
+ colDef,
101
+ defaultSlots,
102
+ defaultSlotProps,
103
+ slots: columnMenuSlotProps?.slots,
104
+ slotProps: columnMenuSlotProps?.slotProps
105
+ });
106
+ }, [apiRef, colDef, defaultSlotProps, defaultSlots, hasKnownDefaultColumnMenu, columnMenuSlotProps?.slotProps, columnMenuSlotProps?.slots]);
107
+
108
+ // If we don't have a "known" default column menu (i.e. a custom menu component
109
+ // without `defaultSlots` / `defaultSlotProps` statics), we treat it as opaque
110
+ // and assume it has items, so we always show the column menu icon.
111
+ // Only the built-in/default menu path can hide the icon when there are no items.
112
+ const hasColumnMenuItems = !hasKnownDefaultColumnMenu || columnMenuItemKeys.length > 0;
88
113
  const isDraggable = !rootProps.disableColumnReorder && !disableReorder && !colDef.disableReorder;
89
114
  let headerComponent;
90
115
  if (colDef.renderHeader) {
@@ -135,10 +160,15 @@ function GridColumnHeaderItem(props) {
135
160
  setShowColumnMenuIcon(columnMenuOpen);
136
161
  }
137
162
  }, [showColumnMenuIcon, columnMenuOpen]);
163
+ React.useEffect(() => {
164
+ if (hasKnownDefaultColumnMenu && columnMenuOpen && !hasColumnMenuItems) {
165
+ apiRef.current.hideColumnMenu();
166
+ }
167
+ }, [apiRef, columnMenuOpen, hasColumnMenuItems, hasKnownDefaultColumnMenu]);
138
168
  const handleExited = React.useCallback(() => {
139
169
  setShowColumnMenuIcon(false);
140
170
  }, []);
141
- const columnMenuIconButton = !rootProps.disableColumnMenu && !colDef.disableColumnMenu && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ColumnHeaderMenuIcon.ColumnHeaderMenuIcon, {
171
+ const columnMenuIconButton = !rootProps.disableColumnMenu && !colDef.disableColumnMenu && hasColumnMenuItems && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ColumnHeaderMenuIcon.ColumnHeaderMenuIcon, {
142
172
  colDef: colDef,
143
173
  columnMenuId: columnMenuId,
144
174
  columnMenuButtonId: columnMenuButtonId,
@@ -13,7 +13,7 @@ var React = _interopRequireWildcard(require("react"));
13
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
14
14
  var _clsx = _interopRequireDefault(require("clsx"));
15
15
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
16
- var _system = require("@mui/system");
16
+ var _styles = require("@mui/material/styles");
17
17
  var _forwardRef = require("@mui/x-internals/forwardRef");
18
18
  var _domUtils = require("../../utils/domUtils");
19
19
  var _gridClasses = require("../../constants/gridClasses");
@@ -29,7 +29,7 @@ const useUtilityClasses = ownerState => {
29
29
  };
30
30
  return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
31
31
  };
32
- const GridColumnHeaderTitleRoot = (0, _system.styled)('div', {
32
+ const GridColumnHeaderTitleRoot = (0, _styles.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
34
  slot: 'ColumnHeaderTitle'
35
35
  })({
@@ -12,7 +12,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
  var _clsx = _interopRequireDefault(require("clsx"));
14
14
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
- var _system = require("@mui/system");
15
+ var _styles = require("@mui/material/styles");
16
16
  var _forwardRef = require("@mui/x-internals/forwardRef");
17
17
  var _gridClasses = require("../../constants/gridClasses");
18
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
@@ -27,7 +27,7 @@ const useUtilityClasses = ownerState => {
27
27
  };
28
28
  return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
29
  };
30
- const GridIconButtonContainerRoot = (0, _system.styled)('div', {
30
+ const GridIconButtonContainerRoot = (0, _styles.styled)('div', {
31
31
  name: 'MuiDataGrid',
32
32
  slot: 'IconButtonContainer'
33
33
  })(() => ({
@@ -22,226 +22,32 @@ const separatorIconDragStyles = {
22
22
  // https://github.com/emotion-js/emotion/issues/1105#issuecomment-1722524968
23
23
  const ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason */';
24
24
  const shouldShowBorderTopRightRadiusSelector = apiRef => !apiRef.current.state.dimensions.isReady ? apiRef.current.state.dimensions.scrollbarSize === 0 : apiRef.current.state.dimensions.hasScrollX && (!apiRef.current.state.dimensions.hasScrollY || apiRef.current.state.dimensions.scrollbarSize === 0);
25
+ const elementOverrides = {
26
+ root: ['autoHeight', 'autosizing', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'withVerticalBorder'],
27
+ children: ['actionsCell', 'booleanCell', 'cell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--rangeTop', 'cell--selectionMode', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withLeftBorder', 'cell--withRightBorder', 'cellCheckbox', 'cellEmpty', 'cellOffsetLeft', 'cellSkeleton', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--emptyGroup', 'columnHeader--filledGroup', 'columnHeader--filtered', 'columnHeader--last', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--siblingFocused', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnSeparator', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'container--bottom', 'container--top', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'editBooleanCell', 'filterIcon', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'groupingCriteriaCell', 'groupingCriteriaCellLoadingContainer', 'groupingCriteriaCellToggle', 'headerFilterRow', 'iconSeparator', 'menuIcon', 'menuIconButton', 'menuList', 'menuOpen', 'overlayWrapperInner', 'pinnedRows', 'pinnedRows--bottom', 'pinnedRows--top', 'row', 'row--borderBottom', 'row--detailPanelExpanded', 'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
28
+ };
25
29
  const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
26
30
  name: 'MuiDataGrid',
27
31
  slot: 'Root',
28
- overridesResolver: (props, styles) => [
29
- // Root overrides
30
- styles.root, {
31
- [`&.${_gridClasses.gridClasses.autoHeight}`]: styles.autoHeight
32
- }, {
33
- [`&.${_gridClasses.gridClasses.autosizing}`]: styles.autosizing
34
- }, {
35
- [`&.${_gridClasses.gridClasses['root--densityStandard']}`]: styles['root--densityStandard']
36
- }, {
37
- [`&.${_gridClasses.gridClasses['root--densityComfortable']}`]: styles['root--densityComfortable']
38
- }, {
39
- [`&.${_gridClasses.gridClasses['root--densityCompact']}`]: styles['root--densityCompact']
40
- }, {
41
- [`&.${_gridClasses.gridClasses['root--disableUserSelection']}`]: styles['root--disableUserSelection']
42
- }, {
43
- [`&.${_gridClasses.gridClasses['root--noToolbar']}`]: styles['root--noToolbar']
44
- }, {
45
- [`&.${_gridClasses.gridClasses.withVerticalBorder}`]: styles.withVerticalBorder
46
- },
47
- // Child element overrides
48
- // - Only declare overrides here for class names that are not applied to `styled` components.
49
- // - For `styled` components, declare overrides in the component itself.
50
- {
51
- [`& .${_gridClasses.gridClasses.actionsCell}`]: styles.actionsCell
52
- }, {
53
- [`& .${_gridClasses.gridClasses.booleanCell}`]: styles.booleanCell
54
- }, {
55
- [`& .${_gridClasses.gridClasses.cell}`]: styles.cell
56
- }, {
57
- [`& .${_gridClasses.gridClasses['cell--editable']}`]: styles['cell--editable']
58
- }, {
59
- [`& .${_gridClasses.gridClasses['cell--editing']}`]: styles['cell--editing']
60
- }, {
61
- [`& .${_gridClasses.gridClasses['cell--flex']}`]: styles['cell--flex']
62
- }, {
63
- [`& .${_gridClasses.gridClasses['cell--pinnedLeft']}`]: styles['cell--pinnedLeft']
64
- }, {
65
- [`& .${_gridClasses.gridClasses['cell--pinnedRight']}`]: styles['cell--pinnedRight']
66
- }, {
67
- [`& .${_gridClasses.gridClasses['cell--rangeBottom']}`]: styles['cell--rangeBottom']
68
- }, {
69
- [`& .${_gridClasses.gridClasses['cell--rangeLeft']}`]: styles['cell--rangeLeft']
70
- }, {
71
- [`& .${_gridClasses.gridClasses['cell--rangeRight']}`]: styles['cell--rangeRight']
72
- }, {
73
- [`& .${_gridClasses.gridClasses['cell--rangeTop']}`]: styles['cell--rangeTop']
74
- }, {
75
- [`& .${_gridClasses.gridClasses['cell--selectionMode']}`]: styles['cell--selectionMode']
76
- }, {
77
- [`& .${_gridClasses.gridClasses['cell--textCenter']}`]: styles['cell--textCenter']
78
- }, {
79
- [`& .${_gridClasses.gridClasses['cell--textLeft']}`]: styles['cell--textLeft']
80
- }, {
81
- [`& .${_gridClasses.gridClasses['cell--textRight']}`]: styles['cell--textRight']
82
- }, {
83
- [`& .${_gridClasses.gridClasses['cell--withLeftBorder']}`]: styles['cell--withLeftBorder']
84
- }, {
85
- [`& .${_gridClasses.gridClasses['cell--withRightBorder']}`]: styles['cell--withRightBorder']
86
- }, {
87
- [`& .${_gridClasses.gridClasses.cellCheckbox}`]: styles.cellCheckbox
88
- }, {
89
- [`& .${_gridClasses.gridClasses.cellEmpty}`]: styles.cellEmpty
90
- }, {
91
- [`& .${_gridClasses.gridClasses.cellOffsetLeft}`]: styles.cellOffsetLeft
92
- }, {
93
- [`& .${_gridClasses.gridClasses.cellSkeleton}`]: styles.cellSkeleton
94
- }, {
95
- [`& .${_gridClasses.gridClasses.checkboxInput}`]: styles.checkboxInput
96
- }, {
97
- [`& .${_gridClasses.gridClasses.columnHeader}`]: styles.columnHeader
98
- }, {
99
- [`& .${_gridClasses.gridClasses['columnHeader--alignCenter']}`]: styles['columnHeader--alignCenter']
100
- }, {
101
- [`& .${_gridClasses.gridClasses['columnHeader--alignLeft']}`]: styles['columnHeader--alignLeft']
102
- }, {
103
- [`& .${_gridClasses.gridClasses['columnHeader--alignRight']}`]: styles['columnHeader--alignRight']
104
- }, {
105
- [`& .${_gridClasses.gridClasses['columnHeader--dragging']}`]: styles['columnHeader--dragging']
106
- }, {
107
- [`& .${_gridClasses.gridClasses['columnHeader--emptyGroup']}`]: styles['columnHeader--emptyGroup']
108
- }, {
109
- [`& .${_gridClasses.gridClasses['columnHeader--filledGroup']}`]: styles['columnHeader--filledGroup']
110
- }, {
111
- [`& .${_gridClasses.gridClasses['columnHeader--filtered']}`]: styles['columnHeader--filtered']
112
- }, {
113
- [`& .${_gridClasses.gridClasses['columnHeader--last']}`]: styles['columnHeader--last']
114
- }, {
115
- [`& .${_gridClasses.gridClasses['columnHeader--moving']}`]: styles['columnHeader--moving']
116
- }, {
117
- [`& .${_gridClasses.gridClasses['columnHeader--numeric']}`]: styles['columnHeader--numeric']
118
- }, {
119
- [`& .${_gridClasses.gridClasses['columnHeader--pinnedLeft']}`]: styles['columnHeader--pinnedLeft']
120
- }, {
121
- [`& .${_gridClasses.gridClasses['columnHeader--pinnedRight']}`]: styles['columnHeader--pinnedRight']
122
- }, {
123
- [`& .${_gridClasses.gridClasses['columnHeader--siblingFocused']}`]: styles['columnHeader--siblingFocused']
124
- }, {
125
- [`& .${_gridClasses.gridClasses['columnHeader--sortable']}`]: styles['columnHeader--sortable']
126
- }, {
127
- [`& .${_gridClasses.gridClasses['columnHeader--sorted']}`]: styles['columnHeader--sorted']
128
- }, {
129
- [`& .${_gridClasses.gridClasses['columnHeader--withLeftBorder']}`]: styles['columnHeader--withLeftBorder']
130
- }, {
131
- [`& .${_gridClasses.gridClasses['columnHeader--withRightBorder']}`]: styles['columnHeader--withRightBorder']
132
- }, {
133
- [`& .${_gridClasses.gridClasses.columnHeaderCheckbox}`]: styles.columnHeaderCheckbox
134
- }, {
135
- [`& .${_gridClasses.gridClasses.columnHeaderDraggableContainer}`]: styles.columnHeaderDraggableContainer
136
- }, {
137
- [`& .${_gridClasses.gridClasses.columnHeaderTitleContainer}`]: styles.columnHeaderTitleContainer
138
- }, {
139
- [`& .${_gridClasses.gridClasses.columnHeaderTitleContainerContent}`]: styles.columnHeaderTitleContainerContent
140
- }, {
141
- [`& .${_gridClasses.gridClasses.columnSeparator}`]: styles.columnSeparator
142
- }, {
143
- [`& .${_gridClasses.gridClasses['columnSeparator--resizable']}`]: styles['columnSeparator--resizable']
144
- }, {
145
- [`& .${_gridClasses.gridClasses['columnSeparator--resizing']}`]: styles['columnSeparator--resizing']
146
- }, {
147
- [`& .${_gridClasses.gridClasses['columnSeparator--sideLeft']}`]: styles['columnSeparator--sideLeft']
148
- }, {
149
- [`& .${_gridClasses.gridClasses['columnSeparator--sideRight']}`]: styles['columnSeparator--sideRight']
150
- }, {
151
- [`& .${_gridClasses.gridClasses['container--bottom']}`]: styles['container--bottom']
152
- }, {
153
- [`& .${_gridClasses.gridClasses['container--top']}`]: styles['container--top']
154
- }, {
155
- [`& .${_gridClasses.gridClasses.detailPanelToggleCell}`]: styles.detailPanelToggleCell
156
- }, {
157
- [`& .${_gridClasses.gridClasses['detailPanelToggleCell--expanded']}`]: styles['detailPanelToggleCell--expanded']
158
- }, {
159
- [`& .${_gridClasses.gridClasses.editBooleanCell}`]: styles.editBooleanCell
160
- }, {
161
- [`& .${_gridClasses.gridClasses.filterIcon}`]: styles.filterIcon
162
- }, {
163
- [`& .${_gridClasses.gridClasses['filler--borderBottom']}`]: styles['filler--borderBottom']
164
- }, {
165
- [`& .${_gridClasses.gridClasses['filler--pinnedLeft']}`]: styles['filler--pinnedLeft']
166
- }, {
167
- [`& .${_gridClasses.gridClasses['filler--pinnedRight']}`]: styles['filler--pinnedRight']
168
- }, {
169
- [`& .${_gridClasses.gridClasses.groupingCriteriaCell}`]: styles.groupingCriteriaCell
170
- }, {
171
- [`& .${_gridClasses.gridClasses.groupingCriteriaCellLoadingContainer}`]: styles.groupingCriteriaCellLoadingContainer
172
- }, {
173
- [`& .${_gridClasses.gridClasses.groupingCriteriaCellToggle}`]: styles.groupingCriteriaCellToggle
174
- }, {
175
- [`& .${_gridClasses.gridClasses.headerFilterRow}`]: styles.headerFilterRow
176
- }, {
177
- [`& .${_gridClasses.gridClasses.iconSeparator}`]: styles.iconSeparator
178
- }, {
179
- [`& .${_gridClasses.gridClasses.menuIcon}`]: styles.menuIcon
180
- }, {
181
- [`& .${_gridClasses.gridClasses.menuIconButton}`]: styles.menuIconButton
182
- }, {
183
- [`& .${_gridClasses.gridClasses.menuList}`]: styles.menuList
184
- }, {
185
- [`& .${_gridClasses.gridClasses.menuOpen}`]: styles.menuOpen
186
- }, {
187
- [`& .${_gridClasses.gridClasses.overlayWrapperInner}`]: styles.overlayWrapperInner
188
- }, {
189
- [`& .${_gridClasses.gridClasses.pinnedRows}`]: styles.pinnedRows
190
- }, {
191
- [`& .${_gridClasses.gridClasses['pinnedRows--bottom']}`]: styles['pinnedRows--bottom']
192
- }, {
193
- [`& .${_gridClasses.gridClasses['pinnedRows--top']}`]: styles['pinnedRows--top']
194
- }, {
195
- [`& .${_gridClasses.gridClasses.row}`]: styles.row
196
- }, {
197
- [`& .${_gridClasses.gridClasses['row--borderBottom']}`]: styles['row--borderBottom']
198
- }, {
199
- [`& .${_gridClasses.gridClasses['row--detailPanelExpanded']}`]: styles['row--detailPanelExpanded']
200
- }, {
201
- [`& .${_gridClasses.gridClasses['row--dragging']}`]: styles['row--dragging']
202
- }, {
203
- [`& .${_gridClasses.gridClasses['row--dynamicHeight']}`]: styles['row--dynamicHeight']
204
- }, {
205
- [`& .${_gridClasses.gridClasses['row--editable']}`]: styles['row--editable']
206
- }, {
207
- [`& .${_gridClasses.gridClasses['row--editing']}`]: styles['row--editing']
208
- }, {
209
- [`& .${_gridClasses.gridClasses['row--firstVisible']}`]: styles['row--firstVisible']
210
- }, {
211
- [`& .${_gridClasses.gridClasses['row--lastVisible']}`]: styles['row--lastVisible']
212
- }, {
213
- [`& .${_gridClasses.gridClasses.rowReorderCell}`]: styles.rowReorderCell
214
- }, {
215
- [`& .${_gridClasses.gridClasses['rowReorderCell--draggable']}`]: styles['rowReorderCell--draggable']
216
- }, {
217
- [`& .${_gridClasses.gridClasses.rowReorderCellContainer}`]: styles.rowReorderCellContainer
218
- }, {
219
- [`& .${_gridClasses.gridClasses.rowReorderCellPlaceholder}`]: styles.rowReorderCellPlaceholder
220
- }, {
221
- [`& .${_gridClasses.gridClasses.rowSkeleton}`]: styles.rowSkeleton
222
- }, {
223
- [`& .${_gridClasses.gridClasses.scrollbar}`]: styles.scrollbar
224
- }, {
225
- [`& .${_gridClasses.gridClasses['scrollbar--horizontal']}`]: styles['scrollbar--horizontal']
226
- }, {
227
- [`& .${_gridClasses.gridClasses['scrollbar--vertical']}`]: styles['scrollbar--vertical']
228
- }, {
229
- [`& .${_gridClasses.gridClasses.scrollbarFiller}`]: styles.scrollbarFiller
230
- }, {
231
- [`& .${_gridClasses.gridClasses['scrollbarFiller--pinnedRight']}`]: styles['scrollbarFiller--pinnedRight']
232
- }, {
233
- [`& .${_gridClasses.gridClasses.sortIcon}`]: styles.sortIcon
234
- }, {
235
- [`& .${_gridClasses.gridClasses.treeDataGroupingCell}`]: styles.treeDataGroupingCell
236
- }, {
237
- [`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer
238
- }, {
239
- [`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
240
- }, {
241
- [`& .${_gridClasses.gridClasses.withBorderColor}`]: styles.withBorderColor
242
- }, {
243
- [`& .${_gridClasses.gridClasses['row--beingDragged']}`]: styles['row--beingDragged']
244
- }]
32
+ overridesResolver: (props, styles) => {
33
+ // Root overrides
34
+ const overrides = [styles.root];
35
+ elementOverrides.root.forEach(key => {
36
+ overrides.push({
37
+ [`&.${_gridClasses.gridClasses[key]}`]: styles[key]
38
+ });
39
+ });
40
+
41
+ // Child element overrides
42
+ // - Only declare overrides here for class names that are not applied to `styled` components.
43
+ // - For `styled` components, declare overrides in the component itself.
44
+ elementOverrides.children.forEach(key => {
45
+ overrides.push({
46
+ [`& .${_gridClasses.gridClasses[key]}`]: styles[key]
47
+ });
48
+ });
49
+ return overrides;
50
+ }
245
51
  })(() => {
246
52
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
247
53
  const shouldShowBorderTopRightRadius = (0, _useGridSelector.useGridSelector)(apiRef, shouldShowBorderTopRightRadiusSelector);
@@ -1,7 +1,7 @@
1
1
  import { GridColumnMenuColumnsItem } from "./menuItems/GridColumnMenuColumnsItem.js";
2
2
  import { GridColumnMenuFilterItem } from "./menuItems/GridColumnMenuFilterItem.js";
3
3
  import { GridColumnMenuSortItem } from "./menuItems/GridColumnMenuSortItem.js";
4
- import type { GridColumnMenuProps, GridGenericColumnMenuProps } from "./GridColumnMenuProps.js";
4
+ import type { GridGenericColumnMenuProps, GridColumnMenuComponent } from "./GridColumnMenuProps.js";
5
5
  export declare const GRID_COLUMN_MENU_SLOTS: {
6
6
  columnMenuSortItem: typeof GridColumnMenuSortItem;
7
7
  columnMenuFilterItem: typeof GridColumnMenuFilterItem;
@@ -19,5 +19,5 @@ export declare const GRID_COLUMN_MENU_SLOT_PROPS: {
19
19
  };
20
20
  };
21
21
  declare const GridGenericColumnMenu: import("react").ForwardRefExoticComponent<GridGenericColumnMenuProps> | import("react").ForwardRefExoticComponent<GridGenericColumnMenuProps & import("react").RefAttributes<HTMLUListElement>>;
22
- declare const GridColumnMenu: import("react").ForwardRefExoticComponent<GridColumnMenuProps> | import("react").ForwardRefExoticComponent<GridColumnMenuProps & import("react").RefAttributes<HTMLUListElement>>;
22
+ declare const GridColumnMenu: GridColumnMenuComponent;
23
23
  export { GridColumnMenu, GridGenericColumnMenu };