@mui/x-data-grid 7.0.0-alpha.7 → 7.0.0-alpha.9

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 (501) hide show
  1. package/CHANGELOG.md +554 -51
  2. package/DataGrid/DataGrid.js +15 -27
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +1 -1
  6. package/colDef/gridDateColDef.js +1 -1
  7. package/components/GridColumnHeaders.d.ts +3 -2
  8. package/components/GridColumnHeaders.js +3 -11
  9. package/components/GridDetailPanels.d.ts +5 -0
  10. package/components/GridDetailPanels.js +4 -0
  11. package/components/GridHeaders.d.ts +4 -0
  12. package/components/GridHeaders.js +53 -0
  13. package/components/GridPagination.d.ts +4 -4
  14. package/components/GridPagination.js +1 -1
  15. package/components/GridPinnedRows.d.ts +7 -0
  16. package/components/GridPinnedRows.js +4 -0
  17. package/components/GridRow.d.ts +7 -4
  18. package/components/GridRow.js +260 -97
  19. package/components/GridScrollbarFillerCell.d.ts +7 -0
  20. package/components/GridScrollbarFillerCell.js +39 -0
  21. package/components/base/GridBody.d.ts +2 -13
  22. package/components/base/GridBody.js +2 -116
  23. package/components/base/GridOverlays.js +10 -21
  24. package/components/cell/GridActionsCell.js +1 -1
  25. package/components/cell/GridActionsCellItem.d.ts +6 -6
  26. package/components/cell/GridCell.d.ts +15 -21
  27. package/components/cell/GridCell.js +68 -373
  28. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  29. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  30. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  31. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  32. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  33. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  34. package/components/containers/GridRoot.js +18 -15
  35. package/components/containers/GridRootStyles.js +307 -204
  36. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  37. package/components/panel/GridPanel.d.ts +3 -3
  38. package/components/panel/GridPanel.js +3 -4
  39. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  40. package/components/panel/filterPanel/GridFilterForm.js +32 -15
  41. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  42. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  43. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  44. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  45. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  46. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  47. package/components/toolbar/GridToolbarExport.js +6 -1
  48. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  49. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  50. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  51. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  52. package/components/toolbar/GridToolbarQuickFilter.d.ts +4 -0
  53. package/components/toolbar/GridToolbarQuickFilter.js +4 -0
  54. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  55. package/components/virtualization/GridBottomContainer.js +25 -0
  56. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  57. package/components/virtualization/GridMainContainer.js +20 -0
  58. package/components/virtualization/GridTopContainer.d.ts +2 -0
  59. package/components/virtualization/GridTopContainer.js +35 -0
  60. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  61. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  62. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  63. package/components/virtualization/GridVirtualScroller.js +69 -16
  64. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  65. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  66. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  67. package/constants/defaultGridSlotsComponents.js +6 -2
  68. package/constants/gridClasses.d.ts +60 -8
  69. package/constants/gridClasses.js +1 -1
  70. package/hooks/core/gridCoreSelector.d.ts +6 -0
  71. package/hooks/core/gridCoreSelector.js +5 -0
  72. package/hooks/core/useGridInitialization.js +4 -0
  73. package/hooks/core/useGridLoggerFactory.js +2 -2
  74. package/hooks/core/useGridRefs.d.ts +3 -0
  75. package/hooks/core/useGridRefs.js +13 -0
  76. package/hooks/core/useGridTheme.d.ts +3 -0
  77. package/hooks/core/useGridTheme.js +19 -0
  78. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  79. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  80. package/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
  81. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  82. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  83. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  84. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  85. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  86. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  87. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  88. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  89. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  90. package/hooks/features/columns/index.d.ts +2 -2
  91. package/hooks/features/columns/index.js +2 -1
  92. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  93. package/hooks/features/columns/useGridColumns.js +20 -23
  94. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  95. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  96. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  97. package/hooks/features/dimensions/index.d.ts +2 -0
  98. package/hooks/features/dimensions/index.js +1 -0
  99. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  100. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  101. package/hooks/features/editing/useGridCellEditing.js +4 -4
  102. package/hooks/features/editing/useGridRowEditing.js +4 -4
  103. package/hooks/features/export/serializers/csvSerializer.js +3 -3
  104. package/hooks/features/export/useGridPrintExport.js +1 -1
  105. package/hooks/features/filter/gridFilterUtils.js +5 -5
  106. package/hooks/features/filter/useGridFilter.js +3 -3
  107. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  108. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  109. package/hooks/features/focus/useGridFocus.js +3 -3
  110. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  111. package/hooks/features/pagination/gridPaginationUtils.js +2 -2
  112. package/hooks/features/pagination/useGridPagination.js +3 -5
  113. package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  114. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  115. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  116. package/hooks/features/rows/gridRowsSelector.js +5 -5
  117. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  118. package/hooks/features/rows/gridRowsUtils.js +6 -6
  119. package/hooks/features/rows/useGridRows.js +7 -7
  120. package/hooks/features/rows/useGridRowsMeta.js +9 -6
  121. package/hooks/features/scroll/useGridScroll.js +8 -10
  122. package/hooks/features/sorting/gridSortingUtils.js +5 -3
  123. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  124. package/hooks/features/sorting/useGridSorting.js +15 -10
  125. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  126. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  127. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  128. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  129. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  130. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  131. package/hooks/utils/index.d.ts +3 -0
  132. package/hooks/utils/index.js +4 -1
  133. package/hooks/utils/useGridApiContext.js +1 -1
  134. package/hooks/utils/useGridAriaAttributes.js +1 -2
  135. package/hooks/utils/useGridNativeEventListener.js +4 -9
  136. package/hooks/utils/useGridPrivateApiContext.js +1 -1
  137. package/hooks/utils/useGridRootProps.js +1 -1
  138. package/hooks/utils/useGridSelector.js +1 -1
  139. package/hooks/utils/useResizeObserver.d.ts +2 -0
  140. package/hooks/utils/useResizeObserver.js +36 -0
  141. package/hooks/utils/useRunOnce.d.ts +5 -0
  142. package/hooks/utils/useRunOnce.js +18 -0
  143. package/index.d.ts +0 -1
  144. package/index.js +1 -2
  145. package/internals/index.d.ts +13 -9
  146. package/internals/index.js +9 -7
  147. package/internals/utils/index.d.ts +1 -0
  148. package/internals/utils/index.js +2 -1
  149. package/internals/utils/propValidation.d.ts +4 -0
  150. package/internals/utils/propValidation.js +19 -0
  151. package/legacy/DataGrid/DataGrid.js +20 -29
  152. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  153. package/legacy/DataGrid/useDataGridProps.js +1 -0
  154. package/legacy/colDef/gridDateColDef.js +1 -1
  155. package/legacy/components/GridColumnHeaders.js +3 -11
  156. package/legacy/components/GridDetailPanels.js +4 -0
  157. package/legacy/components/GridHeaders.js +53 -0
  158. package/legacy/components/GridPagination.js +1 -1
  159. package/legacy/components/GridPinnedRows.js +4 -0
  160. package/legacy/components/GridRow.js +258 -98
  161. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  162. package/legacy/components/base/GridBody.js +2 -114
  163. package/legacy/components/base/GridOverlays.js +10 -25
  164. package/legacy/components/cell/GridActionsCell.js +1 -1
  165. package/legacy/components/cell/GridCell.js +70 -378
  166. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  167. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  168. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  169. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  170. package/legacy/components/containers/GridRoot.js +18 -15
  171. package/legacy/components/containers/GridRootStyles.js +215 -137
  172. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  173. package/legacy/components/panel/GridPanel.js +3 -4
  174. package/legacy/components/panel/filterPanel/GridFilterForm.js +31 -14
  175. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  176. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  177. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  178. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  179. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  180. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  181. package/legacy/components/toolbar/GridToolbarQuickFilter.js +4 -0
  182. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  183. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  184. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  185. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  186. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  187. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  188. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  189. package/legacy/constants/defaultGridSlotsComponents.js +6 -2
  190. package/legacy/constants/gridClasses.js +1 -1
  191. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  192. package/legacy/hooks/core/useGridInitialization.js +4 -0
  193. package/legacy/hooks/core/useGridLoggerFactory.js +2 -2
  194. package/legacy/hooks/core/useGridRefs.js +13 -0
  195. package/legacy/hooks/core/useGridTheme.js +21 -0
  196. package/legacy/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  197. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
  198. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  199. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  200. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  201. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  202. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  203. package/legacy/hooks/features/columns/index.js +2 -1
  204. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  205. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  206. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  207. package/legacy/hooks/features/dimensions/index.js +1 -0
  208. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  209. package/legacy/hooks/features/editing/useGridCellEditing.js +4 -4
  210. package/legacy/hooks/features/editing/useGridRowEditing.js +4 -4
  211. package/legacy/hooks/features/export/serializers/csvSerializer.js +3 -3
  212. package/legacy/hooks/features/export/useGridPrintExport.js +1 -1
  213. package/legacy/hooks/features/filter/gridFilterUtils.js +5 -5
  214. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  215. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  216. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  217. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  218. package/legacy/hooks/features/pagination/gridPaginationUtils.js +2 -2
  219. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  220. package/legacy/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  221. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  222. package/legacy/hooks/features/rows/gridRowsUtils.js +6 -6
  223. package/legacy/hooks/features/rows/useGridParamsApi.js +4 -5
  224. package/legacy/hooks/features/rows/useGridRows.js +7 -7
  225. package/legacy/hooks/features/rows/useGridRowsMeta.js +9 -6
  226. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  227. package/legacy/hooks/features/sorting/gridSortingUtils.js +5 -3
  228. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  229. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  230. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  231. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  232. package/legacy/hooks/utils/index.js +4 -1
  233. package/legacy/hooks/utils/useGridApiContext.js +1 -1
  234. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  235. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  236. package/legacy/hooks/utils/useGridPrivateApiContext.js +1 -1
  237. package/legacy/hooks/utils/useGridRootProps.js +1 -1
  238. package/legacy/hooks/utils/useGridSelector.js +1 -1
  239. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  240. package/legacy/hooks/utils/useRunOnce.js +18 -0
  241. package/legacy/index.js +1 -2
  242. package/legacy/internals/index.js +9 -7
  243. package/legacy/internals/utils/index.js +2 -1
  244. package/legacy/internals/utils/propValidation.js +21 -0
  245. package/legacy/locales/hrHR.js +161 -0
  246. package/legacy/locales/index.js +4 -1
  247. package/legacy/locales/ptPT.js +161 -0
  248. package/legacy/locales/zhHK.js +161 -0
  249. package/legacy/models/index.js +0 -1
  250. package/legacy/models/params/index.js +1 -2
  251. package/legacy/utils/createSelector.js +1 -1
  252. package/legacy/utils/exportAs.js +1 -1
  253. package/legacy/utils/utils.js +10 -1
  254. package/locales/hrHR.d.ts +1 -0
  255. package/locales/hrHR.js +149 -0
  256. package/locales/index.d.ts +3 -0
  257. package/locales/index.js +4 -1
  258. package/locales/ptPT.d.ts +1 -0
  259. package/locales/ptPT.js +149 -0
  260. package/locales/zhHK.d.ts +1 -0
  261. package/locales/zhHK.js +149 -0
  262. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  263. package/models/api/gridCoreApi.d.ts +16 -16
  264. package/models/api/gridRowsMetaApi.d.ts +1 -1
  265. package/models/api/gridVirtualizationApi.d.ts +2 -3
  266. package/models/events/gridEventLookup.d.ts +3 -3
  267. package/models/gridFilterModel.d.ts +1 -1
  268. package/models/gridSlotsComponent.d.ts +16 -2
  269. package/models/gridStateCommunity.d.ts +5 -1
  270. package/models/index.d.ts +0 -1
  271. package/models/index.js +0 -1
  272. package/models/params/index.d.ts +0 -1
  273. package/models/params/index.js +1 -2
  274. package/models/props/DataGridProps.d.ts +7 -12
  275. package/modern/DataGrid/DataGrid.js +15 -27
  276. package/modern/DataGrid/useDataGridComponent.js +2 -1
  277. package/modern/DataGrid/useDataGridProps.js +1 -0
  278. package/modern/colDef/gridDateColDef.js +1 -1
  279. package/modern/components/GridColumnHeaders.js +3 -11
  280. package/modern/components/GridDetailPanels.js +4 -0
  281. package/modern/components/GridHeaders.js +53 -0
  282. package/modern/components/GridPagination.js +1 -1
  283. package/modern/components/GridPinnedRows.js +4 -0
  284. package/modern/components/GridRow.js +258 -96
  285. package/modern/components/GridScrollbarFillerCell.js +39 -0
  286. package/modern/components/base/GridBody.js +2 -116
  287. package/modern/components/base/GridOverlays.js +10 -16
  288. package/modern/components/cell/GridActionsCell.js +1 -1
  289. package/modern/components/cell/GridCell.js +66 -370
  290. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  291. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  292. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  293. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  294. package/modern/components/containers/GridRoot.js +18 -14
  295. package/modern/components/containers/GridRootStyles.js +307 -204
  296. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  297. package/modern/components/panel/GridPanel.js +3 -4
  298. package/modern/components/panel/filterPanel/GridFilterForm.js +31 -14
  299. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  300. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  301. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  302. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  303. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  304. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  305. package/modern/components/toolbar/GridToolbarQuickFilter.js +4 -0
  306. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  307. package/modern/components/virtualization/GridMainContainer.js +20 -0
  308. package/modern/components/virtualization/GridTopContainer.js +35 -0
  309. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  310. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  311. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  312. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  313. package/modern/constants/defaultGridSlotsComponents.js +6 -2
  314. package/modern/constants/gridClasses.js +1 -1
  315. package/modern/hooks/core/gridCoreSelector.js +5 -0
  316. package/modern/hooks/core/useGridInitialization.js +4 -0
  317. package/modern/hooks/core/useGridLoggerFactory.js +2 -2
  318. package/modern/hooks/core/useGridRefs.js +13 -0
  319. package/modern/hooks/core/useGridTheme.js +19 -0
  320. package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  321. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
  322. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  323. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  324. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  325. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  326. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  327. package/modern/hooks/features/columns/index.js +2 -1
  328. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  329. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  330. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  331. package/modern/hooks/features/dimensions/index.js +1 -0
  332. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  333. package/modern/hooks/features/editing/useGridCellEditing.js +4 -4
  334. package/modern/hooks/features/editing/useGridRowEditing.js +4 -4
  335. package/modern/hooks/features/export/serializers/csvSerializer.js +3 -3
  336. package/modern/hooks/features/export/useGridPrintExport.js +1 -1
  337. package/modern/hooks/features/filter/gridFilterUtils.js +5 -5
  338. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  339. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  340. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  341. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  342. package/modern/hooks/features/pagination/gridPaginationUtils.js +2 -2
  343. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  344. package/modern/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  345. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  346. package/modern/hooks/features/rows/gridRowsUtils.js +6 -6
  347. package/modern/hooks/features/rows/useGridRows.js +7 -7
  348. package/modern/hooks/features/rows/useGridRowsMeta.js +9 -6
  349. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  350. package/modern/hooks/features/sorting/gridSortingUtils.js +5 -3
  351. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  352. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  353. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  354. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  355. package/modern/hooks/utils/index.js +4 -1
  356. package/modern/hooks/utils/useGridApiContext.js +1 -1
  357. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  358. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  359. package/modern/hooks/utils/useGridPrivateApiContext.js +1 -1
  360. package/modern/hooks/utils/useGridRootProps.js +1 -1
  361. package/modern/hooks/utils/useGridSelector.js +1 -1
  362. package/modern/hooks/utils/useResizeObserver.js +36 -0
  363. package/modern/hooks/utils/useRunOnce.js +18 -0
  364. package/modern/index.js +1 -2
  365. package/modern/internals/index.js +9 -7
  366. package/modern/internals/utils/index.js +2 -1
  367. package/modern/internals/utils/propValidation.js +19 -0
  368. package/modern/locales/hrHR.js +149 -0
  369. package/modern/locales/index.js +4 -1
  370. package/modern/locales/ptPT.js +149 -0
  371. package/modern/locales/zhHK.js +149 -0
  372. package/modern/models/index.js +0 -1
  373. package/modern/models/params/index.js +1 -2
  374. package/modern/utils/createSelector.js +1 -1
  375. package/modern/utils/exportAs.js +1 -1
  376. package/modern/utils/utils.js +10 -1
  377. package/node/DataGrid/DataGrid.js +15 -27
  378. package/node/DataGrid/useDataGridComponent.js +1 -0
  379. package/node/DataGrid/useDataGridProps.js +1 -0
  380. package/node/colDef/gridDateColDef.js +1 -1
  381. package/node/components/GridColumnHeaders.js +3 -11
  382. package/node/components/GridDetailPanels.js +10 -0
  383. package/node/components/GridHeaders.js +60 -0
  384. package/node/components/GridPagination.js +1 -1
  385. package/node/components/GridPinnedRows.js +10 -0
  386. package/node/components/GridRow.js +256 -94
  387. package/node/components/GridScrollbarFillerCell.js +47 -0
  388. package/node/components/base/GridBody.js +7 -118
  389. package/node/components/base/GridOverlays.js +9 -15
  390. package/node/components/cell/GridActionsCell.js +1 -1
  391. package/node/components/cell/GridCell.js +67 -370
  392. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  393. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  394. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  395. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  396. package/node/components/containers/GridRoot.js +17 -14
  397. package/node/components/containers/GridRootStyles.js +175 -72
  398. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  399. package/node/components/panel/GridPanel.js +3 -4
  400. package/node/components/panel/filterPanel/GridFilterForm.js +30 -13
  401. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  402. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  403. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  404. package/node/components/toolbar/GridToolbarExport.js +6 -1
  405. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  406. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  407. package/node/components/toolbar/GridToolbarQuickFilter.js +4 -0
  408. package/node/components/virtualization/GridBottomContainer.js +34 -0
  409. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  410. package/node/components/virtualization/GridTopContainer.js +44 -0
  411. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  412. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  413. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  414. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  415. package/node/constants/defaultGridSlotsComponents.js +5 -1
  416. package/node/constants/gridClasses.js +1 -1
  417. package/node/hooks/core/gridCoreSelector.js +12 -0
  418. package/node/hooks/core/useGridInitialization.js +4 -0
  419. package/node/hooks/core/useGridLoggerFactory.js +2 -2
  420. package/node/hooks/core/useGridRefs.js +22 -0
  421. package/node/hooks/core/useGridTheme.js +29 -0
  422. package/node/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  423. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
  424. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  425. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  426. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  427. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  428. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  429. package/node/hooks/features/columns/index.js +22 -61
  430. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  431. package/node/hooks/features/columns/useGridColumns.js +20 -22
  432. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  433. package/node/hooks/features/dimensions/index.js +11 -0
  434. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  435. package/node/hooks/features/editing/useGridCellEditing.js +4 -4
  436. package/node/hooks/features/editing/useGridRowEditing.js +4 -4
  437. package/node/hooks/features/export/serializers/csvSerializer.js +3 -3
  438. package/node/hooks/features/export/useGridPrintExport.js +1 -1
  439. package/node/hooks/features/filter/gridFilterUtils.js +5 -5
  440. package/node/hooks/features/filter/useGridFilter.js +2 -2
  441. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  442. package/node/hooks/features/focus/useGridFocus.js +2 -2
  443. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  444. package/node/hooks/features/pagination/gridPaginationUtils.js +2 -2
  445. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  446. package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  447. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  448. package/node/hooks/features/rows/gridRowsUtils.js +6 -6
  449. package/node/hooks/features/rows/useGridRows.js +7 -7
  450. package/node/hooks/features/rows/useGridRowsMeta.js +7 -5
  451. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  452. package/node/hooks/features/sorting/gridSortingUtils.js +5 -3
  453. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  454. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  455. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  456. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  457. package/node/hooks/utils/index.js +36 -0
  458. package/node/hooks/utils/useGridApiContext.js +1 -1
  459. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  460. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  461. package/node/hooks/utils/useGridPrivateApiContext.js +1 -1
  462. package/node/hooks/utils/useGridRootProps.js +1 -1
  463. package/node/hooks/utils/useGridSelector.js +1 -1
  464. package/node/hooks/utils/useResizeObserver.js +44 -0
  465. package/node/hooks/utils/useRunOnce.js +27 -0
  466. package/node/index.js +1 -13
  467. package/node/internals/index.js +86 -71
  468. package/node/internals/utils/index.js +11 -0
  469. package/node/internals/utils/propValidation.js +26 -0
  470. package/node/locales/hrHR.js +155 -0
  471. package/node/locales/index.js +33 -0
  472. package/node/locales/ptPT.js +155 -0
  473. package/node/locales/zhHK.js +155 -0
  474. package/node/models/index.js +0 -11
  475. package/node/models/params/index.js +0 -11
  476. package/node/utils/createSelector.js +1 -1
  477. package/node/utils/exportAs.js +1 -1
  478. package/node/utils/utils.js +11 -1
  479. package/package.json +6 -6
  480. package/utils/createSelector.js +1 -1
  481. package/utils/exportAs.js +1 -1
  482. package/utils/utils.d.ts +6 -0
  483. package/utils/utils.js +10 -1
  484. package/components/DataGridVirtualScroller.d.ts +0 -3
  485. package/components/DataGridVirtualScroller.js +0 -35
  486. package/components/containers/GridMainContainer.js +0 -43
  487. package/legacy/components/DataGridVirtualScroller.js +0 -32
  488. package/legacy/components/containers/GridMainContainer.js +0 -45
  489. package/legacy/models/gridRootContainerRef.js +0 -1
  490. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  491. package/models/gridRootContainerRef.d.ts +0 -5
  492. package/models/gridRootContainerRef.js +0 -1
  493. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  494. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  495. package/modern/components/DataGridVirtualScroller.js +0 -35
  496. package/modern/components/containers/GridMainContainer.js +0 -42
  497. package/modern/models/gridRootContainerRef.js +0 -1
  498. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  499. package/node/components/DataGridVirtualScroller.js +0 -42
  500. package/node/models/gridRootContainerRef.js +0 -5
  501. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,136 +1,94 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
- import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_ownerWindow as ownerWindow } from '@mui/utils';
3
+ import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback, unstable_ownerWindow as ownerWindow } from '@mui/utils';
3
4
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
4
5
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
5
6
  import { useGridLogger } from '../../utils/useGridLogger';
6
- import { gridColumnsTotalWidthSelector } from '../columns';
7
+ import { gridColumnsTotalWidthSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
8
+ import { gridDimensionsSelector } from './gridDimensionsSelectors';
7
9
  import { gridDensityFactorSelector } from '../density';
10
+ import { gridRenderContextSelector } from '../virtualization';
8
11
  import { useGridSelector } from '../../utils';
9
12
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
10
13
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
11
14
  import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
12
15
  import { getTotalHeaderHeight } from '../columns/gridColumnsUtils';
13
- const isTestEnvironment = process.env.NODE_ENV === 'test';
14
- const hasScroll = ({
15
- content,
16
- container,
17
- scrollBarSize
18
- }) => {
19
- const hasScrollXIfNoYScrollBar = content.width > container.width;
20
- const hasScrollYIfNoXScrollBar = content.height > container.height;
21
- let hasScrollX = false;
22
- let hasScrollY = false;
23
- if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
24
- hasScrollX = hasScrollXIfNoYScrollBar;
25
- hasScrollY = content.height + (hasScrollX ? scrollBarSize : 0) > container.height;
26
-
27
- // We recalculate the scroll x to consider the size of the y scrollbar.
28
- if (hasScrollY) {
29
- hasScrollX = content.width + scrollBarSize > container.width;
30
- }
31
- }
32
- return {
33
- hasScrollX,
34
- hasScrollY
35
- };
16
+ const EMPTY_SIZE = {
17
+ width: 0,
18
+ height: 0
19
+ };
20
+ const EMPTY_DIMENSIONS = {
21
+ isReady: false,
22
+ root: EMPTY_SIZE,
23
+ viewportOuterSize: EMPTY_SIZE,
24
+ viewportInnerSize: EMPTY_SIZE,
25
+ contentSize: EMPTY_SIZE,
26
+ minimumSize: EMPTY_SIZE,
27
+ hasScrollX: false,
28
+ hasScrollY: false,
29
+ scrollbarSize: 0,
30
+ headerHeight: 0,
31
+ rowWidth: 0,
32
+ rowHeight: 0,
33
+ columnsTotalWidth: 0,
34
+ leftPinnedWidth: 0,
35
+ rightPinnedWidth: 0,
36
+ headersTotalHeight: 0,
37
+ topContainerHeight: 0,
38
+ bottomContainerHeight: 0
39
+ };
40
+ export const dimensionsStateInitializer = state => {
41
+ const dimensions = EMPTY_DIMENSIONS;
42
+ return _extends({}, state, {
43
+ dimensions
44
+ });
36
45
  };
37
46
  export function useGridDimensions(apiRef, props) {
38
47
  const logger = useGridLogger(apiRef, 'useResizeContainer');
39
48
  const errorShown = React.useRef(false);
40
- const rootDimensionsRef = React.useRef(null);
41
- const fullDimensionsRef = React.useRef(null);
49
+ const rootDimensionsRef = React.useRef(EMPTY_SIZE);
42
50
  const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
51
+ const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
43
52
  const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
44
53
  const rowHeight = Math.floor(props.rowHeight * densityFactor);
45
- const totalHeaderHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight);
46
- const updateGridDimensionsRef = React.useCallback(() => {
47
- const rootElement = apiRef.current.rootElementRef?.current;
48
- const columnsTotalWidth = gridColumnsTotalWidthSelector(apiRef);
49
- const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
50
- if (!rootDimensionsRef.current) {
51
- return;
52
- }
53
- let scrollBarSize;
54
- if (props.scrollbarSize != null) {
55
- scrollBarSize = props.scrollbarSize;
56
- } else if (!columnsTotalWidth || !rootElement) {
57
- scrollBarSize = 0;
58
- } else {
59
- const doc = ownerDocument(rootElement);
60
- const scrollDiv = doc.createElement('div');
61
- scrollDiv.style.width = '99px';
62
- scrollDiv.style.height = '99px';
63
- scrollDiv.style.position = 'absolute';
64
- scrollDiv.style.overflow = 'scroll';
65
- scrollDiv.className = 'scrollDiv';
66
- rootElement.appendChild(scrollDiv);
67
- scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
68
- rootElement.removeChild(scrollDiv);
69
- }
70
- let viewportOuterSize;
71
- let hasScrollX;
72
- let hasScrollY;
73
- if (props.autoHeight) {
74
- hasScrollY = false;
75
- hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
76
- viewportOuterSize = {
77
- width: rootDimensionsRef.current.width,
78
- height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
79
- };
80
- } else {
81
- viewportOuterSize = {
82
- width: rootDimensionsRef.current.width,
83
- height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
84
- };
85
- const scrollInformation = hasScroll({
86
- content: {
87
- width: Math.round(columnsTotalWidth),
88
- height: rowsMeta.currentPageTotalHeight
89
- },
90
- container: {
91
- width: Math.round(viewportOuterSize.width),
92
- height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
93
- },
94
- scrollBarSize
95
- });
96
- hasScrollY = scrollInformation.hasScrollY;
97
- hasScrollX = scrollInformation.hasScrollX;
98
- }
99
- const viewportInnerSize = {
100
- width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
101
- height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
102
- };
103
- const newFullDimensions = {
104
- viewportOuterSize,
105
- viewportInnerSize,
106
- hasScrollX,
107
- hasScrollY,
108
- scrollBarSize
109
- };
110
- const prevDimensions = fullDimensionsRef.current;
111
- fullDimensionsRef.current = newFullDimensions;
112
- if (newFullDimensions.viewportInnerSize.width !== prevDimensions?.viewportInnerSize.width || newFullDimensions.viewportInnerSize.height !== prevDimensions?.viewportInnerSize.height) {
113
- apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
114
- }
115
- }, [apiRef, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, totalHeaderHeight]);
54
+ const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
55
+ const columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);
56
+ // XXX: The `props as any` below is not resilient to change.
57
+ const hasHeaderFilters = Boolean(props.headerFilters);
58
+ const headersTotalHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight) + Number(hasHeaderFilters) * headerHeight;
59
+ const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
60
+ const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
116
61
  const [savedSize, setSavedSize] = React.useState();
117
62
  const debouncedSetSavedSize = React.useMemo(() => debounce(setSavedSize, 60), []);
118
63
  const previousSize = React.useRef();
119
- useEnhancedEffect(() => {
120
- if (savedSize) {
121
- updateGridDimensionsRef();
122
- apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
123
- }
124
- }, [apiRef, savedSize, updateGridDimensionsRef]);
125
-
126
- // This is the function called by apiRef.current.resize()
64
+ const getRootDimensions = () => apiRef.current.state.dimensions;
65
+ const setDimensions = useEventCallback(dimensions => {
66
+ apiRef.current.setState(state => _extends({}, state, {
67
+ dimensions
68
+ }));
69
+ });
127
70
  const resize = React.useCallback(() => {
128
- apiRef.current.computeSizeAndPublishResizeEvent();
71
+ const element = apiRef.current.mainElementRef.current;
72
+ if (!element) {
73
+ return;
74
+ }
75
+ const computedStyle = ownerWindow(element).getComputedStyle(element);
76
+ const height = parseFloat(computedStyle.height) || 0;
77
+ const width = parseFloat(computedStyle.width) || 0;
78
+ const hasHeightChanged = height !== previousSize.current?.height;
79
+ const hasWidthChanged = width !== previousSize.current?.width;
80
+ if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
81
+ const size = {
82
+ width,
83
+ height
84
+ };
85
+ apiRef.current.publishEvent('resize', size);
86
+ previousSize.current = size;
87
+ }
129
88
  }, [apiRef]);
130
- const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
131
89
  const getViewportPageSize = React.useCallback(() => {
132
- const dimensions = apiRef.current.getRootDimensions();
133
- if (!dimensions) {
90
+ const dimensions = gridDimensionsSelector(apiRef.current.state);
91
+ if (!dimensions.isReady) {
134
92
  return 0;
135
93
  }
136
94
  const currentPage = getVisibleRows(apiRef, {
@@ -141,44 +99,135 @@ export function useGridDimensions(apiRef, props) {
141
99
  // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
142
100
  // to find out the maximum number of rows that can fit in the visible part of the grid
143
101
  if (props.getRowHeight) {
144
- const renderContext = apiRef.current.getRenderContext();
102
+ const renderContext = gridRenderContextSelector(apiRef);
145
103
  const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
146
104
  return Math.min(viewportPageSize - 1, currentPage.rows.length);
147
105
  }
148
106
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
149
107
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
150
108
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
151
- const computeSizeAndPublishResizeEvent = React.useCallback(() => {
152
- const mainEl = apiRef.current.mainElementRef?.current;
153
- if (!mainEl) {
154
- return;
155
- }
156
- const win = ownerWindow(mainEl);
157
- const computedStyle = win.getComputedStyle(mainEl);
158
- const height = parseFloat(computedStyle.height) || 0;
159
- const width = parseFloat(computedStyle.width) || 0;
160
- const hasHeightChanged = height !== previousSize.current?.height;
161
- const hasWidthChanged = width !== previousSize.current?.width;
162
- if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
163
- const size = {
164
- width,
165
- height
109
+ const updateDimensions = React.useCallback(() => {
110
+ const rootElement = apiRef.current.rootElementRef.current;
111
+ const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
112
+ const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
113
+ const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
114
+ const bottomContainerHeight = pinnedRowsHeight.bottom;
115
+ const contentSize = {
116
+ width: columnsTotalWidth,
117
+ height: rowsMeta.currentPageTotalHeight
118
+ };
119
+ let viewportOuterSize;
120
+ let viewportInnerSize;
121
+ let hasScrollX = false;
122
+ let hasScrollY = false;
123
+ if (props.autoHeight) {
124
+ hasScrollY = false;
125
+ hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
126
+ viewportOuterSize = {
127
+ width: rootDimensionsRef.current.width,
128
+ height: topContainerHeight + bottomContainerHeight + contentSize.height
166
129
  };
167
- apiRef.current.publishEvent('resize', size);
168
- previousSize.current = size;
130
+ viewportInnerSize = {
131
+ width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
132
+ height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
133
+ };
134
+ } else {
135
+ viewportOuterSize = {
136
+ width: rootDimensionsRef.current.width,
137
+ height: rootDimensionsRef.current.height
138
+ };
139
+ viewportInnerSize = {
140
+ width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
141
+ height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
142
+ };
143
+ const content = contentSize;
144
+ const container = viewportInnerSize;
145
+ const hasScrollXIfNoYScrollBar = content.width > container.width;
146
+ const hasScrollYIfNoXScrollBar = content.height > container.height;
147
+ if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
148
+ hasScrollY = hasScrollYIfNoXScrollBar;
149
+ hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
150
+
151
+ // We recalculate the scroll y to consider the size of the x scrollbar.
152
+ if (hasScrollX) {
153
+ hasScrollY = content.height + scrollbarSize > container.height;
154
+ }
155
+ }
156
+ if (hasScrollY) {
157
+ viewportInnerSize.width -= scrollbarSize;
158
+ }
159
+ if (hasScrollX) {
160
+ viewportInnerSize.height -= scrollbarSize;
161
+ }
169
162
  }
170
- }, [apiRef]);
171
- const dimensionsApi = {
163
+ const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
164
+ const minimumSize = {
165
+ width: contentSize.width,
166
+ height: topContainerHeight + contentSize.height + bottomContainerHeight
167
+ };
168
+ const newDimensions = {
169
+ isReady: true,
170
+ root: rootDimensionsRef.current,
171
+ viewportOuterSize,
172
+ viewportInnerSize,
173
+ contentSize,
174
+ minimumSize,
175
+ hasScrollX,
176
+ hasScrollY,
177
+ scrollbarSize,
178
+ headerHeight,
179
+ rowWidth,
180
+ rowHeight,
181
+ columnsTotalWidth,
182
+ leftPinnedWidth,
183
+ rightPinnedWidth,
184
+ headersTotalHeight,
185
+ topContainerHeight,
186
+ bottomContainerHeight
187
+ };
188
+ const prevDimensions = apiRef.current.state.dimensions;
189
+ setDimensions(newDimensions);
190
+ if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
191
+ apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
192
+ }
193
+ apiRef.current.updateRenderContext?.();
194
+ }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
195
+ const apiPublic = {
172
196
  resize,
173
197
  getRootDimensions
174
198
  };
175
- const dimensionsPrivateApi = {
176
- getViewportPageSize,
177
- updateGridDimensionsRef,
178
- computeSizeAndPublishResizeEvent
199
+ const apiPrivate = {
200
+ updateDimensions,
201
+ getViewportPageSize
179
202
  };
180
- useGridApiMethod(apiRef, dimensionsApi, 'public');
181
- useGridApiMethod(apiRef, dimensionsPrivateApi, 'private');
203
+ useGridApiMethod(apiRef, apiPublic, 'public');
204
+ useGridApiMethod(apiRef, apiPrivate, 'private');
205
+ useEnhancedEffect(() => {
206
+ if (savedSize) {
207
+ updateDimensions();
208
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
209
+ }
210
+ }, [apiRef, savedSize, updateDimensions]);
211
+ const root = apiRef.current.rootElementRef.current;
212
+ const dimensions = apiRef.current.state.dimensions;
213
+ useEnhancedEffect(() => {
214
+ if (!root) {
215
+ return;
216
+ }
217
+ const set = (k, v) => root.style.setProperty(k, v);
218
+ set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
219
+ set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
220
+ set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
221
+ set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
222
+ set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
223
+ set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
224
+ set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
225
+ set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
226
+ set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
227
+ set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
228
+ set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
229
+ set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
230
+ }, [root, dimensions]);
182
231
  const isFirstSizing = React.useRef(true);
183
232
  const handleResize = React.useCallback(size => {
184
233
  rootDimensionsRef.current = size;
@@ -193,12 +242,6 @@ export function useGridDimensions(apiRef, props) {
193
242
  logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
194
243
  errorShown.current = true;
195
244
  }
196
- if (isTestEnvironment) {
197
- // We don't need to debounce the resize for tests.
198
- setSavedSize(size);
199
- isFirstSizing.current = false;
200
- return;
201
- }
202
245
  if (isFirstSizing.current) {
203
246
  // We want to initialize the grid dimensions as soon as possible to avoid flickering
204
247
  setSavedSize(size);
@@ -207,10 +250,35 @@ export function useGridDimensions(apiRef, props) {
207
250
  }
208
251
  debouncedSetSavedSize(size);
209
252
  }, [props.autoHeight, debouncedSetSavedSize, logger]);
210
- useEnhancedEffect(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
211
- useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
212
- useGridApiOptionHandler(apiRef, 'paginationModelChange', updateGridDimensionsRef);
213
- useGridApiOptionHandler(apiRef, 'columnsChange', updateGridDimensionsRef);
253
+ useEnhancedEffect(updateDimensions, [updateDimensions]);
254
+ useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);
255
+ useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);
256
+ useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);
214
257
  useGridApiEventHandler(apiRef, 'resize', handleResize);
215
258
  useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
259
+ }
260
+ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
261
+ if (scrollbarSize !== undefined) {
262
+ return scrollbarSize;
263
+ }
264
+ if (rootElement === null || columnsTotalWidth === 0) {
265
+ return 0;
266
+ }
267
+ const doc = ownerDocument(rootElement);
268
+ const scrollDiv = doc.createElement('div');
269
+ scrollDiv.style.width = '99px';
270
+ scrollDiv.style.height = '99px';
271
+ scrollDiv.style.position = 'absolute';
272
+ scrollDiv.style.overflow = 'scroll';
273
+ scrollDiv.className = 'scrollDiv';
274
+ rootElement.appendChild(scrollDiv);
275
+ const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
276
+ rootElement.removeChild(scrollDiv);
277
+ return size;
278
+ }
279
+
280
+ // Get rid of floating point imprecision errors
281
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
282
+ function roundToDecimalPlaces(value, decimals) {
283
+ return Math.round(value * 10 ** decimals) / 10 ** decimals;
216
284
  }
@@ -14,7 +14,7 @@ import { buildWarning } from '../../../utils/warning';
14
14
  import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector';
15
15
  import { deepClone } from '../../../utils/utils';
16
16
  import { GridCellEditStartReasons, GridCellEditStopReasons } from '../../../models/params/gridEditCellParams';
17
- const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
17
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
18
18
  export const useGridCellEditing = (apiRef, props) => {
19
19
  const [cellModesModel, setCellModesModel] = React.useState({});
20
20
  const cellModesModelRef = React.useRef(cellModesModel);
@@ -33,12 +33,12 @@ export const useGridCellEditing = (apiRef, props) => {
33
33
  const throwIfNotEditable = React.useCallback((id, field) => {
34
34
  const params = apiRef.current.getCellParams(id, field);
35
35
  if (!apiRef.current.isCellEditable(params)) {
36
- throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);
36
+ throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);
37
37
  }
38
38
  }, [apiRef]);
39
39
  const throwIfNotInMode = React.useCallback((id, field, mode) => {
40
40
  if (apiRef.current.getCellMode(id, field) !== mode) {
41
- throw new Error(`MUI: The cell with id=${id} and field=${field} is not in ${mode} mode.`);
41
+ throw new Error(`MUI X: The cell with id=${id} and field=${field} is not in ${mode} mode.`);
42
42
  }
43
43
  }, [apiRef]);
44
44
  const handleCellDoubleClick = React.useCallback((params, event) => {
@@ -302,7 +302,7 @@ export const useGridCellEditing = (apiRef, props) => {
302
302
  });
303
303
  if (onProcessRowUpdateError) {
304
304
  onProcessRowUpdateError(errorThrown);
305
- } else {
305
+ } else if (process.env.NODE_ENV !== 'production') {
306
306
  missingOnProcessRowUpdateErrorWarning();
307
307
  }
308
308
  };
@@ -16,7 +16,7 @@ import { gridRowsDataRowIdToIdLookupSelector } from '../rows/gridRowsSelector';
16
16
  import { deepClone } from '../../../utils/utils';
17
17
  import { GridRowEditStopReasons, GridRowEditStartReasons } from '../../../models/params/gridRowParams';
18
18
  import { GRID_ACTIONS_COLUMN_TYPE } from '../../../colDef';
19
- const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
19
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');
20
20
  export const useGridRowEditing = (apiRef, props) => {
21
21
  const [rowModesModel, setRowModesModel] = React.useState({});
22
22
  const rowModesModelRef = React.useRef(rowModesModel);
@@ -37,12 +37,12 @@ export const useGridRowEditing = (apiRef, props) => {
37
37
  const throwIfNotEditable = React.useCallback((id, field) => {
38
38
  const params = apiRef.current.getCellParams(id, field);
39
39
  if (!apiRef.current.isCellEditable(params)) {
40
- throw new Error(`MUI: The cell with id=${id} and field=${field} is not editable.`);
40
+ throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);
41
41
  }
42
42
  }, [apiRef]);
43
43
  const throwIfNotInMode = React.useCallback((id, mode) => {
44
44
  if (apiRef.current.getRowMode(id) !== mode) {
45
- throw new Error(`MUI: The row with id=${id} is not in ${mode} mode.`);
45
+ throw new Error(`MUI X: The row with id=${id} is not in ${mode} mode.`);
46
46
  }
47
47
  }, [apiRef]);
48
48
  const handleCellDoubleClick = React.useCallback((params, event) => {
@@ -379,7 +379,7 @@ export const useGridRowEditing = (apiRef, props) => {
379
379
  });
380
380
  if (onProcessRowUpdateError) {
381
381
  onProcessRowUpdateError(errorThrown);
382
- } else {
382
+ } else if (process.env.NODE_ENV !== 'production') {
383
383
  missingOnProcessRowUpdateErrorWarning();
384
384
  }
385
385
  };
@@ -32,7 +32,7 @@ export const serializeCellValue = (cellParams, options) => {
32
32
  }
33
33
  return sanitizeCellValue(value, delimiterCharacter);
34
34
  };
35
- const objectFormattedValueWarning = buildWarning(['MUI: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
35
+ const objectFormattedValueWarning = buildWarning(['MUI X: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
36
36
  class CSVRow {
37
37
  constructor(options) {
38
38
  this.options = void 0;
@@ -104,10 +104,10 @@ export function buildCSV(options) {
104
104
  const filteredColumns = columns.filter(column => column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field);
105
105
  const headerRows = [];
106
106
  if (includeColumnGroupsHeaders) {
107
- const columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
107
+ const columnGroupLookup = apiRef.current.getAllGroupDetails();
108
108
  let maxColumnGroupsDepth = 0;
109
109
  const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {
110
- const columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
110
+ const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
111
111
  acc[column.field] = columnGroupPath;
112
112
  maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
113
113
  return acc;
@@ -206,7 +206,7 @@ export const useGridPrintExport = (apiRef, props) => {
206
206
  const exportDataAsPrint = React.useCallback(async options => {
207
207
  logger.debug(`Export data as Print`);
208
208
  if (!apiRef.current.rootElementRef.current) {
209
- throw new Error('MUI: No grid root element available.');
209
+ throw new Error('MUI X: No grid root element available.');
210
210
  }
211
211
  previousGridState.current = apiRef.current.exportState();
212
212
  // It appends that the visibility model is not exported, especially if columnVisibility is not controlled
@@ -36,9 +36,9 @@ export const cleanFilterItem = (item, apiRef) => {
36
36
  }
37
37
  return cleanItem;
38
38
  };
39
- const filterModelDisableMultiColumnsFilteringWarning = buildWarning(['MUI: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
40
- const filterModelMissingItemIdWarning = buildWarning('MUI: The `id` field is required on `filterModel.items` when you use multiple filters.', 'error');
41
- const filterModelMissingItemOperatorWarning = buildWarning('MUI: The `operator` field is required on `filterModel.items`, one or more of your filtering item has no `operator` provided.', 'error');
39
+ const filterModelDisableMultiColumnsFilteringWarning = buildWarning(['MUI X: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
40
+ const filterModelMissingItemIdWarning = buildWarning('MUI X: The `id` field is required on `filterModel.items` when you use multiple filters.', 'error');
41
+ const filterModelMissingItemOperatorWarning = buildWarning('MUI X: The `operator` field is required on `filterModel.items`, one or more of your filtering item has no `operator` provided.', 'error');
42
42
  export const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiRef) => {
43
43
  const hasSeveralItems = model.items.length > 1;
44
44
  let items;
@@ -103,11 +103,11 @@ const getFilterCallbackFromItem = (filterItem, apiRef) => {
103
103
  });
104
104
  const filterOperators = column.filterOperators;
105
105
  if (!filterOperators?.length) {
106
- throw new Error(`MUI: No filter operators found for column '${column.field}'.`);
106
+ throw new Error(`MUI X: No filter operators found for column '${column.field}'.`);
107
107
  }
108
108
  const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operator);
109
109
  if (!filterOperator) {
110
- throw new Error(`MUI: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operator}'.`);
110
+ throw new Error(`MUI X: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operator}'.`);
111
111
  }
112
112
  const publicApiRef = getPublicApiRef(apiRef);
113
113
  const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);
@@ -6,7 +6,7 @@ import { useLazyRef } from '../../utils/useLazyRef';
6
6
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
7
7
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
8
8
  import { useGridLogger } from '../../utils/useGridLogger';
9
- import { gridFilterableColumnLookupSelector } from '../columns/gridColumnsSelector';
9
+ import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
10
10
  import { GridPreferencePanelsValue } from '../preferencesPanel/gridPreferencePanelsValue';
11
11
  import { getDefaultGridFilterModel } from './gridFilterState';
12
12
  import { gridFilterModelSelector } from './gridFilterSelector';
@@ -309,8 +309,8 @@ export const useGridFilter = (apiRef, props) => {
309
309
  const handleColumnsChange = React.useCallback(() => {
310
310
  logger.debug('onColUpdated - GridColumns changed, applying filters');
311
311
  const filterModel = gridFilterModelSelector(apiRef);
312
- const filterableColumnsLookup = gridFilterableColumnLookupSelector(apiRef);
313
- const newFilterItems = filterModel.items.filter(item => item.field && filterableColumnsLookup[item.field]);
312
+ const columnsLookup = gridColumnLookupSelector(apiRef);
313
+ const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);
314
314
  if (newFilterItems.length < filterModel.items.length) {
315
315
  apiRef.current.setFilterModel(_extends({}, filterModel, {
316
316
  items: newFilterItems
@@ -3,13 +3,9 @@ export const gridFocusStateSelector = state => state.focus;
3
3
  export const gridFocusCellSelector = createSelector(gridFocusStateSelector, focusState => focusState.cell);
4
4
  export const gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeader);
5
5
  export const gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);
6
-
7
- // eslint-disable-next-line @typescript-eslint/naming-convention
8
- export const unstable_gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
6
+ export const gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
9
7
  export const gridTabIndexStateSelector = state => state.tabIndex;
10
8
  export const gridTabIndexCellSelector = createSelector(gridTabIndexStateSelector, state => state.cell);
11
9
  export const gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeader);
12
10
  export const gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeaderFilter);
13
-
14
- // eslint-disable-next-line @typescript-eslint/naming-convention
15
- export const unstable_gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
11
+ export const gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);
@@ -6,7 +6,7 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
6
  import { useGridLogger } from '../../utils/useGridLogger';
7
7
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
8
  import { isNavigationKey } from '../../../utils/keyboardUtils';
9
- import { gridFocusCellSelector, unstable_gridFocusColumnGroupHeaderSelector } from './gridFocusStateSelector';
9
+ import { gridFocusCellSelector, gridFocusColumnGroupHeaderSelector } from './gridFocusStateSelector';
10
10
  import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
11
11
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
12
12
  import { clamp } from '../../../utils/utils';
@@ -164,7 +164,7 @@ export const useGridFocus = (apiRef, props) => {
164
164
  });
165
165
  apiRef.current.forceUpdate();
166
166
  }, [apiRef]);
167
- const getColumnGroupHeaderFocus = React.useCallback(() => unstable_gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);
167
+ const getColumnGroupHeaderFocus = React.useCallback(() => gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);
168
168
  const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {
169
169
  let columnIndexToFocus = apiRef.current.getColumnIndex(field);
170
170
  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
@@ -244,7 +244,7 @@ export const useGridFocus = (apiRef, props) => {
244
244
  if (event.target !== event.currentTarget) {
245
245
  return;
246
246
  }
247
- const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
247
+ const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
248
248
  if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {
249
249
  // This group cell has already been focused
250
250
  return;