@mui/x-data-grid 7.23.2 → 7.23.4

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 (202) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/DataGrid/DataGrid.js +7 -4
  3. package/README.md +1 -1
  4. package/components/GridColumnHeaders.d.ts +1 -1
  5. package/components/GridColumnHeaders.js +4 -4
  6. package/components/GridFooter.d.ts +2 -1
  7. package/components/GridFooter.js +4 -4
  8. package/components/GridLoadingOverlay.d.ts +1 -1
  9. package/components/GridLoadingOverlay.js +3 -2
  10. package/components/GridNoResultsOverlay.d.ts +2 -1
  11. package/components/GridNoResultsOverlay.js +4 -4
  12. package/components/GridNoRowsOverlay.d.ts +2 -1
  13. package/components/GridNoRowsOverlay.js +4 -4
  14. package/components/GridPagination.d.ts +1 -1
  15. package/components/GridPagination.js +5 -3
  16. package/components/GridRow.d.ts +1 -1
  17. package/components/GridRow.js +15 -3
  18. package/components/GridRowCount.d.ts +1 -1
  19. package/components/GridRowCount.js +3 -2
  20. package/components/GridSelectedRowCount.d.ts +4 -1
  21. package/components/GridSelectedRowCount.js +3 -2
  22. package/components/GridSkeletonLoadingOverlay.d.ts +1 -1
  23. package/components/GridSkeletonLoadingOverlay.js +4 -3
  24. package/components/cell/GridActionsCell.js +8 -1
  25. package/components/cell/GridActionsCellItem.d.ts +1 -1
  26. package/components/cell/GridActionsCellItem.js +3 -2
  27. package/components/cell/GridCell.d.ts +1 -1
  28. package/components/cell/GridCell.js +3 -2
  29. package/components/cell/GridEditInputCell.d.ts +1 -1
  30. package/components/cell/GridEditInputCell.js +72 -3
  31. package/components/columnHeaders/GridBaseColumnHeaders.d.ts +1 -1
  32. package/components/columnHeaders/GridBaseColumnHeaders.js +4 -3
  33. package/components/columnHeaders/GridColumnHeaderTitle.js +5 -3
  34. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -1
  35. package/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -2
  36. package/components/columnHeaders/GridIconButtonContainer.d.ts +1 -1
  37. package/components/columnHeaders/GridIconButtonContainer.js +5 -3
  38. package/components/columnSelection/GridCellCheckboxRenderer.d.ts +2 -2
  39. package/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
  40. package/components/columnSelection/GridHeaderCheckbox.d.ts +1 -1
  41. package/components/columnSelection/GridHeaderCheckbox.js +6 -4
  42. package/components/containers/GridFooterContainer.d.ts +1 -1
  43. package/components/containers/GridFooterContainer.js +5 -3
  44. package/components/containers/GridOverlay.d.ts +1 -1
  45. package/components/containers/GridOverlay.js +5 -3
  46. package/components/containers/GridRoot.d.ts +1 -1
  47. package/components/containers/GridRoot.js +5 -3
  48. package/components/containers/GridToolbarContainer.d.ts +1 -1
  49. package/components/containers/GridToolbarContainer.js +3 -2
  50. package/components/menu/columnMenu/GridColumnMenu.d.ts +2 -2
  51. package/components/menu/columnMenu/GridColumnMenu.js +5 -5
  52. package/components/menu/columnMenu/GridColumnMenuContainer.d.ts +1 -1
  53. package/components/menu/columnMenu/GridColumnMenuContainer.js +3 -2
  54. package/components/panel/GridPanel.d.ts +1 -1
  55. package/components/panel/GridPanel.js +3 -2
  56. package/components/panel/GridPanelWrapper.d.ts +1 -1
  57. package/components/panel/GridPanelWrapper.js +5 -3
  58. package/components/panel/filterPanel/GridFilterForm.d.ts +1 -1
  59. package/components/panel/filterPanel/GridFilterForm.js +3 -2
  60. package/components/panel/filterPanel/GridFilterInputValue.js +17 -10
  61. package/components/panel/filterPanel/GridFilterPanel.d.ts +1 -1
  62. package/components/panel/filterPanel/GridFilterPanel.js +4 -4
  63. package/components/toolbar/GridToolbar.d.ts +1 -1
  64. package/components/toolbar/GridToolbar.js +4 -4
  65. package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
  66. package/components/toolbar/GridToolbarColumnsButton.js +3 -2
  67. package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
  68. package/components/toolbar/GridToolbarDensitySelector.js +3 -2
  69. package/components/toolbar/GridToolbarExport.d.ts +1 -1
  70. package/components/toolbar/GridToolbarExport.js +2 -1
  71. package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
  72. package/components/toolbar/GridToolbarExportContainer.js +3 -2
  73. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  74. package/components/toolbar/GridToolbarFilterButton.js +3 -2
  75. package/components/virtualization/GridMainContainer.d.ts +3 -1
  76. package/components/virtualization/GridMainContainer.js +4 -3
  77. package/components/virtualization/GridVirtualScrollbar.d.ts +1 -1
  78. package/components/virtualization/GridVirtualScrollbar.js +2 -1
  79. package/components/virtualization/GridVirtualScrollerContent.d.ts +2 -0
  80. package/components/virtualization/GridVirtualScrollerContent.js +5 -5
  81. package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +2 -0
  82. package/components/virtualization/GridVirtualScrollerRenderZone.js +5 -3
  83. package/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  84. package/hooks/features/columnResize/gridColumnResizeApi.d.ts +6 -0
  85. package/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  86. package/hooks/features/columnResize/useGridColumnResize.d.ts +1 -1
  87. package/hooks/features/columnResize/useGridColumnResize.js +9 -4
  88. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -1
  89. package/hooks/features/columns/gridColumnsUtils.js +2 -1
  90. package/hooks/features/rows/useGridRowSpanning.js +13 -5
  91. package/hooks/features/virtualization/useGridVirtualScroller.js +11 -8
  92. package/index.js +1 -1
  93. package/internals/utils/useProps.js +3 -0
  94. package/locales/koKR.js +36 -39
  95. package/locales/nlNL.js +5 -6
  96. package/models/gridSlotsComponentsProps.d.ts +10 -0
  97. package/models/props/DataGridProps.d.ts +1 -0
  98. package/modern/DataGrid/DataGrid.js +7 -4
  99. package/modern/components/GridColumnHeaders.js +4 -4
  100. package/modern/components/GridFooter.js +4 -4
  101. package/modern/components/GridLoadingOverlay.js +3 -2
  102. package/modern/components/GridNoResultsOverlay.js +4 -4
  103. package/modern/components/GridNoRowsOverlay.js +4 -4
  104. package/modern/components/GridPagination.js +5 -3
  105. package/modern/components/GridRow.js +15 -3
  106. package/modern/components/GridRowCount.js +3 -2
  107. package/modern/components/GridSelectedRowCount.js +3 -2
  108. package/modern/components/GridSkeletonLoadingOverlay.js +4 -3
  109. package/modern/components/cell/GridActionsCell.js +8 -1
  110. package/modern/components/cell/GridActionsCellItem.js +3 -2
  111. package/modern/components/cell/GridCell.js +3 -2
  112. package/modern/components/cell/GridEditInputCell.js +72 -3
  113. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +4 -3
  114. package/modern/components/columnHeaders/GridColumnHeaderTitle.js +5 -3
  115. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -2
  116. package/modern/components/columnHeaders/GridIconButtonContainer.js +5 -3
  117. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
  118. package/modern/components/columnSelection/GridHeaderCheckbox.js +6 -4
  119. package/modern/components/containers/GridFooterContainer.js +5 -3
  120. package/modern/components/containers/GridOverlay.js +5 -3
  121. package/modern/components/containers/GridRoot.js +5 -3
  122. package/modern/components/containers/GridToolbarContainer.js +3 -2
  123. package/modern/components/menu/columnMenu/GridColumnMenu.js +5 -5
  124. package/modern/components/menu/columnMenu/GridColumnMenuContainer.js +3 -2
  125. package/modern/components/panel/GridPanel.js +3 -2
  126. package/modern/components/panel/GridPanelWrapper.js +5 -3
  127. package/modern/components/panel/filterPanel/GridFilterForm.js +3 -2
  128. package/modern/components/panel/filterPanel/GridFilterInputValue.js +17 -10
  129. package/modern/components/panel/filterPanel/GridFilterPanel.js +4 -4
  130. package/modern/components/toolbar/GridToolbar.js +4 -4
  131. package/modern/components/toolbar/GridToolbarColumnsButton.js +3 -2
  132. package/modern/components/toolbar/GridToolbarDensitySelector.js +3 -2
  133. package/modern/components/toolbar/GridToolbarExport.js +2 -1
  134. package/modern/components/toolbar/GridToolbarExportContainer.js +3 -2
  135. package/modern/components/toolbar/GridToolbarFilterButton.js +3 -2
  136. package/modern/components/virtualization/GridMainContainer.js +4 -3
  137. package/modern/components/virtualization/GridVirtualScrollbar.js +2 -1
  138. package/modern/components/virtualization/GridVirtualScrollerContent.js +5 -5
  139. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +5 -3
  140. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  141. package/modern/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  142. package/modern/hooks/features/columnResize/useGridColumnResize.js +9 -4
  143. package/modern/hooks/features/columns/gridColumnsUtils.js +2 -1
  144. package/modern/hooks/features/rows/useGridRowSpanning.js +13 -5
  145. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +11 -8
  146. package/modern/index.js +1 -1
  147. package/modern/internals/utils/useProps.js +3 -0
  148. package/modern/locales/koKR.js +36 -39
  149. package/modern/locales/nlNL.js +5 -6
  150. package/node/DataGrid/DataGrid.js +7 -4
  151. package/node/components/GridColumnHeaders.js +4 -4
  152. package/node/components/GridFooter.js +4 -4
  153. package/node/components/GridLoadingOverlay.js +3 -2
  154. package/node/components/GridNoResultsOverlay.js +4 -4
  155. package/node/components/GridNoRowsOverlay.js +4 -4
  156. package/node/components/GridPagination.js +5 -3
  157. package/node/components/GridRow.js +15 -3
  158. package/node/components/GridRowCount.js +3 -2
  159. package/node/components/GridSelectedRowCount.js +3 -2
  160. package/node/components/GridSkeletonLoadingOverlay.js +4 -3
  161. package/node/components/cell/GridActionsCell.js +8 -1
  162. package/node/components/cell/GridActionsCellItem.js +3 -2
  163. package/node/components/cell/GridCell.js +3 -2
  164. package/node/components/cell/GridEditInputCell.js +72 -3
  165. package/node/components/columnHeaders/GridBaseColumnHeaders.js +4 -3
  166. package/node/components/columnHeaders/GridColumnHeaderTitle.js +5 -3
  167. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +3 -2
  168. package/node/components/columnHeaders/GridIconButtonContainer.js +5 -3
  169. package/node/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
  170. package/node/components/columnSelection/GridHeaderCheckbox.js +6 -4
  171. package/node/components/containers/GridFooterContainer.js +5 -3
  172. package/node/components/containers/GridOverlay.js +5 -3
  173. package/node/components/containers/GridRoot.js +5 -3
  174. package/node/components/containers/GridToolbarContainer.js +3 -2
  175. package/node/components/menu/columnMenu/GridColumnMenu.js +5 -5
  176. package/node/components/menu/columnMenu/GridColumnMenuContainer.js +3 -2
  177. package/node/components/panel/GridPanel.js +3 -2
  178. package/node/components/panel/GridPanelWrapper.js +5 -3
  179. package/node/components/panel/filterPanel/GridFilterForm.js +3 -2
  180. package/node/components/panel/filterPanel/GridFilterInputValue.js +17 -10
  181. package/node/components/panel/filterPanel/GridFilterPanel.js +4 -4
  182. package/node/components/toolbar/GridToolbar.js +4 -4
  183. package/node/components/toolbar/GridToolbarColumnsButton.js +3 -2
  184. package/node/components/toolbar/GridToolbarDensitySelector.js +3 -2
  185. package/node/components/toolbar/GridToolbarExport.js +2 -1
  186. package/node/components/toolbar/GridToolbarExportContainer.js +3 -2
  187. package/node/components/toolbar/GridToolbarFilterButton.js +3 -2
  188. package/node/components/virtualization/GridMainContainer.js +4 -3
  189. package/node/components/virtualization/GridVirtualScrollbar.js +2 -1
  190. package/node/components/virtualization/GridVirtualScrollerContent.js +5 -5
  191. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +5 -3
  192. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  193. package/node/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  194. package/node/hooks/features/columnResize/useGridColumnResize.js +9 -4
  195. package/node/hooks/features/columns/gridColumnsUtils.js +2 -1
  196. package/node/hooks/features/rows/useGridRowSpanning.js +13 -5
  197. package/node/hooks/features/virtualization/useGridVirtualScroller.js +11 -8
  198. package/node/index.js +1 -1
  199. package/node/internals/utils/useProps.js +3 -0
  200. package/node/locales/koKR.js +36 -39
  201. package/node/locales/nlNL.js +5 -6
  202. package/package.json +1 -1
@@ -14,6 +14,7 @@ var _clsx = _interopRequireDefault(require("clsx"));
14
14
  var _Unstable_TrapFocus = _interopRequireDefault(require("@mui/material/Unstable_TrapFocus"));
15
15
  var _styles = require("@mui/material/styles");
16
16
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
17
+ var _forwardRef = require("@mui/x-internals/forwardRef");
17
18
  var _gridClasses = require("../../constants/gridClasses");
18
19
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
19
20
  var _jsxRuntime = require("react/jsx-runtime");
@@ -40,7 +41,7 @@ const GridPanelWrapperRoot = (0, _styles.styled)('div', {
40
41
  }
41
42
  });
42
43
  const isEnabled = () => true;
43
- const GridPanelWrapper = exports.GridPanelWrapper = /*#__PURE__*/React.forwardRef(function GridPanelWrapper(props, ref) {
44
+ const GridPanelWrapper = exports.GridPanelWrapper = (0, _forwardRef.forwardRef)(function GridPanelWrapper(props, ref) {
44
45
  const {
45
46
  className,
46
47
  slotProps = {}
@@ -54,11 +55,12 @@ const GridPanelWrapper = exports.GridPanelWrapper = /*#__PURE__*/React.forwardRe
54
55
  isEnabled: isEnabled
55
56
  }, slotProps.TrapFocus, {
56
57
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridPanelWrapperRoot, (0, _extends2.default)({
57
- ref: ref,
58
58
  tabIndex: -1,
59
59
  className: (0, _clsx.default)(classes.root, className),
60
60
  ownerState: rootProps
61
- }, other))
61
+ }, other, {
62
+ ref: ref
63
+ }))
62
64
  }));
63
65
  });
64
66
  process.env.NODE_ENV !== "production" ? GridPanelWrapper.propTypes = {
@@ -14,6 +14,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
14
14
  var _utils = require("@mui/utils");
15
15
  var _styles = require("@mui/material/styles");
16
16
  var _clsx = _interopRequireDefault(require("clsx"));
17
+ var _forwardRef = require("@mui/x-internals/forwardRef");
17
18
  var _gridColumnsSelector = require("../../../hooks/features/columns/gridColumnsSelector");
18
19
  var _gridFilterSelector = require("../../../hooks/features/filter/gridFilterSelector");
19
20
  var _useGridSelector = require("../../../hooks/utils/useGridSelector");
@@ -103,7 +104,7 @@ const getLogicOperatorLocaleKey = logicOperator => {
103
104
  };
104
105
  const getColumnLabel = col => col.headerName || col.field;
105
106
  const collator = new Intl.Collator();
106
- const GridFilterForm = exports.GridFilterForm = /*#__PURE__*/React.forwardRef(function GridFilterForm(props, ref) {
107
+ const GridFilterForm = exports.GridFilterForm = (0, _forwardRef.forwardRef)(function GridFilterForm(props, ref) {
107
108
  const {
108
109
  item,
109
110
  hasMultipleFilters,
@@ -263,11 +264,11 @@ const GridFilterForm = exports.GridFilterForm = /*#__PURE__*/React.forwardRef(fu
263
264
  }
264
265
  }), [currentOperator]);
265
266
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridFilterFormRoot, (0, _extends2.default)({
266
- ref: ref,
267
267
  className: classes.root,
268
268
  "data-id": item.id,
269
269
  ownerState: rootProps
270
270
  }, other, {
271
+ ref: ref,
271
272
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(FilterFormDeleteIcon, (0, _extends2.default)({
272
273
  variant: "standard",
273
274
  as: rootProps.slots.baseFormControl
@@ -30,19 +30,17 @@ function GridFilterInputValue(props) {
30
30
  } = props,
31
31
  others = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
32
32
  const filterTimeout = (0, _useTimeout.useTimeout)();
33
- const [filterValueState, setFilterValueState] = React.useState(item.value ?? '');
33
+ const [filterValueState, setFilterValueState] = React.useState(sanitizeFilterItemValue(item.value, type));
34
34
  const [applying, setIsApplying] = React.useState(false);
35
35
  const id = (0, _utils.unstable_useId)();
36
36
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
37
37
  const onFilterChange = React.useCallback(event => {
38
- const {
39
- value
40
- } = event.target;
41
- setFilterValueState(String(value));
38
+ const value = sanitizeFilterItemValue(event.target.value, type);
39
+ setFilterValueState(value);
42
40
  setIsApplying(true);
43
41
  filterTimeout.start(rootProps.filterDebounceMs, () => {
44
42
  const newItem = (0, _extends2.default)({}, item, {
45
- value: type === 'number' ? Number(value) : value,
43
+ value,
46
44
  fromInput: id
47
45
  });
48
46
  applyValue(newItem);
@@ -51,15 +49,15 @@ function GridFilterInputValue(props) {
51
49
  }, [filterTimeout, rootProps.filterDebounceMs, item, type, id, applyValue]);
52
50
  React.useEffect(() => {
53
51
  const itemPlusTag = item;
54
- if (itemPlusTag.fromInput !== id || item.value === undefined) {
55
- setFilterValueState(String(item.value ?? ''));
52
+ if (itemPlusTag.fromInput !== id || item.value == null) {
53
+ setFilterValueState(sanitizeFilterItemValue(item.value, type));
56
54
  }
57
- }, [id, item]);
55
+ }, [id, item, type]);
58
56
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTextField, (0, _extends2.default)({
59
57
  id: id,
60
58
  label: apiRef.current.getLocaleText('filterPanelInputLabel'),
61
59
  placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),
62
- value: filterValueState,
60
+ value: filterValueState === undefined ? '' : String(filterValueState),
63
61
  onChange: onFilterChange,
64
62
  variant: variant,
65
63
  type: type || 'text',
@@ -81,6 +79,15 @@ function GridFilterInputValue(props) {
81
79
  inputRef: focusElementRef
82
80
  }, others, rootProps.slotProps?.baseTextField));
83
81
  }
82
+ function sanitizeFilterItemValue(value, type) {
83
+ if (value == null || value === '') {
84
+ return undefined;
85
+ }
86
+ if (type === 'number') {
87
+ return Number(value);
88
+ }
89
+ return String(value);
90
+ }
84
91
  process.env.NODE_ENV !== "production" ? GridFilterInputValue.propTypes = {
85
92
  // ----------------------------- Warning --------------------------------
86
93
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -10,6 +10,7 @@ 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
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _forwardRef = require("@mui/x-internals/forwardRef");
13
14
  var _gridFilterItem = require("../../../models/gridFilterItem");
14
15
  var _useGridApiContext = require("../../../hooks/utils/useGridApiContext");
15
16
  var _GridPanelContent = require("../GridPanelContent");
@@ -28,7 +29,7 @@ const getGridFilter = col => ({
28
29
  id: Math.round(Math.random() * 1e5)
29
30
  });
30
31
  exports.getGridFilter = getGridFilter;
31
- const GridFilterPanel = exports.GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(props, ref) {
32
+ const GridFilterPanel = exports.GridFilterPanel = (0, _forwardRef.forwardRef)(function GridFilterPanel(props, ref) {
32
33
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
33
34
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
34
35
  const filterModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterModelSelector);
@@ -150,9 +151,8 @@ const GridFilterPanel = exports.GridFilterPanel = /*#__PURE__*/React.forwardRef(
150
151
  lastFilterRef.current.focus();
151
152
  }
152
153
  }, [validFilters.length]);
153
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({
154
- ref: ref
155
- }, other, {
154
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({}, other, {
155
+ ref: ref,
156
156
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelContent.GridPanelContent, {
157
157
  children: [readOnlyFilters.map((item, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridFilterForm.GridFilterForm, (0, _extends2.default)({
158
158
  item: item,
@@ -10,6 +10,7 @@ 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
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _forwardRef = require("@mui/x-internals/forwardRef");
13
14
  var _GridToolbarContainer = require("../containers/GridToolbarContainer");
14
15
  var _GridToolbarColumnsButton = require("./GridToolbarColumnsButton");
15
16
  var _GridToolbarDensitySelector = require("./GridToolbarDensitySelector");
@@ -19,7 +20,7 @@ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
19
20
  var _GridToolbarQuickFilter = require("./GridToolbarQuickFilter");
20
21
  var _jsxRuntime = require("react/jsx-runtime");
21
22
  const _excluded = ["className", "csvOptions", "printOptions", "excelOptions", "showQuickFilter", "quickFilterProps"];
22
- const GridToolbar = exports.GridToolbar = /*#__PURE__*/React.forwardRef(function GridToolbar(props, ref) {
23
+ const GridToolbar = exports.GridToolbar = (0, _forwardRef.forwardRef)(function GridToolbar(props, ref) {
23
24
  // TODO v7: think about where export option should be passed.
24
25
  // from slotProps={{ toolbarExport: { ...exportOption } }} seems to be more appropriate
25
26
  const _ref = props,
@@ -35,9 +36,8 @@ const GridToolbar = exports.GridToolbar = /*#__PURE__*/React.forwardRef(function
35
36
  if (rootProps.disableColumnFilter && rootProps.disableColumnSelector && rootProps.disableDensitySelector && !showQuickFilter) {
36
37
  return null;
37
38
  }
38
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridToolbarContainer.GridToolbarContainer, (0, _extends2.default)({
39
- ref: ref
40
- }, other, {
39
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridToolbarContainer.GridToolbarContainer, (0, _extends2.default)({}, other, {
40
+ ref: ref,
41
41
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridToolbarColumnsButton.GridToolbarColumnsButton, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridToolbarFilterButton.GridToolbarFilterButton, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridToolbarDensitySelector.GridToolbarDensitySelector, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridToolbarExport.GridToolbarExport, {
42
42
  csvOptions: csvOptions,
43
43
  printOptions: printOptions
@@ -10,13 +10,14 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _utils = require("@mui/material/utils");
13
+ var _forwardRef = require("@mui/x-internals/forwardRef");
13
14
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
14
15
  var _gridPreferencePanelSelector = require("../../hooks/features/preferencesPanel/gridPreferencePanelSelector");
15
16
  var _gridPreferencePanelsValue = require("../../hooks/features/preferencesPanel/gridPreferencePanelsValue");
16
17
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
17
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
18
19
  var _jsxRuntime = require("react/jsx-runtime");
19
- const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = /*#__PURE__*/React.forwardRef(function GridToolbarColumnsButton(props, ref) {
20
+ const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = (0, _forwardRef.forwardRef)(function GridToolbarColumnsButton(props, ref) {
20
21
  const {
21
22
  slotProps = {}
22
23
  } = props;
@@ -46,7 +47,6 @@ const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = /*#__PURE__*
46
47
  enterDelay: 1000
47
48
  }, rootProps.slotProps?.baseTooltip, tooltipProps, {
48
49
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
49
- ref: ref,
50
50
  id: columnButtonId,
51
51
  size: "small",
52
52
  "aria-label": apiRef.current.getLocaleText('toolbarColumnsLabel'),
@@ -56,6 +56,7 @@ const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = /*#__PURE__*
56
56
  startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnSelectorIcon, {}),
57
57
  onClick: showColumns
58
58
  }, rootProps.slotProps?.baseButton, buttonProps, {
59
+ ref: ref,
59
60
  children: apiRef.current.getLocaleText('toolbarColumns')
60
61
  }))
61
62
  }));
@@ -13,6 +13,7 @@ var _utils = require("@mui/utils");
13
13
  var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
14
14
  var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
15
15
  var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
16
+ var _forwardRef = require("@mui/x-internals/forwardRef");
16
17
  var _densitySelector = require("../../hooks/features/density/densitySelector");
17
18
  var _keyboardUtils = require("../../utils/keyboardUtils");
18
19
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
@@ -21,7 +22,7 @@ var _GridMenu = require("../menu/GridMenu");
21
22
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
22
23
  var _gridClasses = require("../../constants/gridClasses");
23
24
  var _jsxRuntime = require("react/jsx-runtime");
24
- const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function GridToolbarDensitySelector(props, ref) {
25
+ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = (0, _forwardRef.forwardRef)(function GridToolbarDensitySelector(props, ref) {
25
26
  const {
26
27
  slotProps = {}
27
28
  } = props;
@@ -95,7 +96,6 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
95
96
  enterDelay: 1000
96
97
  }, rootProps.slotProps?.baseTooltip, tooltipProps, {
97
98
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
98
- ref: handleRef,
99
99
  size: "small",
100
100
  startIcon: startIcon,
101
101
  "aria-label": apiRef.current.getLocaleText('toolbarDensityLabel'),
@@ -105,6 +105,7 @@ const GridToolbarDensitySelector = exports.GridToolbarDensitySelector = /*#__PUR
105
105
  id: densityButtonId,
106
106
  onClick: handleDensitySelectorOpen
107
107
  }, rootProps.slotProps?.baseButton, buttonProps, {
108
+ ref: handleRef,
108
109
  children: apiRef.current.getLocaleText('toolbarDensity')
109
110
  }))
110
111
  })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
@@ -13,6 +13,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
13
13
  var React = _interopRequireWildcard(require("react"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
  var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
16
+ var _forwardRef = require("@mui/x-internals/forwardRef");
16
17
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
17
18
  var _GridToolbarExportContainer = require("./GridToolbarExportContainer");
18
19
  var _jsxRuntime = require("react/jsx-runtime");
@@ -91,7 +92,7 @@ process.env.NODE_ENV !== "production" ? GridPrintExportMenuItem.propTypes = {
91
92
  pageStyle: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string])
92
93
  })
93
94
  } : void 0;
94
- const GridToolbarExport = exports.GridToolbarExport = /*#__PURE__*/React.forwardRef(function GridToolbarExport(props, ref) {
95
+ const GridToolbarExport = exports.GridToolbarExport = (0, _forwardRef.forwardRef)(function GridToolbarExport(props, ref) {
95
96
  const _ref = props,
96
97
  {
97
98
  csvOptions = {},
@@ -11,13 +11,14 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _utils = require("@mui/utils");
13
13
  var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
14
+ var _forwardRef = require("@mui/x-internals/forwardRef");
14
15
  var _keyboardUtils = require("../../utils/keyboardUtils");
15
16
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
16
17
  var _GridMenu = require("../menu/GridMenu");
17
18
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
18
19
  var _gridClasses = require("../../constants/gridClasses");
19
20
  var _jsxRuntime = require("react/jsx-runtime");
20
- const GridToolbarExportContainer = exports.GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function GridToolbarExportContainer(props, ref) {
21
+ const GridToolbarExportContainer = exports.GridToolbarExportContainer = (0, _forwardRef.forwardRef)(function GridToolbarExportContainer(props, ref) {
21
22
  const {
22
23
  children,
23
24
  slotProps = {}
@@ -53,7 +54,6 @@ const GridToolbarExportContainer = exports.GridToolbarExportContainer = /*#__PUR
53
54
  enterDelay: 1000
54
55
  }, rootProps.slotProps?.baseTooltip, tooltipProps, {
55
56
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
56
- ref: handleRef,
57
57
  size: "small",
58
58
  startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.exportIcon, {}),
59
59
  "aria-expanded": open,
@@ -63,6 +63,7 @@ const GridToolbarExportContainer = exports.GridToolbarExportContainer = /*#__PUR
63
63
  id: exportButtonId,
64
64
  onClick: handleMenuOpen
65
65
  }, rootProps.slotProps?.baseButton, buttonProps, {
66
+ ref: handleRef,
66
67
  children: apiRef.current.getLocaleText('toolbarExport')
67
68
  }))
68
69
  })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
@@ -11,6 +11,7 @@ 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 _forwardRef = require("@mui/x-internals/forwardRef");
14
15
  var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
15
16
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
16
17
  var _gridFilterSelector = require("../../hooks/features/filter/gridFilterSelector");
@@ -39,7 +40,7 @@ const GridToolbarFilterListRoot = (0, _styles.styled)('ul', {
39
40
  margin: theme.spacing(1, 1, 0.5),
40
41
  padding: theme.spacing(0, 1)
41
42
  }));
42
- const GridToolbarFilterButton = exports.GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolbarFilterButton(props, ref) {
43
+ const GridToolbarFilterButton = exports.GridToolbarFilterButton = (0, _forwardRef.forwardRef)(function GridToolbarFilterButton(props, ref) {
43
44
  const {
44
45
  slotProps = {}
45
46
  } = props;
@@ -105,7 +106,6 @@ const GridToolbarFilterButton = exports.GridToolbarFilterButton = /*#__PURE__*/R
105
106
  enterDelay: 1000
106
107
  }, rootProps.slotProps?.baseTooltip, tooltipProps, {
107
108
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
108
- ref: ref,
109
109
  id: filterButtonId,
110
110
  size: "small",
111
111
  "aria-label": apiRef.current.getLocaleText('toolbarFiltersLabel'),
@@ -120,6 +120,7 @@ const GridToolbarFilterButton = exports.GridToolbarFilterButton = /*#__PURE__*/R
120
120
  })),
121
121
  onClick: toggleFilter
122
122
  }, rootProps.slotProps?.baseButton, buttonProps, {
123
+ ref: ref,
123
124
  children: apiRef.current.getLocaleText('toolbarFilters')
124
125
  }))
125
126
  }));
@@ -9,6 +9,7 @@ exports.GridMainContainer = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _system = require("@mui/system");
12
+ var _forwardRef = require("@mui/x-internals/forwardRef");
12
13
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
13
14
  var _useGridConfiguration = require("../../hooks/utils/useGridConfiguration");
14
15
  var _jsxRuntime = require("react/jsx-runtime");
@@ -29,16 +30,16 @@ const Element = (0, _system.styled)('div', {
29
30
  display: 'flex',
30
31
  flexDirection: 'column'
31
32
  });
32
- const GridMainContainer = exports.GridMainContainer = /*#__PURE__*/React.forwardRef((props, ref) => {
33
+ const GridMainContainer = exports.GridMainContainer = (0, _forwardRef.forwardRef)((props, ref) => {
33
34
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
34
35
  const configuration = (0, _useGridConfiguration.useGridConfiguration)();
35
36
  const ariaAttributes = configuration.hooks.useGridAriaAttributes();
36
37
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Element, (0, _extends2.default)({
37
- ref: ref,
38
38
  ownerState: rootProps,
39
39
  className: props.className,
40
40
  tabIndex: -1
41
- }, ariaAttributes, {
41
+ }, ariaAttributes, rootProps.slotProps?.main, {
42
+ ref: ref,
42
43
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(GridPanelAnchor, {
43
44
  role: "presentation",
44
45
  "data-id": "gridPanelAnchor"
@@ -8,6 +8,7 @@ exports.GridVirtualScrollbar = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _system = require("@mui/system");
10
10
  var _utils = require("@mui/utils");
11
+ var _forwardRef = require("@mui/x-internals/forwardRef");
11
12
  var _useOnMount = require("../../hooks/utils/useOnMount");
12
13
  var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
13
14
  var _hooks = require("../../hooks");
@@ -59,7 +60,7 @@ const ScrollbarHorizontal = (0, _system.styled)(Scrollbar)({
59
60
  },
60
61
  bottom: '0px'
61
62
  });
62
- const GridVirtualScrollbar = exports.GridVirtualScrollbar = /*#__PURE__*/React.forwardRef(function GridVirtualScrollbar(props, ref) {
63
+ const GridVirtualScrollbar = exports.GridVirtualScrollbar = (0, _forwardRef.forwardRef)(function GridVirtualScrollbar(props, ref) {
63
64
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
64
65
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
65
66
  const isLocked = React.useRef(false);
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _clsx = _interopRequireDefault(require("clsx"));
12
12
  var _system = require("@mui/system");
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
+ var _forwardRef = require("@mui/x-internals/forwardRef");
14
15
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
15
16
  var _gridClasses = require("../../constants/gridClasses");
16
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -28,14 +29,13 @@ const VirtualScrollerContentRoot = (0, _system.styled)('div', {
28
29
  slot: 'VirtualScrollerContent',
29
30
  overridesResolver: (props, styles) => styles.virtualScrollerContent
30
31
  })({});
31
- const GridVirtualScrollerContent = exports.GridVirtualScrollerContent = /*#__PURE__*/React.forwardRef(function GridVirtualScrollerContent(props, ref) {
32
+ const GridVirtualScrollerContent = exports.GridVirtualScrollerContent = (0, _forwardRef.forwardRef)(function GridVirtualScrollerContent(props, ref) {
32
33
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
33
34
  const overflowedContent = !rootProps.autoHeight && props.style?.minHeight === 'auto';
34
35
  const classes = useUtilityClasses(rootProps, overflowedContent);
35
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerContentRoot, (0, _extends2.default)({
36
- ref: ref
37
- }, props, {
36
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerContentRoot, (0, _extends2.default)({}, props, {
38
37
  ownerState: rootProps,
39
- className: (0, _clsx.default)(classes.root, props.className)
38
+ className: (0, _clsx.default)(classes.root, props.className),
39
+ ref: ref
40
40
  }));
41
41
  });
@@ -12,6 +12,7 @@ var React = _interopRequireWildcard(require("react"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _system = require("@mui/system");
14
14
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
15
+ var _forwardRef = require("@mui/x-internals/forwardRef");
15
16
  var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
16
17
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
17
18
  var _rows = require("../../hooks/features/rows");
@@ -39,7 +40,7 @@ const VirtualScrollerRenderZoneRoot = (0, _system.styled)('div', {
39
40
  // Prevents margin collapsing when using `getRowSpacing`
40
41
  flexDirection: 'column'
41
42
  });
42
- const GridVirtualScrollerRenderZone = exports.GridVirtualScrollerRenderZone = /*#__PURE__*/React.forwardRef(function GridVirtualScrollerRenderZone(props, ref) {
43
+ const GridVirtualScrollerRenderZone = exports.GridVirtualScrollerRenderZone = (0, _forwardRef.forwardRef)(function GridVirtualScrollerRenderZone(props, ref) {
43
44
  const {
44
45
  className
45
46
  } = props,
@@ -53,11 +54,12 @@ const GridVirtualScrollerRenderZone = exports.GridVirtualScrollerRenderZone = /*
53
54
  return rowsMeta.positions[renderContext.firstRowIndex] ?? 0;
54
55
  });
55
56
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerRenderZoneRoot, (0, _extends2.default)({
56
- ref: ref,
57
57
  className: (0, _clsx.default)(classes.root, className),
58
58
  ownerState: rootProps,
59
59
  style: {
60
60
  transform: `translate3d(0, ${offsetTop}px, 0)`
61
61
  }
62
- }, other));
62
+ }, other, {
63
+ ref: ref
64
+ }));
63
65
  });
@@ -55,7 +55,7 @@ const useGridColumnHeaders = props => {
55
55
  const isRtl = (0, _RtlProvider.useRtl)();
56
56
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
57
57
  const dimensions = (0, _utils.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
58
- const hasVirtualization = (0, _utils.useGridSelector)(apiRef, _virtualization.gridVirtualizationColumnEnabledSelector);
58
+ const hasColumnVirtualization = (0, _utils.useGridSelector)(apiRef, _virtualization.gridVirtualizationColumnEnabledSelector);
59
59
  const columnGroupsModel = (0, _utils.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsUnwrappedModelSelector);
60
60
  const columnPositions = (0, _utils.useGridSelector)(apiRef, _columns.gridColumnPositionsSelector);
61
61
  const renderContext = (0, _utils.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
@@ -95,8 +95,15 @@ const useGridColumnHeaders = props => {
95
95
  renderContext: currentContext = renderContext,
96
96
  maxLastColumn = visibleColumns.length
97
97
  } = params || {};
98
- const firstColumnToRender = currentContext.firstColumnIndex;
99
- const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;
98
+ let firstColumnToRender;
99
+ let lastColumnToRender;
100
+ if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
101
+ firstColumnToRender = 0;
102
+ lastColumnToRender = maxLastColumn;
103
+ } else {
104
+ firstColumnToRender = currentContext.firstColumnIndex;
105
+ lastColumnToRender = currentContext.lastColumnIndex;
106
+ }
100
107
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
101
108
  return {
102
109
  renderedColumns,
@@ -8,7 +8,8 @@ const DEFAULT_GRID_AUTOSIZE_OPTIONS = exports.DEFAULT_GRID_AUTOSIZE_OPTIONS = {
8
8
  includeHeaders: true,
9
9
  includeOutliers: false,
10
10
  outliersFactor: 1.5,
11
- expand: false
11
+ expand: false,
12
+ disableColumnVirtualization: true
12
13
  };
13
14
 
14
15
  /**
@@ -467,6 +467,7 @@ const useGridColumnResize = (apiRef, props) => {
467
467
  return;
468
468
  }
469
469
  apiRef.current.autosizeColumns((0, _extends2.default)({}, props.autosizeOptions, {
470
+ disableColumnVirtualization: false,
470
471
  columns: [column.field]
471
472
  }));
472
473
  });
@@ -493,8 +494,10 @@ const useGridColumnResize = (apiRef, props) => {
493
494
  options.columns = options.columns.filter(c => state.columnVisibilityModel[c] !== false);
494
495
  const columns = options.columns.map(c => apiRef.current.state.columns.lookup[c]);
495
496
  try {
496
- apiRef.current.unstable_setColumnVirtualization(false);
497
- await columnVirtualizationDisabled();
497
+ if (!props.disableVirtualization && options.disableColumnVirtualization) {
498
+ apiRef.current.unstable_setColumnVirtualization(false);
499
+ await columnVirtualizationDisabled();
500
+ }
498
501
  const widthByField = extractColumnWidths(apiRef, options, columns);
499
502
  const newColumns = columns.map(column => (0, _extends2.default)({}, column, {
500
503
  width: widthByField[column.field],
@@ -526,10 +529,12 @@ const useGridColumnResize = (apiRef, props) => {
526
529
  }
527
530
  });
528
531
  } finally {
529
- apiRef.current.unstable_setColumnVirtualization(true);
532
+ if (!props.disableVirtualization) {
533
+ apiRef.current.unstable_setColumnVirtualization(true);
534
+ }
530
535
  isAutosizingRef.current = false;
531
536
  }
532
- }, [apiRef, columnVirtualizationDisabled]);
537
+ }, [apiRef, columnVirtualizationDisabled, props.disableVirtualization]);
533
538
 
534
539
  /**
535
540
  * EFFECTS
@@ -334,6 +334,7 @@ function getTotalHeaderHeight(apiRef, props) {
334
334
  const maxDepth = (0, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector)(apiRef);
335
335
  const isHeaderFilteringEnabled = (0, _gridHeaderFilteringSelectors.gridHeaderFilteringEnabledSelector)(apiRef);
336
336
  const columnHeadersHeight = Math.floor(props.columnHeaderHeight * densityFactor);
337
+ const columnGroupHeadersHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
337
338
  const filterHeadersHeight = isHeaderFilteringEnabled ? Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor) : 0;
338
- return columnHeadersHeight * (1 + (maxDepth ?? 0)) + filterHeadersHeight;
339
+ return columnHeadersHeight + columnGroupHeadersHeight * maxDepth + filterHeadersHeight;
339
340
  }
@@ -14,6 +14,7 @@ var _gridColumnsSelector = require("../columns/gridColumnsSelector");
14
14
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
15
15
  var _gridVirtualizationSelectors = require("../virtualization/gridVirtualizationSelectors");
16
16
  var _useGridSelector = require("../../utils/useGridSelector");
17
+ var _gridRowsSelector = require("./gridRowsSelector");
17
18
  var _gridRowSpanningUtils = require("./gridRowSpanningUtils");
18
19
  var _gridCheckboxSelectionColDef = require("../../../colDef/gridCheckboxSelectionColDef");
19
20
  const EMPTY_STATE = {
@@ -43,7 +44,7 @@ const computeRowSpanningState = (apiRef, colDefs, visibleRows, range, rangeToPro
43
44
  if (skippedFields.has(colDef.field)) {
44
45
  return;
45
46
  }
46
- for (let index = rangeToProcess.firstRowIndex; index <= rangeToProcess.lastRowIndex; index += 1) {
47
+ for (let index = rangeToProcess.firstRowIndex; index < rangeToProcess.lastRowIndex; index += 1) {
47
48
  const row = visibleRows[index];
48
49
  if (hiddenCells[row.id]?.[colDef.field]) {
49
50
  continue;
@@ -150,7 +151,7 @@ const rowSpanningStateInitializer = (state, props, apiRef) => {
150
151
  }
151
152
  const rangeToProcess = {
152
153
  firstRowIndex: 0,
153
- lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(rowIds.length - 1, 0))
154
+ lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS, Math.max(rowIds.length, 0))
154
155
  };
155
156
  const rows = rowIds.map(id => ({
156
157
  id,
@@ -182,10 +183,11 @@ const useGridRowSpanning = (apiRef, props) => {
182
183
  } = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
183
184
  const renderContext = (0, _useGridSelector.useGridSelector)(apiRef, _gridVirtualizationSelectors.gridRenderContextSelector);
184
185
  const colDefs = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
186
+ const tree = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowTreeSelector);
185
187
  const processedRange = (0, _useLazyRef.default)(() => {
186
188
  return Object.keys(apiRef.current.state.rowSpanning.spannedCells).length > 0 ? {
187
189
  firstRowIndex: 0,
188
- lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(apiRef.current.state.rows.dataRowIds.length - 1, 0))
190
+ lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS, Math.max(apiRef.current.state.rows.dataRowIds.length, 0))
189
191
  } : EMPTY_RANGE;
190
192
  });
191
193
  const lastRange = React.useRef(EMPTY_RANGE);
@@ -213,7 +215,7 @@ const useGridRowSpanning = (apiRef, props) => {
213
215
  }
214
216
  const rangeToProcess = (0, _gridRowSpanningUtils.getUnprocessedRange)({
215
217
  firstRowIndex: renderContext.firstRowIndex,
216
- lastRowIndex: Math.min(renderContext.lastRowIndex - 1, range.lastRowIndex)
218
+ lastRowIndex: Math.min(renderContext.lastRowIndex, range.lastRowIndex + 1)
217
219
  }, processedRange.current);
218
220
  if (rangeToProcess === null) {
219
221
  return;
@@ -246,11 +248,17 @@ const useGridRowSpanning = (apiRef, props) => {
246
248
  const prevRenderContext = React.useRef(renderContext);
247
249
  const isFirstRender = React.useRef(true);
248
250
  const shouldResetState = React.useRef(false);
251
+ const previousTree = React.useRef(tree);
249
252
  React.useEffect(() => {
250
253
  const firstRender = isFirstRender.current;
251
254
  if (isFirstRender.current) {
252
255
  isFirstRender.current = false;
253
256
  }
257
+ if (tree !== previousTree.current) {
258
+ previousTree.current = tree;
259
+ updateRowSpanningState(true);
260
+ return;
261
+ }
254
262
  if (range && lastRange.current && (0, _gridRowSpanningUtils.isRowRangeUpdated)(range, lastRange.current)) {
255
263
  lastRange.current = range;
256
264
  shouldResetState.current = true;
@@ -264,6 +272,6 @@ const useGridRowSpanning = (apiRef, props) => {
264
272
  return;
265
273
  }
266
274
  updateRowSpanningState();
267
- }, [updateRowSpanningState, renderContext, range, lastRange]);
275
+ }, [updateRowSpanningState, renderContext, range, lastRange, tree]);
268
276
  };
269
277
  exports.useGridRowSpanning = useGridRowSpanning;
@@ -103,10 +103,7 @@ const useGridVirtualScroller = () => {
103
103
  return undefined;
104
104
  }
105
105
  const initialRect = node.getBoundingClientRect();
106
- let lastSize = {
107
- width: initialRect.width,
108
- height: initialRect.height
109
- };
106
+ let lastSize = roundDimensions(initialRect);
110
107
  apiRef.current.publishEvent('resize', lastSize);
111
108
  if (typeof ResizeObserver === 'undefined') {
112
109
  return undefined;
@@ -116,10 +113,7 @@ const useGridVirtualScroller = () => {
116
113
  if (!entry) {
117
114
  return;
118
115
  }
119
- const newSize = {
120
- width: entry.contentRect.width,
121
- height: entry.contentRect.height
122
- };
116
+ const newSize = roundDimensions(entry.contentRect);
123
117
  if (newSize.width === lastSize.width && newSize.height === lastSize.height) {
124
118
  return;
125
119
  }
@@ -796,4 +790,13 @@ function bufferForDirection(isRtl, direction, rowBufferPx, columnBufferPx, verti
796
790
  // eslint unable to figure out enum exhaustiveness
797
791
  throw new Error('unreachable');
798
792
  }
793
+ }
794
+
795
+ // Round to avoid issues with subpixel rendering
796
+ // https://github.com/mui/mui-x/issues/15721
797
+ function roundDimensions(dimensions) {
798
+ return {
799
+ width: Math.round(dimensions.width * 10) / 10,
800
+ height: Math.round(dimensions.height * 10) / 10
801
+ };
799
802
  }
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.23.2
2
+ * @mui/x-data-grid v7.23.4
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the