@mui/x-data-grid 8.8.0 → 8.9.2

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 (196) hide show
  1. package/CHANGELOG.md +225 -24
  2. package/DataGrid/DataGrid.js +5 -0
  3. package/DataGrid/index.d.ts +0 -1
  4. package/DataGrid/useDataGridComponent.js +10 -0
  5. package/colDef/gridCheckboxSelectionColDef.js +1 -0
  6. package/components/GridDetailPanels.d.ts +2 -2
  7. package/components/GridPinnedRows.d.ts +2 -2
  8. package/components/GridRow.js +5 -0
  9. package/components/GridScrollArea.js +1 -1
  10. package/components/cell/GridCell.js +7 -5
  11. package/components/cell/GridEditSingleSelectCell.js +1 -1
  12. package/components/columnsManagement/GridColumnsManagement.d.ts +6 -0
  13. package/components/columnsManagement/GridColumnsManagement.js +17 -5
  14. package/components/containers/GridRootStyles.d.ts +1 -1
  15. package/components/containers/GridRootStyles.js +39 -0
  16. package/components/toolbarV8/Toolbar.d.ts +1 -1
  17. package/components/virtualization/GridVirtualScroller.js +5 -5
  18. package/constants/dataGridPropsDefaultValues.js +1 -0
  19. package/constants/gridClasses.d.ts +12 -0
  20. package/constants/gridClasses.js +3 -1
  21. package/esm/DataGrid/DataGrid.js +5 -0
  22. package/esm/DataGrid/index.d.ts +0 -1
  23. package/esm/DataGrid/useDataGridComponent.js +10 -0
  24. package/esm/colDef/gridCheckboxSelectionColDef.js +1 -0
  25. package/esm/components/GridDetailPanels.d.ts +2 -2
  26. package/esm/components/GridPinnedRows.d.ts +2 -2
  27. package/esm/components/GridRow.js +5 -0
  28. package/esm/components/GridScrollArea.js +1 -1
  29. package/esm/components/cell/GridCell.js +7 -5
  30. package/esm/components/cell/GridEditSingleSelectCell.js +1 -1
  31. package/esm/components/columnsManagement/GridColumnsManagement.d.ts +6 -0
  32. package/esm/components/columnsManagement/GridColumnsManagement.js +17 -5
  33. package/esm/components/containers/GridRootStyles.d.ts +1 -1
  34. package/esm/components/containers/GridRootStyles.js +39 -0
  35. package/esm/components/toolbarV8/Toolbar.d.ts +1 -1
  36. package/esm/components/virtualization/GridVirtualScroller.js +5 -5
  37. package/esm/constants/dataGridPropsDefaultValues.js +1 -0
  38. package/esm/constants/gridClasses.d.ts +12 -0
  39. package/esm/constants/gridClasses.js +3 -1
  40. package/esm/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -0
  41. package/esm/hooks/core/pipeProcessing/useGridPipeProcessing.js +20 -5
  42. package/esm/hooks/core/useGridProps.d.ts +2 -2
  43. package/esm/hooks/core/useGridProps.js +3 -1
  44. package/esm/hooks/core/useGridVirtualizer.d.ts +9 -0
  45. package/esm/hooks/core/useGridVirtualizer.js +223 -0
  46. package/esm/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +4 -1
  47. package/esm/hooks/features/columnGrouping/gridColumnGroupsUtils.js +35 -32
  48. package/esm/hooks/features/columnGrouping/useGridColumnGrouping.js +18 -13
  49. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  50. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -2
  51. package/esm/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -3
  52. package/esm/hooks/features/columns/gridColumnsSelector.js +6 -2
  53. package/esm/hooks/features/columns/gridColumnsUtils.js +6 -4
  54. package/esm/hooks/features/columns/useGridColumnSpanning.js +5 -90
  55. package/esm/hooks/features/columns/useGridColumns.js +8 -10
  56. package/esm/hooks/features/dimensions/useGridDimensions.js +18 -188
  57. package/esm/hooks/features/export/utils.js +1 -1
  58. package/esm/hooks/features/filter/useGridFilter.js +3 -3
  59. package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  60. package/esm/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +6 -10
  61. package/esm/hooks/features/keyboardNavigation/utils.d.ts +3 -3
  62. package/esm/hooks/features/keyboardNavigation/utils.js +5 -5
  63. package/esm/hooks/features/listView/gridListViewSelectors.d.ts +8 -1
  64. package/esm/hooks/features/listView/gridListViewSelectors.js +7 -0
  65. package/esm/hooks/features/pivoting/gridPivotingInterfaces.d.ts +0 -1
  66. package/esm/hooks/features/pivoting/gridPivotingSelectors.d.ts +1 -4
  67. package/esm/hooks/features/pivoting/gridPivotingSelectors.js +1 -2
  68. package/esm/hooks/features/rowSelection/useGridRowSelection.js +5 -4
  69. package/esm/hooks/features/rows/gridRowsMetaInterfaces.d.ts +2 -8
  70. package/esm/hooks/features/rows/gridRowsMetaState.d.ts +2 -18
  71. package/esm/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  72. package/esm/hooks/features/rows/gridRowsUtils.js +5 -2
  73. package/esm/hooks/features/rows/useGridRowAriaAttributes.js +3 -1
  74. package/esm/hooks/features/rows/useGridRowSpanning.d.ts +2 -12
  75. package/esm/hooks/features/rows/useGridRowSpanning.js +54 -85
  76. package/esm/hooks/features/rows/useGridRows.js +4 -3
  77. package/esm/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  78. package/esm/hooks/features/rows/useGridRowsMeta.js +17 -187
  79. package/esm/hooks/features/scroll/useGridScroll.d.ts +1 -1
  80. package/esm/hooks/features/scroll/useGridScroll.js +2 -3
  81. package/esm/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +1 -1
  82. package/esm/hooks/features/virtualization/index.d.ts +1 -0
  83. package/esm/hooks/features/virtualization/index.js +1 -0
  84. package/esm/hooks/features/virtualization/useGridVirtualization.d.ts +5 -16
  85. package/esm/hooks/features/virtualization/useGridVirtualization.js +41 -22
  86. package/esm/hooks/utils/index.d.ts +2 -1
  87. package/esm/hooks/utils/index.js +2 -1
  88. package/esm/hooks/utils/useFirstRender.d.ts +1 -1
  89. package/esm/hooks/utils/useFirstRender.js +1 -8
  90. package/esm/hooks/utils/useGridInitializeState.d.ts +1 -1
  91. package/esm/hooks/utils/useGridInitializeState.js +6 -1
  92. package/esm/hooks/utils/useRunOncePerLoop.d.ts +1 -0
  93. package/esm/hooks/utils/useRunOncePerLoop.js +26 -0
  94. package/esm/index.js +1 -1
  95. package/esm/internals/index.d.ts +1 -1
  96. package/esm/internals/index.js +1 -1
  97. package/esm/internals/utils/getPinnedCellOffset.js +5 -0
  98. package/esm/locales/frFR.js +18 -21
  99. package/esm/locales/heIL.js +12 -12
  100. package/esm/locales/plPL.js +22 -24
  101. package/esm/models/api/gridApiCommon.d.ts +4 -1
  102. package/esm/models/api/gridColumnSpanning.d.ts +5 -11
  103. package/esm/models/api/gridRowApi.d.ts +5 -0
  104. package/esm/models/events/gridEventLookup.d.ts +2 -1
  105. package/esm/models/gridApiCaches.d.ts +8 -2
  106. package/esm/models/gridStateCommunity.d.ts +2 -2
  107. package/esm/models/props/DataGridProps.d.ts +5 -0
  108. package/esm/utils/roundToDecimalPlaces.d.ts +1 -1
  109. package/esm/utils/roundToDecimalPlaces.js +1 -3
  110. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -0
  111. package/hooks/core/pipeProcessing/useGridPipeProcessing.js +20 -5
  112. package/hooks/core/useGridProps.d.ts +2 -2
  113. package/hooks/core/useGridProps.js +3 -1
  114. package/hooks/core/useGridVirtualizer.d.ts +9 -0
  115. package/hooks/core/useGridVirtualizer.js +231 -0
  116. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +4 -1
  117. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +35 -32
  118. package/hooks/features/columnGrouping/useGridColumnGrouping.js +18 -13
  119. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  120. package/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -3
  121. package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -3
  122. package/hooks/features/columns/gridColumnsSelector.js +6 -2
  123. package/hooks/features/columns/gridColumnsUtils.js +6 -4
  124. package/hooks/features/columns/useGridColumnSpanning.js +5 -91
  125. package/hooks/features/columns/useGridColumns.js +8 -10
  126. package/hooks/features/dimensions/useGridDimensions.js +18 -188
  127. package/hooks/features/export/utils.js +1 -1
  128. package/hooks/features/filter/useGridFilter.js +3 -3
  129. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  130. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +6 -10
  131. package/hooks/features/keyboardNavigation/utils.d.ts +3 -3
  132. package/hooks/features/keyboardNavigation/utils.js +5 -5
  133. package/hooks/features/listView/gridListViewSelectors.d.ts +8 -1
  134. package/hooks/features/listView/gridListViewSelectors.js +8 -1
  135. package/hooks/features/pivoting/gridPivotingInterfaces.d.ts +0 -1
  136. package/hooks/features/pivoting/gridPivotingSelectors.d.ts +1 -4
  137. package/hooks/features/pivoting/gridPivotingSelectors.js +2 -3
  138. package/hooks/features/rowSelection/useGridRowSelection.js +5 -4
  139. package/hooks/features/rows/gridRowsMetaInterfaces.d.ts +2 -8
  140. package/hooks/features/rows/gridRowsMetaState.d.ts +2 -18
  141. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  142. package/hooks/features/rows/gridRowsUtils.js +5 -2
  143. package/hooks/features/rows/useGridRowAriaAttributes.js +3 -1
  144. package/hooks/features/rows/useGridRowSpanning.d.ts +2 -12
  145. package/hooks/features/rows/useGridRowSpanning.js +54 -85
  146. package/hooks/features/rows/useGridRows.js +4 -3
  147. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  148. package/hooks/features/rows/useGridRowsMeta.js +15 -186
  149. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  150. package/hooks/features/scroll/useGridScroll.js +2 -3
  151. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +1 -1
  152. package/hooks/features/virtualization/index.d.ts +1 -0
  153. package/hooks/features/virtualization/index.js +12 -0
  154. package/hooks/features/virtualization/useGridVirtualization.d.ts +5 -16
  155. package/hooks/features/virtualization/useGridVirtualization.js +42 -24
  156. package/hooks/utils/index.d.ts +2 -1
  157. package/hooks/utils/index.js +16 -4
  158. package/hooks/utils/useFirstRender.d.ts +1 -1
  159. package/hooks/utils/useFirstRender.js +11 -11
  160. package/hooks/utils/useGridInitializeState.d.ts +1 -1
  161. package/hooks/utils/useGridInitializeState.js +6 -1
  162. package/hooks/utils/useRunOncePerLoop.d.ts +1 -0
  163. package/hooks/utils/useRunOncePerLoop.js +33 -0
  164. package/index.js +1 -1
  165. package/internals/index.d.ts +1 -1
  166. package/internals/index.js +4 -11
  167. package/internals/utils/getPinnedCellOffset.js +5 -0
  168. package/locales/frFR.js +18 -21
  169. package/locales/heIL.js +12 -12
  170. package/locales/plPL.js +22 -24
  171. package/models/api/gridApiCommon.d.ts +4 -1
  172. package/models/api/gridColumnSpanning.d.ts +5 -11
  173. package/models/api/gridRowApi.d.ts +5 -0
  174. package/models/events/gridEventLookup.d.ts +2 -1
  175. package/models/gridApiCaches.d.ts +8 -2
  176. package/models/gridStateCommunity.d.ts +2 -2
  177. package/models/props/DataGridProps.d.ts +5 -0
  178. package/package.json +5 -5
  179. package/utils/roundToDecimalPlaces.d.ts +1 -1
  180. package/utils/roundToDecimalPlaces.js +7 -4
  181. package/esm/hooks/features/rows/gridRowSpanningSelectors.d.ts +0 -10
  182. package/esm/hooks/features/rows/gridRowSpanningSelectors.js +0 -5
  183. package/esm/hooks/features/virtualization/useGridVirtualScroller.d.ts +0 -56
  184. package/esm/hooks/features/virtualization/useGridVirtualScroller.js +0 -846
  185. package/esm/hooks/utils/useRunOnce.d.ts +0 -5
  186. package/esm/hooks/utils/useRunOnce.js +0 -18
  187. package/esm/utils/platform.d.ts +0 -1
  188. package/esm/utils/platform.js +0 -2
  189. package/hooks/features/rows/gridRowSpanningSelectors.d.ts +0 -10
  190. package/hooks/features/rows/gridRowSpanningSelectors.js +0 -11
  191. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +0 -56
  192. package/hooks/features/virtualization/useGridVirtualScroller.js +0 -857
  193. package/hooks/utils/useRunOnce.d.ts +0 -5
  194. package/hooks/utils/useRunOnce.js +0 -27
  195. package/utils/platform.d.ts +0 -1
  196. package/utils/platform.js +0 -8
@@ -2,4 +2,4 @@ import { DataGridProcessedProps } from "../../models/props/DataGridProps.js";
2
2
  export type OwnerState = DataGridProcessedProps;
3
3
  export declare const GridRootStyles: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
4
4
  ownerState: OwnerState;
5
- }, Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("react").HTMLAttributes<HTMLDivElement> | keyof import("react").ClassAttributes<HTMLDivElement>>, {}>;
5
+ }, Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("react").ClassAttributes<HTMLDivElement> | keyof import("react").HTMLAttributes<HTMLDivElement>>, {}>;
@@ -247,6 +247,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
247
247
  [`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
248
248
  }, {
249
249
  [`& .${_gridClasses.gridClasses.withBorderColor}`]: styles.withBorderColor
250
+ }, {
251
+ [`& .${_gridClasses.gridClasses['row--dropAbove']}`]: styles['row--dropAbove']
252
+ }, {
253
+ [`& .${_gridClasses.gridClasses['row--dropBelow']}`]: styles['row--dropBelow']
254
+ }, {
255
+ [`& .${_gridClasses.gridClasses['row--beingDragged']}`]: styles['row--beingDragged']
250
256
  }]
251
257
  })(() => {
252
258
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
@@ -868,6 +874,39 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
868
874
  [`& .${_gridClasses.gridClasses['scrollbar--vertical']}, & .${_gridClasses.gridClasses.pinnedRows}, & .${_gridClasses.gridClasses.virtualScroller} > .${_gridClasses.gridClasses.filler}`]: {
869
875
  display: 'none'
870
876
  }
877
+ },
878
+ [`& .${_gridClasses.gridClasses['row--dropAbove']}`]: {
879
+ position: 'relative',
880
+ '&::before': {
881
+ content: '""',
882
+ position: 'absolute',
883
+ top: 0,
884
+ left: 0,
885
+ width: '100%',
886
+ height: '2px',
887
+ backgroundColor: _cssVariables.vars.colors.interactive.selected
888
+ }
889
+ },
890
+ [`& .${_gridClasses.gridClasses['row--dropBelow']}`]: {
891
+ position: 'relative',
892
+ '&::before': {
893
+ content: '""',
894
+ position: 'absolute',
895
+ bottom: '-2px',
896
+ left: 0,
897
+ width: '100%',
898
+ height: '2px',
899
+ backgroundColor: _cssVariables.vars.colors.interactive.selected
900
+ },
901
+ [`&.${_gridClasses.gridClasses['row--lastVisible']}`]: {
902
+ '&::before': {
903
+ bottom: 'calc(var(--DataGrid-hasScrollY) * 0px + (1 - var(--DataGrid-hasScrollY)) * -2px)'
904
+ }
905
+ }
906
+ },
907
+ [`& .${_gridClasses.gridClasses['row--beingDragged']}`]: {
908
+ backgroundColor: _cssVariables.vars.colors.background.overlay,
909
+ color: _cssVariables.vars.colors.foreground.disabled
871
910
  }
872
911
  };
873
912
  return gridStyle;
@@ -6,7 +6,7 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  */
7
7
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
8
8
  };
9
- declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | keyof React.ClassAttributes<HTMLDivElement>>, {}>;
9
+ declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
10
10
  /**
11
11
  * The top level Toolbar component that provides context to child components.
12
12
  * It renders a styled `<div />` element.
@@ -11,12 +11,12 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _system = require("@mui/system");
12
12
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
13
13
  var _gridDimensionsSelectors = require("../../hooks/features/dimensions/gridDimensionsSelectors");
14
+ var _rows = require("../../hooks/features/rows");
14
15
  var _GridScrollArea = require("../GridScrollArea");
15
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
16
- var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
17
+ var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
17
18
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
18
19
  var _gridClasses = require("../../constants/gridClasses");
19
- var _useGridVirtualScroller = require("../../hooks/features/virtualization/useGridVirtualScroller");
20
20
  var _useGridOverlays = require("../../hooks/features/overlays/useGridOverlays");
21
21
  var _GridHeaders = require("../GridHeaders");
22
22
  var _GridMainContainer = require("./GridMainContainer");
@@ -69,7 +69,7 @@ const Scroller = (0, _system.styled)('div', {
69
69
  });
70
70
  const hasPinnedRightSelector = apiRef => apiRef.current.state.dimensions.rightPinnedWidth > 0;
71
71
  function GridVirtualScroller(props) {
72
- const apiRef = (0, _useGridApiContext.useGridApiContext)();
72
+ const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
73
73
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
74
74
  const hasScrollY = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasScrollYSelector);
75
75
  const hasScrollX = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasScrollXSelector);
@@ -85,7 +85,7 @@ function GridVirtualScroller(props) {
85
85
  hasPinnedRight
86
86
  }, overlaysProps);
87
87
  const classes = useUtilityClasses(ownerState);
88
- const virtualScroller = (0, _useGridVirtualScroller.useGridVirtualScroller)();
88
+ const virtualScroller = apiRef.current.virtualizer.api.useVirtualization().getters;
89
89
  const {
90
90
  getContainerProps,
91
91
  getScrollerProps,
@@ -96,7 +96,7 @@ function GridVirtualScroller(props) {
96
96
  getRows,
97
97
  getScrollAreaProps
98
98
  } = virtualScroller;
99
- const rows = getRows();
99
+ const rows = getRows(undefined, (0, _rows.gridRowTreeSelector)(apiRef));
100
100
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridMainContainer.GridMainContainer, (0, _extends2.default)({
101
101
  className: classes.root
102
102
  }, getContainerProps(), {
@@ -16,6 +16,7 @@ const DATA_GRID_PROPS_DEFAULT_VALUES = exports.DATA_GRID_PROPS_DEFAULT_VALUES =
16
16
  checkboxSelectionVisibleOnly: false,
17
17
  clipboardCopyCellDelimiter: '\t',
18
18
  columnBufferPx: 150,
19
+ columnFilterDebounceMs: 150,
19
20
  columnHeaderHeight: 56,
20
21
  disableAutosize: false,
21
22
  disableColumnFilter: false,
@@ -577,6 +577,18 @@ export interface GridClasses {
577
577
  * Styles applied to the floating special row reorder cell element when it is dragged.
578
578
  */
579
579
  'row--dragging': string;
580
+ /**
581
+ * Styles applied to the row element when it is a drop target above.
582
+ */
583
+ 'row--dropAbove': string;
584
+ /**
585
+ * Styles applied to the row element when it is a drop target below.
586
+ */
587
+ 'row--dropBelow': string;
588
+ /**
589
+ * Styles applied to the row element when it is being dragged (entire row).
590
+ */
591
+ 'row--beingDragged': string;
580
592
  /**
581
593
  * Styles applied to the first visible row element on every page of the grid.
582
594
  */
@@ -11,4 +11,6 @@ var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generat
11
11
  function getDataGridUtilityClass(slot) {
12
12
  return (0, _generateUtilityClass.default)('MuiDataGrid', slot);
13
13
  }
14
- const gridClasses = exports.gridClasses = (0, _generateUtilityClasses.default)('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--up', 'scrollArea--down', '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']);
14
+ const gridClasses = exports.gridClasses = (0, _generateUtilityClasses.default)('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',
15
+ // TODO v9: Rename to `cell--dragging`
16
+ 'row--dragging', 'row--dropAbove', 'row--dropBelow', 'row--beingDragged', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderIcon', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', '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']);
@@ -126,6 +126,11 @@ DataGridRaw.propTypes = {
126
126
  * @default 150
127
127
  */
128
128
  columnBufferPx: PropTypes.number,
129
+ /**
130
+ * The milliseconds delay to wait after a keystroke before triggering filtering in the columns menu.
131
+ * @default 150
132
+ */
133
+ columnFilterDebounceMs: PropTypes.number,
129
134
  /**
130
135
  * Sets the height in pixels of the column group headers in the Data Grid.
131
136
  * Inherits the `columnHeaderHeight` value if not set.
@@ -1,2 +1 @@
1
- import "../index.css";
2
1
  export * from "./DataGrid.js";
@@ -1,4 +1,8 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
1
4
  import { useGridInitialization } from "../hooks/core/useGridInitialization.js";
5
+ import { useGridVirtualizer } from "../hooks/core/useGridVirtualizer.js";
2
6
  import { useGridInitializeState } from "../hooks/utils/useGridInitializeState.js";
3
7
  import { useGridClipboard } from "../hooks/features/clipboard/useGridClipboard.js";
4
8
  import { columnMenuStateInitializer, useGridColumnMenu } from "../hooks/features/columnMenu/useGridColumnMenu.js";
@@ -62,6 +66,7 @@ export const useDataGridComponent = (apiRef, props) => {
62
66
  useGridInitializeState(dimensionsStateInitializer, apiRef, props);
63
67
  useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
64
68
  useGridInitializeState(listViewStateInitializer, apiRef, props);
69
+ useGridVirtualizer(apiRef, props);
65
70
  useGridKeyboardNavigation(apiRef, props);
66
71
  useGridRowSelection(apiRef, props);
67
72
  useGridColumns(apiRef, props);
@@ -90,4 +95,9 @@ export const useDataGridComponent = (apiRef, props) => {
90
95
  useGridVirtualization(apiRef, props);
91
96
  useGridListView(apiRef, props);
92
97
  useGridDataSource(apiRef, props);
98
+
99
+ // Should be the last thing to run, because all pre-processors should have been registered by now.
100
+ React.useEffect(() => {
101
+ apiRef.current.runAppliersForPendingProcessors();
102
+ });
93
103
  };
@@ -24,6 +24,7 @@ export const GRID_CHECKBOX_SELECTION_COL_DEF = _extends({}, GRID_BOOLEAN_COL_DEF
24
24
  const rowId = gridRowIdSelector(apiRef, row);
25
25
  return apiRef.current.isRowSelected(rowId);
26
26
  },
27
+ rowSpanValueGetter: (_, row, column, apiRef) => gridRowIdSelector(apiRef, row),
27
28
  renderHeader: params => /*#__PURE__*/_jsx(GridHeaderCheckbox, _extends({}, params)),
28
29
  renderCell: params => /*#__PURE__*/_jsx(GridCellCheckboxRenderer, _extends({}, params))
29
30
  });
@@ -1,5 +1,5 @@
1
- import type { VirtualScroller } from "../hooks/features/virtualization/useGridVirtualScroller.js";
1
+ import type { VirtualScrollerCompat } from '@mui/x-virtualizer';
2
2
  export interface GridDetailPanelsProps {
3
- virtualScroller: VirtualScroller;
3
+ virtualScroller: VirtualScrollerCompat;
4
4
  }
5
5
  export declare function GridDetailPanels(_: GridDetailPanelsProps): null;
@@ -1,6 +1,6 @@
1
- import type { VirtualScroller } from "../hooks/features/virtualization/useGridVirtualScroller.js";
1
+ import type { VirtualScrollerCompat } from '@mui/x-virtualizer';
2
2
  export interface GridPinnedRowsProps {
3
3
  position: 'top' | 'bottom';
4
- virtualScroller: VirtualScroller;
4
+ virtualScroller: VirtualScrollerCompat;
5
5
  }
6
6
  export declare function GridPinnedRows(_: GridPinnedRowsProps): null;
@@ -202,6 +202,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
202
202
  });
203
203
  rowClassNames.push(rootProps.getRowClassName(rowParams));
204
204
  }
205
+
206
+ // XXX: fix this properly
207
+ if (!rowNode) {
208
+ return null;
209
+ }
205
210
  const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
206
211
  const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
207
212
  if (cellColSpanInfo?.spannedByColSpan) {
@@ -183,7 +183,7 @@ function GridVerticalScrollAreaContent(props) {
183
183
  if (scrollDirection === 'down') {
184
184
  // Only render if the user has not reached yet the bottom of the list
185
185
  const totalRowsHeight = rowsMeta.currentPageTotalHeight || 0;
186
- const maxScrollTop = totalRowsHeight - dimensions.viewportInnerSize.height - dimensions.scrollbarSize;
186
+ const maxScrollTop = totalRowsHeight - dimensions.viewportInnerSize.height - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
187
187
  return scrollPosition.current.top < maxScrollTop;
188
188
  }
189
189
  return false;
@@ -14,6 +14,8 @@ import capitalize from '@mui/utils/capitalize';
14
14
  import { fastMemo } from '@mui/x-internals/fastMemo';
15
15
  import { useRtl } from '@mui/system/RtlProvider';
16
16
  import { forwardRef } from '@mui/x-internals/forwardRef';
17
+ import { useStore } from '@mui/x-internals/store';
18
+ import { Rowspan } from '@mui/x-virtualizer';
17
19
  import { doesSupportPreventScroll } from "../../utils/doesSupportPreventScroll.js";
18
20
  import { getDataGridUtilityClass, gridClasses } from "../../constants/gridClasses.js";
19
21
  import { GridCellModes } from "../../models/index.js";
@@ -22,7 +24,6 @@ import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
22
24
  import { gridFocusCellSelector, gridTabIndexCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
23
25
  import { GridPinnedColumnPosition } from "../../hooks/features/columns/gridColumnsInterfaces.js";
24
26
  import { PinnedColumnPosition } from "../../internals/constants.js";
25
- import { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from "../../hooks/features/rows/gridRowSpanningSelectors.js";
26
27
  import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
27
28
  import { gridEditCellStateSelector } from "../../hooks/features/editing/gridEditingSelectors.js";
28
29
  import { attachPinnedStyle } from "../../internals/utils/index.js";
@@ -116,8 +117,9 @@ const GridCell = forwardRef(function GridCell(props, ref) {
116
117
  id: rowId,
117
118
  field
118
119
  }));
119
- const hiddenCells = useGridSelector(apiRef, gridRowSpanningHiddenCellsSelector);
120
- const spannedCells = useGridSelector(apiRef, gridRowSpanningSpannedCellsSelector);
120
+ const store = apiRef.current.virtualizer.store;
121
+ const hiddenCells = useStore(store, Rowspan.selectors.hiddenCells);
122
+ const spannedCells = useStore(store, Rowspan.selectors.spannedCells);
121
123
  const {
122
124
  hasFocus,
123
125
  isEditable = false,
@@ -186,8 +188,8 @@ const GridCell = forwardRef(function GridCell(props, ref) {
186
188
  propHandler(event);
187
189
  }
188
190
  }, [apiRef, field, rowId]);
189
- const isCellRowSpanned = hiddenCells[rowId]?.[field] ?? false;
190
- const rowSpan = spannedCells[rowId]?.[field] ?? 1;
191
+ const isCellRowSpanned = hiddenCells[rowId]?.[colIndex] ?? false;
192
+ const rowSpan = spannedCells[rowId]?.[colIndex] ?? 1;
191
193
  const style = React.useMemo(() => {
192
194
  if (isNotVisible) {
193
195
  return {
@@ -14,7 +14,7 @@ import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
14
14
  import { createElement as _createElement } from "react";
15
15
  import { jsx as _jsx } from "react/jsx-runtime";
16
16
  function isKeyboardEvent(event) {
17
- return !!event.key;
17
+ return 'key' in event && !!event.key;
18
18
  }
19
19
  function GridEditSingleSelectCell(props) {
20
20
  const rootProps = useGridRootProps();
@@ -1,10 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { TextFieldProps } from "../../models/gridBaseSlots.js";
3
+ import type { DataGridProcessedProps } from "../../models/props/DataGridProps.js";
3
4
  import type { GridColDef } from "../../models/colDef/gridColDef.js";
4
5
  export interface GridColumnsManagementProps {
5
6
  sort?: 'asc' | 'desc';
6
7
  searchPredicate?: (column: GridColDef, searchValue: string) => boolean;
7
8
  searchInputProps?: Partial<TextFieldProps>;
9
+ /**
10
+ * The milliseconds delay to wait after a keystroke before triggering filtering in the columns menu.
11
+ * @default 150
12
+ */
13
+ searchDebounceMs?: DataGridProcessedProps['columnFilterDebounceMs'];
8
14
  /**
9
15
  * If `true`, the column search field will be focused automatically.
10
16
  * If `false`, the first column switch input will be focused automatically.
@@ -5,6 +5,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
5
5
  import * as React from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import composeClasses from '@mui/utils/composeClasses';
8
+ import debounce from '@mui/utils/debounce';
8
9
  import { styled } from '@mui/material/styles';
9
10
  import { inputBaseClasses } from '@mui/material/InputBase';
10
11
  import { vars } from "../../constants/cssVariables.js";
@@ -52,8 +53,12 @@ function GridColumnsManagement(props) {
52
53
  disableResetButton = false,
53
54
  toggleAllMode = 'all',
54
55
  getTogglableColumns,
55
- searchInputProps
56
+ searchInputProps,
57
+ searchDebounceMs = rootProps.columnFilterDebounceMs
56
58
  } = props;
59
+ const debouncedFilter = React.useMemo(() => debounce(value => {
60
+ setSearchValue(value);
61
+ }, searchDebounceMs ?? 150), [searchDebounceMs]);
57
62
  const isResetDisabled = React.useMemo(() => checkColumnVisibilityModelsSame(columnVisibilityModel, initialColumnVisibilityModel), [columnVisibilityModel, initialColumnVisibilityModel]);
58
63
  const sortedColumns = React.useMemo(() => {
59
64
  switch (sort) {
@@ -98,8 +103,8 @@ function GridColumnsManagement(props) {
98
103
  return apiRef.current.setColumnVisibilityModel(newModel);
99
104
  }, [apiRef, columns, getTogglableColumns, toggleAllMode, currentColumns]);
100
105
  const handleSearchValueChange = React.useCallback(event => {
101
- setSearchValue(event.target.value);
102
- }, []);
106
+ debouncedFilter(event.target.value);
107
+ }, [debouncedFilter]);
103
108
  const hideableColumns = React.useMemo(() => currentColumns.filter(col => col.hideable), [currentColumns]);
104
109
  const allHideableColumnsVisible = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] == null || columnVisibilityModel[column.field] !== false), [columnVisibilityModel, hideableColumns]);
105
110
  const allHideableColumnsHidden = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] === false), [columnVisibilityModel, hideableColumns]);
@@ -121,7 +126,10 @@ function GridColumnsManagement(props) {
121
126
  };
122
127
  const handleSearchReset = React.useCallback(() => {
123
128
  setSearchValue('');
124
- searchInputRef.current?.focus();
129
+ if (searchInputRef.current) {
130
+ searchInputRef.current.value = '';
131
+ searchInputRef.current.focus();
132
+ }
125
133
  }, []);
126
134
  return /*#__PURE__*/_jsxs(React.Fragment, {
127
135
  children: [/*#__PURE__*/_jsx(GridColumnsManagementHeader, {
@@ -133,7 +141,6 @@ function GridColumnsManagement(props) {
133
141
  placeholder: apiRef.current.getLocaleText('columnsManagementSearchTitle'),
134
142
  inputRef: searchInputRef,
135
143
  className: classes.searchInput,
136
- value: searchValue,
137
144
  onChange: handleSearchValueChange,
138
145
  size: "small",
139
146
  type: "search",
@@ -236,6 +243,11 @@ process.env.NODE_ENV !== "production" ? GridColumnsManagement.propTypes = {
236
243
  * @returns {GridColDef['field'][]} The list of togglable columns' field names.
237
244
  */
238
245
  getTogglableColumns: PropTypes.func,
246
+ /**
247
+ * The milliseconds delay to wait after a keystroke before triggering filtering in the columns menu.
248
+ * @default 150
249
+ */
250
+ searchDebounceMs: PropTypes.number,
239
251
  searchInputProps: PropTypes.object,
240
252
  searchPredicate: PropTypes.func,
241
253
  sort: PropTypes.oneOf(['asc', 'desc']),
@@ -2,4 +2,4 @@ import { DataGridProcessedProps } from "../../models/props/DataGridProps.js";
2
2
  export type OwnerState = DataGridProcessedProps;
3
3
  export declare const GridRootStyles: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
4
4
  ownerState: OwnerState;
5
- }, Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("react").HTMLAttributes<HTMLDivElement> | keyof import("react").ClassAttributes<HTMLDivElement>>, {}>;
5
+ }, Pick<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("react").ClassAttributes<HTMLDivElement> | keyof import("react").HTMLAttributes<HTMLDivElement>>, {}>;
@@ -241,6 +241,12 @@ export const GridRootStyles = styled('div', {
241
241
  [`& .${c.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
242
242
  }, {
243
243
  [`& .${c.withBorderColor}`]: styles.withBorderColor
244
+ }, {
245
+ [`& .${c['row--dropAbove']}`]: styles['row--dropAbove']
246
+ }, {
247
+ [`& .${c['row--dropBelow']}`]: styles['row--dropBelow']
248
+ }, {
249
+ [`& .${c['row--beingDragged']}`]: styles['row--beingDragged']
244
250
  }]
245
251
  })(() => {
246
252
  const apiRef = useGridPrivateApiContext();
@@ -862,6 +868,39 @@ export const GridRootStyles = styled('div', {
862
868
  [`& .${c['scrollbar--vertical']}, & .${c.pinnedRows}, & .${c.virtualScroller} > .${c.filler}`]: {
863
869
  display: 'none'
864
870
  }
871
+ },
872
+ [`& .${c['row--dropAbove']}`]: {
873
+ position: 'relative',
874
+ '&::before': {
875
+ content: '""',
876
+ position: 'absolute',
877
+ top: 0,
878
+ left: 0,
879
+ width: '100%',
880
+ height: '2px',
881
+ backgroundColor: vars.colors.interactive.selected
882
+ }
883
+ },
884
+ [`& .${c['row--dropBelow']}`]: {
885
+ position: 'relative',
886
+ '&::before': {
887
+ content: '""',
888
+ position: 'absolute',
889
+ bottom: '-2px',
890
+ left: 0,
891
+ width: '100%',
892
+ height: '2px',
893
+ backgroundColor: vars.colors.interactive.selected
894
+ },
895
+ [`&.${c['row--lastVisible']}`]: {
896
+ '&::before': {
897
+ bottom: 'calc(var(--DataGrid-hasScrollY) * 0px + (1 - var(--DataGrid-hasScrollY)) * -2px)'
898
+ }
899
+ }
900
+ },
901
+ [`& .${c['row--beingDragged']}`]: {
902
+ backgroundColor: vars.colors.background.overlay,
903
+ color: vars.colors.foreground.disabled
865
904
  }
866
905
  };
867
906
  return gridStyle;
@@ -6,7 +6,7 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  */
7
7
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
8
8
  };
9
- declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.HTMLAttributes<HTMLDivElement> | keyof React.ClassAttributes<HTMLDivElement>>, {}>;
9
+ declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
10
10
  /**
11
11
  * The top level Toolbar component that provides context to child components.
12
12
  * It renders a styled `<div />` element.
@@ -3,12 +3,12 @@ import * as React from 'react';
3
3
  import { styled } from '@mui/system';
4
4
  import composeClasses from '@mui/utils/composeClasses';
5
5
  import { gridHasBottomFillerSelector, gridHasScrollXSelector, gridHasScrollYSelector } from "../../hooks/features/dimensions/gridDimensionsSelectors.js";
6
+ import { gridRowTreeSelector } from "../../hooks/features/rows/index.js";
6
7
  import { GridScrollArea } from "../GridScrollArea.js";
7
8
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
8
- import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
9
+ import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
9
10
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
10
11
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
11
- import { useGridVirtualScroller } from "../../hooks/features/virtualization/useGridVirtualScroller.js";
12
12
  import { useGridOverlays } from "../../hooks/features/overlays/useGridOverlays.js";
13
13
  import { GridHeaders } from "../GridHeaders.js";
14
14
  import { GridMainContainer as Container } from "./GridMainContainer.js";
@@ -61,7 +61,7 @@ const Scroller = styled('div', {
61
61
  });
62
62
  const hasPinnedRightSelector = apiRef => apiRef.current.state.dimensions.rightPinnedWidth > 0;
63
63
  function GridVirtualScroller(props) {
64
- const apiRef = useGridApiContext();
64
+ const apiRef = useGridPrivateApiContext();
65
65
  const rootProps = useGridRootProps();
66
66
  const hasScrollY = useGridSelector(apiRef, gridHasScrollYSelector);
67
67
  const hasScrollX = useGridSelector(apiRef, gridHasScrollXSelector);
@@ -77,7 +77,7 @@ function GridVirtualScroller(props) {
77
77
  hasPinnedRight
78
78
  }, overlaysProps);
79
79
  const classes = useUtilityClasses(ownerState);
80
- const virtualScroller = useGridVirtualScroller();
80
+ const virtualScroller = apiRef.current.virtualizer.api.useVirtualization().getters;
81
81
  const {
82
82
  getContainerProps,
83
83
  getScrollerProps,
@@ -88,7 +88,7 @@ function GridVirtualScroller(props) {
88
88
  getRows,
89
89
  getScrollAreaProps
90
90
  } = virtualScroller;
91
- const rows = getRows();
91
+ const rows = getRows(undefined, gridRowTreeSelector(apiRef));
92
92
  return /*#__PURE__*/_jsxs(Container, _extends({
93
93
  className: classes.root
94
94
  }, getContainerProps(), {
@@ -10,6 +10,7 @@ export const DATA_GRID_PROPS_DEFAULT_VALUES = {
10
10
  checkboxSelectionVisibleOnly: false,
11
11
  clipboardCopyCellDelimiter: '\t',
12
12
  columnBufferPx: 150,
13
+ columnFilterDebounceMs: 150,
13
14
  columnHeaderHeight: 56,
14
15
  disableAutosize: false,
15
16
  disableColumnFilter: false,
@@ -577,6 +577,18 @@ export interface GridClasses {
577
577
  * Styles applied to the floating special row reorder cell element when it is dragged.
578
578
  */
579
579
  'row--dragging': string;
580
+ /**
581
+ * Styles applied to the row element when it is a drop target above.
582
+ */
583
+ 'row--dropAbove': string;
584
+ /**
585
+ * Styles applied to the row element when it is a drop target below.
586
+ */
587
+ 'row--dropBelow': string;
588
+ /**
589
+ * Styles applied to the row element when it is being dragged (entire row).
590
+ */
591
+ 'row--beingDragged': string;
580
592
  /**
581
593
  * Styles applied to the first visible row element on every page of the grid.
582
594
  */
@@ -3,4 +3,6 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
3
  export function getDataGridUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiDataGrid', slot);
5
5
  }
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--up', 'scrollArea--down', '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',
7
+ // TODO v9: Rename to `cell--dragging`
8
+ 'row--dragging', 'row--dropAbove', 'row--dropBelow', 'row--beingDragged', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderIcon', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', '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']);
@@ -138,5 +138,10 @@ export interface GridPipeProcessingPrivateApi {
138
138
  * @param {GridPipeProcessorGroup} group The group to apply.
139
139
  */
140
140
  requestPipeProcessorsApplication: (group: GridPipeProcessorGroup) => void;
141
+ /**
142
+ * Checks of there are any processors that have been updated and runs appliers for them.
143
+ * It is intended to be called in a useEffect in the top-level data grid hook (`useDataGridComponent`).
144
+ */
145
+ runAppliersForPendingProcessors: () => void;
141
146
  }
142
147
  export {};