@mui/x-data-grid 8.0.0-alpha.4 → 8.0.0-alpha.5

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 (90) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/DataGrid/DataGrid.js +2 -6
  3. package/DataGrid/useDataGridProps.js +3 -3
  4. package/components/GridRow.js +12 -1
  5. package/components/cell/GridActionsCellItem.js +4 -6
  6. package/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +6 -11
  7. package/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +6 -11
  8. package/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +6 -11
  9. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +13 -22
  10. package/components/toolbar/GridToolbarDensitySelector.js +3 -5
  11. package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
  12. package/components/toolbar/GridToolbarFilterButton.js +3 -0
  13. package/components/toolbar/GridToolbarQuickFilter.js +27 -23
  14. package/components/virtualization/GridMainContainer.js +1 -1
  15. package/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  16. package/hooks/features/columnResize/gridColumnResizeApi.d.ts +6 -0
  17. package/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  18. package/hooks/features/columnResize/useGridColumnResize.d.ts +1 -1
  19. package/hooks/features/columnResize/useGridColumnResize.js +9 -4
  20. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -1
  21. package/hooks/features/columns/gridColumnsUtils.js +2 -1
  22. package/index.js +1 -1
  23. package/internals/utils/index.d.ts +0 -1
  24. package/internals/utils/index.js +0 -1
  25. package/locales/koKR.js +45 -49
  26. package/material/index.js +30 -4
  27. package/models/gridBaseSlots.d.ts +21 -0
  28. package/models/gridBaseSlots.js +1 -0
  29. package/models/gridSlotsComponentsProps.d.ts +25 -5
  30. package/models/props/DataGridProps.d.ts +0 -5
  31. package/modern/DataGrid/DataGrid.js +2 -6
  32. package/modern/DataGrid/useDataGridProps.js +3 -3
  33. package/modern/components/GridRow.js +12 -1
  34. package/modern/components/cell/GridActionsCellItem.js +4 -6
  35. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +6 -11
  36. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +6 -11
  37. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +6 -11
  38. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +13 -22
  39. package/modern/components/toolbar/GridToolbarDensitySelector.js +3 -5
  40. package/modern/components/toolbar/GridToolbarFilterButton.js +3 -0
  41. package/modern/components/toolbar/GridToolbarQuickFilter.js +27 -23
  42. package/modern/components/virtualization/GridMainContainer.js +1 -1
  43. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  44. package/modern/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  45. package/modern/hooks/features/columnResize/useGridColumnResize.js +9 -4
  46. package/modern/hooks/features/columns/gridColumnsUtils.js +2 -1
  47. package/modern/index.js +1 -1
  48. package/modern/internals/utils/index.js +0 -1
  49. package/modern/locales/koKR.js +45 -49
  50. package/modern/material/index.js +30 -4
  51. package/modern/models/gridBaseSlots.js +1 -0
  52. package/node/DataGrid/DataGrid.js +2 -6
  53. package/node/DataGrid/useDataGridProps.js +2 -2
  54. package/node/components/GridRow.js +12 -1
  55. package/node/components/cell/GridActionsCellItem.js +3 -5
  56. package/node/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js +5 -10
  57. package/node/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js +5 -10
  58. package/node/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js +5 -10
  59. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +13 -22
  60. package/node/components/toolbar/GridToolbarDensitySelector.js +3 -5
  61. package/node/components/toolbar/GridToolbarFilterButton.js +3 -0
  62. package/node/components/toolbar/GridToolbarQuickFilter.js +27 -23
  63. package/node/components/virtualization/GridMainContainer.js +1 -1
  64. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +10 -3
  65. package/node/hooks/features/columnResize/gridColumnResizeApi.js +2 -1
  66. package/node/hooks/features/columnResize/useGridColumnResize.js +9 -4
  67. package/node/hooks/features/columns/gridColumnsUtils.js +2 -1
  68. package/node/index.js +1 -1
  69. package/node/internals/utils/index.js +0 -11
  70. package/node/locales/koKR.js +45 -49
  71. package/node/material/index.js +31 -4
  72. package/node/models/gridBaseSlots.js +5 -0
  73. package/package.json +2 -2
  74. package/internals/utils/useProps.d.ts +0 -1
  75. package/internals/utils/useProps.js +0 -24
  76. package/joy/icons.d.ts +0 -32
  77. package/joy/icons.js +0 -431
  78. package/joy/index.d.ts +0 -2
  79. package/joy/index.js +0 -2
  80. package/joy/joySlots.d.ts +0 -3
  81. package/joy/joySlots.js +0 -389
  82. package/joy/package.json +0 -6
  83. package/modern/internals/utils/useProps.js +0 -24
  84. package/modern/joy/icons.js +0 -431
  85. package/modern/joy/index.js +0 -2
  86. package/modern/joy/joySlots.js +0 -389
  87. package/node/internals/utils/useProps.js +0 -30
  88. package/node/joy/icons.js +0 -439
  89. package/node/joy/index.js +0 -13
  90. package/node/joy/joySlots.js +0 -397
package/CHANGELOG.md CHANGED
@@ -5,6 +5,108 @@
5
5
  All notable changes to this project will be documented in this file.
6
6
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
7
7
 
8
+ ## 8.0.0-alpha.5
9
+
10
+ _Dec 19, 2024_
11
+
12
+ We'd like to offer a big thanks to the 9 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🌍 Improve Korean (ko-KR) locale on the Data Grid
15
+ - 🐞 Bugfixes
16
+
17
+ Special thanks go out to the community contributors who have helped make this release possible:
18
+ @good-jinu, @k-rajat19.
19
+ Following are all team members who have contributed to this release:
20
+ @alexfauquette, @cherniavskii, @flaviendelangle, @KenanYusuf, @LukasTy, @MBilalShafi, @romgrk.
21
+
22
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
23
+
24
+ ### Data Grid
25
+
26
+ #### Breaking changes
27
+
28
+ - Passing additional props (like `data-*`, `aria-*`) directly on the Data Grid component is no longer supported. To pass the props, use `slotProps`.
29
+
30
+ - For `.root` element, use `slotProps.root`.
31
+ - For `.main` element (the one with `role="grid"`), use `slotProps.main`.
32
+
33
+ - `detailPanelExpandedRowIds` and `onDetailPanelExpandedRowIdsChange` props use a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instead of an array:
34
+
35
+ ```diff
36
+ -detailPanelExpandedRowIds?: GridRowId[];
37
+ +detailPanelExpandedRowIds?: Set<GridRowId>;
38
+
39
+ -onDetailPanelExpandedRowIdsChange?: (ids: GridRowId[], details: GridCallbackDetails) => void;
40
+ +onDetailPanelExpandedRowIdsChange?: (ids: Set<GridRowId>, details: GridCallbackDetails) => void;
41
+ ```
42
+
43
+ - `apiRef.current.getExpandedDetailPanels` and `apiRef.current.setExpandedDetailPanels` methods receive and return a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instead of an array.
44
+ - `gridDetailPanelExpandedRowIdsSelector` returns a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instead of an array.
45
+ - `gridDetailPanelExpandedRowsHeightCacheSelector` was removed.
46
+
47
+ #### `@mui/x-data-grid@8.0.0-alpha.5`
48
+
49
+ - [DataGrid] Consider `columnGroupHeaderHeight` prop in `getTotalHeaderHeight` method (#15915) @k-rajat19
50
+ - [DataGrid] Fix autosizing with virtualized columns (#15116) @k-rajat19
51
+ - [DataGrid] Move `<Badge />` to leaf import (#15879) @romgrk
52
+ - [DataGrid] Move `<ListItemText />` and `<ListItemIcon />` to leaf import (#15869) @romgrk
53
+ - [DataGrid] Remove the Joy UI demo (#15913) @romgrk
54
+ - [DataGrid] Update quick filter input variant (#15909) @KenanYusuf
55
+ - [DataGrid] Use `slotProps` to forward props to `.main` and `.root` elements (#15870) @MBilalShafi
56
+ - [l10n] Improve Korean(ko-KR) locale (#15878) @good-jinu
57
+
58
+ #### `@mui/x-data-grid-pro@8.0.0-alpha.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
59
+
60
+ Same changes as in `@mui/x-data-grid@8.0.0-alpha.5`, plus:
61
+
62
+ - [DataGridPro] Use `Set` for `detailPanelExpandedRowIds` (#15835) @cherniavskii
63
+
64
+ #### `@mui/x-data-grid-premium@8.0.0-alpha.5` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
65
+
66
+ Same changes as in `@mui/x-data-grid-pro@8.0.0-alpha.5`.
67
+
68
+ ### Date and Time Pickers
69
+
70
+ #### Breaking changes
71
+
72
+ - The `<PickersMonth />` component has been moved inside the Month Calendar component — [Learn more](https://next.mui.com/x/migration/migration-pickers-v7/#month-calendar).
73
+
74
+ - The `<PickersYear />` component has been moved inside the Year Calendar component — [Learn more](https://next.mui.com/x/migration/migration-pickers-v7/#year-calendar).
75
+
76
+ #### `@mui/x-date-pickers@8.0.0-alpha.5`
77
+
78
+ - [pickers] Add verification to disable skipped hours in spring forward DST (#15849) @flaviendelangle
79
+ - [pickers] Remove `PickersMonth` and `PickersYear` from the theme and remove the `div` wrapping each button (#15806) @flaviendelangle
80
+ - [pickers] Use the new `ownerState` object on the `<PickersTextField />` component (#15863) @flaviendelangle
81
+
82
+ #### `@mui/x-date-pickers-pro@8.0.0-alpha.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
83
+
84
+ Same changes as in `@mui/x-date-pickers@8.0.0-alpha.5`.
85
+
86
+ ### Charts
87
+
88
+ #### `@mui/x-charts@8.0.0-alpha.5`
89
+
90
+ - [charts] Fix `<ScatterChart />` value type if `null` (#15917) @alexfauquette
91
+
92
+ #### `@mui/x-charts-pro@8.0.0-alpha.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
93
+
94
+ Same changes as in `@mui/x-charts@8.0.0-alpha.5`.
95
+
96
+ ### Tree View
97
+
98
+ #### `@mui/x-tree-view@8.0.0-alpha.5`
99
+
100
+ No changes since `@mui/x-tree-view-pro@v8.0.0-alpha.4`.
101
+
102
+ #### `@mui/x-tree-view-pro@8.0.0-alpha.5` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
103
+
104
+ Same changes as in `@mui/x-tree-view@8.0.0-alpha.5`.
105
+
106
+ ### Core
107
+
108
+ - [code-infra] Remove `@mui/material-nextjs` dependency (#15925) @LukasTy
109
+
8
110
  ## 8.0.0-alpha.4
9
111
 
10
112
  _Dec 13, 2024_
@@ -39,6 +141,7 @@ Following are all team members who have contributed to this release:
39
141
  -const output = useGridSelector(apiRef, selector, equals)
40
142
  +const output = useGridSelector(apiRef, selector, arguments, equals)
41
143
  ```
144
+
42
145
  - The default variant for text fields and selects in the filter panel has been changed to `outlined`.
43
146
  - The "row spanning" feature is now stable.
44
147
  ```diff
@@ -38,7 +38,7 @@ const DataGridRaw = /*#__PURE__*/React.forwardRef(function DataGrid(inProps, ref
38
38
  style: props.style,
39
39
  sx: props.sx,
40
40
  ref: ref
41
- }, props.forwardedProps, {
41
+ }, props.slotProps?.root, {
42
42
  children: [/*#__PURE__*/_jsx(GridHeader, {}), /*#__PURE__*/_jsx(GridBody, {}), /*#__PURE__*/_jsx(GridFooterPlaceholder, {})]
43
43
  }))
44
44
  });
@@ -95,6 +95,7 @@ DataGridRaw.propTypes = {
95
95
  */
96
96
  autosizeOptions: PropTypes.shape({
97
97
  columns: PropTypes.arrayOf(PropTypes.string),
98
+ disableColumnVirtualization: PropTypes.bool,
98
99
  expand: PropTypes.bool,
99
100
  includeHeaders: PropTypes.bool,
100
101
  includeOutliers: PropTypes.bool,
@@ -248,11 +249,6 @@ DataGridRaw.propTypes = {
248
249
  quickFilterLogicOperator: PropTypes.oneOf(['and', 'or']),
249
250
  quickFilterValues: PropTypes.array
250
251
  }),
251
- /**
252
- * Forwarded props for the Data Grid root element.
253
- * @ignore - do not document.
254
- */
255
- forwardedProps: PropTypes.object,
256
252
  /**
257
253
  * Function that applies CSS classes dynamically on cells.
258
254
  * @param {GridCellParams} params With all properties from [[GridCellParams]].
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { useThemeProps } from '@mui/material/styles';
4
4
  import { GRID_DEFAULT_LOCALE_TEXT } from "../constants/index.js";
5
5
  import { DATA_GRID_DEFAULT_SLOTS_COMPONENTS } from "../constants/defaultGridSlotsComponents.js";
6
- import { computeSlots, useProps } from "../internals/utils/index.js";
6
+ import { computeSlots } from "../internals/utils/index.js";
7
7
  import { DATA_GRID_PROPS_DEFAULT_VALUES } from "../constants/dataGridPropsDefaultValues.js";
8
8
  const DATA_GRID_FORCED_PROPS = {
9
9
  disableMultipleColumnsFiltering: true,
@@ -19,12 +19,12 @@ const DATA_GRID_FORCED_PROPS = {
19
19
  };
20
20
  const defaultSlots = DATA_GRID_DEFAULT_SLOTS_COMPONENTS;
21
21
  export const useDataGridProps = inProps => {
22
- const themedProps = useProps(
22
+ const themedProps =
23
23
  // eslint-disable-next-line material-ui/mui-name-matches-component-name
24
24
  useThemeProps({
25
25
  props: inProps,
26
26
  name: 'MuiDataGrid'
27
- }));
27
+ });
28
28
  const localeText = React.useMemo(() => _extends({}, GRID_DEFAULT_LOCALE_TEXT, themedProps.localeText), [themedProps.localeText]);
29
29
  const slots = React.useMemo(() => computeSlots({
30
30
  defaultSlots,
@@ -25,6 +25,7 @@ import { GridScrollbarFillerCell as ScrollbarFiller } from "./GridScrollbarFille
25
25
  import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
26
26
  import { useGridConfiguration } from "../hooks/utils/useGridConfiguration.js";
27
27
  import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.js";
28
+ import { gridVirtualizationColumnEnabledSelector } from "../hooks/index.js";
28
29
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
29
30
  const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
30
31
  const {
@@ -68,6 +69,7 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
68
69
  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
69
70
  const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;
70
71
  const editable = rootProps.editMode === GridEditModes.Row;
72
+ const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
71
73
  const hasFocusCell = focusedColumnIndex !== undefined;
72
74
  const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < renderContext.firstColumnIndex;
73
75
  const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= renderContext.lastColumnIndex;
@@ -249,7 +251,16 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
249
251
  if (hasVirtualFocusCellLeft) {
250
252
  cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));
251
253
  }
252
- for (let i = renderContext.firstColumnIndex; i < renderContext.lastColumnIndex; i += 1) {
254
+ let firstColumnIndex;
255
+ let lastColumnIndex;
256
+ if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
257
+ firstColumnIndex = 0;
258
+ lastColumnIndex = visibleColumns.length;
259
+ } else {
260
+ firstColumnIndex = renderContext.firstColumnIndex;
261
+ lastColumnIndex = renderContext.lastColumnIndex;
262
+ }
263
+ for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
253
264
  const column = visibleColumns[i];
254
265
  const indexInSection = i - pinnedColumns.left.length;
255
266
  if (!column) {
@@ -4,9 +4,8 @@ const _excluded = ["label", "icon", "showInMenu", "onClick"],
4
4
  _excluded2 = ["label", "icon", "showInMenu", "onClick", "closeMenuOnClick", "closeMenu"];
5
5
  import * as React from 'react';
6
6
  import PropTypes from 'prop-types';
7
- import ListItemIcon from '@mui/material/ListItemIcon';
8
7
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
9
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
10
9
  const GridActionsCellItem = /*#__PURE__*/React.forwardRef((props, ref) => {
11
10
  const rootProps = useGridRootProps();
12
11
  if (!props.showInMenu) {
@@ -46,13 +45,12 @@ const GridActionsCellItem = /*#__PURE__*/React.forwardRef((props, ref) => {
46
45
  closeMenu?.();
47
46
  }
48
47
  };
49
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, _extends({
48
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, _extends({
50
49
  ref: ref
51
50
  }, other, {
52
51
  onClick: handleClick,
53
- children: [icon && /*#__PURE__*/_jsx(ListItemIcon, {
54
- children: icon
55
- }), label]
52
+ iconStart: icon,
53
+ children: label
56
54
  }));
57
55
  });
58
56
  process.env.NODE_ENV !== "production" ? GridActionsCellItem.propTypes = {
@@ -1,10 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import ListItemIcon from '@mui/material/ListItemIcon';
4
- import ListItemText from '@mui/material/ListItemText';
5
3
  import { useGridApiContext } from "../../../../hooks/utils/useGridApiContext.js";
6
4
  import { useGridRootProps } from "../../../../hooks/utils/useGridRootProps.js";
7
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
8
6
  function GridColumnMenuFilterItem(props) {
9
7
  const {
10
8
  colDef,
@@ -19,15 +17,12 @@ function GridColumnMenuFilterItem(props) {
19
17
  if (rootProps.disableColumnFilter || !colDef.filterable) {
20
18
  return null;
21
19
  }
22
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
20
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
23
21
  onClick: showFilter,
24
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
25
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuFilterIcon, {
26
- fontSize: "small"
27
- })
28
- }), /*#__PURE__*/_jsx(ListItemText, {
29
- children: apiRef.current.getLocaleText('columnMenuFilter')
30
- })]
22
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuFilterIcon, {
23
+ fontSize: "small"
24
+ }),
25
+ children: apiRef.current.getLocaleText('columnMenuFilter')
31
26
  });
32
27
  }
33
28
  process.env.NODE_ENV !== "production" ? GridColumnMenuFilterItem.propTypes = {
@@ -1,11 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import ListItemIcon from '@mui/material/ListItemIcon';
4
- import ListItemText from '@mui/material/ListItemText';
5
3
  import { useGridApiContext } from "../../../../hooks/utils/useGridApiContext.js";
6
4
  import { useGridRootProps } from "../../../../hooks/utils/useGridRootProps.js";
7
5
  import { gridVisibleColumnDefinitionsSelector } from "../../../../hooks/features/columns/index.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
9
7
  function GridColumnMenuHideItem(props) {
10
8
  const {
11
9
  colDef,
@@ -35,16 +33,13 @@ function GridColumnMenuHideItem(props) {
35
33
  if (colDef.hideable === false) {
36
34
  return null;
37
35
  }
38
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
36
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
39
37
  onClick: toggleColumn,
40
38
  disabled: disabled,
41
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
42
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuHideIcon, {
43
- fontSize: "small"
44
- })
45
- }), /*#__PURE__*/_jsx(ListItemText, {
46
- children: apiRef.current.getLocaleText('columnMenuHideColumn')
47
- })]
39
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuHideIcon, {
40
+ fontSize: "small"
41
+ }),
42
+ children: apiRef.current.getLocaleText('columnMenuHideColumn')
48
43
  });
49
44
  }
50
45
  process.env.NODE_ENV !== "production" ? GridColumnMenuHideItem.propTypes = {
@@ -1,11 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import ListItemIcon from '@mui/material/ListItemIcon';
4
- import ListItemText from '@mui/material/ListItemText';
5
3
  import { GridPreferencePanelsValue } from "../../../../hooks/features/preferencesPanel/gridPreferencePanelsValue.js";
6
4
  import { useGridApiContext } from "../../../../hooks/utils/useGridApiContext.js";
7
5
  import { useGridRootProps } from "../../../../hooks/utils/useGridRootProps.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
9
7
  function GridColumnMenuManageItem(props) {
10
8
  const {
11
9
  onClick
@@ -19,15 +17,12 @@ function GridColumnMenuManageItem(props) {
19
17
  if (rootProps.disableColumnSelector) {
20
18
  return null;
21
19
  }
22
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
20
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
23
21
  onClick: showColumns,
24
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
25
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuManageColumnsIcon, {
26
- fontSize: "small"
27
- })
28
- }), /*#__PURE__*/_jsx(ListItemText, {
29
- children: apiRef.current.getLocaleText('columnMenuManageColumns')
30
- })]
22
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuManageColumnsIcon, {
23
+ fontSize: "small"
24
+ }),
25
+ children: apiRef.current.getLocaleText('columnMenuManageColumns')
31
26
  });
32
27
  }
33
28
  process.env.NODE_ENV !== "production" ? GridColumnMenuManageItem.propTypes = {
@@ -1,7 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import ListItemIcon from '@mui/material/ListItemIcon';
4
- import ListItemText from '@mui/material/ListItemText';
5
3
  import { useGridSelector } from "../../../../hooks/utils/useGridSelector.js";
6
4
  import { gridSortModelSelector } from "../../../../hooks/features/sorting/gridSortingSelector.js";
7
5
  import { useGridApiContext } from "../../../../hooks/utils/useGridApiContext.js";
@@ -36,31 +34,24 @@ function GridColumnMenuSortItem(props) {
36
34
  return typeof label === 'function' ? label(colDef) : label;
37
35
  };
38
36
  return /*#__PURE__*/_jsxs(React.Fragment, {
39
- children: [sortingOrder.includes('asc') && sortDirection !== 'asc' ? /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
37
+ children: [sortingOrder.includes('asc') && sortDirection !== 'asc' ? /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
40
38
  onClick: onSortMenuItemClick,
41
39
  "data-value": "asc",
42
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
43
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortAscendingIcon, {
44
- fontSize: "small"
45
- })
46
- }), /*#__PURE__*/_jsx(ListItemText, {
47
- children: getLabel('columnMenuSortAsc')
48
- })]
49
- }) : null, sortingOrder.includes('desc') && sortDirection !== 'desc' ? /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
40
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortAscendingIcon, {
41
+ fontSize: "small"
42
+ }),
43
+ children: getLabel('columnMenuSortAsc')
44
+ }) : null, sortingOrder.includes('desc') && sortDirection !== 'desc' ? /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
50
45
  onClick: onSortMenuItemClick,
51
46
  "data-value": "desc",
52
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
53
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortDescendingIcon, {
54
- fontSize: "small"
55
- })
56
- }), /*#__PURE__*/_jsx(ListItemText, {
57
- children: getLabel('columnMenuSortDesc')
58
- })]
59
- }) : null, sortingOrder.includes(null) && sortDirection != null ? /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
47
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortDescendingIcon, {
48
+ fontSize: "small"
49
+ }),
50
+ children: getLabel('columnMenuSortDesc')
51
+ }) : null, sortingOrder.includes(null) && sortDirection != null ? /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
60
52
  onClick: onSortMenuItemClick,
61
- children: [/*#__PURE__*/_jsx(ListItemIcon, {}), /*#__PURE__*/_jsx(ListItemText, {
62
- children: apiRef.current.getLocaleText('columnMenuUnsort')
63
- })]
53
+ iconStart: "",
54
+ children: apiRef.current.getLocaleText('columnMenuUnsort')
64
55
  }) : null]
65
56
  });
66
57
  }
@@ -2,7 +2,6 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { unstable_useId as useId, unstable_useForkRef as useForkRef } from '@mui/utils';
5
- import ListItemIcon from '@mui/material/ListItemIcon';
6
5
  import { gridDensitySelector } from "../../hooks/features/density/densitySelector.js";
7
6
  import { isHideMenuKey } from "../../utils/keyboardUtils.js";
8
7
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
@@ -72,12 +71,11 @@ const GridToolbarDensitySelector = /*#__PURE__*/React.forwardRef(function GridTo
72
71
  if (rootProps.disableDensitySelector) {
73
72
  return null;
74
73
  }
75
- const densityElements = densityOptions.map((option, index) => /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
74
+ const densityElements = densityOptions.map((option, index) => /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
76
75
  onClick: () => handleDensityUpdate(option.value),
77
76
  selected: option.value === density,
78
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
79
- children: option.icon
80
- }), option.label]
77
+ iconStart: option.icon,
78
+ children: option.label
81
79
  }, index));
82
80
  return /*#__PURE__*/_jsxs(React.Fragment, {
83
81
  children: [/*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { ButtonProps } from '@mui/material/Button';
3
3
  import { TooltipProps } from '@mui/material/Tooltip';
4
- import { BadgeProps } from '@mui/material/Badge';
4
+ import { BadgeProps } from '../../models/gridBaseSlots';
5
5
  export interface GridToolbarFilterButtonProps {
6
6
  /**
7
7
  * The props used for each slot inside.
@@ -31,6 +31,9 @@ const GridToolbarFilterListRoot = styled('ul', {
31
31
  margin: theme.spacing(1, 1, 0.5),
32
32
  padding: theme.spacing(0, 1)
33
33
  }));
34
+
35
+ // FIXME(v8:romgrk): override slotProps
36
+
34
37
  const GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolbarFilterButton(props, ref) {
35
38
  const {
36
39
  slotProps = {}
@@ -8,6 +8,7 @@ import TextField from '@mui/material/TextField';
8
8
  import { styled } from '@mui/material/styles';
9
9
  import { unstable_debounce as debounce } from '@mui/utils';
10
10
  import composeClasses from '@mui/utils/composeClasses';
11
+ import { outlinedInputClasses } from '@mui/material/OutlinedInput';
11
12
  import { getDataGridUtilityClass } from "../../constants/index.js";
12
13
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
13
14
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
@@ -31,13 +32,8 @@ const GridToolbarQuickFilterRoot = styled(TextField, {
31
32
  })(({
32
33
  theme
33
34
  }) => ({
34
- width: 'auto',
35
- paddingBottom: theme.spacing(0.5),
36
- '& input': {
37
- marginLeft: theme.spacing(0.5)
38
- },
39
- '& .MuiInput-underline:before': {
40
- borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`
35
+ [`.${outlinedInputClasses.root}`]: {
36
+ fontSize: theme.typography.body2.fontSize
41
37
  },
42
38
  [`& input[type="search"]::-webkit-search-decoration,
43
39
  & input[type="search"]::-webkit-search-cancel-button,
@@ -91,7 +87,8 @@ function GridToolbarQuickFilter(props) {
91
87
  return /*#__PURE__*/_jsx(GridToolbarQuickFilterRoot, _extends({
92
88
  as: rootProps.slots.baseTextField,
93
89
  ownerState: rootProps,
94
- variant: "standard",
90
+ variant: "outlined",
91
+ size: "small",
95
92
  value: searchValue,
96
93
  onChange: handleSearchValueChange,
97
94
  className: clsx(classes.root, className),
@@ -100,23 +97,30 @@ function GridToolbarQuickFilter(props) {
100
97
  type: "search"
101
98
  }, other, {
102
99
  InputProps: _extends({
103
- startAdornment: /*#__PURE__*/_jsx(rootProps.slots.quickFilterIcon, {
104
- fontSize: "small"
105
- }),
106
- endAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
107
- "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
108
- size: "small",
109
- sx: [searchValue ? {
110
- visibility: 'visible'
111
- } : {
112
- visibility: 'hidden'
113
- }],
114
- onClick: handleSearchReset
115
- }, rootProps.slotProps?.baseIconButton, {
116
- children: /*#__PURE__*/_jsx(rootProps.slots.quickFilterClearIcon, {
100
+ startAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
101
+ position: "start",
102
+ children: /*#__PURE__*/_jsx(rootProps.slots.quickFilterIcon, {
117
103
  fontSize: "small"
118
104
  })
119
- }))
105
+ }),
106
+ endAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
107
+ position: "end",
108
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
109
+ "aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
110
+ size: "small",
111
+ edge: "end",
112
+ sx: [searchValue ? {
113
+ visibility: 'visible'
114
+ } : {
115
+ visibility: 'hidden'
116
+ }],
117
+ onClick: handleSearchReset
118
+ }, rootProps.slotProps?.baseIconButton, {
119
+ children: /*#__PURE__*/_jsx(rootProps.slots.quickFilterClearIcon, {
120
+ fontSize: "small"
121
+ })
122
+ }))
123
+ })
120
124
  }, other.InputProps)
121
125
  }, rootProps.slotProps?.baseTextField));
122
126
  }
@@ -30,7 +30,7 @@ export const GridMainContainer = /*#__PURE__*/React.forwardRef((props, ref) => {
30
30
  ownerState: rootProps,
31
31
  className: props.className,
32
32
  tabIndex: -1
33
- }, ariaAttributes, {
33
+ }, ariaAttributes, rootProps.slotProps?.main, {
34
34
  children: [/*#__PURE__*/_jsx(GridPanelAnchor, {
35
35
  role: "presentation",
36
36
  "data-id": "gridPanelAnchor"
@@ -47,7 +47,7 @@ export const useGridColumnHeaders = props => {
47
47
  const isRtl = useRtl();
48
48
  const rootProps = useGridRootProps();
49
49
  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
50
- const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
50
+ const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
51
51
  const columnGroupsModel = useGridSelector(apiRef, gridColumnGroupsUnwrappedModelSelector);
52
52
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
53
53
  const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
@@ -87,8 +87,15 @@ export const useGridColumnHeaders = props => {
87
87
  renderContext: currentContext = renderContext,
88
88
  maxLastColumn = visibleColumns.length
89
89
  } = params || {};
90
- const firstColumnToRender = currentContext.firstColumnIndex;
91
- const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;
90
+ let firstColumnToRender;
91
+ let lastColumnToRender;
92
+ if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
93
+ firstColumnToRender = 0;
94
+ lastColumnToRender = maxLastColumn;
95
+ } else {
96
+ firstColumnToRender = currentContext.firstColumnIndex;
97
+ lastColumnToRender = currentContext.lastColumnIndex;
98
+ }
92
99
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
93
100
  return {
94
101
  renderedColumns,
@@ -4,6 +4,7 @@ export declare const DEFAULT_GRID_AUTOSIZE_OPTIONS: {
4
4
  includeOutliers: boolean;
5
5
  outliersFactor: number;
6
6
  expand: boolean;
7
+ disableColumnVirtualization: boolean;
7
8
  };
8
9
  export type GridAutosizeOptions = {
9
10
  /**
@@ -30,6 +31,11 @@ export type GridAutosizeOptions = {
30
31
  * @default false
31
32
  */
32
33
  expand?: boolean;
34
+ /**
35
+ * If false, column virtualization is not disabled while resizing.
36
+ * @default true
37
+ */
38
+ disableColumnVirtualization?: boolean;
33
39
  };
34
40
  /**
35
41
  * The Resize API interface that is available in the grid `apiRef`.
@@ -2,7 +2,8 @@ export const DEFAULT_GRID_AUTOSIZE_OPTIONS = {
2
2
  includeHeaders: true,
3
3
  includeOutliers: false,
4
4
  outliersFactor: 1.5,
5
- expand: false
5
+ expand: false,
6
+ disableColumnVirtualization: true
6
7
  };
7
8
 
8
9
  /**
@@ -7,4 +7,4 @@ export declare const columnResizeStateInitializer: GridStateInitializer;
7
7
  * @requires useGridColumns (method, event)
8
8
  * TODO: improve experience for last column
9
9
  */
10
- export declare const useGridColumnResize: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "autosizeOptions" | "autosizeOnMount" | "disableAutosize" | "onColumnResize" | "onColumnWidthChange">) => void;
10
+ export declare const useGridColumnResize: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "autosizeOptions" | "autosizeOnMount" | "disableAutosize" | "onColumnResize" | "onColumnWidthChange" | "disableVirtualization">) => void;
@@ -460,6 +460,7 @@ export const useGridColumnResize = (apiRef, props) => {
460
460
  return;
461
461
  }
462
462
  apiRef.current.autosizeColumns(_extends({}, props.autosizeOptions, {
463
+ disableColumnVirtualization: false,
463
464
  columns: [column.field]
464
465
  }));
465
466
  });
@@ -486,8 +487,10 @@ export const useGridColumnResize = (apiRef, props) => {
486
487
  options.columns = options.columns.filter(c => state.columnVisibilityModel[c] !== false);
487
488
  const columns = options.columns.map(c => apiRef.current.state.columns.lookup[c]);
488
489
  try {
489
- apiRef.current.unstable_setColumnVirtualization(false);
490
- await columnVirtualizationDisabled();
490
+ if (!props.disableVirtualization && options.disableColumnVirtualization) {
491
+ apiRef.current.unstable_setColumnVirtualization(false);
492
+ await columnVirtualizationDisabled();
493
+ }
491
494
  const widthByField = extractColumnWidths(apiRef, options, columns);
492
495
  const newColumns = columns.map(column => _extends({}, column, {
493
496
  width: widthByField[column.field],
@@ -519,10 +522,12 @@ export const useGridColumnResize = (apiRef, props) => {
519
522
  }
520
523
  });
521
524
  } finally {
522
- apiRef.current.unstable_setColumnVirtualization(true);
525
+ if (!props.disableVirtualization) {
526
+ apiRef.current.unstable_setColumnVirtualization(true);
527
+ }
523
528
  isAutosizingRef.current = false;
524
529
  }
525
- }, [apiRef, columnVirtualizationDisabled]);
530
+ }, [apiRef, columnVirtualizationDisabled, props.disableVirtualization]);
526
531
 
527
532
  /**
528
533
  * EFFECTS
@@ -53,4 +53,4 @@ export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender,
53
53
  lastRowToRender: number;
54
54
  visibleRows: GridRowEntry[];
55
55
  }): number;
56
- export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'unstable_listView'>): number;
56
+ export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'unstable_listView' | 'columnGroupHeaderHeight'>): number;
@@ -319,6 +319,7 @@ export function getTotalHeaderHeight(apiRef, props) {
319
319
  const maxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);
320
320
  const isHeaderFilteringEnabled = gridHeaderFilteringEnabledSelector(apiRef);
321
321
  const columnHeadersHeight = Math.floor(props.columnHeaderHeight * densityFactor);
322
+ const columnGroupHeadersHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
322
323
  const filterHeadersHeight = isHeaderFilteringEnabled ? Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor) : 0;
323
- return columnHeadersHeight * (1 + (maxDepth ?? 0)) + filterHeadersHeight;
324
+ return columnHeadersHeight + columnGroupHeadersHeight * maxDepth + filterHeadersHeight;
324
325
  }