@mui/x-data-grid 7.0.0-alpha.8 → 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 (410) hide show
  1. package/CHANGELOG.md +379 -2
  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 +1 -1
  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 +260 -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/containers/GridRoot.js +18 -15
  31. package/components/containers/GridRootStyles.js +307 -204
  32. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  33. package/components/panel/GridPanel.js +3 -4
  34. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  35. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  36. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  37. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  38. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  39. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  40. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  41. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  42. package/components/toolbar/GridToolbarExport.js +6 -1
  43. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  44. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  45. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  46. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  47. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  48. package/components/virtualization/GridBottomContainer.js +25 -0
  49. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  50. package/components/virtualization/GridMainContainer.js +20 -0
  51. package/components/virtualization/GridTopContainer.d.ts +2 -0
  52. package/components/virtualization/GridTopContainer.js +35 -0
  53. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  54. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  55. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  56. package/components/virtualization/GridVirtualScroller.js +69 -16
  57. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  58. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  59. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  60. package/constants/defaultGridSlotsComponents.js +6 -2
  61. package/constants/gridClasses.d.ts +60 -8
  62. package/constants/gridClasses.js +1 -1
  63. package/hooks/core/gridCoreSelector.d.ts +6 -0
  64. package/hooks/core/gridCoreSelector.js +5 -0
  65. package/hooks/core/useGridInitialization.js +4 -0
  66. package/hooks/core/useGridRefs.d.ts +3 -0
  67. package/hooks/core/useGridRefs.js +13 -0
  68. package/hooks/core/useGridTheme.d.ts +3 -0
  69. package/hooks/core/useGridTheme.js +19 -0
  70. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  71. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  72. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  73. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  74. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  75. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  76. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  77. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  78. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  79. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  80. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  81. package/hooks/features/columns/index.d.ts +2 -2
  82. package/hooks/features/columns/index.js +2 -1
  83. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  84. package/hooks/features/columns/useGridColumns.js +20 -23
  85. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  86. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  87. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  88. package/hooks/features/dimensions/index.d.ts +2 -0
  89. package/hooks/features/dimensions/index.js +1 -0
  90. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  91. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  92. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  93. package/hooks/features/filter/useGridFilter.js +3 -3
  94. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  95. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  96. package/hooks/features/focus/useGridFocus.js +3 -3
  97. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  98. package/hooks/features/pagination/useGridPagination.js +3 -5
  99. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  100. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  101. package/hooks/features/rows/gridRowsSelector.js +5 -5
  102. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  103. package/hooks/features/rows/gridRowsUtils.js +4 -4
  104. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  105. package/hooks/features/scroll/useGridScroll.js +8 -10
  106. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  107. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  108. package/hooks/features/sorting/useGridSorting.js +15 -10
  109. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  110. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  111. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  112. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  113. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  114. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  115. package/hooks/utils/index.d.ts +3 -0
  116. package/hooks/utils/index.js +4 -1
  117. package/hooks/utils/useGridAriaAttributes.js +1 -2
  118. package/hooks/utils/useGridNativeEventListener.js +4 -9
  119. package/hooks/utils/useResizeObserver.d.ts +2 -0
  120. package/hooks/utils/useResizeObserver.js +36 -0
  121. package/hooks/utils/useRunOnce.d.ts +5 -0
  122. package/hooks/utils/useRunOnce.js +18 -0
  123. package/index.js +1 -1
  124. package/internals/index.d.ts +12 -9
  125. package/internals/index.js +9 -7
  126. package/legacy/DataGrid/DataGrid.js +6 -6
  127. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  128. package/legacy/DataGrid/useDataGridProps.js +1 -0
  129. package/legacy/components/GridColumnHeaders.js +3 -11
  130. package/legacy/components/GridDetailPanels.js +4 -0
  131. package/legacy/components/GridHeaders.js +53 -0
  132. package/legacy/components/GridPinnedRows.js +4 -0
  133. package/legacy/components/GridRow.js +258 -98
  134. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  135. package/legacy/components/base/GridBody.js +2 -114
  136. package/legacy/components/base/GridOverlays.js +10 -25
  137. package/legacy/components/cell/GridCell.js +69 -377
  138. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  139. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  140. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  141. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  142. package/legacy/components/containers/GridRoot.js +18 -15
  143. package/legacy/components/containers/GridRootStyles.js +215 -137
  144. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  145. package/legacy/components/panel/GridPanel.js +3 -4
  146. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  147. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  148. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  149. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  150. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  151. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  152. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  153. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  154. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  155. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  156. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  157. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  158. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  159. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  160. package/legacy/constants/defaultGridSlotsComponents.js +6 -2
  161. package/legacy/constants/gridClasses.js +1 -1
  162. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  163. package/legacy/hooks/core/useGridInitialization.js +4 -0
  164. package/legacy/hooks/core/useGridRefs.js +13 -0
  165. package/legacy/hooks/core/useGridTheme.js +21 -0
  166. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  167. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  168. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  169. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  170. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  171. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  172. package/legacy/hooks/features/columns/index.js +2 -1
  173. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  174. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  175. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  176. package/legacy/hooks/features/dimensions/index.js +1 -0
  177. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  178. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  179. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  180. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  181. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  182. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  183. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  184. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  185. package/legacy/hooks/features/rows/gridRowsUtils.js +4 -4
  186. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  187. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  188. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  189. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  190. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  191. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  192. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  193. package/legacy/hooks/utils/index.js +4 -1
  194. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  195. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  196. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  197. package/legacy/hooks/utils/useRunOnce.js +18 -0
  198. package/legacy/index.js +1 -1
  199. package/legacy/internals/index.js +9 -7
  200. package/legacy/locales/hrHR.js +161 -0
  201. package/legacy/locales/index.js +4 -1
  202. package/legacy/locales/ptPT.js +161 -0
  203. package/legacy/locales/zhHK.js +161 -0
  204. package/legacy/models/index.js +0 -1
  205. package/legacy/models/params/index.js +1 -2
  206. package/legacy/utils/utils.js +10 -1
  207. package/locales/hrHR.d.ts +1 -0
  208. package/locales/hrHR.js +149 -0
  209. package/locales/index.d.ts +3 -0
  210. package/locales/index.js +4 -1
  211. package/locales/ptPT.d.ts +1 -0
  212. package/locales/ptPT.js +149 -0
  213. package/locales/zhHK.d.ts +1 -0
  214. package/locales/zhHK.js +149 -0
  215. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  216. package/models/api/gridCoreApi.d.ts +16 -16
  217. package/models/api/gridRowsMetaApi.d.ts +1 -1
  218. package/models/api/gridVirtualizationApi.d.ts +2 -3
  219. package/models/events/gridEventLookup.d.ts +3 -3
  220. package/models/gridFilterModel.d.ts +1 -1
  221. package/models/gridSlotsComponent.d.ts +16 -2
  222. package/models/gridStateCommunity.d.ts +5 -1
  223. package/models/index.d.ts +0 -1
  224. package/models/index.js +0 -1
  225. package/models/params/index.d.ts +0 -1
  226. package/models/params/index.js +1 -2
  227. package/models/props/DataGridProps.d.ts +6 -11
  228. package/modern/DataGrid/DataGrid.js +6 -6
  229. package/modern/DataGrid/useDataGridComponent.js +2 -1
  230. package/modern/DataGrid/useDataGridProps.js +1 -0
  231. package/modern/components/GridColumnHeaders.js +3 -11
  232. package/modern/components/GridDetailPanels.js +4 -0
  233. package/modern/components/GridHeaders.js +53 -0
  234. package/modern/components/GridPinnedRows.js +4 -0
  235. package/modern/components/GridRow.js +258 -96
  236. package/modern/components/GridScrollbarFillerCell.js +39 -0
  237. package/modern/components/base/GridBody.js +2 -116
  238. package/modern/components/base/GridOverlays.js +10 -16
  239. package/modern/components/cell/GridCell.js +65 -369
  240. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  241. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  242. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  243. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  244. package/modern/components/containers/GridRoot.js +18 -14
  245. package/modern/components/containers/GridRootStyles.js +307 -204
  246. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  247. package/modern/components/panel/GridPanel.js +3 -4
  248. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  249. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  250. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  251. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  252. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  253. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  254. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  255. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  256. package/modern/components/virtualization/GridMainContainer.js +20 -0
  257. package/modern/components/virtualization/GridTopContainer.js +35 -0
  258. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  259. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  260. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  261. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  262. package/modern/constants/defaultGridSlotsComponents.js +6 -2
  263. package/modern/constants/gridClasses.js +1 -1
  264. package/modern/hooks/core/gridCoreSelector.js +5 -0
  265. package/modern/hooks/core/useGridInitialization.js +4 -0
  266. package/modern/hooks/core/useGridRefs.js +13 -0
  267. package/modern/hooks/core/useGridTheme.js +19 -0
  268. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  269. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  270. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  271. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  272. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  273. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  274. package/modern/hooks/features/columns/index.js +2 -1
  275. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  276. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  277. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  278. package/modern/hooks/features/dimensions/index.js +1 -0
  279. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  280. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  281. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  282. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  283. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  284. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  285. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  286. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  287. package/modern/hooks/features/rows/gridRowsUtils.js +4 -4
  288. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  289. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  290. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  291. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  292. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  293. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  294. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  295. package/modern/hooks/utils/index.js +4 -1
  296. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  297. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  298. package/modern/hooks/utils/useResizeObserver.js +36 -0
  299. package/modern/hooks/utils/useRunOnce.js +18 -0
  300. package/modern/index.js +1 -1
  301. package/modern/internals/index.js +9 -7
  302. package/modern/locales/hrHR.js +149 -0
  303. package/modern/locales/index.js +4 -1
  304. package/modern/locales/ptPT.js +149 -0
  305. package/modern/locales/zhHK.js +149 -0
  306. package/modern/models/index.js +0 -1
  307. package/modern/models/params/index.js +1 -2
  308. package/modern/utils/utils.js +10 -1
  309. package/node/DataGrid/DataGrid.js +6 -6
  310. package/node/DataGrid/useDataGridComponent.js +1 -0
  311. package/node/DataGrid/useDataGridProps.js +1 -0
  312. package/node/components/GridColumnHeaders.js +3 -11
  313. package/node/components/GridDetailPanels.js +10 -0
  314. package/node/components/GridHeaders.js +60 -0
  315. package/node/components/GridPinnedRows.js +10 -0
  316. package/node/components/GridRow.js +256 -94
  317. package/node/components/GridScrollbarFillerCell.js +47 -0
  318. package/node/components/base/GridBody.js +7 -118
  319. package/node/components/base/GridOverlays.js +9 -15
  320. package/node/components/cell/GridCell.js +66 -369
  321. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  322. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  323. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  324. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  325. package/node/components/containers/GridRoot.js +17 -14
  326. package/node/components/containers/GridRootStyles.js +175 -72
  327. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  328. package/node/components/panel/GridPanel.js +3 -4
  329. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  330. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  331. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  332. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  333. package/node/components/toolbar/GridToolbarExport.js +6 -1
  334. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  335. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  336. package/node/components/virtualization/GridBottomContainer.js +34 -0
  337. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  338. package/node/components/virtualization/GridTopContainer.js +44 -0
  339. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  340. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  341. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  342. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  343. package/node/constants/defaultGridSlotsComponents.js +5 -1
  344. package/node/constants/gridClasses.js +1 -1
  345. package/node/hooks/core/gridCoreSelector.js +12 -0
  346. package/node/hooks/core/useGridInitialization.js +4 -0
  347. package/node/hooks/core/useGridRefs.js +22 -0
  348. package/node/hooks/core/useGridTheme.js +29 -0
  349. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  350. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  351. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  352. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  353. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  354. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  355. package/node/hooks/features/columns/index.js +22 -61
  356. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  357. package/node/hooks/features/columns/useGridColumns.js +20 -22
  358. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  359. package/node/hooks/features/dimensions/index.js +11 -0
  360. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  361. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  362. package/node/hooks/features/filter/useGridFilter.js +2 -2
  363. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  364. package/node/hooks/features/focus/useGridFocus.js +2 -2
  365. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  366. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  367. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  368. package/node/hooks/features/rows/gridRowsUtils.js +4 -4
  369. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  370. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  371. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  372. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  373. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  374. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  375. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  376. package/node/hooks/utils/index.js +36 -0
  377. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  378. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  379. package/node/hooks/utils/useResizeObserver.js +44 -0
  380. package/node/hooks/utils/useRunOnce.js +27 -0
  381. package/node/index.js +1 -1
  382. package/node/internals/index.js +86 -71
  383. package/node/locales/hrHR.js +155 -0
  384. package/node/locales/index.js +33 -0
  385. package/node/locales/ptPT.js +155 -0
  386. package/node/locales/zhHK.js +155 -0
  387. package/node/models/index.js +0 -11
  388. package/node/models/params/index.js +0 -11
  389. package/node/utils/utils.js +11 -1
  390. package/package.json +6 -6
  391. package/utils/utils.d.ts +6 -0
  392. package/utils/utils.js +10 -1
  393. package/components/DataGridVirtualScroller.d.ts +0 -3
  394. package/components/DataGridVirtualScroller.js +0 -35
  395. package/components/containers/GridMainContainer.js +0 -43
  396. package/legacy/components/DataGridVirtualScroller.js +0 -32
  397. package/legacy/components/containers/GridMainContainer.js +0 -45
  398. package/legacy/models/gridRootContainerRef.js +0 -1
  399. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  400. package/models/gridRootContainerRef.d.ts +0 -5
  401. package/models/gridRootContainerRef.js +0 -1
  402. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  403. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  404. package/modern/components/DataGridVirtualScroller.js +0 -35
  405. package/modern/components/containers/GridMainContainer.js +0 -42
  406. package/modern/models/gridRootContainerRef.js +0 -1
  407. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  408. package/node/components/DataGridVirtualScroller.js +0 -42
  409. package/node/models/gridRootContainerRef.js +0 -5
  410. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,119 +1,68 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
3
  import * as React from 'react';
3
- import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_ownerWindow as ownerWindow } from '@mui/utils';
4
+ import { unstable_debounce as debounce, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback, unstable_ownerWindow as ownerWindow } from '@mui/utils';
4
5
  import { useGridApiEventHandler, useGridApiOptionHandler } from '../../utils/useGridApiEventHandler';
5
6
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
6
7
  import { useGridLogger } from '../../utils/useGridLogger';
7
- import { gridColumnsTotalWidthSelector } from '../columns';
8
+ import { gridColumnsTotalWidthSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
9
+ import { gridDimensionsSelector } from './gridDimensionsSelectors';
8
10
  import { gridDensityFactorSelector } from '../density';
11
+ import { gridRenderContextSelector } from '../virtualization';
9
12
  import { useGridSelector } from '../../utils';
10
13
  import { getVisibleRows } from '../../utils/useGridVisibleRows';
11
14
  import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
12
15
  import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
13
16
  import { getTotalHeaderHeight } from '../columns/gridColumnsUtils';
14
- var isTestEnvironment = process.env.NODE_ENV === 'test';
15
- var hasScroll = function hasScroll(_ref) {
16
- var content = _ref.content,
17
- container = _ref.container,
18
- scrollBarSize = _ref.scrollBarSize;
19
- var hasScrollXIfNoYScrollBar = content.width > container.width;
20
- var hasScrollYIfNoXScrollBar = content.height > container.height;
21
- var hasScrollX = false;
22
- var 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: hasScrollX,
34
- hasScrollY: hasScrollY
35
- };
17
+ var EMPTY_SIZE = {
18
+ width: 0,
19
+ height: 0
20
+ };
21
+ var EMPTY_DIMENSIONS = {
22
+ isReady: false,
23
+ root: EMPTY_SIZE,
24
+ viewportOuterSize: EMPTY_SIZE,
25
+ viewportInnerSize: EMPTY_SIZE,
26
+ contentSize: EMPTY_SIZE,
27
+ minimumSize: EMPTY_SIZE,
28
+ hasScrollX: false,
29
+ hasScrollY: false,
30
+ scrollbarSize: 0,
31
+ headerHeight: 0,
32
+ rowWidth: 0,
33
+ rowHeight: 0,
34
+ columnsTotalWidth: 0,
35
+ leftPinnedWidth: 0,
36
+ rightPinnedWidth: 0,
37
+ headersTotalHeight: 0,
38
+ topContainerHeight: 0,
39
+ bottomContainerHeight: 0
40
+ };
41
+ export var dimensionsStateInitializer = function dimensionsStateInitializer(state) {
42
+ var dimensions = EMPTY_DIMENSIONS;
43
+ return _extends({}, state, {
44
+ dimensions: dimensions
45
+ });
36
46
  };
37
47
  export function useGridDimensions(apiRef, props) {
38
48
  var logger = useGridLogger(apiRef, 'useResizeContainer');
39
49
  var errorShown = React.useRef(false);
40
- var rootDimensionsRef = React.useRef(null);
41
- var fullDimensionsRef = React.useRef(null);
50
+ var rootDimensionsRef = React.useRef(EMPTY_SIZE);
42
51
  var rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
52
+ var pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
43
53
  var densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
44
54
  var rowHeight = Math.floor(props.rowHeight * densityFactor);
45
- var totalHeaderHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight);
46
- var updateGridDimensionsRef = React.useCallback(function () {
47
- var _apiRef$current$rootE;
48
- var rootElement = (_apiRef$current$rootE = apiRef.current.rootElementRef) == null ? void 0 : _apiRef$current$rootE.current;
49
- var columnsTotalWidth = gridColumnsTotalWidthSelector(apiRef);
50
- var pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
51
- if (!rootDimensionsRef.current) {
52
- return;
53
- }
54
- var scrollBarSize;
55
- if (props.scrollbarSize != null) {
56
- scrollBarSize = props.scrollbarSize;
57
- } else if (!columnsTotalWidth || !rootElement) {
58
- scrollBarSize = 0;
59
- } else {
60
- var doc = ownerDocument(rootElement);
61
- var scrollDiv = doc.createElement('div');
62
- scrollDiv.style.width = '99px';
63
- scrollDiv.style.height = '99px';
64
- scrollDiv.style.position = 'absolute';
65
- scrollDiv.style.overflow = 'scroll';
66
- scrollDiv.className = 'scrollDiv';
67
- rootElement.appendChild(scrollDiv);
68
- scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
69
- rootElement.removeChild(scrollDiv);
70
- }
71
- var viewportOuterSize;
72
- var hasScrollX;
73
- var hasScrollY;
74
- if (props.autoHeight) {
75
- hasScrollY = false;
76
- hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
77
- viewportOuterSize = {
78
- width: rootDimensionsRef.current.width,
79
- height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
80
- };
81
- } else {
82
- viewportOuterSize = {
83
- width: rootDimensionsRef.current.width,
84
- height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
85
- };
86
- var scrollInformation = hasScroll({
87
- content: {
88
- width: Math.round(columnsTotalWidth),
89
- height: rowsMeta.currentPageTotalHeight
90
- },
91
- container: {
92
- width: Math.round(viewportOuterSize.width),
93
- height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
94
- },
95
- scrollBarSize: scrollBarSize
96
- });
97
- hasScrollY = scrollInformation.hasScrollY;
98
- hasScrollX = scrollInformation.hasScrollX;
99
- }
100
- var viewportInnerSize = {
101
- width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
102
- height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
103
- };
104
- var newFullDimensions = {
105
- viewportOuterSize: viewportOuterSize,
106
- viewportInnerSize: viewportInnerSize,
107
- hasScrollX: hasScrollX,
108
- hasScrollY: hasScrollY,
109
- scrollBarSize: scrollBarSize
110
- };
111
- var prevDimensions = fullDimensionsRef.current;
112
- fullDimensionsRef.current = newFullDimensions;
113
- if (newFullDimensions.viewportInnerSize.width !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.width) || newFullDimensions.viewportInnerSize.height !== (prevDimensions == null ? void 0 : prevDimensions.viewportInnerSize.height)) {
114
- apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
115
- }
116
- }, [apiRef, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, totalHeaderHeight]);
55
+ var headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
56
+ var columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);
57
+ // XXX: The `props as any` below is not resilient to change.
58
+ var hasHeaderFilters = Boolean(props.headerFilters);
59
+ var headersTotalHeight = getTotalHeaderHeight(apiRef, props.columnHeaderHeight) + Number(hasHeaderFilters) * headerHeight;
60
+ var leftPinnedWidth = pinnedColumns.left.reduce(function (w, col) {
61
+ return w + col.computedWidth;
62
+ }, 0);
63
+ var rightPinnedWidth = pinnedColumns.right.reduce(function (w, col) {
64
+ return w + col.computedWidth;
65
+ }, 0);
117
66
  var _React$useState = React.useState(),
118
67
  _React$useState2 = _slicedToArray(_React$useState, 2),
119
68
  savedSize = _React$useState2[0],
@@ -122,23 +71,39 @@ export function useGridDimensions(apiRef, props) {
122
71
  return debounce(setSavedSize, 60);
123
72
  }, []);
124
73
  var previousSize = React.useRef();
125
- useEnhancedEffect(function () {
126
- if (savedSize) {
127
- updateGridDimensionsRef();
128
- apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
129
- }
130
- }, [apiRef, savedSize, updateGridDimensionsRef]);
131
-
132
- // This is the function called by apiRef.current.resize()
74
+ var getRootDimensions = function getRootDimensions() {
75
+ return apiRef.current.state.dimensions;
76
+ };
77
+ var setDimensions = useEventCallback(function (dimensions) {
78
+ apiRef.current.setState(function (state) {
79
+ return _extends({}, state, {
80
+ dimensions: dimensions
81
+ });
82
+ });
83
+ });
133
84
  var resize = React.useCallback(function () {
134
- apiRef.current.computeSizeAndPublishResizeEvent();
85
+ var _previousSize$current, _previousSize$current2;
86
+ var element = apiRef.current.mainElementRef.current;
87
+ if (!element) {
88
+ return;
89
+ }
90
+ var computedStyle = ownerWindow(element).getComputedStyle(element);
91
+ var height = parseFloat(computedStyle.height) || 0;
92
+ var width = parseFloat(computedStyle.width) || 0;
93
+ var hasHeightChanged = height !== ((_previousSize$current = previousSize.current) == null ? void 0 : _previousSize$current.height);
94
+ var hasWidthChanged = width !== ((_previousSize$current2 = previousSize.current) == null ? void 0 : _previousSize$current2.width);
95
+ if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
96
+ var size = {
97
+ width: width,
98
+ height: height
99
+ };
100
+ apiRef.current.publishEvent('resize', size);
101
+ previousSize.current = size;
102
+ }
135
103
  }, [apiRef]);
136
- var getRootDimensions = React.useCallback(function () {
137
- return fullDimensionsRef.current;
138
- }, []);
139
104
  var getViewportPageSize = React.useCallback(function () {
140
- var dimensions = apiRef.current.getRootDimensions();
141
- if (!dimensions) {
105
+ var dimensions = gridDimensionsSelector(apiRef.current.state);
106
+ if (!dimensions.isReady) {
142
107
  return 0;
143
108
  }
144
109
  var currentPage = getVisibleRows(apiRef, {
@@ -149,45 +114,138 @@ export function useGridDimensions(apiRef, props) {
149
114
  // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
150
115
  // to find out the maximum number of rows that can fit in the visible part of the grid
151
116
  if (props.getRowHeight) {
152
- var renderContext = apiRef.current.getRenderContext();
117
+ var renderContext = gridRenderContextSelector(apiRef);
153
118
  var viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
154
119
  return Math.min(viewportPageSize - 1, currentPage.rows.length);
155
120
  }
156
121
  var maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
157
122
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
158
123
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
159
- var computeSizeAndPublishResizeEvent = React.useCallback(function () {
160
- var _apiRef$current$mainE, _previousSize$current, _previousSize$current2;
161
- var mainEl = (_apiRef$current$mainE = apiRef.current.mainElementRef) == null ? void 0 : _apiRef$current$mainE.current;
162
- if (!mainEl) {
163
- return;
164
- }
165
- var win = ownerWindow(mainEl);
166
- var computedStyle = win.getComputedStyle(mainEl);
167
- var height = parseFloat(computedStyle.height) || 0;
168
- var width = parseFloat(computedStyle.width) || 0;
169
- var hasHeightChanged = height !== ((_previousSize$current = previousSize.current) == null ? void 0 : _previousSize$current.height);
170
- var hasWidthChanged = width !== ((_previousSize$current2 = previousSize.current) == null ? void 0 : _previousSize$current2.width);
171
- if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
172
- var size = {
173
- width: width,
174
- height: height
124
+ var updateDimensions = React.useCallback(function () {
125
+ var _apiRef$current$updat, _apiRef$current;
126
+ var rootElement = apiRef.current.rootElementRef.current;
127
+ var pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
128
+ var scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
129
+ var topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
130
+ var bottomContainerHeight = pinnedRowsHeight.bottom;
131
+ var contentSize = {
132
+ width: columnsTotalWidth,
133
+ height: rowsMeta.currentPageTotalHeight
134
+ };
135
+ var viewportOuterSize;
136
+ var viewportInnerSize;
137
+ var hasScrollX = false;
138
+ var hasScrollY = false;
139
+ if (props.autoHeight) {
140
+ hasScrollY = false;
141
+ hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
142
+ viewportOuterSize = {
143
+ width: rootDimensionsRef.current.width,
144
+ height: topContainerHeight + bottomContainerHeight + contentSize.height
175
145
  };
176
- apiRef.current.publishEvent('resize', size);
177
- previousSize.current = size;
146
+ viewportInnerSize = {
147
+ width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
148
+ height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
149
+ };
150
+ } else {
151
+ viewportOuterSize = {
152
+ width: rootDimensionsRef.current.width,
153
+ height: rootDimensionsRef.current.height
154
+ };
155
+ viewportInnerSize = {
156
+ width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
157
+ height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
158
+ };
159
+ var content = contentSize;
160
+ var container = viewportInnerSize;
161
+ var hasScrollXIfNoYScrollBar = content.width > container.width;
162
+ var hasScrollYIfNoXScrollBar = content.height > container.height;
163
+ if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
164
+ hasScrollY = hasScrollYIfNoXScrollBar;
165
+ hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
166
+
167
+ // We recalculate the scroll y to consider the size of the x scrollbar.
168
+ if (hasScrollX) {
169
+ hasScrollY = content.height + scrollbarSize > container.height;
170
+ }
171
+ }
172
+ if (hasScrollY) {
173
+ viewportInnerSize.width -= scrollbarSize;
174
+ }
175
+ if (hasScrollX) {
176
+ viewportInnerSize.height -= scrollbarSize;
177
+ }
178
178
  }
179
- }, [apiRef]);
180
- var dimensionsApi = {
179
+ var rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
180
+ var minimumSize = {
181
+ width: contentSize.width,
182
+ height: topContainerHeight + contentSize.height + bottomContainerHeight
183
+ };
184
+ var newDimensions = {
185
+ isReady: true,
186
+ root: rootDimensionsRef.current,
187
+ viewportOuterSize: viewportOuterSize,
188
+ viewportInnerSize: viewportInnerSize,
189
+ contentSize: contentSize,
190
+ minimumSize: minimumSize,
191
+ hasScrollX: hasScrollX,
192
+ hasScrollY: hasScrollY,
193
+ scrollbarSize: scrollbarSize,
194
+ headerHeight: headerHeight,
195
+ rowWidth: rowWidth,
196
+ rowHeight: rowHeight,
197
+ columnsTotalWidth: columnsTotalWidth,
198
+ leftPinnedWidth: leftPinnedWidth,
199
+ rightPinnedWidth: rightPinnedWidth,
200
+ headersTotalHeight: headersTotalHeight,
201
+ topContainerHeight: topContainerHeight,
202
+ bottomContainerHeight: bottomContainerHeight
203
+ };
204
+ var prevDimensions = apiRef.current.state.dimensions;
205
+ setDimensions(newDimensions);
206
+ if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
207
+ apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
208
+ }
209
+ (_apiRef$current$updat = (_apiRef$current = apiRef.current).updateRenderContext) == null || _apiRef$current$updat.call(_apiRef$current);
210
+ }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
211
+ var apiPublic = {
181
212
  resize: resize,
182
213
  getRootDimensions: getRootDimensions
183
214
  };
184
- var dimensionsPrivateApi = {
185
- getViewportPageSize: getViewportPageSize,
186
- updateGridDimensionsRef: updateGridDimensionsRef,
187
- computeSizeAndPublishResizeEvent: computeSizeAndPublishResizeEvent
215
+ var apiPrivate = {
216
+ updateDimensions: updateDimensions,
217
+ getViewportPageSize: getViewportPageSize
188
218
  };
189
- useGridApiMethod(apiRef, dimensionsApi, 'public');
190
- useGridApiMethod(apiRef, dimensionsPrivateApi, 'private');
219
+ useGridApiMethod(apiRef, apiPublic, 'public');
220
+ useGridApiMethod(apiRef, apiPrivate, 'private');
221
+ useEnhancedEffect(function () {
222
+ if (savedSize) {
223
+ updateDimensions();
224
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
225
+ }
226
+ }, [apiRef, savedSize, updateDimensions]);
227
+ var root = apiRef.current.rootElementRef.current;
228
+ var dimensions = apiRef.current.state.dimensions;
229
+ useEnhancedEffect(function () {
230
+ if (!root) {
231
+ return;
232
+ }
233
+ var set = function set(k, v) {
234
+ return root.style.setProperty(k, v);
235
+ };
236
+ set('--DataGrid-width', "".concat(dimensions.viewportOuterSize.width, "px"));
237
+ set('--DataGrid-hasScrollX', "".concat(Number(dimensions.hasScrollX)));
238
+ set('--DataGrid-hasScrollY', "".concat(Number(dimensions.hasScrollY)));
239
+ set('--DataGrid-scrollbarSize', "".concat(dimensions.scrollbarSize, "px"));
240
+ set('--DataGrid-rowWidth', "".concat(dimensions.rowWidth, "px"));
241
+ set('--DataGrid-columnsTotalWidth', "".concat(dimensions.columnsTotalWidth, "px"));
242
+ set('--DataGrid-leftPinnedWidth', "".concat(dimensions.leftPinnedWidth, "px"));
243
+ set('--DataGrid-rightPinnedWidth', "".concat(dimensions.rightPinnedWidth, "px"));
244
+ set('--DataGrid-headerHeight', "".concat(dimensions.headerHeight, "px"));
245
+ set('--DataGrid-headersTotalHeight', "".concat(dimensions.headersTotalHeight, "px"));
246
+ set('--DataGrid-topContainerHeight', "".concat(dimensions.topContainerHeight, "px"));
247
+ set('--DataGrid-bottomContainerHeight', "".concat(dimensions.bottomContainerHeight, "px"));
248
+ }, [root, dimensions]);
191
249
  var isFirstSizing = React.useRef(true);
192
250
  var handleResize = React.useCallback(function (size) {
193
251
  rootDimensionsRef.current = size;
@@ -202,12 +260,6 @@ export function useGridDimensions(apiRef, props) {
202
260
  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'));
203
261
  errorShown.current = true;
204
262
  }
205
- if (isTestEnvironment) {
206
- // We don't need to debounce the resize for tests.
207
- setSavedSize(size);
208
- isFirstSizing.current = false;
209
- return;
210
- }
211
263
  if (isFirstSizing.current) {
212
264
  // We want to initialize the grid dimensions as soon as possible to avoid flickering
213
265
  setSavedSize(size);
@@ -216,12 +268,35 @@ export function useGridDimensions(apiRef, props) {
216
268
  }
217
269
  debouncedSetSavedSize(size);
218
270
  }, [props.autoHeight, debouncedSetSavedSize, logger]);
219
- useEnhancedEffect(function () {
220
- return updateGridDimensionsRef();
221
- }, [updateGridDimensionsRef]);
222
- useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
223
- useGridApiOptionHandler(apiRef, 'paginationModelChange', updateGridDimensionsRef);
224
- useGridApiOptionHandler(apiRef, 'columnsChange', updateGridDimensionsRef);
271
+ useEnhancedEffect(updateDimensions, [updateDimensions]);
272
+ useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);
273
+ useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);
274
+ useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);
225
275
  useGridApiEventHandler(apiRef, 'resize', handleResize);
226
276
  useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);
277
+ }
278
+ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
279
+ if (scrollbarSize !== undefined) {
280
+ return scrollbarSize;
281
+ }
282
+ if (rootElement === null || columnsTotalWidth === 0) {
283
+ return 0;
284
+ }
285
+ var doc = ownerDocument(rootElement);
286
+ var scrollDiv = doc.createElement('div');
287
+ scrollDiv.style.width = '99px';
288
+ scrollDiv.style.height = '99px';
289
+ scrollDiv.style.position = 'absolute';
290
+ scrollDiv.style.overflow = 'scroll';
291
+ scrollDiv.className = 'scrollDiv';
292
+ rootElement.appendChild(scrollDiv);
293
+ var size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
294
+ rootElement.removeChild(scrollDiv);
295
+ return size;
296
+ }
297
+
298
+ // Get rid of floating point imprecision errors
299
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
300
+ function roundToDecimalPlaces(value, decimals) {
301
+ return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);
227
302
  }
@@ -116,10 +116,10 @@ export function buildCSV(options) {
116
116
  });
117
117
  var headerRows = [];
118
118
  if (includeColumnGroupsHeaders) {
119
- var columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
119
+ var columnGroupLookup = apiRef.current.getAllGroupDetails();
120
120
  var maxColumnGroupsDepth = 0;
121
121
  var columnGroupPathsLookup = filteredColumns.reduce(function (acc, column) {
122
- var columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
122
+ var columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
123
123
  acc[column.field] = columnGroupPath;
124
124
  maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
125
125
  return acc;
@@ -7,7 +7,7 @@ import { useLazyRef } from '../../utils/useLazyRef';
7
7
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
8
8
  import { useGridApiMethod } from '../../utils/useGridApiMethod';
9
9
  import { useGridLogger } from '../../utils/useGridLogger';
10
- import { gridFilterableColumnLookupSelector } from '../columns/gridColumnsSelector';
10
+ import { gridColumnLookupSelector } from '../columns/gridColumnsSelector';
11
11
  import { GridPreferencePanelsValue } from '../preferencesPanel/gridPreferencePanelsValue';
12
12
  import { getDefaultGridFilterModel } from './gridFilterState';
13
13
  import { gridFilterModelSelector } from './gridFilterSelector';
@@ -322,9 +322,9 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
322
322
  var handleColumnsChange = React.useCallback(function () {
323
323
  logger.debug('onColUpdated - GridColumns changed, applying filters');
324
324
  var filterModel = gridFilterModelSelector(apiRef);
325
- var filterableColumnsLookup = gridFilterableColumnLookupSelector(apiRef);
325
+ var columnsLookup = gridColumnLookupSelector(apiRef);
326
326
  var newFilterItems = filterModel.items.filter(function (item) {
327
- return item.field && filterableColumnsLookup[item.field];
327
+ return item.field && columnsLookup[item.field];
328
328
  });
329
329
  if (newFilterItems.length < filterModel.items.length) {
330
330
  apiRef.current.setFilterModel(_extends({}, filterModel, {
@@ -11,9 +11,7 @@ export var gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector
11
11
  export var gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, function (focusState) {
12
12
  return focusState.columnHeaderFilter;
13
13
  });
14
-
15
- // eslint-disable-next-line @typescript-eslint/naming-convention
16
- export var unstable_gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, function (focusState) {
14
+ export var gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, function (focusState) {
17
15
  return focusState.columnGroupHeader;
18
16
  });
19
17
  export var gridTabIndexStateSelector = function gridTabIndexStateSelector(state) {
@@ -28,8 +26,6 @@ export var gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSe
28
26
  export var gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, function (state) {
29
27
  return state.columnHeaderFilter;
30
28
  });
31
-
32
- // eslint-disable-next-line @typescript-eslint/naming-convention
33
- export var unstable_gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, function (state) {
29
+ export var gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, function (state) {
34
30
  return state.columnGroupHeader;
35
31
  });
@@ -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';
@@ -170,7 +170,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
170
170
  apiRef.current.forceUpdate();
171
171
  }, [apiRef]);
172
172
  var getColumnGroupHeaderFocus = React.useCallback(function () {
173
- return unstable_gridFocusColumnGroupHeaderSelector(apiRef);
173
+ return gridFocusColumnGroupHeaderSelector(apiRef);
174
174
  }, [apiRef]);
175
175
  var moveFocusToRelativeCell = React.useCallback(function (id, field, direction) {
176
176
  var columnIndexToFocus = apiRef.current.getColumnIndex(field);
@@ -250,7 +250,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
250
250
  if (event.target !== event.currentTarget) {
251
251
  return;
252
252
  }
253
- var focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
253
+ var focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
254
254
  if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {
255
255
  // This group cell has already been focused
256
256
  return;
@@ -12,7 +12,7 @@ import { GridCellModes } from '../../../models/gridEditRowModel';
12
12
  import { isNavigationKey } from '../../../utils/keyboardUtils';
13
13
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';
14
14
  import { gridPinnedRowsSelector } from '../rows/gridRowsSelector';
15
- import { unstable_gridFocusColumnGroupHeaderSelector } from '../focus';
15
+ import { gridFocusColumnGroupHeaderSelector } from '../focus';
16
16
  import { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';
17
17
  import { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector } from '../headerFiltering/gridHeaderFilteringSelectors';
18
18
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
@@ -140,10 +140,6 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
140
140
  // There is one exception for the checkBoxHeader
141
141
  return;
142
142
  }
143
- var dimensions = apiRef.current.getRootDimensions();
144
- if (!dimensions) {
145
- return;
146
- }
147
143
  var viewportPageSize = apiRef.current.getViewportPageSize();
148
144
  var colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
149
145
  var firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
@@ -236,10 +232,6 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
236
232
  }
237
233
  }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
238
234
  var handleHeaderFilterKeyDown = React.useCallback(function (params, event) {
239
- var dimensions = apiRef.current.getRootDimensions();
240
- if (!dimensions) {
241
- return;
242
- }
243
235
  var isEditing = gridHeaderFilteringEditFieldSelector(apiRef) === params.field;
244
236
  var isHeaderMenuOpen = gridHeaderFilteringMenuSelector(apiRef) === params.field;
245
237
  if (isEditing || isHeaderMenuOpen || !isNavigationKey(event.key)) {
@@ -326,11 +318,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
326
318
  }
327
319
  }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
328
320
  var handleColumnGroupHeaderKeyDown = React.useCallback(function (params, event) {
329
- var dimensions = apiRef.current.getRootDimensions();
330
- if (!dimensions) {
331
- return;
332
- }
333
- var focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);
321
+ var focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);
334
322
  if (focusedColumnGroup === null) {
335
323
  return;
336
324
  }
@@ -429,8 +417,7 @@ export var useGridKeyboardNavigation = function useGridKeyboardNavigation(apiRef
429
417
  if (!canUpdateFocus) {
430
418
  return;
431
419
  }
432
- var dimensions = apiRef.current.getRootDimensions();
433
- if (currentPageRows.length === 0 || !dimensions) {
420
+ if (currentPageRows.length === 0) {
434
421
  return;
435
422
  }
436
423
  var direction = theme.direction;
@@ -5,7 +5,6 @@ import { gridDensityFactorSelector } from '../density';
5
5
  import { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';
6
6
  import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
7
7
  import { gridPaginationModelSelector } from './gridPaginationSelector';
8
- import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
9
8
  import { getPageCount, noRowCountInServerMode, defaultPageSize, throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel, getValidPage } from './gridPaginationUtils';
10
9
  export var paginationStateInitializer = function paginationStateInitializer(state, props) {
11
10
  var _props$paginationMode, _props$initialState;
@@ -146,12 +145,11 @@ export var useGridPagination = function useGridPagination(apiRef, props) {
146
145
  apiRef.current.forceUpdate();
147
146
  };
148
147
  var handleUpdateAutoPageSize = React.useCallback(function () {
149
- var dimensions = apiRef.current.getRootDimensions();
150
- if (!props.autoPageSize || !dimensions) {
148
+ if (!props.autoPageSize) {
151
149
  return;
152
150
  }
153
- var pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);
154
- var maximumPageSizeWithoutScrollBar = Math.floor((dimensions.viewportInnerSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom) / rowHeight);
151
+ var dimensions = apiRef.current.getRootDimensions();
152
+ var maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
155
153
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
156
154
  }, [apiRef, props.autoPageSize, rowHeight]);
157
155
  useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
@@ -61,23 +61,23 @@ export var gridAdditionalRowGroupsSelector = createSelector(gridRowsStateSelecto
61
61
  * @ignore - do not document.
62
62
  */
63
63
  export var gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGroupsSelector, function (additionalRowGroups) {
64
- var _rawPinnedRows$bottom, _rawPinnedRows$top;
64
+ var _rawPinnedRows$bottom, _rawPinnedRows$bottom2, _rawPinnedRows$top$ma, _rawPinnedRows$top;
65
65
  var rawPinnedRows = additionalRowGroups == null ? void 0 : additionalRowGroups.pinnedRows;
66
66
  return {
67
- bottom: rawPinnedRows == null || (_rawPinnedRows$bottom = rawPinnedRows.bottom) == null ? void 0 : _rawPinnedRows$bottom.map(function (rowEntry) {
67
+ bottom: (_rawPinnedRows$bottom = rawPinnedRows == null || (_rawPinnedRows$bottom2 = rawPinnedRows.bottom) == null ? void 0 : _rawPinnedRows$bottom2.map(function (rowEntry) {
68
68
  var _rowEntry$model;
69
69
  return {
70
70
  id: rowEntry.id,
71
71
  model: (_rowEntry$model = rowEntry.model) != null ? _rowEntry$model : {}
72
72
  };
73
- }),
74
- top: rawPinnedRows == null || (_rawPinnedRows$top = rawPinnedRows.top) == null ? void 0 : _rawPinnedRows$top.map(function (rowEntry) {
73
+ })) != null ? _rawPinnedRows$bottom : [],
74
+ top: (_rawPinnedRows$top$ma = rawPinnedRows == null || (_rawPinnedRows$top = rawPinnedRows.top) == null ? void 0 : _rawPinnedRows$top.map(function (rowEntry) {
75
75
  var _rowEntry$model2;
76
76
  return {
77
77
  id: rowEntry.id,
78
78
  model: (_rowEntry$model2 = rowEntry.model) != null ? _rowEntry$model2 : {}
79
79
  };
80
- })
80
+ })) != null ? _rawPinnedRows$top$ma : []
81
81
  };
82
82
  });
83
83