@mui/x-data-grid 8.0.0 → 8.1.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 (46) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/components/GridRowCount.js +1 -2
  3. package/components/GridSelectedRowCount.js +1 -2
  4. package/components/GridSkeletonLoadingOverlay.js +1 -2
  5. package/components/base/GridOverlays.js +2 -4
  6. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -2
  7. package/components/columnHeaders/GridColumnHeaderTitle.js +1 -2
  8. package/components/columnHeaders/GridIconButtonContainer.js +1 -2
  9. package/components/containers/GridFooterContainer.js +1 -2
  10. package/components/containers/GridRootStyles.js +14 -12
  11. package/components/panel/GridPanelFooter.js +1 -2
  12. package/components/panel/GridPanelHeader.js +1 -2
  13. package/components/panel/filterPanel/GridFilterForm.js +6 -12
  14. package/components/toolbar/GridToolbarFilterButton.js +1 -2
  15. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
  16. package/esm/components/GridRowCount.js +1 -2
  17. package/esm/components/GridSelectedRowCount.js +1 -2
  18. package/esm/components/GridSkeletonLoadingOverlay.js +1 -2
  19. package/esm/components/base/GridOverlays.js +2 -4
  20. package/esm/components/columnHeaders/GridBaseColumnHeaders.js +1 -2
  21. package/esm/components/columnHeaders/GridColumnHeaderTitle.js +1 -2
  22. package/esm/components/columnHeaders/GridIconButtonContainer.js +1 -2
  23. package/esm/components/containers/GridFooterContainer.js +1 -2
  24. package/esm/components/containers/GridRootStyles.js +14 -12
  25. package/esm/components/panel/GridPanelFooter.js +1 -2
  26. package/esm/components/panel/GridPanelHeader.js +1 -2
  27. package/esm/components/panel/filterPanel/GridFilterForm.js +6 -12
  28. package/esm/components/toolbar/GridToolbarFilterButton.js +1 -2
  29. package/esm/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
  30. package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +1 -2
  31. package/esm/hooks/features/rowSelection/useGridRowSelection.js +7 -6
  32. package/esm/hooks/features/rows/useGridParamsApi.js +1 -1
  33. package/esm/index.js +1 -1
  34. package/esm/locales/hyAM.d.ts +2 -0
  35. package/esm/locales/hyAM.js +296 -0
  36. package/esm/locales/index.d.ts +1 -0
  37. package/esm/locales/index.js +1 -0
  38. package/hooks/features/columnHeaders/useGridColumnHeaders.js +1 -2
  39. package/hooks/features/rowSelection/useGridRowSelection.js +7 -6
  40. package/hooks/features/rows/useGridParamsApi.js +1 -1
  41. package/index.js +1 -1
  42. package/locales/hyAM.d.ts +2 -0
  43. package/locales/hyAM.js +302 -0
  44. package/locales/index.d.ts +1 -0
  45. package/locales/index.js +11 -0
  46. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,112 @@
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.1.0
9
+
10
+ _Apr 24, 2025_
11
+
12
+ We'd like to offer a big thanks to the 14 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 📊 Add API to print a chart or export it as PDF: `apiRef.exportAsPrint`.
15
+ - 📚 Documentation improvements
16
+ - 🐞 Bugfixes
17
+
18
+ Special thanks go out to the community members for their valuable contributions:
19
+ @lhilgert9, @ArturAghakaryan, @sai6855.
20
+ Following are all team members who have contributed to this release:
21
+ @alexfauquette, @arminmeh, @bernardobelchior, @cherniavskii, @JCQuintas, @joserodolfofreitas, @KenanYusuf, @LukasTy, @mapache-salvaje, @oliviertassinari, @romgrk.
22
+
23
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
24
+
25
+ ### Data Grid
26
+
27
+ #### `@mui/x-data-grid@8.1.0`
28
+
29
+ - [DataGrid] Allow row deselection with multiple rows selected (#17473) @arminmeh
30
+ - [DataGrid] Fix column title truncation on touch devices (#17375) @KenanYusuf
31
+ - [DataGrid] Remove internal usage of `material` prop (#17513) @KenanYusuf
32
+ - [DataGrid] Fix apiRef not being passed on onCellClick params (#17335) @sai6855
33
+ - [DataGrid] Add Armenian (hy-AM) locale (#17527) @ArturAghakaryan
34
+
35
+ #### `@mui/x-data-grid-pro@8.1.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
36
+
37
+ Same changes as in `@mui/x-data-grid@8.1.0`, plus:
38
+
39
+ - [DataGridPro] Fix locales.ts export (#17433) @lhilgert9
40
+ - [DataGridPro] Avoid proptypes warnings with header filters in React 17 (#17482) @cherniavskii
41
+ - [DataGridPro] Fix expandable rows detail content height updates (#17394) @arminmeh
42
+
43
+ #### `@mui/x-data-grid-premium@8.1.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
44
+
45
+ Same changes as in `@mui/x-data-grid-pro@8.1.0`.
46
+
47
+ ### Date and Time Pickers
48
+
49
+ #### `@mui/x-date-pickers@8.1.0`
50
+
51
+ - [pickers] Improve `PickersInputBase` owner state typing (#17478) @LukasTy
52
+
53
+ #### `@mui/x-date-pickers-pro@8.1.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
54
+
55
+ Same changes as in `@mui/x-date-pickers@8.1.0`.
56
+
57
+ ### Charts
58
+
59
+ - Add API to print a chart or export it as PDF: `apiRef.exportAsPrint`.
60
+
61
+ #### `@mui/x-charts@8.1.0`
62
+
63
+ - [charts] Add a localization provider (#17325) @alexfauquette
64
+ - [charts] Add codemod for replacing legend's hidden slot prop (#17392) @bernardobelchior
65
+ - [charts] Fix chart visual tests flakiness (#17469) @bernardobelchior
66
+ - [charts] Fix tooltip position (#17440) @alexfauquette
67
+ - [charts] Improve axis tooltip performances (#17398) @alexfauquette
68
+ - [charts] Move radar from under development to preview (#17418) @alexfauquette
69
+ - [charts] Advance time in charts regression tests (#17420) @bernardobelchior
70
+ - [charts] Fix charts visuals flakiness (#17472) @bernardobelchior
71
+ - [charts] Move `rafThrottle` on event handlers instead of setter (#17489) @bernardobelchior
72
+
73
+ #### `@mui/x-charts-pro@8.1.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
74
+
75
+ Same changes as in `@mui/x-charts@8.1.0`, plus:
76
+
77
+ - [charts-pro] Add export as PDF/print functionality (#17285) @bernardobelchior
78
+ - [charts-pro] Fix axis zoom being disabled when not specified in `initialZoom` (#17500) @bernardobelchior
79
+
80
+ ### Tree View
81
+
82
+ #### `@mui/x-tree-view@8.1.0`
83
+
84
+ Internal changes.
85
+
86
+ #### `@mui/x-tree-view-pro@8.1.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
87
+
88
+ Same changes as in `@mui/x-tree-view@8.1.0`.
89
+
90
+ ### Docs
91
+
92
+ - [docs] Fix AI Assistant Panel Trigger demo (#17426) @KenanYusuf
93
+ - [docs] Fix DataGrid's master-detail demo for one expanded detail panel at a time (#17471) @arminmeh
94
+ - [docs] Improve StackOverflow links (#17483) @oliviertassinari
95
+ - [docs] Refine charts demos (#17417) @alexfauquette
96
+ - [docs] Remove ad on paid docs pages (#17373) @oliviertassinari
97
+ - [docs] Serve migration guides in raw markdown format (#17210) @cherniavskii
98
+ - [docs] Fix heading structure (#17495) @oliviertassinari
99
+ - [docs] Revise the Row Grouping doc (#16217) @mapache-salvaje
100
+ - [docs] Fix ellipsis in the demo (#17476) @oliviertassinari
101
+ - [docs] Add docs information for Legend HTML (#17502) @alexfauquette
102
+ - [docs] Refine charts demos (#17417) @alexfauquette
103
+ - [tree view][docs] Copyedit the Tree View Overview page (#17498) @mapache-salvaje
104
+
105
+ ### Core
106
+
107
+ - [core] Bump `@types/node` (#17444) @LukasTy
108
+ - [core] Remove `react-is` dependency (#17470) @LukasTy
109
+ - [core] Remove redundant `overridesResolver` in `styled` components (#17466) @romgrk
110
+ - [core] Update support table (#17425) @joserodolfofreitas
111
+ - [code-infra] Ditch `@babel/node` (#17446) @LukasTy
112
+ - [code-infra] Further remove `clock=fake` from pickers (#17253) @JCQuintas
113
+
8
114
  ## 8.0.0
9
115
 
10
116
  _Apr 17, 2025_
@@ -31,8 +31,7 @@ const useUtilityClasses = ownerState => {
31
31
  };
32
32
  const GridRowCountRoot = (0, _system.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
- slot: 'RowCount',
35
- overridesResolver: (props, styles) => styles.rowCount
34
+ slot: 'RowCount'
36
35
  })({
37
36
  alignItems: 'center',
38
37
  display: 'flex',
@@ -31,8 +31,7 @@ const useUtilityClasses = ownerState => {
31
31
  };
32
32
  const GridSelectedRowCountRoot = (0, _system.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
- slot: 'SelectedRowCount',
35
- overridesResolver: (props, styles) => styles.selectedRowCount
34
+ slot: 'SelectedRowCount'
36
35
  })({
37
36
  alignItems: 'center',
38
37
  display: 'flex',
@@ -31,8 +31,7 @@ var _jsxRuntime = require("react/jsx-runtime");
31
31
  const _excluded = ["skeletonRowsCount", "visibleColumns", "showFirstRowBorder"];
32
32
  const SkeletonOverlay = (0, _system.styled)('div', {
33
33
  name: 'MuiDataGrid',
34
- slot: 'SkeletonLoadingOverlay',
35
- overridesResolver: (props, styles) => styles.skeletonLoadingOverlay
34
+ slot: 'SkeletonLoadingOverlay'
36
35
  })({
37
36
  minWidth: '100%',
38
37
  width: 'max-content',
@@ -22,8 +22,7 @@ var _jsxRuntime = require("react/jsx-runtime");
22
22
  const GridOverlayWrapperRoot = (0, _system.styled)('div', {
23
23
  name: 'MuiDataGrid',
24
24
  slot: 'OverlayWrapper',
25
- shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant' && prop !== 'right',
26
- overridesResolver: (props, styles) => styles.overlayWrapper
25
+ shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant' && prop !== 'right'
27
26
  })(({
28
27
  overlayType,
29
28
  loadingOverlayVariant,
@@ -47,8 +46,7 @@ loadingOverlayVariant !== 'skeleton' ? {
47
46
  const GridOverlayWrapperInner = (0, _system.styled)('div', {
48
47
  name: 'MuiDataGrid',
49
48
  slot: 'OverlayWrapperInner',
50
- shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',
51
- overridesResolver: (props, styles) => styles.overlayWrapperInner
49
+ shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant'
52
50
  })({});
53
51
  const useUtilityClasses = ownerState => {
54
52
  const {
@@ -28,8 +28,7 @@ const useUtilityClasses = ownerState => {
28
28
  };
29
29
  const GridColumnHeadersRoot = (0, _system.styled)('div', {
30
30
  name: 'MuiDataGrid',
31
- slot: 'ColumnHeaders',
32
- overridesResolver: (props, styles) => styles.columnHeaders
31
+ slot: 'ColumnHeaders'
33
32
  })({
34
33
  display: 'flex',
35
34
  flexDirection: 'column',
@@ -30,8 +30,7 @@ const useUtilityClasses = ownerState => {
30
30
  };
31
31
  const GridColumnHeaderTitleRoot = (0, _system.styled)('div', {
32
32
  name: 'MuiDataGrid',
33
- slot: 'ColumnHeaderTitle',
34
- overridesResolver: (props, styles) => styles.columnHeaderTitle
33
+ slot: 'ColumnHeaderTitle'
35
34
  })({
36
35
  textOverflow: 'ellipsis',
37
36
  overflow: 'hidden',
@@ -28,8 +28,7 @@ const useUtilityClasses = ownerState => {
28
28
  };
29
29
  const GridIconButtonContainerRoot = (0, _system.styled)('div', {
30
30
  name: 'MuiDataGrid',
31
- slot: 'IconButtonContainer',
32
- overridesResolver: (props, styles) => styles.iconButtonContainer
31
+ slot: 'IconButtonContainer'
33
32
  })(() => ({
34
33
  display: 'flex',
35
34
  visibility: 'hidden',
@@ -29,8 +29,7 @@ const useUtilityClasses = ownerState => {
29
29
  };
30
30
  const GridFooterContainerRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
32
- slot: 'FooterContainer',
33
- overridesResolver: (props, styles) => styles.footerContainer
32
+ slot: 'FooterContainer'
34
33
  })({
35
34
  display: 'flex',
36
35
  justifyContent: 'space-between',
@@ -9,16 +9,6 @@ var _gridClasses = require("../../constants/gridClasses");
9
9
  var _cssVariables = require("../../constants/cssVariables");
10
10
  var _useGridSelector = require("../../hooks/utils/useGridSelector");
11
11
  var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
12
- const columnHeaderStyles = {
13
- [`& .${_gridClasses.gridClasses.iconButtonContainer}`]: {
14
- visibility: 'visible',
15
- width: 'auto'
16
- },
17
- [`& .${_gridClasses.gridClasses.menuIcon}`]: {
18
- width: 'auto',
19
- visibility: 'visible'
20
- }
21
- };
22
12
  const columnSeparatorTargetSize = 10;
23
13
  const columnSeparatorOffset = -5;
24
14
  const focusOutlineWidth = 1;
@@ -520,7 +510,16 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
520
510
  backgroundColor: headerBackground
521
511
  },
522
512
  '@media (hover: hover)': {
523
- [`& .${_gridClasses.gridClasses.columnHeader}:hover`]: columnHeaderStyles,
513
+ [`& .${_gridClasses.gridClasses.columnHeader}:hover`]: {
514
+ [`& .${_gridClasses.gridClasses.menuIcon}`]: {
515
+ width: 'auto',
516
+ visibility: 'visible'
517
+ },
518
+ [`& .${_gridClasses.gridClasses.iconButtonContainer}`]: {
519
+ visibility: 'visible',
520
+ width: 'auto'
521
+ }
522
+ },
524
523
  [`& .${_gridClasses.gridClasses.columnHeader}:not(.${_gridClasses.gridClasses['columnHeader--sorted']}):hover .${_gridClasses.gridClasses.sortButton},
525
524
  & .${_gridClasses.gridClasses.pivotPanelField}:not(.${_gridClasses.gridClasses['pivotPanelField--sorted']}):hover .${_gridClasses.gridClasses.sortButton},
526
525
  & .${_gridClasses.gridClasses.pivotPanelField}:not(.${_gridClasses.gridClasses['pivotPanelField--sorted']}) .${_gridClasses.gridClasses.sortButton}:focus-visible`]: {
@@ -528,7 +527,10 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
528
527
  }
529
528
  },
530
529
  '@media (hover: none)': {
531
- [`& .${_gridClasses.gridClasses.columnHeader}`]: columnHeaderStyles,
530
+ [`& .${_gridClasses.gridClasses.columnHeader} .${_gridClasses.gridClasses.menuIcon}`]: {
531
+ width: 'auto',
532
+ visibility: 'visible'
533
+ },
532
534
  [`& .${_gridClasses.gridClasses.columnHeader}:focus,
533
535
  & .${_gridClasses.gridClasses['columnHeader--siblingFocused']}`]: {
534
536
  [`.${_gridClasses.gridClasses['columnSeparator--resizable']}`]: {
@@ -29,8 +29,7 @@ const useUtilityClasses = ownerState => {
29
29
  };
30
30
  const GridPanelFooterRoot = (0, _styles.styled)('div', {
31
31
  name: 'MuiDataGrid',
32
- slot: 'PanelFooter',
33
- overridesResolver: (props, styles) => styles.panelFooter
32
+ slot: 'PanelFooter'
34
33
  })({
35
34
  padding: _cssVariables.vars.spacing(1),
36
35
  display: 'flex',
@@ -29,8 +29,7 @@ const useUtilityClasses = ownerState => {
29
29
  };
30
30
  const GridPanelHeaderRoot = (0, _system.styled)('div', {
31
31
  name: 'MuiDataGrid',
32
- slot: 'PanelHeader',
33
- overridesResolver: (props, styles) => styles.panelHeader
32
+ slot: 'PanelHeader'
34
33
  })({
35
34
  padding: _cssVariables.vars.spacing(1)
36
35
  });
@@ -44,16 +44,14 @@ const useUtilityClasses = ownerState => {
44
44
  };
45
45
  const GridFilterFormRoot = (0, _styles.styled)('div', {
46
46
  name: 'MuiDataGrid',
47
- slot: 'FilterForm',
48
- overridesResolver: (props, styles) => styles.filterForm
47
+ slot: 'FilterForm'
49
48
  })({
50
49
  display: 'flex',
51
50
  gap: _cssVariables.vars.spacing(1.5)
52
51
  });
53
52
  const FilterFormDeleteIcon = (0, _styles.styled)('div', {
54
53
  name: 'MuiDataGrid',
55
- slot: 'FilterFormDeleteIcon',
56
- overridesResolver: (_, styles) => styles.filterFormDeleteIcon
54
+ slot: 'FilterFormDeleteIcon'
57
55
  })({
58
56
  flexShrink: 0,
59
57
  display: 'flex',
@@ -62,30 +60,26 @@ const FilterFormDeleteIcon = (0, _styles.styled)('div', {
62
60
  });
63
61
  const FilterFormLogicOperatorInput = (0, _styles.styled)('div', {
64
62
  name: 'MuiDataGrid',
65
- slot: 'FilterFormLogicOperatorInput',
66
- overridesResolver: (_, styles) => styles.filterFormLogicOperatorInput
63
+ slot: 'FilterFormLogicOperatorInput'
67
64
  })({
68
65
  minWidth: 75,
69
66
  justifyContent: 'end'
70
67
  });
71
68
  const FilterFormColumnInput = (0, _styles.styled)('div', {
72
69
  name: 'MuiDataGrid',
73
- slot: 'FilterFormColumnInput',
74
- overridesResolver: (_, styles) => styles.filterFormColumnInput
70
+ slot: 'FilterFormColumnInput'
75
71
  })({
76
72
  width: 150
77
73
  });
78
74
  const FilterFormOperatorInput = (0, _styles.styled)('div', {
79
75
  name: 'MuiDataGrid',
80
- slot: 'FilterFormOperatorInput',
81
- overridesResolver: (_, styles) => styles.filterFormOperatorInput
76
+ slot: 'FilterFormOperatorInput'
82
77
  })({
83
78
  width: 150
84
79
  });
85
80
  const FilterFormValueInput = (0, _styles.styled)('div', {
86
81
  name: 'MuiDataGrid',
87
- slot: 'FilterFormValueInput',
88
- overridesResolver: (_, styles) => styles.filterFormValueInput
82
+ slot: 'FilterFormValueInput'
89
83
  })({
90
84
  width: 190
91
85
  });
@@ -35,8 +35,7 @@ const useUtilityClasses = ownerState => {
35
35
  };
36
36
  const GridToolbarFilterListRoot = (0, _styles.styled)('ul', {
37
37
  name: 'MuiDataGrid',
38
- slot: 'ToolbarFilterList',
39
- overridesResolver: (_props, styles) => styles.toolbarFilterList
38
+ slot: 'ToolbarFilterList'
40
39
  })({
41
40
  margin: _cssVariables.vars.spacing(1, 1, 0.5),
42
41
  padding: _cssVariables.vars.spacing(0, 1)
@@ -32,8 +32,7 @@ const useUtilityClasses = ownerState => {
32
32
  };
33
33
  const VirtualScrollerRenderZoneRoot = (0, _system.styled)('div', {
34
34
  name: 'MuiDataGrid',
35
- slot: 'VirtualScrollerRenderZone',
36
- overridesResolver: (props, styles) => styles.virtualScrollerRenderZone
35
+ slot: 'VirtualScrollerRenderZone'
37
36
  })({
38
37
  position: 'absolute',
39
38
  display: 'flex',
@@ -23,8 +23,7 @@ const useUtilityClasses = ownerState => {
23
23
  };
24
24
  const GridRowCountRoot = styled('div', {
25
25
  name: 'MuiDataGrid',
26
- slot: 'RowCount',
27
- overridesResolver: (props, styles) => styles.rowCount
26
+ slot: 'RowCount'
28
27
  })({
29
28
  alignItems: 'center',
30
29
  display: 'flex',
@@ -23,8 +23,7 @@ const useUtilityClasses = ownerState => {
23
23
  };
24
24
  const GridSelectedRowCountRoot = styled('div', {
25
25
  name: 'MuiDataGrid',
26
- slot: 'SelectedRowCount',
27
- overridesResolver: (props, styles) => styles.selectedRowCount
26
+ slot: 'SelectedRowCount'
28
27
  })({
29
28
  alignItems: 'center',
30
29
  display: 'flex',
@@ -23,8 +23,7 @@ import { attachPinnedStyle } from "../internals/utils/index.js";
23
23
  import { jsx as _jsx } from "react/jsx-runtime";
24
24
  const SkeletonOverlay = styled('div', {
25
25
  name: 'MuiDataGrid',
26
- slot: 'SkeletonLoadingOverlay',
27
- overridesResolver: (props, styles) => styles.skeletonLoadingOverlay
26
+ slot: 'SkeletonLoadingOverlay'
28
27
  })({
29
28
  minWidth: '100%',
30
29
  width: 'max-content',
@@ -14,8 +14,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
14
14
  const GridOverlayWrapperRoot = styled('div', {
15
15
  name: 'MuiDataGrid',
16
16
  slot: 'OverlayWrapper',
17
- shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant' && prop !== 'right',
18
- overridesResolver: (props, styles) => styles.overlayWrapper
17
+ shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant' && prop !== 'right'
19
18
  })(({
20
19
  overlayType,
21
20
  loadingOverlayVariant,
@@ -39,8 +38,7 @@ loadingOverlayVariant !== 'skeleton' ? {
39
38
  const GridOverlayWrapperInner = styled('div', {
40
39
  name: 'MuiDataGrid',
41
40
  slot: 'OverlayWrapperInner',
42
- shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',
43
- overridesResolver: (props, styles) => styles.overlayWrapperInner
41
+ shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant'
44
42
  })({});
45
43
  const useUtilityClasses = ownerState => {
46
44
  const {
@@ -20,8 +20,7 @@ const useUtilityClasses = ownerState => {
20
20
  };
21
21
  const GridColumnHeadersRoot = styled('div', {
22
22
  name: 'MuiDataGrid',
23
- slot: 'ColumnHeaders',
24
- overridesResolver: (props, styles) => styles.columnHeaders
23
+ slot: 'ColumnHeaders'
25
24
  })({
26
25
  display: 'flex',
27
26
  flexDirection: 'column',
@@ -22,8 +22,7 @@ const useUtilityClasses = ownerState => {
22
22
  };
23
23
  const GridColumnHeaderTitleRoot = styled('div', {
24
24
  name: 'MuiDataGrid',
25
- slot: 'ColumnHeaderTitle',
26
- overridesResolver: (props, styles) => styles.columnHeaderTitle
25
+ slot: 'ColumnHeaderTitle'
27
26
  })({
28
27
  textOverflow: 'ellipsis',
29
28
  overflow: 'hidden',
@@ -20,8 +20,7 @@ const useUtilityClasses = ownerState => {
20
20
  };
21
21
  const GridIconButtonContainerRoot = styled('div', {
22
22
  name: 'MuiDataGrid',
23
- slot: 'IconButtonContainer',
24
- overridesResolver: (props, styles) => styles.iconButtonContainer
23
+ slot: 'IconButtonContainer'
25
24
  })(() => ({
26
25
  display: 'flex',
27
26
  visibility: 'hidden',
@@ -21,8 +21,7 @@ const useUtilityClasses = ownerState => {
21
21
  };
22
22
  const GridFooterContainerRoot = styled('div', {
23
23
  name: 'MuiDataGrid',
24
- slot: 'FooterContainer',
25
- overridesResolver: (props, styles) => styles.footerContainer
24
+ slot: 'FooterContainer'
26
25
  })({
27
26
  display: 'flex',
28
27
  justifyContent: 'space-between',
@@ -3,16 +3,6 @@ import { gridClasses as c } from "../../constants/gridClasses.js";
3
3
  import { vars } from "../../constants/cssVariables.js";
4
4
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
5
5
  import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
6
- const columnHeaderStyles = {
7
- [`& .${c.iconButtonContainer}`]: {
8
- visibility: 'visible',
9
- width: 'auto'
10
- },
11
- [`& .${c.menuIcon}`]: {
12
- width: 'auto',
13
- visibility: 'visible'
14
- }
15
- };
16
6
  const columnSeparatorTargetSize = 10;
17
7
  const columnSeparatorOffset = -5;
18
8
  const focusOutlineWidth = 1;
@@ -514,7 +504,16 @@ export const GridRootStyles = styled('div', {
514
504
  backgroundColor: headerBackground
515
505
  },
516
506
  '@media (hover: hover)': {
517
- [`& .${c.columnHeader}:hover`]: columnHeaderStyles,
507
+ [`& .${c.columnHeader}:hover`]: {
508
+ [`& .${c.menuIcon}`]: {
509
+ width: 'auto',
510
+ visibility: 'visible'
511
+ },
512
+ [`& .${c.iconButtonContainer}`]: {
513
+ visibility: 'visible',
514
+ width: 'auto'
515
+ }
516
+ },
518
517
  [`& .${c.columnHeader}:not(.${c['columnHeader--sorted']}):hover .${c.sortButton},
519
518
  & .${c.pivotPanelField}:not(.${c['pivotPanelField--sorted']}):hover .${c.sortButton},
520
519
  & .${c.pivotPanelField}:not(.${c['pivotPanelField--sorted']}) .${c.sortButton}:focus-visible`]: {
@@ -522,7 +521,10 @@ export const GridRootStyles = styled('div', {
522
521
  }
523
522
  },
524
523
  '@media (hover: none)': {
525
- [`& .${c.columnHeader}`]: columnHeaderStyles,
524
+ [`& .${c.columnHeader} .${c.menuIcon}`]: {
525
+ width: 'auto',
526
+ visibility: 'visible'
527
+ },
526
528
  [`& .${c.columnHeader}:focus,
527
529
  & .${c['columnHeader--siblingFocused']}`]: {
528
530
  [`.${c['columnSeparator--resizable']}`]: {
@@ -21,8 +21,7 @@ const useUtilityClasses = ownerState => {
21
21
  };
22
22
  const GridPanelFooterRoot = styled('div', {
23
23
  name: 'MuiDataGrid',
24
- slot: 'PanelFooter',
25
- overridesResolver: (props, styles) => styles.panelFooter
24
+ slot: 'PanelFooter'
26
25
  })({
27
26
  padding: vars.spacing(1),
28
27
  display: 'flex',
@@ -21,8 +21,7 @@ const useUtilityClasses = ownerState => {
21
21
  };
22
22
  const GridPanelHeaderRoot = styled('div', {
23
23
  name: 'MuiDataGrid',
24
- slot: 'PanelHeader',
25
- overridesResolver: (props, styles) => styles.panelHeader
24
+ slot: 'PanelHeader'
26
25
  })({
27
26
  padding: vars.spacing(1)
28
27
  });
@@ -36,16 +36,14 @@ const useUtilityClasses = ownerState => {
36
36
  };
37
37
  const GridFilterFormRoot = styled('div', {
38
38
  name: 'MuiDataGrid',
39
- slot: 'FilterForm',
40
- overridesResolver: (props, styles) => styles.filterForm
39
+ slot: 'FilterForm'
41
40
  })({
42
41
  display: 'flex',
43
42
  gap: vars.spacing(1.5)
44
43
  });
45
44
  const FilterFormDeleteIcon = styled('div', {
46
45
  name: 'MuiDataGrid',
47
- slot: 'FilterFormDeleteIcon',
48
- overridesResolver: (_, styles) => styles.filterFormDeleteIcon
46
+ slot: 'FilterFormDeleteIcon'
49
47
  })({
50
48
  flexShrink: 0,
51
49
  display: 'flex',
@@ -54,30 +52,26 @@ const FilterFormDeleteIcon = styled('div', {
54
52
  });
55
53
  const FilterFormLogicOperatorInput = styled('div', {
56
54
  name: 'MuiDataGrid',
57
- slot: 'FilterFormLogicOperatorInput',
58
- overridesResolver: (_, styles) => styles.filterFormLogicOperatorInput
55
+ slot: 'FilterFormLogicOperatorInput'
59
56
  })({
60
57
  minWidth: 75,
61
58
  justifyContent: 'end'
62
59
  });
63
60
  const FilterFormColumnInput = styled('div', {
64
61
  name: 'MuiDataGrid',
65
- slot: 'FilterFormColumnInput',
66
- overridesResolver: (_, styles) => styles.filterFormColumnInput
62
+ slot: 'FilterFormColumnInput'
67
63
  })({
68
64
  width: 150
69
65
  });
70
66
  const FilterFormOperatorInput = styled('div', {
71
67
  name: 'MuiDataGrid',
72
- slot: 'FilterFormOperatorInput',
73
- overridesResolver: (_, styles) => styles.filterFormOperatorInput
68
+ slot: 'FilterFormOperatorInput'
74
69
  })({
75
70
  width: 150
76
71
  });
77
72
  const FilterFormValueInput = styled('div', {
78
73
  name: 'MuiDataGrid',
79
- slot: 'FilterFormValueInput',
80
- overridesResolver: (_, styles) => styles.filterFormValueInput
74
+ slot: 'FilterFormValueInput'
81
75
  })({
82
76
  width: 190
83
77
  });
@@ -27,8 +27,7 @@ const useUtilityClasses = ownerState => {
27
27
  };
28
28
  const GridToolbarFilterListRoot = styled('ul', {
29
29
  name: 'MuiDataGrid',
30
- slot: 'ToolbarFilterList',
31
- overridesResolver: (_props, styles) => styles.toolbarFilterList
30
+ slot: 'ToolbarFilterList'
32
31
  })({
33
32
  margin: vars.spacing(1, 1, 0.5),
34
33
  padding: vars.spacing(0, 1)
@@ -24,8 +24,7 @@ const useUtilityClasses = ownerState => {
24
24
  };
25
25
  const VirtualScrollerRenderZoneRoot = styled('div', {
26
26
  name: 'MuiDataGrid',
27
- slot: 'VirtualScrollerRenderZone',
28
- overridesResolver: (props, styles) => styles.virtualScrollerRenderZone
27
+ slot: 'VirtualScrollerRenderZone'
29
28
  })({
30
29
  position: 'absolute',
31
30
  display: 'flex',
@@ -22,8 +22,7 @@ import { PinnedColumnPosition } from "../../../internals/constants.js";
22
22
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
23
  export const GridColumnHeaderRow = styled('div', {
24
24
  name: 'MuiDataGrid',
25
- slot: 'ColumnHeaderRow',
26
- overridesResolver: (_, styles) => styles.columnHeaderRow
25
+ slot: 'ColumnHeaderRow'
27
26
  })({
28
27
  display: 'flex'
29
28
  });
@@ -374,13 +374,14 @@ export const useGridRowSelection = (apiRef, props) => {
374
374
 
375
375
  const isMultipleSelectionDisabled = !checkboxSelection && !hasCtrlKey && !isKeyboardEvent(event);
376
376
  const resetSelection = !canHaveMultipleSelection || isMultipleSelectionDisabled;
377
+ const isSelected = apiRef.current.isRowSelected(id);
377
378
  const selectedRowsCount = gridRowSelectionCountSelector(apiRef);
378
- if (canHaveMultipleSelection && selectedRowsCount > 1 && !hasCtrlKey) {
379
- apiRef.current.selectRow(id, true, resetSelection);
380
- } else {
381
- const isSelected = apiRef.current.isRowSelected(id);
382
- apiRef.current.selectRow(id, !isSelected, resetSelection);
383
- }
379
+
380
+ // Clicking on a row should toggle the selection except when a range of rows is already selected and the selection should reset
381
+ // In that case, we want to keep the current row selected (https://github.com/mui/mui-x/pull/15509#discussion_r1878082687)
382
+ const shouldStaySelected = selectedRowsCount > 1 && resetSelection;
383
+ const newSelectionState = shouldStaySelected || !isSelected;
384
+ apiRef.current.selectRow(id, newSelectionState, resetSelection);
384
385
  }, [apiRef, canHaveMultipleSelection, checkboxSelection]);
385
386
  const handleRowClick = React.useCallback((params, event) => {
386
387
  if (disableRowSelectionOnClick) {
@@ -53,7 +53,7 @@ export function useGridParamsApi(apiRef, props) {
53
53
  value,
54
54
  formattedValue: value,
55
55
  isEditable: false,
56
- api: null
56
+ api: apiRef.current
57
57
  };
58
58
  if (colDef && colDef.valueFormatter) {
59
59
  params.formattedValue = colDef.valueFormatter(value, row, colDef, apiRef);
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.0.0
2
+ * @mui/x-data-grid v8.1.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the