@mui/x-data-grid 7.11.1 → 7.12.1

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 (148) hide show
  1. package/CHANGELOG.md +178 -4
  2. package/components/GridHeaders.js +1 -4
  3. package/components/GridPagination.js +2 -0
  4. package/components/GridRow.d.ts +1 -0
  5. package/components/GridRow.js +11 -28
  6. package/components/GridRowCount.js +1 -1
  7. package/components/GridSelectedRowCount.js +1 -1
  8. package/components/base/GridOverlays.js +1 -1
  9. package/components/cell/GridBooleanCell.js +3 -3
  10. package/components/columnHeaders/ColumnHeaderMenuIcon.js +1 -1
  11. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  12. package/components/columnHeaders/GridColumnGroupHeader.js +2 -1
  13. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -1
  14. package/components/columnHeaders/GridColumnHeaderTitle.js +1 -1
  15. package/components/columnHeaders/GridIconButtonContainer.js +1 -1
  16. package/components/columnSelection/GridHeaderCheckbox.js +1 -1
  17. package/components/columnsManagement/GridColumnsManagement.js +1 -1
  18. package/components/containers/GridFooterContainer.js +1 -1
  19. package/components/containers/GridOverlay.js +1 -1
  20. package/components/containers/GridRoot.js +4 -7
  21. package/components/containers/GridRootStyles.js +26 -6
  22. package/components/containers/GridToolbarContainer.js +1 -1
  23. package/components/panel/GridPanelContent.js +1 -1
  24. package/components/panel/GridPanelFooter.js +1 -1
  25. package/components/panel/GridPanelHeader.js +1 -1
  26. package/components/panel/GridPanelWrapper.js +1 -1
  27. package/components/virtualization/GridBottomContainer.js +1 -1
  28. package/components/virtualization/GridTopContainer.js +2 -13
  29. package/components/virtualization/GridVirtualScrollbar.js +1 -0
  30. package/components/virtualization/GridVirtualScroller.js +1 -1
  31. package/components/virtualization/GridVirtualScrollerContent.js +1 -1
  32. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
  33. package/constants/gridClasses.d.ts +10 -0
  34. package/constants/gridClasses.js +1 -1
  35. package/hooks/core/useGridRefs.js +3 -1
  36. package/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -0
  37. package/hooks/features/editing/useGridEditing.js +2 -2
  38. package/hooks/features/rowSelection/useGridRowSelection.js +2 -3
  39. package/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js +1 -1
  40. package/hooks/features/rows/gridRowsUtils.d.ts +2 -1
  41. package/hooks/features/rows/gridRowsUtils.js +3 -2
  42. package/hooks/features/rows/index.d.ts +1 -1
  43. package/hooks/features/rows/index.js +1 -1
  44. package/hooks/features/rows/useGridRows.js +3 -3
  45. package/hooks/features/sorting/gridSortingSelector.js +2 -2
  46. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
  47. package/hooks/features/virtualization/useGridVirtualScroller.js +13 -5
  48. package/index.js +1 -1
  49. package/internals/utils/useProps.js +1 -6
  50. package/locales/trTR.js +19 -21
  51. package/models/api/gridCoreApi.d.ts +1 -1
  52. package/modern/components/GridHeaders.js +1 -4
  53. package/modern/components/GridPagination.js +2 -0
  54. package/modern/components/GridRow.js +11 -28
  55. package/modern/components/GridRowCount.js +1 -1
  56. package/modern/components/GridSelectedRowCount.js +1 -1
  57. package/modern/components/base/GridOverlays.js +1 -1
  58. package/modern/components/cell/GridBooleanCell.js +3 -3
  59. package/modern/components/columnHeaders/ColumnHeaderMenuIcon.js +1 -1
  60. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  61. package/modern/components/columnHeaders/GridColumnGroupHeader.js +2 -1
  62. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -1
  63. package/modern/components/columnHeaders/GridColumnHeaderTitle.js +1 -1
  64. package/modern/components/columnHeaders/GridIconButtonContainer.js +1 -1
  65. package/modern/components/columnSelection/GridHeaderCheckbox.js +1 -1
  66. package/modern/components/columnsManagement/GridColumnsManagement.js +1 -1
  67. package/modern/components/containers/GridFooterContainer.js +1 -1
  68. package/modern/components/containers/GridOverlay.js +1 -1
  69. package/modern/components/containers/GridRoot.js +4 -7
  70. package/modern/components/containers/GridRootStyles.js +26 -6
  71. package/modern/components/containers/GridToolbarContainer.js +1 -1
  72. package/modern/components/panel/GridPanelContent.js +1 -1
  73. package/modern/components/panel/GridPanelFooter.js +1 -1
  74. package/modern/components/panel/GridPanelHeader.js +1 -1
  75. package/modern/components/panel/GridPanelWrapper.js +1 -1
  76. package/modern/components/virtualization/GridBottomContainer.js +1 -1
  77. package/modern/components/virtualization/GridTopContainer.js +2 -13
  78. package/modern/components/virtualization/GridVirtualScrollbar.js +1 -0
  79. package/modern/components/virtualization/GridVirtualScroller.js +1 -1
  80. package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -1
  81. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +1 -1
  82. package/modern/constants/gridClasses.js +1 -1
  83. package/modern/hooks/core/useGridRefs.js +3 -1
  84. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -0
  85. package/modern/hooks/features/editing/useGridEditing.js +2 -2
  86. package/modern/hooks/features/rowSelection/useGridRowSelection.js +2 -3
  87. package/modern/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js +1 -1
  88. package/modern/hooks/features/rows/gridRowsUtils.js +3 -2
  89. package/modern/hooks/features/rows/index.js +1 -1
  90. package/modern/hooks/features/rows/useGridRows.js +3 -3
  91. package/modern/hooks/features/sorting/gridSortingSelector.js +2 -2
  92. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +13 -5
  93. package/modern/index.js +1 -1
  94. package/modern/internals/utils/useProps.js +1 -6
  95. package/modern/locales/trTR.js +19 -21
  96. package/modern/utils/composeGridClasses.js +5 -0
  97. package/modern/utils/platform.js +2 -0
  98. package/node/components/GridHeaders.js +1 -4
  99. package/node/components/GridPagination.js +2 -0
  100. package/node/components/GridRow.js +9 -26
  101. package/node/components/GridRowCount.js +2 -2
  102. package/node/components/GridSelectedRowCount.js +2 -2
  103. package/node/components/base/GridOverlays.js +2 -2
  104. package/node/components/cell/GridBooleanCell.js +3 -3
  105. package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -2
  106. package/node/components/columnHeaders/GridBaseColumnHeaders.js +2 -2
  107. package/node/components/columnHeaders/GridColumnGroupHeader.js +2 -1
  108. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +2 -2
  109. package/node/components/columnHeaders/GridColumnHeaderTitle.js +2 -2
  110. package/node/components/columnHeaders/GridIconButtonContainer.js +2 -2
  111. package/node/components/columnSelection/GridHeaderCheckbox.js +4 -4
  112. package/node/components/columnsManagement/GridColumnsManagement.js +5 -5
  113. package/node/components/containers/GridFooterContainer.js +2 -2
  114. package/node/components/containers/GridOverlay.js +2 -2
  115. package/node/components/containers/GridRoot.js +4 -7
  116. package/node/components/containers/GridRootStyles.js +26 -6
  117. package/node/components/containers/GridToolbarContainer.js +2 -2
  118. package/node/components/panel/GridPanelContent.js +2 -2
  119. package/node/components/panel/GridPanelFooter.js +2 -2
  120. package/node/components/panel/GridPanelHeader.js +2 -2
  121. package/node/components/panel/GridPanelWrapper.js +2 -2
  122. package/node/components/virtualization/GridBottomContainer.js +2 -2
  123. package/node/components/virtualization/GridTopContainer.js +3 -14
  124. package/node/components/virtualization/GridVirtualScrollbar.js +1 -0
  125. package/node/components/virtualization/GridVirtualScroller.js +2 -2
  126. package/node/components/virtualization/GridVirtualScrollerContent.js +2 -2
  127. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -2
  128. package/node/constants/gridClasses.js +1 -1
  129. package/node/hooks/core/useGridRefs.js +3 -1
  130. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +3 -0
  131. package/node/hooks/features/editing/useGridEditing.js +1 -1
  132. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -3
  133. package/node/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js +2 -2
  134. package/node/hooks/features/rows/gridRowsUtils.js +6 -4
  135. package/node/hooks/features/rows/index.js +8 -1
  136. package/node/hooks/features/rows/useGridRows.js +2 -2
  137. package/node/hooks/features/sorting/gridSortingSelector.js +1 -1
  138. package/node/hooks/features/virtualization/useGridVirtualScroller.js +13 -5
  139. package/node/index.js +1 -1
  140. package/node/internals/utils/useProps.js +1 -7
  141. package/node/locales/trTR.js +19 -21
  142. package/node/utils/composeGridClasses.js +11 -0
  143. package/node/utils/platform.js +8 -0
  144. package/package.json +13 -3
  145. package/utils/composeGridClasses.d.ts +3 -0
  146. package/utils/composeGridClasses.js +5 -0
  147. package/utils/platform.d.ts +1 -0
  148. package/utils/platform.js +2 -0
@@ -8,6 +8,9 @@ exports.GridRootStyles = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _styles = require("@mui/material/styles");
10
10
  var _gridClasses = require("../../constants/gridClasses");
11
+ var _useGridSelector = require("../../hooks/utils/useGridSelector");
12
+ var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
13
+ var _gridDimensionsSelectors = require("../../hooks/features/dimensions/gridDimensionsSelectors");
11
14
  function getBorderColor(theme) {
12
15
  if (theme.vars) {
13
16
  return theme.vars.palette.TableCell.border;
@@ -33,6 +36,10 @@ const columnHeaderStyles = {
33
36
  visibility: 'visible'
34
37
  }
35
38
  };
39
+
40
+ // Emotion thinks it knows better than us which selector we should use.
41
+ // https://github.com/emotion-js/emotion/issues/1105#issuecomment-1722524968
42
+ const ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason */';
36
43
  const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
37
44
  name: 'MuiDataGrid',
38
45
  slot: 'Root',
@@ -158,6 +165,8 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
158
165
  })(({
159
166
  theme: t
160
167
  }) => {
168
+ const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
169
+ const dimensions = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
161
170
  const borderColor = getBorderColor(t);
162
171
  const radius = t.shape.borderRadius;
163
172
  const containerBackground = t.vars ? t.vars.palette.background.default : t.mixins.MuiDataGrid?.containerBackground ?? t.palette.background.default;
@@ -220,14 +229,10 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
220
229
  // See https://github.com/mui/mui-x/issues/8547
221
230
  minHeight: 0,
222
231
  flexDirection: 'column',
232
+ overflow: 'hidden',
223
233
  overflowAnchor: 'none',
224
234
  // Keep the same scrolling position
225
- // The selector we really want here is `:first-child`, but emotion thinks it knows better than use what we
226
- // want and prints a warning to the console if we use it, about :first-child being "unsafe" in an SSR context.
227
- // https://github.com/emotion-js/emotion/issues/1105
228
- // Using `:first-of-type instead` is ironically less "safe" because if all our elements aren't `div`, this style
229
- // will fail to apply.
230
- [`.${_gridClasses.gridClasses.main} > *:first-of-type`]: {
235
+ [`.${_gridClasses.gridClasses.main} > *:first-child${ignoreSsrWarning}`]: {
231
236
  borderTopLeftRadius: 'var(--unstable_DataGrid-radius)',
232
237
  borderTopRightRadius: 'var(--unstable_DataGrid-radius)'
233
238
  },
@@ -275,6 +280,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
275
280
  [`& .${_gridClasses.gridClasses.columnHeader}:focus, & .${_gridClasses.gridClasses.cell}:focus`]: {
276
281
  outline: `solid ${t.palette.primary.main} 1px`
277
282
  },
283
+ [`&.${_gridClasses.gridClasses['root--noToolbar']} [aria-rowindex="1"] [aria-colindex="1"]`]: {
284
+ borderTopLeftRadius: 'calc(var(--unstable_DataGrid-radius) - 1px)'
285
+ },
286
+ [`&.${_gridClasses.gridClasses['root--noToolbar']} [aria-rowindex="1"] .${_gridClasses.gridClasses['columnHeader--last']}`]: {
287
+ borderTopRightRadius: !dimensions.hasScrollY || dimensions.scrollbarSize === 0 ? 'calc(var(--unstable_DataGrid-radius) - 1px)' : undefined
288
+ },
278
289
  [`& .${_gridClasses.gridClasses.columnHeaderCheckbox}, & .${_gridClasses.gridClasses.cellCheckbox}`]: {
279
290
  padding: 0,
280
291
  justifyContent: 'center',
@@ -414,6 +425,15 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
414
425
  borderTop: '1px solid var(--DataGrid-rowBorderColor)'
415
426
  }
416
427
  },
428
+ /* Bottom border of the top-container */
429
+ [`& .${_gridClasses.gridClasses['row--borderBottom']} .${_gridClasses.gridClasses.columnHeader},
430
+ & .${_gridClasses.gridClasses['row--borderBottom']} .${_gridClasses.gridClasses.filler},
431
+ & .${_gridClasses.gridClasses['row--borderBottom']} .${_gridClasses.gridClasses.scrollbarFiller}`]: {
432
+ borderBottom: `1px solid var(--DataGrid-rowBorderColor)`
433
+ },
434
+ [`& .${_gridClasses.gridClasses['row--borderBottom']} .${_gridClasses.gridClasses.cell}`]: {
435
+ borderBottom: `1px solid var(--rowBorderColor)`
436
+ },
417
437
  /* Row styles */
418
438
  [`.${_gridClasses.gridClasses.row}`]: {
419
439
  display: 'flex',
@@ -11,7 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _system = require("@mui/system");
14
- var _utils = require("@mui/utils");
14
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
15
  var _gridClasses = require("../../constants/gridClasses");
16
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -25,7 +25,7 @@ const useUtilityClasses = ownerState => {
25
25
  const slots = {
26
26
  root: ['toolbarContainer']
27
27
  };
28
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
28
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
29
  };
30
30
  const GridToolbarContainerRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
@@ -11,7 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _system = require("@mui/system");
14
- var _utils = require("@mui/utils");
14
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
15
  var _gridClasses = require("../../constants/gridClasses");
16
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -25,7 +25,7 @@ const useUtilityClasses = ownerState => {
25
25
  const slots = {
26
26
  root: ['panelContent']
27
27
  };
28
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
28
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
29
  };
30
30
  const GridPanelContentRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
@@ -11,7 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _system = require("@mui/system");
14
- var _utils = require("@mui/utils");
14
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
15
  var _gridClasses = require("../../constants/gridClasses");
16
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -25,7 +25,7 @@ const useUtilityClasses = ownerState => {
25
25
  const slots = {
26
26
  root: ['panelFooter']
27
27
  };
28
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
28
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
29
  };
30
30
  const GridPanelFooterRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
@@ -11,7 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _system = require("@mui/system");
14
- var _utils = require("@mui/utils");
14
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
15
  var _gridClasses = require("../../constants/gridClasses");
16
16
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -25,7 +25,7 @@ const useUtilityClasses = ownerState => {
25
25
  const slots = {
26
26
  root: ['panelHeader']
27
27
  };
28
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
28
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
29
  };
30
30
  const GridPanelHeaderRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
@@ -12,7 +12,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _Unstable_TrapFocus = _interopRequireDefault(require("@mui/material/Unstable_TrapFocus"));
14
14
  var _styles = require("@mui/material/styles");
15
- var _utils = require("@mui/utils");
15
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
16
16
  var _gridClasses = require("../../constants/gridClasses");
17
17
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
18
18
  var _jsxRuntime = require("react/jsx-runtime");
@@ -26,7 +26,7 @@ const useUtilityClasses = ownerState => {
26
26
  const slots = {
27
27
  root: ['panelWrapper']
28
28
  };
29
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
29
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
30
30
  };
31
31
  const GridPanelWrapperRoot = (0, _styles.styled)('div', {
32
32
  name: 'MuiDataGrid',
@@ -9,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _clsx = _interopRequireDefault(require("clsx"));
11
11
  var _system = require("@mui/system");
12
- var _utils = require("@mui/utils");
12
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
13
13
  var _gridClasses = require("../../constants/gridClasses");
14
14
  var _jsxRuntime = require("react/jsx-runtime");
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -18,7 +18,7 @@ const useUtilityClasses = () => {
18
18
  const slots = {
19
19
  root: ['bottomContainer']
20
20
  };
21
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, {});
21
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, {});
22
22
  };
23
23
  const Element = (0, _system.styled)('div')({
24
24
  position: 'sticky',
@@ -9,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _clsx = _interopRequireDefault(require("clsx"));
11
11
  var _system = require("@mui/system");
12
- var _utils = require("@mui/utils");
12
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
13
13
  var _gridClasses = require("../../constants/gridClasses");
14
14
  var _jsxRuntime = require("react/jsx-runtime");
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -18,23 +18,12 @@ const useUtilityClasses = () => {
18
18
  const slots = {
19
19
  root: ['topContainer']
20
20
  };
21
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, {});
21
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, {});
22
22
  };
23
23
  const Element = (0, _system.styled)('div')({
24
24
  position: 'sticky',
25
25
  zIndex: 4,
26
- top: 0,
27
- '&::after': {
28
- content: '" "',
29
- position: 'absolute',
30
- zIndex: 5,
31
- bottom: 0,
32
- left: 0,
33
- right: 0,
34
- height: 1,
35
- width: 'var(--DataGrid-rowWidth)',
36
- backgroundColor: 'var(--DataGrid-rowBorderColor)'
37
- }
26
+ top: 0
38
27
  });
39
28
  function GridTopContainer(props) {
40
29
  const classes = useUtilityClasses();
@@ -134,6 +134,7 @@ const GridVirtualScrollbar = exports.GridVirtualScrollbar = /*#__PURE__*/React.f
134
134
  ref: (0, _utils.unstable_useForkRef)(ref, scrollbarRef),
135
135
  className: classes.root,
136
136
  tabIndex: -1,
137
+ "aria-hidden": "true",
137
138
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Content, {
138
139
  ref: contentRef,
139
140
  className: classes.content
@@ -8,7 +8,7 @@ exports.GridVirtualScroller = GridVirtualScroller;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _system = require("@mui/system");
11
- var _utils = require("@mui/utils");
11
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
12
12
  var _GridScrollArea = require("../GridScrollArea");
13
13
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
14
14
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
@@ -37,7 +37,7 @@ const useUtilityClasses = (ownerState, dimensions, loadingOverlayVariant) => {
37
37
  root: ['main', dimensions.rightPinnedWidth > 0 && 'main--hasPinnedRight', loadingOverlayVariant === 'skeleton' && 'main--hasSkeletonLoadingOverlay'],
38
38
  scroller: ['virtualScroller']
39
39
  };
40
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
40
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
41
41
  };
42
42
  const Scroller = (0, _system.styled)('div', {
43
43
  name: 'MuiDataGrid',
@@ -9,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _clsx = _interopRequireDefault(require("clsx"));
11
11
  var _system = require("@mui/system");
12
- var _utils = require("@mui/utils");
12
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
13
13
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
14
14
  var _gridClasses = require("../../constants/gridClasses");
15
15
  var _jsxRuntime = require("react/jsx-runtime");
@@ -22,7 +22,7 @@ const useUtilityClasses = (props, overflowedContent) => {
22
22
  const slots = {
23
23
  root: ['virtualScrollerContent', overflowedContent && 'virtualScrollerContent--overflowed']
24
24
  };
25
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
25
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
26
26
  };
27
27
  const VirtualScrollerContentRoot = (0, _system.styled)('div', {
28
28
  name: 'MuiDataGrid',
@@ -10,7 +10,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _clsx = _interopRequireDefault(require("clsx"));
12
12
  var _system = require("@mui/system");
13
- var _utils = require("@mui/utils");
13
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
14
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
15
15
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
16
16
  var _rows = require("../../hooks/features/rows");
@@ -28,7 +28,7 @@ const useUtilityClasses = ownerState => {
28
28
  const slots = {
29
29
  root: ['virtualScrollerRenderZone']
30
30
  };
31
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
31
+ return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
32
32
  };
33
33
  const VirtualScrollerRenderZoneRoot = (0, _system.styled)('div', {
34
34
  name: 'MuiDataGrid',
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getDataGridUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
11
11
  }
12
- const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', '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', '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', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
12
+ const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', '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', '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', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -11,12 +11,14 @@ const useGridRefs = apiRef => {
11
11
  const rootElementRef = React.useRef(null);
12
12
  const mainElementRef = React.useRef(null);
13
13
  const virtualScrollerRef = React.useRef(null);
14
+ const columnHeadersContainerRef = React.useRef(null);
14
15
  apiRef.current.register('public', {
15
16
  rootElementRef
16
17
  });
17
18
  apiRef.current.register('private', {
18
19
  mainElementRef,
19
- virtualScrollerRef
20
+ virtualScrollerRef,
21
+ columnHeadersContainerRef
20
22
  });
21
23
  };
22
24
  exports.useGridRefs = useGridRefs;
@@ -19,6 +19,7 @@ var _virtualization = require("../virtualization");
19
19
  var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
20
20
  var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
21
21
  var _columns = require("../columns");
22
+ var _gridRowsSelector = require("../rows/gridRowsSelector");
22
23
  var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
23
24
  var _GridScrollbarFillerCell = require("../../../components/GridScrollbarFillerCell");
24
25
  var _getPinnedCellOffset = require("../../../internals/utils/getPinnedCellOffset");
@@ -60,6 +61,7 @@ const useGridColumnHeaders = props => {
60
61
  const columnPositions = (0, _utils.useGridSelector)(apiRef, _columns.gridColumnPositionsSelector);
61
62
  const renderContext = (0, _utils.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
62
63
  const pinnedColumns = (0, _utils.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
64
+ const pinnedRows = (0, _utils.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
63
65
  const offsetLeft = (0, _useGridVirtualScroller.computeOffsetLeft)(columnPositions, renderContext, theme.direction, pinnedColumns.left.length);
64
66
  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
65
67
  React.useEffect(() => {
@@ -188,6 +190,7 @@ const useGridColumnHeaders = props => {
188
190
  role: "row",
189
191
  "aria-rowindex": headerGroupingMaxDepth + 1,
190
192
  ownerState: rootProps,
193
+ className: pinnedRows.top.length === 0 ? _gridClasses.gridClasses['row--borderBottom'] : undefined,
191
194
  children: [leftRenderContext && getColumnHeaders({
192
195
  position: _columns.GridPinnedColumnPosition.LEFT,
193
196
  renderContext: leftRenderContext,
@@ -27,7 +27,7 @@ const useGridEditing = (apiRef, props) => {
27
27
  isCellEditable: isCellEditableProp
28
28
  } = props;
29
29
  const isCellEditable = React.useCallback(params => {
30
- if ((0, _gridRowsUtils.isAutoGeneratedRow)(params.rowNode)) {
30
+ if ((0, _gridRowsUtils.isAutogeneratedRowNode)(params.rowNode)) {
31
31
  return false;
32
32
  }
33
33
  if (!params.colDef.editable) {
@@ -282,11 +282,10 @@ const useGridRowSelection = (apiRef, props) => {
282
282
  }
283
283
  }, [apiRef, expandMouseRowRangeSelection, canHaveMultipleSelection]);
284
284
  const handleHeaderSelectionCheckboxChange = React.useCallback(params => {
285
- const shouldLimitSelectionToCurrentPage = props.checkboxSelectionVisibleOnly && props.pagination;
286
- const rowsToBeSelected = shouldLimitSelectionToCurrentPage ? (0, _pagination.gridPaginatedVisibleSortedGridRowIdsSelector)(apiRef) : (0, _gridFilterSelector.gridExpandedSortedRowIdsSelector)(apiRef);
285
+ const rowsToBeSelected = props.pagination && props.checkboxSelectionVisibleOnly && props.paginationMode === 'client' ? (0, _pagination.gridPaginatedVisibleSortedGridRowIdsSelector)(apiRef) : (0, _gridFilterSelector.gridExpandedSortedRowIdsSelector)(apiRef);
287
286
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
288
287
  apiRef.current.selectRows(rowsToBeSelected, params.value, filterModel?.items.length > 0);
289
- }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination]);
288
+ }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination, props.paginationMode]);
290
289
  const handleCellKeyDown = React.useCallback((params, event) => {
291
290
  // Get the most recent cell mode because it may have been changed by another listener
292
291
  if (apiRef.current.getCellMode(params.id, params.field) === _gridEditRowModel.GridCellModes.Edit) {
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useGridRowSelectionPreProcessors = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var _utils = require("@mui/utils");
10
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
11
11
  var _pipeProcessing = require("../../core/pipeProcessing");
12
12
  var _constants = require("../../../constants");
13
13
  var _colDef = require("../../../colDef");
@@ -22,7 +22,7 @@ const useUtilityClasses = ownerState => {
22
22
  cellCheckbox: ['cellCheckbox'],
23
23
  columnHeaderCheckbox: ['columnHeaderCheckbox']
24
24
  };
25
- return (0, _utils.unstable_composeClasses)(slots, _constants.getDataGridUtilityClass, classes);
25
+ return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
26
26
  }, [classes]);
27
27
  };
28
28
  const useGridRowSelectionPreProcessors = (apiRef, props) => {
@@ -10,7 +10,7 @@ exports.checkGridRowIdIsValid = checkGridRowIdIsValid;
10
10
  exports.computeRowsUpdates = computeRowsUpdates;
11
11
  exports.createRowsInternalCache = void 0;
12
12
  exports.getMinimalContentHeight = getMinimalContentHeight;
13
- exports.updateCacheWithNewRows = exports.isAutoGeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
13
+ exports.updateCacheWithNewRows = exports.isAutogeneratedRowNode = exports.isAutogeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
14
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
15
  var _gridRowsSelector = require("./gridRowsSelector");
16
16
  var _gridDimensionsSelectors = require("../dimensions/gridDimensionsSelectors");
@@ -141,8 +141,10 @@ const getRowsStateFromCache = ({
141
141
  });
142
142
  };
143
143
  exports.getRowsStateFromCache = getRowsStateFromCache;
144
- const isAutoGeneratedRow = rowNode => rowNode.type === 'skeletonRow' || rowNode.type === 'footer' || rowNode.type === 'group' && rowNode.isAutoGenerated || rowNode.type === 'pinnedRow' && rowNode.isAutoGenerated;
145
- exports.isAutoGeneratedRow = isAutoGeneratedRow;
144
+ const isAutogeneratedRow = row => GRID_ID_AUTOGENERATED in row;
145
+ exports.isAutogeneratedRow = isAutogeneratedRow;
146
+ const isAutogeneratedRowNode = rowNode => rowNode.type === 'skeletonRow' || rowNode.type === 'footer' || rowNode.type === 'group' && rowNode.isAutoGenerated || rowNode.type === 'pinnedRow' && rowNode.isAutoGenerated;
147
+ exports.isAutogeneratedRowNode = isAutogeneratedRowNode;
146
148
  const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) => {
147
149
  const node = tree[parentId];
148
150
  if (node.type !== 'group') {
@@ -151,7 +153,7 @@ const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) => {
151
153
  const validDescendants = [];
152
154
  for (let i = 0; i < node.children.length; i += 1) {
153
155
  const child = node.children[i];
154
- if (!skipAutoGeneratedRows || !isAutoGeneratedRow(tree[child])) {
156
+ if (!skipAutoGeneratedRows || !isAutogeneratedRowNode(tree[child])) {
155
157
  validDescendants.push(child);
156
158
  }
157
159
  const childDescendants = getTreeNodeDescendants(tree, child, skipAutoGeneratedRows);
@@ -15,7 +15,8 @@ var _exportNames = {
15
15
  gridRowMaximumTreeDepthSelector: true,
16
16
  gridDataRowIdsSelector: true,
17
17
  GRID_ROOT_GROUP_ID: true,
18
- checkGridRowIdIsValid: true
18
+ checkGridRowIdIsValid: true,
19
+ isAutogeneratedRow: true
19
20
  };
20
21
  Object.defineProperty(exports, "GRID_ROOT_GROUP_ID", {
21
22
  enumerable: true,
@@ -89,6 +90,12 @@ Object.defineProperty(exports, "gridTopLevelRowCountSelector", {
89
90
  return _gridRowsSelector.gridTopLevelRowCountSelector;
90
91
  }
91
92
  });
93
+ Object.defineProperty(exports, "isAutogeneratedRow", {
94
+ enumerable: true,
95
+ get: function () {
96
+ return _gridRowsUtils.isAutogeneratedRow;
97
+ }
98
+ });
92
99
  var _gridRowsMetaSelector = require("./gridRowsMetaSelector");
93
100
  Object.keys(_gridRowsMetaSelector).forEach(function (key) {
94
101
  if (key === "default" || key === "__esModule") return;
@@ -58,7 +58,7 @@ const useGridRows = (apiRef, props) => {
58
58
  return model;
59
59
  }
60
60
  const node = apiRef.current.getRowNode(id);
61
- if (node && (0, _gridRowsUtils.isAutoGeneratedRow)(node)) {
61
+ if (node && (0, _gridRowsUtils.isAutogeneratedRowNode)(node)) {
62
62
  return {
63
63
  [_gridRowsUtils.GRID_ID_AUTOGENERATED]: id
64
64
  };
@@ -222,7 +222,7 @@ const useGridRows = (apiRef, props) => {
222
222
  const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
223
223
  for (let index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {
224
224
  const id = sortedRowIds[index];
225
- if (!skipAutoGeneratedRows || !(0, _gridRowsUtils.isAutoGeneratedRow)(tree[id])) {
225
+ if (!skipAutoGeneratedRows || !(0, _gridRowsUtils.isAutogeneratedRowNode)(tree[id])) {
226
226
  children.push(id);
227
227
  }
228
228
  }
@@ -32,7 +32,7 @@ const gridSortedRowEntriesSelector = exports.gridSortedRowEntriesSelector = (0,
32
32
  });
33
33
  }
34
34
  const rowNode = rowTree[id];
35
- if (rowNode && (0, _gridRowsUtils.isAutoGeneratedRow)(rowNode)) {
35
+ if (rowNode && (0, _gridRowsUtils.isAutogeneratedRowNode)(rowNode)) {
36
36
  acc.push({
37
37
  id,
38
38
  model: {
@@ -26,6 +26,7 @@ var _gridRowsSelector = require("../rows/gridRowsSelector");
26
26
  var _gridFocusStateSelector = require("../focus/gridFocusStateSelector");
27
27
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
28
28
  var _utils2 = require("../../utils");
29
+ var platform = _interopRequireWildcard(require("../../../utils/platform"));
29
30
  var _utils3 = require("../../../utils/utils");
30
31
  var _gridRowSelectionSelector = require("../rowSelection/gridRowSelectionSelector");
31
32
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
@@ -190,6 +191,8 @@ const useGridVirtualScroller = () => {
190
191
  const forceUpdateRenderContext = () => {
191
192
  const inputs = inputsSelector(apiRef, rootProps, enabled, enabledForColumns);
192
193
  const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);
194
+ // Reset the frozen context when the render context changes, see the illustration in https://github.com/mui/mui-x/pull/12353
195
+ frozenContext.current = undefined;
193
196
  updateRenderContext(nextRenderContext);
194
197
  };
195
198
  const handleScroll = (0, _utils.unstable_useEventCallback)(event => {
@@ -269,6 +272,7 @@ const useGridVirtualScroller = () => {
269
272
  id,
270
273
  model
271
274
  } = rowModels[rowIndexInPage];
275
+ const rowIndex = (currentPage?.range?.firstRowIndex || 0) + rowIndexOffset + rowIndexInPage;
272
276
 
273
277
  // NOTE: This is an expensive feature, the colSpan code could be optimized.
274
278
  if (hasColSpan) {
@@ -310,6 +314,7 @@ const useGridVirtualScroller = () => {
310
314
  isFirstVisible = rowIndexInPage === 0;
311
315
  }
312
316
  let isLastVisible = false;
317
+ const isLastVisibleInSection = rowIndexInPage === rowModels.length - 1;
313
318
  if (isLastSection) {
314
319
  if (!isPinnedSection) {
315
320
  const lastIndex = currentPage.rows.length - 1;
@@ -318,7 +323,7 @@ const useGridVirtualScroller = () => {
318
323
  isLastVisible = true;
319
324
  }
320
325
  } else {
321
- isLastVisible = rowIndexInPage === rowModels.length - 1;
326
+ isLastVisible = isLastVisibleInSection;
322
327
  }
323
328
  }
324
329
  const isVirtualRow = rowIndexInPage === virtualRowIndex;
@@ -333,7 +338,7 @@ const useGridVirtualScroller = () => {
333
338
  currentRenderContext = frozenContext.current;
334
339
  }
335
340
  const offsetLeft = computeOffsetLeft(columnPositions, currentRenderContext, theme.direction, pinnedColumns.left.length);
336
- const rowIndex = (currentPage?.range?.firstRowIndex || 0) + rowIndexOffset + rowIndexInPage;
341
+ const showBottomBorder = isLastVisibleInSection && params.position === 'top';
337
342
  rows.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.row, (0, _extends2.default)({
338
343
  row: model,
339
344
  rowId: id,
@@ -350,7 +355,8 @@ const useGridVirtualScroller = () => {
350
355
  focusedColumnIndex: hasFocus ? focusedCell.columnIndex : undefined,
351
356
  isFirstVisible: isFirstVisible,
352
357
  isLastVisible: isLastVisible,
353
- isNotVisible: isNotVisible
358
+ isNotVisible: isNotVisible,
359
+ showBottomBorder: showBottomBorder
354
360
  }, rowProps), id));
355
361
  if (isNotVisible) {
356
362
  return;
@@ -421,12 +427,14 @@ const useGridVirtualScroller = () => {
421
427
  }),
422
428
  getScrollerProps: () => ({
423
429
  ref: scrollerRef,
424
- tabIndex: -1,
425
430
  onScroll: handleScroll,
426
431
  onWheel: handleWheel,
427
432
  onTouchMove: handleTouchMove,
428
433
  style: scrollerStyle,
429
- role: 'presentation'
434
+ role: 'presentation',
435
+ // `tabIndex` shouldn't be used along role=presentation, but it fixes a Firefox bug
436
+ // https://github.com/mui/mui-x/pull/13891#discussion_r1683416024
437
+ tabIndex: platform.isFirefox ? -1 : undefined
430
438
  }),
431
439
  getContentProps: () => ({
432
440
  style: contentSize,
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.11.1
2
+ * @mui/x-data-grid v7.12.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.useProps = useProps;
8
- var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty"));
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
7
  var React = _interopRequireWildcard(require("react"));
11
8
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
9
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -30,8 +27,5 @@ function groupForwardedProps(props) {
30
27
  return newProps;
31
28
  }
32
29
  function useProps(allProps) {
33
- return React.useMemo(() => {
34
- const themedProps = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(allProps), allProps));
35
- return groupForwardedProps(themedProps);
36
- }, [allProps]);
30
+ return React.useMemo(() => groupForwardedProps(allProps), [allProps]);
37
31
  }