@mui/x-data-grid 7.21.0 → 7.22.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 (80) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/components/cell/GridBooleanCell.d.ts +3 -3
  3. package/components/cell/GridBooleanCell.js +11 -1
  4. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  5. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  6. package/components/containers/GridRootStyles.js +4 -2
  7. package/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  8. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  9. package/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  10. package/components/toolbar/GridToolbar.js +2 -3
  11. package/components/toolbar/GridToolbarExport.js +1 -13
  12. package/components/toolbar/GridToolbarFilterButton.js +1 -2
  13. package/components/virtualization/GridBottomContainer.js +0 -17
  14. package/components/virtualization/GridMainContainer.js +2 -1
  15. package/components/virtualization/GridVirtualScroller.js +2 -0
  16. package/constants/gridClasses.d.ts +5 -0
  17. package/constants/gridClasses.js +1 -1
  18. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +4 -0
  19. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  20. package/hooks/features/focus/useGridFocus.js +18 -3
  21. package/hooks/features/pagination/gridPaginationSelector.js +2 -1
  22. package/hooks/features/virtualization/useGridVirtualScroller.js +2 -1
  23. package/index.js +1 -1
  24. package/joy/joySlots.js +45 -27
  25. package/locales/daDK.js +5 -6
  26. package/locales/itIT.js +27 -28
  27. package/locales/ptBR.js +4 -4
  28. package/material/index.js +4 -0
  29. package/models/gridExport.d.ts +1 -1
  30. package/models/gridSlotsComponent.d.ts +10 -0
  31. package/models/gridSlotsComponentsProps.d.ts +9 -0
  32. package/modern/components/cell/GridBooleanCell.js +11 -1
  33. package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  34. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  35. package/modern/components/containers/GridRootStyles.js +4 -2
  36. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  37. package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  38. package/modern/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  39. package/modern/components/toolbar/GridToolbar.js +2 -3
  40. package/modern/components/toolbar/GridToolbarExport.js +1 -13
  41. package/modern/components/toolbar/GridToolbarFilterButton.js +1 -2
  42. package/modern/components/virtualization/GridBottomContainer.js +0 -17
  43. package/modern/components/virtualization/GridMainContainer.js +2 -1
  44. package/modern/components/virtualization/GridVirtualScroller.js +2 -0
  45. package/modern/constants/gridClasses.js +1 -1
  46. package/modern/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  47. package/modern/hooks/features/focus/useGridFocus.js +18 -3
  48. package/modern/hooks/features/pagination/gridPaginationSelector.js +2 -1
  49. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +2 -1
  50. package/modern/index.js +1 -1
  51. package/modern/joy/joySlots.js +45 -27
  52. package/modern/locales/daDK.js +5 -6
  53. package/modern/locales/itIT.js +27 -28
  54. package/modern/locales/ptBR.js +4 -4
  55. package/modern/material/index.js +4 -0
  56. package/node/components/cell/GridBooleanCell.js +11 -1
  57. package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +1 -2
  58. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  59. package/node/components/containers/GridRootStyles.js +4 -2
  60. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  61. package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +2 -2
  62. package/node/components/panel/filterPanel/GridFilterInputValue.js +2 -2
  63. package/node/components/toolbar/GridToolbar.js +2 -3
  64. package/node/components/toolbar/GridToolbarExport.js +1 -13
  65. package/node/components/toolbar/GridToolbarFilterButton.js +1 -2
  66. package/node/components/virtualization/GridBottomContainer.js +0 -17
  67. package/node/components/virtualization/GridMainContainer.js +2 -1
  68. package/node/components/virtualization/GridVirtualScroller.js +2 -0
  69. package/node/constants/gridClasses.js +1 -1
  70. package/node/hooks/features/columnMenu/useGridColumnMenuSlots.js +4 -3
  71. package/node/hooks/features/focus/useGridFocus.js +18 -3
  72. package/node/hooks/features/pagination/gridPaginationSelector.js +3 -1
  73. package/node/hooks/features/virtualization/useGridVirtualScroller.js +2 -1
  74. package/node/index.js +1 -1
  75. package/node/joy/joySlots.js +45 -27
  76. package/node/locales/daDK.js +5 -6
  77. package/node/locales/itIT.js +27 -28
  78. package/node/locales/ptBR.js +4 -4
  79. package/node/material/index.js +4 -0
  80. package/package.json +1 -1
@@ -11,7 +11,6 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _styles = require("@mui/material/styles");
13
13
  var _utils = require("@mui/utils");
14
- var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
15
14
  var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
16
15
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
17
16
  var _gridFilterSelector = require("../../hooks/features/filter/gridFilterSelector");
@@ -112,7 +111,7 @@ const GridToolbarFilterButton = exports.GridToolbarFilterButton = /*#__PURE__*/R
112
111
  "aria-controls": isOpen ? filterPanelId : undefined,
113
112
  "aria-expanded": isOpen,
114
113
  "aria-haspopup": true,
115
- startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Badge.default, {
114
+ startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseBadge, {
116
115
  badgeContent: activeFilters.length,
117
116
  color: "primary",
118
117
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.openFilterButtonIcon, {})
@@ -12,9 +12,6 @@ var _clsx = _interopRequireDefault(require("clsx"));
12
12
  var _system = require("@mui/system");
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
14
  var _gridClasses = require("../../constants/gridClasses");
15
- var _gridDimensionsSelectors = require("../../hooks/features/dimensions/gridDimensionsSelectors");
16
- var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
17
- var _useGridSelector = require("../../hooks/utils/useGridSelector");
18
15
  var _jsxRuntime = require("react/jsx-runtime");
19
16
  const useUtilityClasses = () => {
20
17
  const slots = {
@@ -29,22 +26,8 @@ const Element = (0, _system.styled)('div')({
29
26
  });
30
27
  function GridBottomContainer(props) {
31
28
  const classes = useUtilityClasses();
32
- const apiRef = (0, _useGridApiContext.useGridApiContext)();
33
- const {
34
- viewportOuterSize,
35
- minimumSize,
36
- hasScrollX,
37
- scrollbarSize
38
- } = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
39
- const scrollHeight = hasScrollX ? scrollbarSize : 0;
40
- const offset = Math.max(viewportOuterSize.height - minimumSize.height -
41
- // Subtract scroll height twice to account for GridVirtualScrollerFiller and horizontal scrollbar
42
- 2 * scrollHeight, 0);
43
29
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Element, (0, _extends2.default)({}, props, {
44
30
  className: (0, _clsx.default)(classes.root, _gridClasses.gridClasses['container--bottom']),
45
- style: {
46
- transform: `translateY(${offset}px)`
47
- },
48
31
  role: "presentation"
49
32
  }));
50
33
  }
@@ -15,7 +15,8 @@ var _jsxRuntime = require("react/jsx-runtime");
15
15
  const GridPanelAnchor = (0, _system.styled)('div')({
16
16
  position: 'absolute',
17
17
  top: `var(--DataGrid-headersTotalHeight)`,
18
- left: 0
18
+ left: 0,
19
+ width: 'calc(100% - (var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize)))'
19
20
  });
20
21
  const Element = (0, _system.styled)('div', {
21
22
  name: 'MuiDataGrid',
@@ -48,6 +48,8 @@ const Scroller = (0, _system.styled)('div', {
48
48
  flexGrow: 1,
49
49
  overflow: 'scroll',
50
50
  scrollbarWidth: 'none' /* Firefox */,
51
+ display: 'flex',
52
+ flexDirection: 'column',
51
53
  '&::-webkit-scrollbar': {
52
54
  display: 'none' /* Safari and Chrome */
53
55
  },
@@ -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', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', '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--borderBottom', '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--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScroller--hasScrollX', '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', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', '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--borderBottom', '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--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -9,11 +9,12 @@ exports.useGridColumnMenuSlots = void 0;
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
- var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
12
+ var _useGridRootProps = require("../../utils/useGridRootProps");
13
13
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
14
14
  const _excluded = ["displayOrder"];
15
15
  const useGridColumnMenuSlots = props => {
16
16
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
17
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
17
18
  const {
18
19
  defaultSlots,
19
20
  defaultSlotProps,
@@ -59,8 +60,8 @@ const useGridColumnMenuSlots = props => {
59
60
  const customProps = (0, _objectWithoutPropertiesLoose2.default)(processedComponentProps, _excluded);
60
61
  itemProps = (0, _extends2.default)({}, itemProps, customProps);
61
62
  }
62
- return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [_Divider.default, {}]] : [...acc, [processedComponents[key], itemProps]];
63
+ return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
63
64
  }, []);
64
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
65
+ }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems, rootProps.slots.baseDivider]);
65
66
  };
66
67
  exports.useGridColumnMenuSlots = useGridColumnMenuSlots;
@@ -332,18 +332,33 @@ const useGridFocus = (apiRef, props) => {
332
332
  const handleRowSet = React.useCallback(() => {
333
333
  const cell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
334
334
 
335
- // If the focused cell is in a row which does not exist anymore, then remove the focus
335
+ // If the focused cell is in a row which does not exist anymore,
336
+ // focus previous row or remove the focus
336
337
  if (cell && !apiRef.current.getRow(cell.id)) {
338
+ const lastFocusedRowId = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef)?.id;
339
+ let nextRowId = null;
340
+ if (typeof lastFocusedRowId !== 'undefined') {
341
+ const lastFocusedRowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(lastFocusedRowId);
342
+ const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
343
+ pagination: props.pagination,
344
+ paginationMode: props.paginationMode
345
+ });
346
+ const nextRow = currentPage.rows[(0, _utils2.clamp)(lastFocusedRowIndex, 0, currentPage.rows.length - 1)];
347
+ nextRowId = nextRow.id ?? null;
348
+ }
337
349
  apiRef.current.setState(state => (0, _extends2.default)({}, state, {
338
350
  focus: {
339
- cell: null,
351
+ cell: nextRowId === null ? null : {
352
+ id: nextRowId,
353
+ field: cell.field
354
+ },
340
355
  columnHeader: null,
341
356
  columnHeaderFilter: null,
342
357
  columnGroupHeader: null
343
358
  }
344
359
  }));
345
360
  }
346
- }, [apiRef]);
361
+ }, [apiRef, props.pagination, props.paginationMode]);
347
362
  const handlePaginationModelChange = (0, _utils.unstable_useEventCallback)(() => {
348
363
  const currentFocusedCell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
349
364
  if (!currentFocusedCell) {
@@ -8,6 +8,8 @@ var _createSelector = require("../../../utils/createSelector");
8
8
  var _gridFilterSelector = require("../filter/gridFilterSelector");
9
9
  var _gridRowsSelector = require("../rows/gridRowsSelector");
10
10
  var _gridPaginationUtils = require("./gridPaginationUtils");
11
+ const ALL_RESULTS_PAGE_VALUE = -1;
12
+
11
13
  /**
12
14
  * @category Pagination
13
15
  * @ignore - do not document.
@@ -58,7 +60,7 @@ const gridPageCountSelector = exports.gridPageCountSelector = (0, _createSelecto
58
60
  const gridPaginationRowRangeSelector = exports.gridPaginationRowRangeSelector = (0, _createSelector.createSelectorMemoized)(gridPaginationModelSelector, _gridRowsSelector.gridRowTreeSelector, _gridRowsSelector.gridRowMaximumTreeDepthSelector, _gridFilterSelector.gridExpandedSortedRowEntriesSelector, _gridFilterSelector.gridFilteredSortedTopLevelRowEntriesSelector, (paginationModel, rowTree, rowTreeDepth, visibleSortedRowEntries, visibleSortedTopLevelRowEntries) => {
59
61
  const visibleTopLevelRowCount = visibleSortedTopLevelRowEntries.length;
60
62
  const topLevelFirstRowIndex = Math.min(paginationModel.pageSize * paginationModel.page, visibleTopLevelRowCount - 1);
61
- const topLevelLastRowIndex = Math.min(topLevelFirstRowIndex + paginationModel.pageSize - 1, visibleTopLevelRowCount - 1);
63
+ const topLevelLastRowIndex = paginationModel.pageSize === ALL_RESULTS_PAGE_VALUE ? visibleTopLevelRowCount - 1 : Math.min(topLevelFirstRowIndex + paginationModel.pageSize - 1, visibleTopLevelRowCount - 1);
62
64
 
63
65
  // The range contains no element
64
66
  if (topLevelFirstRowIndex === -1 || topLevelLastRowIndex === -1) {
@@ -389,7 +389,8 @@ const useGridVirtualScroller = () => {
389
389
  const contentSize = React.useMemo(() => {
390
390
  const size = {
391
391
  width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',
392
- height: contentHeight
392
+ flexBasis: contentHeight,
393
+ flexShrink: 0
393
394
  };
394
395
  if (rootProps.autoHeight && currentPage.rows.length === 0) {
395
396
  size.height = (0, _gridRowsUtils.getMinimalContentHeight)(apiRef); // Give room to show the overlay when there no rows.
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.21.0
2
+ * @mui/x-data-grid v7.22.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -9,7 +9,9 @@ exports.default = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
+ var _Badge = _interopRequireDefault(require("@mui/joy/Badge"));
12
13
  var _Checkbox = _interopRequireDefault(require("@mui/joy/Checkbox"));
14
+ var _Divider = _interopRequireDefault(require("@mui/joy/Divider"));
13
15
  var _Input = _interopRequireDefault(require("@mui/joy/Input"));
14
16
  var _FormControl = _interopRequireDefault(require("@mui/joy/FormControl"));
15
17
  var _FormLabel = _interopRequireDefault(require("@mui/joy/FormLabel"));
@@ -28,13 +30,14 @@ var _useGridRootProps = require("../hooks/utils/useGridRootProps");
28
30
  var _hooks = require("../hooks");
29
31
  var _GridOverlay = require("../components/containers/GridOverlay");
30
32
  var _jsxRuntime = require("react/jsx-runtime");
31
- const _excluded = ["touchRippleRef", "inputProps", "onChange", "color", "size", "checked", "sx", "value", "inputRef"],
32
- _excluded2 = ["onChange", "label", "placeholder", "value", "inputRef", "type", "size", "variant"],
33
- _excluded3 = ["startIcon", "color", "endIcon", "size", "sx", "variant"],
34
- _excluded4 = ["color", "size", "sx", "touchRippleRef"],
35
- _excluded5 = ["open", "onOpen", "value", "onChange", "size", "color", "variant", "inputProps", "MenuProps", "inputRef", "error", "native", "fullWidth", "labelId"],
36
- _excluded6 = ["native"],
37
- _excluded7 = ["shrink", "variant", "sx"];
33
+ const _excluded = ["slotProps", "variant", "color", "sx"],
34
+ _excluded2 = ["touchRippleRef", "inputProps", "onChange", "color", "size", "checked", "sx", "value", "inputRef"],
35
+ _excluded3 = ["onChange", "label", "placeholder", "value", "inputRef", "type", "size", "variant"],
36
+ _excluded4 = ["startIcon", "color", "endIcon", "size", "sx", "variant"],
37
+ _excluded5 = ["color", "size", "sx", "touchRippleRef"],
38
+ _excluded6 = ["open", "onOpen", "value", "onChange", "size", "color", "variant", "inputProps", "MenuProps", "inputRef", "error", "native", "fullWidth", "labelId"],
39
+ _excluded7 = ["native"],
40
+ _excluded8 = ["shrink", "variant", "sx"];
38
41
  function convertColor(color) {
39
42
  if (color === 'secondary') {
40
43
  return 'primary';
@@ -66,14 +69,27 @@ function convertVariant(variant, defaultVariant = 'plain') {
66
69
  filled: 'soft'
67
70
  }[variant] || defaultVariant;
68
71
  }
69
- const Checkbox = /*#__PURE__*/React.forwardRef((_ref, ref) => {
72
+ const Badge = /*#__PURE__*/React.forwardRef((_ref, ref) => {
73
+ let {
74
+ color,
75
+ sx
76
+ } = _ref,
77
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Badge.default, (0, _extends2.default)({}, props, {
79
+ color: convertColor(color),
80
+ variant: "plain",
81
+ sx: sx,
82
+ ref: ref
83
+ }));
84
+ });
85
+ const Checkbox = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
70
86
  let {
71
87
  inputProps,
72
88
  onChange,
73
89
  checked,
74
90
  inputRef
75
- } = _ref,
76
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
91
+ } = _ref2,
92
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref2, _excluded2);
77
93
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, (0, _extends2.default)({}, props, {
78
94
  slotProps: {
79
95
  input: (0, _extends2.default)({}, inputProps, {
@@ -85,7 +101,7 @@ const Checkbox = /*#__PURE__*/React.forwardRef((_ref, ref) => {
85
101
  onChange: onChange
86
102
  }));
87
103
  });
88
- const TextField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
104
+ const TextField = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
89
105
  let {
90
106
  onChange,
91
107
  label,
@@ -95,8 +111,8 @@ const TextField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
95
111
  type,
96
112
  size,
97
113
  variant
98
- } = _ref2,
99
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref2, _excluded2);
114
+ } = _ref3,
115
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref3, _excluded3);
100
116
  const rootRef = (0, _utils.unstable_useForkRef)(ref, props.InputProps?.ref);
101
117
  const inputForkRef = (0, _utils.unstable_useForkRef)(inputRef, props?.inputProps?.ref);
102
118
  const {
@@ -124,7 +140,7 @@ const TextField = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
124
140
  })]
125
141
  });
126
142
  });
127
- const Button = /*#__PURE__*/React.forwardRef(function Button(_ref3, ref) {
143
+ const Button = /*#__PURE__*/React.forwardRef(function Button(_ref4, ref) {
128
144
  let {
129
145
  startIcon,
130
146
  color,
@@ -132,8 +148,8 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(_ref3, ref) {
132
148
  size,
133
149
  sx,
134
150
  variant
135
- } = _ref3,
136
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref3, _excluded3);
151
+ } = _ref4,
152
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref4, _excluded4);
137
153
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, (0, _extends2.default)({}, props, {
138
154
  size: convertSize(size),
139
155
  color: convertColor(color),
@@ -144,13 +160,13 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(_ref3, ref) {
144
160
  sx: sx
145
161
  }));
146
162
  });
147
- const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(_ref4, ref) {
163
+ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(_ref5, ref) {
148
164
  let {
149
165
  color,
150
166
  size,
151
167
  sx
152
- } = _ref4,
153
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref4, _excluded4);
168
+ } = _ref5,
169
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref5, _excluded5);
154
170
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, (0, _extends2.default)({}, props, {
155
171
  size: convertSize(size),
156
172
  color: convertColor(color) ?? 'neutral',
@@ -159,7 +175,7 @@ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(_ref4, ref)
159
175
  sx: sx
160
176
  }));
161
177
  });
162
- const Select = /*#__PURE__*/React.forwardRef((_ref5, ref) => {
178
+ const Select = /*#__PURE__*/React.forwardRef((_ref6, ref) => {
163
179
  let {
164
180
  open,
165
181
  onOpen,
@@ -171,8 +187,8 @@ const Select = /*#__PURE__*/React.forwardRef((_ref5, ref) => {
171
187
  MenuProps,
172
188
  inputRef,
173
189
  labelId
174
- } = _ref5,
175
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref5, _excluded5);
190
+ } = _ref6,
191
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref6, _excluded6);
176
192
  const handleChange = (event, newValue) => {
177
193
  if (event && onChange) {
178
194
  // Same as in https://github.com/mui/material-ui/blob/e5558282a8f36856aef1299f3a36f3235e92e770/packages/mui-material/src/Select/SelectInput.js#L288-L300
@@ -223,17 +239,17 @@ const Select = /*#__PURE__*/React.forwardRef((_ref5, ref) => {
223
239
  }
224
240
  }));
225
241
  });
226
- const Option = /*#__PURE__*/React.forwardRef((_ref6, ref) => {
227
- let props = (0, _objectWithoutPropertiesLoose2.default)(_ref6, _excluded6);
242
+ const Option = /*#__PURE__*/React.forwardRef((_ref7, ref) => {
243
+ let props = (0, _objectWithoutPropertiesLoose2.default)(_ref7, _excluded7);
228
244
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Option.default, (0, _extends2.default)({}, props, {
229
245
  ref: ref
230
246
  }));
231
247
  });
232
- const InputLabel = /*#__PURE__*/React.forwardRef((_ref7, ref) => {
248
+ const InputLabel = /*#__PURE__*/React.forwardRef((_ref8, ref) => {
233
249
  let {
234
250
  sx
235
- } = _ref7,
236
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref7, _excluded7);
251
+ } = _ref8,
252
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref8, _excluded8);
237
253
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormLabel.default, (0, _extends2.default)({}, props, {
238
254
  ref: ref,
239
255
  sx: sx
@@ -359,7 +375,9 @@ const LoadingOverlay = /*#__PURE__*/React.forwardRef((props, ref) => {
359
375
  }));
360
376
  });
361
377
  const joySlots = (0, _extends2.default)({}, _icons.default, {
378
+ baseBadge: Badge,
362
379
  baseCheckbox: Checkbox,
380
+ baseDivider: _Divider.default,
363
381
  baseTextField: TextField,
364
382
  baseButton: Button,
365
383
  baseIconButton: IconButton,
@@ -39,8 +39,7 @@ const daDKGrid = {
39
39
  columnsManagementSearchTitle: 'Søg',
40
40
  columnsManagementNoColumns: 'Ingen søjler',
41
41
  columnsManagementShowHideAllText: 'Vis/Skjul Alle',
42
- // columnsManagementReset: 'Reset',
43
-
42
+ columnsManagementReset: 'Nulstil',
44
43
  // Filter panel text
45
44
  filterPanelAddFilter: 'Tilføj filter',
46
45
  filterPanelRemoveAll: 'Fjern alle',
@@ -54,9 +53,9 @@ const daDKGrid = {
54
53
  filterPanelInputPlaceholder: 'Filterværdi',
55
54
  // Filter operators text
56
55
  filterOperatorContains: 'indeholder',
57
- // filterOperatorDoesNotContain: 'does not contain',
56
+ filterOperatorDoesNotContain: 'indeholder ikke',
58
57
  filterOperatorEquals: 'lig med',
59
- // filterOperatorDoesNotEqual: 'does not equal',
58
+ filterOperatorDoesNotEqual: 'ikke lig med',
60
59
  filterOperatorStartsWith: 'begynder med',
61
60
  filterOperatorEndsWith: 'ender med',
62
61
  filterOperatorIs: 'er lig med',
@@ -76,9 +75,9 @@ const daDKGrid = {
76
75
  'filterOperator<=': '<=',
77
76
  // Header filter operators text
78
77
  headerFilterOperatorContains: 'Indeholder',
79
- // headerFilterOperatorDoesNotContain: 'Does not contain',
78
+ headerFilterOperatorDoesNotContain: 'Indeholder ikke',
80
79
  headerFilterOperatorEquals: 'Lig med',
81
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
80
+ headerFilterOperatorDoesNotEqual: 'Ikke lig med',
82
81
  headerFilterOperatorStartsWith: 'Begynder med',
83
82
  headerFilterOperatorEndsWith: 'Ender med',
84
83
  headerFilterOperatorIs: 'Er lig med',
@@ -36,11 +36,10 @@ const itITGrid = {
36
36
  toolbarExportPrint: 'Stampa',
37
37
  toolbarExportExcel: 'Scarica come Excel',
38
38
  // Columns management text
39
- // columnsManagementSearchTitle: 'Search',
40
- // columnsManagementNoColumns: 'No columns',
41
- // columnsManagementShowHideAllText: 'Show/Hide All',
42
- // columnsManagementReset: 'Reset',
43
-
39
+ columnsManagementSearchTitle: 'Cerca',
40
+ columnsManagementNoColumns: 'Nessuna colonna',
41
+ columnsManagementShowHideAllText: 'Mostra/Nascondi Tutto',
42
+ columnsManagementReset: 'Resetta',
44
43
  // Filter panel text
45
44
  filterPanelAddFilter: 'Aggiungi un filtro',
46
45
  filterPanelRemoveAll: 'Rimuovi filtri',
@@ -54,13 +53,13 @@ const itITGrid = {
54
53
  filterPanelInputPlaceholder: 'Filtra il valore',
55
54
  // Filter operators text
56
55
  filterOperatorContains: 'contiene',
57
- // filterOperatorDoesNotContain: 'does not contain',
56
+ filterOperatorDoesNotContain: 'non contiene',
58
57
  filterOperatorEquals: 'uguale a',
59
- // filterOperatorDoesNotEqual: 'does not equal',
58
+ filterOperatorDoesNotEqual: 'diverso da',
60
59
  filterOperatorStartsWith: 'comincia per',
61
60
  filterOperatorEndsWith: 'termina per',
62
61
  filterOperatorIs: 'uguale a',
63
- filterOperatorNot: 'diversa da',
62
+ filterOperatorNot: 'diverso da',
64
63
  filterOperatorAfter: 'dopo il',
65
64
  filterOperatorOnOrAfter: 'a partire dal',
66
65
  filterOperatorBefore: 'prima del',
@@ -76,26 +75,26 @@ const itITGrid = {
76
75
  'filterOperator<=': '<=',
77
76
  // Header filter operators text
78
77
  headerFilterOperatorContains: 'Contiene',
79
- // headerFilterOperatorDoesNotContain: 'Does not contain',
80
- headerFilterOperatorEquals: 'uguale a',
81
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
82
- headerFilterOperatorStartsWith: 'comincia per',
83
- headerFilterOperatorEndsWith: 'termina per',
84
- headerFilterOperatorIs: 'uguale a',
85
- headerFilterOperatorNot: 'diversa da',
86
- headerFilterOperatorAfter: 'dopo il',
87
- headerFilterOperatorOnOrAfter: 'a partire dal',
88
- headerFilterOperatorBefore: 'prima del',
89
- headerFilterOperatorOnOrBefore: 'fino al',
90
- headerFilterOperatorIsEmpty: 'è vuoto',
91
- headerFilterOperatorIsNotEmpty: 'non è vuoto',
92
- headerFilterOperatorIsAnyOf: 'è uno tra',
93
- 'headerFilterOperator=': 'uguale a',
94
- 'headerFilterOperator!=': 'diverso da',
95
- 'headerFilterOperator>': 'maggiore di',
96
- 'headerFilterOperator>=': 'maggiore o uguale a',
97
- 'headerFilterOperator<': 'minore di',
98
- 'headerFilterOperator<=': 'minore o uguale a',
78
+ headerFilterOperatorDoesNotContain: 'Non contiene',
79
+ headerFilterOperatorEquals: 'Uguale a',
80
+ headerFilterOperatorDoesNotEqual: 'Diverso da',
81
+ headerFilterOperatorStartsWith: 'Comincia per',
82
+ headerFilterOperatorEndsWith: 'Termina per',
83
+ headerFilterOperatorIs: 'Uguale a',
84
+ headerFilterOperatorNot: 'Diverso da',
85
+ headerFilterOperatorAfter: 'Dopo il',
86
+ headerFilterOperatorOnOrAfter: 'A partire dal',
87
+ headerFilterOperatorBefore: 'Prima del',
88
+ headerFilterOperatorOnOrBefore: 'Fino al',
89
+ headerFilterOperatorIsEmpty: 'È vuoto',
90
+ headerFilterOperatorIsNotEmpty: 'Non è vuoto',
91
+ headerFilterOperatorIsAnyOf: 'È uno tra',
92
+ 'headerFilterOperator=': 'Uguale a',
93
+ 'headerFilterOperator!=': 'Diverso da',
94
+ 'headerFilterOperator>': 'Maggiore di',
95
+ 'headerFilterOperator>=': 'Maggiore o uguale a',
96
+ 'headerFilterOperator<': 'Minore di',
97
+ 'headerFilterOperator<=': 'Minore o uguale a',
99
98
  // Filter values text
100
99
  filterValueAny: 'qualunque',
101
100
  filterValueTrue: 'vero',
@@ -53,9 +53,9 @@ const ptBRGrid = {
53
53
  filterPanelInputPlaceholder: 'Filtrar valor',
54
54
  // Filter operators text
55
55
  filterOperatorContains: 'contém',
56
- // filterOperatorDoesNotContain: 'does not contain',
56
+ filterOperatorDoesNotContain: 'não contém',
57
57
  filterOperatorEquals: 'é igual a',
58
- // filterOperatorDoesNotEqual: 'does not equal',
58
+ filterOperatorDoesNotEqual: 'não é igual a',
59
59
  filterOperatorStartsWith: 'começa com',
60
60
  filterOperatorEndsWith: 'termina com',
61
61
  filterOperatorIs: 'é',
@@ -75,9 +75,9 @@ const ptBRGrid = {
75
75
  'filterOperator<=': 'menor ou igual que',
76
76
  // Header filter operators text
77
77
  headerFilterOperatorContains: 'Contém',
78
- // headerFilterOperatorDoesNotContain: 'Does not contain',
78
+ headerFilterOperatorDoesNotContain: 'Não contém',
79
79
  headerFilterOperatorEquals: 'Igual',
80
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
80
+ headerFilterOperatorDoesNotEqual: 'Não é igual a',
81
81
  headerFilterOperatorStartsWith: 'Começa com',
82
82
  headerFilterOperatorEndsWith: 'Termina com',
83
83
  headerFilterOperatorIs: 'É',
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
9
10
  var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
11
+ var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
10
12
  var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
11
13
  var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
12
14
  var _Select = _interopRequireDefault(require("@mui/material/Select"));
@@ -58,7 +60,9 @@ const iconSlots = {
58
60
  columnReorderIcon: _icons.GridDragIcon
59
61
  };
60
62
  const materialSlots = (0, _extends2.default)({}, iconSlots, {
63
+ baseBadge: _Badge.default,
61
64
  baseCheckbox: _Checkbox.default,
65
+ baseDivider: _Divider.default,
62
66
  baseTextField: _TextField.default,
63
67
  baseFormControl: _FormControl.default,
64
68
  baseSelect: _Select.default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "7.21.0",
3
+ "version": "7.22.0",
4
4
  "description": "The Community plan edition of the Data Grid components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",