@mui/x-data-grid 8.0.0-alpha.7 → 8.0.0-alpha.8

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 (322) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/DataGrid/DataGrid.js +4 -5
  3. package/DataGrid/useDataGridComponent.js +1 -1
  4. package/components/GridHeaders.js +2 -2
  5. package/components/GridRow.d.ts +5 -9
  6. package/components/GridRow.js +26 -78
  7. package/components/GridSkeletonLoadingOverlay.js +18 -18
  8. package/components/cell/GridCell.d.ts +9 -16
  9. package/components/cell/GridCell.js +17 -35
  10. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -5
  11. package/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  12. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -5
  13. package/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  14. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  15. package/components/containers/GridRoot.d.ts +2 -2
  16. package/components/containers/GridRoot.js +14 -6
  17. package/components/containers/GridRootStyles.js +7 -0
  18. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -0
  19. package/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  20. package/components/panel/filterPanel/GridFilterInputDate.d.ts +2 -1
  21. package/components/panel/filterPanel/GridFilterInputDate.js +32 -29
  22. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  23. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  24. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -0
  25. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  26. package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -0
  27. package/components/panel/filterPanel/GridFilterInputValue.js +34 -28
  28. package/components/panel/filterPanel/GridFilterInputValueProps.d.ts +1 -1
  29. package/components/virtualization/GridVirtualScrollbar.js +11 -12
  30. package/components/virtualization/GridVirtualScroller.js +4 -4
  31. package/constants/gridClasses.d.ts +12 -0
  32. package/constants/gridClasses.js +1 -1
  33. package/constants/localeTextConstants.js +1 -0
  34. package/context/GridContextProvider.d.ts +1 -1
  35. package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
  36. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  37. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +5 -7
  38. package/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  39. package/hooks/features/columnMenu/useGridColumnMenu.d.ts +1 -1
  40. package/hooks/features/columns/gridColumnsUtils.d.ts +3 -3
  41. package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
  42. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  43. package/hooks/features/density/useGridDensity.d.ts +1 -1
  44. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  45. package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
  46. package/hooks/features/editing/useGridCellEditing.js +1 -1
  47. package/hooks/features/editing/useGridEditing.d.ts +1 -1
  48. package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
  49. package/hooks/features/editing/useGridRowEditing.js +1 -1
  50. package/hooks/features/events/useGridEvents.d.ts +1 -1
  51. package/hooks/features/export/serializers/csvSerializer.d.ts +1 -1
  52. package/hooks/features/export/useGridCsvExport.d.ts +1 -1
  53. package/hooks/features/export/useGridPrintExport.d.ts +1 -1
  54. package/hooks/features/export/utils.d.ts +1 -1
  55. package/hooks/features/filter/gridFilterSelector.d.ts +1 -1
  56. package/hooks/features/filter/gridFilterSelector.js +6 -1
  57. package/hooks/features/filter/gridFilterUtils.d.ts +6 -6
  58. package/hooks/features/filter/gridFilterUtils.js +3 -3
  59. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  60. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  61. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
  62. package/hooks/features/keyboardNavigation/utils.d.ts +2 -2
  63. package/hooks/features/listView/useGridListView.d.ts +1 -1
  64. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +3 -0
  65. package/hooks/features/pagination/gridPaginationSelector.d.ts +21 -2
  66. package/hooks/features/pagination/gridPaginationSelector.js +39 -1
  67. package/hooks/features/pagination/useGridPagination.d.ts +2 -2
  68. package/hooks/features/pagination/useGridPagination.js +5 -3
  69. package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
  70. package/hooks/features/pagination/useGridPaginationModel.d.ts +1 -1
  71. package/hooks/features/pagination/useGridPaginationModel.js +23 -1
  72. package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
  73. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
  74. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  75. package/hooks/features/rowSelection/utils.d.ts +2 -2
  76. package/hooks/features/rows/gridRowSpanningUtils.d.ts +1 -1
  77. package/hooks/features/rows/gridRowsSelector.js +1 -1
  78. package/hooks/features/rows/gridRowsUtils.d.ts +3 -3
  79. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  80. package/hooks/features/rows/useGridRowSpanning.d.ts +1 -1
  81. package/hooks/features/rows/useGridRows.d.ts +1 -1
  82. package/hooks/features/rows/useGridRows.js +2 -2
  83. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  84. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  85. package/hooks/features/sorting/gridSortingUtils.d.ts +2 -2
  86. package/hooks/features/sorting/gridSortingUtils.js +2 -2
  87. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  88. package/hooks/features/statePersistence/useGridStatePersistence.d.ts +1 -1
  89. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.d.ts +6 -0
  90. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  91. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
  92. package/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  93. package/hooks/features/virtualization/useGridVirtualization.d.ts +1 -1
  94. package/hooks/utils/useGridApiContext.d.ts +1 -1
  95. package/hooks/utils/useGridApiEventHandler.d.ts +3 -3
  96. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  97. package/hooks/utils/useGridPrivateApiContext.d.ts +1 -1
  98. package/hooks/utils/useGridSelector.d.ts +1 -1
  99. package/hooks/utils/useGridVisibleRows.d.ts +7 -5
  100. package/hooks/utils/useGridVisibleRows.js +5 -28
  101. package/index.js +1 -1
  102. package/internals/constants.d.ts +6 -0
  103. package/internals/constants.js +8 -1
  104. package/internals/index.d.ts +1 -0
  105. package/internals/index.js +1 -0
  106. package/internals/utils/attachPinnedStyle.d.ts +2 -0
  107. package/internals/utils/attachPinnedStyle.js +9 -0
  108. package/internals/utils/getPinnedCellOffset.d.ts +3 -3
  109. package/internals/utils/getPinnedCellOffset.js +6 -7
  110. package/internals/utils/index.d.ts +1 -0
  111. package/internals/utils/index.js +2 -1
  112. package/locales/arSD.js +2 -0
  113. package/locales/beBY.js +1 -0
  114. package/locales/bgBG.js +2 -0
  115. package/locales/csCZ.js +2 -0
  116. package/locales/daDK.js +2 -0
  117. package/locales/deDE.js +2 -0
  118. package/locales/elGR.js +2 -0
  119. package/locales/esES.js +2 -0
  120. package/locales/faIR.js +2 -0
  121. package/locales/fiFI.js +2 -0
  122. package/locales/frFR.js +2 -0
  123. package/locales/heIL.js +2 -0
  124. package/locales/hrHR.js +2 -0
  125. package/locales/huHU.js +2 -0
  126. package/locales/isIS.js +2 -0
  127. package/locales/itIT.js +2 -0
  128. package/locales/jaJP.js +2 -0
  129. package/locales/koKR.js +2 -0
  130. package/locales/nbNO.js +2 -0
  131. package/locales/nlNL.js +2 -0
  132. package/locales/nnNO.js +2 -0
  133. package/locales/plPL.js +2 -0
  134. package/locales/ptBR.js +2 -0
  135. package/locales/ptPT.js +2 -0
  136. package/locales/roRO.js +2 -0
  137. package/locales/ruRU.js +2 -0
  138. package/locales/skSK.js +2 -0
  139. package/locales/svSE.js +2 -0
  140. package/locales/trTR.js +2 -0
  141. package/locales/ukUA.js +2 -0
  142. package/locales/urPK.js +2 -0
  143. package/locales/viVN.js +2 -0
  144. package/locales/zhCN.js +2 -0
  145. package/locales/zhHK.js +2 -0
  146. package/locales/zhTW.js +2 -0
  147. package/material/index.js +2 -1
  148. package/models/api/gridLocaleTextApi.d.ts +1 -0
  149. package/models/colDef/gridColDef.d.ts +8 -8
  150. package/models/events/gridEventLookup.d.ts +6 -1
  151. package/models/gridExport.d.ts +1 -1
  152. package/models/gridFilterOperator.d.ts +1 -1
  153. package/models/gridIconSlotsComponent.d.ts +5 -0
  154. package/models/gridStateCommunity.d.ts +4 -0
  155. package/modern/DataGrid/DataGrid.js +4 -5
  156. package/modern/DataGrid/useDataGridComponent.js +1 -1
  157. package/modern/components/GridHeaders.js +2 -2
  158. package/modern/components/GridRow.js +26 -78
  159. package/modern/components/GridSkeletonLoadingOverlay.js +18 -18
  160. package/modern/components/cell/GridCell.js +17 -35
  161. package/modern/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  162. package/modern/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  163. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  164. package/modern/components/containers/GridRoot.js +14 -6
  165. package/modern/components/containers/GridRootStyles.js +7 -0
  166. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  167. package/modern/components/panel/filterPanel/GridFilterInputDate.js +32 -29
  168. package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  169. package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  170. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  171. package/modern/components/panel/filterPanel/GridFilterInputValue.js +34 -28
  172. package/modern/components/virtualization/GridVirtualScrollbar.js +11 -12
  173. package/modern/components/virtualization/GridVirtualScroller.js +4 -4
  174. package/modern/constants/gridClasses.js +1 -1
  175. package/modern/constants/localeTextConstants.js +1 -0
  176. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  177. package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
  178. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  179. package/modern/hooks/features/filter/gridFilterSelector.js +6 -1
  180. package/modern/hooks/features/filter/gridFilterUtils.js +3 -3
  181. package/modern/hooks/features/pagination/gridPaginationSelector.js +39 -1
  182. package/modern/hooks/features/pagination/useGridPagination.js +5 -3
  183. package/modern/hooks/features/pagination/useGridPaginationModel.js +23 -1
  184. package/modern/hooks/features/rows/gridRowsSelector.js +1 -1
  185. package/modern/hooks/features/rows/useGridRows.js +2 -2
  186. package/modern/hooks/features/sorting/gridSortingUtils.js +2 -2
  187. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  188. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  189. package/modern/hooks/utils/useGridVisibleRows.js +5 -28
  190. package/modern/index.js +1 -1
  191. package/modern/internals/constants.js +8 -1
  192. package/modern/internals/index.js +1 -0
  193. package/modern/internals/utils/attachPinnedStyle.js +9 -0
  194. package/modern/internals/utils/getPinnedCellOffset.js +6 -7
  195. package/modern/internals/utils/index.js +2 -1
  196. package/modern/locales/arSD.js +2 -0
  197. package/modern/locales/beBY.js +1 -0
  198. package/modern/locales/bgBG.js +2 -0
  199. package/modern/locales/csCZ.js +2 -0
  200. package/modern/locales/daDK.js +2 -0
  201. package/modern/locales/deDE.js +2 -0
  202. package/modern/locales/elGR.js +2 -0
  203. package/modern/locales/esES.js +2 -0
  204. package/modern/locales/faIR.js +2 -0
  205. package/modern/locales/fiFI.js +2 -0
  206. package/modern/locales/frFR.js +2 -0
  207. package/modern/locales/heIL.js +2 -0
  208. package/modern/locales/hrHR.js +2 -0
  209. package/modern/locales/huHU.js +2 -0
  210. package/modern/locales/isIS.js +2 -0
  211. package/modern/locales/itIT.js +2 -0
  212. package/modern/locales/jaJP.js +2 -0
  213. package/modern/locales/koKR.js +2 -0
  214. package/modern/locales/nbNO.js +2 -0
  215. package/modern/locales/nlNL.js +2 -0
  216. package/modern/locales/nnNO.js +2 -0
  217. package/modern/locales/plPL.js +2 -0
  218. package/modern/locales/ptBR.js +2 -0
  219. package/modern/locales/ptPT.js +2 -0
  220. package/modern/locales/roRO.js +2 -0
  221. package/modern/locales/ruRU.js +2 -0
  222. package/modern/locales/skSK.js +2 -0
  223. package/modern/locales/svSE.js +2 -0
  224. package/modern/locales/trTR.js +2 -0
  225. package/modern/locales/ukUA.js +2 -0
  226. package/modern/locales/urPK.js +2 -0
  227. package/modern/locales/viVN.js +2 -0
  228. package/modern/locales/zhCN.js +2 -0
  229. package/modern/locales/zhHK.js +2 -0
  230. package/modern/locales/zhTW.js +2 -0
  231. package/modern/material/index.js +2 -1
  232. package/modern/utils/cellBorderUtils.js +5 -5
  233. package/modern/utils/domUtils.js +7 -2
  234. package/modern/utils/rtlFlipSide.js +22 -0
  235. package/node/DataGrid/DataGrid.js +2 -3
  236. package/node/DataGrid/useDataGridComponent.js +1 -1
  237. package/node/components/GridHeaders.js +2 -2
  238. package/node/components/GridRow.js +25 -77
  239. package/node/components/GridSkeletonLoadingOverlay.js +17 -17
  240. package/node/components/cell/GridCell.js +18 -36
  241. package/node/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  242. package/node/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  243. package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  244. package/node/components/containers/GridRoot.js +14 -6
  245. package/node/components/containers/GridRootStyles.js +7 -0
  246. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  247. package/node/components/panel/filterPanel/GridFilterInputDate.js +31 -28
  248. package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  249. package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  250. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  251. package/node/components/panel/filterPanel/GridFilterInputValue.js +33 -27
  252. package/node/components/virtualization/GridVirtualScrollbar.js +11 -12
  253. package/node/components/virtualization/GridVirtualScroller.js +4 -4
  254. package/node/constants/gridClasses.js +1 -1
  255. package/node/constants/localeTextConstants.js +1 -0
  256. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +32 -74
  257. package/node/hooks/features/editing/useGridCellEditing.js +1 -1
  258. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  259. package/node/hooks/features/filter/gridFilterSelector.js +6 -1
  260. package/node/hooks/features/filter/gridFilterUtils.js +3 -3
  261. package/node/hooks/features/pagination/gridPaginationSelector.js +41 -3
  262. package/node/hooks/features/pagination/useGridPagination.js +5 -3
  263. package/node/hooks/features/pagination/useGridPaginationModel.js +23 -1
  264. package/node/hooks/features/rows/gridRowsSelector.js +1 -1
  265. package/node/hooks/features/rows/useGridRows.js +1 -1
  266. package/node/hooks/features/sorting/gridSortingUtils.js +2 -2
  267. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +49 -0
  268. package/node/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  269. package/node/hooks/utils/useGridVisibleRows.js +3 -28
  270. package/node/index.js +1 -1
  271. package/node/internals/constants.js +9 -2
  272. package/node/internals/index.js +12 -0
  273. package/node/internals/utils/attachPinnedStyle.js +15 -0
  274. package/node/internals/utils/getPinnedCellOffset.js +6 -7
  275. package/node/internals/utils/index.js +11 -0
  276. package/node/locales/arSD.js +2 -0
  277. package/node/locales/beBY.js +1 -0
  278. package/node/locales/bgBG.js +2 -0
  279. package/node/locales/csCZ.js +2 -0
  280. package/node/locales/daDK.js +2 -0
  281. package/node/locales/deDE.js +2 -0
  282. package/node/locales/elGR.js +2 -0
  283. package/node/locales/esES.js +2 -0
  284. package/node/locales/faIR.js +2 -0
  285. package/node/locales/fiFI.js +2 -0
  286. package/node/locales/frFR.js +2 -0
  287. package/node/locales/heIL.js +2 -0
  288. package/node/locales/hrHR.js +2 -0
  289. package/node/locales/huHU.js +2 -0
  290. package/node/locales/isIS.js +2 -0
  291. package/node/locales/itIT.js +2 -0
  292. package/node/locales/jaJP.js +2 -0
  293. package/node/locales/koKR.js +2 -0
  294. package/node/locales/nbNO.js +2 -0
  295. package/node/locales/nlNL.js +2 -0
  296. package/node/locales/nnNO.js +2 -0
  297. package/node/locales/plPL.js +2 -0
  298. package/node/locales/ptBR.js +2 -0
  299. package/node/locales/ptPT.js +2 -0
  300. package/node/locales/roRO.js +2 -0
  301. package/node/locales/ruRU.js +2 -0
  302. package/node/locales/skSK.js +2 -0
  303. package/node/locales/svSE.js +2 -0
  304. package/node/locales/trTR.js +2 -0
  305. package/node/locales/ukUA.js +2 -0
  306. package/node/locales/urPK.js +2 -0
  307. package/node/locales/viVN.js +2 -0
  308. package/node/locales/zhCN.js +2 -0
  309. package/node/locales/zhHK.js +2 -0
  310. package/node/locales/zhTW.js +2 -0
  311. package/node/material/index.js +2 -1
  312. package/node/utils/cellBorderUtils.js +5 -5
  313. package/node/utils/domUtils.js +7 -2
  314. package/node/utils/rtlFlipSide.js +29 -0
  315. package/package.json +2 -2
  316. package/utils/cellBorderUtils.d.ts +3 -3
  317. package/utils/cellBorderUtils.js +5 -5
  318. package/utils/createSelector.d.ts +1 -1
  319. package/utils/domUtils.js +7 -2
  320. package/utils/getPublicApiRef.d.ts +1 -1
  321. package/utils/rtlFlipSide.d.ts +2 -0
  322. package/utils/rtlFlipSide.js +22 -0
@@ -1,10 +1,9 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "placeholder", "tabIndex", "label", "variant", "isFilterActive", "clearButton", "InputLabelProps"];
3
+ const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "placeholder", "tabIndex", "label", "variant", "isFilterActive", "clearButton", "headerFilterMenu", "InputProps", "InputLabelProps", "sx"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { unstable_useId as useId } from '@mui/utils';
7
- import { styled } from '@mui/material/styles';
8
7
  import { useGridRootProps } from "../../../hooks/utils/useGridRootProps.js";
9
8
  import { getValueFromValueOptions, getValueOptions, isSingleSelectColDef } from "./filterPanelUtils.js";
10
9
  import { createElement as _createElement } from "react";
@@ -31,14 +30,6 @@ const renderSingleSelectOptions = ({
31
30
  }), label);
32
31
  });
33
32
  };
34
- const SingleSelectOperatorContainer = styled('div')({
35
- display: 'flex',
36
- alignItems: 'flex-end',
37
- width: '100%',
38
- [`& button`]: {
39
- margin: 'auto 0px 5px 5px'
40
- }
41
- });
42
33
  function GridFilterInputSingleSelect(props) {
43
34
  const {
44
35
  item,
@@ -49,8 +40,11 @@ function GridFilterInputSingleSelect(props) {
49
40
  placeholder,
50
41
  tabIndex,
51
42
  label: labelProp,
52
- variant = 'standard',
53
- clearButton
43
+ variant = 'outlined',
44
+ clearButton,
45
+ headerFilterMenu,
46
+ InputProps,
47
+ sx
54
48
  } = props,
55
49
  others = _objectWithoutPropertiesLoose(props, _excluded);
56
50
  const filterValue = item.value ?? '';
@@ -83,9 +77,10 @@ function GridFilterInputSingleSelect(props) {
83
77
  return null;
84
78
  }
85
79
  const label = labelProp ?? apiRef.current.getLocaleText('filterPanelInputLabel');
86
- return /*#__PURE__*/_jsxs(SingleSelectOperatorContainer, {
80
+ return /*#__PURE__*/_jsxs(React.Fragment, {
87
81
  children: [/*#__PURE__*/_jsxs(rootProps.slots.baseFormControl, {
88
82
  fullWidth: true,
83
+ sx: sx,
89
84
  children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputLabel, _extends({}, rootProps.slotProps?.baseInputLabel, {
90
85
  id: labelId,
91
86
  htmlFor: id,
@@ -100,14 +95,14 @@ function GridFilterInputSingleSelect(props) {
100
95
  onChange: onFilterChange,
101
96
  variant: variant,
102
97
  type: type || 'text',
103
- inputProps: {
98
+ inputProps: _extends({
104
99
  tabIndex,
105
100
  ref: focusElementRef,
106
101
  placeholder: placeholder ?? apiRef.current.getLocaleText('filterPanelInputPlaceholder')
107
- },
102
+ }, InputProps?.inputProps),
108
103
  native: isSelectNative,
109
104
  notched: variant === 'outlined' ? true : undefined
110
- }, others /* FIXME: typing error */, rootProps.slotProps?.baseSelect, {
105
+ }, rootProps.slotProps?.baseSelect, others /* FIXME: typing error */, {
111
106
  children: renderSingleSelectOptions({
112
107
  column: resolvedColumn,
113
108
  OptionComponent: rootProps.slots.baseSelectOption,
@@ -117,7 +112,7 @@ function GridFilterInputSingleSelect(props) {
117
112
  baseSelectOptionProps: rootProps.slotProps?.baseSelectOption
118
113
  })
119
114
  }))]
120
- }), clearButton]
115
+ }), headerFilterMenu, clearButton]
121
116
  });
122
117
  }
123
118
  process.env.NODE_ENV !== "production" ? GridFilterInputSingleSelect.propTypes = {
@@ -131,6 +126,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputSingleSelect.propTypes =
131
126
  applyValue: PropTypes.func.isRequired,
132
127
  clearButton: PropTypes.node,
133
128
  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),
129
+ headerFilterMenu: PropTypes.node,
134
130
  /**
135
131
  * It is `true` if the filter either has a value or an operator with no value
136
132
  * required is selected (for example `isEmpty`)
@@ -3,6 +3,7 @@ import { TextFieldProps } from '@mui/material/TextField';
3
3
  import { GridFilterInputValueProps } from './GridFilterInputValueProps';
4
4
  export type GridTypeFilterInputValueProps = GridFilterInputValueProps & TextFieldProps & {
5
5
  type?: 'text' | 'number' | 'date' | 'datetime-local';
6
+ headerFilterMenu?: React.ReactNode;
6
7
  clearButton?: React.ReactNode | null;
7
8
  /**
8
9
  * It is `true` if the filter either has a value or an operator with no value
@@ -1,12 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "tabIndex", "disabled", "isFilterActive", "clearButton", "InputProps", "variant"];
3
+ const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "tabIndex", "disabled", "isFilterActive", "clearButton", "headerFilterMenu", "InputProps", "variant"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { unstable_useId as useId } from '@mui/utils';
7
7
  import { useTimeout } from "../../../hooks/utils/useTimeout.js";
8
8
  import { useGridRootProps } from "../../../hooks/utils/useGridRootProps.js";
9
- import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  function GridFilterInputValue(props) {
11
11
  const {
12
12
  item,
@@ -17,8 +17,9 @@ function GridFilterInputValue(props) {
17
17
  tabIndex,
18
18
  disabled,
19
19
  clearButton,
20
+ headerFilterMenu,
20
21
  InputProps,
21
- variant = 'standard'
22
+ variant = 'outlined'
22
23
  } = props,
23
24
  others = _objectWithoutPropertiesLoose(props, _excluded);
24
25
  const filterTimeout = useTimeout();
@@ -45,31 +46,35 @@ function GridFilterInputValue(props) {
45
46
  setFilterValueState(sanitizeFilterItemValue(item.value));
46
47
  }
47
48
  }, [id, item]);
48
- return /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({
49
- id: id,
50
- label: apiRef.current.getLocaleText('filterPanelInputLabel'),
51
- placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),
52
- value: filterValueState ?? '',
53
- onChange: onFilterChange,
54
- variant: variant,
55
- type: type || 'text',
56
- InputProps: _extends({}, applying || clearButton ? {
57
- endAdornment: applying ? /*#__PURE__*/_jsx(rootProps.slots.loadIcon, {
58
- fontSize: "small",
59
- color: "action"
60
- }) : clearButton
61
- } : {}, {
62
- disabled
63
- }, InputProps, {
64
- inputProps: _extends({
65
- tabIndex
66
- }, InputProps?.inputProps)
67
- }),
68
- InputLabelProps: {
69
- shrink: true
70
- },
71
- inputRef: focusElementRef
72
- }, others, rootProps.slotProps?.baseTextField));
49
+ return /*#__PURE__*/_jsxs(React.Fragment, {
50
+ children: [/*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({
51
+ id: id,
52
+ label: apiRef.current.getLocaleText('filterPanelInputLabel'),
53
+ placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),
54
+ value: filterValueState ?? '',
55
+ onChange: onFilterChange,
56
+ variant: variant,
57
+ type: type || 'text',
58
+ disabled: disabled,
59
+ InputProps: _extends({
60
+ endAdornment: applying ? /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
61
+ position: "end",
62
+ children: /*#__PURE__*/_jsx(rootProps.slots.loadIcon, {
63
+ fontSize: "small",
64
+ color: "action"
65
+ })
66
+ }) : null
67
+ }, InputProps, {
68
+ inputProps: _extends({
69
+ tabIndex
70
+ }, InputProps?.inputProps)
71
+ }),
72
+ InputLabelProps: {
73
+ shrink: true
74
+ },
75
+ inputRef: focusElementRef
76
+ }, rootProps.slotProps?.baseTextField, others)), headerFilterMenu, clearButton]
77
+ });
73
78
  }
74
79
  function sanitizeFilterItemValue(value) {
75
80
  if (value == null || value === '') {
@@ -88,6 +93,7 @@ process.env.NODE_ENV !== "production" ? GridFilterInputValue.propTypes = {
88
93
  applyValue: PropTypes.func.isRequired,
89
94
  clearButton: PropTypes.node,
90
95
  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),
96
+ headerFilterMenu: PropTypes.node,
91
97
  /**
92
98
  * It is `true` if the filter either has a value or an operator with no value
93
99
  * required is selected (for example `isEmpty`)
@@ -6,6 +6,6 @@ import type { GridApiCommunity } from '../../../models/api/gridApiCommunity';
6
6
  export type GridFilterInputValueProps<Api extends GridApiCommon = GridApiCommunity> = {
7
7
  item: GridFilterItem;
8
8
  applyValue: (value: GridFilterItem) => void;
9
- apiRef: React.MutableRefObject<Api>;
9
+ apiRef: React.RefObject<Api>;
10
10
  focusElementRef?: React.Ref<any>;
11
11
  } & Pick<TextFieldProps, 'color' | 'error' | 'helperText' | 'size' | 'variant'>;
@@ -22,6 +22,9 @@ const Scrollbar = styled('div')({
22
22
  position: 'absolute',
23
23
  display: 'inline-block',
24
24
  zIndex: 6,
25
+ '&:hover': {
26
+ zIndex: 7
27
+ },
25
28
  // In macOS Safari and Gnome Web, scrollbars are overlaid and don't affect the layout. So we consider
26
29
  // their size to be 0px throughout all the calculations, but the floating scrollbar container does need
27
30
  // to appear and have a real size. We set it to 14px because it seems like an acceptable value and we
@@ -103,19 +106,15 @@ const GridVirtualScrollbar = forwardRef(function GridVirtualScrollbar(props, ref
103
106
  useOnMount(() => {
104
107
  const scroller = apiRef.current.virtualScrollerRef.current;
105
108
  const scrollbar = scrollbarRef.current;
106
- scroller.addEventListener('scroll', onScrollerScroll, {
107
- capture: true
108
- });
109
- scrollbar.addEventListener('scroll', onScrollbarScroll, {
110
- capture: true
111
- });
109
+ const options = {
110
+ capture: true,
111
+ passive: true
112
+ };
113
+ scroller.addEventListener('scroll', onScrollerScroll, options);
114
+ scrollbar.addEventListener('scroll', onScrollbarScroll, options);
112
115
  return () => {
113
- scroller.removeEventListener('scroll', onScrollerScroll, {
114
- capture: true
115
- });
116
- scrollbar.removeEventListener('scroll', onScrollbarScroll, {
117
- capture: true
118
- });
116
+ scroller.removeEventListener('scroll', onScrollerScroll, options);
117
+ scrollbar.removeEventListener('scroll', onScrollbarScroll, options);
119
118
  };
120
119
  });
121
120
  React.useEffect(() => {
@@ -100,11 +100,11 @@ function GridVirtualScroller(props) {
100
100
  virtualScroller: virtualScroller
101
101
  })
102
102
  })]
103
- })), dimensions.hasScrollY && /*#__PURE__*/_jsx(Scrollbar, _extends({
104
- position: "vertical"
105
- }, getScrollbarVerticalProps())), dimensions.hasScrollX && !rootProps.unstable_listView && /*#__PURE__*/_jsx(Scrollbar, _extends({
103
+ })), dimensions.hasScrollX && !rootProps.unstable_listView && /*#__PURE__*/_jsx(Scrollbar, _extends({
106
104
  position: "horizontal"
107
- }, getScrollbarHorizontalProps())), props.children]
105
+ }, getScrollbarHorizontalProps())), dimensions.hasScrollY && /*#__PURE__*/_jsx(Scrollbar, _extends({
106
+ position: "vertical"
107
+ }, getScrollbarVerticalProps())), props.children]
108
108
  }));
109
109
  }
110
110
  export { GridVirtualScroller };
@@ -168,6 +168,14 @@ export interface GridClasses {
168
168
  * @ignore - do not document.
169
169
  */
170
170
  'columnHeader--siblingFocused': string;
171
+ /**
172
+ * Styles applied to the header filter input element.
173
+ */
174
+ columnHeaderFilterInput: string;
175
+ /**
176
+ * Styles applied to the header filter operator label element.
177
+ */
178
+ columnHeaderFilterOperatorLabel: string;
171
179
  /**
172
180
  * Styles applied to the header checkbox cell element.
173
181
  */
@@ -200,6 +208,10 @@ export interface GridClasses {
200
208
  * Styles applied to the empty column group header cell.
201
209
  */
202
210
  'columnHeader--emptyGroup': string;
211
+ /**
212
+ * Styles applied to the header filter cell.
213
+ */
214
+ 'columnHeader--filter': string;
203
215
  /**
204
216
  * Styles applied to the column headers.
205
217
  */
@@ -2,4 +2,4 @@ import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_gen
2
2
  export function getDataGridUtilityClass(slot) {
3
3
  return generateUtilityClass('MuiDataGrid', slot);
4
4
  }
5
- export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'toolbarPromptControl', 'toolbarPromptControl--recording', 'toolbarPromptControlRecordingIndicator', 'toolbarPromptControlRecordButton', 'toolbarPromptControlSendButton', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
5
+ export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'toolbarPromptControl', 'toolbarPromptControl--recording', 'toolbarPromptControlRecordingIndicator', 'toolbarPromptControlRecordButton', 'toolbarPromptControlSendButton', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'groupingCriteriaCellLoadingContainer', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
@@ -98,6 +98,7 @@ export const GRID_DEFAULT_LOCALE_TEXT = {
98
98
  'headerFilterOperator>=': 'Greater than or equal to',
99
99
  'headerFilterOperator<': 'Less than',
100
100
  'headerFilterOperator<=': 'Less than or equal to',
101
+ headerFilterClear: 'Clear filter',
101
102
  // Filter values text
102
103
  filterValueAny: 'any',
103
104
  filterValueTrue: 'true',
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { GridPrivateApiCommunity } from '../models/api/gridApiCommunity';
3
3
  import { GridConfiguration } from '../models/configuration/gridConfiguration';
4
4
  type GridContextProviderProps = {
5
- privateApiRef: React.MutableRefObject<GridPrivateApiCommunity>;
5
+ privateApiRef: React.RefObject<GridPrivateApiCommunity>;
6
6
  configuration: GridConfiguration;
7
7
  props: {};
8
8
  children: React.ReactNode;
@@ -5,4 +5,4 @@ import type { DataGridProcessedProps } from '../../../models/props/DataGridProps
5
5
  * @requires useGridCsvExport (method)
6
6
  * @requires useGridSelection (method)
7
7
  */
8
- export declare const useGridClipboard: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "ignoreValueFormatterDuringExport" | "onClipboardCopy" | "clipboardCopyCellDelimiter">) => void;
8
+ export declare const useGridClipboard: (apiRef: React.RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "ignoreValueFormatterDuringExport" | "onClipboardCopy" | "clipboardCopyCellDelimiter">) => void;
@@ -7,4 +7,4 @@ export declare const columnGroupsStateInitializer: GridStateInitializer<Pick<Dat
7
7
  * @requires useGridColumns (method, event)
8
8
  * @requires useGridParamsApi (method)
9
9
  */
10
- export declare const useGridColumnGrouping: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "columnGroupingModel">) => void;
10
+ export declare const useGridColumnGrouping: (apiRef: React.RefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, "columnGroupingModel">) => void;
@@ -6,8 +6,9 @@ import { GridSortColumnLookup } from '../sorting';
6
6
  import { GridFilterActiveItemsLookup } from '../filter';
7
7
  import { GridColumnGroupIdentifier, GridColumnIdentifier } from '../focus';
8
8
  import { GridColumnMenuState } from '../columnMenu';
9
- import { GridPinnedColumnPosition, GridColumnVisibilityModel } from '../columns';
9
+ import { GridColumnVisibilityModel, gridColumnPositionsSelector } from '../columns';
10
10
  import { GridGroupingStructure } from '../columnGrouping/gridColumnGroupsInterfaces';
11
+ import { PinnedColumnPosition } from '../../../internals/constants';
11
12
  export interface UseGridColumnHeadersProps {
12
13
  visibleColumns: GridStateColDef[];
13
14
  sortColumnLookup: GridSortColumnLookup;
@@ -23,7 +24,7 @@ export interface UseGridColumnHeadersProps {
23
24
  hasOtherElementInTabSequence: boolean;
24
25
  }
25
26
  export interface GetHeadersParams {
26
- position?: GridPinnedColumnPosition;
27
+ position?: PinnedColumnPosition;
27
28
  renderContext?: GridColumnsRenderContext;
28
29
  maxLastColumn?: number;
29
30
  }
@@ -46,11 +47,7 @@ export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) =>
46
47
  right: GridStateColDef[];
47
48
  };
48
49
  visibleColumns: GridStateColDef[];
49
- getCellOffsetStyle: ({ pinnedPosition, columnIndex, computedWidth, }: {
50
- pinnedPosition?: GridPinnedColumnPosition;
51
- columnIndex: number;
52
- computedWidth: number;
53
- }) => React.CSSProperties | undefined;
50
+ columnPositions: number[];
54
51
  getFillers: (params: GetHeadersParams | undefined, children: React.ReactNode, leftOverflow: number, borderBottom?: boolean) => React.JSX.Element;
55
52
  getColumnHeadersRow: () => React.JSX.Element;
56
53
  getColumnsToRender: (params?: GetHeadersParams) => {
@@ -59,6 +56,7 @@ export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) =>
59
56
  lastColumnToRender: number;
60
57
  };
61
58
  getColumnGroupHeadersRows: () => React.JSX.Element[] | null;
59
+ getPinnedCellOffset: (pinnedPosition: PinnedColumnPosition | undefined, computedWidth: number, columnIndex: number, columnPositions: ReturnType<typeof gridColumnPositionsSelector>, columnsTotalWidth: number, scrollbarWidth: number) => number | undefined;
62
60
  isDragging: boolean;
63
61
  getInnerProps: () => {
64
62
  role: string;
@@ -2,22 +2,23 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { styled } from '@mui/material/styles';
5
- import { useRtl } from '@mui/system/RtlProvider';
6
5
  import { useGridSelector } from "../../utils/index.js";
7
6
  import { useGridRootProps } from "../../utils/useGridRootProps.js";
8
7
  import { useGridPrivateApiContext } from "../../utils/useGridPrivateApiContext.js";
9
8
  import { useGridApiEventHandler } from "../../utils/useGridApiEventHandler.js";
10
9
  import { GridColumnHeaderItem } from "../../../components/columnHeaders/GridColumnHeaderItem.js";
11
10
  import { gridDimensionsSelector } from "../dimensions/index.js";
12
- import { gridRenderContextColumnsSelector, gridVirtualizationColumnEnabledSelector } from "../virtualization/index.js";
11
+ import { gridRenderContextColumnsSelector } from "../virtualization/index.js";
13
12
  import { computeOffsetLeft } from "../virtualization/useGridVirtualScroller.js";
14
13
  import { GridColumnGroupHeader } from "../../../components/columnHeaders/GridColumnGroupHeader.js";
15
- import { GridPinnedColumnPosition, gridColumnPositionsSelector, gridVisiblePinnedColumnDefinitionsSelector, gridColumnLookupSelector } from "../columns/index.js";
14
+ import { gridColumnPositionsSelector, gridVisiblePinnedColumnDefinitionsSelector, gridColumnLookupSelector } from "../columns/index.js";
16
15
  import { gridColumnGroupsUnwrappedModelSelector } from "../columnGrouping/gridColumnGroupsSelector.js";
17
16
  import { GridScrollbarFillerCell as ScrollbarFiller } from "../../../components/GridScrollbarFillerCell.js";
18
17
  import { getPinnedCellOffset } from "../../../internals/utils/getPinnedCellOffset.js";
19
18
  import { GridColumnHeaderSeparatorSides } from "../../../components/columnHeaders/GridColumnHeaderSeparator.js";
20
19
  import { gridClasses } from "../../../constants/gridClasses.js";
20
+ import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../../utils/cellBorderUtils.js";
21
+ import { PinnedColumnPosition } from "../../../internals/constants.js";
21
22
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
23
  export const GridColumnHeaderRow = styled('div', {
23
24
  name: 'MuiDataGrid',
@@ -44,10 +45,8 @@ export const useGridColumnHeaders = props => {
44
45
  const [dragCol, setDragCol] = React.useState('');
45
46
  const [resizeCol, setResizeCol] = React.useState('');
46
47
  const apiRef = useGridPrivateApiContext();
47
- const isRtl = useRtl();
48
48
  const rootProps = useGridRootProps();
49
49
  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
50
- const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
51
50
  const columnGroupsModel = useGridSelector(apiRef, gridColumnGroupsUnwrappedModelSelector);
52
51
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
53
52
  const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
@@ -84,18 +83,10 @@ export const useGridColumnHeaders = props => {
84
83
  // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
85
84
  const getColumnsToRender = params => {
86
85
  const {
87
- renderContext: currentContext = renderContext,
88
- maxLastColumn = visibleColumns.length
86
+ renderContext: currentContext = renderContext
89
87
  } = params || {};
90
- let firstColumnToRender;
91
- let lastColumnToRender;
92
- if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
93
- firstColumnToRender = 0;
94
- lastColumnToRender = maxLastColumn;
95
- } else {
96
- firstColumnToRender = currentContext.firstColumnIndex;
97
- lastColumnToRender = currentContext.lastColumnIndex;
98
- }
88
+ const firstColumnToRender = currentContext.firstColumnIndex;
89
+ const lastColumnToRender = currentContext.lastColumnIndex;
99
90
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
100
91
  return {
101
92
  renderedColumns,
@@ -104,7 +95,7 @@ export const useGridColumnHeaders = props => {
104
95
  };
105
96
  };
106
97
  const getFillers = (params, children, leftOverflow, borderBottom = false) => {
107
- const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;
98
+ const isPinnedRight = params?.position === PinnedColumnPosition.RIGHT;
108
99
  const isNotPinned = params?.position === undefined;
109
100
  const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;
110
101
  const leftOffsetWidth = offsetLeft - leftOverflow;
@@ -125,33 +116,6 @@ export const useGridColumnHeaders = props => {
125
116
  })]
126
117
  });
127
118
  };
128
- const getCellOffsetStyle = ({
129
- pinnedPosition,
130
- columnIndex,
131
- computedWidth
132
- }) => {
133
- let style;
134
- const isLeftPinned = pinnedPosition === GridPinnedColumnPosition.LEFT;
135
- const isRightPinned = pinnedPosition === GridPinnedColumnPosition.RIGHT;
136
- if (isLeftPinned || isRightPinned) {
137
- const pinnedOffset = getPinnedCellOffset(pinnedPosition, computedWidth, columnIndex, columnPositions, dimensions);
138
- let side = isLeftPinned ? 'left' : 'right';
139
- if (isRtl) {
140
- side = isLeftPinned ? 'right' : 'left';
141
- }
142
- if (pinnedPosition === 'left') {
143
- style = {
144
- [side]: pinnedOffset
145
- };
146
- }
147
- if (pinnedPosition === 'right') {
148
- style = {
149
- [side]: pinnedOffset
150
- };
151
- }
152
- }
153
- return style;
154
- };
155
119
  const getColumnHeaders = (params, other = {}) => {
156
120
  const {
157
121
  renderedColumns,
@@ -166,14 +130,15 @@ export const useGridColumnHeaders = props => {
166
130
  const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
167
131
  const open = columnMenuState.open && columnMenuState.field === colDef.field;
168
132
  const pinnedPosition = params?.position;
169
- const style = getCellOffsetStyle({
170
- pinnedPosition,
171
- columnIndex,
172
- computedWidth: colDef.computedWidth
173
- });
174
- const siblingWithBorderingSeparator = pinnedPosition === GridPinnedColumnPosition.RIGHT ? renderedColumns[i - 1] : renderedColumns[i + 1];
133
+ const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
134
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
135
+ const siblingWithBorderingSeparator = pinnedPosition === PinnedColumnPosition.RIGHT ? renderedColumns[i - 1] : renderedColumns[i + 1];
175
136
  const isSiblingFocused = siblingWithBorderingSeparator ? columnHeaderFocus !== null && columnHeaderFocus.field === siblingWithBorderingSeparator.field : false;
176
137
  const isLastUnpinned = columnIndex + 1 === columnPositions.length - pinnedColumns.right.length;
138
+ const indexInSection = i;
139
+ const sectionLength = renderedColumns.length;
140
+ const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
141
+ const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
177
142
  columns.push(/*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {
178
143
  columnMenuOpen: open,
179
144
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
@@ -186,12 +151,11 @@ export const useGridColumnHeaders = props => {
186
151
  hasFocus: hasFocus,
187
152
  tabIndex: tabIndex,
188
153
  pinnedPosition: pinnedPosition,
189
- style: style,
190
- indexInSection: i,
191
- sectionLength: renderedColumns.length,
192
- gridHasFiller: gridHasFiller,
154
+ pinnedOffset: pinnedOffset,
193
155
  isLastUnpinned: isLastUnpinned,
194
- isSiblingFocused: isSiblingFocused
156
+ isSiblingFocused: isSiblingFocused,
157
+ showLeftBorder: showLeftBorder,
158
+ showRightBorder: showRightBorder
195
159
  }, other), colDef.field));
196
160
  }
197
161
  return getFillers(params, columns, 0);
@@ -203,18 +167,15 @@ export const useGridColumnHeaders = props => {
203
167
  ownerState: rootProps,
204
168
  className: gridClasses['row--borderBottom'],
205
169
  children: [leftRenderContext && getColumnHeaders({
206
- position: GridPinnedColumnPosition.LEFT,
207
- renderContext: leftRenderContext,
208
- maxLastColumn: leftRenderContext.lastColumnIndex
170
+ position: PinnedColumnPosition.LEFT,
171
+ renderContext: leftRenderContext
209
172
  }, {
210
173
  disableReorder: true
211
174
  }), getColumnHeaders({
212
- renderContext,
213
- maxLastColumn: visibleColumns.length - pinnedColumns.right.length
175
+ renderContext
214
176
  }), rightRenderContext && getColumnHeaders({
215
- position: GridPinnedColumnPosition.RIGHT,
216
- renderContext: rightRenderContext,
217
- maxLastColumn: rightRenderContext.lastColumnIndex
177
+ position: PinnedColumnPosition.RIGHT,
178
+ renderContext: rightRenderContext
218
179
  }, {
219
180
  disableReorder: true,
220
181
  separatorSide: GridColumnHeaderSeparatorSides.Left
@@ -273,14 +234,11 @@ export const useGridColumnHeaders = props => {
273
234
  tabIndex
274
235
  };
275
236
  const pinnedPosition = params.position;
276
- const style = getCellOffsetStyle({
277
- pinnedPosition,
278
- columnIndex,
279
- computedWidth: headerInfo.width
280
- });
237
+ const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
238
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, headerInfo.width, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
281
239
  columnIndex += columnFields.length;
282
240
  let indexInSection = index;
283
- if (pinnedPosition === 'left') {
241
+ if (pinnedPosition === PinnedColumnPosition.LEFT) {
284
242
  // Group headers can expand to multiple columns, we need to adjust the index
285
243
  indexInSection = columnIndex - 1;
286
244
  }
@@ -296,10 +254,9 @@ export const useGridColumnHeaders = props => {
296
254
  hasFocus: hasFocus,
297
255
  tabIndex: tabIndex,
298
256
  pinnedPosition: pinnedPosition,
299
- style: style,
300
- indexInSection: indexInSection,
301
- sectionLength: visibleColumnGroupHeader.length,
302
- gridHasFiller: gridHasFiller
257
+ pinnedOffset: pinnedOffset,
258
+ showLeftBorder: shouldCellShowLeftBorder(pinnedPosition, indexInSection),
259
+ showRightBorder: shouldCellShowRightBorder(pinnedPosition, indexInSection, visibleColumnGroupHeader.length, rootProps.showCellVerticalBorder, gridHasFiller)
303
260
  }, index);
304
261
  });
305
262
  return getFillers(params, children, leftOverflow);
@@ -317,7 +274,7 @@ export const useGridColumnHeaders = props => {
317
274
  children: [leftRenderContext && getColumnGroupHeaders({
318
275
  depth,
319
276
  params: {
320
- position: GridPinnedColumnPosition.LEFT,
277
+ position: PinnedColumnPosition.LEFT,
321
278
  renderContext: leftRenderContext,
322
279
  maxLastColumn: leftRenderContext.lastColumnIndex
323
280
  }
@@ -329,7 +286,7 @@ export const useGridColumnHeaders = props => {
329
286
  }), rightRenderContext && getColumnGroupHeaders({
330
287
  depth,
331
288
  params: {
332
- position: GridPinnedColumnPosition.RIGHT,
289
+ position: PinnedColumnPosition.RIGHT,
333
290
  renderContext: rightRenderContext,
334
291
  maxLastColumn: rightRenderContext.lastColumnIndex
335
292
  }
@@ -344,11 +301,12 @@ export const useGridColumnHeaders = props => {
344
301
  rightRenderContext,
345
302
  pinnedColumns,
346
303
  visibleColumns,
347
- getCellOffsetStyle,
304
+ columnPositions,
348
305
  getFillers,
349
306
  getColumnHeadersRow,
350
307
  getColumnsToRender,
351
308
  getColumnGroupHeadersRows,
309
+ getPinnedCellOffset,
352
310
  isDragging: !!dragCol,
353
311
  getInnerProps: () => ({
354
312
  role: 'rowgroup'
@@ -6,4 +6,4 @@ export declare const columnMenuStateInitializer: GridStateInitializer;
6
6
  * @requires useGridColumnResize (event)
7
7
  * @requires useGridInfiniteLoader (event)
8
8
  */
9
- export declare const useGridColumnMenu: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>) => void;
9
+ export declare const useGridColumnMenu: (apiRef: React.RefObject<GridPrivateApiCommunity>) => void;
@@ -44,13 +44,13 @@ export declare const createColumnsState: ({ apiRef, columnsToUpsert, initialStat
44
44
  initialState: GridColumnsInitialState | undefined;
45
45
  columnVisibilityModel?: GridColumnVisibilityModel;
46
46
  keepOnlyColumnsToUpsert: boolean;
47
- apiRef: React.MutableRefObject<GridApiCommunity>;
47
+ apiRef: React.RefObject<GridApiCommunity>;
48
48
  }) => GridColumnsState;
49
49
  export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender, apiRef, firstRowToRender, lastRowToRender, visibleRows, }: {
50
50
  firstColumnToRender: number;
51
- apiRef: React.MutableRefObject<GridApiCommon>;
51
+ apiRef: React.RefObject<GridApiCommon>;
52
52
  firstRowToRender: number;
53
53
  lastRowToRender: number;
54
54
  visibleRows: GridRowEntry[];
55
55
  }): number;
56
- export declare function getTotalHeaderHeight(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'unstable_listView' | 'columnGroupHeaderHeight'>): number;
56
+ export declare function getTotalHeaderHeight(apiRef: React.RefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columnHeaderHeight' | 'headerFilterHeight' | 'unstable_listView' | 'columnGroupHeaderHeight'>): number;