@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,16 +1,21 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
7
+ exports.dimensionsStateInitializer = void 0;
6
8
  exports.useGridDimensions = useGridDimensions;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
7
10
  var React = _interopRequireWildcard(require("react"));
8
11
  var _utils = require("@mui/utils");
9
12
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
10
13
  var _useGridApiMethod = require("../../utils/useGridApiMethod");
11
14
  var _useGridLogger = require("../../utils/useGridLogger");
12
15
  var _columns = require("../columns");
16
+ var _gridDimensionsSelectors = require("./gridDimensionsSelectors");
13
17
  var _density = require("../density");
18
+ var _virtualization = require("../virtualization");
14
19
  var _utils2 = require("../../utils");
15
20
  var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
16
21
  var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
@@ -18,127 +23,83 @@ var _gridRowsUtils = require("../rows/gridRowsUtils");
18
23
  var _gridColumnsUtils = require("../columns/gridColumnsUtils");
19
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- const isTestEnvironment = process.env.NODE_ENV === 'test';
22
- const hasScroll = ({
23
- content,
24
- container,
25
- scrollBarSize
26
- }) => {
27
- const hasScrollXIfNoYScrollBar = content.width > container.width;
28
- const hasScrollYIfNoXScrollBar = content.height > container.height;
29
- let hasScrollX = false;
30
- let hasScrollY = false;
31
- if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
32
- hasScrollX = hasScrollXIfNoYScrollBar;
33
- hasScrollY = content.height + (hasScrollX ? scrollBarSize : 0) > container.height;
34
-
35
- // We recalculate the scroll x to consider the size of the y scrollbar.
36
- if (hasScrollY) {
37
- hasScrollX = content.width + scrollBarSize > container.width;
38
- }
39
- }
40
- return {
41
- hasScrollX,
42
- hasScrollY
43
- };
26
+ const EMPTY_SIZE = {
27
+ width: 0,
28
+ height: 0
44
29
  };
30
+ const EMPTY_DIMENSIONS = {
31
+ isReady: false,
32
+ root: EMPTY_SIZE,
33
+ viewportOuterSize: EMPTY_SIZE,
34
+ viewportInnerSize: EMPTY_SIZE,
35
+ contentSize: EMPTY_SIZE,
36
+ minimumSize: EMPTY_SIZE,
37
+ hasScrollX: false,
38
+ hasScrollY: false,
39
+ scrollbarSize: 0,
40
+ headerHeight: 0,
41
+ rowWidth: 0,
42
+ rowHeight: 0,
43
+ columnsTotalWidth: 0,
44
+ leftPinnedWidth: 0,
45
+ rightPinnedWidth: 0,
46
+ headersTotalHeight: 0,
47
+ topContainerHeight: 0,
48
+ bottomContainerHeight: 0
49
+ };
50
+ const dimensionsStateInitializer = state => {
51
+ const dimensions = EMPTY_DIMENSIONS;
52
+ return (0, _extends2.default)({}, state, {
53
+ dimensions
54
+ });
55
+ };
56
+ exports.dimensionsStateInitializer = dimensionsStateInitializer;
45
57
  function useGridDimensions(apiRef, props) {
46
58
  const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
47
59
  const errorShown = React.useRef(false);
48
- const rootDimensionsRef = React.useRef(null);
49
- const fullDimensionsRef = React.useRef(null);
60
+ const rootDimensionsRef = React.useRef(EMPTY_SIZE);
50
61
  const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
62
+ const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
51
63
  const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
52
64
  const rowHeight = Math.floor(props.rowHeight * densityFactor);
53
- const totalHeaderHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props.columnHeaderHeight);
54
- const updateGridDimensionsRef = React.useCallback(() => {
55
- const rootElement = apiRef.current.rootElementRef?.current;
56
- const columnsTotalWidth = (0, _columns.gridColumnsTotalWidthSelector)(apiRef);
57
- const pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
58
- if (!rootDimensionsRef.current) {
59
- return;
60
- }
61
- let scrollBarSize;
62
- if (props.scrollbarSize != null) {
63
- scrollBarSize = props.scrollbarSize;
64
- } else if (!columnsTotalWidth || !rootElement) {
65
- scrollBarSize = 0;
66
- } else {
67
- const doc = (0, _utils.unstable_ownerDocument)(rootElement);
68
- const scrollDiv = doc.createElement('div');
69
- scrollDiv.style.width = '99px';
70
- scrollDiv.style.height = '99px';
71
- scrollDiv.style.position = 'absolute';
72
- scrollDiv.style.overflow = 'scroll';
73
- scrollDiv.className = 'scrollDiv';
74
- rootElement.appendChild(scrollDiv);
75
- scrollBarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
76
- rootElement.removeChild(scrollDiv);
77
- }
78
- let viewportOuterSize;
79
- let hasScrollX;
80
- let hasScrollY;
81
- if (props.autoHeight) {
82
- hasScrollY = false;
83
- hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
84
- viewportOuterSize = {
85
- width: rootDimensionsRef.current.width,
86
- height: rowsMeta.currentPageTotalHeight + (hasScrollX ? scrollBarSize : 0)
87
- };
88
- } else {
89
- viewportOuterSize = {
90
- width: rootDimensionsRef.current.width,
91
- height: Math.max(rootDimensionsRef.current.height - totalHeaderHeight, 0)
92
- };
93
- const scrollInformation = hasScroll({
94
- content: {
95
- width: Math.round(columnsTotalWidth),
96
- height: rowsMeta.currentPageTotalHeight
97
- },
98
- container: {
99
- width: Math.round(viewportOuterSize.width),
100
- height: viewportOuterSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom
101
- },
102
- scrollBarSize
103
- });
104
- hasScrollY = scrollInformation.hasScrollY;
105
- hasScrollX = scrollInformation.hasScrollX;
106
- }
107
- const viewportInnerSize = {
108
- width: viewportOuterSize.width - (hasScrollY ? scrollBarSize : 0),
109
- height: viewportOuterSize.height - (hasScrollX ? scrollBarSize : 0)
110
- };
111
- const newFullDimensions = {
112
- viewportOuterSize,
113
- viewportInnerSize,
114
- hasScrollX,
115
- hasScrollY,
116
- scrollBarSize
117
- };
118
- const prevDimensions = fullDimensionsRef.current;
119
- fullDimensionsRef.current = newFullDimensions;
120
- if (newFullDimensions.viewportInnerSize.width !== prevDimensions?.viewportInnerSize.width || newFullDimensions.viewportInnerSize.height !== prevDimensions?.viewportInnerSize.height) {
121
- apiRef.current.publishEvent('viewportInnerSizeChange', newFullDimensions.viewportInnerSize);
122
- }
123
- }, [apiRef, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, totalHeaderHeight]);
65
+ const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);
66
+ const columnsTotalWidth = roundToDecimalPlaces((0, _columns.gridColumnsTotalWidthSelector)(apiRef), 6);
67
+ // XXX: The `props as any` below is not resilient to change.
68
+ const hasHeaderFilters = Boolean(props.headerFilters);
69
+ const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, props.columnHeaderHeight) + Number(hasHeaderFilters) * headerHeight;
70
+ const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
71
+ const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
124
72
  const [savedSize, setSavedSize] = React.useState();
125
73
  const debouncedSetSavedSize = React.useMemo(() => (0, _utils.unstable_debounce)(setSavedSize, 60), []);
126
74
  const previousSize = React.useRef();
127
- (0, _utils.unstable_useEnhancedEffect)(() => {
128
- if (savedSize) {
129
- updateGridDimensionsRef();
130
- apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
131
- }
132
- }, [apiRef, savedSize, updateGridDimensionsRef]);
133
-
134
- // This is the function called by apiRef.current.resize()
75
+ const getRootDimensions = () => apiRef.current.state.dimensions;
76
+ const setDimensions = (0, _utils.unstable_useEventCallback)(dimensions => {
77
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
78
+ dimensions
79
+ }));
80
+ });
135
81
  const resize = React.useCallback(() => {
136
- apiRef.current.computeSizeAndPublishResizeEvent();
82
+ const element = apiRef.current.mainElementRef.current;
83
+ if (!element) {
84
+ return;
85
+ }
86
+ const computedStyle = (0, _utils.unstable_ownerWindow)(element).getComputedStyle(element);
87
+ const height = parseFloat(computedStyle.height) || 0;
88
+ const width = parseFloat(computedStyle.width) || 0;
89
+ const hasHeightChanged = height !== previousSize.current?.height;
90
+ const hasWidthChanged = width !== previousSize.current?.width;
91
+ if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
92
+ const size = {
93
+ width,
94
+ height
95
+ };
96
+ apiRef.current.publishEvent('resize', size);
97
+ previousSize.current = size;
98
+ }
137
99
  }, [apiRef]);
138
- const getRootDimensions = React.useCallback(() => fullDimensionsRef.current, []);
139
100
  const getViewportPageSize = React.useCallback(() => {
140
- const dimensions = apiRef.current.getRootDimensions();
141
- if (!dimensions) {
101
+ const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
102
+ if (!dimensions.isReady) {
142
103
  return 0;
143
104
  }
144
105
  const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, {
@@ -149,44 +110,135 @@ function useGridDimensions(apiRef, props) {
149
110
  // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions
150
111
  // to find out the maximum number of rows that can fit in the visible part of the grid
151
112
  if (props.getRowHeight) {
152
- const renderContext = apiRef.current.getRenderContext();
113
+ const renderContext = (0, _virtualization.gridRenderContextSelector)(apiRef);
153
114
  const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;
154
115
  return Math.min(viewportPageSize - 1, currentPage.rows.length);
155
116
  }
156
117
  const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
157
118
  return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
158
119
  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
159
- const computeSizeAndPublishResizeEvent = React.useCallback(() => {
160
- const mainEl = apiRef.current.mainElementRef?.current;
161
- if (!mainEl) {
162
- return;
163
- }
164
- const win = (0, _utils.unstable_ownerWindow)(mainEl);
165
- const computedStyle = win.getComputedStyle(mainEl);
166
- const height = parseFloat(computedStyle.height) || 0;
167
- const width = parseFloat(computedStyle.width) || 0;
168
- const hasHeightChanged = height !== previousSize.current?.height;
169
- const hasWidthChanged = width !== previousSize.current?.width;
170
- if (!previousSize.current || hasHeightChanged || hasWidthChanged) {
171
- const size = {
172
- width,
173
- height
120
+ const updateDimensions = React.useCallback(() => {
121
+ const rootElement = apiRef.current.rootElementRef.current;
122
+ const pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
123
+ const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);
124
+ const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;
125
+ const bottomContainerHeight = pinnedRowsHeight.bottom;
126
+ const contentSize = {
127
+ width: columnsTotalWidth,
128
+ height: rowsMeta.currentPageTotalHeight
129
+ };
130
+ let viewportOuterSize;
131
+ let viewportInnerSize;
132
+ let hasScrollX = false;
133
+ let hasScrollY = false;
134
+ if (props.autoHeight) {
135
+ hasScrollY = false;
136
+ hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);
137
+ viewportOuterSize = {
138
+ width: rootDimensionsRef.current.width,
139
+ height: topContainerHeight + bottomContainerHeight + contentSize.height
174
140
  };
175
- apiRef.current.publishEvent('resize', size);
176
- previousSize.current = size;
141
+ viewportInnerSize = {
142
+ width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),
143
+ height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))
144
+ };
145
+ } else {
146
+ viewportOuterSize = {
147
+ width: rootDimensionsRef.current.width,
148
+ height: rootDimensionsRef.current.height
149
+ };
150
+ viewportInnerSize = {
151
+ width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),
152
+ height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)
153
+ };
154
+ const content = contentSize;
155
+ const container = viewportInnerSize;
156
+ const hasScrollXIfNoYScrollBar = content.width > container.width;
157
+ const hasScrollYIfNoXScrollBar = content.height > container.height;
158
+ if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {
159
+ hasScrollY = hasScrollYIfNoXScrollBar;
160
+ hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;
161
+
162
+ // We recalculate the scroll y to consider the size of the x scrollbar.
163
+ if (hasScrollX) {
164
+ hasScrollY = content.height + scrollbarSize > container.height;
165
+ }
166
+ }
167
+ if (hasScrollY) {
168
+ viewportInnerSize.width -= scrollbarSize;
169
+ }
170
+ if (hasScrollX) {
171
+ viewportInnerSize.height -= scrollbarSize;
172
+ }
177
173
  }
178
- }, [apiRef]);
179
- const dimensionsApi = {
174
+ const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));
175
+ const minimumSize = {
176
+ width: contentSize.width,
177
+ height: topContainerHeight + contentSize.height + bottomContainerHeight
178
+ };
179
+ const newDimensions = {
180
+ isReady: true,
181
+ root: rootDimensionsRef.current,
182
+ viewportOuterSize,
183
+ viewportInnerSize,
184
+ contentSize,
185
+ minimumSize,
186
+ hasScrollX,
187
+ hasScrollY,
188
+ scrollbarSize,
189
+ headerHeight,
190
+ rowWidth,
191
+ rowHeight,
192
+ columnsTotalWidth,
193
+ leftPinnedWidth,
194
+ rightPinnedWidth,
195
+ headersTotalHeight,
196
+ topContainerHeight,
197
+ bottomContainerHeight
198
+ };
199
+ const prevDimensions = apiRef.current.state.dimensions;
200
+ setDimensions(newDimensions);
201
+ if (newDimensions.viewportInnerSize.width !== prevDimensions.viewportInnerSize.width || newDimensions.viewportInnerSize.height !== prevDimensions.viewportInnerSize.height) {
202
+ apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);
203
+ }
204
+ apiRef.current.updateRenderContext?.();
205
+ }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);
206
+ const apiPublic = {
180
207
  resize,
181
208
  getRootDimensions
182
209
  };
183
- const dimensionsPrivateApi = {
184
- getViewportPageSize,
185
- updateGridDimensionsRef,
186
- computeSizeAndPublishResizeEvent
210
+ const apiPrivate = {
211
+ updateDimensions,
212
+ getViewportPageSize
187
213
  };
188
- (0, _useGridApiMethod.useGridApiMethod)(apiRef, dimensionsApi, 'public');
189
- (0, _useGridApiMethod.useGridApiMethod)(apiRef, dimensionsPrivateApi, 'private');
214
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPublic, 'public');
215
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, apiPrivate, 'private');
216
+ (0, _utils.unstable_useEnhancedEffect)(() => {
217
+ if (savedSize) {
218
+ updateDimensions();
219
+ apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);
220
+ }
221
+ }, [apiRef, savedSize, updateDimensions]);
222
+ const root = apiRef.current.rootElementRef.current;
223
+ const dimensions = apiRef.current.state.dimensions;
224
+ (0, _utils.unstable_useEnhancedEffect)(() => {
225
+ if (!root) {
226
+ return;
227
+ }
228
+ const set = (k, v) => root.style.setProperty(k, v);
229
+ set('--DataGrid-width', `${dimensions.viewportOuterSize.width}px`);
230
+ set('--DataGrid-hasScrollX', `${Number(dimensions.hasScrollX)}`);
231
+ set('--DataGrid-hasScrollY', `${Number(dimensions.hasScrollY)}`);
232
+ set('--DataGrid-scrollbarSize', `${dimensions.scrollbarSize}px`);
233
+ set('--DataGrid-rowWidth', `${dimensions.rowWidth}px`);
234
+ set('--DataGrid-columnsTotalWidth', `${dimensions.columnsTotalWidth}px`);
235
+ set('--DataGrid-leftPinnedWidth', `${dimensions.leftPinnedWidth}px`);
236
+ set('--DataGrid-rightPinnedWidth', `${dimensions.rightPinnedWidth}px`);
237
+ set('--DataGrid-headerHeight', `${dimensions.headerHeight}px`);
238
+ set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
239
+ set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
240
+ set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
241
+ }, [root, dimensions]);
190
242
  const isFirstSizing = React.useRef(true);
191
243
  const handleResize = React.useCallback(size => {
192
244
  rootDimensionsRef.current = size;
@@ -201,12 +253,6 @@ function useGridDimensions(apiRef, props) {
201
253
  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'));
202
254
  errorShown.current = true;
203
255
  }
204
- if (isTestEnvironment) {
205
- // We don't need to debounce the resize for tests.
206
- setSavedSize(size);
207
- isFirstSizing.current = false;
208
- return;
209
- }
210
256
  if (isFirstSizing.current) {
211
257
  // We want to initialize the grid dimensions as soon as possible to avoid flickering
212
258
  setSavedSize(size);
@@ -215,10 +261,35 @@ function useGridDimensions(apiRef, props) {
215
261
  }
216
262
  debouncedSetSavedSize(size);
217
263
  }, [props.autoHeight, debouncedSetSavedSize, logger]);
218
- (0, _utils.unstable_useEnhancedEffect)(() => updateGridDimensionsRef(), [updateGridDimensionsRef]);
219
- (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'sortedRowsSet', updateGridDimensionsRef);
220
- (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'paginationModelChange', updateGridDimensionsRef);
221
- (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnsChange', updateGridDimensionsRef);
264
+ (0, _utils.unstable_useEnhancedEffect)(updateDimensions, [updateDimensions]);
265
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'sortedRowsSet', updateDimensions);
266
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'paginationModelChange', updateDimensions);
267
+ (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'columnsChange', updateDimensions);
222
268
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'resize', handleResize);
223
269
  (0, _useGridApiEventHandler.useGridApiOptionHandler)(apiRef, 'debouncedResize', props.onResize);
270
+ }
271
+ function measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {
272
+ if (scrollbarSize !== undefined) {
273
+ return scrollbarSize;
274
+ }
275
+ if (rootElement === null || columnsTotalWidth === 0) {
276
+ return 0;
277
+ }
278
+ const doc = (0, _utils.unstable_ownerDocument)(rootElement);
279
+ const scrollDiv = doc.createElement('div');
280
+ scrollDiv.style.width = '99px';
281
+ scrollDiv.style.height = '99px';
282
+ scrollDiv.style.position = 'absolute';
283
+ scrollDiv.style.overflow = 'scroll';
284
+ scrollDiv.className = 'scrollDiv';
285
+ rootElement.appendChild(scrollDiv);
286
+ const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
287
+ rootElement.removeChild(scrollDiv);
288
+ return size;
289
+ }
290
+
291
+ // Get rid of floating point imprecision errors
292
+ // https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477
293
+ function roundToDecimalPlaces(value, decimals) {
294
+ return Math.round(value * 10 ** decimals) / 10 ** decimals;
224
295
  }
@@ -112,10 +112,10 @@ function buildCSV(options) {
112
112
  const filteredColumns = columns.filter(column => column.field !== _colDef.GRID_CHECKBOX_SELECTION_COL_DEF.field);
113
113
  const headerRows = [];
114
114
  if (includeColumnGroupsHeaders) {
115
- const columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
115
+ const columnGroupLookup = apiRef.current.getAllGroupDetails();
116
116
  let maxColumnGroupsDepth = 0;
117
117
  const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {
118
- const columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
118
+ const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);
119
119
  acc[column.field] = columnGroupPath;
120
120
  maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
121
121
  return acc;
@@ -319,8 +319,8 @@ const useGridFilter = (apiRef, props) => {
319
319
  const handleColumnsChange = React.useCallback(() => {
320
320
  logger.debug('onColUpdated - GridColumns changed, applying filters');
321
321
  const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
322
- const filterableColumnsLookup = (0, _gridColumnsSelector.gridFilterableColumnLookupSelector)(apiRef);
323
- const newFilterItems = filterModel.items.filter(item => item.field && filterableColumnsLookup[item.field]);
322
+ const columnsLookup = (0, _gridColumnsSelector.gridColumnLookupSelector)(apiRef);
323
+ const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);
324
324
  if (newFilterItems.length < filterModel.items.length) {
325
325
  apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
326
326
  items: newFilterItems
@@ -3,21 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.unstable_gridTabIndexColumnGroupHeaderSelector = exports.unstable_gridFocusColumnGroupHeaderSelector = exports.gridTabIndexStateSelector = exports.gridTabIndexColumnHeaderSelector = exports.gridTabIndexColumnHeaderFilterSelector = exports.gridTabIndexCellSelector = exports.gridFocusStateSelector = exports.gridFocusColumnHeaderSelector = exports.gridFocusColumnHeaderFilterSelector = exports.gridFocusCellSelector = void 0;
6
+ exports.gridTabIndexStateSelector = exports.gridTabIndexColumnHeaderSelector = exports.gridTabIndexColumnHeaderFilterSelector = exports.gridTabIndexColumnGroupHeaderSelector = exports.gridTabIndexCellSelector = exports.gridFocusStateSelector = exports.gridFocusColumnHeaderSelector = exports.gridFocusColumnHeaderFilterSelector = exports.gridFocusColumnGroupHeaderSelector = exports.gridFocusCellSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
8
  const gridFocusStateSelector = state => state.focus;
9
9
  exports.gridFocusStateSelector = gridFocusStateSelector;
10
10
  const gridFocusCellSelector = exports.gridFocusCellSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.cell);
11
11
  const gridFocusColumnHeaderSelector = exports.gridFocusColumnHeaderSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnHeader);
12
12
  const gridFocusColumnHeaderFilterSelector = exports.gridFocusColumnHeaderFilterSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);
13
-
14
- // eslint-disable-next-line @typescript-eslint/naming-convention
15
- const unstable_gridFocusColumnGroupHeaderSelector = exports.unstable_gridFocusColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
13
+ const gridFocusColumnGroupHeaderSelector = exports.gridFocusColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridFocusStateSelector, focusState => focusState.columnGroupHeader);
16
14
  const gridTabIndexStateSelector = state => state.tabIndex;
17
15
  exports.gridTabIndexStateSelector = gridTabIndexStateSelector;
18
16
  const gridTabIndexCellSelector = exports.gridTabIndexCellSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.cell);
19
17
  const gridTabIndexColumnHeaderSelector = exports.gridTabIndexColumnHeaderSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnHeader);
20
18
  const gridTabIndexColumnHeaderFilterSelector = exports.gridTabIndexColumnHeaderFilterSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnHeaderFilter);
21
-
22
- // eslint-disable-next-line @typescript-eslint/naming-convention
23
- const unstable_gridTabIndexColumnGroupHeaderSelector = exports.unstable_gridTabIndexColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnGroupHeader);
19
+ const gridTabIndexColumnGroupHeaderSelector = exports.gridTabIndexColumnGroupHeaderSelector = (0, _createSelector.createSelector)(gridTabIndexStateSelector, state => state.columnGroupHeader);
@@ -174,7 +174,7 @@ const useGridFocus = (apiRef, props) => {
174
174
  });
175
175
  apiRef.current.forceUpdate();
176
176
  }, [apiRef]);
177
- const getColumnGroupHeaderFocus = React.useCallback(() => (0, _gridFocusStateSelector.unstable_gridFocusColumnGroupHeaderSelector)(apiRef), [apiRef]);
177
+ const getColumnGroupHeaderFocus = React.useCallback(() => (0, _gridFocusStateSelector.gridFocusColumnGroupHeaderSelector)(apiRef), [apiRef]);
178
178
  const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {
179
179
  let columnIndexToFocus = apiRef.current.getColumnIndex(field);
180
180
  const visibleColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
@@ -254,7 +254,7 @@ const useGridFocus = (apiRef, props) => {
254
254
  if (event.target !== event.currentTarget) {
255
255
  return;
256
256
  }
257
- const focusedColumnGroup = (0, _gridFocusStateSelector.unstable_gridFocusColumnGroupHeaderSelector)(apiRef);
257
+ const focusedColumnGroup = (0, _gridFocusStateSelector.gridFocusColumnGroupHeaderSelector)(apiRef);
258
258
  if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {
259
259
  // This group cell has already been focused
260
260
  return;
@@ -145,10 +145,6 @@ const useGridKeyboardNavigation = (apiRef, props) => {
145
145
  // There is one exception for the checkBoxHeader
146
146
  return;
147
147
  }
148
- const dimensions = apiRef.current.getRootDimensions();
149
- if (!dimensions) {
150
- return;
151
- }
152
148
  const viewportPageSize = apiRef.current.getViewportPageSize();
153
149
  const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
154
150
  const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
@@ -241,10 +237,6 @@ const useGridKeyboardNavigation = (apiRef, props) => {
241
237
  }
242
238
  }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);
243
239
  const handleHeaderFilterKeyDown = React.useCallback((params, event) => {
244
- const dimensions = apiRef.current.getRootDimensions();
245
- if (!dimensions) {
246
- return;
247
- }
248
240
  const isEditing = (0, _gridHeaderFilteringSelectors.gridHeaderFilteringEditFieldSelector)(apiRef) === params.field;
249
241
  const isHeaderMenuOpen = (0, _gridHeaderFilteringSelectors.gridHeaderFilteringMenuSelector)(apiRef) === params.field;
250
242
  if (isEditing || isHeaderMenuOpen || !(0, _keyboardUtils.isNavigationKey)(event.key)) {
@@ -331,11 +323,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
331
323
  }
332
324
  }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);
333
325
  const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
334
- const dimensions = apiRef.current.getRootDimensions();
335
- if (!dimensions) {
336
- return;
337
- }
338
- const focusedColumnGroup = (0, _focus.unstable_gridFocusColumnGroupHeaderSelector)(apiRef);
326
+ const focusedColumnGroup = (0, _focus.gridFocusColumnGroupHeaderSelector)(apiRef);
339
327
  if (focusedColumnGroup === null) {
340
328
  return;
341
329
  }
@@ -438,8 +426,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
438
426
  if (!canUpdateFocus) {
439
427
  return;
440
428
  }
441
- const dimensions = apiRef.current.getRootDimensions();
442
- if (currentPageRows.length === 0 || !dimensions) {
429
+ if (currentPageRows.length === 0) {
443
430
  return;
444
431
  }
445
432
  const direction = theme.direction;
@@ -12,7 +12,6 @@ var _density = require("../density");
12
12
  var _utils = require("../../utils");
13
13
  var _pipeProcessing = require("../../core/pipeProcessing");
14
14
  var _gridPaginationSelector = require("./gridPaginationSelector");
15
- var _gridRowsUtils = require("../rows/gridRowsUtils");
16
15
  var _gridPaginationUtils = require("./gridPaginationUtils");
17
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -148,12 +147,11 @@ const useGridPagination = (apiRef, props) => {
148
147
  apiRef.current.forceUpdate();
149
148
  };
150
149
  const handleUpdateAutoPageSize = React.useCallback(() => {
151
- const dimensions = apiRef.current.getRootDimensions();
152
- if (!props.autoPageSize || !dimensions) {
150
+ if (!props.autoPageSize) {
153
151
  return;
154
152
  }
155
- const pinnedRowsHeight = (0, _gridRowsUtils.calculatePinnedRowsHeight)(apiRef);
156
- const maximumPageSizeWithoutScrollBar = Math.floor((dimensions.viewportInnerSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom) / rowHeight);
153
+ const dimensions = apiRef.current.getRootDimensions();
154
+ const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
157
155
  apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
158
156
  }, [apiRef, props.autoPageSize, rowHeight]);
159
157
  (0, _utils.useGridApiEventHandler)(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
@@ -39,11 +39,11 @@ const gridPinnedRowsSelector = exports.gridPinnedRowsSelector = (0, _createSelec
39
39
  bottom: rawPinnedRows?.bottom?.map(rowEntry => ({
40
40
  id: rowEntry.id,
41
41
  model: rowEntry.model ?? {}
42
- })),
42
+ })) ?? [],
43
43
  top: rawPinnedRows?.top?.map(rowEntry => ({
44
44
  id: rowEntry.id,
45
45
  model: rowEntry.model ?? {}
46
- }))
46
+ })) ?? []
47
47
  };
48
48
  });
49
49
 
@@ -12,7 +12,7 @@ exports.getMinimalContentHeight = getMinimalContentHeight;
12
12
  exports.updateCacheWithNewRows = exports.isAutoGeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
13
13
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
14
  var _gridRowsSelector = require("./gridRowsSelector");
15
- var _densitySelector = require("../density/densitySelector");
15
+ var _dimensions = require("../dimensions");
16
16
  const GRID_ROOT_GROUP_ID = exports.GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;
17
17
  const GRID_ID_AUTOGENERATED = exports.GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
18
18
  const buildRootGroup = () => ({
@@ -295,7 +295,7 @@ function calculatePinnedRowsHeight(apiRef) {
295
295
  bottom: bottomPinnedRowsHeight
296
296
  };
297
297
  }
298
- function getMinimalContentHeight(apiRef, rowHeight) {
299
- const densityFactor = (0, _densitySelector.gridDensityFactorSelector)(apiRef);
300
- return `var(--DataGrid-overlayHeight, ${2 * Math.floor(rowHeight * densityFactor)}px)`;
298
+ function getMinimalContentHeight(apiRef) {
299
+ const dimensions = (0, _dimensions.gridDimensionsSelector)(apiRef.current.state);
300
+ return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
301
301
  }
@@ -20,6 +20,8 @@ var _gridRowsSelector = require("./gridRowsSelector");
20
20
  var _useDataGridProps = require("../../../DataGrid/useDataGridProps");
21
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
+ // TODO: I think the row heights can now be encoded as a single `size` instead of `sizes.baseXxxx`
24
+
23
25
  const rowsMetaStateInitializer = state => (0, _extends2.default)({}, state, {
24
26
  rowsMeta: {
25
27
  currentPageTotalHeight: 0,
@@ -184,15 +186,15 @@ const useGridRowsMeta = (apiRef, props) => {
184
186
  hydrateRowsMeta();
185
187
  }, [hydrateRowsMeta]);
186
188
  const debouncedHydrateRowsMeta = React.useMemo(() => (0, _utils.unstable_debounce)(hydrateRowsMeta, props.rowPositionsDebounceMs), [hydrateRowsMeta, props.rowPositionsDebounceMs]);
187
- const storeMeasuredRowHeight = React.useCallback((id, height, position) => {
189
+ const storeMeasuredRowHeight = React.useCallback((id, height) => {
188
190
  if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {
189
191
  return;
190
192
  }
191
193
 
192
194
  // Only trigger hydration if the value is different, otherwise we trigger a loop
193
- const needsHydration = rowsHeightLookup.current[id].sizes[`base${(0, _utils.unstable_capitalize)(position)}`] !== height;
195
+ const needsHydration = rowsHeightLookup.current[id].sizes.baseCenter !== height;
194
196
  rowsHeightLookup.current[id].needsFirstMeasurement = false;
195
- rowsHeightLookup.current[id].sizes[`base${(0, _utils.unstable_capitalize)(position)}`] = height;
197
+ rowsHeightLookup.current[id].sizes.baseCenter = height;
196
198
  if (needsHydration) {
197
199
  debouncedHydrateRowsMeta();
198
200
  }