@mui/x-data-grid 8.29.1 → 8.29.3

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 (44) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/components/columnsPanel/ColumnsPanelTrigger.js +2 -2
  3. package/components/columnsPanel/ColumnsPanelTrigger.mjs +2 -2
  4. package/components/containers/GridRootStyles.js +3 -2
  5. package/components/containers/GridRootStyles.mjs +3 -2
  6. package/components/filterPanel/FilterPanelTrigger.js +2 -2
  7. package/components/filterPanel/FilterPanelTrigger.mjs +2 -2
  8. package/components/panel/GridPanelContext.d.mts +9 -3
  9. package/components/panel/GridPanelContext.d.ts +9 -3
  10. package/components/panel/GridPanelContext.js +41 -7
  11. package/components/panel/GridPanelContext.mjs +40 -7
  12. package/components/panel/GridPreferencesPanel.js +4 -6
  13. package/components/panel/GridPreferencesPanel.mjs +4 -6
  14. package/components/toolbar/GridToolbarColumnsButton.js +2 -2
  15. package/components/toolbar/GridToolbarColumnsButton.mjs +2 -2
  16. package/components/toolbar/GridToolbarFilterButton.js +2 -2
  17. package/components/toolbar/GridToolbarFilterButton.mjs +2 -2
  18. package/components/toolbarV8/Toolbar.d.mts +1 -1
  19. package/components/toolbarV8/Toolbar.d.ts +1 -1
  20. package/components/toolbarV8/Toolbar.js +2 -125
  21. package/components/toolbarV8/Toolbar.mjs +2 -125
  22. package/components/toolbarV8/ToolbarButton.d.mts +1 -1
  23. package/components/toolbarV8/ToolbarButton.d.ts +1 -1
  24. package/components/toolbarV8/ToolbarButton.js +11 -50
  25. package/components/toolbarV8/ToolbarButton.mjs +11 -50
  26. package/components/virtualization/GridVirtualScrollbar.js +9 -53
  27. package/components/virtualization/GridVirtualScrollbar.mjs +9 -53
  28. package/components/virtualization/GridVirtualScroller.js +12 -0
  29. package/components/virtualization/GridVirtualScroller.mjs +12 -0
  30. package/hooks/features/columnResize/useGridColumnResize.js +56 -2
  31. package/hooks/features/columnResize/useGridColumnResize.mjs +57 -3
  32. package/hooks/features/rows/gridRowsUtils.js +1 -1
  33. package/hooks/features/rows/gridRowsUtils.mjs +1 -1
  34. package/index.js +1 -1
  35. package/index.mjs +1 -1
  36. package/package.json +3 -3
  37. package/components/toolbarV8/ToolbarContext.d.mts +0 -11
  38. package/components/toolbarV8/ToolbarContext.d.ts +0 -11
  39. package/components/toolbarV8/ToolbarContext.js +0 -19
  40. package/components/toolbarV8/ToolbarContext.mjs +0 -12
  41. package/components/toolbarV8/utils.d.mts +0 -5
  42. package/components/toolbarV8/utils.d.ts +0 -5
  43. package/components/toolbarV8/utils.js +0 -23
  44. package/components/toolbarV8/utils.mjs +0 -17
package/CHANGELOG.md CHANGED
@@ -5,6 +5,163 @@
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.29.3
9
+
10
+ _Aug 21, 2026_
11
+
12
+ We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🐞 Bugfixes
15
+
16
+ The following team members contributed to this release:
17
+ @LukasTy, @MBilalShafi
18
+
19
+ ### Data Grid
20
+
21
+ #### `@mui/x-data-grid@8.29.3`
22
+
23
+ - [DataGrid] Fix toolbar button stealing focus when a sibling's disabled state changes (#23265) @MBilalShafi
24
+
25
+ #### `@mui/x-data-grid-pro@8.29.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
26
+
27
+ Same changes as in `@mui/x-data-grid@8.29.3`.
28
+
29
+ #### `@mui/x-data-grid-premium@8.29.3` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
30
+
31
+ Same changes as in `@mui/x-data-grid-pro@8.29.3`.
32
+
33
+ ### Date and Time Pickers
34
+
35
+ #### `@mui/x-date-pickers@8.29.3`
36
+
37
+ - [fields] Keep the field editable on blank space clicks (#23372) @LukasTy
38
+ - [pickers] Fix format placeholder brightness with a start adornment (#23205) @LukasTy
39
+
40
+ #### `@mui/x-date-pickers-pro@8.29.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
41
+
42
+ Same changes as in `@mui/x-date-pickers@8.29.3`, plus:
43
+
44
+ - [DateRangePicker] Fix broken active range position underline in single input range fields (#23201) @LukasTy
45
+
46
+ ### Charts
47
+
48
+ #### `@mui/x-charts@8.29.3`
49
+
50
+ Internal changes.
51
+
52
+ #### `@mui/x-charts-pro@8.29.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
53
+
54
+ Same changes as in `@mui/x-charts@8.29.3`.
55
+
56
+ #### `@mui/x-charts-premium@8.29.3` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
57
+
58
+ Same changes as in `@mui/x-charts-pro@8.29.3`.
59
+
60
+ ### Tree View
61
+
62
+ #### `@mui/x-tree-view@8.29.3`
63
+
64
+ Internal changes.
65
+
66
+ #### `@mui/x-tree-view-pro@8.29.3` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
67
+
68
+ Same changes as in `@mui/x-tree-view@8.29.3`.
69
+
70
+ ### Codemod
71
+
72
+ #### `@mui/x-codemod@8.29.3`
73
+
74
+ Internal changes.
75
+
76
+ ### Miscellaneous
77
+
78
+ - [core] Fix `test-react-18` install failure on v8.x (#23202) @LukasTy
79
+
80
+ ## 8.29.2
81
+
82
+ _Jul 2, 2026_
83
+
84
+ We'd like to extend a big thank you to the 8 contributors who made this release possible. Here are some highlights ✨:
85
+
86
+ - 🐞 Bugfixes
87
+
88
+ Special thanks go out to these community members for their valuable contributions:
89
+ @Anexus5919, @timbuckley
90
+
91
+ The following team members contributed to this release:
92
+ @alexfauquette, @arminmeh, @brijeshb42, @cherniavskii, @LukasTy, @MBilalShafi
93
+
94
+ ### Data Grid
95
+
96
+ #### `@mui/x-data-grid@8.29.2`
97
+
98
+ - [DataGrid] Avoid reading `type` of `undefined` in `gridRowUtils` (#22963) @timbuckley
99
+ - [DataGrid] Define `overflowAnchor` style at the right element (#22860) @arminmeh
100
+ - [DataGrid] Fix panel placement jump on mount (#22946) @cherniavskii
101
+ - [DataGrid] Fix scrollbars not showing up on scroll on iOS (#22884) @cherniavskii
102
+ - [DataGrid] Wait for rows before reacting on `autosizeOnMount` (#22886) @MBilalShafi
103
+
104
+ #### `@mui/x-data-grid-pro@8.29.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
105
+
106
+ Same changes as in `@mui/x-data-grid@8.29.2`.
107
+
108
+ #### `@mui/x-data-grid-premium@8.29.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
109
+
110
+ Same changes as in `@mui/x-data-grid-pro@8.29.2`, plus:
111
+
112
+ - [DataGridPremium] Escape `singleSelect` values in Excel export with `escapeFormulas` enabled (#22966) @Anexus5919
113
+
114
+ ### Date and Time Pickers
115
+
116
+ #### `@mui/x-date-pickers@8.29.2`
117
+
118
+ - [pickers] Fix localized digit crash (#23010) @alexfauquette
119
+ - [pickers] Respect explicit `notched` prop on the outlined `PickersTextField` (#22875) (#22893) @LukasTy
120
+
121
+ #### `@mui/x-date-pickers-pro@8.29.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
122
+
123
+ Same changes as in `@mui/x-date-pickers@8.29.2`.
124
+
125
+ ### Charts
126
+
127
+ #### `@mui/x-charts@8.29.2`
128
+
129
+ Internal changes.
130
+
131
+ #### `@mui/x-charts-pro@8.29.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
132
+
133
+ Same changes as in `@mui/x-charts@8.29.2`.
134
+
135
+ #### `@mui/x-charts-premium@8.29.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
136
+
137
+ Same changes as in `@mui/x-charts-pro@8.29.2`.
138
+
139
+ ### Tree View
140
+
141
+ #### `@mui/x-tree-view@8.29.2`
142
+
143
+ Internal changes.
144
+
145
+ #### `@mui/x-tree-view-pro@8.29.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
146
+
147
+ Same changes as in `@mui/x-tree-view@8.29.2`.
148
+
149
+ ### Codemod
150
+
151
+ #### `@mui/x-codemod@8.29.2`
152
+
153
+ Internal changes.
154
+
155
+ ### Core
156
+
157
+ - [code-infra] Pin mui-public actions to nearest git hash (#22824) @brijeshb42
158
+ - [internal] Switch resolutions to workspace overrides (#22865) @cherniavskii
159
+
160
+ ### Miscellaneous
161
+
162
+ - [virtualizer] Improve the dimensions' initial state (#22890) @arminmeh
163
+ - [virtualizer] Remeasure scrollbars when layout changes (#23003) @arminmeh
164
+
8
165
  ## 8.29.1
9
166
 
10
167
  _Jun 11, 2026_
@@ -51,9 +51,9 @@ const ColumnsPanelTrigger = exports.ColumnsPanelTrigger = (0, _forwardRef.forwar
51
51
  };
52
52
  const resolvedClassName = typeof className === 'function' ? className(state) : className;
53
53
  const {
54
- columnsPanelTriggerRef
54
+ triggers
55
55
  } = (0, _GridPanelContext.useGridPanelContext)();
56
- const handleRef = (0, _useForkRef.default)(ref, columnsPanelTriggerRef);
56
+ const handleRef = (0, _useForkRef.default)(ref, triggers.columnsPanel.setRef);
57
57
  const handleClick = event => {
58
58
  if (open) {
59
59
  apiRef.current.hidePreferences();
@@ -43,9 +43,9 @@ const ColumnsPanelTrigger = forwardRef(function ColumnsPanelTrigger(props, ref)
43
43
  };
44
44
  const resolvedClassName = typeof className === 'function' ? className(state) : className;
45
45
  const {
46
- columnsPanelTriggerRef
46
+ triggers
47
47
  } = useGridPanelContext();
48
- const handleRef = useForkRef(ref, columnsPanelTriggerRef);
48
+ const handleRef = useForkRef(ref, triggers.columnsPanel.setRef);
49
49
  const handleClick = event => {
50
50
  if (open) {
51
51
  apiRef.current.hidePreferences();
@@ -126,11 +126,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
126
126
  minHeight: 0,
127
127
  flexDirection: 'column',
128
128
  overflow: 'hidden',
129
- overflowAnchor: 'none',
130
- // Keep the same scrolling position
131
129
  transform: 'translate(0, 0)',
132
130
  // Create a stacking context to keep scrollbars from showing on top
133
131
 
132
+ [`& .${_gridClasses.gridClasses.virtualScroller}`]: {
133
+ overflowAnchor: 'none' // Keep the same scrolling position
134
+ },
134
135
  [`.${_gridClasses.gridClasses.main} > *:first-child${ignoreSsrWarning}`]: {
135
136
  borderTopLeftRadius: 'var(--unstable_DataGrid-radius)',
136
137
  borderTopRightRadius: 'var(--unstable_DataGrid-radius)'
@@ -120,11 +120,12 @@ export const GridRootStyles = styled('div', {
120
120
  minHeight: 0,
121
121
  flexDirection: 'column',
122
122
  overflow: 'hidden',
123
- overflowAnchor: 'none',
124
- // Keep the same scrolling position
125
123
  transform: 'translate(0, 0)',
126
124
  // Create a stacking context to keep scrollbars from showing on top
127
125
 
126
+ [`& .${c.virtualScroller}`]: {
127
+ overflowAnchor: 'none' // Keep the same scrolling position
128
+ },
128
129
  [`.${c.main} > *:first-child${ignoreSsrWarning}`]: {
129
130
  borderTopLeftRadius: 'var(--unstable_DataGrid-radius)',
130
131
  borderTopRightRadius: 'var(--unstable_DataGrid-radius)'
@@ -54,9 +54,9 @@ const FilterPanelTrigger = exports.FilterPanelTrigger = (0, _forwardRef.forwardR
54
54
  };
55
55
  const resolvedClassName = typeof className === 'function' ? className(state) : className;
56
56
  const {
57
- filterPanelTriggerRef
57
+ triggers
58
58
  } = (0, _GridPanelContext.useGridPanelContext)();
59
- const handleRef = (0, _useForkRef.default)(ref, filterPanelTriggerRef);
59
+ const handleRef = (0, _useForkRef.default)(ref, triggers.filterPanel.setRef);
60
60
  const handleClick = event => {
61
61
  if (open) {
62
62
  apiRef.current.hidePreferences();
@@ -46,9 +46,9 @@ const FilterPanelTrigger = forwardRef(function FilterPanelTrigger(props, ref) {
46
46
  };
47
47
  const resolvedClassName = typeof className === 'function' ? className(state) : className;
48
48
  const {
49
- filterPanelTriggerRef
49
+ triggers
50
50
  } = useGridPanelContext();
51
- const handleRef = useForkRef(ref, filterPanelTriggerRef);
51
+ const handleRef = useForkRef(ref, triggers.filterPanel.setRef);
52
52
  const handleClick = event => {
53
53
  if (open) {
54
54
  apiRef.current.hidePreferences();
@@ -1,8 +1,14 @@
1
1
  import * as React from 'react';
2
+ export interface GridPanelTrigger {
3
+ setRef: (instance: HTMLElement | null) => void;
4
+ element: HTMLElement | null;
5
+ }
2
6
  export interface GridPanelContextValue {
3
- columnsPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
4
- filterPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
5
- aiAssistantPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
7
+ triggers: {
8
+ filterPanel: GridPanelTrigger;
9
+ aiAssistantPanel: GridPanelTrigger;
10
+ columnsPanel: GridPanelTrigger;
11
+ };
6
12
  }
7
13
  export declare const GridPanelContext: React.Context<GridPanelContextValue | undefined>;
8
14
  export declare function useGridPanelContext(): GridPanelContextValue;
@@ -1,8 +1,14 @@
1
1
  import * as React from 'react';
2
+ export interface GridPanelTrigger {
3
+ setRef: (instance: HTMLElement | null) => void;
4
+ element: HTMLElement | null;
5
+ }
2
6
  export interface GridPanelContextValue {
3
- columnsPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
4
- filterPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
5
- aiAssistantPanelTriggerRef: React.RefObject<HTMLButtonElement | null>;
7
+ triggers: {
8
+ filterPanel: GridPanelTrigger;
9
+ aiAssistantPanel: GridPanelTrigger;
10
+ columnsPanel: GridPanelTrigger;
11
+ };
6
12
  }
7
13
  export declare const GridPanelContext: React.Context<GridPanelContextValue | undefined>;
8
14
  export declare function useGridPanelContext(): GridPanelContextValue;
@@ -2,12 +2,14 @@
2
2
  'use client';
3
3
 
4
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
6
  Object.defineProperty(exports, "__esModule", {
6
7
  value: true
7
8
  });
8
9
  exports.GridPanelContext = void 0;
9
10
  exports.GridPanelContextProvider = GridPanelContextProvider;
10
11
  exports.useGridPanelContext = useGridPanelContext;
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
  var React = _interopRequireWildcard(require("react"));
12
14
  var _jsxRuntime = require("react/jsx-runtime");
13
15
  const GridPanelContext = exports.GridPanelContext = /*#__PURE__*/React.createContext(undefined);
@@ -22,14 +24,46 @@ function useGridPanelContext() {
22
24
  function GridPanelContextProvider({
23
25
  children
24
26
  }) {
25
- const columnsPanelTriggerRef = React.useRef(null);
26
- const filterPanelTriggerRef = React.useRef(null);
27
- const aiAssistantPanelTriggerRef = React.useRef(null);
27
+ const [triggerElements, setTriggerElements] = React.useState({
28
+ columnsPanel: null,
29
+ filterPanel: null,
30
+ aiAssistantPanel: null
31
+ });
32
+ const updateTriggerElement = React.useCallback((key, instance) => {
33
+ setTriggerElements(prev => {
34
+ if (prev[key] === instance) {
35
+ return prev;
36
+ }
37
+ return (0, _extends2.default)({}, prev, {
38
+ [key]: instance
39
+ });
40
+ });
41
+ }, []);
42
+ const setColumnsPanelTrigger = React.useCallback(instance => {
43
+ updateTriggerElement('columnsPanel', instance);
44
+ }, [updateTriggerElement]);
45
+ const setFilterPanelTrigger = React.useCallback(instance => {
46
+ updateTriggerElement('filterPanel', instance);
47
+ }, [updateTriggerElement]);
48
+ const setAiAssistantPanelTrigger = React.useCallback(instance => {
49
+ updateTriggerElement('aiAssistantPanel', instance);
50
+ }, [updateTriggerElement]);
28
51
  const value = React.useMemo(() => ({
29
- columnsPanelTriggerRef,
30
- filterPanelTriggerRef,
31
- aiAssistantPanelTriggerRef
32
- }), []);
52
+ triggers: {
53
+ columnsPanel: {
54
+ element: triggerElements.columnsPanel,
55
+ setRef: setColumnsPanelTrigger
56
+ },
57
+ filterPanel: {
58
+ element: triggerElements.filterPanel,
59
+ setRef: setFilterPanelTrigger
60
+ },
61
+ aiAssistantPanel: {
62
+ element: triggerElements.aiAssistantPanel,
63
+ setRef: setAiAssistantPanelTrigger
64
+ }
65
+ }
66
+ }), [triggerElements, setColumnsPanelTrigger, setFilterPanelTrigger, setAiAssistantPanelTrigger]);
33
67
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridPanelContext.Provider, {
34
68
  value: value,
35
69
  children: children
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
4
  import * as React from 'react';
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
6
  export const GridPanelContext = /*#__PURE__*/React.createContext(undefined);
@@ -14,14 +15,46 @@ export function useGridPanelContext() {
14
15
  export function GridPanelContextProvider({
15
16
  children
16
17
  }) {
17
- const columnsPanelTriggerRef = React.useRef(null);
18
- const filterPanelTriggerRef = React.useRef(null);
19
- const aiAssistantPanelTriggerRef = React.useRef(null);
18
+ const [triggerElements, setTriggerElements] = React.useState({
19
+ columnsPanel: null,
20
+ filterPanel: null,
21
+ aiAssistantPanel: null
22
+ });
23
+ const updateTriggerElement = React.useCallback((key, instance) => {
24
+ setTriggerElements(prev => {
25
+ if (prev[key] === instance) {
26
+ return prev;
27
+ }
28
+ return _extends({}, prev, {
29
+ [key]: instance
30
+ });
31
+ });
32
+ }, []);
33
+ const setColumnsPanelTrigger = React.useCallback(instance => {
34
+ updateTriggerElement('columnsPanel', instance);
35
+ }, [updateTriggerElement]);
36
+ const setFilterPanelTrigger = React.useCallback(instance => {
37
+ updateTriggerElement('filterPanel', instance);
38
+ }, [updateTriggerElement]);
39
+ const setAiAssistantPanelTrigger = React.useCallback(instance => {
40
+ updateTriggerElement('aiAssistantPanel', instance);
41
+ }, [updateTriggerElement]);
20
42
  const value = React.useMemo(() => ({
21
- columnsPanelTriggerRef,
22
- filterPanelTriggerRef,
23
- aiAssistantPanelTriggerRef
24
- }), []);
43
+ triggers: {
44
+ columnsPanel: {
45
+ element: triggerElements.columnsPanel,
46
+ setRef: setColumnsPanelTrigger
47
+ },
48
+ filterPanel: {
49
+ element: triggerElements.filterPanel,
50
+ setRef: setFilterPanelTrigger
51
+ },
52
+ aiAssistantPanel: {
53
+ element: triggerElements.aiAssistantPanel,
54
+ setRef: setAiAssistantPanelTrigger
55
+ }
56
+ }
57
+ }), [triggerElements, setColumnsPanelTrigger, setFilterPanelTrigger, setAiAssistantPanelTrigger]);
25
58
  return /*#__PURE__*/_jsx(GridPanelContext.Provider, {
26
59
  value: value,
27
60
  children: children
@@ -20,21 +20,19 @@ function GridPreferencesPanel() {
20
20
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
21
21
  const preferencePanelState = (0, _useGridSelector.useGridSelector)(apiRef, _gridPreferencePanelSelector.gridPreferencePanelStateSelector);
22
22
  const {
23
- columnsPanelTriggerRef,
24
- filterPanelTriggerRef,
25
- aiAssistantPanelTriggerRef
23
+ triggers
26
24
  } = (0, _GridPanelContext.useGridPanelContext)();
27
25
  const panelContent = apiRef.current.unstable_applyPipeProcessors('preferencePanel', null, preferencePanelState.openedPanelValue ?? _gridPreferencePanelsValue.GridPreferencePanelsValue.filters);
28
26
  let target = null;
29
27
  switch (preferencePanelState.openedPanelValue) {
30
28
  case _gridPreferencePanelsValue.GridPreferencePanelsValue.filters:
31
- target = filterPanelTriggerRef.current;
29
+ target = triggers.filterPanel.element;
32
30
  break;
33
31
  case _gridPreferencePanelsValue.GridPreferencePanelsValue.columns:
34
- target = columnsPanelTriggerRef.current;
32
+ target = triggers.columnsPanel.element;
35
33
  break;
36
34
  case _gridPreferencePanelsValue.GridPreferencePanelsValue.aiAssistant:
37
- target = aiAssistantPanelTriggerRef.current;
35
+ target = triggers.aiAssistantPanel.element;
38
36
  break;
39
37
  default:
40
38
  }
@@ -13,21 +13,19 @@ export function GridPreferencesPanel() {
13
13
  const rootProps = useGridRootProps();
14
14
  const preferencePanelState = useGridSelector(apiRef, gridPreferencePanelStateSelector);
15
15
  const {
16
- columnsPanelTriggerRef,
17
- filterPanelTriggerRef,
18
- aiAssistantPanelTriggerRef
16
+ triggers
19
17
  } = useGridPanelContext();
20
18
  const panelContent = apiRef.current.unstable_applyPipeProcessors('preferencePanel', null, preferencePanelState.openedPanelValue ?? GridPreferencePanelsValue.filters);
21
19
  let target = null;
22
20
  switch (preferencePanelState.openedPanelValue) {
23
21
  case GridPreferencePanelsValue.filters:
24
- target = filterPanelTriggerRef.current;
22
+ target = triggers.filterPanel.element;
25
23
  break;
26
24
  case GridPreferencePanelsValue.columns:
27
- target = columnsPanelTriggerRef.current;
25
+ target = triggers.columnsPanel.element;
28
26
  break;
29
27
  case GridPreferencePanelsValue.aiAssistant:
30
- target = aiAssistantPanelTriggerRef.current;
28
+ target = triggers.aiAssistantPanel.element;
31
29
  break;
32
30
  default:
33
31
  }
@@ -34,10 +34,10 @@ const GridToolbarColumnsButton = exports.GridToolbarColumnsButton = (0, _forward
34
34
  const apiRef = (0, _useGridApiContext.useGridApiContext)();
35
35
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
36
36
  const {
37
- columnsPanelTriggerRef
37
+ triggers
38
38
  } = (0, _GridPanelContext.useGridPanelContext)();
39
39
  const preferencePanel = (0, _useGridSelector.useGridSelector)(apiRef, _gridPreferencePanelSelector.gridPreferencePanelStateSelector);
40
- const handleRef = (0, _useForkRef.default)(ref, columnsPanelTriggerRef);
40
+ const handleRef = (0, _useForkRef.default)(ref, triggers.columnsPanel.setRef);
41
41
  const showColumns = event => {
42
42
  if (preferencePanel.open && preferencePanel.openedPanelValue === _gridPreferencePanelsValue.GridPreferencePanelsValue.columns) {
43
43
  apiRef.current.hidePreferences();
@@ -27,10 +27,10 @@ const GridToolbarColumnsButton = forwardRef(function GridToolbarColumnsButton(pr
27
27
  const apiRef = useGridApiContext();
28
28
  const rootProps = useGridRootProps();
29
29
  const {
30
- columnsPanelTriggerRef
30
+ triggers
31
31
  } = useGridPanelContext();
32
32
  const preferencePanel = useGridSelector(apiRef, gridPreferencePanelStateSelector);
33
- const handleRef = useForkRef(ref, columnsPanelTriggerRef);
33
+ const handleRef = useForkRef(ref, triggers.columnsPanel.setRef);
34
34
  const showColumns = event => {
35
35
  if (preferencePanel.open && preferencePanel.openedPanelValue === GridPreferencePanelsValue.columns) {
36
36
  apiRef.current.hidePreferences();
@@ -62,9 +62,9 @@ const GridToolbarFilterButton = exports.GridToolbarFilterButton = (0, _forwardRe
62
62
  const filterButtonId = (0, _useId.default)();
63
63
  const filterPanelId = (0, _useId.default)();
64
64
  const {
65
- filterPanelTriggerRef
65
+ triggers
66
66
  } = (0, _GridPanelContext.useGridPanelContext)();
67
- const handleRef = (0, _useForkRef.default)(ref, filterPanelTriggerRef);
67
+ const handleRef = (0, _useForkRef.default)(ref, triggers.filterPanel.setRef);
68
68
  const tooltipContentNode = React.useMemo(() => {
69
69
  if (preferencePanel.open) {
70
70
  return apiRef.current.getLocaleText('toolbarFiltersTooltipHide');
@@ -55,9 +55,9 @@ const GridToolbarFilterButton = forwardRef(function GridToolbarFilterButton(prop
55
55
  const filterButtonId = useId();
56
56
  const filterPanelId = useId();
57
57
  const {
58
- filterPanelTriggerRef
58
+ triggers
59
59
  } = useGridPanelContext();
60
- const handleRef = useForkRef(ref, filterPanelTriggerRef);
60
+ const handleRef = useForkRef(ref, triggers.filterPanel.setRef);
61
61
  const tooltipContentNode = React.useMemo(() => {
62
62
  if (preferencePanel.open) {
63
63
  return apiRef.current.getLocaleText('toolbarFiltersTooltipHide');
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { type RenderProp } from '@mui/x-internals/useComponentRenderer';
2
+ import type { RenderProp } from '@mui/x-internals/useComponentRenderer';
3
3
  export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
4
4
  /**
5
5
  * A function to customize rendering of the component.
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { type RenderProp } from '@mui/x-internals/useComponentRenderer';
2
+ import type { RenderProp } from '@mui/x-internals/useComponentRenderer';
3
3
  export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
4
4
  /**
5
5
  * A function to customize rendering of the component.