@mui/x-data-grid 8.4.0 → 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 (172) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/DataGrid/DataGrid.js +4 -3
  3. package/components/GridColumnHeaders.js +1 -0
  4. package/components/GridFooter.js +1 -0
  5. package/components/GridLoadingOverlay.js +1 -0
  6. package/components/GridNoColumnsOverlay.js +1 -0
  7. package/components/GridNoResultsOverlay.js +2 -1
  8. package/components/GridNoRowsOverlay.js +1 -0
  9. package/components/GridRow.js +3 -2
  10. package/components/GridRowCount.js +1 -0
  11. package/components/GridSelectedRowCount.js +1 -0
  12. package/components/GridShadowScrollArea.js +1 -0
  13. package/components/GridSkeletonLoadingOverlay.js +3 -1
  14. package/components/cell/GridActionsCell.js +3 -3
  15. package/components/cell/GridActionsCellItem.js +1 -0
  16. package/components/cell/GridCell.js +11 -7
  17. package/components/cell/GridEditBooleanCell.js +6 -4
  18. package/components/cell/GridEditDateCell.js +4 -3
  19. package/components/cell/GridEditInputCell.js +5 -3
  20. package/components/cell/GridEditSingleSelectCell.js +2 -2
  21. package/components/cell/GridSkeletonCell.js +6 -5
  22. package/components/columnHeaders/GridBaseColumnHeaders.js +2 -1
  23. package/components/columnHeaders/GridColumnGroupHeader.js +6 -5
  24. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +5 -4
  25. package/components/columnHeaders/GridColumnHeaderItem.js +7 -6
  26. package/components/columnHeaders/GridColumnHeaderSeparator.js +4 -3
  27. package/components/columnHeaders/GridColumnHeaderTitle.js +1 -0
  28. package/components/columnHeaders/GridGenericColumnHeaderItem.js +4 -3
  29. package/components/columnHeaders/GridIconButtonContainer.js +2 -1
  30. package/components/columnSelection/GridCellCheckboxRenderer.js +5 -4
  31. package/components/columnSelection/GridHeaderCheckbox.js +1 -0
  32. package/components/columnsManagement/GridColumnsManagement.js +2 -2
  33. package/components/columnsPanel/ColumnsPanelTrigger.js +1 -0
  34. package/components/containers/GridFooterContainer.js +1 -0
  35. package/components/containers/GridOverlay.js +1 -0
  36. package/components/containers/GridRoot.js +7 -4
  37. package/components/containers/GridRootStyles.js +1 -1
  38. package/components/containers/GridToolbarContainer.js +1 -0
  39. package/components/export/ExportCsv.js +1 -0
  40. package/components/export/ExportPrint.js +1 -0
  41. package/components/filterPanel/FilterPanelTrigger.js +1 -0
  42. package/components/menu/GridMenu.js +6 -4
  43. package/components/menu/columnMenu/GridColumnMenu.js +2 -0
  44. package/components/menu/columnMenu/GridColumnMenuContainer.js +1 -0
  45. package/components/panel/GridPanel.js +3 -2
  46. package/components/panel/GridPanelWrapper.js +2 -1
  47. package/components/panel/filterPanel/GridFilterForm.js +10 -7
  48. package/components/panel/filterPanel/GridFilterInputBoolean.js +5 -4
  49. package/components/panel/filterPanel/GridFilterInputDate.js +2 -2
  50. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +2 -2
  51. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  52. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +3 -3
  53. package/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  54. package/components/panel/filterPanel/GridFilterPanel.js +1 -0
  55. package/components/quickFilter/QuickFilter.js +2 -2
  56. package/components/quickFilter/QuickFilterClear.js +1 -0
  57. package/components/quickFilter/QuickFilterControl.js +3 -2
  58. package/components/quickFilter/QuickFilterTrigger.js +3 -2
  59. package/components/toolbar/GridToolbar.js +3 -2
  60. package/components/toolbar/GridToolbarColumnsButton.js +1 -0
  61. package/components/toolbar/GridToolbarDensitySelector.js +6 -4
  62. package/components/toolbar/GridToolbarExport.js +1 -0
  63. package/components/toolbar/GridToolbarExportContainer.js +6 -4
  64. package/components/toolbar/GridToolbarFilterButton.js +8 -5
  65. package/components/toolbarV8/Toolbar.js +1 -0
  66. package/components/toolbarV8/ToolbarButton.js +3 -2
  67. package/components/virtualization/GridMainContainer.js +2 -1
  68. package/components/virtualization/GridVirtualScrollbar.js +2 -1
  69. package/components/virtualization/GridVirtualScrollerContent.js +2 -1
  70. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  71. package/constants/gridClasses.d.ts +4 -0
  72. package/constants/gridClasses.js +5 -3
  73. package/esm/DataGrid/DataGrid.js +4 -3
  74. package/esm/components/GridColumnHeaders.js +1 -0
  75. package/esm/components/GridFooter.js +1 -0
  76. package/esm/components/GridLoadingOverlay.js +1 -0
  77. package/esm/components/GridNoColumnsOverlay.js +1 -0
  78. package/esm/components/GridNoResultsOverlay.js +2 -1
  79. package/esm/components/GridNoRowsOverlay.js +1 -0
  80. package/esm/components/GridRow.js +2 -1
  81. package/esm/components/GridRowCount.js +1 -0
  82. package/esm/components/GridSelectedRowCount.js +1 -0
  83. package/esm/components/GridShadowScrollArea.js +1 -0
  84. package/esm/components/GridSkeletonLoadingOverlay.js +3 -1
  85. package/esm/components/cell/GridActionsCell.js +1 -1
  86. package/esm/components/cell/GridActionsCellItem.js +1 -0
  87. package/esm/components/cell/GridCell.js +5 -1
  88. package/esm/components/cell/GridEditBooleanCell.js +3 -1
  89. package/esm/components/cell/GridEditDateCell.js +2 -1
  90. package/esm/components/cell/GridEditInputCell.js +3 -1
  91. package/esm/components/cell/GridEditSingleSelectCell.js +1 -1
  92. package/esm/components/cell/GridSkeletonCell.js +2 -1
  93. package/esm/components/columnHeaders/GridBaseColumnHeaders.js +2 -1
  94. package/esm/components/columnHeaders/GridColumnGroupHeader.js +2 -1
  95. package/esm/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -1
  96. package/esm/components/columnHeaders/GridColumnHeaderItem.js +2 -1
  97. package/esm/components/columnHeaders/GridColumnHeaderSeparator.js +2 -1
  98. package/esm/components/columnHeaders/GridColumnHeaderTitle.js +1 -0
  99. package/esm/components/columnHeaders/GridGenericColumnHeaderItem.js +2 -1
  100. package/esm/components/columnHeaders/GridIconButtonContainer.js +2 -1
  101. package/esm/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  102. package/esm/components/columnSelection/GridHeaderCheckbox.js +1 -0
  103. package/esm/components/columnsManagement/GridColumnsManagement.js +2 -2
  104. package/esm/components/columnsPanel/ColumnsPanelTrigger.js +1 -0
  105. package/esm/components/containers/GridFooterContainer.js +1 -0
  106. package/esm/components/containers/GridOverlay.js +1 -0
  107. package/esm/components/containers/GridRoot.js +4 -1
  108. package/esm/components/containers/GridRootStyles.js +1 -1
  109. package/esm/components/containers/GridToolbarContainer.js +1 -0
  110. package/esm/components/export/ExportCsv.js +1 -0
  111. package/esm/components/export/ExportPrint.js +1 -0
  112. package/esm/components/filterPanel/FilterPanelTrigger.js +1 -0
  113. package/esm/components/menu/GridMenu.js +3 -1
  114. package/esm/components/menu/columnMenu/GridColumnMenu.js +2 -0
  115. package/esm/components/menu/columnMenu/GridColumnMenuContainer.js +1 -0
  116. package/esm/components/panel/GridPanel.js +2 -1
  117. package/esm/components/panel/GridPanelWrapper.js +1 -0
  118. package/esm/components/panel/filterPanel/GridFilterForm.js +4 -1
  119. package/esm/components/panel/filterPanel/GridFilterInputBoolean.js +2 -1
  120. package/esm/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  121. package/esm/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  122. package/esm/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  123. package/esm/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  124. package/esm/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  125. package/esm/components/panel/filterPanel/GridFilterPanel.js +1 -0
  126. package/esm/components/quickFilter/QuickFilter.js +1 -1
  127. package/esm/components/quickFilter/QuickFilterClear.js +1 -0
  128. package/esm/components/quickFilter/QuickFilterControl.js +2 -1
  129. package/esm/components/quickFilter/QuickFilterTrigger.js +2 -1
  130. package/esm/components/toolbar/GridToolbar.js +1 -0
  131. package/esm/components/toolbar/GridToolbarColumnsButton.js +1 -0
  132. package/esm/components/toolbar/GridToolbarDensitySelector.js +3 -1
  133. package/esm/components/toolbar/GridToolbarExport.js +1 -0
  134. package/esm/components/toolbar/GridToolbarExportContainer.js +3 -1
  135. package/esm/components/toolbar/GridToolbarFilterButton.js +4 -1
  136. package/esm/components/toolbarV8/Toolbar.js +1 -0
  137. package/esm/components/toolbarV8/ToolbarButton.js +2 -1
  138. package/esm/components/virtualization/GridMainContainer.js +2 -1
  139. package/esm/components/virtualization/GridVirtualScrollbar.js +1 -0
  140. package/esm/components/virtualization/GridVirtualScrollerContent.js +1 -0
  141. package/esm/components/virtualization/GridVirtualScrollerRenderZone.js +1 -0
  142. package/esm/constants/gridClasses.d.ts +4 -0
  143. package/esm/constants/gridClasses.js +3 -2
  144. package/esm/hooks/features/columns/gridColumnsSelector.d.ts +9 -0
  145. package/esm/hooks/features/columns/gridColumnsSelector.js +9 -2
  146. package/esm/hooks/features/dataSource/useGridDataSourceBase.js +1 -1
  147. package/esm/hooks/features/export/useGridPrintExport.js +1 -1
  148. package/esm/hooks/features/filter/useGridFilter.js +1 -1
  149. package/esm/hooks/features/rows/useGridRowsMeta.js +5 -2
  150. package/esm/hooks/features/sorting/useGridSorting.d.ts +1 -1
  151. package/esm/hooks/features/sorting/useGridSorting.js +5 -5
  152. package/esm/hooks/utils/useRunOnce.js +1 -1
  153. package/esm/index.js +1 -1
  154. package/esm/material/index.js +14 -0
  155. package/esm/models/props/DataGridProps.d.ts +7 -0
  156. package/esm/utils/composeGridClasses.d.ts +1 -1
  157. package/esm/utils/composeGridClasses.js +1 -1
  158. package/hooks/features/columns/gridColumnsSelector.d.ts +9 -0
  159. package/hooks/features/columns/gridColumnsSelector.js +10 -3
  160. package/hooks/features/dataSource/useGridDataSourceBase.js +12 -12
  161. package/hooks/features/export/useGridPrintExport.js +5 -5
  162. package/hooks/features/filter/useGridFilter.js +2 -2
  163. package/hooks/features/rows/useGridRowsMeta.js +8 -5
  164. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  165. package/hooks/features/sorting/useGridSorting.js +6 -6
  166. package/hooks/utils/useRunOnce.js +3 -2
  167. package/index.js +1 -1
  168. package/material/index.js +14 -0
  169. package/models/props/DataGridProps.d.ts +7 -0
  170. package/package.json +2 -2
  171. package/utils/composeGridClasses.d.ts +1 -1
  172. package/utils/composeGridClasses.js +3 -2
@@ -1,5 +1,6 @@
1
- import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';
1
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
2
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
2
3
  export function getDataGridUtilityClass(slot) {
3
4
  return generateUtilityClass('MuiDataGrid', slot);
4
5
  }
5
- export const gridClasses = generateUtilityClasses('MuiDataGrid', ['aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'autoHeight', 'autosizing', 'mainContent', 'withSidePanel', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'container--top', 'container--bottom', 'detailPanel', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortButton', 'sortIcon', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction']);
6
+ export const gridClasses = generateUtilityClasses('MuiDataGrid', ['aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'autoHeight', 'autosizing', 'mainContent', 'withSidePanel', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'container--top', 'container--bottom', 'detailPanel', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderIcon', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortButton', 'sortIcon', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction']);
@@ -48,6 +48,15 @@ export declare const gridVisibleColumnFieldsSelector: import("@mui/x-data-grid")
48
48
  * @category Visible Columns
49
49
  */
50
50
  export declare const gridPinnedColumnsSelector: import("@mui/x-data-grid").OutputSelector<GridStateCommunity, unknown, GridPinnedColumnFields>;
51
+ /**
52
+ * Get all existing pinned columns. Place the columns on the side that depends on the rtl state.
53
+ * @category Pinned Columns
54
+ * @ignore - Do not document
55
+ */
56
+ export declare const gridExistingPinnedColumnSelector: import("@mui/x-data-grid").OutputSelector<GridStateCommunity, boolean, {
57
+ left: string[];
58
+ right: string[];
59
+ }>;
51
60
  /**
52
61
  * Get the visible pinned columns.
53
62
  * @category Visible Columns
@@ -59,19 +59,26 @@ export const gridVisibleColumnFieldsSelector = createSelectorMemoized(gridVisibl
59
59
  */
60
60
  export const gridPinnedColumnsSelector = createRootSelector(state => state.pinnedColumns);
61
61
 
62
+ /**
63
+ * Get all existing pinned columns. Place the columns on the side that depends on the rtl state.
64
+ * @category Pinned Columns
65
+ * @ignore - Do not document
66
+ */
67
+ export const gridExistingPinnedColumnSelector = createSelectorMemoized(gridPinnedColumnsSelector, gridColumnFieldsSelector, gridIsRtlSelector, (model, orderedFields, isRtl) => filterMissingColumns(model, orderedFields, isRtl));
68
+
62
69
  /**
63
70
  * Get the visible pinned columns.
64
71
  * @category Visible Columns
65
72
  */
66
73
  export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, gridIsRtlSelector, (columnsState, model, visibleColumnFields, isRtl) => {
67
- const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, isRtl);
74
+ const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields, isRtl);
68
75
  const visiblePinnedColumns = {
69
76
  left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
70
77
  right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
71
78
  };
72
79
  return visiblePinnedColumns;
73
80
  });
74
- function filterVisibleColumns(pinnedColumns, columns, invert) {
81
+ function filterMissingColumns(pinnedColumns, columns, invert) {
75
82
  if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
76
83
  return EMPTY_PINNED_COLUMN_FIELDS;
77
84
  }
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import useLazyRef from '@mui/utils/useLazyRef';
4
- import { unstable_debounce as debounce } from '@mui/utils';
4
+ import debounce from '@mui/utils/debounce';
5
5
  import { warnOnce } from '@mui/x-internals/warning';
6
6
  import { isDeepEqual } from '@mui/x-internals/isDeepEqual';
7
7
  import { GRID_ROOT_GROUP_ID } from "../rows/gridRowsUtils.js";
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { unstable_ownerDocument as ownerDocument } from '@mui/utils';
3
+ import ownerDocument from '@mui/utils/ownerDocument';
4
4
  import { loadStyleSheets } from '@mui/x-internals/export';
5
5
  import { useGridLogger } from "../../utils/useGridLogger.js";
6
6
  import { gridExpandedRowCountSelector } from "../filter/gridFilterSelector.js";
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { lruMemoize } from 'reselect';
4
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
4
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
5
5
  import { isDeepEqual } from '@mui/x-internals/isDeepEqual';
6
6
  import { useLazyRef } from "../../utils/useLazyRef.js";
7
7
  import { useGridEvent } from "../../utils/useGridEvent.js";
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import useLazyRef from '@mui/utils/useLazyRef';
4
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
4
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
5
5
  import { ResizeObserver } from "../../../utils/ResizeObserver.js";
6
6
  import { useGridVisibleRows } from "../../utils/useGridVisibleRows.js";
7
7
  import { eslintUseValue } from "../../../utils/utils.js";
@@ -194,7 +194,10 @@ export const useGridRowsMeta = (apiRef, props) => {
194
194
  apiRef.current.unstable_storeRowHeightMeasurement(rowId, height);
195
195
  }
196
196
  if (!isHeightMetaValid.current) {
197
- apiRef.current.requestPipeProcessorsApplication('rowHeight');
197
+ // Avoids "ResizeObserver loop completed with undelivered notifications" error
198
+ requestAnimationFrame(() => {
199
+ apiRef.current.requestPipeProcessorsApplication('rowHeight');
200
+ });
198
201
  }
199
202
  })).current;
200
203
  const observeRowHeight = (element, rowId) => {
@@ -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;
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
3
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
4
4
  import { useGridEvent } from "../../utils/useGridEvent.js";
5
5
  import { useGridApiMethod } from "../../utils/useGridApiMethod.js";
6
6
  import { useGridLogger } from "../../utils/useGridLogger.js";
@@ -194,9 +194,9 @@ export const useGridSorting = (apiRef, props) => {
194
194
  if (!colDef.sortable || props.disableColumnSorting) {
195
195
  return;
196
196
  }
197
- const allowMultipleSorting = event.shiftKey || event.metaKey || event.ctrlKey;
197
+ const allowMultipleSorting = props.multipleColumnsSortingMode === 'always' || event.shiftKey || event.metaKey || event.ctrlKey;
198
198
  sortColumn(field, undefined, allowMultipleSorting);
199
- }, [sortColumn, props.disableColumnSorting]);
199
+ }, [sortColumn, props.disableColumnSorting, props.multipleColumnsSortingMode]);
200
200
  const handleColumnHeaderKeyDown = React.useCallback(({
201
201
  field,
202
202
  colDef
@@ -206,9 +206,9 @@ export const useGridSorting = (apiRef, props) => {
206
206
  }
207
207
  // Ctrl + Enter opens the column menu
208
208
  if (event.key === 'Enter' && !event.ctrlKey && !event.metaKey) {
209
- sortColumn(field, undefined, event.shiftKey);
209
+ sortColumn(field, undefined, props.multipleColumnsSortingMode === 'always' || event.shiftKey);
210
210
  }
211
- }, [sortColumn, props.disableColumnSorting]);
211
+ }, [sortColumn, props.disableColumnSorting, props.multipleColumnsSortingMode]);
212
212
  const handleColumnsChange = React.useCallback(() => {
213
213
  // When the columns change we check that the sorted columns are still part of the dataset
214
214
  const sortModel = gridSortModelSelector(apiRef);
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
2
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
3
3
  const noop = () => {};
4
4
 
5
5
  /**
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.4.0
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
@@ -170,6 +170,7 @@ const BaseSelect = forwardRef(function BaseSelect(props, ref) {
170
170
  }, material))]
171
171
  });
172
172
  });
173
+ if (process.env.NODE_ENV !== "production") BaseSelect.displayName = "BaseSelect";
173
174
  const StyledPagination = styled(MUIPagination)(({
174
175
  theme
175
176
  }) => ({
@@ -225,6 +226,7 @@ const BasePagination = forwardRef(function BasePagination(props, ref) {
225
226
  ref: ref
226
227
  }));
227
228
  });
229
+ if (process.env.NODE_ENV !== "production") BasePagination.displayName = "BasePagination";
228
230
  const BaseBadge = forwardRef(function BaseBadge(props, ref) {
229
231
  const {
230
232
  material
@@ -234,6 +236,7 @@ const BaseBadge = forwardRef(function BaseBadge(props, ref) {
234
236
  ref: ref
235
237
  }));
236
238
  });
239
+ if (process.env.NODE_ENV !== "production") BaseBadge.displayName = "BaseBadge";
237
240
  const BaseCheckbox = forwardRef(function BaseCheckbox(props, ref) {
238
241
  const {
239
242
  autoFocus,
@@ -278,6 +281,7 @@ const BaseCheckbox = forwardRef(function BaseCheckbox(props, ref) {
278
281
  fullWidth: fullWidth
279
282
  });
280
283
  });
284
+ if (process.env.NODE_ENV !== "production") BaseCheckbox.displayName = "BaseCheckbox";
281
285
  const BaseCircularProgress = forwardRef(function BaseCircularProgress(props, ref) {
282
286
  const {
283
287
  material
@@ -287,6 +291,7 @@ const BaseCircularProgress = forwardRef(function BaseCircularProgress(props, ref
287
291
  ref: ref
288
292
  }));
289
293
  });
294
+ if (process.env.NODE_ENV !== "production") BaseCircularProgress.displayName = "BaseCircularProgress";
290
295
  const BaseDivider = forwardRef(function BaseDivider(props, ref) {
291
296
  const {
292
297
  material
@@ -296,6 +301,7 @@ const BaseDivider = forwardRef(function BaseDivider(props, ref) {
296
301
  ref: ref
297
302
  }));
298
303
  });
304
+ if (process.env.NODE_ENV !== "production") BaseDivider.displayName = "BaseDivider";
299
305
  const BaseLinearProgress = forwardRef(function BaseLinearProgress(props, ref) {
300
306
  const {
301
307
  material
@@ -305,6 +311,7 @@ const BaseLinearProgress = forwardRef(function BaseLinearProgress(props, ref) {
305
311
  ref: ref
306
312
  }));
307
313
  });
314
+ if (process.env.NODE_ENV !== "production") BaseLinearProgress.displayName = "BaseLinearProgress";
308
315
  const BaseButton = forwardRef(function BaseButton(props, ref) {
309
316
  const {
310
317
  material
@@ -314,6 +321,7 @@ const BaseButton = forwardRef(function BaseButton(props, ref) {
314
321
  ref: ref
315
322
  }));
316
323
  });
324
+ if (process.env.NODE_ENV !== "production") BaseButton.displayName = "BaseButton";
317
325
  const BaseChip = forwardRef(function BaseChip(props, ref) {
318
326
  const {
319
327
  material
@@ -323,6 +331,7 @@ const BaseChip = forwardRef(function BaseChip(props, ref) {
323
331
  ref: ref
324
332
  }));
325
333
  });
334
+ if (process.env.NODE_ENV !== "production") BaseChip.displayName = "BaseChip";
326
335
  const BaseIconButton = forwardRef(function BaseIconButton(props, ref) {
327
336
  const {
328
337
  material
@@ -332,6 +341,7 @@ const BaseIconButton = forwardRef(function BaseIconButton(props, ref) {
332
341
  ref: ref
333
342
  }));
334
343
  });
344
+ if (process.env.NODE_ENV !== "production") BaseIconButton.displayName = "BaseIconButton";
335
345
  const BaseTooltip = forwardRef(function BaseTooltip(props, ref) {
336
346
  const {
337
347
  material
@@ -341,6 +351,7 @@ const BaseTooltip = forwardRef(function BaseTooltip(props, ref) {
341
351
  ref: ref
342
352
  }));
343
353
  });
354
+ if (process.env.NODE_ENV !== "production") BaseTooltip.displayName = "BaseTooltip";
344
355
  const BaseSkeleton = forwardRef(function BaseSkeleton(props, ref) {
345
356
  const {
346
357
  material
@@ -350,6 +361,7 @@ const BaseSkeleton = forwardRef(function BaseSkeleton(props, ref) {
350
361
  ref: ref
351
362
  }));
352
363
  });
364
+ if (process.env.NODE_ENV !== "production") BaseSkeleton.displayName = "BaseSkeleton";
353
365
  const BaseSwitch = forwardRef(function BaseSwitch(props, ref) {
354
366
  const {
355
367
  material,
@@ -371,6 +383,7 @@ const BaseSwitch = forwardRef(function BaseSwitch(props, ref) {
371
383
  label: label
372
384
  });
373
385
  });
386
+ if (process.env.NODE_ENV !== "production") BaseSwitch.displayName = "BaseSwitch";
374
387
  const BaseMenuList = forwardRef(function BaseMenuList(props, ref) {
375
388
  const {
376
389
  material
@@ -380,6 +393,7 @@ const BaseMenuList = forwardRef(function BaseMenuList(props, ref) {
380
393
  ref: ref
381
394
  }));
382
395
  });
396
+ if (process.env.NODE_ENV !== "production") BaseMenuList.displayName = "BaseMenuList";
383
397
  function BaseMenuItem(props) {
384
398
  const {
385
399
  inert,
@@ -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
  /**
@@ -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,4 +1,4 @@
1
- import { unstable_composeClasses as composeClasses } from '@mui/utils';
1
+ import composeClasses from '@mui/utils/composeClasses';
2
2
  import { getDataGridUtilityClass } from "../constants/gridClasses.js";
3
3
  export function composeGridClasses(classes, slots) {
4
4
  return composeClasses(slots, getDataGridUtilityClass, classes);
@@ -48,6 +48,15 @@ export declare const gridVisibleColumnFieldsSelector: import("@mui/x-data-grid")
48
48
  * @category Visible Columns
49
49
  */
50
50
  export declare const gridPinnedColumnsSelector: import("@mui/x-data-grid").OutputSelector<GridStateCommunity, unknown, GridPinnedColumnFields>;
51
+ /**
52
+ * Get all existing pinned columns. Place the columns on the side that depends on the rtl state.
53
+ * @category Pinned Columns
54
+ * @ignore - Do not document
55
+ */
56
+ export declare const gridExistingPinnedColumnSelector: import("@mui/x-data-grid").OutputSelector<GridStateCommunity, boolean, {
57
+ left: string[];
58
+ right: string[];
59
+ }>;
51
60
  /**
52
61
  * Get the visible pinned columns.
53
62
  * @category Visible Columns
@@ -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
  }
@@ -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
  }