@mui/x-data-grid 7.0.0-alpha.8 → 7.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/CHANGELOG.md +508 -30
  2. package/DataGrid/DataGrid.js +6 -6
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +3 -3
  6. package/components/GridColumnHeaders.d.ts +3 -2
  7. package/components/GridColumnHeaders.js +3 -11
  8. package/components/GridDetailPanels.d.ts +5 -0
  9. package/components/GridDetailPanels.js +4 -0
  10. package/components/GridHeaders.d.ts +4 -0
  11. package/components/GridHeaders.js +53 -0
  12. package/components/GridPinnedRows.d.ts +7 -0
  13. package/components/GridPinnedRows.js +4 -0
  14. package/components/GridRow.d.ts +7 -4
  15. package/components/GridRow.js +161 -97
  16. package/components/GridScrollbarFillerCell.d.ts +7 -0
  17. package/components/GridScrollbarFillerCell.js +39 -0
  18. package/components/base/GridBody.d.ts +2 -13
  19. package/components/base/GridBody.js +2 -116
  20. package/components/base/GridOverlays.js +10 -21
  21. package/components/cell/GridActionsCellItem.d.ts +2 -2
  22. package/components/cell/GridCell.d.ts +15 -21
  23. package/components/cell/GridCell.js +67 -372
  24. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  25. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  26. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  27. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  28. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  29. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  30. package/components/columnsManagement/GridColumnsManagement.d.ts +36 -0
  31. package/components/columnsManagement/GridColumnsManagement.js +260 -0
  32. package/components/columnsManagement/index.d.ts +1 -0
  33. package/components/columnsManagement/index.js +1 -0
  34. package/components/columnsManagement/utils.d.ts +4 -0
  35. package/components/columnsManagement/utils.js +16 -0
  36. package/components/containers/GridRoot.js +18 -15
  37. package/components/containers/GridRootStyles.js +307 -204
  38. package/components/index.d.ts +1 -0
  39. package/components/index.js +1 -0
  40. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  41. package/components/panel/GridColumnsPanel.d.ts +0 -28
  42. package/components/panel/GridColumnsPanel.js +5 -213
  43. package/components/panel/GridPanel.js +3 -4
  44. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  45. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  46. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  47. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  48. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  49. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  50. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  51. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  52. package/components/toolbar/GridToolbarExport.js +6 -1
  53. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  54. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  55. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  56. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  57. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  58. package/components/virtualization/GridBottomContainer.js +25 -0
  59. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  60. package/components/virtualization/GridMainContainer.js +20 -0
  61. package/components/virtualization/GridTopContainer.d.ts +2 -0
  62. package/components/virtualization/GridTopContainer.js +35 -0
  63. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  64. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  65. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  66. package/components/virtualization/GridVirtualScroller.js +69 -16
  67. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  68. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  69. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  70. package/constants/defaultGridSlotsComponents.js +8 -3
  71. package/constants/gridClasses.d.ts +72 -12
  72. package/constants/gridClasses.js +1 -1
  73. package/constants/localeTextConstants.js +4 -6
  74. package/hooks/core/gridCoreSelector.d.ts +6 -0
  75. package/hooks/core/gridCoreSelector.js +5 -0
  76. package/hooks/core/useGridApiInitialization.js +4 -0
  77. package/hooks/core/useGridInitialization.js +4 -0
  78. package/hooks/core/useGridRefs.d.ts +3 -0
  79. package/hooks/core/useGridRefs.js +13 -0
  80. package/hooks/core/useGridTheme.d.ts +3 -0
  81. package/hooks/core/useGridTheme.js +19 -0
  82. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  83. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  84. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  85. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  86. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  87. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  88. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  89. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  90. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  91. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  92. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  93. package/hooks/features/columns/index.d.ts +2 -2
  94. package/hooks/features/columns/index.js +2 -1
  95. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  96. package/hooks/features/columns/useGridColumns.js +20 -23
  97. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  98. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  99. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  100. package/hooks/features/dimensions/index.d.ts +2 -0
  101. package/hooks/features/dimensions/index.js +1 -0
  102. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  103. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  104. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  105. package/hooks/features/filter/useGridFilter.js +3 -3
  106. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  107. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  108. package/hooks/features/focus/useGridFocus.js +3 -3
  109. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  110. package/hooks/features/pagination/useGridPagination.js +3 -5
  111. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  112. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  113. package/hooks/features/rows/gridRowsSelector.js +5 -5
  114. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  115. package/hooks/features/rows/gridRowsUtils.js +8 -5
  116. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  117. package/hooks/features/scroll/useGridScroll.js +8 -10
  118. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  119. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  120. package/hooks/features/sorting/useGridSorting.js +15 -10
  121. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  122. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  123. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  124. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  125. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  126. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  127. package/hooks/utils/index.d.ts +3 -0
  128. package/hooks/utils/index.js +4 -1
  129. package/hooks/utils/useGridAriaAttributes.js +1 -2
  130. package/hooks/utils/useGridNativeEventListener.js +4 -9
  131. package/hooks/utils/useResizeObserver.d.ts +2 -0
  132. package/hooks/utils/useResizeObserver.js +36 -0
  133. package/hooks/utils/useRunOnce.d.ts +5 -0
  134. package/hooks/utils/useRunOnce.js +18 -0
  135. package/index.js +1 -1
  136. package/internals/index.d.ts +12 -9
  137. package/internals/index.js +9 -7
  138. package/legacy/DataGrid/DataGrid.js +6 -6
  139. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  140. package/legacy/DataGrid/useDataGridProps.js +1 -0
  141. package/legacy/components/GridColumnHeaders.js +3 -11
  142. package/legacy/components/GridDetailPanels.js +4 -0
  143. package/legacy/components/GridHeaders.js +53 -0
  144. package/legacy/components/GridPinnedRows.js +4 -0
  145. package/legacy/components/GridRow.js +159 -98
  146. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  147. package/legacy/components/base/GridBody.js +2 -114
  148. package/legacy/components/base/GridOverlays.js +10 -25
  149. package/legacy/components/cell/GridCell.js +69 -377
  150. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  151. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  152. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  153. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  154. package/legacy/components/columnsManagement/GridColumnsManagement.js +300 -0
  155. package/legacy/components/columnsManagement/index.js +1 -0
  156. package/legacy/components/columnsManagement/utils.js +22 -0
  157. package/legacy/components/containers/GridRoot.js +18 -15
  158. package/legacy/components/containers/GridRootStyles.js +215 -137
  159. package/legacy/components/index.js +1 -0
  160. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  161. package/legacy/components/panel/GridColumnsPanel.js +5 -233
  162. package/legacy/components/panel/GridPanel.js +3 -4
  163. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  164. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  165. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  166. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  167. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  168. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  169. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  170. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  171. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  172. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  173. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  174. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  175. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  176. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  177. package/legacy/constants/defaultGridSlotsComponents.js +8 -3
  178. package/legacy/constants/gridClasses.js +1 -1
  179. package/legacy/constants/localeTextConstants.js +4 -6
  180. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  181. package/legacy/hooks/core/useGridApiInitialization.js +4 -0
  182. package/legacy/hooks/core/useGridInitialization.js +4 -0
  183. package/legacy/hooks/core/useGridRefs.js +13 -0
  184. package/legacy/hooks/core/useGridTheme.js +21 -0
  185. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  186. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  187. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  188. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  189. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  190. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  191. package/legacy/hooks/features/columns/index.js +2 -1
  192. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  193. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  194. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  195. package/legacy/hooks/features/dimensions/index.js +1 -0
  196. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  197. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  198. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  199. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  200. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  201. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  202. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  203. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  204. package/legacy/hooks/features/rows/gridRowsUtils.js +8 -5
  205. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  206. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  207. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  208. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  209. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  210. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  211. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  212. package/legacy/hooks/utils/index.js +4 -1
  213. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  214. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  215. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  216. package/legacy/hooks/utils/useRunOnce.js +18 -0
  217. package/legacy/index.js +1 -1
  218. package/legacy/internals/index.js +9 -7
  219. package/legacy/locales/arSD.js +5 -6
  220. package/legacy/locales/beBY.js +5 -6
  221. package/legacy/locales/bgBG.js +5 -6
  222. package/legacy/locales/csCZ.js +5 -6
  223. package/legacy/locales/daDK.js +5 -6
  224. package/legacy/locales/deDE.js +5 -6
  225. package/legacy/locales/elGR.js +5 -6
  226. package/legacy/locales/esES.js +5 -6
  227. package/legacy/locales/faIR.js +5 -6
  228. package/legacy/locales/fiFI.js +5 -6
  229. package/legacy/locales/frFR.js +5 -6
  230. package/legacy/locales/heIL.js +5 -6
  231. package/legacy/locales/hrHR.js +160 -0
  232. package/legacy/locales/huHU.js +5 -6
  233. package/legacy/locales/index.js +4 -1
  234. package/legacy/locales/itIT.js +5 -6
  235. package/legacy/locales/jaJP.js +5 -6
  236. package/legacy/locales/koKR.js +5 -6
  237. package/legacy/locales/nbNO.js +5 -6
  238. package/legacy/locales/nlNL.js +5 -6
  239. package/legacy/locales/plPL.js +5 -6
  240. package/legacy/locales/ptBR.js +5 -6
  241. package/legacy/locales/ptPT.js +160 -0
  242. package/legacy/locales/roRO.js +5 -6
  243. package/legacy/locales/ruRU.js +5 -6
  244. package/legacy/locales/skSK.js +5 -6
  245. package/legacy/locales/svSE.js +5 -6
  246. package/legacy/locales/trTR.js +5 -6
  247. package/legacy/locales/ukUA.js +5 -6
  248. package/legacy/locales/urPK.js +5 -6
  249. package/legacy/locales/viVN.js +5 -6
  250. package/legacy/locales/zhCN.js +5 -6
  251. package/legacy/locales/zhHK.js +160 -0
  252. package/legacy/locales/zhTW.js +5 -6
  253. package/legacy/models/index.js +0 -1
  254. package/legacy/models/params/index.js +1 -2
  255. package/legacy/utils/utils.js +10 -1
  256. package/locales/arSD.js +5 -6
  257. package/locales/beBY.js +5 -6
  258. package/locales/bgBG.js +5 -6
  259. package/locales/csCZ.js +5 -6
  260. package/locales/daDK.js +5 -6
  261. package/locales/deDE.js +5 -6
  262. package/locales/elGR.js +5 -6
  263. package/locales/esES.js +5 -6
  264. package/locales/faIR.js +5 -6
  265. package/locales/fiFI.js +5 -6
  266. package/locales/frFR.js +5 -6
  267. package/locales/heIL.js +5 -6
  268. package/locales/hrHR.d.ts +1 -0
  269. package/locales/hrHR.js +148 -0
  270. package/locales/huHU.js +5 -6
  271. package/locales/index.d.ts +3 -0
  272. package/locales/index.js +4 -1
  273. package/locales/itIT.js +5 -6
  274. package/locales/jaJP.js +5 -6
  275. package/locales/koKR.js +5 -6
  276. package/locales/nbNO.js +5 -6
  277. package/locales/nlNL.js +5 -6
  278. package/locales/plPL.js +5 -6
  279. package/locales/ptBR.js +5 -6
  280. package/locales/ptPT.d.ts +1 -0
  281. package/locales/ptPT.js +148 -0
  282. package/locales/roRO.js +5 -6
  283. package/locales/ruRU.js +5 -6
  284. package/locales/skSK.js +5 -6
  285. package/locales/svSE.js +5 -6
  286. package/locales/trTR.js +5 -6
  287. package/locales/ukUA.js +5 -6
  288. package/locales/urPK.js +5 -6
  289. package/locales/viVN.js +5 -6
  290. package/locales/zhCN.js +5 -6
  291. package/locales/zhHK.d.ts +1 -0
  292. package/locales/zhHK.js +148 -0
  293. package/locales/zhTW.js +5 -6
  294. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  295. package/models/api/gridCoreApi.d.ts +16 -16
  296. package/models/api/gridLocaleTextApi.d.ts +3 -5
  297. package/models/api/gridRowsMetaApi.d.ts +1 -1
  298. package/models/api/gridVirtualizationApi.d.ts +2 -3
  299. package/models/colDef/gridColType.d.ts +11 -2
  300. package/models/events/gridEventLookup.d.ts +3 -3
  301. package/models/gridFilterModel.d.ts +1 -1
  302. package/models/gridSlotsComponent.d.ts +21 -2
  303. package/models/gridSlotsComponentsProps.d.ts +4 -0
  304. package/models/gridStateCommunity.d.ts +5 -1
  305. package/models/index.d.ts +0 -1
  306. package/models/index.js +0 -1
  307. package/models/params/index.d.ts +0 -1
  308. package/models/params/index.js +1 -2
  309. package/models/props/DataGridProps.d.ts +6 -11
  310. package/modern/DataGrid/DataGrid.js +6 -6
  311. package/modern/DataGrid/useDataGridComponent.js +2 -1
  312. package/modern/DataGrid/useDataGridProps.js +1 -0
  313. package/modern/components/GridColumnHeaders.js +3 -11
  314. package/modern/components/GridDetailPanels.js +4 -0
  315. package/modern/components/GridHeaders.js +53 -0
  316. package/modern/components/GridPinnedRows.js +4 -0
  317. package/modern/components/GridRow.js +159 -96
  318. package/modern/components/GridScrollbarFillerCell.js +39 -0
  319. package/modern/components/base/GridBody.js +2 -116
  320. package/modern/components/base/GridOverlays.js +10 -16
  321. package/modern/components/cell/GridCell.js +65 -369
  322. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  323. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  324. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  325. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  326. package/modern/components/columnsManagement/GridColumnsManagement.js +256 -0
  327. package/modern/components/columnsManagement/index.js +1 -0
  328. package/modern/components/columnsManagement/utils.js +16 -0
  329. package/modern/components/containers/GridRoot.js +18 -14
  330. package/modern/components/containers/GridRootStyles.js +307 -204
  331. package/modern/components/index.js +1 -0
  332. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  333. package/modern/components/panel/GridColumnsPanel.js +4 -209
  334. package/modern/components/panel/GridPanel.js +3 -4
  335. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  336. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  337. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  338. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  339. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  340. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  341. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  342. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  343. package/modern/components/virtualization/GridMainContainer.js +20 -0
  344. package/modern/components/virtualization/GridTopContainer.js +35 -0
  345. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  346. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  347. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  348. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  349. package/modern/constants/defaultGridSlotsComponents.js +8 -3
  350. package/modern/constants/gridClasses.js +1 -1
  351. package/modern/constants/localeTextConstants.js +4 -6
  352. package/modern/hooks/core/gridCoreSelector.js +5 -0
  353. package/modern/hooks/core/useGridApiInitialization.js +3 -0
  354. package/modern/hooks/core/useGridInitialization.js +4 -0
  355. package/modern/hooks/core/useGridRefs.js +13 -0
  356. package/modern/hooks/core/useGridTheme.js +19 -0
  357. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  358. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  359. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  360. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  361. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  362. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  363. package/modern/hooks/features/columns/index.js +2 -1
  364. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  365. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  366. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  367. package/modern/hooks/features/dimensions/index.js +1 -0
  368. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  369. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  370. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  371. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  372. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  373. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  374. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  375. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  376. package/modern/hooks/features/rows/gridRowsUtils.js +8 -5
  377. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  378. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  379. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  380. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  381. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  382. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  383. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  384. package/modern/hooks/utils/index.js +4 -1
  385. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  386. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  387. package/modern/hooks/utils/useResizeObserver.js +36 -0
  388. package/modern/hooks/utils/useRunOnce.js +18 -0
  389. package/modern/index.js +1 -1
  390. package/modern/internals/index.js +9 -7
  391. package/modern/locales/arSD.js +5 -6
  392. package/modern/locales/beBY.js +5 -6
  393. package/modern/locales/bgBG.js +5 -6
  394. package/modern/locales/csCZ.js +5 -6
  395. package/modern/locales/daDK.js +5 -6
  396. package/modern/locales/deDE.js +5 -6
  397. package/modern/locales/elGR.js +5 -6
  398. package/modern/locales/esES.js +5 -6
  399. package/modern/locales/faIR.js +5 -6
  400. package/modern/locales/fiFI.js +5 -6
  401. package/modern/locales/frFR.js +5 -6
  402. package/modern/locales/heIL.js +5 -6
  403. package/modern/locales/hrHR.js +148 -0
  404. package/modern/locales/huHU.js +5 -6
  405. package/modern/locales/index.js +4 -1
  406. package/modern/locales/itIT.js +5 -6
  407. package/modern/locales/jaJP.js +5 -6
  408. package/modern/locales/koKR.js +5 -6
  409. package/modern/locales/nbNO.js +5 -6
  410. package/modern/locales/nlNL.js +5 -6
  411. package/modern/locales/plPL.js +5 -6
  412. package/modern/locales/ptBR.js +5 -6
  413. package/modern/locales/ptPT.js +148 -0
  414. package/modern/locales/roRO.js +5 -6
  415. package/modern/locales/ruRU.js +5 -6
  416. package/modern/locales/skSK.js +5 -6
  417. package/modern/locales/svSE.js +5 -6
  418. package/modern/locales/trTR.js +5 -6
  419. package/modern/locales/ukUA.js +5 -6
  420. package/modern/locales/urPK.js +5 -6
  421. package/modern/locales/viVN.js +5 -6
  422. package/modern/locales/zhCN.js +5 -6
  423. package/modern/locales/zhHK.js +148 -0
  424. package/modern/locales/zhTW.js +5 -6
  425. package/modern/models/index.js +0 -1
  426. package/modern/models/params/index.js +1 -2
  427. package/modern/utils/utils.js +10 -1
  428. package/node/DataGrid/DataGrid.js +6 -6
  429. package/node/DataGrid/useDataGridComponent.js +1 -0
  430. package/node/DataGrid/useDataGridProps.js +1 -0
  431. package/node/components/GridColumnHeaders.js +3 -11
  432. package/node/components/GridDetailPanels.js +10 -0
  433. package/node/components/GridHeaders.js +60 -0
  434. package/node/components/GridPinnedRows.js +10 -0
  435. package/node/components/GridRow.js +157 -94
  436. package/node/components/GridScrollbarFillerCell.js +47 -0
  437. package/node/components/base/GridBody.js +7 -118
  438. package/node/components/base/GridOverlays.js +9 -15
  439. package/node/components/cell/GridCell.js +66 -369
  440. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  441. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  442. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  443. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  444. package/node/components/columnsManagement/GridColumnsManagement.js +264 -0
  445. package/node/components/columnsManagement/index.js +16 -0
  446. package/node/components/columnsManagement/utils.js +24 -0
  447. package/node/components/containers/GridRoot.js +17 -14
  448. package/node/components/containers/GridRootStyles.js +175 -72
  449. package/node/components/index.js +11 -0
  450. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  451. package/node/components/panel/GridColumnsPanel.js +4 -208
  452. package/node/components/panel/GridPanel.js +3 -4
  453. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  454. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  455. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  456. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  457. package/node/components/toolbar/GridToolbarExport.js +6 -1
  458. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  459. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  460. package/node/components/virtualization/GridBottomContainer.js +34 -0
  461. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  462. package/node/components/virtualization/GridTopContainer.js +44 -0
  463. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  464. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  465. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  466. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  467. package/node/constants/defaultGridSlotsComponents.js +6 -1
  468. package/node/constants/gridClasses.js +1 -1
  469. package/node/constants/localeTextConstants.js +4 -6
  470. package/node/hooks/core/gridCoreSelector.js +12 -0
  471. package/node/hooks/core/useGridApiInitialization.js +3 -0
  472. package/node/hooks/core/useGridInitialization.js +4 -0
  473. package/node/hooks/core/useGridRefs.js +22 -0
  474. package/node/hooks/core/useGridTheme.js +29 -0
  475. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  476. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  477. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  478. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  479. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  480. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  481. package/node/hooks/features/columns/index.js +22 -61
  482. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  483. package/node/hooks/features/columns/useGridColumns.js +20 -22
  484. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  485. package/node/hooks/features/dimensions/index.js +11 -0
  486. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  487. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  488. package/node/hooks/features/filter/useGridFilter.js +2 -2
  489. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  490. package/node/hooks/features/focus/useGridFocus.js +2 -2
  491. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  492. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  493. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  494. package/node/hooks/features/rows/gridRowsUtils.js +8 -5
  495. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  496. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  497. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  498. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  499. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  500. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  501. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  502. package/node/hooks/utils/index.js +36 -0
  503. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  504. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  505. package/node/hooks/utils/useResizeObserver.js +44 -0
  506. package/node/hooks/utils/useRunOnce.js +27 -0
  507. package/node/index.js +1 -1
  508. package/node/internals/index.js +86 -71
  509. package/node/locales/arSD.js +5 -6
  510. package/node/locales/beBY.js +5 -6
  511. package/node/locales/bgBG.js +5 -6
  512. package/node/locales/csCZ.js +5 -6
  513. package/node/locales/daDK.js +5 -6
  514. package/node/locales/deDE.js +5 -6
  515. package/node/locales/elGR.js +5 -6
  516. package/node/locales/esES.js +5 -6
  517. package/node/locales/faIR.js +5 -6
  518. package/node/locales/fiFI.js +5 -6
  519. package/node/locales/frFR.js +5 -6
  520. package/node/locales/heIL.js +5 -6
  521. package/node/locales/hrHR.js +154 -0
  522. package/node/locales/huHU.js +5 -6
  523. package/node/locales/index.js +33 -0
  524. package/node/locales/itIT.js +5 -6
  525. package/node/locales/jaJP.js +5 -6
  526. package/node/locales/koKR.js +5 -6
  527. package/node/locales/nbNO.js +5 -6
  528. package/node/locales/nlNL.js +5 -6
  529. package/node/locales/plPL.js +5 -6
  530. package/node/locales/ptBR.js +5 -6
  531. package/node/locales/ptPT.js +154 -0
  532. package/node/locales/roRO.js +5 -6
  533. package/node/locales/ruRU.js +5 -6
  534. package/node/locales/skSK.js +5 -6
  535. package/node/locales/svSE.js +5 -6
  536. package/node/locales/trTR.js +5 -6
  537. package/node/locales/ukUA.js +5 -6
  538. package/node/locales/urPK.js +5 -6
  539. package/node/locales/viVN.js +5 -6
  540. package/node/locales/zhCN.js +5 -6
  541. package/node/locales/zhHK.js +154 -0
  542. package/node/locales/zhTW.js +5 -6
  543. package/node/models/index.js +0 -11
  544. package/node/models/params/index.js +0 -11
  545. package/node/utils/utils.js +11 -1
  546. package/package.json +6 -6
  547. package/utils/utils.d.ts +6 -0
  548. package/utils/utils.js +10 -1
  549. package/components/DataGridVirtualScroller.d.ts +0 -3
  550. package/components/DataGridVirtualScroller.js +0 -35
  551. package/components/containers/GridMainContainer.js +0 -43
  552. package/legacy/components/DataGridVirtualScroller.js +0 -32
  553. package/legacy/components/containers/GridMainContainer.js +0 -45
  554. package/legacy/models/gridRootContainerRef.js +0 -1
  555. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  556. package/models/gridRootContainerRef.d.ts +0 -5
  557. package/models/gridRootContainerRef.js +0 -1
  558. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  559. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  560. package/modern/components/DataGridVirtualScroller.js +0 -35
  561. package/modern/components/containers/GridMainContainer.js +0 -42
  562. package/modern/models/gridRootContainerRef.js +0 -1
  563. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  564. package/node/components/DataGridVirtualScroller.js +0 -42
  565. package/node/models/gridRootContainerRef.js +0 -5
  566. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["selected", "hovered", "rowId", "row", "index", "style", "position", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "isLastVisible", "focusedCellColumnIndexNotInRange", "isNotVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
3
+ const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "renderedColumns", "pinnedColumns", "dimensions", "firstColumnToRender", "lastColumnToRender", "isFirstVisible", "isLastVisible", "focusedCellColumnIndexNotInRange", "isNotVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -10,7 +10,7 @@ import { GridEditModes, GridRowModes, GridCellModes } from '../models/gridEditRo
10
10
  import { useGridApiContext } from '../hooks/utils/useGridApiContext';
11
11
  import { getDataGridUtilityClass, gridClasses } from '../constants/gridClasses';
12
12
  import { useGridRootProps } from '../hooks/utils/useGridRootProps';
13
- import { gridColumnsTotalWidthSelector } from '../hooks/features/columns/gridColumnsSelector';
13
+ import { gridColumnPositionsSelector } from '../hooks/features/columns/gridColumnsSelector';
14
14
  import { useGridSelector, objectShallowCompare } from '../hooks/utils/useGridSelector';
15
15
  import { useGridVisibleRows } from '../hooks/utils/useGridVisibleRows';
16
16
  import { findParentElementFromClassName, isEventTargetInPortal } from '../utils/domUtils';
@@ -20,9 +20,10 @@ import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../constants/gridDetailPanelTogg
20
20
  import { gridSortModelSelector } from '../hooks/features/sorting/gridSortingSelector';
21
21
  import { gridRowMaximumTreeDepthSelector } from '../hooks/features/rows/gridRowsSelector';
22
22
  import { gridColumnGroupsHeaderMaxDepthSelector } from '../hooks/features/columnGrouping/gridColumnGroupsSelector';
23
- import { randomNumberBetween } from '../utils/utils';
24
- import { GridCellWrapper, GridCellV7 } from './cell/GridCell';
25
23
  import { gridEditRowsStateSelector } from '../hooks/features/editing/gridEditingSelectors';
24
+ import { randomNumberBetween } from '../utils/utils';
25
+ import { PinnedPosition } from './cell/GridCell';
26
+ import { GridScrollbarFillerCell as ScrollbarFiller } from './GridScrollbarFillerCell';
26
27
  import { jsx as _jsx } from "react/jsx-runtime";
27
28
  import { jsxs as _jsxs } from "react/jsx-runtime";
28
29
  const useUtilityClasses = ownerState => {
@@ -30,12 +31,15 @@ const useUtilityClasses = ownerState => {
30
31
  editable,
31
32
  editing,
32
33
  selected,
34
+ isFirstVisible,
33
35
  isLastVisible,
34
36
  rowHeight,
35
37
  classes
36
38
  } = ownerState;
37
39
  const slots = {
38
- root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isLastVisible && 'row--lastVisible', rowHeight === 'auto' && 'row--dynamicHeight']
40
+ root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', rowHeight === 'auto' && 'row--dynamicHeight'],
41
+ pinnedLeft: ['pinnedLeft'],
42
+ pinnedRight: ['pinnedRight']
39
43
  };
40
44
  return composeClasses(slots, getDataGridUtilityClass, classes);
41
45
  };
@@ -45,30 +49,30 @@ function EmptyCell({
45
49
  if (!width) {
46
50
  return null;
47
51
  }
48
- const style = {
49
- width
50
- };
51
52
  return /*#__PURE__*/_jsx("div", {
52
- className: `${gridClasses.cell} ${gridClasses.withBorderColor}`,
53
- style: style
54
- }); // TODO change to .MuiDataGrid-emptyCell or .MuiDataGrid-rowFiller
53
+ role: "presentation",
54
+ className: clsx(gridClasses.cell, gridClasses.cellEmpty),
55
+ style: {
56
+ '--width': `${width}px`
57
+ }
58
+ });
55
59
  }
56
60
  const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
57
61
  const {
58
62
  selected,
59
- hovered,
60
63
  rowId,
61
64
  row,
62
65
  index,
63
66
  style: styleProp,
64
- position,
65
67
  rowHeight,
66
68
  className,
67
69
  visibleColumns,
68
70
  renderedColumns,
69
- containerWidth,
71
+ pinnedColumns,
72
+ dimensions,
70
73
  firstColumnToRender,
71
- isLastVisible = false,
74
+ isFirstVisible,
75
+ isLastVisible,
72
76
  focusedCellColumnIndexNotInRange,
73
77
  isNotVisible,
74
78
  focusedCell,
@@ -84,17 +88,19 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
84
88
  const ref = React.useRef(null);
85
89
  const rootProps = useGridRootProps();
86
90
  const currentPage = useGridVisibleRows(apiRef, rootProps);
87
- const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
88
91
  const sortModel = useGridSelector(apiRef, gridSortModelSelector);
89
92
  const treeDepth = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector);
90
93
  const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);
94
+ const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
91
95
  const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);
92
96
  const handleRef = useForkRef(ref, refProp);
97
+ const rowNode = apiRef.current.getRowNode(rowId);
98
+ const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
93
99
  const ariaRowIndex = index + headerGroupingMaxDepth + 2; // 1 for the header row and 1 as it's 1-based
94
100
 
95
101
  const ownerState = {
96
102
  selected,
97
- hovered,
103
+ isFirstVisible,
98
104
  isLastVisible,
99
105
  classes: rootProps.classes,
100
106
  editing: apiRef.current.getRowMode(rowId) === GridRowModes.Edit,
@@ -105,9 +111,9 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
105
111
  React.useLayoutEffect(() => {
106
112
  if (rowHeight === 'auto' && ref.current && typeof ResizeObserver === 'undefined') {
107
113
  // Fallback for IE
108
- apiRef.current.unstable_storeRowHeightMeasurement(rowId, ref.current.clientHeight, position);
114
+ apiRef.current.unstable_storeRowHeightMeasurement(rowId, ref.current.clientHeight);
109
115
  }
110
- }, [apiRef, rowHeight, rowId, position]);
116
+ }, [apiRef, rowHeight, rowId]);
111
117
  React.useLayoutEffect(() => {
112
118
  if (currentPage.range) {
113
119
  // The index prop is relative to the rows from all pages. As example, the index prop of the
@@ -129,11 +135,11 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
129
135
  const resizeObserver = new ResizeObserver(entries => {
130
136
  const [entry] = entries;
131
137
  const height = entry.borderBoxSize && entry.borderBoxSize.length > 0 ? entry.borderBoxSize[0].blockSize : entry.contentRect.height;
132
- apiRef.current.unstable_storeRowHeightMeasurement(rowId, height, position);
138
+ apiRef.current.unstable_storeRowHeightMeasurement(rowId, height);
133
139
  });
134
140
  resizeObserver.observe(rootElement);
135
141
  return () => resizeObserver.disconnect();
136
- }, [apiRef, currentPage.range, index, rowHeight, rowId, position]);
142
+ }, [apiRef, currentPage.range, index, rowHeight, rowId]);
137
143
  const publish = React.useCallback((eventName, propHandler) => event => {
138
144
  // Ignore portal
139
145
  if (isEventTargetInPortal(event)) {
@@ -189,51 +195,13 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
189
195
  slotProps,
190
196
  disableColumnReorder
191
197
  } = rootProps;
192
- const CellComponent = slots.cell === GridCellV7 ? GridCellV7 : GridCellWrapper;
193
198
  const rowReordering = rootProps.rowReordering;
194
- const getCell = (column, cellProps) => {
195
- var _editRowsState$rowId$, _editRowsState$rowId;
196
- // when the cell is a reorder cell we are not allowing to reorder the col
197
- // fixes https://github.com/mui/mui-x/issues/11126
198
- const isReorderCell = column.field === '__reorder__';
199
- const isEditingRows = Object.keys(editRowsState).length > 0;
200
- const canReorderColumn = !(disableColumnReorder || column.disableReorder);
201
- const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
202
- const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
203
- const editCellState = (_editRowsState$rowId$ = (_editRowsState$rowId = editRowsState[rowId]) == null ? void 0 : _editRowsState$rowId[column.field]) != null ? _editRowsState$rowId$ : null;
204
- let cellIsNotVisible = false;
205
- if (focusedCellColumnIndexNotInRange !== undefined && visibleColumns[focusedCellColumnIndexNotInRange].field === column.field) {
206
- cellIsNotVisible = true;
207
- }
208
- return /*#__PURE__*/_jsx(CellComponent, _extends({
209
- column: column,
210
- width: cellProps.width,
211
- rowId: rowId,
212
- height: rowHeight,
213
- showRightBorder: cellProps.showRightBorder,
214
- align: column.align || 'left',
215
- colIndex: cellProps.indexRelativeToAllColumns,
216
- colSpan: cellProps.colSpan,
217
- disableDragEvents: disableDragEvents,
218
- editCellState: editCellState,
219
- isNotVisible: cellIsNotVisible
220
- }, slotProps == null ? void 0 : slotProps.cell), column.field);
221
- };
222
199
  const sizes = useGridSelector(apiRef, () => _extends({}, apiRef.current.unstable_getRowInternalSizes(rowId)), objectShallowCompare);
223
200
  let minHeight = rowHeight;
224
201
  if (minHeight === 'auto' && sizes) {
225
- let numberOfBaseSizes = 0;
226
- const maximumSize = Object.entries(sizes).reduce((acc, [key, size]) => {
227
- const isBaseHeight = /^base[A-Z]/.test(key);
228
- if (!isBaseHeight) {
229
- return acc;
230
- }
231
- numberOfBaseSizes += 1;
232
- if (size > acc) {
233
- return size;
234
- }
235
- return acc;
236
- }, 0);
202
+ var _sizes$baseCenter;
203
+ const numberOfBaseSizes = 1;
204
+ const maximumSize = (_sizes$baseCenter = sizes.baseCenter) != null ? _sizes$baseCenter : 0;
237
205
  if (maximumSize > 0 && numberOfBaseSizes > 1) {
238
206
  minHeight = maximumSize;
239
207
  }
@@ -279,11 +247,89 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
279
247
  rowClassNames.push(rootProps.getRowClassName(rowParams));
280
248
  }
281
249
  const randomNumber = randomNumberBetween(10000, 20, 80);
282
- const rowNode = apiRef.current.getRowNode(rowId);
250
+ const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedPosition.NONE) => {
251
+ var _editRowsState$rowId$, _editRowsState$rowId;
252
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
253
+ if (!cellColSpanInfo || cellColSpanInfo.spannedByColSpan) {
254
+ return null;
255
+ }
256
+ let pinnedOffset;
257
+ // FIXME: Why is the switch check exhaustiveness not validated with typescript-eslint?
258
+ // eslint-disable-next-line default-case
259
+ switch (pinnedPosition) {
260
+ case PinnedPosition.LEFT:
261
+ pinnedOffset = columnPositions[indexRelativeToAllColumns];
262
+ break;
263
+ case PinnedPosition.RIGHT:
264
+ pinnedOffset = dimensions.columnsTotalWidth - columnPositions[indexRelativeToAllColumns] - column.computedWidth + scrollbarWidth;
265
+ break;
266
+ case PinnedPosition.NONE:
267
+ pinnedOffset = 0;
268
+ break;
269
+ }
270
+ if ((rowNode == null ? void 0 : rowNode.type) === 'skeletonRow') {
271
+ const {
272
+ width
273
+ } = cellColSpanInfo.cellProps;
274
+ const contentWidth = Math.round(randomNumber());
275
+ return /*#__PURE__*/_jsx(slots.skeletonCell, {
276
+ width: width,
277
+ contentWidth: contentWidth,
278
+ field: column.field,
279
+ align: column.align
280
+ }, column.field);
281
+ }
282
+ const {
283
+ colSpan,
284
+ width
285
+ } = cellColSpanInfo.cellProps;
286
+ const editCellState = (_editRowsState$rowId$ = (_editRowsState$rowId = editRowsState[rowId]) == null ? void 0 : _editRowsState$rowId[column.field]) != null ? _editRowsState$rowId$ : null;
287
+
288
+ // when the cell is a reorder cell we are not allowing to reorder the col
289
+ // fixes https://github.com/mui/mui-x/issues/11126
290
+ const isReorderCell = column.field === '__reorder__';
291
+ const isEditingRows = Object.keys(editRowsState).length > 0;
292
+ const canReorderColumn = !(disableColumnReorder || column.disableReorder);
293
+ const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
294
+ const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
295
+ let cellIsNotVisible = false;
296
+ if (focusedCellColumnIndexNotInRange !== undefined && visibleColumns[focusedCellColumnIndexNotInRange].field === column.field) {
297
+ cellIsNotVisible = true;
298
+ }
299
+ return /*#__PURE__*/_jsx(slots.cell, _extends({
300
+ column: column,
301
+ width: width,
302
+ rowId: rowId,
303
+ height: rowHeight,
304
+ align: column.align || 'left',
305
+ colIndex: indexRelativeToAllColumns,
306
+ colSpan: colSpan,
307
+ disableDragEvents: disableDragEvents,
308
+ editCellState: editCellState,
309
+ isNotVisible: cellIsNotVisible
310
+ }, slotProps == null ? void 0 : slotProps.cell, {
311
+ pinnedOffset: pinnedOffset,
312
+ pinnedPosition: pinnedPosition,
313
+ sectionIndex: indexInSection,
314
+ sectionLength: sectionLength,
315
+ gridHasScrollX: dimensions.hasScrollX
316
+ }), column.field);
317
+ };
318
+
319
+ /* Start of rendering */
320
+
283
321
  if (!rowNode) {
284
322
  return null;
285
323
  }
286
- const rowType = rowNode.type;
324
+ const leftCells = pinnedColumns.left.map((column, i) => {
325
+ const indexRelativeToAllColumns = i;
326
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedPosition.LEFT);
327
+ });
328
+ const rightCells = pinnedColumns.right.map((column, i) => {
329
+ const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
330
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedPosition.RIGHT);
331
+ });
332
+ const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
287
333
  const cells = [];
288
334
  for (let i = 0; i < renderedColumns.length; i += 1) {
289
335
  const column = renderedColumns[i];
@@ -295,35 +341,9 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
295
341
  indexRelativeToAllColumns -= 1;
296
342
  }
297
343
  }
298
- const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
299
- if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
300
- if (rowType !== 'skeletonRow') {
301
- const {
302
- colSpan,
303
- width
304
- } = cellColSpanInfo.cellProps;
305
- const cellProps = {
306
- width,
307
- colSpan,
308
- showRightBorder: rootProps.showCellVerticalBorder,
309
- indexRelativeToAllColumns
310
- };
311
- cells.push(getCell(column, cellProps));
312
- } else {
313
- const {
314
- width
315
- } = cellColSpanInfo.cellProps;
316
- const contentWidth = Math.round(randomNumber());
317
- cells.push( /*#__PURE__*/_jsx(slots.skeletonCell, {
318
- width: width,
319
- contentWidth: contentWidth,
320
- field: column.field,
321
- align: column.align
322
- }, column.field));
323
- }
324
- }
344
+ const indexInSection = indexRelativeToAllColumns - pinnedColumns.left.length;
345
+ cells.push(getCell(column, indexInSection, indexRelativeToAllColumns, middleColumnsLength));
325
346
  }
326
- const emptyCellWidth = containerWidth - columnsTotalWidth;
327
347
  const eventHandlers = row ? {
328
348
  onClick: publishClick,
329
349
  onDoubleClick: publish('rowDoubleClick', onDoubleClick),
@@ -332,18 +352,27 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
332
352
  onMouseOut: publish('rowMouseOut', onMouseOut),
333
353
  onMouseOver: publish('rowMouseOver', onMouseOver)
334
354
  } : null;
355
+ const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth - scrollbarWidth;
356
+ const emptyCellWidth = Math.max(0, expandedWidth);
335
357
  return /*#__PURE__*/_jsxs("div", _extends({
336
358
  ref: handleRef,
337
359
  "data-id": rowId,
338
360
  "data-rowindex": index,
339
361
  role: "row",
340
- className: clsx(...rowClassNames, classes.root, className, hovered && 'Mui-hovered'),
362
+ className: clsx(...rowClassNames, classes.root, className),
341
363
  "aria-rowindex": ariaRowIndex,
342
364
  "aria-selected": selected,
343
365
  style: style
344
366
  }, eventHandlers, other, {
345
- children: [cells, emptyCellWidth > 0 && /*#__PURE__*/_jsx(EmptyCell, {
367
+ children: [leftCells, cells, emptyCellWidth > 0 && /*#__PURE__*/_jsx(EmptyCell, {
346
368
  width: emptyCellWidth
369
+ }), rightCells.length > 0 && /*#__PURE__*/_jsx("div", {
370
+ role: "presentation",
371
+ style: {
372
+ flex: '1'
373
+ }
374
+ }), rightCells, scrollbarWidth !== 0 && /*#__PURE__*/_jsx(ScrollbarFiller, {
375
+ pinnedRight: pinnedColumns.right.length > 0
347
376
  })]
348
377
  }));
349
378
  });
@@ -352,7 +381,41 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
352
381
  // | These PropTypes are generated from the TypeScript type definitions |
353
382
  // | To update them edit the TypeScript types and run "yarn proptypes" |
354
383
  // ----------------------------------------------------------------------
355
- containerWidth: PropTypes.number.isRequired,
384
+ dimensions: PropTypes.shape({
385
+ bottomContainerHeight: PropTypes.number.isRequired,
386
+ columnsTotalWidth: PropTypes.number.isRequired,
387
+ contentSize: PropTypes.shape({
388
+ height: PropTypes.number.isRequired,
389
+ width: PropTypes.number.isRequired
390
+ }).isRequired,
391
+ hasScrollX: PropTypes.bool.isRequired,
392
+ hasScrollY: PropTypes.bool.isRequired,
393
+ headerHeight: PropTypes.number.isRequired,
394
+ headersTotalHeight: PropTypes.number.isRequired,
395
+ isReady: PropTypes.bool.isRequired,
396
+ leftPinnedWidth: PropTypes.number.isRequired,
397
+ minimumSize: PropTypes.shape({
398
+ height: PropTypes.number.isRequired,
399
+ width: PropTypes.number.isRequired
400
+ }).isRequired,
401
+ rightPinnedWidth: PropTypes.number.isRequired,
402
+ root: PropTypes.shape({
403
+ height: PropTypes.number.isRequired,
404
+ width: PropTypes.number.isRequired
405
+ }).isRequired,
406
+ rowHeight: PropTypes.number.isRequired,
407
+ rowWidth: PropTypes.number.isRequired,
408
+ scrollbarSize: PropTypes.number.isRequired,
409
+ topContainerHeight: PropTypes.number.isRequired,
410
+ viewportInnerSize: PropTypes.shape({
411
+ height: PropTypes.number.isRequired,
412
+ width: PropTypes.number.isRequired
413
+ }).isRequired,
414
+ viewportOuterSize: PropTypes.shape({
415
+ height: PropTypes.number.isRequired,
416
+ width: PropTypes.number.isRequired
417
+ }).isRequired
418
+ }).isRequired,
356
419
  firstColumnToRender: PropTypes.number.isRequired,
357
420
  /**
358
421
  * Determines which cell has focus.
@@ -365,14 +428,15 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
365
428
  * If some rows above have expanded children, this index also take those children into account.
366
429
  */
367
430
  index: PropTypes.number.isRequired,
368
- isLastVisible: PropTypes.bool,
431
+ isFirstVisible: PropTypes.bool.isRequired,
432
+ isLastVisible: PropTypes.bool.isRequired,
369
433
  isNotVisible: PropTypes.bool,
370
434
  lastColumnToRender: PropTypes.number.isRequired,
371
435
  onClick: PropTypes.func,
372
436
  onDoubleClick: PropTypes.func,
373
437
  onMouseEnter: PropTypes.func,
374
438
  onMouseLeave: PropTypes.func,
375
- position: PropTypes.oneOf(['center', 'left', 'right']).isRequired,
439
+ pinnedColumns: PropTypes.object.isRequired,
376
440
  renderedColumns: PropTypes.arrayOf(PropTypes.object).isRequired,
377
441
  row: PropTypes.object,
378
442
  rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ declare function GridScrollbarFillerCell({ header, borderTop, pinnedRight, }: {
3
+ header?: boolean;
4
+ borderTop?: boolean;
5
+ pinnedRight?: boolean;
6
+ }): React.JSX.Element;
7
+ export { GridScrollbarFillerCell };
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import { styled } from '@mui/material/styles';
4
+ import { getDataGridUtilityClass as getClassName } from '../constants';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ const classes = {
7
+ root: getClassName('scrollbarFiller'),
8
+ header: getClassName('scrollbarFiller--header'),
9
+ borderTop: getClassName('scrollbarFiller--borderTop'),
10
+ pinnedRight: getClassName('scrollbarFiller--pinnedRight')
11
+ };
12
+ const Style = styled('div')({
13
+ minWidth: 'calc(var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize))',
14
+ alignSelf: 'stretch',
15
+ [`&.${classes.borderTop}`]: {
16
+ borderTop: '1px solid var(--DataGrid-rowBorderColor)'
17
+ },
18
+ [`&.${classes.pinnedRight}`]: {
19
+ backgroundColor: 'var(--DataGrid-pinnedBackground)'
20
+ },
21
+ [`&.${classes.pinnedRight}:not(.${classes.header})`]: {
22
+ position: 'sticky',
23
+ right: 0
24
+ },
25
+ [`&:not(.${classes.header}):not(.${classes.pinnedRight})`]: {
26
+ transform: 'translate3d(var(--DataGrid-offsetLeft), 0, 0)'
27
+ }
28
+ });
29
+ function GridScrollbarFillerCell({
30
+ header,
31
+ borderTop = true,
32
+ pinnedRight
33
+ }) {
34
+ return /*#__PURE__*/_jsx(Style, {
35
+ role: "presentation",
36
+ className: clsx(classes.root, header && classes.header, borderTop && classes.borderTop, pinnedRight && classes.pinnedRight)
37
+ });
38
+ }
39
+ export { GridScrollbarFillerCell };
@@ -1,13 +1,2 @@
1
- import * as React from 'react';
2
- interface GridBodyProps {
3
- children?: React.ReactNode;
4
- ColumnHeadersProps?: Record<string, any>;
5
- VirtualScrollerComponent: React.JSXElementConstructor<React.HTMLAttributes<HTMLDivElement> & {
6
- ref: React.Ref<HTMLDivElement>;
7
- }>;
8
- }
9
- declare function GridBody(props: GridBodyProps): React.JSX.Element;
10
- declare namespace GridBody {
11
- var propTypes: any;
12
- }
13
- export { GridBody };
1
+ import { GridVirtualScroller } from '../virtualization/GridVirtualScroller';
2
+ export { GridVirtualScroller as GridBody };
@@ -1,116 +1,2 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import * as React from 'react';
3
- import PropTypes from 'prop-types';
4
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
5
- import { useGridPrivateApiContext } from '../../hooks/utils/useGridPrivateApiContext';
6
- import { useGridSelector } from '../../hooks/utils/useGridSelector';
7
- import { GridMainContainer } from '../containers/GridMainContainer';
8
- import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
9
- import { gridColumnPositionsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector } from '../../hooks/features/columns/gridColumnsSelector';
10
- import { gridFilterActiveItemsLookupSelector } from '../../hooks/features/filter/gridFilterSelector';
11
- import { gridSortColumnLookupSelector } from '../../hooks/features/sorting/gridSortingSelector';
12
- import { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector, unstable_gridTabIndexColumnGroupHeaderSelector, unstable_gridFocusColumnGroupHeaderSelector } from '../../hooks/features/focus/gridFocusStateSelector';
13
- import { gridDensityFactorSelector } from '../../hooks/features/density/densitySelector';
14
- import { gridColumnGroupsHeaderMaxDepthSelector, gridColumnGroupsHeaderStructureSelector } from '../../hooks/features/columnGrouping/gridColumnGroupsSelector';
15
- import { gridColumnMenuSelector } from '../../hooks/features/columnMenu/columnMenuSelector';
16
- import { jsx as _jsx } from "react/jsx-runtime";
17
- import { jsxs as _jsxs } from "react/jsx-runtime";
18
- function GridBody(props) {
19
- const {
20
- VirtualScrollerComponent,
21
- ColumnHeadersProps,
22
- children
23
- } = props;
24
- const apiRef = useGridPrivateApiContext();
25
- const rootProps = useGridRootProps();
26
- const rootRef = React.useRef(null);
27
- const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
28
- const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
29
- const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
30
- const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
31
- const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
32
- const cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);
33
- const columnGroupHeaderTabIndexState = useGridSelector(apiRef, unstable_gridTabIndexColumnGroupHeaderSelector);
34
- const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
35
- const columnGroupHeaderFocus = useGridSelector(apiRef, unstable_gridFocusColumnGroupHeaderSelector);
36
- const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
37
- const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);
38
- const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
39
- const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
40
- const columnGroupsHeaderStructure = useGridSelector(apiRef, gridColumnGroupsHeaderStructureSelector);
41
- const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && cellTabIndexState === null);
42
- useEnhancedEffect(() => {
43
- apiRef.current.computeSizeAndPublishResizeEvent();
44
- const elementToObserve = rootRef.current;
45
- if (typeof ResizeObserver === 'undefined') {
46
- return () => {};
47
- }
48
- let animationFrame;
49
- const observer = new ResizeObserver(() => {
50
- // See https://github.com/mui/mui-x/issues/8733
51
- animationFrame = requestAnimationFrame(() => {
52
- apiRef.current.computeSizeAndPublishResizeEvent();
53
- });
54
- });
55
- if (elementToObserve) {
56
- observer.observe(elementToObserve);
57
- }
58
- return () => {
59
- if (animationFrame) {
60
- window.cancelAnimationFrame(animationFrame);
61
- }
62
- if (elementToObserve) {
63
- observer.unobserve(elementToObserve);
64
- }
65
- };
66
- }, [apiRef]);
67
- const columnHeadersRef = React.useRef(null);
68
- const columnsContainerRef = React.useRef(null);
69
- const virtualScrollerRef = React.useRef(null);
70
- apiRef.current.register('private', {
71
- columnHeadersContainerElementRef: columnsContainerRef,
72
- columnHeadersElementRef: columnHeadersRef,
73
- virtualScrollerRef,
74
- mainElementRef: rootRef
75
- });
76
- const hasDimensions = !!apiRef.current.getRootDimensions();
77
- return /*#__PURE__*/_jsxs(GridMainContainer, {
78
- ref: rootRef,
79
- children: [/*#__PURE__*/_jsx(rootProps.slots.columnHeaders, _extends({
80
- ref: columnsContainerRef,
81
- innerRef: columnHeadersRef,
82
- visibleColumns: visibleColumns,
83
- filterColumnLookup: filterColumnLookup,
84
- sortColumnLookup: sortColumnLookup,
85
- columnPositions: columnPositions,
86
- columnHeaderTabIndexState: columnHeaderTabIndexState,
87
- columnGroupHeaderTabIndexState: columnGroupHeaderTabIndexState,
88
- columnHeaderFocus: columnHeaderFocus,
89
- columnGroupHeaderFocus: columnGroupHeaderFocus,
90
- densityFactor: densityFactor,
91
- headerGroupingMaxDepth: headerGroupingMaxDepth,
92
- columnMenuState: columnMenuState,
93
- columnVisibility: columnVisibility,
94
- columnGroupsHeaderStructure: columnGroupsHeaderStructure,
95
- hasOtherElementInTabSequence: hasOtherElementInTabSequence
96
- }, ColumnHeadersProps)), hasDimensions && /*#__PURE__*/_jsx(VirtualScrollerComponent
97
- // The content is only rendered after dimensions are computed because
98
- // the lazy-loading hook is listening to `renderedRowsIntervalChange`,
99
- // but only does something if the dimensions are also available.
100
- // If this event is published while dimensions haven't been computed,
101
- // the `onFetchRows` prop won't be called during mount.
102
- , {
103
- ref: virtualScrollerRef
104
- }), children]
105
- });
106
- }
107
- process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
108
- // ----------------------------- Warning --------------------------------
109
- // | These PropTypes are generated from the TypeScript type definitions |
110
- // | To update them edit the TypeScript types and run "yarn proptypes" |
111
- // ----------------------------------------------------------------------
112
- children: PropTypes.node,
113
- ColumnHeadersProps: PropTypes.object,
114
- VirtualScrollerComponent: PropTypes.elementType.isRequired
115
- } : void 0;
116
- export { GridBody };
1
+ import { GridVirtualScroller } from '../virtualization/GridVirtualScroller';
2
+ export { GridVirtualScroller as GridBody };
@@ -2,13 +2,15 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { styled } from '@mui/system';
5
- import { unstable_composeClasses as composeClasses, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
5
+ import { unstable_composeClasses as composeClasses } from '@mui/utils';
6
6
  import clsx from 'clsx';
7
7
  import { useGridSelector } from '../../hooks/utils/useGridSelector';
8
8
  import { gridExpandedRowCountSelector } from '../../hooks/features/filter/gridFilterSelector';
9
9
  import { gridRowCountSelector, gridRowsLoadingSelector } from '../../hooks/features/rows/gridRowsSelector';
10
+ import { gridDimensionsSelector } from '../../hooks/features/dimensions';
10
11
  import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
11
12
  import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
13
+ import { useGridVisibleRows } from '../../hooks/utils/useGridVisibleRows';
12
14
  import { getMinimalContentHeight } from '../../hooks/features/rows/gridRowsUtils';
13
15
  import { getDataGridUtilityClass } from '../../constants/gridClasses';
14
16
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -22,7 +24,7 @@ const GridOverlayWrapperRoot = styled('div', {
22
24
  }) => ({
23
25
  position: 'sticky',
24
26
  // To stay in place while scrolling
25
- top: 0,
27
+ top: 'var(--DataGrid-headersTotalHeight)',
26
28
  left: 0,
27
29
  width: 0,
28
30
  // To stay above the content instead of shifting it down
@@ -48,30 +50,17 @@ const useUtilityClasses = ownerState => {
48
50
  return composeClasses(slots, getDataGridUtilityClass, classes);
49
51
  };
50
52
  function GridOverlayWrapper(props) {
51
- var _viewportInnerSize$he, _viewportInnerSize$wi;
52
53
  const apiRef = useGridApiContext();
53
54
  const rootProps = useGridRootProps();
54
- const [viewportInnerSize, setViewportInnerSize] = React.useState(() => {
55
- var _apiRef$current$getRo, _apiRef$current$getRo2;
56
- return (_apiRef$current$getRo = (_apiRef$current$getRo2 = apiRef.current.getRootDimensions()) == null ? void 0 : _apiRef$current$getRo2.viewportInnerSize) != null ? _apiRef$current$getRo : null;
57
- });
58
- const handleViewportSizeChange = React.useCallback(() => {
59
- var _apiRef$current$getRo3, _apiRef$current$getRo4;
60
- setViewportInnerSize((_apiRef$current$getRo3 = (_apiRef$current$getRo4 = apiRef.current.getRootDimensions()) == null ? void 0 : _apiRef$current$getRo4.viewportInnerSize) != null ? _apiRef$current$getRo3 : null);
61
- }, [apiRef]);
62
- useEnhancedEffect(() => {
63
- return apiRef.current.subscribeEvent('viewportInnerSizeChange', handleViewportSizeChange);
64
- }, [apiRef, handleViewportSizeChange]);
65
- let height = (_viewportInnerSize$he = viewportInnerSize == null ? void 0 : viewportInnerSize.height) != null ? _viewportInnerSize$he : 0;
66
- if (rootProps.autoHeight && height === 0) {
67
- height = getMinimalContentHeight(apiRef, rootProps.rowHeight); // Give room to show the overlay when there no rows.
55
+ const currentPage = useGridVisibleRows(apiRef, rootProps);
56
+ const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
57
+ let height = dimensions.viewportOuterSize.height - dimensions.headersTotalHeight - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
58
+ if (rootProps.autoHeight && currentPage.rows.length === 0 || height === 0) {
59
+ height = getMinimalContentHeight(apiRef);
68
60
  }
69
61
  const classes = useUtilityClasses(_extends({}, props, {
70
62
  classes: rootProps.classes
71
63
  }));
72
- if (!viewportInnerSize) {
73
- return null;
74
- }
75
64
  return /*#__PURE__*/_jsx(GridOverlayWrapperRoot, {
76
65
  className: clsx(classes.root),
77
66
  overlayType: props.overlayType,
@@ -79,7 +68,7 @@ function GridOverlayWrapper(props) {
79
68
  className: clsx(classes.inner),
80
69
  style: {
81
70
  height,
82
- width: (_viewportInnerSize$wi = viewportInnerSize == null ? void 0 : viewportInnerSize.width) != null ? _viewportInnerSize$wi : 0
71
+ width: dimensions.viewportOuterSize.width
83
72
  }
84
73
  }, props))
85
74
  });