@mui/x-data-grid 8.3.1 → 8.5.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 (214) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/DataGrid/DataGrid.js +5 -3
  3. package/components/GridApiContext.js +1 -3
  4. package/components/GridColumnHeaders.js +1 -0
  5. package/components/GridColumnUnsortedIcon.js +2 -1
  6. package/components/GridConfigurationContext.js +1 -3
  7. package/components/GridFooter.js +1 -0
  8. package/components/GridLoadingOverlay.js +1 -0
  9. package/components/GridNoColumnsOverlay.js +1 -0
  10. package/components/GridNoResultsOverlay.js +2 -1
  11. package/components/GridNoRowsOverlay.js +1 -0
  12. package/components/GridRow.js +4 -2
  13. package/components/GridRowCount.js +1 -0
  14. package/components/GridSelectedRowCount.js +1 -0
  15. package/components/GridShadowScrollArea.js +1 -0
  16. package/components/GridSkeletonLoadingOverlay.js +3 -1
  17. package/components/cell/GridActionsCell.js +5 -4
  18. package/components/cell/GridActionsCellItem.js +1 -0
  19. package/components/cell/GridBooleanCell.js +3 -1
  20. package/components/cell/GridCell.js +11 -7
  21. package/components/cell/GridEditBooleanCell.js +8 -5
  22. package/components/cell/GridEditDateCell.js +6 -4
  23. package/components/cell/GridEditInputCell.js +7 -4
  24. package/components/cell/GridEditSingleSelectCell.js +4 -3
  25. package/components/cell/GridSkeletonCell.js +6 -5
  26. package/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -1
  27. package/components/columnHeaders/GridBaseColumnHeaders.js +2 -1
  28. package/components/columnHeaders/GridColumnGroupHeader.js +6 -5
  29. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +5 -4
  30. package/components/columnHeaders/GridColumnHeaderItem.js +8 -7
  31. package/components/columnHeaders/GridColumnHeaderSeparator.js +5 -3
  32. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -0
  33. package/components/columnHeaders/GridColumnHeaderTitle.js +1 -0
  34. package/components/columnHeaders/GridGenericColumnHeaderItem.js +4 -3
  35. package/components/columnHeaders/GridIconButtonContainer.js +2 -1
  36. package/components/columnSelection/GridCellCheckboxRenderer.js +5 -4
  37. package/components/columnSelection/GridHeaderCheckbox.js +1 -0
  38. package/components/columnsManagement/GridColumnsManagement.js +2 -2
  39. package/components/columnsPanel/ColumnsPanelTrigger.js +1 -0
  40. package/components/containers/GridFooterContainer.js +1 -0
  41. package/components/containers/GridOverlay.js +1 -0
  42. package/components/containers/GridRoot.js +7 -4
  43. package/components/containers/GridRootStyles.js +2 -2
  44. package/components/containers/GridToolbarContainer.js +1 -0
  45. package/components/export/ExportCsv.js +1 -0
  46. package/components/export/ExportPrint.js +1 -0
  47. package/components/filterPanel/FilterPanelTrigger.js +1 -0
  48. package/components/menu/GridMenu.js +6 -4
  49. package/components/menu/columnMenu/GridColumnMenu.js +2 -0
  50. package/components/menu/columnMenu/GridColumnMenuContainer.js +1 -0
  51. package/components/panel/GridPanel.js +3 -2
  52. package/components/panel/GridPanelContext.js +1 -0
  53. package/components/panel/GridPanelWrapper.js +2 -1
  54. package/components/panel/filterPanel/GridFilterForm.js +10 -7
  55. package/components/panel/filterPanel/GridFilterInputBoolean.js +5 -4
  56. package/components/panel/filterPanel/GridFilterInputDate.js +2 -2
  57. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +2 -2
  58. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  59. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +3 -3
  60. package/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  61. package/components/panel/filterPanel/GridFilterPanel.js +1 -0
  62. package/components/quickFilter/QuickFilter.js +2 -2
  63. package/components/quickFilter/QuickFilterClear.js +1 -0
  64. package/components/quickFilter/QuickFilterContext.js +1 -0
  65. package/components/quickFilter/QuickFilterControl.js +3 -2
  66. package/components/quickFilter/QuickFilterTrigger.js +3 -2
  67. package/components/toolbar/GridToolbar.js +3 -2
  68. package/components/toolbar/GridToolbarColumnsButton.js +1 -0
  69. package/components/toolbar/GridToolbarDensitySelector.js +6 -4
  70. package/components/toolbar/GridToolbarExport.js +1 -0
  71. package/components/toolbar/GridToolbarExportContainer.js +6 -4
  72. package/components/toolbar/GridToolbarFilterButton.js +8 -5
  73. package/components/toolbarV8/Toolbar.js +59 -32
  74. package/components/toolbarV8/ToolbarButton.js +3 -2
  75. package/components/toolbarV8/ToolbarContext.js +1 -0
  76. package/components/toolbarV8/utils.d.ts +5 -0
  77. package/components/toolbarV8/utils.js +23 -0
  78. package/components/virtualization/GridMainContainer.js +2 -1
  79. package/components/virtualization/GridVirtualScrollbar.js +2 -1
  80. package/components/virtualization/GridVirtualScrollerContent.js +2 -1
  81. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  82. package/constants/gridClasses.d.ts +4 -0
  83. package/constants/gridClasses.js +5 -3
  84. package/context/GridRootPropsContext.js +1 -3
  85. package/esm/DataGrid/DataGrid.js +5 -3
  86. package/esm/components/GridApiContext.js +1 -3
  87. package/esm/components/GridColumnHeaders.js +1 -0
  88. package/esm/components/GridColumnUnsortedIcon.js +2 -1
  89. package/esm/components/GridConfigurationContext.js +1 -3
  90. package/esm/components/GridFooter.js +1 -0
  91. package/esm/components/GridLoadingOverlay.js +1 -0
  92. package/esm/components/GridNoColumnsOverlay.js +1 -0
  93. package/esm/components/GridNoResultsOverlay.js +2 -1
  94. package/esm/components/GridNoRowsOverlay.js +1 -0
  95. package/esm/components/GridRow.js +3 -1
  96. package/esm/components/GridRowCount.js +1 -0
  97. package/esm/components/GridSelectedRowCount.js +1 -0
  98. package/esm/components/GridShadowScrollArea.js +1 -0
  99. package/esm/components/GridSkeletonLoadingOverlay.js +3 -1
  100. package/esm/components/cell/GridActionsCell.js +3 -2
  101. package/esm/components/cell/GridActionsCellItem.js +1 -0
  102. package/esm/components/cell/GridBooleanCell.js +3 -1
  103. package/esm/components/cell/GridCell.js +5 -1
  104. package/esm/components/cell/GridEditBooleanCell.js +5 -2
  105. package/esm/components/cell/GridEditDateCell.js +4 -2
  106. package/esm/components/cell/GridEditInputCell.js +5 -2
  107. package/esm/components/cell/GridEditSingleSelectCell.js +3 -2
  108. package/esm/components/cell/GridSkeletonCell.js +2 -1
  109. package/esm/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -1
  110. package/esm/components/columnHeaders/GridBaseColumnHeaders.js +2 -1
  111. package/esm/components/columnHeaders/GridColumnGroupHeader.js +2 -1
  112. package/esm/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -1
  113. package/esm/components/columnHeaders/GridColumnHeaderItem.js +3 -2
  114. package/esm/components/columnHeaders/GridColumnHeaderSeparator.js +3 -1
  115. package/esm/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -0
  116. package/esm/components/columnHeaders/GridColumnHeaderTitle.js +1 -0
  117. package/esm/components/columnHeaders/GridGenericColumnHeaderItem.js +2 -1
  118. package/esm/components/columnHeaders/GridIconButtonContainer.js +2 -1
  119. package/esm/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  120. package/esm/components/columnSelection/GridHeaderCheckbox.js +1 -0
  121. package/esm/components/columnsManagement/GridColumnsManagement.js +2 -2
  122. package/esm/components/columnsPanel/ColumnsPanelTrigger.js +1 -0
  123. package/esm/components/containers/GridFooterContainer.js +1 -0
  124. package/esm/components/containers/GridOverlay.js +1 -0
  125. package/esm/components/containers/GridRoot.js +4 -1
  126. package/esm/components/containers/GridRootStyles.js +2 -2
  127. package/esm/components/containers/GridToolbarContainer.js +1 -0
  128. package/esm/components/export/ExportCsv.js +1 -0
  129. package/esm/components/export/ExportPrint.js +1 -0
  130. package/esm/components/filterPanel/FilterPanelTrigger.js +1 -0
  131. package/esm/components/menu/GridMenu.js +3 -1
  132. package/esm/components/menu/columnMenu/GridColumnMenu.js +2 -0
  133. package/esm/components/menu/columnMenu/GridColumnMenuContainer.js +1 -0
  134. package/esm/components/panel/GridPanel.js +2 -1
  135. package/esm/components/panel/GridPanelContext.js +1 -0
  136. package/esm/components/panel/GridPanelWrapper.js +1 -0
  137. package/esm/components/panel/filterPanel/GridFilterForm.js +4 -1
  138. package/esm/components/panel/filterPanel/GridFilterInputBoolean.js +2 -1
  139. package/esm/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  140. package/esm/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  141. package/esm/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  142. package/esm/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  143. package/esm/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  144. package/esm/components/panel/filterPanel/GridFilterPanel.js +1 -0
  145. package/esm/components/quickFilter/QuickFilter.js +1 -1
  146. package/esm/components/quickFilter/QuickFilterClear.js +1 -0
  147. package/esm/components/quickFilter/QuickFilterContext.js +1 -0
  148. package/esm/components/quickFilter/QuickFilterControl.js +2 -1
  149. package/esm/components/quickFilter/QuickFilterTrigger.js +2 -1
  150. package/esm/components/toolbar/GridToolbar.js +1 -0
  151. package/esm/components/toolbar/GridToolbarColumnsButton.js +1 -0
  152. package/esm/components/toolbar/GridToolbarDensitySelector.js +3 -1
  153. package/esm/components/toolbar/GridToolbarExport.js +1 -0
  154. package/esm/components/toolbar/GridToolbarExportContainer.js +3 -1
  155. package/esm/components/toolbar/GridToolbarFilterButton.js +4 -1
  156. package/esm/components/toolbarV8/Toolbar.js +59 -32
  157. package/esm/components/toolbarV8/ToolbarButton.js +2 -1
  158. package/esm/components/toolbarV8/ToolbarContext.js +1 -0
  159. package/esm/components/toolbarV8/utils.d.ts +5 -0
  160. package/esm/components/toolbarV8/utils.js +17 -0
  161. package/esm/components/virtualization/GridMainContainer.js +2 -1
  162. package/esm/components/virtualization/GridVirtualScrollbar.js +1 -0
  163. package/esm/components/virtualization/GridVirtualScrollerContent.js +1 -0
  164. package/esm/components/virtualization/GridVirtualScrollerRenderZone.js +1 -0
  165. package/esm/constants/gridClasses.d.ts +4 -0
  166. package/esm/constants/gridClasses.js +3 -2
  167. package/esm/context/GridRootPropsContext.js +1 -3
  168. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  169. package/esm/hooks/features/columns/gridColumnsSelector.d.ts +9 -0
  170. package/esm/hooks/features/columns/gridColumnsSelector.js +9 -2
  171. package/esm/hooks/features/dataSource/useGridDataSourceBase.js +1 -1
  172. package/esm/hooks/features/export/useGridPrintExport.js +1 -1
  173. package/esm/hooks/features/filter/useGridFilter.js +1 -1
  174. package/esm/hooks/features/overlays/useGridOverlays.js +1 -0
  175. package/esm/hooks/features/pagination/useGridPaginationModel.js +1 -1
  176. package/esm/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  177. package/esm/hooks/features/rows/useGridRowsMeta.js +5 -2
  178. package/esm/hooks/features/sorting/useGridSorting.d.ts +1 -1
  179. package/esm/hooks/features/sorting/useGridSorting.js +5 -5
  180. package/esm/hooks/utils/useGridPrivateApiContext.js +1 -3
  181. package/esm/hooks/utils/useRunOnce.js +1 -1
  182. package/esm/index.js +1 -1
  183. package/esm/locales/isIS.js +8 -8
  184. package/esm/material/index.js +14 -0
  185. package/esm/material/variables.js +5 -0
  186. package/esm/models/events/gridEventLookup.d.ts +9 -0
  187. package/esm/models/props/DataGridProps.d.ts +7 -0
  188. package/esm/utils/composeGridClasses.d.ts +1 -1
  189. package/esm/utils/composeGridClasses.js +1 -1
  190. package/esm/utils/css/context.js +2 -1
  191. package/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -1
  192. package/hooks/features/columns/gridColumnsSelector.d.ts +9 -0
  193. package/hooks/features/columns/gridColumnsSelector.js +10 -3
  194. package/hooks/features/dataSource/useGridDataSourceBase.js +12 -12
  195. package/hooks/features/export/useGridPrintExport.js +5 -5
  196. package/hooks/features/filter/useGridFilter.js +2 -2
  197. package/hooks/features/overlays/useGridOverlays.js +1 -0
  198. package/hooks/features/pagination/useGridPaginationModel.js +1 -1
  199. package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  200. package/hooks/features/rows/useGridRowsMeta.js +8 -5
  201. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  202. package/hooks/features/sorting/useGridSorting.js +6 -6
  203. package/hooks/utils/useGridPrivateApiContext.js +1 -3
  204. package/hooks/utils/useRunOnce.js +3 -2
  205. package/index.js +1 -1
  206. package/locales/isIS.js +8 -8
  207. package/material/index.js +14 -0
  208. package/material/variables.js +5 -0
  209. package/models/events/gridEventLookup.d.ts +9 -0
  210. package/models/props/DataGridProps.d.ts +7 -0
  211. package/package.json +2 -2
  212. package/utils/composeGridClasses.d.ts +1 -1
  213. package/utils/composeGridClasses.js +3 -2
  214. package/utils/css/context.js +2 -1
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridInitialColumnVisibilityModelSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
6
+ exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridInitialColumnVisibilityModelSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridExistingPinnedColumnSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
8
  var _gridColumnsInterfaces = require("./gridColumnsInterfaces");
9
9
  var _gridCoreSelector = require("../../core/gridCoreSelector");
@@ -64,19 +64,26 @@ const gridVisibleColumnFieldsSelector = exports.gridVisibleColumnFieldsSelector
64
64
  */
65
65
  const gridPinnedColumnsSelector = exports.gridPinnedColumnsSelector = (0, _createSelector.createRootSelector)(state => state.pinnedColumns);
66
66
 
67
+ /**
68
+ * Get all existing pinned columns. Place the columns on the side that depends on the rtl state.
69
+ * @category Pinned Columns
70
+ * @ignore - Do not document
71
+ */
72
+ const gridExistingPinnedColumnSelector = exports.gridExistingPinnedColumnSelector = (0, _createSelector.createSelectorMemoized)(gridPinnedColumnsSelector, gridColumnFieldsSelector, _gridCoreSelector.gridIsRtlSelector, (model, orderedFields, isRtl) => filterMissingColumns(model, orderedFields, isRtl));
73
+
67
74
  /**
68
75
  * Get the visible pinned columns.
69
76
  * @category Visible Columns
70
77
  */
71
78
  const gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisiblePinnedColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, _gridCoreSelector.gridIsRtlSelector, (columnsState, model, visibleColumnFields, isRtl) => {
72
- const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, isRtl);
79
+ const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields, isRtl);
73
80
  const visiblePinnedColumns = {
74
81
  left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
75
82
  right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
76
83
  };
77
84
  return visiblePinnedColumns;
78
85
  });
79
- function filterVisibleColumns(pinnedColumns, columns, invert) {
86
+ function filterMissingColumns(pinnedColumns, columns, invert) {
80
87
  if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
81
88
  return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS;
82
89
  }
@@ -9,16 +9,16 @@ exports.useGridDataSourceBase = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
12
- var _utils = require("@mui/utils");
12
+ var _debounce = _interopRequireDefault(require("@mui/utils/debounce"));
13
13
  var _warning = require("@mui/x-internals/warning");
14
14
  var _isDeepEqual = require("@mui/x-internals/isDeepEqual");
15
15
  var _gridRowsUtils = require("../rows/gridRowsUtils");
16
- var _utils2 = require("../../../utils/utils");
16
+ var _utils = require("../../../utils/utils");
17
17
  var _strategyProcessing = require("../../core/strategyProcessing");
18
18
  var _useGridSelector = require("../../utils/useGridSelector");
19
19
  var _gridPaginationSelector = require("../pagination/gridPaginationSelector");
20
20
  var _gridDataSourceSelector = require("./gridDataSourceSelector");
21
- var _utils3 = require("./utils");
21
+ var _utils2 = require("./utils");
22
22
  var _cache = require("./cache");
23
23
  var _gridDataSourceError = require("./gridDataSourceError");
24
24
  const noopCache = {
@@ -34,7 +34,7 @@ function getCache(cacheProp, options = {}) {
34
34
  }
35
35
  const useGridDataSourceBase = (apiRef, props, options = {}) => {
36
36
  const setStrategyAvailability = React.useCallback(() => {
37
- apiRef.current.setStrategyAvailability(_strategyProcessing.GridStrategyGroup.DataSource, _utils3.DataSourceRowsUpdateStrategy.Default, props.dataSource ? () => true : () => false);
37
+ apiRef.current.setStrategyAvailability(_strategyProcessing.GridStrategyGroup.DataSource, _utils2.DataSourceRowsUpdateStrategy.Default, props.dataSource ? () => true : () => false);
38
38
  }, [apiRef, props.dataSource]);
39
39
  const [defaultRowsUpdateStrategyActive, setDefaultRowsUpdateStrategyActive] = React.useState(false);
40
40
  const paginationModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridPaginationSelector.gridPaginationModelSelector);
@@ -43,7 +43,7 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
43
43
  const cacheChunkManager = (0, _useLazyRef.default)(() => {
44
44
  const sortedPageSizeOptions = props.pageSizeOptions.map(option => typeof option === 'number' ? option : option.value).sort((a, b) => a - b);
45
45
  const cacheChunkSize = Math.min(paginationModel.pageSize, sortedPageSizeOptions[0]);
46
- return new _utils3.CacheChunkManager(cacheChunkSize);
46
+ return new _utils2.CacheChunkManager(cacheChunkSize);
47
47
  }).current;
48
48
  const [cache, setCache] = React.useState(() => getCache(props.dataSourceCache, options.cacheOptions));
49
49
  const fetchRows = React.useCallback(async (parentId, params) => {
@@ -61,7 +61,7 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
61
61
  const responses = cacheKeys.map(cacheKey => cache.get(cacheKey));
62
62
  if (responses.every(response => response !== undefined)) {
63
63
  apiRef.current.applyStrategyProcessor('dataSourceRowsUpdate', {
64
- response: _utils3.CacheChunkManager.mergeResponses(responses),
64
+ response: _utils2.CacheChunkManager.mergeResponses(responses),
65
65
  fetchParams
66
66
  });
67
67
  return;
@@ -106,7 +106,7 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
106
106
  }
107
107
  }, [cacheChunkManager, cache, apiRef, defaultRowsUpdateStrategyActive, props.dataSource?.getRows, onDataSourceErrorProp, options, props.signature]);
108
108
  const handleStrategyActivityChange = React.useCallback(() => {
109
- setDefaultRowsUpdateStrategyActive(apiRef.current.getActiveStrategy(_strategyProcessing.GridStrategyGroup.DataSource) === _utils3.DataSourceRowsUpdateStrategy.Default);
109
+ setDefaultRowsUpdateStrategyActive(apiRef.current.getActiveStrategy(_strategyProcessing.GridStrategyGroup.DataSource) === _utils2.DataSourceRowsUpdateStrategy.Default);
110
110
  }, [apiRef]);
111
111
  const handleDataUpdate = React.useCallback(params => {
112
112
  if ('error' in params) {
@@ -163,7 +163,7 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
163
163
  editRow
164
164
  }
165
165
  };
166
- const debouncedFetchRows = React.useMemo(() => (0, _utils.unstable_debounce)(fetchRows, 0), [fetchRows]);
166
+ const debouncedFetchRows = React.useMemo(() => (0, _debounce.default)(fetchRows, 0), [fetchRows]);
167
167
  const isFirstRender = React.useRef(true);
168
168
  React.useEffect(() => {
169
169
  if (isFirstRender.current) {
@@ -188,7 +188,7 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
188
188
  },
189
189
  debouncedFetchRows,
190
190
  strategyProcessor: {
191
- strategyName: _utils3.DataSourceRowsUpdateStrategy.Default,
191
+ strategyName: _utils2.DataSourceRowsUpdateStrategy.Default,
192
192
  group: 'dataSourceRowsUpdate',
193
193
  processor: handleDataUpdate
194
194
  },
@@ -197,9 +197,9 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
197
197
  cache,
198
198
  events: {
199
199
  strategyAvailabilityChange: handleStrategyActivityChange,
200
- sortModelChange: (0, _utils2.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows()),
201
- filterModelChange: (0, _utils2.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows()),
202
- paginationModelChange: (0, _utils2.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows())
200
+ sortModelChange: (0, _utils.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows()),
201
+ filterModelChange: (0, _utils.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows()),
202
+ paginationModelChange: (0, _utils.runIf)(defaultRowsUpdateStrategyActive, () => debouncedFetchRows())
203
203
  }
204
204
  };
205
205
  };
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useGridPrintExport = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
- var _utils = require("@mui/utils");
11
+ var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
12
12
  var _export = require("@mui/x-internals/export");
13
13
  var _useGridLogger = require("../../utils/useGridLogger");
14
14
  var _gridFilterSelector = require("../filter/gridFilterSelector");
@@ -17,7 +17,7 @@ var _gridClasses = require("../../../constants/gridClasses");
17
17
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
18
18
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
19
19
  var _gridRowsUtils = require("../rows/gridRowsUtils");
20
- var _utils2 = require("./utils");
20
+ var _utils = require("./utils");
21
21
  var _useGridPaginationModel = require("../pagination/useGridPaginationModel");
22
22
  var _pipeProcessing = require("../../core/pipeProcessing");
23
23
  var _toolbar = require("../../../components/toolbar");
@@ -55,13 +55,13 @@ const useGridPrintExport = (apiRef, props) => {
55
55
  const previousRows = React.useRef([]);
56
56
  const previousVirtualizationState = React.useRef(null);
57
57
  React.useEffect(() => {
58
- doc.current = (0, _utils.unstable_ownerDocument)(apiRef.current.rootElementRef.current);
58
+ doc.current = (0, _ownerDocument.default)(apiRef.current.rootElementRef.current);
59
59
  }, [apiRef, hasRootReference]);
60
60
 
61
61
  // Returns a promise because updateColumns triggers state update and
62
62
  // the new state needs to be in place before the grid can be sized correctly
63
63
  const updateGridColumnsForPrint = React.useCallback((fields, allColumns, includeCheckboxes) => new Promise(resolve => {
64
- const exportedColumnFields = (0, _utils2.getColumnsToExport)({
64
+ const exportedColumnFields = (0, _utils.getColumnsToExport)({
65
65
  apiRef,
66
66
  options: {
67
67
  fields,
@@ -222,7 +222,7 @@ const useGridPrintExport = (apiRef, props) => {
222
222
  })
223
223
  }));
224
224
  await updateGridColumnsForPrint(options?.fields, options?.allColumns, options?.includeCheckboxes);
225
- updateGridRowsForPrint(options?.getRowsToExport ?? _utils2.defaultGetRowsToExport);
225
+ updateGridRowsForPrint(options?.getRowsToExport ?? _utils.defaultGetRowsToExport);
226
226
  await raf(); // wait for the state changes to take action
227
227
  const printWindow = buildPrintWindow(options?.fileName);
228
228
  if (process.env.NODE_ENV === 'test') {
@@ -9,7 +9,7 @@ exports.useGridFilter = exports.filterStateInitializer = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _reselect = require("reselect");
12
- var _utils = require("@mui/utils");
12
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
13
13
  var _isDeepEqual = require("@mui/x-internals/isDeepEqual");
14
14
  var _useLazyRef = require("../../utils/useLazyRef");
15
15
  var _useGridEvent = require("../../utils/useGridEvent");
@@ -367,7 +367,7 @@ const useGridFilter = (apiRef, props) => {
367
367
  /**
368
368
  * EFFECTS
369
369
  */
370
- (0, _utils.unstable_useEnhancedEffect)(() => {
370
+ (0, _useEnhancedEffect.default)(() => {
371
371
  if (props.filterModel !== undefined) {
372
372
  apiRef.current.setFilterModel(props.filterModel);
373
373
  }
@@ -68,6 +68,7 @@ const useGridOverlays = () => {
68
68
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Overlay, (0, _extends2.default)({}, overlayProps))
69
69
  }));
70
70
  };
71
+ if (process.env.NODE_ENV !== "production") getOverlay.displayName = "getOverlay";
71
72
  return {
72
73
  getOverlay,
73
74
  overlaysProps
@@ -147,7 +147,7 @@ const useGridPaginationModel = (apiRef, props) => {
147
147
  return;
148
148
  }
149
149
  const dimensions = apiRef.current.getRootDimensions();
150
- const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
150
+ const maximumPageSizeWithoutScrollBar = Math.max(1, Math.floor(dimensions.viewportInnerSize.height / rowHeight));
151
151
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
152
152
  }, [apiRef, props.autoPageSize, rowHeight]);
153
153
  const handleRowCountChange = React.useCallback(newRowCount => {
@@ -436,7 +436,7 @@ const useGridRowSelection = (apiRef, props) => {
436
436
  const toggleAllRows = React.useCallback(value => {
437
437
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
438
438
  const quickFilterModel = (0, _gridFilterSelector.gridQuickFilterValuesSelector)(apiRef);
439
- const hasFilters = filterModel.items.length > 0 || (quickFilterModel?.length || 0) > 0;
439
+ const hasFilters = filterModel.items.length > 0 || quickFilterModel?.some(val => val.length);
440
440
  if (!props.isRowSelectable && !props.checkboxSelectionVisibleOnly && applyAutoSelection && !hasFilters) {
441
441
  apiRef.current.setRowSelectionModel({
442
442
  type: value ? 'exclude' : 'include',
@@ -9,10 +9,10 @@ exports.useGridRowsMeta = exports.rowsMetaStateInitializer = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
12
- var _utils = require("@mui/utils");
12
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
13
13
  var _ResizeObserver = require("../../../utils/ResizeObserver");
14
14
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
15
- var _utils2 = require("../../../utils/utils");
15
+ var _utils = require("../../../utils/utils");
16
16
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
17
17
  var _useGridSelector = require("../../utils/useGridSelector");
18
18
  var _densitySelector = require("../density/densitySelector");
@@ -82,7 +82,7 @@ const useGridRowsMeta = (apiRef, props) => {
82
82
  // HACK: rowHeight trails behind the most up-to-date value just enough to
83
83
  // mess the initial rowsMeta hydration :/
84
84
  const baseRowHeight = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef).rowHeight;
85
- (0, _utils2.eslintUseValue)(rowHeight);
85
+ (0, _utils.eslintUseValue)(rowHeight);
86
86
  const entry = apiRef.current.getRowHeightEntry(row.id);
87
87
  if (!getRowHeightProp) {
88
88
  entry.content = baseRowHeight;
@@ -203,7 +203,10 @@ const useGridRowsMeta = (apiRef, props) => {
203
203
  apiRef.current.unstable_storeRowHeightMeasurement(rowId, height);
204
204
  }
205
205
  if (!isHeightMetaValid.current) {
206
- apiRef.current.requestPipeProcessorsApplication('rowHeight');
206
+ // Avoids "ResizeObserver loop completed with undelivered notifications" error
207
+ requestAnimationFrame(() => {
208
+ apiRef.current.requestPipeProcessorsApplication('rowHeight');
209
+ });
207
210
  }
208
211
  })).current;
209
212
  const observeRowHeight = (element, rowId) => {
@@ -215,7 +218,7 @@ const useGridRowsMeta = (apiRef, props) => {
215
218
 
216
219
  // The effect is used to build the rows meta data - currentPageTotalHeight and positions.
217
220
  // Because of variable row height this is needed for the virtualization
218
- (0, _utils.unstable_useEnhancedEffect)(() => {
221
+ (0, _useEnhancedEffect.default)(() => {
219
222
  hydrateRowsMeta();
220
223
  }, [hydrateRowsMeta]);
221
224
  const rowsMetaApi = {
@@ -7,4 +7,4 @@ export declare const sortingStateInitializer: GridStateInitializer<Pick<DataGrid
7
7
  * @requires useGridRows (event)
8
8
  * @requires useGridColumns (event)
9
9
  */
10
- export declare const useGridSorting: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "initialState" | "sortModel" | "onSortModelChange" | "sortingOrder" | "sortingMode" | "disableColumnSorting" | "disableMultipleColumnsSorting">) => void;
10
+ export declare const useGridSorting: (apiRef: RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "initialState" | "sortModel" | "onSortModelChange" | "sortingOrder" | "sortingMode" | "disableColumnSorting" | "disableMultipleColumnsSorting" | "multipleColumnsSortingMode">) => void;
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useGridSorting = exports.sortingStateInitializer = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
- var _utils = require("@mui/utils");
11
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
12
12
  var _useGridEvent = require("../../utils/useGridEvent");
13
13
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
14
14
  var _useGridLogger = require("../../utils/useGridLogger");
@@ -203,9 +203,9 @@ const useGridSorting = (apiRef, props) => {
203
203
  if (!colDef.sortable || props.disableColumnSorting) {
204
204
  return;
205
205
  }
206
- const allowMultipleSorting = event.shiftKey || event.metaKey || event.ctrlKey;
206
+ const allowMultipleSorting = props.multipleColumnsSortingMode === 'always' || event.shiftKey || event.metaKey || event.ctrlKey;
207
207
  sortColumn(field, undefined, allowMultipleSorting);
208
- }, [sortColumn, props.disableColumnSorting]);
208
+ }, [sortColumn, props.disableColumnSorting, props.multipleColumnsSortingMode]);
209
209
  const handleColumnHeaderKeyDown = React.useCallback(({
210
210
  field,
211
211
  colDef
@@ -215,9 +215,9 @@ const useGridSorting = (apiRef, props) => {
215
215
  }
216
216
  // Ctrl + Enter opens the column menu
217
217
  if (event.key === 'Enter' && !event.ctrlKey && !event.metaKey) {
218
- sortColumn(field, undefined, event.shiftKey);
218
+ sortColumn(field, undefined, props.multipleColumnsSortingMode === 'always' || event.shiftKey);
219
219
  }
220
- }, [sortColumn, props.disableColumnSorting]);
220
+ }, [sortColumn, props.disableColumnSorting, props.multipleColumnsSortingMode]);
221
221
  const handleColumnsChange = React.useCallback(() => {
222
222
  // When the columns change we check that the sorted columns are still part of the dataset
223
223
  const sortModel = (0, _gridSortingSelector.gridSortModelSelector)(apiRef);
@@ -251,7 +251,7 @@ const useGridSorting = (apiRef, props) => {
251
251
  /**
252
252
  * EFFECTS
253
253
  */
254
- (0, _utils.unstable_useEnhancedEffect)(() => {
254
+ (0, _useEnhancedEffect.default)(() => {
255
255
  if (props.sortModel !== undefined) {
256
256
  apiRef.current.setSortModel(props.sortModel);
257
257
  }
@@ -8,9 +8,7 @@ exports.GridPrivateApiContext = void 0;
8
8
  exports.useGridPrivateApiContext = useGridPrivateApiContext;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  const GridPrivateApiContext = exports.GridPrivateApiContext = /*#__PURE__*/React.createContext(undefined);
11
- if (process.env.NODE_ENV !== 'production') {
12
- GridPrivateApiContext.displayName = 'GridPrivateApiContext';
13
- }
11
+ if (process.env.NODE_ENV !== "production") GridPrivateApiContext.displayName = "GridPrivateApiContext";
14
12
  function useGridPrivateApiContext() {
15
13
  const privateApiRef = React.useContext(GridPrivateApiContext);
16
14
  if (privateApiRef === undefined) {
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.useRunOnce = void 0;
8
9
  var React = _interopRequireWildcard(require("react"));
9
- var _utils = require("@mui/utils");
10
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
10
11
  const noop = () => {};
11
12
 
12
13
  /**
@@ -14,7 +15,7 @@ const noop = () => {};
14
15
  */
15
16
  const useRunOnce = (condition, effect) => {
16
17
  const didRun = React.useRef(false);
17
- (0, _utils.unstable_useEnhancedEffect)(() => {
18
+ (0, _useEnhancedEffect.default)(() => {
18
19
  if (didRun.current || !condition) {
19
20
  return noop;
20
21
  }
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.3.1
2
+ * @mui/x-data-grid v8.5.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/locales/isIS.js CHANGED
@@ -64,11 +64,11 @@ const isISGrid = {
64
64
  filterPanelInputPlaceholder: 'Síu gildi',
65
65
  // Filter operators text
66
66
  filterOperatorContains: 'inniheldur',
67
- // filterOperatorDoesNotContain: 'does not contain',
67
+ filterOperatorDoesNotContain: 'inniheldur ekki',
68
68
  filterOperatorEquals: 'jafnt og',
69
- // filterOperatorDoesNotEqual: 'does not equal',
70
- filterOperatorStartsWith: 'byrjar með',
71
- filterOperatorEndsWith: 'endar með',
69
+ filterOperatorDoesNotEqual: 'ekki jafnt og',
70
+ filterOperatorStartsWith: 'byrjar á',
71
+ filterOperatorEndsWith: 'endar á',
72
72
  filterOperatorIs: 'er líka með',
73
73
  filterOperatorNot: 'er ekki líka með',
74
74
  filterOperatorAfter: 'eftir',
@@ -86,11 +86,11 @@ const isISGrid = {
86
86
  'filterOperator<=': '<=',
87
87
  // Header filter operators text
88
88
  headerFilterOperatorContains: 'Inniheldur',
89
- // headerFilterOperatorDoesNotContain: 'Does not contain',
89
+ headerFilterOperatorDoesNotContain: 'Inniheldur ekki',
90
90
  headerFilterOperatorEquals: 'Jafnt og',
91
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
92
- headerFilterOperatorStartsWith: 'Byrjar með',
93
- headerFilterOperatorEndsWith: 'Endar með',
91
+ headerFilterOperatorDoesNotEqual: 'Ekki jafnt og',
92
+ headerFilterOperatorStartsWith: 'Byrjar á',
93
+ headerFilterOperatorEndsWith: 'Endar á',
94
94
  headerFilterOperatorIs: 'Er jafnt og',
95
95
  headerFilterOperatorNot: 'Er ekki jafnt og',
96
96
  headerFilterOperatorAfter: 'Eftir',
package/material/index.js CHANGED
@@ -183,6 +183,7 @@ const BaseSelect = (0, _forwardRef.forwardRef)(function BaseSelect(props, ref) {
183
183
  }, material))]
184
184
  });
185
185
  });
186
+ if (process.env.NODE_ENV !== "production") BaseSelect.displayName = "BaseSelect";
186
187
  const StyledPagination = (0, _styles.styled)(_TablePagination.default)(({
187
188
  theme
188
189
  }) => ({
@@ -238,6 +239,7 @@ const BasePagination = (0, _forwardRef.forwardRef)(function BasePagination(props
238
239
  ref: ref
239
240
  }));
240
241
  });
242
+ if (process.env.NODE_ENV !== "production") BasePagination.displayName = "BasePagination";
241
243
  const BaseBadge = (0, _forwardRef.forwardRef)(function BaseBadge(props, ref) {
242
244
  const {
243
245
  material
@@ -247,6 +249,7 @@ const BaseBadge = (0, _forwardRef.forwardRef)(function BaseBadge(props, ref) {
247
249
  ref: ref
248
250
  }));
249
251
  });
252
+ if (process.env.NODE_ENV !== "production") BaseBadge.displayName = "BaseBadge";
250
253
  const BaseCheckbox = (0, _forwardRef.forwardRef)(function BaseCheckbox(props, ref) {
251
254
  const {
252
255
  autoFocus,
@@ -291,6 +294,7 @@ const BaseCheckbox = (0, _forwardRef.forwardRef)(function BaseCheckbox(props, re
291
294
  fullWidth: fullWidth
292
295
  });
293
296
  });
297
+ if (process.env.NODE_ENV !== "production") BaseCheckbox.displayName = "BaseCheckbox";
294
298
  const BaseCircularProgress = (0, _forwardRef.forwardRef)(function BaseCircularProgress(props, ref) {
295
299
  const {
296
300
  material
@@ -300,6 +304,7 @@ const BaseCircularProgress = (0, _forwardRef.forwardRef)(function BaseCircularPr
300
304
  ref: ref
301
305
  }));
302
306
  });
307
+ if (process.env.NODE_ENV !== "production") BaseCircularProgress.displayName = "BaseCircularProgress";
303
308
  const BaseDivider = (0, _forwardRef.forwardRef)(function BaseDivider(props, ref) {
304
309
  const {
305
310
  material
@@ -309,6 +314,7 @@ const BaseDivider = (0, _forwardRef.forwardRef)(function BaseDivider(props, ref)
309
314
  ref: ref
310
315
  }));
311
316
  });
317
+ if (process.env.NODE_ENV !== "production") BaseDivider.displayName = "BaseDivider";
312
318
  const BaseLinearProgress = (0, _forwardRef.forwardRef)(function BaseLinearProgress(props, ref) {
313
319
  const {
314
320
  material
@@ -318,6 +324,7 @@ const BaseLinearProgress = (0, _forwardRef.forwardRef)(function BaseLinearProgre
318
324
  ref: ref
319
325
  }));
320
326
  });
327
+ if (process.env.NODE_ENV !== "production") BaseLinearProgress.displayName = "BaseLinearProgress";
321
328
  const BaseButton = (0, _forwardRef.forwardRef)(function BaseButton(props, ref) {
322
329
  const {
323
330
  material
@@ -327,6 +334,7 @@ const BaseButton = (0, _forwardRef.forwardRef)(function BaseButton(props, ref) {
327
334
  ref: ref
328
335
  }));
329
336
  });
337
+ if (process.env.NODE_ENV !== "production") BaseButton.displayName = "BaseButton";
330
338
  const BaseChip = (0, _forwardRef.forwardRef)(function BaseChip(props, ref) {
331
339
  const {
332
340
  material
@@ -336,6 +344,7 @@ const BaseChip = (0, _forwardRef.forwardRef)(function BaseChip(props, ref) {
336
344
  ref: ref
337
345
  }));
338
346
  });
347
+ if (process.env.NODE_ENV !== "production") BaseChip.displayName = "BaseChip";
339
348
  const BaseIconButton = (0, _forwardRef.forwardRef)(function BaseIconButton(props, ref) {
340
349
  const {
341
350
  material
@@ -345,6 +354,7 @@ const BaseIconButton = (0, _forwardRef.forwardRef)(function BaseIconButton(props
345
354
  ref: ref
346
355
  }));
347
356
  });
357
+ if (process.env.NODE_ENV !== "production") BaseIconButton.displayName = "BaseIconButton";
348
358
  const BaseTooltip = (0, _forwardRef.forwardRef)(function BaseTooltip(props, ref) {
349
359
  const {
350
360
  material
@@ -354,6 +364,7 @@ const BaseTooltip = (0, _forwardRef.forwardRef)(function BaseTooltip(props, ref)
354
364
  ref: ref
355
365
  }));
356
366
  });
367
+ if (process.env.NODE_ENV !== "production") BaseTooltip.displayName = "BaseTooltip";
357
368
  const BaseSkeleton = (0, _forwardRef.forwardRef)(function BaseSkeleton(props, ref) {
358
369
  const {
359
370
  material
@@ -363,6 +374,7 @@ const BaseSkeleton = (0, _forwardRef.forwardRef)(function BaseSkeleton(props, re
363
374
  ref: ref
364
375
  }));
365
376
  });
377
+ if (process.env.NODE_ENV !== "production") BaseSkeleton.displayName = "BaseSkeleton";
366
378
  const BaseSwitch = (0, _forwardRef.forwardRef)(function BaseSwitch(props, ref) {
367
379
  const {
368
380
  material,
@@ -384,6 +396,7 @@ const BaseSwitch = (0, _forwardRef.forwardRef)(function BaseSwitch(props, ref) {
384
396
  label: label
385
397
  });
386
398
  });
399
+ if (process.env.NODE_ENV !== "production") BaseSwitch.displayName = "BaseSwitch";
387
400
  const BaseMenuList = (0, _forwardRef.forwardRef)(function BaseMenuList(props, ref) {
388
401
  const {
389
402
  material
@@ -393,6 +406,7 @@ const BaseMenuList = (0, _forwardRef.forwardRef)(function BaseMenuList(props, re
393
406
  ref: ref
394
407
  }));
395
408
  });
409
+ if (process.env.NODE_ENV !== "production") BaseMenuList.displayName = "BaseMenuList";
396
410
  function BaseMenuItem(props) {
397
411
  const {
398
412
  inert,
@@ -99,5 +99,10 @@ function removeOpacity(color) {
99
99
  return setOpacity(color, 1);
100
100
  }
101
101
  function formatFont(font) {
102
+ // Accounts for disabled typography variants
103
+ // See: https://github.com/mui/mui-x/issues/17812
104
+ if (!font) {
105
+ return undefined;
106
+ }
102
107
  return `${font.fontWeight} ${font.fontSize} / ${font.lineHeight} ${font.fontFamily}`;
103
108
  }
@@ -195,6 +195,15 @@ export interface GridColumnHeaderEventLookup {
195
195
  params: GridColumnHeaderParams;
196
196
  event: React.DragEvent<HTMLElement>;
197
197
  };
198
+ /**
199
+ * Fired when the dragging of a column header ends.
200
+ * Same as `columnHeaderDragEnd`, but also fires when the DOM element is unmounted.
201
+ * @ignore - do not document.
202
+ */
203
+ columnHeaderDragEndNative: {
204
+ params: GridColumnHeaderParams;
205
+ event: DragEvent;
206
+ };
198
207
  /**
199
208
  * Fired when a `dblclick` DOM event happens in the column header separator.
200
209
  * @ignore - do not document.
@@ -841,6 +841,13 @@ export interface DataGridProSharedPropsWithDefaultValue {
841
841
  * @default false
842
842
  */
843
843
  listView: boolean;
844
+ /**
845
+ * If set to "always", the multi-sorting is applied without modifier key.
846
+ * Otherwise, the modifier key is required for multi-sorting to be applied.
847
+ * @see See https://mui.com/x/react-data-grid/sorting/#multi-sorting
848
+ * @default "withModifierKey"
849
+ */
850
+ multipleColumnsSortingMode: 'withModifierKey' | 'always';
844
851
  }
845
852
  export interface DataGridProSharedPropsWithoutDefaultValue<R extends GridValidRowModel = any> {
846
853
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "8.3.1",
3
+ "version": "8.5.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The Community plan edition of the MUI X Data Grid components.",
6
6
  "main": "./index.js",
@@ -45,7 +45,7 @@
45
45
  "prop-types": "^15.8.1",
46
46
  "reselect": "^5.1.1",
47
47
  "use-sync-external-store": "^1.5.0",
48
- "@mui/x-internals": "8.3.1"
48
+ "@mui/x-internals": "8.5.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@emotion/react": "^11.9.0",
@@ -1,3 +1,3 @@
1
- import { unstable_composeClasses as composeClasses } from '@mui/utils';
1
+ import composeClasses from '@mui/utils/composeClasses';
2
2
  import type { DataGridProcessedProps } from "../models/props/DataGridProps.js";
3
3
  export declare function composeGridClasses(classes: DataGridProcessedProps['classes'], slots: Parameters<typeof composeClasses>[0]): Record<string, string>;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.composeGridClasses = composeGridClasses;
7
- var _utils = require("@mui/utils");
8
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
8
9
  var _gridClasses = require("../constants/gridClasses");
9
10
  function composeGridClasses(classes, slots) {
10
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
11
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
11
12
  }
@@ -19,6 +19,7 @@ const CSSVariablesContext = /*#__PURE__*/React.createContext({
19
19
  href: "/unset"
20
20
  })
21
21
  });
22
+ if (process.env.NODE_ENV !== "production") CSSVariablesContext.displayName = "CSSVariablesContext";
22
23
  function useCSSVariablesClass() {
23
24
  return React.useContext(CSSVariablesContext).className;
24
25
  }
@@ -59,7 +60,7 @@ function GridCSSVariablesContext(props) {
59
60
  function variablesToString(variables) {
60
61
  let output = '';
61
62
  for (const key in variables) {
62
- if (Object.hasOwn(variables, key)) {
63
+ if (Object.hasOwn(variables, key) && variables[key] !== undefined) {
63
64
  output += `${key}:${variables[key]};`;
64
65
  }
65
66
  }