@mui/x-data-grid 7.23.5 → 7.24.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 (249) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/DataGrid/DataGrid.js +4 -5
  3. package/DataGrid/useDataGridComponent.d.ts +1 -1
  4. package/DataGrid/useDataGridComponent.js +1 -1
  5. package/components/GridHeaders.js +2 -2
  6. package/components/GridRow.d.ts +5 -9
  7. package/components/GridRow.js +28 -105
  8. package/components/GridSkeletonLoadingOverlay.js +18 -18
  9. package/components/cell/GridActionsCellItem.d.ts +3 -3
  10. package/components/cell/GridCell.d.ts +9 -16
  11. package/components/cell/GridCell.js +17 -35
  12. package/components/cell/GridEditDateCell.js +1 -1
  13. package/components/cell/GridEditInputCell.js +1 -1
  14. package/components/cell/GridEditSingleSelectCell.js +2 -2
  15. package/components/columnHeaders/ColumnHeaderMenuIcon.d.ts +1 -1
  16. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -5
  17. package/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  18. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -5
  19. package/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  20. package/components/columnSelection/GridCellCheckboxRenderer.js +4 -3
  21. package/components/columnSelection/GridHeaderCheckbox.js +6 -2
  22. package/components/containers/GridRoot.d.ts +2 -2
  23. package/components/containers/GridRoot.js +14 -6
  24. package/components/containers/GridRootStyles.js +1 -0
  25. package/components/panel/GridPanel.d.ts +1 -1
  26. package/components/panel/filterPanel/GridFilterInputValue.js +7 -10
  27. package/components/panel/filterPanel/GridFilterInputValueProps.d.ts +1 -1
  28. package/components/virtualization/GridVirtualScrollbar.js +11 -12
  29. package/components/virtualization/GridVirtualScroller.js +4 -4
  30. package/context/GridContextProvider.d.ts +1 -1
  31. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +1 -1
  32. package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +1 -1
  33. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +1 -1
  34. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +1 -1
  35. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +1 -1
  36. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +1 -1
  37. package/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.d.ts +1 -1
  38. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +1 -1
  39. package/hooks/core/useGridApiInitialization.d.ts +1 -1
  40. package/hooks/core/useGridApiInitialization.js +2 -2
  41. package/hooks/core/useGridInitialization.d.ts +1 -1
  42. package/hooks/core/useGridIsRtl.d.ts +1 -1
  43. package/hooks/core/useGridLocaleText.d.ts +1 -1
  44. package/hooks/core/useGridLoggerFactory.d.ts +1 -1
  45. package/hooks/core/useGridRefs.d.ts +1 -1
  46. package/hooks/core/useGridStateInitialization.d.ts +1 -1
  47. package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
  48. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  49. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +5 -7
  50. package/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  51. package/hooks/features/columnMenu/useGridColumnMenu.d.ts +1 -1
  52. package/hooks/features/columnResize/useGridColumnResize.d.ts +1 -1
  53. package/hooks/features/columnResize/useGridColumnResize.js +8 -6
  54. package/hooks/features/columns/gridColumnsUtils.d.ts +3 -3
  55. package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
  56. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  57. package/hooks/features/density/useGridDensity.d.ts +1 -1
  58. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  59. package/hooks/features/dimensions/useGridDimensions.js +1 -1
  60. package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
  61. package/hooks/features/editing/useGridEditing.d.ts +1 -1
  62. package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
  63. package/hooks/features/editing/useGridRowEditing.js +1 -1
  64. package/hooks/features/events/useGridEvents.d.ts +1 -1
  65. package/hooks/features/export/serializers/csvSerializer.d.ts +1 -1
  66. package/hooks/features/export/useGridCsvExport.d.ts +1 -1
  67. package/hooks/features/export/useGridPrintExport.d.ts +1 -1
  68. package/hooks/features/export/useGridPrintExport.js +1 -1
  69. package/hooks/features/export/utils.d.ts +1 -1
  70. package/hooks/features/filter/gridFilterSelector.js +6 -1
  71. package/hooks/features/filter/gridFilterUtils.d.ts +6 -6
  72. package/hooks/features/filter/gridFilterUtils.js +3 -3
  73. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  74. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  75. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
  76. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
  77. package/hooks/features/keyboardNavigation/utils.d.ts +2 -2
  78. package/hooks/features/listView/useGridListView.d.ts +1 -1
  79. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +3 -0
  80. package/hooks/features/pagination/gridPaginationSelector.d.ts +20 -1
  81. package/hooks/features/pagination/gridPaginationSelector.js +39 -1
  82. package/hooks/features/pagination/useGridPagination.d.ts +2 -2
  83. package/hooks/features/pagination/useGridPagination.js +5 -3
  84. package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
  85. package/hooks/features/pagination/useGridPaginationModel.d.ts +1 -1
  86. package/hooks/features/pagination/useGridPaginationModel.js +23 -1
  87. package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
  88. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
  89. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +2 -2
  90. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  91. package/hooks/features/rowSelection/useGridRowSelectionPreProcessors.d.ts +1 -1
  92. package/hooks/features/rowSelection/utils.d.ts +2 -2
  93. package/hooks/features/rows/gridRowSpanningUtils.d.ts +1 -1
  94. package/hooks/features/rows/gridRowsSelector.js +1 -1
  95. package/hooks/features/rows/gridRowsUtils.d.ts +3 -3
  96. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  97. package/hooks/features/rows/useGridRowSpanning.d.ts +1 -1
  98. package/hooks/features/rows/useGridRows.d.ts +1 -1
  99. package/hooks/features/rows/useGridRows.js +2 -2
  100. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  101. package/hooks/features/rows/useGridRowsPreProcessors.d.ts +1 -1
  102. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  103. package/hooks/features/sorting/gridSortingUtils.d.ts +2 -2
  104. package/hooks/features/sorting/gridSortingUtils.js +2 -2
  105. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  106. package/hooks/features/statePersistence/useGridStatePersistence.d.ts +1 -1
  107. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.d.ts +6 -0
  108. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  109. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +5 -4
  110. package/hooks/features/virtualization/useGridVirtualScroller.js +96 -43
  111. package/hooks/features/virtualization/useGridVirtualization.d.ts +1 -1
  112. package/hooks/utils/useGridApiContext.d.ts +1 -1
  113. package/hooks/utils/useGridApiEventHandler.d.ts +3 -3
  114. package/hooks/utils/useGridApiEventHandler.js +1 -1
  115. package/hooks/utils/useGridApiMethod.d.ts +1 -1
  116. package/hooks/utils/useGridApiRef.d.ts +1 -1
  117. package/hooks/utils/useGridInitializeState.d.ts +2 -2
  118. package/hooks/utils/useGridLogger.d.ts +1 -1
  119. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  120. package/hooks/utils/useGridPrivateApiContext.d.ts +1 -1
  121. package/hooks/utils/useGridSelector.d.ts +2 -2
  122. package/hooks/utils/useGridVisibleRows.d.ts +7 -5
  123. package/hooks/utils/useGridVisibleRows.js +5 -28
  124. package/index.js +1 -1
  125. package/internals/constants.d.ts +6 -0
  126. package/internals/constants.js +8 -1
  127. package/internals/index.d.ts +1 -0
  128. package/internals/index.js +1 -0
  129. package/internals/utils/attachPinnedStyle.d.ts +2 -0
  130. package/internals/utils/attachPinnedStyle.js +9 -0
  131. package/internals/utils/getPinnedCellOffset.d.ts +3 -3
  132. package/internals/utils/getPinnedCellOffset.js +6 -7
  133. package/internals/utils/index.d.ts +1 -0
  134. package/internals/utils/index.js +2 -1
  135. package/locales/urPK.js +9 -10
  136. package/models/api/gridCoreApi.d.ts +7 -7
  137. package/models/api/gridDensityApi.d.ts +1 -1
  138. package/models/colDef/gridColDef.d.ts +8 -8
  139. package/models/events/gridEventLookup.d.ts +6 -1
  140. package/models/gridExport.d.ts +1 -1
  141. package/models/gridFilterOperator.d.ts +1 -1
  142. package/models/gridStateCommunity.d.ts +4 -0
  143. package/models/props/DataGridProps.d.ts +1 -1
  144. package/modern/DataGrid/DataGrid.js +4 -5
  145. package/modern/DataGrid/useDataGridComponent.js +1 -1
  146. package/modern/components/GridHeaders.js +2 -2
  147. package/modern/components/GridRow.js +28 -105
  148. package/modern/components/GridSkeletonLoadingOverlay.js +18 -18
  149. package/modern/components/cell/GridCell.js +17 -35
  150. package/modern/components/cell/GridEditDateCell.js +1 -1
  151. package/modern/components/cell/GridEditInputCell.js +1 -1
  152. package/modern/components/cell/GridEditSingleSelectCell.js +2 -2
  153. package/modern/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  154. package/modern/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  155. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +4 -3
  156. package/modern/components/columnSelection/GridHeaderCheckbox.js +6 -2
  157. package/modern/components/containers/GridRoot.js +14 -6
  158. package/modern/components/containers/GridRootStyles.js +1 -0
  159. package/modern/components/panel/filterPanel/GridFilterInputValue.js +7 -10
  160. package/modern/components/virtualization/GridVirtualScrollbar.js +11 -12
  161. package/modern/components/virtualization/GridVirtualScroller.js +4 -4
  162. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +1 -1
  163. package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +1 -1
  164. package/modern/hooks/core/useGridApiInitialization.js +2 -2
  165. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  166. package/modern/hooks/features/columnResize/useGridColumnResize.js +8 -6
  167. package/modern/hooks/features/dimensions/useGridDimensions.js +1 -1
  168. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  169. package/modern/hooks/features/export/useGridPrintExport.js +1 -1
  170. package/modern/hooks/features/filter/gridFilterSelector.js +6 -1
  171. package/modern/hooks/features/filter/gridFilterUtils.js +3 -3
  172. package/modern/hooks/features/pagination/gridPaginationSelector.js +39 -1
  173. package/modern/hooks/features/pagination/useGridPagination.js +5 -3
  174. package/modern/hooks/features/pagination/useGridPaginationModel.js +23 -1
  175. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +2 -2
  176. package/modern/hooks/features/rows/gridRowsSelector.js +1 -1
  177. package/modern/hooks/features/rows/useGridRows.js +2 -2
  178. package/modern/hooks/features/sorting/gridSortingUtils.js +2 -2
  179. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  180. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +96 -43
  181. package/modern/hooks/utils/useGridApiEventHandler.js +1 -1
  182. package/modern/hooks/utils/useGridVisibleRows.js +5 -28
  183. package/modern/index.js +1 -1
  184. package/modern/internals/constants.js +8 -1
  185. package/modern/internals/index.js +1 -0
  186. package/modern/internals/utils/attachPinnedStyle.js +9 -0
  187. package/modern/internals/utils/getPinnedCellOffset.js +6 -7
  188. package/modern/internals/utils/index.js +2 -1
  189. package/modern/locales/urPK.js +9 -10
  190. package/modern/utils/cellBorderUtils.js +5 -5
  191. package/modern/utils/domUtils.js +7 -2
  192. package/modern/utils/rtlFlipSide.js +22 -0
  193. package/node/DataGrid/DataGrid.js +2 -3
  194. package/node/DataGrid/useDataGridComponent.js +1 -1
  195. package/node/components/GridHeaders.js +2 -2
  196. package/node/components/GridRow.js +27 -104
  197. package/node/components/GridSkeletonLoadingOverlay.js +17 -17
  198. package/node/components/cell/GridCell.js +18 -36
  199. package/node/components/cell/GridEditDateCell.js +1 -1
  200. package/node/components/cell/GridEditInputCell.js +1 -1
  201. package/node/components/cell/GridEditSingleSelectCell.js +2 -2
  202. package/node/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  203. package/node/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  204. package/node/components/columnSelection/GridCellCheckboxRenderer.js +3 -2
  205. package/node/components/columnSelection/GridHeaderCheckbox.js +6 -2
  206. package/node/components/containers/GridRoot.js +14 -6
  207. package/node/components/containers/GridRootStyles.js +1 -0
  208. package/node/components/panel/filterPanel/GridFilterInputValue.js +7 -10
  209. package/node/components/virtualization/GridVirtualScrollbar.js +11 -12
  210. package/node/components/virtualization/GridVirtualScroller.js +4 -4
  211. package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +1 -1
  212. package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +1 -1
  213. package/node/hooks/core/useGridApiInitialization.js +2 -2
  214. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +32 -74
  215. package/node/hooks/features/columnResize/useGridColumnResize.js +8 -6
  216. package/node/hooks/features/dimensions/useGridDimensions.js +1 -1
  217. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  218. package/node/hooks/features/export/useGridPrintExport.js +1 -1
  219. package/node/hooks/features/filter/gridFilterSelector.js +6 -1
  220. package/node/hooks/features/filter/gridFilterUtils.js +3 -3
  221. package/node/hooks/features/pagination/gridPaginationSelector.js +41 -3
  222. package/node/hooks/features/pagination/useGridPagination.js +5 -3
  223. package/node/hooks/features/pagination/useGridPaginationModel.js +23 -1
  224. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +2 -2
  225. package/node/hooks/features/rows/gridRowsSelector.js +1 -1
  226. package/node/hooks/features/rows/useGridRows.js +1 -1
  227. package/node/hooks/features/sorting/gridSortingUtils.js +2 -2
  228. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +49 -0
  229. package/node/hooks/features/virtualization/useGridVirtualScroller.js +96 -43
  230. package/node/hooks/utils/useGridApiEventHandler.js +1 -1
  231. package/node/hooks/utils/useGridVisibleRows.js +3 -28
  232. package/node/index.js +1 -1
  233. package/node/internals/constants.js +9 -2
  234. package/node/internals/index.js +12 -0
  235. package/node/internals/utils/attachPinnedStyle.js +15 -0
  236. package/node/internals/utils/getPinnedCellOffset.js +6 -7
  237. package/node/internals/utils/index.js +11 -0
  238. package/node/locales/urPK.js +9 -10
  239. package/node/utils/cellBorderUtils.js +5 -5
  240. package/node/utils/domUtils.js +7 -2
  241. package/node/utils/rtlFlipSide.js +29 -0
  242. package/package.json +2 -2
  243. package/utils/cellBorderUtils.d.ts +3 -3
  244. package/utils/cellBorderUtils.js +5 -5
  245. package/utils/createSelector.d.ts +2 -2
  246. package/utils/domUtils.js +7 -2
  247. package/utils/getPublicApiRef.d.ts +1 -1
  248. package/utils/rtlFlipSide.d.ts +2 -0
  249. package/utils/rtlFlipSide.js +22 -0
@@ -3,13 +3,13 @@ import { IconButtonProps } from '@mui/material/IconButton';
3
3
  import { MenuItemProps } from '@mui/material/MenuItem';
4
4
  interface GridActionsCellItemCommonProps {
5
5
  label: string;
6
- icon?: React.ReactElement;
6
+ icon?: React.ReactElement<any>;
7
7
  /** from https://mui.com/material-ui/api/button-base/#ButtonBase-prop-component */
8
8
  component?: React.ElementType;
9
9
  }
10
10
  export type GridActionsCellItemProps = GridActionsCellItemCommonProps & (({
11
11
  showInMenu?: false;
12
- icon: React.ReactElement;
12
+ icon: React.ReactElement<any>;
13
13
  } & Omit<IconButtonProps, 'component'>) | ({
14
14
  showInMenu: true;
15
15
  /**
@@ -21,7 +21,7 @@ export type GridActionsCellItemProps = GridActionsCellItemCommonProps & (({
21
21
  } & Omit<MenuItemProps, 'component'>));
22
22
  declare const GridActionsCellItem: React.ForwardRefExoticComponent<GridActionsCellItemProps> | React.ForwardRefExoticComponent<(Omit<GridActionsCellItemCommonProps & {
23
23
  showInMenu?: false;
24
- icon: React.ReactElement;
24
+ icon: React.ReactElement<any>;
25
25
  } & Omit<IconButtonProps, "component">, "ref"> | Omit<GridActionsCellItemCommonProps & {
26
26
  showInMenu: true;
27
27
  /**
@@ -2,12 +2,7 @@ import * as React from 'react';
2
2
  import { GridRowId, GridEditCellProps } from '../../models';
3
3
  import { GridColDef, GridAlignment } from '../../models/colDef/gridColDef';
4
4
  import { GridPinnedColumnPosition } from '../../hooks/features/columns/gridColumnsInterfaces';
5
- export declare enum PinnedPosition {
6
- NONE = 0,
7
- LEFT = 1,
8
- RIGHT = 2,
9
- VIRTUAL = 3
10
- }
5
+ import { PinnedColumnPosition } from '../../internals/constants';
11
6
  export declare const gridPinnedColumnPositionLookup: {
12
7
  1: GridPinnedColumnPosition;
13
8
  2: GridPinnedColumnPosition;
@@ -25,11 +20,10 @@ export type GridCellProps = React.HTMLAttributes<HTMLDivElement> & {
25
20
  disableDragEvents?: boolean;
26
21
  isNotVisible: boolean;
27
22
  editCellState: GridEditCellProps<any> | null;
28
- pinnedOffset: number;
29
- pinnedPosition: PinnedPosition;
30
- sectionIndex: number;
31
- sectionLength: number;
32
- gridHasFiller: boolean;
23
+ pinnedOffset?: number;
24
+ pinnedPosition: PinnedColumnPosition;
25
+ showRightBorder: boolean;
26
+ showLeftBorder: boolean;
33
27
  onClick?: React.MouseEventHandler<HTMLDivElement>;
34
28
  onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;
35
29
  onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
@@ -58,11 +52,10 @@ declare const MemoizedGridCell: React.ForwardRefExoticComponent<GridCellProps> |
58
52
  disableDragEvents?: boolean;
59
53
  isNotVisible: boolean;
60
54
  editCellState: GridEditCellProps<any> | null;
61
- pinnedOffset: number;
62
- pinnedPosition: PinnedPosition;
63
- sectionIndex: number;
64
- sectionLength: number;
65
- gridHasFiller: boolean;
55
+ pinnedOffset?: number;
56
+ pinnedPosition: PinnedColumnPosition;
57
+ showRightBorder: boolean;
58
+ showLeftBorder: boolean;
66
59
  onClick?: React.MouseEventHandler<HTMLDivElement>;
67
60
  onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;
68
61
  onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "sectionIndex", "sectionLength", "gridHasFiller", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
3
+ const _excluded = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "showRightBorder", "showLeftBorder", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
4
4
  _excluded2 = ["changeReason", "unstable_updateValueOnRender"];
5
5
  import * as React from 'react';
6
6
  import PropTypes from 'prop-types';
@@ -16,22 +16,16 @@ import { useGridSelector, objectShallowCompare } from "../../hooks/utils/useGrid
16
16
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
17
17
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
18
18
  import { gridFocusCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
19
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
20
19
  import { GridPinnedColumnPosition } from "../../hooks/features/columns/gridColumnsInterfaces.js";
20
+ import { PinnedColumnPosition } from "../../internals/constants.js";
21
21
  import { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from "../../hooks/features/rows/gridRowSpanningSelectors.js";
22
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
22
23
  import { jsx as _jsx } from "react/jsx-runtime";
23
- export let PinnedPosition = /*#__PURE__*/function (PinnedPosition) {
24
- PinnedPosition[PinnedPosition["NONE"] = 0] = "NONE";
25
- PinnedPosition[PinnedPosition["LEFT"] = 1] = "LEFT";
26
- PinnedPosition[PinnedPosition["RIGHT"] = 2] = "RIGHT";
27
- PinnedPosition[PinnedPosition["VIRTUAL"] = 3] = "VIRTUAL";
28
- return PinnedPosition;
29
- }({});
30
24
  export const gridPinnedColumnPositionLookup = {
31
- [PinnedPosition.LEFT]: GridPinnedColumnPosition.LEFT,
32
- [PinnedPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,
33
- [PinnedPosition.NONE]: undefined,
34
- [PinnedPosition.VIRTUAL]: undefined
25
+ [PinnedColumnPosition.LEFT]: GridPinnedColumnPosition.LEFT,
26
+ [PinnedColumnPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,
27
+ [PinnedColumnPosition.NONE]: undefined,
28
+ [PinnedColumnPosition.VIRTUAL]: undefined
35
29
  };
36
30
  const EMPTY_CELL_PARAMS = {
37
31
  id: -1,
@@ -69,7 +63,7 @@ const useUtilityClasses = ownerState => {
69
63
  classes
70
64
  } = ownerState;
71
65
  const slots = {
72
- root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']
66
+ root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']
73
67
  };
74
68
  return composeClasses(slots, getDataGridUtilityClass, classes);
75
69
  };
@@ -92,9 +86,8 @@ const GridCell = forwardRef(function GridCell(props, ref) {
92
86
  isNotVisible,
93
87
  pinnedOffset,
94
88
  pinnedPosition,
95
- sectionIndex,
96
- sectionLength,
97
- gridHasFiller,
89
+ showRightBorder,
90
+ showLeftBorder,
98
91
  onClick,
99
92
  onDoubleClick,
100
93
  onMouseDown,
@@ -161,9 +154,6 @@ const GridCell = forwardRef(function GridCell(props, ref) {
161
154
  const handleRef = useForkRef(ref, cellRef);
162
155
  const focusElementRef = React.useRef(null);
163
156
  const isSelectionMode = rootProps.cellSelection ?? false;
164
- const position = gridPinnedColumnPositionLookup[pinnedPosition];
165
- const showLeftBorder = shouldCellShowLeftBorder(position, sectionIndex);
166
- const showRightBorder = shouldCellShowRightBorder(position, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
167
157
  const ownerState = {
168
158
  align,
169
159
  showLeftBorder,
@@ -212,18 +202,11 @@ const GridCell = forwardRef(function GridCell(props, ref) {
212
202
  border: 0
213
203
  };
214
204
  }
215
- const cellStyle = _extends({
205
+ const cellStyle = attachPinnedStyle(_extends({
216
206
  '--width': `${width}px`
217
- }, styleProp);
218
- const isLeftPinned = pinnedPosition === PinnedPosition.LEFT;
219
- const isRightPinned = pinnedPosition === PinnedPosition.RIGHT;
220
- if (isLeftPinned || isRightPinned) {
221
- let side = isLeftPinned ? 'left' : 'right';
222
- if (isRtl) {
223
- side = isLeftPinned ? 'right' : 'left';
224
- }
225
- cellStyle[side] = pinnedOffset;
226
- }
207
+ }, styleProp), isRtl, pinnedPosition, pinnedOffset);
208
+ const isLeftPinned = pinnedPosition === PinnedColumnPosition.LEFT;
209
+ const isRightPinned = pinnedPosition === PinnedColumnPosition.RIGHT;
227
210
  if (rowSpan > 1) {
228
211
  cellStyle.height = `calc(var(--height) * ${rowSpan})`;
229
212
  cellStyle.zIndex = 5;
@@ -353,13 +336,12 @@ process.env.NODE_ENV !== "production" ? GridCell.propTypes = {
353
336
  isValidating: PropTypes.bool,
354
337
  value: PropTypes.any
355
338
  }),
356
- gridHasFiller: PropTypes.bool.isRequired,
357
339
  isNotVisible: PropTypes.bool.isRequired,
358
- pinnedOffset: PropTypes.number.isRequired,
340
+ pinnedOffset: PropTypes.number,
359
341
  pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]).isRequired,
360
342
  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
361
- sectionIndex: PropTypes.number.isRequired,
362
- sectionLength: PropTypes.number.isRequired,
343
+ showLeftBorder: PropTypes.bool.isRequired,
344
+ showRightBorder: PropTypes.bool.isRequired,
363
345
  width: PropTypes.number.isRequired
364
346
  } : void 0;
365
347
  const MemoizedGridCell = fastMemo(GridCell);
@@ -35,7 +35,7 @@ function GridEditDateCell(props) {
35
35
  other = _objectWithoutPropertiesLoose(props, _excluded);
36
36
  const isDateTime = colDef.type === 'dateTime';
37
37
  const apiRef = useGridApiContext();
38
- const inputRef = React.useRef();
38
+ const inputRef = React.useRef(null);
39
39
  const valueTransformed = React.useMemo(() => {
40
40
  let parsedDate;
41
41
  if (valueProp == null) {
@@ -47,7 +47,7 @@ const GridEditInputCell = forwardRef((props, ref) => {
47
47
  } = props,
48
48
  other = _objectWithoutPropertiesLoose(props, _excluded);
49
49
  const apiRef = useGridApiContext();
50
- const inputRef = React.useRef();
50
+ const inputRef = React.useRef(null);
51
51
  const [valueState, setValueState] = React.useState(value);
52
52
  const classes = useUtilityClasses(rootProps);
53
53
  const handleChange = React.useCallback(async event => {
@@ -30,8 +30,8 @@ function GridEditSingleSelectCell(props) {
30
30
  } = props,
31
31
  other = _objectWithoutPropertiesLoose(props, _excluded);
32
32
  const apiRef = useGridApiContext();
33
- const ref = React.useRef();
34
- const inputRef = React.useRef();
33
+ const ref = React.useRef(null);
34
+ const inputRef = React.useRef(null);
35
35
  const [open, setOpen] = React.useState(initialOpen);
36
36
  const baseSelectProps = rootProps.slotProps?.baseSelect || {};
37
37
  const isSelectNative = baseSelectProps.native ?? false;
@@ -5,6 +5,6 @@ export interface ColumnHeaderMenuIconProps {
5
5
  columnMenuId: string;
6
6
  columnMenuButtonId: string;
7
7
  open: boolean;
8
- iconButtonRef: React.RefObject<HTMLButtonElement>;
8
+ iconButtonRef: React.RefObject<HTMLButtonElement | null>;
9
9
  }
10
10
  export declare const ColumnHeaderMenuIcon: React.MemoExoticComponent<(props: ColumnHeaderMenuIconProps) => React.JSX.Element>;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { GridPinnedColumnPosition } from '../../hooks/features/columns/gridColumnsInterfaces';
2
+ import { PinnedColumnPosition } from '../../internals/constants';
3
3
  interface GridColumnGroupHeaderProps {
4
4
  groupId: string | null;
5
5
  width: number;
@@ -11,11 +11,11 @@ interface GridColumnGroupHeaderProps {
11
11
  height: number;
12
12
  hasFocus?: boolean;
13
13
  tabIndex: 0 | -1;
14
- pinnedPosition?: GridPinnedColumnPosition;
15
14
  style?: React.CSSProperties;
16
- indexInSection: number;
17
- sectionLength: number;
18
- gridHasFiller: boolean;
15
+ showLeftBorder: boolean;
16
+ showRightBorder: boolean;
17
+ pinnedPosition: PinnedColumnPosition | undefined;
18
+ pinnedOffset?: number;
19
19
  }
20
20
  declare function GridColumnGroupHeader(props: GridColumnGroupHeaderProps): React.JSX.Element;
21
21
  export { GridColumnGroupHeader };
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { unstable_useId as useId, unstable_composeClasses as composeClasses } from '@mui/utils';
4
+ import { useRtl } from '@mui/system/RtlProvider';
4
5
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
5
6
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
6
7
  import { gridColumnGroupsLookupSelector } from "../../hooks/features/columnGrouping/gridColumnGroupsSelector.js";
@@ -8,7 +9,8 @@ import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
8
9
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
9
10
  import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
10
11
  import { isEventTargetInPortal } from "../../utils/domUtils.js";
11
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
12
+ import { PinnedColumnPosition } from "../../internals/constants.js";
13
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
12
14
  import { jsx as _jsx } from "react/jsx-runtime";
13
15
  const useUtilityClasses = ownerState => {
14
16
  const {
@@ -22,7 +24,7 @@ const useUtilityClasses = ownerState => {
22
24
  pinnedPosition
23
25
  } = ownerState;
24
26
  const slots = {
25
- root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
27
+ root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
26
28
  draggableContainer: ['columnHeaderDraggableContainer'],
27
29
  titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],
28
30
  titleContainerContent: ['columnHeaderTitleContainerContent']
@@ -42,12 +44,10 @@ function GridColumnGroupHeader(props) {
42
44
  tabIndex,
43
45
  isLastColumn,
44
46
  pinnedPosition,
45
- style,
46
- indexInSection,
47
- sectionLength,
48
- gridHasFiller
47
+ pinnedOffset
49
48
  } = props;
50
49
  const rootProps = useGridRootProps();
50
+ const isRtl = useRtl();
51
51
  const headerCellRef = React.useRef(null);
52
52
  const apiRef = useGridApiContext();
53
53
  const columnGroupsLookup = useGridSelector(apiRef, gridColumnGroupsLookupSelector);
@@ -72,12 +72,8 @@ function GridColumnGroupHeader(props) {
72
72
  if (groupId && render) {
73
73
  headerComponent = render(renderParams);
74
74
  }
75
- const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
76
- const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
77
75
  const ownerState = _extends({}, props, {
78
76
  classes: rootProps.classes,
79
- showLeftBorder,
80
- showRightBorder,
81
77
  headerAlign,
82
78
  depth,
83
79
  isDragging: false
@@ -110,6 +106,7 @@ function GridColumnGroupHeader(props) {
110
106
  onBlur: publish('columnGroupHeaderBlur')
111
107
  }), [publish]);
112
108
  const headerClassName = typeof group.headerClassName === 'function' ? group.headerClassName(renderParams) : group.headerClassName;
109
+ const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
113
110
  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
114
111
  ref: headerCellRef,
115
112
  classes: classes,
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { GridStateColDef } from '../../models/colDef/gridColDef';
3
3
  import { GridSortDirection } from '../../models/gridSortModel';
4
4
  import { GridColumnHeaderSeparatorProps } from './GridColumnHeaderSeparator';
5
- import { GridPinnedColumnPosition } from '../../hooks/features/columns/gridColumnsInterfaces';
5
+ import { PinnedColumnPosition } from '../../internals/constants';
6
6
  interface GridColumnHeaderItemProps {
7
7
  colIndex: number;
8
8
  colDef: GridStateColDef;
@@ -18,13 +18,13 @@ interface GridColumnHeaderItemProps {
18
18
  tabIndex: 0 | -1;
19
19
  disableReorder?: boolean;
20
20
  separatorSide?: GridColumnHeaderSeparatorProps['side'];
21
- pinnedPosition?: GridPinnedColumnPosition;
21
+ pinnedPosition?: PinnedColumnPosition;
22
+ pinnedOffset?: number;
22
23
  style?: React.CSSProperties;
23
- indexInSection: number;
24
- sectionLength: number;
25
- gridHasFiller: boolean;
26
24
  isLastUnpinned: boolean;
27
25
  isSiblingFocused: boolean;
26
+ showLeftBorder: boolean;
27
+ showRightBorder: boolean;
28
28
  }
29
29
  declare function GridColumnHeaderItem(props: GridColumnHeaderItemProps): React.JSX.Element;
30
30
  declare namespace GridColumnHeaderItem {
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
4
4
  import clsx from 'clsx';
5
5
  import { unstable_composeClasses as composeClasses, unstable_useId as useId } from '@mui/utils';
6
6
  import { fastMemo } from '@mui/x-internals/fastMemo';
7
+ import { useRtl } from '@mui/system/RtlProvider';
7
8
  import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
8
9
  import { ColumnHeaderMenuIcon } from "./ColumnHeaderMenuIcon.js";
9
10
  import { GridColumnHeaderMenu } from "../menu/columnMenu/GridColumnHeaderMenu.js";
@@ -11,7 +12,8 @@ import { gridClasses, getDataGridUtilityClass } from "../../constants/gridClasse
11
12
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
12
13
  import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
13
14
  import { isEventTargetInPortal } from "../../utils/domUtils.js";
14
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
15
+ import { PinnedColumnPosition } from "../../internals/constants.js";
16
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
15
17
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
18
  const useUtilityClasses = ownerState => {
17
19
  const {
@@ -31,7 +33,7 @@ const useUtilityClasses = ownerState => {
31
33
  // todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work
32
34
  const isColumnNumeric = colDef.type === 'number';
33
35
  const slots = {
34
- root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight',
36
+ root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight',
35
37
  // TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom
36
38
  // See https://github.com/mui/mui-x/pull/14559
37
39
  isLastUnpinned && 'columnHeader--lastUnpinned', isSiblingFocused && 'columnHeader--siblingFocused'],
@@ -56,14 +58,14 @@ function GridColumnHeaderItem(props) {
56
58
  tabIndex,
57
59
  disableReorder,
58
60
  separatorSide,
59
- style,
61
+ showLeftBorder,
62
+ showRightBorder,
60
63
  pinnedPosition,
61
- indexInSection,
62
- sectionLength,
63
- gridHasFiller
64
+ pinnedOffset
64
65
  } = props;
65
66
  const apiRef = useGridPrivateApiContext();
66
67
  const rootProps = useGridRootProps();
68
+ const isRtl = useRtl();
67
69
  const headerCellRef = React.useRef(null);
68
70
  const columnMenuId = useId();
69
71
  const columnMenuButtonId = useId();
@@ -74,8 +76,6 @@ function GridColumnHeaderItem(props) {
74
76
  if (colDef.renderHeader) {
75
77
  headerComponent = colDef.renderHeader(apiRef.current.getColumnHeaderParams(colDef.field));
76
78
  }
77
- const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
78
- const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
79
79
  const ownerState = _extends({}, props, {
80
80
  classes: rootProps.classes,
81
81
  showRightBorder,
@@ -171,6 +171,7 @@ function GridColumnHeaderItem(props) {
171
171
  colDef
172
172
  }) : colDef.headerClassName;
173
173
  const label = colDef.headerName ?? colDef.field;
174
+ const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
174
175
  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
175
176
  ref: headerCellRef,
176
177
  classes: classes,
@@ -209,18 +210,18 @@ process.env.NODE_ENV !== "production" ? GridColumnHeaderItem.propTypes = {
209
210
  columnMenuOpen: PropTypes.bool.isRequired,
210
211
  disableReorder: PropTypes.bool,
211
212
  filterItemsCounter: PropTypes.number,
212
- gridHasFiller: PropTypes.bool.isRequired,
213
213
  hasFocus: PropTypes.bool,
214
214
  headerHeight: PropTypes.number.isRequired,
215
- indexInSection: PropTypes.number.isRequired,
216
215
  isDragging: PropTypes.bool.isRequired,
217
216
  isLast: PropTypes.bool.isRequired,
218
217
  isLastUnpinned: PropTypes.bool.isRequired,
219
218
  isResizing: PropTypes.bool.isRequired,
220
219
  isSiblingFocused: PropTypes.bool.isRequired,
221
- pinnedPosition: PropTypes.oneOf(['left', 'right']),
222
- sectionLength: PropTypes.number.isRequired,
220
+ pinnedOffset: PropTypes.number,
221
+ pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]),
223
222
  separatorSide: PropTypes.oneOf(['left', 'right']),
223
+ showLeftBorder: PropTypes.bool.isRequired,
224
+ showRightBorder: PropTypes.bool.isRequired,
224
225
  sortDirection: PropTypes.oneOf(['asc', 'desc']),
225
226
  sortIndex: PropTypes.number,
226
227
  style: PropTypes.object,
@@ -8,7 +8,7 @@ import { forwardRef } from '@mui/x-internals/forwardRef';
8
8
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
9
9
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
10
10
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
11
- import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
11
+ import { objectShallowCompare, useGridSelector } from "../../hooks/utils/useGridSelector.js";
12
12
  import { getCheckboxPropsSelector } from "../../hooks/features/rowSelection/utils.js";
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  const useUtilityClasses = ownerState => {
@@ -76,7 +76,7 @@ const GridCellCheckboxForwardRef = forwardRef(function GridCellCheckboxRenderer(
76
76
  const {
77
77
  isIndeterminate,
78
78
  isChecked
79
- } = useGridSelector(apiRef, checkboxPropsSelector);
79
+ } = useGridSelector(apiRef, checkboxPropsSelector, objectShallowCompare);
80
80
  if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {
81
81
  return null;
82
82
  }
@@ -88,7 +88,8 @@ const GridCellCheckboxForwardRef = forwardRef(function GridCellCheckboxRenderer(
88
88
  onChange: handleChange,
89
89
  className: classes.root,
90
90
  inputProps: {
91
- 'aria-label': label
91
+ 'aria-label': label,
92
+ name: 'select_row'
92
93
  },
93
94
  onKeyDown: handleKeyDown,
94
95
  indeterminate: isIndeterminate,
@@ -42,13 +42,16 @@ const GridHeaderCheckbox = forwardRef(function GridHeaderCheckbox(props, ref) {
42
42
  return selection;
43
43
  }
44
44
  return selection.filter(id => {
45
+ if (rootProps.keepNonExistentRowsSelected) {
46
+ return true;
47
+ }
45
48
  // The row might have been deleted
46
49
  if (!apiRef.current.getRow(id)) {
47
50
  return false;
48
51
  }
49
52
  return rootProps.isRowSelectable(apiRef.current.getRowParams(id));
50
53
  });
51
- }, [apiRef, rootProps.isRowSelectable, selection]);
54
+ }, [apiRef, rootProps.isRowSelectable, selection, rootProps.keepNonExistentRowsSelected]);
52
55
 
53
56
  // All the rows that could be selected / unselected by toggling this checkbox
54
57
  const selectionCandidates = React.useMemo(() => {
@@ -101,7 +104,8 @@ const GridHeaderCheckbox = forwardRef(function GridHeaderCheckbox(props, ref) {
101
104
  onChange: handleChange,
102
105
  className: classes.root,
103
106
  inputProps: {
104
- 'aria-label': label
107
+ 'aria-label': label,
108
+ name: 'select_all_rows'
105
109
  },
106
110
  tabIndex: tabIndex,
107
111
  onKeyDown: handleKeyDown,
@@ -7,5 +7,5 @@ export interface GridRootProps extends React.HTMLAttributes<HTMLDivElement> {
7
7
  */
8
8
  sx?: SxProps<Theme>;
9
9
  }
10
- declare const GridRoot: React.ForwardRefExoticComponent<GridRootProps> | React.ForwardRefExoticComponent<GridRootProps & React.RefAttributes<HTMLDivElement>>;
11
- export { GridRoot };
10
+ declare const MemoizedGridRoot: React.ForwardRefExoticComponent<GridRootProps> | React.ForwardRefExoticComponent<GridRootProps & React.RefAttributes<HTMLDivElement>>;
11
+ export { MemoizedGridRoot as GridRoot };
@@ -1,10 +1,11 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["className"];
3
+ const _excluded = ["className", "children"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
7
  import { unstable_useForkRef as useForkRef, unstable_useEnhancedEffect as useEnhancedEffect, unstable_capitalize as capitalize, unstable_composeClasses as composeClasses } from '@mui/utils';
8
+ import { fastMemo } from '@mui/x-internals/fastMemo';
8
9
  import { forwardRef } from '@mui/x-internals/forwardRef';
9
10
  import { GridRootStyles } from "./GridRootStyles.js";
10
11
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
@@ -12,7 +13,9 @@ import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiCon
12
13
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
13
14
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
14
15
  import { gridDensitySelector } from "../../hooks/features/density/densitySelector.js";
15
- import { jsx as _jsx } from "react/jsx-runtime";
16
+ import { GridHeader } from "../GridHeader.js";
17
+ import { GridBody, GridFooterPlaceholder } from "../base/index.js";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
19
  const useUtilityClasses = (ownerState, density) => {
17
20
  const {
18
21
  autoHeight,
@@ -27,7 +30,8 @@ const useUtilityClasses = (ownerState, density) => {
27
30
  const GridRoot = forwardRef(function GridRoot(props, ref) {
28
31
  const rootProps = useGridRootProps();
29
32
  const {
30
- className
33
+ className,
34
+ children
31
35
  } = props,
32
36
  other = _objectWithoutPropertiesLoose(props, _excluded);
33
37
  const apiRef = useGridPrivateApiContext();
@@ -45,11 +49,14 @@ const GridRoot = forwardRef(function GridRoot(props, ref) {
45
49
  if (!mountedState) {
46
50
  return null;
47
51
  }
48
- return /*#__PURE__*/_jsx(GridRootStyles, _extends({
52
+ return /*#__PURE__*/_jsxs(GridRootStyles, _extends({
49
53
  className: clsx(classes.root, className),
50
54
  ownerState: ownerState
51
55
  }, other, {
52
- ref: handleRef
56
+ ref: handleRef,
57
+ children: [/*#__PURE__*/_jsx(GridHeader, {}), /*#__PURE__*/_jsx(GridBody, {
58
+ children: children
59
+ }), /*#__PURE__*/_jsx(GridFooterPlaceholder, {})]
53
60
  }));
54
61
  });
55
62
  process.env.NODE_ENV !== "production" ? GridRoot.propTypes = {
@@ -62,4 +69,5 @@ process.env.NODE_ENV !== "production" ? GridRoot.propTypes = {
62
69
  */
63
70
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
64
71
  } : void 0;
65
- export { GridRoot };
72
+ const MemoizedGridRoot = fastMemo(GridRoot);
73
+ export { MemoizedGridRoot as GridRoot };
@@ -544,6 +544,7 @@ export const GridRootStyles = styled('div', {
544
544
  lineHeight: 'inherit'
545
545
  },
546
546
  [`& .${c.cellEmpty}`]: {
547
+ flex: 1,
547
548
  padding: 0,
548
549
  height: 'unset'
549
550
  },
@@ -16,7 +16,7 @@ export interface GridPanelProps extends Partial<React.ComponentProps<typeof Grid
16
16
  open: boolean;
17
17
  }
18
18
  export declare const gridPanelClasses: Record<keyof GridPanelClasses, string>;
19
- declare const GridPanelRoot: import("@emotion/styled").StyledComponent<Pick<import("@mui/material").PopperProps & React.RefAttributes<HTMLDivElement>, "hidden" | "color" | "content" | "style" | "open" | "translate" | "container" | "transition" | "slot" | "title" | "ref" | "suppressHydrationWarning" | "className" | "id" | "lang" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "component" | "sx" | "components" | "componentsProps" | "placement" | "disablePortal" | "modifiers" | "anchorEl" | "keepMounted" | "popperOptions" | "popperRef" | "slotProps" | "slots"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
19
+ declare const GridPanelRoot: import("@emotion/styled").StyledComponent<Pick<import("@mui/material").PopperProps & React.RefAttributes<HTMLDivElement>, "id" | "children" | "tabIndex" | "color" | "content" | "translate" | "container" | "transition" | "slot" | "style" | "title" | "ref" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "lang" | "nonce" | "spellCheck" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "sx" | "components" | "componentsProps" | "slotProps" | "slots" | "open" | "component" | "disablePortal" | "anchorEl" | "keepMounted" | "modifiers" | "placement" | "popperOptions" | "popperRef"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
20
20
  ownerState: OwnerState;
21
21
  }, {}, {}>;
22
22
  declare const GridPanel: React.ForwardRefExoticComponent<GridPanelProps> | React.ForwardRefExoticComponent<Omit<GridPanelProps, "ref"> & React.RefAttributes<HTMLDivElement>>;