@mui/x-data-grid 9.11.0 → 9.13.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 (232) hide show
  1. package/CHANGELOG.md +317 -0
  2. package/DataGrid/DataGrid.js +4 -2
  3. package/DataGrid/DataGrid.mjs +4 -2
  4. package/DataGrid/useDataGridProps.d.mts +1 -1
  5. package/DataGrid/useDataGridProps.d.ts +1 -1
  6. package/components/GridPagination.js +1 -1
  7. package/components/GridPagination.mjs +1 -1
  8. package/components/GridRow.d.mts +1 -0
  9. package/components/GridRow.d.ts +1 -0
  10. package/components/GridRow.js +41 -6
  11. package/components/GridRow.mjs +41 -6
  12. package/components/cell/GridCell.js +21 -5
  13. package/components/cell/GridCell.mjs +21 -5
  14. package/components/cell/GridEditBooleanCell.d.mts +1 -1
  15. package/components/cell/GridEditBooleanCell.d.ts +1 -1
  16. package/components/cell/GridEditBooleanCell.js +4 -4
  17. package/components/cell/GridEditBooleanCell.mjs +4 -4
  18. package/components/cell/GridEditDateCell.d.mts +1 -1
  19. package/components/cell/GridEditDateCell.d.ts +1 -1
  20. package/components/cell/GridEditDateCell.js +5 -5
  21. package/components/cell/GridEditDateCell.mjs +5 -5
  22. package/components/cell/GridEditInputCell.d.mts +1 -1
  23. package/components/cell/GridEditInputCell.d.ts +1 -1
  24. package/components/cell/GridEditInputCell.js +1 -1
  25. package/components/cell/GridEditInputCell.mjs +1 -1
  26. package/components/cell/GridEditLongTextCell.d.mts +1 -1
  27. package/components/cell/GridEditLongTextCell.d.ts +1 -1
  28. package/components/cell/GridEditLongTextCell.js +2 -2
  29. package/components/cell/GridEditLongTextCell.mjs +2 -2
  30. package/components/cell/GridEditSingleSelectCell.d.mts +1 -1
  31. package/components/cell/GridEditSingleSelectCell.d.ts +1 -1
  32. package/components/cell/GridEditSingleSelectCell.js +4 -4
  33. package/components/cell/GridEditSingleSelectCell.mjs +4 -4
  34. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  35. package/components/columnHeaders/GridBaseColumnHeaders.mjs +1 -1
  36. package/components/columnHeaders/GridColumnHeaderItem.js +4 -0
  37. package/components/columnHeaders/GridColumnHeaderItem.mjs +4 -0
  38. package/components/columnHeaders/GridGenericColumnHeaderItem.d.mts +7 -0
  39. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +7 -0
  40. package/components/columnHeaders/GridGenericColumnHeaderItem.js +5 -4
  41. package/components/columnHeaders/GridGenericColumnHeaderItem.mjs +5 -4
  42. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +18 -6
  43. package/components/panel/filterPanel/GridFilterInputSingleSelect.mjs +18 -6
  44. package/components/toolbarV8/Toolbar.d.mts +5 -1
  45. package/components/toolbarV8/Toolbar.d.ts +5 -1
  46. package/components/toolbarV8/Toolbar.js +34 -12
  47. package/components/toolbarV8/Toolbar.mjs +33 -11
  48. package/constants/gridClasses.d.mts +12 -0
  49. package/constants/gridClasses.d.ts +12 -0
  50. package/constants/gridClasses.js +1 -1
  51. package/constants/gridClasses.mjs +1 -1
  52. package/constants/localeTextConstants.js +4 -0
  53. package/constants/localeTextConstants.mjs +4 -0
  54. package/hooks/core/useGridApiInitialization.js +5 -1
  55. package/hooks/core/useGridApiInitialization.mjs +5 -1
  56. package/hooks/core/useGridStateInitialization.js +3 -1
  57. package/hooks/core/useGridStateInitialization.mjs +3 -1
  58. package/hooks/core/useGridVirtualizer.js +17 -1
  59. package/hooks/core/useGridVirtualizer.mjs +17 -1
  60. package/hooks/features/columnResize/useGridColumnResize.js +5 -0
  61. package/hooks/features/columnResize/useGridColumnResize.mjs +5 -0
  62. package/hooks/features/columns/gridColumnsUtils.d.mts +1 -1
  63. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -1
  64. package/hooks/features/columns/gridColumnsUtils.js +2 -2
  65. package/hooks/features/columns/gridColumnsUtils.mjs +2 -2
  66. package/hooks/features/dataSource/gridDataSourceSelector.js +6 -2
  67. package/hooks/features/dataSource/gridDataSourceSelector.mjs +6 -2
  68. package/hooks/features/dataSource/models.d.mts +2 -2
  69. package/hooks/features/dataSource/models.d.ts +2 -2
  70. package/hooks/features/dataSource/useGridDataSourceBase.js +25 -8
  71. package/hooks/features/dataSource/useGridDataSourceBase.mjs +26 -9
  72. package/hooks/features/dataSource/useGridDataSourceFilterModelChange.d.mts +9 -0
  73. package/hooks/features/dataSource/useGridDataSourceFilterModelChange.d.ts +9 -0
  74. package/hooks/features/dataSource/useGridDataSourceFilterModelChange.js +57 -0
  75. package/hooks/features/dataSource/useGridDataSourceFilterModelChange.mjs +49 -0
  76. package/hooks/features/editing/useGridCellEditing.js +3 -1
  77. package/hooks/features/editing/useGridCellEditing.mjs +3 -1
  78. package/hooks/features/editing/useGridRowEditing.js +3 -1
  79. package/hooks/features/editing/useGridRowEditing.mjs +3 -1
  80. package/hooks/features/filter/gridFilterUtils.d.mts +13 -0
  81. package/hooks/features/filter/gridFilterUtils.d.ts +13 -0
  82. package/hooks/features/filter/gridFilterUtils.js +32 -1
  83. package/hooks/features/filter/gridFilterUtils.mjs +29 -1
  84. package/hooks/features/filter/useGridFilter.js +1 -21
  85. package/hooks/features/filter/useGridFilter.mjs +2 -22
  86. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +1 -1
  87. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.mjs +1 -1
  88. package/hooks/features/pivoting/gridPivotingInterfaces.d.mts +2 -2
  89. package/hooks/features/pivoting/gridPivotingInterfaces.d.ts +2 -2
  90. package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  91. package/hooks/features/rowSelection/useGridRowSelection.mjs +2 -2
  92. package/hooks/features/rows/gridRowsUtils.d.mts +37 -3
  93. package/hooks/features/rows/gridRowsUtils.d.ts +37 -3
  94. package/hooks/features/rows/gridRowsUtils.js +120 -23
  95. package/hooks/features/rows/gridRowsUtils.mjs +115 -22
  96. package/hooks/features/rows/useGridRowSpanning.js +5 -0
  97. package/hooks/features/rows/useGridRowSpanning.mjs +5 -0
  98. package/hooks/features/rows/useGridRows.js +10 -1
  99. package/hooks/features/rows/useGridRows.mjs +10 -1
  100. package/hooks/features/virtualization/gridVirtualizationSelectors.d.mts +1 -1
  101. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +1 -1
  102. package/hooks/utils/useGridEvent.d.mts +2 -2
  103. package/hooks/utils/useGridEvent.d.ts +2 -2
  104. package/hooks/utils/useGridEvent.js +2 -0
  105. package/hooks/utils/useGridEvent.mjs +2 -0
  106. package/index.js +1 -1
  107. package/index.mjs +1 -1
  108. package/internals/index.d.mts +4 -2
  109. package/internals/index.d.ts +4 -2
  110. package/internals/index.js +48 -0
  111. package/internals/index.mjs +4 -2
  112. package/locales/arSD.js +5 -0
  113. package/locales/arSD.mjs +5 -0
  114. package/locales/beBY.js +5 -0
  115. package/locales/beBY.mjs +5 -0
  116. package/locales/bgBG.js +5 -0
  117. package/locales/bgBG.mjs +5 -0
  118. package/locales/bnBD.js +5 -0
  119. package/locales/bnBD.mjs +5 -0
  120. package/locales/caES.js +5 -0
  121. package/locales/caES.mjs +5 -0
  122. package/locales/csCZ.js +5 -0
  123. package/locales/csCZ.mjs +5 -0
  124. package/locales/daDK.js +5 -0
  125. package/locales/daDK.mjs +5 -0
  126. package/locales/deDE.js +5 -0
  127. package/locales/deDE.mjs +5 -0
  128. package/locales/elGR.js +5 -0
  129. package/locales/elGR.mjs +5 -0
  130. package/locales/esES.js +5 -0
  131. package/locales/esES.mjs +5 -0
  132. package/locales/faIR.js +5 -0
  133. package/locales/faIR.mjs +5 -0
  134. package/locales/fiFI.js +5 -0
  135. package/locales/fiFI.mjs +5 -0
  136. package/locales/frFR.js +5 -0
  137. package/locales/frFR.mjs +5 -0
  138. package/locales/heIL.js +5 -0
  139. package/locales/heIL.mjs +5 -0
  140. package/locales/hrHR.js +5 -0
  141. package/locales/hrHR.mjs +5 -0
  142. package/locales/huHU.js +5 -0
  143. package/locales/huHU.mjs +5 -0
  144. package/locales/hyAM.js +5 -0
  145. package/locales/hyAM.mjs +5 -0
  146. package/locales/idID.js +5 -0
  147. package/locales/idID.mjs +5 -0
  148. package/locales/isIS.js +5 -0
  149. package/locales/isIS.mjs +5 -0
  150. package/locales/itIT.js +5 -0
  151. package/locales/itIT.mjs +5 -0
  152. package/locales/jaJP.js +5 -0
  153. package/locales/jaJP.mjs +5 -0
  154. package/locales/koKR.js +5 -0
  155. package/locales/koKR.mjs +5 -0
  156. package/locales/nbNO.js +5 -0
  157. package/locales/nbNO.mjs +5 -0
  158. package/locales/nlNL.js +5 -0
  159. package/locales/nlNL.mjs +5 -0
  160. package/locales/nnNO.js +5 -0
  161. package/locales/nnNO.mjs +5 -0
  162. package/locales/plPL.js +5 -0
  163. package/locales/plPL.mjs +5 -0
  164. package/locales/ptBR.js +5 -0
  165. package/locales/ptBR.mjs +5 -0
  166. package/locales/ptPT.js +5 -0
  167. package/locales/ptPT.mjs +5 -0
  168. package/locales/roRO.js +5 -0
  169. package/locales/roRO.mjs +5 -0
  170. package/locales/ruRU.js +5 -0
  171. package/locales/ruRU.mjs +5 -0
  172. package/locales/skSK.js +5 -0
  173. package/locales/skSK.mjs +5 -0
  174. package/locales/svSE.js +5 -0
  175. package/locales/svSE.mjs +5 -0
  176. package/locales/thTH.js +5 -0
  177. package/locales/thTH.mjs +5 -0
  178. package/locales/trTR.js +5 -0
  179. package/locales/trTR.mjs +5 -0
  180. package/locales/ukUA.js +5 -0
  181. package/locales/ukUA.mjs +5 -0
  182. package/locales/urPK.js +5 -0
  183. package/locales/urPK.mjs +5 -0
  184. package/locales/viVN.js +5 -0
  185. package/locales/viVN.mjs +5 -0
  186. package/locales/zhCN.js +5 -0
  187. package/locales/zhCN.mjs +5 -0
  188. package/locales/zhHK.js +5 -0
  189. package/locales/zhHK.mjs +5 -0
  190. package/locales/zhTW.js +5 -0
  191. package/locales/zhTW.mjs +5 -0
  192. package/material/variables.d.mts +6 -1
  193. package/material/variables.d.ts +6 -1
  194. package/material/variables.js +17 -3
  195. package/material/variables.mjs +14 -4
  196. package/models/api/gridApiCommon.d.mts +2 -2
  197. package/models/api/gridApiCommon.d.ts +2 -2
  198. package/models/api/gridCallbackDetails.d.mts +11 -1
  199. package/models/api/gridCallbackDetails.d.ts +11 -1
  200. package/models/api/gridLocaleTextApi.d.mts +3 -0
  201. package/models/api/gridLocaleTextApi.d.ts +3 -0
  202. package/models/api/gridRowApi.d.mts +19 -7
  203. package/models/api/gridRowApi.d.ts +19 -7
  204. package/models/api/gridStateApi.d.mts +3 -2
  205. package/models/api/gridStateApi.d.ts +3 -2
  206. package/models/api/index.d.mts +1 -1
  207. package/models/api/index.d.ts +1 -1
  208. package/models/colDef/gridColDef.d.mts +5 -0
  209. package/models/colDef/gridColDef.d.ts +5 -0
  210. package/models/configuration/gridConfiguration.d.mts +13 -1
  211. package/models/configuration/gridConfiguration.d.ts +13 -1
  212. package/models/controlStateItem.d.mts +3 -2
  213. package/models/controlStateItem.d.ts +3 -2
  214. package/models/events/gridEventListener.d.mts +3 -2
  215. package/models/events/gridEventListener.d.ts +3 -2
  216. package/models/gridDataSource.d.mts +3 -0
  217. package/models/gridDataSource.d.ts +3 -0
  218. package/models/gridRows.d.mts +28 -1
  219. package/models/gridRows.d.ts +28 -1
  220. package/models/props/DataGridProps.d.mts +41 -38
  221. package/models/props/DataGridProps.d.ts +41 -38
  222. package/package.json +6 -6
  223. package/utils/domUtils.js +1 -1
  224. package/utils/domUtils.mjs +1 -1
  225. package/utils/getPublicApiRef.d.mts +2 -2
  226. package/utils/getPublicApiRef.d.ts +2 -2
  227. package/utils/getPublicApiRef.js +15 -3
  228. package/utils/getPublicApiRef.mjs +15 -3
  229. package/utils/keyboardUtils.d.mts +1 -0
  230. package/utils/keyboardUtils.d.ts +1 -0
  231. package/utils/keyboardUtils.js +6 -0
  232. package/utils/keyboardUtils.mjs +5 -0
@@ -23,12 +23,23 @@ const renderSingleSelectOptions = ({
23
23
  getOptionLabel,
24
24
  getOptionValue,
25
25
  isSelectNative,
26
- baseSelectOptionProps
26
+ baseSelectOptionProps,
27
+ blankOptionLabel
27
28
  }) => {
28
- const iterableColumnValues = ['', ...((0, _filterPanelUtils.getValueOptions)(column) || [])];
29
- return iterableColumnValues.map(option => {
30
- const value = getOptionValue(option);
31
- let label = getOptionLabel(option);
29
+ const valueOptions = (0, _filterPanelUtils.getValueOptions)(column) || [];
30
+
31
+ // A column that declares its own blank entry already offers a way to reset the filter.
32
+ // Prepending another one would render two options sharing the same `''` key.
33
+ const declaresBlankOption = valueOptions.some(option => {
34
+ const optionValue = getOptionValue(option);
35
+ return optionValue === '' || optionValue === null || optionValue === undefined;
36
+ });
37
+ const iterableColumnValues = declaresBlankOption ? valueOptions : ['', ...valueOptions];
38
+ return iterableColumnValues.map((option, index) => {
39
+ // The prepended entry is ours, not a value option, so it skips the column accessors.
40
+ const isBlankOption = !declaresBlankOption && index === 0;
41
+ const value = isBlankOption ? '' : getOptionValue(option);
42
+ let label = isBlankOption ? blankOptionLabel : getOptionLabel(option);
32
43
  if (label === '') {
33
44
  label = ' '; // To force the height of the empty option
34
45
  }
@@ -98,7 +109,8 @@ function GridFilterInputSingleSelect(props) {
98
109
  getOptionLabel,
99
110
  getOptionValue,
100
111
  isSelectNative,
101
- baseSelectOptionProps: rootProps.slotProps?.baseSelectOption
112
+ baseSelectOptionProps: rootProps.slotProps?.baseSelectOption,
113
+ blankOptionLabel: apiRef.current.getLocaleText('filterValueAny')
102
114
  })
103
115
  })), headerFilterMenu, clearButton]
104
116
  });
@@ -15,12 +15,23 @@ const renderSingleSelectOptions = ({
15
15
  getOptionLabel,
16
16
  getOptionValue,
17
17
  isSelectNative,
18
- baseSelectOptionProps
18
+ baseSelectOptionProps,
19
+ blankOptionLabel
19
20
  }) => {
20
- const iterableColumnValues = ['', ...(getValueOptions(column) || [])];
21
- return iterableColumnValues.map(option => {
22
- const value = getOptionValue(option);
23
- let label = getOptionLabel(option);
21
+ const valueOptions = getValueOptions(column) || [];
22
+
23
+ // A column that declares its own blank entry already offers a way to reset the filter.
24
+ // Prepending another one would render two options sharing the same `''` key.
25
+ const declaresBlankOption = valueOptions.some(option => {
26
+ const optionValue = getOptionValue(option);
27
+ return optionValue === '' || optionValue === null || optionValue === undefined;
28
+ });
29
+ const iterableColumnValues = declaresBlankOption ? valueOptions : ['', ...valueOptions];
30
+ return iterableColumnValues.map((option, index) => {
31
+ // The prepended entry is ours, not a value option, so it skips the column accessors.
32
+ const isBlankOption = !declaresBlankOption && index === 0;
33
+ const value = isBlankOption ? '' : getOptionValue(option);
34
+ let label = isBlankOption ? blankOptionLabel : getOptionLabel(option);
24
35
  if (label === '') {
25
36
  label = ' '; // To force the height of the empty option
26
37
  }
@@ -90,7 +101,8 @@ function GridFilterInputSingleSelect(props) {
90
101
  getOptionLabel,
91
102
  getOptionValue,
92
103
  isSelectNative,
93
- baseSelectOptionProps: rootProps.slotProps?.baseSelectOption
104
+ baseSelectOptionProps: rootProps.slotProps?.baseSelectOption,
105
+ blankOptionLabel: apiRef.current.getLocaleText('filterValueAny')
94
106
  })
95
107
  })), headerFilterMenu, clearButton]
96
108
  });
@@ -6,6 +6,10 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  */
7
7
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
8
8
  };
9
+ /**
10
+ * The styled `<div />` element rendered by the `<Toolbar />` component.
11
+ * Use it to apply the toolbar styles to other elements, inside or outside of a Data Grid.
12
+ */
9
13
  declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
10
14
  /**
11
15
  * The top level Toolbar component that provides context to child components.
@@ -25,4 +29,4 @@ declare const Toolbar: React.ForwardRefExoticComponent<ToolbarProps> | React.For
25
29
  */
26
30
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
27
31
  } & React.RefAttributes<HTMLDivElement>>;
28
- export { Toolbar };
32
+ export { Toolbar, ToolbarRoot };
@@ -6,6 +6,10 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  */
7
7
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
8
8
  };
9
+ /**
10
+ * The styled `<div />` element rendered by the `<Toolbar />` component.
11
+ * Use it to apply the toolbar styles to other elements, inside or outside of a Data Grid.
12
+ */
9
13
  declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
10
14
  /**
11
15
  * The top level Toolbar component that provides context to child components.
@@ -25,4 +29,4 @@ declare const Toolbar: React.ForwardRefExoticComponent<ToolbarProps> | React.For
25
29
  */
26
30
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
27
31
  } & React.RefAttributes<HTMLDivElement>>;
28
- export { Toolbar };
32
+ export { Toolbar, ToolbarRoot };
@@ -6,7 +6,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.Toolbar = void 0;
9
+ exports.ToolbarRoot = exports.Toolbar = void 0;
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
12
  var React = _interopRequireWildcard(require("react"));
@@ -18,6 +18,7 @@ var _forwardRef = require("@mui/x-internals/forwardRef");
18
18
  var _useComponentRenderer = require("@mui/x-internals/useComponentRenderer");
19
19
  var _ToolbarContext = require("@mui/x-internals/ToolbarContext");
20
20
  var _cssVariables = require("../../constants/cssVariables");
21
+ var _variables = require("../../material/variables");
21
22
  var _gridClasses = require("../../constants/gridClasses");
22
23
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
23
24
  var _jsxRuntime = require("react/jsx-runtime");
@@ -31,19 +32,40 @@ const useUtilityClasses = ownerState => {
31
32
  };
32
33
  return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
33
34
  };
34
- const ToolbarRoot = (0, _styles.styled)('div', {
35
+
36
+ /**
37
+ * The styled `<div />` element rendered by the `<Toolbar />` component.
38
+ * Use it to apply the toolbar styles to other elements, inside or outside of a Data Grid.
39
+ */
40
+ const ToolbarRoot = exports.ToolbarRoot = (0, _styles.styled)('div', {
35
41
  name: 'MuiDataGrid',
36
42
  slot: 'Toolbar'
37
- })({
38
- flex: '0 1 1px',
39
- display: 'flex',
40
- alignItems: 'center',
41
- justifyContent: 'end',
42
- gap: _cssVariables.vars.spacing(0.25),
43
- padding: _cssVariables.vars.spacing(0.75),
44
- minHeight: 52,
45
- boxSizing: 'border-box',
46
- borderBottom: `1px solid ${_cssVariables.vars.colors.border.base}`
43
+ })(({
44
+ theme
45
+ }) => {
46
+ // The Data Grid CSS variables are only defined on the Data Grid root element, so they are
47
+ // declared with a fallback to keep the styles working when rendered outside of a Data Grid.
48
+ const spacingUnit = `var(${_cssVariables.vars.keys.spacingUnit}, ${(0, _variables.getSpacingUnit)(theme)})`;
49
+ const borderColor = `var(${_cssVariables.vars.keys.colors.border.base}, ${(0, _variables.getBorderColor)(theme)})`;
50
+ const background = `var(${_cssVariables.vars.keys.colors.background.base}, ${(0, _variables.getBackgroundBase)(theme)})`;
51
+ const foreground = `var(${_cssVariables.vars.keys.colors.foreground.base}, ${(theme.vars || theme).palette.text.primary})`;
52
+ const fontBody = (0, _variables.getFontBody)(theme);
53
+ return {
54
+ flex: '0 1 1px',
55
+ display: 'flex',
56
+ alignItems: 'center',
57
+ justifyContent: 'end',
58
+ gap: `calc(${spacingUnit} * 0.25)`,
59
+ padding: `calc(${spacingUnit} * 0.75)`,
60
+ minHeight: 52,
61
+ boxSizing: 'border-box',
62
+ borderBottom: `1px solid ${borderColor}`,
63
+ // Inherited from the Data Grid root inside a grid, declared here so the component keeps
64
+ // matching it when rendered on its own.
65
+ backgroundColor: background,
66
+ color: foreground,
67
+ font: fontBody ? `var(${_cssVariables.vars.keys.typography.font.body}, ${fontBody})` : undefined
68
+ };
47
69
  });
48
70
 
49
71
  /**
@@ -12,6 +12,7 @@ import { forwardRef } from '@mui/x-internals/forwardRef';
12
12
  import { useComponentRenderer } from '@mui/x-internals/useComponentRenderer';
13
13
  import { ToolbarContextProvider } from '@mui/x-internals/ToolbarContext';
14
14
  import { vars } from "../../constants/cssVariables.mjs";
15
+ import { getBackgroundBase, getBorderColor, getFontBody, getSpacingUnit } from "../../material/variables.mjs";
15
16
  import { getDataGridUtilityClass } from "../../constants/gridClasses.mjs";
16
17
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.mjs";
17
18
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -24,19 +25,40 @@ const useUtilityClasses = ownerState => {
24
25
  };
25
26
  return composeClasses(slots, getDataGridUtilityClass, classes);
26
27
  };
28
+
29
+ /**
30
+ * The styled `<div />` element rendered by the `<Toolbar />` component.
31
+ * Use it to apply the toolbar styles to other elements, inside or outside of a Data Grid.
32
+ */
27
33
  const ToolbarRoot = styled('div', {
28
34
  name: 'MuiDataGrid',
29
35
  slot: 'Toolbar'
30
- })({
31
- flex: '0 1 1px',
32
- display: 'flex',
33
- alignItems: 'center',
34
- justifyContent: 'end',
35
- gap: vars.spacing(0.25),
36
- padding: vars.spacing(0.75),
37
- minHeight: 52,
38
- boxSizing: 'border-box',
39
- borderBottom: `1px solid ${vars.colors.border.base}`
36
+ })(({
37
+ theme
38
+ }) => {
39
+ // The Data Grid CSS variables are only defined on the Data Grid root element, so they are
40
+ // declared with a fallback to keep the styles working when rendered outside of a Data Grid.
41
+ const spacingUnit = `var(${vars.keys.spacingUnit}, ${getSpacingUnit(theme)})`;
42
+ const borderColor = `var(${vars.keys.colors.border.base}, ${getBorderColor(theme)})`;
43
+ const background = `var(${vars.keys.colors.background.base}, ${getBackgroundBase(theme)})`;
44
+ const foreground = `var(${vars.keys.colors.foreground.base}, ${(theme.vars || theme).palette.text.primary})`;
45
+ const fontBody = getFontBody(theme);
46
+ return {
47
+ flex: '0 1 1px',
48
+ display: 'flex',
49
+ alignItems: 'center',
50
+ justifyContent: 'end',
51
+ gap: `calc(${spacingUnit} * 0.25)`,
52
+ padding: `calc(${spacingUnit} * 0.75)`,
53
+ minHeight: 52,
54
+ boxSizing: 'border-box',
55
+ borderBottom: `1px solid ${borderColor}`,
56
+ // Inherited from the Data Grid root inside a grid, declared here so the component keeps
57
+ // matching it when rendered on its own.
58
+ backgroundColor: background,
59
+ color: foreground,
60
+ font: fontBody ? `var(${vars.keys.typography.font.body}, ${fontBody})` : undefined
61
+ };
40
62
  });
41
63
 
42
64
  /**
@@ -82,4 +104,4 @@ process.env.NODE_ENV !== "production" ? Toolbar.propTypes /* remove-proptypes */
82
104
  */
83
105
  render: PropTypes.oneOfType([PropTypes.element, PropTypes.func])
84
106
  } : void 0;
85
- export { Toolbar };
107
+ export { Toolbar, ToolbarRoot };
@@ -83,6 +83,18 @@ export interface GridClasses {
83
83
  * Styles applied to the aggregation row overlay wrapper.
84
84
  */
85
85
  aggregationRowOverlayWrapper: string;
86
+ /**
87
+ * Styles applied to the A1-notation column-letter adornment in the column header (Premium formulas).
88
+ */
89
+ formulaColumnHeaderLetter: string;
90
+ /**
91
+ * Styles applied to the cells of the A1-notation row-number column (Premium formulas).
92
+ */
93
+ formulaRowNumberCell: string;
94
+ /**
95
+ * Styles applied to the formula bar root element (Premium formulas).
96
+ */
97
+ formulaBar: string;
86
98
  /**
87
99
  * Styles applied to the root element if `autoHeight={true}`.
88
100
  */
@@ -83,6 +83,18 @@ export interface GridClasses {
83
83
  * Styles applied to the aggregation row overlay wrapper.
84
84
  */
85
85
  aggregationRowOverlayWrapper: string;
86
+ /**
87
+ * Styles applied to the A1-notation column-letter adornment in the column header (Premium formulas).
88
+ */
89
+ formulaColumnHeaderLetter: string;
90
+ /**
91
+ * Styles applied to the cells of the A1-notation row-number column (Premium formulas).
92
+ */
93
+ formulaRowNumberCell: string;
94
+ /**
95
+ * Styles applied to the formula bar root element (Premium formulas).
96
+ */
97
+ formulaBar: string;
86
98
  /**
87
99
  * Styles applied to the root element if `autoHeight={true}`.
88
100
  */
@@ -30,4 +30,4 @@ const gridClassesOverrides = exports.gridClassesOverrides = {
30
30
  // TODO v9: Rename to `cell--dragging`
31
31
  'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
32
32
  };
33
- const gridClasses = exports.gridClasses = (0, _generateUtilityClasses.default)('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'contentFiller', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'multiSelectCell', 'multiSelectCellChip', 'multiSelectCellChip--hidden', 'multiSelectCellOverflow', 'multiSelectCellPopup', 'multiSelectCellPopperContent', 'editMultiSelectCell', 'editMultiSelectCellChip', 'editMultiSelectCellChip--hidden', 'editMultiSelectCellOverflow', 'editMultiSelectCellPopup', 'editMultiSelectCellPopperContent', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filler--horizontal', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'virtualizer--layoutControlled', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
33
+ const gridClasses = exports.gridClasses = (0, _generateUtilityClasses.default)('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'formulaColumnHeaderLetter', 'formulaRowNumberCell', 'formulaBar', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'contentFiller', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'multiSelectCell', 'multiSelectCellChip', 'multiSelectCellChip--hidden', 'multiSelectCellOverflow', 'multiSelectCellPopup', 'multiSelectCellPopperContent', 'editMultiSelectCell', 'editMultiSelectCellChip', 'editMultiSelectCellChip--hidden', 'editMultiSelectCellOverflow', 'editMultiSelectCellPopup', 'editMultiSelectCellPopperContent', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filler--horizontal', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'virtualizer--layoutControlled', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
@@ -22,4 +22,4 @@ export const gridClassesOverrides = {
22
22
  // TODO v9: Rename to `cell--dragging`
23
23
  'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
24
24
  };
25
- export const gridClasses = generateUtilityClasses('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'contentFiller', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'multiSelectCell', 'multiSelectCellChip', 'multiSelectCellChip--hidden', 'multiSelectCellOverflow', 'multiSelectCellPopup', 'multiSelectCellPopperContent', 'editMultiSelectCell', 'editMultiSelectCellChip', 'editMultiSelectCellChip--hidden', 'editMultiSelectCellOverflow', 'editMultiSelectCellPopup', 'editMultiSelectCellPopperContent', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filler--horizontal', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'virtualizer--layoutControlled', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
25
+ export const gridClasses = generateUtilityClasses('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'formulaColumnHeaderLetter', 'formulaRowNumberCell', 'formulaBar', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'contentFiller', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'multiSelectCell', 'multiSelectCellChip', 'multiSelectCellChip--hidden', 'multiSelectCellOverflow', 'multiSelectCellPopup', 'multiSelectCellPopperContent', 'editMultiSelectCell', 'editMultiSelectCellChip', 'editMultiSelectCellChip--hidden', 'editMultiSelectCellOverflow', 'editMultiSelectCellPopup', 'editMultiSelectCellPopperContent', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filler--horizontal', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'virtualizer--layoutControlled', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
@@ -47,6 +47,10 @@ const GRID_DEFAULT_LOCALE_TEXT = exports.GRID_DEFAULT_LOCALE_TEXT = {
47
47
  toolbarCharts: 'Charts',
48
48
  // Toolbar AI Assistant button
49
49
  toolbarAssistant: 'AI Assistant',
50
+ // Formula bar (Premium formulas)
51
+ formulaBarLabel: 'Formula bar',
52
+ formulaBarInputLabel: 'Formula',
53
+ formulaBarAddressLabel: 'Active cell',
50
54
  // Columns management text
51
55
  columnsManagementSearchTitle: 'Search',
52
56
  columnsManagementNoColumns: 'No columns',
@@ -41,6 +41,10 @@ export const GRID_DEFAULT_LOCALE_TEXT = {
41
41
  toolbarCharts: 'Charts',
42
42
  // Toolbar AI Assistant button
43
43
  toolbarAssistant: 'AI Assistant',
44
+ // Formula bar (Premium formulas)
45
+ formulaBarLabel: 'Formula bar',
46
+ formulaBarInputLabel: 'Formula',
47
+ formulaBarAddressLabel: 'Active cell',
44
48
  // Columns management text
45
49
  columnsManagementSearchTitle: 'Search',
46
50
  columnsManagementNoColumns: 'No columns',
@@ -12,6 +12,7 @@ var _EventManager = require("@mui/x-internals/EventManager");
12
12
  var _store = require("@mui/x-internals/store");
13
13
  var _useGridApiMethod = require("../utils/useGridApiMethod");
14
14
  var _signature = require("../../constants/signature");
15
+ var _getPublicApiRef = require("../../utils/getPublicApiRef");
15
16
  const SYMBOL_API_PRIVATE = Symbol('mui.api_private');
16
17
  const isSyntheticEvent = event => {
17
18
  return event.isPropagationStopped !== undefined;
@@ -92,8 +93,11 @@ function useGridApiInitialization(inputApiRef, props) {
92
93
  return;
93
94
  }
94
95
  const details = props.signature === _signature.GridSignature.DataGridPro || props.signature === _signature.GridSignature.DataGridPremium ? {
96
+ apiRef: (0, _getPublicApiRef.getPublicApiRef)(privateApiRef),
95
97
  api: privateApiRef.current.getPublicApi()
96
- } : {};
98
+ } : {
99
+ apiRef: (0, _getPublicApiRef.getPublicApiRef)(privateApiRef)
100
+ };
97
101
  privateApiRef.current.eventManager.emit(name, params, event, details);
98
102
  }, [privateApiRef, props.signature]);
99
103
  const subscribeEvent = React.useCallback((event, handler, options) => {
@@ -5,6 +5,7 @@ import { EventManager } from '@mui/x-internals/EventManager';
5
5
  import { Store } from '@mui/x-internals/store';
6
6
  import { useGridApiMethod } from "../utils/useGridApiMethod.mjs";
7
7
  import { GridSignature } from "../../constants/signature.mjs";
8
+ import { getPublicApiRef } from "../../utils/getPublicApiRef.mjs";
8
9
  const SYMBOL_API_PRIVATE = Symbol('mui.api_private');
9
10
  const isSyntheticEvent = event => {
10
11
  return event.isPropagationStopped !== undefined;
@@ -85,8 +86,11 @@ export function useGridApiInitialization(inputApiRef, props) {
85
86
  return;
86
87
  }
87
88
  const details = props.signature === GridSignature.DataGridPro || props.signature === GridSignature.DataGridPremium ? {
89
+ apiRef: getPublicApiRef(privateApiRef),
88
90
  api: privateApiRef.current.getPublicApi()
89
- } : {};
91
+ } : {
92
+ apiRef: getPublicApiRef(privateApiRef)
93
+ };
90
94
  privateApiRef.current.eventManager.emit(name, params, event, details);
91
95
  }, [privateApiRef, props.signature]);
92
96
  const subscribeEvent = React.useCallback((event, handler, options) => {
@@ -12,6 +12,7 @@ var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/form
12
12
  var React = _interopRequireWildcard(require("react"));
13
13
  var _utils = require("../utils");
14
14
  var _utils2 = require("../../utils/utils");
15
+ var _getPublicApiRef = require("../../utils/getPublicApiRef");
15
16
  const useGridStateInitialization = apiRef => {
16
17
  const controlStateMapRef = React.useRef({});
17
18
  const registerControlState = React.useCallback(controlStateItem => {
@@ -75,7 +76,8 @@ const useGridStateInitialization = apiRef => {
75
76
  if (controlState.propOnChange && hasPropChanged) {
76
77
  controlState.propOnChange(model, {
77
78
  reason,
78
- api: apiRef.current
79
+ api: apiRef.current,
80
+ apiRef: (0, _getPublicApiRef.getPublicApiRef)(apiRef)
79
81
  });
80
82
  }
81
83
  if (!ignoreSetState) {
@@ -5,6 +5,7 @@ import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
5
5
  import * as React from 'react';
6
6
  import { useGridApiMethod } from "../utils/index.mjs";
7
7
  import { isFunction } from "../../utils/utils.mjs";
8
+ import { getPublicApiRef } from "../../utils/getPublicApiRef.mjs";
8
9
  export const useGridStateInitialization = apiRef => {
9
10
  const controlStateMapRef = React.useRef({});
10
11
  const registerControlState = React.useCallback(controlStateItem => {
@@ -68,7 +69,8 @@ export const useGridStateInitialization = apiRef => {
68
69
  if (controlState.propOnChange && hasPropChanged) {
69
70
  controlState.propOnChange(model, {
70
71
  reason,
71
- api: apiRef.current
72
+ api: apiRef.current,
73
+ apiRef: getPublicApiRef(apiRef)
72
74
  });
73
75
  }
74
76
  if (!ignoreSetState) {
@@ -26,6 +26,7 @@ var _useGridVisibleRows = require("../utils/useGridVisibleRows");
26
26
  var _pagination = require("../features/pagination");
27
27
  var _gridFocusedVirtualCellSelector = require("../features/virtualization/gridFocusedVirtualCellSelector");
28
28
  var _rowSelection = require("../features/rowSelection");
29
+ var _gridColumnGroupsSelector = require("../features/columnGrouping/gridColumnGroupsSelector");
29
30
  var _dataGridPropsDefaultValues = require("../../constants/dataGridPropsDefaultValues");
30
31
  var _gridRowsUtils = require("../features/rows/gridRowsUtils");
31
32
  var _gridColumnsUtils = require("../features/columns/gridColumnsUtils");
@@ -66,6 +67,18 @@ function useGridVirtualizer() {
66
67
  listView
67
68
  } = rootProps;
68
69
  const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
70
+ // Convert visible row-header columns to their indexes once per column-model change. Each GridRow
71
+ // uses this ordered list to render those cells even when they fall outside its horizontal render
72
+ // context. This keeps the row-identifying cells available to assistive technology while scrolling.
73
+ const retainedColumnIndexes = React.useMemo(() => {
74
+ const indexes = [];
75
+ visibleColumns.forEach((column, index) => {
76
+ if (column.rowHeader) {
77
+ indexes.push(index);
78
+ }
79
+ });
80
+ return indexes;
81
+ }, [visibleColumns]);
69
82
  const pinnedRows = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
70
83
  const pinnedColumns = (0, _gridColumnsSelector.gridVisiblePinnedColumnDefinitionsSelector)(apiRef);
71
84
  const rowSelectionManager = (0, _useGridSelector.useGridSelector)(apiRef, _rowSelection.gridRowSelectionManagerSelector);
@@ -87,6 +100,8 @@ function useGridVirtualizer() {
87
100
  const groupHeaderHeight = Math.floor((rootProps.columnGroupHeaderHeight ?? rootProps.columnHeaderHeight) * density);
88
101
  const headerFilterHeight = Math.floor((rootProps.headerFilterHeight ?? rootProps.columnHeaderHeight) * density);
89
102
  const columnsTotalWidth = (0, _useGridSelector.useGridSelector)(apiRef, columnsTotalWidthSelector);
103
+ // `getTotalHeaderHeight` reads the group depth imperatively, subscribe so it re-renders when it changes.
104
+ (0, _utils.eslintUseValue)((0, _useGridSelector.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector));
90
105
  const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps);
91
106
  const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
92
107
  const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
@@ -216,6 +231,7 @@ function useGridVirtualizer() {
216
231
  rowHeight: params.baseRowHeight,
217
232
  pinnedColumns: pinnedColumns,
218
233
  visibleColumns: visibleColumns,
234
+ retainedColumnIndexes: retainedColumnIndexes,
219
235
  firstColumnIndex: params.firstColumnIndex,
220
236
  lastColumnIndex: params.lastColumnIndex,
221
237
  focusedColumnIndex: params.focusedColumnIndex,
@@ -225,7 +241,7 @@ function useGridVirtualizer() {
225
241
  showBottomBorder: params.showBottomBorder,
226
242
  scrollbarWidth: verticalScrollbarWidth,
227
243
  gridHasFiller: hasFiller
228
- }, rowSlotProps), params.id), [columnsTotalWidth, hasFiller, isRowSelected, pinnedColumns, RowSlot, rowSlotProps, verticalScrollbarWidth, visibleColumns]),
244
+ }, rowSlotProps), params.id), [columnsTotalWidth, hasFiller, isRowSelected, pinnedColumns, retainedColumnIndexes, RowSlot, rowSlotProps, verticalScrollbarWidth, visibleColumns]),
229
245
  renderInfiniteLoadingTrigger: React.useCallback(id => apiRef.current.getInfiniteLoadingTriggerElement?.({
230
246
  lastRowId: id
231
247
  }), [apiRef])
@@ -18,6 +18,7 @@ import { useGridVisibleRows } from "../utils/useGridVisibleRows.mjs";
18
18
  import { gridPaginationSelector } from "../features/pagination/index.mjs";
19
19
  import { gridFocusedVirtualCellSelector } from "../features/virtualization/gridFocusedVirtualCellSelector.mjs";
20
20
  import { gridRowSelectionManagerSelector } from "../features/rowSelection/index.mjs";
21
+ import { gridColumnGroupsHeaderMaxDepthSelector } from "../features/columnGrouping/gridColumnGroupsSelector.mjs";
21
22
  import { DATA_GRID_PROPS_DEFAULT_VALUES } from "../../constants/dataGridPropsDefaultValues.mjs";
22
23
  import { getValidRowHeight, minimalContentHeight, rowHeightWarning } from "../features/rows/gridRowsUtils.mjs";
23
24
  import { getTotalHeaderHeight } from "../features/columns/gridColumnsUtils.mjs";
@@ -58,6 +59,18 @@ export function useGridVirtualizer() {
58
59
  listView
59
60
  } = rootProps;
60
61
  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
62
+ // Convert visible row-header columns to their indexes once per column-model change. Each GridRow
63
+ // uses this ordered list to render those cells even when they fall outside its horizontal render
64
+ // context. This keeps the row-identifying cells available to assistive technology while scrolling.
65
+ const retainedColumnIndexes = React.useMemo(() => {
66
+ const indexes = [];
67
+ visibleColumns.forEach((column, index) => {
68
+ if (column.rowHeader) {
69
+ indexes.push(index);
70
+ }
71
+ });
72
+ return indexes;
73
+ }, [visibleColumns]);
61
74
  const pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);
62
75
  const pinnedColumns = gridVisiblePinnedColumnDefinitionsSelector(apiRef);
63
76
  const rowSelectionManager = useGridSelector(apiRef, gridRowSelectionManagerSelector);
@@ -79,6 +92,8 @@ export function useGridVirtualizer() {
79
92
  const groupHeaderHeight = Math.floor((rootProps.columnGroupHeaderHeight ?? rootProps.columnHeaderHeight) * density);
80
93
  const headerFilterHeight = Math.floor((rootProps.headerFilterHeight ?? rootProps.columnHeaderHeight) * density);
81
94
  const columnsTotalWidth = useGridSelector(apiRef, columnsTotalWidthSelector);
95
+ // `getTotalHeaderHeight` reads the group depth imperatively, subscribe so it re-renders when it changes.
96
+ eslintUseValue(useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector));
82
97
  const headersTotalHeight = getTotalHeaderHeight(apiRef, rootProps);
83
98
  const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
84
99
  const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
@@ -208,6 +223,7 @@ export function useGridVirtualizer() {
208
223
  rowHeight: params.baseRowHeight,
209
224
  pinnedColumns: pinnedColumns,
210
225
  visibleColumns: visibleColumns,
226
+ retainedColumnIndexes: retainedColumnIndexes,
211
227
  firstColumnIndex: params.firstColumnIndex,
212
228
  lastColumnIndex: params.lastColumnIndex,
213
229
  focusedColumnIndex: params.focusedColumnIndex,
@@ -217,7 +233,7 @@ export function useGridVirtualizer() {
217
233
  showBottomBorder: params.showBottomBorder,
218
234
  scrollbarWidth: verticalScrollbarWidth,
219
235
  gridHasFiller: hasFiller
220
- }, rowSlotProps), params.id), [columnsTotalWidth, hasFiller, isRowSelected, pinnedColumns, RowSlot, rowSlotProps, verticalScrollbarWidth, visibleColumns]),
236
+ }, rowSlotProps), params.id), [columnsTotalWidth, hasFiller, isRowSelected, pinnedColumns, retainedColumnIndexes, RowSlot, rowSlotProps, verticalScrollbarWidth, visibleColumns]),
221
237
  renderInfiniteLoadingTrigger: React.useCallback(id => apiRef.current.getInfiniteLoadingTriggerElement?.({
222
238
  lastRowId: id
223
239
  }), [apiRef])
@@ -568,6 +568,11 @@ const useGridColumnResize = (apiRef, props) => {
568
568
  if (!props.disableVirtualization && options.disableColumnVirtualization) {
569
569
  apiRef.current.unstable_setColumnVirtualization(false);
570
570
  await columnVirtualizationDisabled();
571
+
572
+ // The grid may have unmounted while awaiting, which nulls the root element ref.
573
+ if (!apiRef.current.rootElementRef?.current) {
574
+ return;
575
+ }
571
576
  }
572
577
  const widthByField = extractColumnWidths(apiRef, options, columns);
573
578
  const newColumns = columns.map(column => (0, _extends2.default)({}, column, {
@@ -560,6 +560,11 @@ export const useGridColumnResize = (apiRef, props) => {
560
560
  if (!props.disableVirtualization && options.disableColumnVirtualization) {
561
561
  apiRef.current.unstable_setColumnVirtualization(false);
562
562
  await columnVirtualizationDisabled();
563
+
564
+ // The grid may have unmounted while awaiting, which nulls the root element ref.
565
+ if (!apiRef.current.rootElementRef?.current) {
566
+ return;
567
+ }
563
568
  }
564
569
  const widthByField = extractColumnWidths(apiRef, options, columns);
565
570
  const newColumns = columns.map(column => _extends({}, column, {
@@ -67,4 +67,4 @@ export declare function getFirstNonSpannedColumnToRender({
67
67
  lastRowToRender: number;
68
68
  visibleRows: GridRowEntry[];
69
69
  }): number;
70
- export declare function getTotalHeaderHeight(apiRef: RefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'listView' | 'columnGroupHeaderHeight'>): number;
70
+ export declare function getTotalHeaderHeight(apiRef: RefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'listView' | 'columnGroupHeaderHeight' | 'signature' | 'headerFilters'>): number;
@@ -67,4 +67,4 @@ export declare function getFirstNonSpannedColumnToRender({
67
67
  lastRowToRender: number;
68
68
  visibleRows: GridRowEntry[];
69
69
  }): number;
70
- export declare function getTotalHeaderHeight(apiRef: RefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'listView' | 'columnGroupHeaderHeight'>): number;
70
+ export declare function getTotalHeaderHeight(apiRef: RefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'listView' | 'columnGroupHeaderHeight' | 'signature' | 'headerFilters'>): number;
@@ -19,7 +19,6 @@ var _signature = require("../../../constants/signature");
19
19
  var _gridColumnsSelector = require("./gridColumnsSelector");
20
20
  var _utils = require("../../../utils/utils");
21
21
  var _densitySelector = require("../density/densitySelector");
22
- var _gridHeaderFilteringSelectors = require("../headerFiltering/gridHeaderFilteringSelectors");
23
22
  var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
24
23
  const COLUMNS_DIMENSION_PROPERTIES = exports.COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
25
24
  /**
@@ -360,7 +359,8 @@ function getTotalHeaderHeight(apiRef, props) {
360
359
  }
361
360
  const densityFactor = (0, _densitySelector.gridDensityFactorSelector)(apiRef);
362
361
  const maxDepth = (0, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector)(apiRef);
363
- const isHeaderFilteringEnabled = (0, _gridHeaderFilteringSelectors.gridHeaderFilteringEnabledSelector)(apiRef);
362
+ // Not `gridHeaderFilteringEnabledSelector`: that state is synced in an effect, so it lags one render behind `props.headerFilters`.
363
+ const isHeaderFilteringEnabled = props.signature !== 'DataGrid' && (props.headerFilters ?? false);
364
364
  const columnHeadersHeight = Math.floor(props.columnHeaderHeight * densityFactor);
365
365
  const columnGroupHeadersHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);
366
366
  const filterHeadersHeight = isHeaderFilteringEnabled ? Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor) : 0;