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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/CHANGELOG.md +508 -30
  2. package/DataGrid/DataGrid.js +6 -6
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +3 -3
  6. package/components/GridColumnHeaders.d.ts +3 -2
  7. package/components/GridColumnHeaders.js +3 -11
  8. package/components/GridDetailPanels.d.ts +5 -0
  9. package/components/GridDetailPanels.js +4 -0
  10. package/components/GridHeaders.d.ts +4 -0
  11. package/components/GridHeaders.js +53 -0
  12. package/components/GridPinnedRows.d.ts +7 -0
  13. package/components/GridPinnedRows.js +4 -0
  14. package/components/GridRow.d.ts +7 -4
  15. package/components/GridRow.js +161 -97
  16. package/components/GridScrollbarFillerCell.d.ts +7 -0
  17. package/components/GridScrollbarFillerCell.js +39 -0
  18. package/components/base/GridBody.d.ts +2 -13
  19. package/components/base/GridBody.js +2 -116
  20. package/components/base/GridOverlays.js +10 -21
  21. package/components/cell/GridActionsCellItem.d.ts +2 -2
  22. package/components/cell/GridCell.d.ts +15 -21
  23. package/components/cell/GridCell.js +67 -372
  24. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  25. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  26. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  27. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  28. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  29. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  30. package/components/columnsManagement/GridColumnsManagement.d.ts +36 -0
  31. package/components/columnsManagement/GridColumnsManagement.js +260 -0
  32. package/components/columnsManagement/index.d.ts +1 -0
  33. package/components/columnsManagement/index.js +1 -0
  34. package/components/columnsManagement/utils.d.ts +4 -0
  35. package/components/columnsManagement/utils.js +16 -0
  36. package/components/containers/GridRoot.js +18 -15
  37. package/components/containers/GridRootStyles.js +307 -204
  38. package/components/index.d.ts +1 -0
  39. package/components/index.js +1 -0
  40. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  41. package/components/panel/GridColumnsPanel.d.ts +0 -28
  42. package/components/panel/GridColumnsPanel.js +5 -213
  43. package/components/panel/GridPanel.js +3 -4
  44. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  45. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  46. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  47. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  48. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  49. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  50. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  51. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  52. package/components/toolbar/GridToolbarExport.js +6 -1
  53. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  54. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  55. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  56. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  57. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  58. package/components/virtualization/GridBottomContainer.js +25 -0
  59. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  60. package/components/virtualization/GridMainContainer.js +20 -0
  61. package/components/virtualization/GridTopContainer.d.ts +2 -0
  62. package/components/virtualization/GridTopContainer.js +35 -0
  63. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  64. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  65. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  66. package/components/virtualization/GridVirtualScroller.js +69 -16
  67. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  68. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  69. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  70. package/constants/defaultGridSlotsComponents.js +8 -3
  71. package/constants/gridClasses.d.ts +72 -12
  72. package/constants/gridClasses.js +1 -1
  73. package/constants/localeTextConstants.js +4 -6
  74. package/hooks/core/gridCoreSelector.d.ts +6 -0
  75. package/hooks/core/gridCoreSelector.js +5 -0
  76. package/hooks/core/useGridApiInitialization.js +4 -0
  77. package/hooks/core/useGridInitialization.js +4 -0
  78. package/hooks/core/useGridRefs.d.ts +3 -0
  79. package/hooks/core/useGridRefs.js +13 -0
  80. package/hooks/core/useGridTheme.d.ts +3 -0
  81. package/hooks/core/useGridTheme.js +19 -0
  82. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  83. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  84. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  85. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  86. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  87. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  88. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  89. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  90. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  91. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  92. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  93. package/hooks/features/columns/index.d.ts +2 -2
  94. package/hooks/features/columns/index.js +2 -1
  95. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  96. package/hooks/features/columns/useGridColumns.js +20 -23
  97. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  98. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  99. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  100. package/hooks/features/dimensions/index.d.ts +2 -0
  101. package/hooks/features/dimensions/index.js +1 -0
  102. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  103. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  104. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  105. package/hooks/features/filter/useGridFilter.js +3 -3
  106. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  107. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  108. package/hooks/features/focus/useGridFocus.js +3 -3
  109. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  110. package/hooks/features/pagination/useGridPagination.js +3 -5
  111. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  112. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  113. package/hooks/features/rows/gridRowsSelector.js +5 -5
  114. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  115. package/hooks/features/rows/gridRowsUtils.js +8 -5
  116. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  117. package/hooks/features/scroll/useGridScroll.js +8 -10
  118. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  119. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  120. package/hooks/features/sorting/useGridSorting.js +15 -10
  121. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  122. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  123. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  124. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  125. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  126. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  127. package/hooks/utils/index.d.ts +3 -0
  128. package/hooks/utils/index.js +4 -1
  129. package/hooks/utils/useGridAriaAttributes.js +1 -2
  130. package/hooks/utils/useGridNativeEventListener.js +4 -9
  131. package/hooks/utils/useResizeObserver.d.ts +2 -0
  132. package/hooks/utils/useResizeObserver.js +36 -0
  133. package/hooks/utils/useRunOnce.d.ts +5 -0
  134. package/hooks/utils/useRunOnce.js +18 -0
  135. package/index.js +1 -1
  136. package/internals/index.d.ts +12 -9
  137. package/internals/index.js +9 -7
  138. package/legacy/DataGrid/DataGrid.js +6 -6
  139. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  140. package/legacy/DataGrid/useDataGridProps.js +1 -0
  141. package/legacy/components/GridColumnHeaders.js +3 -11
  142. package/legacy/components/GridDetailPanels.js +4 -0
  143. package/legacy/components/GridHeaders.js +53 -0
  144. package/legacy/components/GridPinnedRows.js +4 -0
  145. package/legacy/components/GridRow.js +159 -98
  146. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  147. package/legacy/components/base/GridBody.js +2 -114
  148. package/legacy/components/base/GridOverlays.js +10 -25
  149. package/legacy/components/cell/GridCell.js +69 -377
  150. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  151. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  152. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  153. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  154. package/legacy/components/columnsManagement/GridColumnsManagement.js +300 -0
  155. package/legacy/components/columnsManagement/index.js +1 -0
  156. package/legacy/components/columnsManagement/utils.js +22 -0
  157. package/legacy/components/containers/GridRoot.js +18 -15
  158. package/legacy/components/containers/GridRootStyles.js +215 -137
  159. package/legacy/components/index.js +1 -0
  160. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  161. package/legacy/components/panel/GridColumnsPanel.js +5 -233
  162. package/legacy/components/panel/GridPanel.js +3 -4
  163. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  164. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  165. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  166. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  167. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  168. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  169. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  170. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  171. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  172. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  173. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  174. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  175. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  176. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  177. package/legacy/constants/defaultGridSlotsComponents.js +8 -3
  178. package/legacy/constants/gridClasses.js +1 -1
  179. package/legacy/constants/localeTextConstants.js +4 -6
  180. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  181. package/legacy/hooks/core/useGridApiInitialization.js +4 -0
  182. package/legacy/hooks/core/useGridInitialization.js +4 -0
  183. package/legacy/hooks/core/useGridRefs.js +13 -0
  184. package/legacy/hooks/core/useGridTheme.js +21 -0
  185. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  186. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  187. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  188. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  189. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  190. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  191. package/legacy/hooks/features/columns/index.js +2 -1
  192. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  193. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  194. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  195. package/legacy/hooks/features/dimensions/index.js +1 -0
  196. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  197. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  198. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  199. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  200. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  201. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  202. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  203. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  204. package/legacy/hooks/features/rows/gridRowsUtils.js +8 -5
  205. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  206. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  207. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  208. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  209. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  210. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  211. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  212. package/legacy/hooks/utils/index.js +4 -1
  213. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  214. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  215. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  216. package/legacy/hooks/utils/useRunOnce.js +18 -0
  217. package/legacy/index.js +1 -1
  218. package/legacy/internals/index.js +9 -7
  219. package/legacy/locales/arSD.js +5 -6
  220. package/legacy/locales/beBY.js +5 -6
  221. package/legacy/locales/bgBG.js +5 -6
  222. package/legacy/locales/csCZ.js +5 -6
  223. package/legacy/locales/daDK.js +5 -6
  224. package/legacy/locales/deDE.js +5 -6
  225. package/legacy/locales/elGR.js +5 -6
  226. package/legacy/locales/esES.js +5 -6
  227. package/legacy/locales/faIR.js +5 -6
  228. package/legacy/locales/fiFI.js +5 -6
  229. package/legacy/locales/frFR.js +5 -6
  230. package/legacy/locales/heIL.js +5 -6
  231. package/legacy/locales/hrHR.js +160 -0
  232. package/legacy/locales/huHU.js +5 -6
  233. package/legacy/locales/index.js +4 -1
  234. package/legacy/locales/itIT.js +5 -6
  235. package/legacy/locales/jaJP.js +5 -6
  236. package/legacy/locales/koKR.js +5 -6
  237. package/legacy/locales/nbNO.js +5 -6
  238. package/legacy/locales/nlNL.js +5 -6
  239. package/legacy/locales/plPL.js +5 -6
  240. package/legacy/locales/ptBR.js +5 -6
  241. package/legacy/locales/ptPT.js +160 -0
  242. package/legacy/locales/roRO.js +5 -6
  243. package/legacy/locales/ruRU.js +5 -6
  244. package/legacy/locales/skSK.js +5 -6
  245. package/legacy/locales/svSE.js +5 -6
  246. package/legacy/locales/trTR.js +5 -6
  247. package/legacy/locales/ukUA.js +5 -6
  248. package/legacy/locales/urPK.js +5 -6
  249. package/legacy/locales/viVN.js +5 -6
  250. package/legacy/locales/zhCN.js +5 -6
  251. package/legacy/locales/zhHK.js +160 -0
  252. package/legacy/locales/zhTW.js +5 -6
  253. package/legacy/models/index.js +0 -1
  254. package/legacy/models/params/index.js +1 -2
  255. package/legacy/utils/utils.js +10 -1
  256. package/locales/arSD.js +5 -6
  257. package/locales/beBY.js +5 -6
  258. package/locales/bgBG.js +5 -6
  259. package/locales/csCZ.js +5 -6
  260. package/locales/daDK.js +5 -6
  261. package/locales/deDE.js +5 -6
  262. package/locales/elGR.js +5 -6
  263. package/locales/esES.js +5 -6
  264. package/locales/faIR.js +5 -6
  265. package/locales/fiFI.js +5 -6
  266. package/locales/frFR.js +5 -6
  267. package/locales/heIL.js +5 -6
  268. package/locales/hrHR.d.ts +1 -0
  269. package/locales/hrHR.js +148 -0
  270. package/locales/huHU.js +5 -6
  271. package/locales/index.d.ts +3 -0
  272. package/locales/index.js +4 -1
  273. package/locales/itIT.js +5 -6
  274. package/locales/jaJP.js +5 -6
  275. package/locales/koKR.js +5 -6
  276. package/locales/nbNO.js +5 -6
  277. package/locales/nlNL.js +5 -6
  278. package/locales/plPL.js +5 -6
  279. package/locales/ptBR.js +5 -6
  280. package/locales/ptPT.d.ts +1 -0
  281. package/locales/ptPT.js +148 -0
  282. package/locales/roRO.js +5 -6
  283. package/locales/ruRU.js +5 -6
  284. package/locales/skSK.js +5 -6
  285. package/locales/svSE.js +5 -6
  286. package/locales/trTR.js +5 -6
  287. package/locales/ukUA.js +5 -6
  288. package/locales/urPK.js +5 -6
  289. package/locales/viVN.js +5 -6
  290. package/locales/zhCN.js +5 -6
  291. package/locales/zhHK.d.ts +1 -0
  292. package/locales/zhHK.js +148 -0
  293. package/locales/zhTW.js +5 -6
  294. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  295. package/models/api/gridCoreApi.d.ts +16 -16
  296. package/models/api/gridLocaleTextApi.d.ts +3 -5
  297. package/models/api/gridRowsMetaApi.d.ts +1 -1
  298. package/models/api/gridVirtualizationApi.d.ts +2 -3
  299. package/models/colDef/gridColType.d.ts +11 -2
  300. package/models/events/gridEventLookup.d.ts +3 -3
  301. package/models/gridFilterModel.d.ts +1 -1
  302. package/models/gridSlotsComponent.d.ts +21 -2
  303. package/models/gridSlotsComponentsProps.d.ts +4 -0
  304. package/models/gridStateCommunity.d.ts +5 -1
  305. package/models/index.d.ts +0 -1
  306. package/models/index.js +0 -1
  307. package/models/params/index.d.ts +0 -1
  308. package/models/params/index.js +1 -2
  309. package/models/props/DataGridProps.d.ts +6 -11
  310. package/modern/DataGrid/DataGrid.js +6 -6
  311. package/modern/DataGrid/useDataGridComponent.js +2 -1
  312. package/modern/DataGrid/useDataGridProps.js +1 -0
  313. package/modern/components/GridColumnHeaders.js +3 -11
  314. package/modern/components/GridDetailPanels.js +4 -0
  315. package/modern/components/GridHeaders.js +53 -0
  316. package/modern/components/GridPinnedRows.js +4 -0
  317. package/modern/components/GridRow.js +159 -96
  318. package/modern/components/GridScrollbarFillerCell.js +39 -0
  319. package/modern/components/base/GridBody.js +2 -116
  320. package/modern/components/base/GridOverlays.js +10 -16
  321. package/modern/components/cell/GridCell.js +65 -369
  322. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  323. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  324. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  325. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  326. package/modern/components/columnsManagement/GridColumnsManagement.js +256 -0
  327. package/modern/components/columnsManagement/index.js +1 -0
  328. package/modern/components/columnsManagement/utils.js +16 -0
  329. package/modern/components/containers/GridRoot.js +18 -14
  330. package/modern/components/containers/GridRootStyles.js +307 -204
  331. package/modern/components/index.js +1 -0
  332. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  333. package/modern/components/panel/GridColumnsPanel.js +4 -209
  334. package/modern/components/panel/GridPanel.js +3 -4
  335. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  336. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  337. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  338. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  339. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  340. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  341. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  342. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  343. package/modern/components/virtualization/GridMainContainer.js +20 -0
  344. package/modern/components/virtualization/GridTopContainer.js +35 -0
  345. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  346. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  347. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  348. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  349. package/modern/constants/defaultGridSlotsComponents.js +8 -3
  350. package/modern/constants/gridClasses.js +1 -1
  351. package/modern/constants/localeTextConstants.js +4 -6
  352. package/modern/hooks/core/gridCoreSelector.js +5 -0
  353. package/modern/hooks/core/useGridApiInitialization.js +3 -0
  354. package/modern/hooks/core/useGridInitialization.js +4 -0
  355. package/modern/hooks/core/useGridRefs.js +13 -0
  356. package/modern/hooks/core/useGridTheme.js +19 -0
  357. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  358. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  359. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  360. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  361. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  362. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  363. package/modern/hooks/features/columns/index.js +2 -1
  364. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  365. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  366. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  367. package/modern/hooks/features/dimensions/index.js +1 -0
  368. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  369. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  370. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  371. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  372. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  373. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  374. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  375. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  376. package/modern/hooks/features/rows/gridRowsUtils.js +8 -5
  377. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  378. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  379. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  380. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  381. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  382. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  383. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  384. package/modern/hooks/utils/index.js +4 -1
  385. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  386. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  387. package/modern/hooks/utils/useResizeObserver.js +36 -0
  388. package/modern/hooks/utils/useRunOnce.js +18 -0
  389. package/modern/index.js +1 -1
  390. package/modern/internals/index.js +9 -7
  391. package/modern/locales/arSD.js +5 -6
  392. package/modern/locales/beBY.js +5 -6
  393. package/modern/locales/bgBG.js +5 -6
  394. package/modern/locales/csCZ.js +5 -6
  395. package/modern/locales/daDK.js +5 -6
  396. package/modern/locales/deDE.js +5 -6
  397. package/modern/locales/elGR.js +5 -6
  398. package/modern/locales/esES.js +5 -6
  399. package/modern/locales/faIR.js +5 -6
  400. package/modern/locales/fiFI.js +5 -6
  401. package/modern/locales/frFR.js +5 -6
  402. package/modern/locales/heIL.js +5 -6
  403. package/modern/locales/hrHR.js +148 -0
  404. package/modern/locales/huHU.js +5 -6
  405. package/modern/locales/index.js +4 -1
  406. package/modern/locales/itIT.js +5 -6
  407. package/modern/locales/jaJP.js +5 -6
  408. package/modern/locales/koKR.js +5 -6
  409. package/modern/locales/nbNO.js +5 -6
  410. package/modern/locales/nlNL.js +5 -6
  411. package/modern/locales/plPL.js +5 -6
  412. package/modern/locales/ptBR.js +5 -6
  413. package/modern/locales/ptPT.js +148 -0
  414. package/modern/locales/roRO.js +5 -6
  415. package/modern/locales/ruRU.js +5 -6
  416. package/modern/locales/skSK.js +5 -6
  417. package/modern/locales/svSE.js +5 -6
  418. package/modern/locales/trTR.js +5 -6
  419. package/modern/locales/ukUA.js +5 -6
  420. package/modern/locales/urPK.js +5 -6
  421. package/modern/locales/viVN.js +5 -6
  422. package/modern/locales/zhCN.js +5 -6
  423. package/modern/locales/zhHK.js +148 -0
  424. package/modern/locales/zhTW.js +5 -6
  425. package/modern/models/index.js +0 -1
  426. package/modern/models/params/index.js +1 -2
  427. package/modern/utils/utils.js +10 -1
  428. package/node/DataGrid/DataGrid.js +6 -6
  429. package/node/DataGrid/useDataGridComponent.js +1 -0
  430. package/node/DataGrid/useDataGridProps.js +1 -0
  431. package/node/components/GridColumnHeaders.js +3 -11
  432. package/node/components/GridDetailPanels.js +10 -0
  433. package/node/components/GridHeaders.js +60 -0
  434. package/node/components/GridPinnedRows.js +10 -0
  435. package/node/components/GridRow.js +157 -94
  436. package/node/components/GridScrollbarFillerCell.js +47 -0
  437. package/node/components/base/GridBody.js +7 -118
  438. package/node/components/base/GridOverlays.js +9 -15
  439. package/node/components/cell/GridCell.js +66 -369
  440. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  441. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  442. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  443. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  444. package/node/components/columnsManagement/GridColumnsManagement.js +264 -0
  445. package/node/components/columnsManagement/index.js +16 -0
  446. package/node/components/columnsManagement/utils.js +24 -0
  447. package/node/components/containers/GridRoot.js +17 -14
  448. package/node/components/containers/GridRootStyles.js +175 -72
  449. package/node/components/index.js +11 -0
  450. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  451. package/node/components/panel/GridColumnsPanel.js +4 -208
  452. package/node/components/panel/GridPanel.js +3 -4
  453. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  454. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  455. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  456. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  457. package/node/components/toolbar/GridToolbarExport.js +6 -1
  458. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  459. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  460. package/node/components/virtualization/GridBottomContainer.js +34 -0
  461. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  462. package/node/components/virtualization/GridTopContainer.js +44 -0
  463. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  464. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  465. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  466. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  467. package/node/constants/defaultGridSlotsComponents.js +6 -1
  468. package/node/constants/gridClasses.js +1 -1
  469. package/node/constants/localeTextConstants.js +4 -6
  470. package/node/hooks/core/gridCoreSelector.js +12 -0
  471. package/node/hooks/core/useGridApiInitialization.js +3 -0
  472. package/node/hooks/core/useGridInitialization.js +4 -0
  473. package/node/hooks/core/useGridRefs.js +22 -0
  474. package/node/hooks/core/useGridTheme.js +29 -0
  475. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  476. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  477. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  478. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  479. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  480. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  481. package/node/hooks/features/columns/index.js +22 -61
  482. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  483. package/node/hooks/features/columns/useGridColumns.js +20 -22
  484. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  485. package/node/hooks/features/dimensions/index.js +11 -0
  486. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  487. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  488. package/node/hooks/features/filter/useGridFilter.js +2 -2
  489. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  490. package/node/hooks/features/focus/useGridFocus.js +2 -2
  491. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  492. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  493. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  494. package/node/hooks/features/rows/gridRowsUtils.js +8 -5
  495. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  496. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  497. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  498. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  499. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  500. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  501. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  502. package/node/hooks/utils/index.js +36 -0
  503. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  504. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  505. package/node/hooks/utils/useResizeObserver.js +44 -0
  506. package/node/hooks/utils/useRunOnce.js +27 -0
  507. package/node/index.js +1 -1
  508. package/node/internals/index.js +86 -71
  509. package/node/locales/arSD.js +5 -6
  510. package/node/locales/beBY.js +5 -6
  511. package/node/locales/bgBG.js +5 -6
  512. package/node/locales/csCZ.js +5 -6
  513. package/node/locales/daDK.js +5 -6
  514. package/node/locales/deDE.js +5 -6
  515. package/node/locales/elGR.js +5 -6
  516. package/node/locales/esES.js +5 -6
  517. package/node/locales/faIR.js +5 -6
  518. package/node/locales/fiFI.js +5 -6
  519. package/node/locales/frFR.js +5 -6
  520. package/node/locales/heIL.js +5 -6
  521. package/node/locales/hrHR.js +154 -0
  522. package/node/locales/huHU.js +5 -6
  523. package/node/locales/index.js +33 -0
  524. package/node/locales/itIT.js +5 -6
  525. package/node/locales/jaJP.js +5 -6
  526. package/node/locales/koKR.js +5 -6
  527. package/node/locales/nbNO.js +5 -6
  528. package/node/locales/nlNL.js +5 -6
  529. package/node/locales/plPL.js +5 -6
  530. package/node/locales/ptBR.js +5 -6
  531. package/node/locales/ptPT.js +154 -0
  532. package/node/locales/roRO.js +5 -6
  533. package/node/locales/ruRU.js +5 -6
  534. package/node/locales/skSK.js +5 -6
  535. package/node/locales/svSE.js +5 -6
  536. package/node/locales/trTR.js +5 -6
  537. package/node/locales/ukUA.js +5 -6
  538. package/node/locales/urPK.js +5 -6
  539. package/node/locales/viVN.js +5 -6
  540. package/node/locales/zhCN.js +5 -6
  541. package/node/locales/zhHK.js +154 -0
  542. package/node/locales/zhTW.js +5 -6
  543. package/node/models/index.js +0 -11
  544. package/node/models/params/index.js +0 -11
  545. package/node/utils/utils.js +11 -1
  546. package/package.json +6 -6
  547. package/utils/utils.d.ts +6 -0
  548. package/utils/utils.js +10 -1
  549. package/components/DataGridVirtualScroller.d.ts +0 -3
  550. package/components/DataGridVirtualScroller.js +0 -35
  551. package/components/containers/GridMainContainer.js +0 -43
  552. package/legacy/components/DataGridVirtualScroller.js +0 -32
  553. package/legacy/components/containers/GridMainContainer.js +0 -45
  554. package/legacy/models/gridRootContainerRef.js +0 -1
  555. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  556. package/models/gridRootContainerRef.d.ts +0 -5
  557. package/models/gridRootContainerRef.js +0 -1
  558. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  559. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  560. package/modern/components/DataGridVirtualScroller.js +0 -35
  561. package/modern/components/containers/GridMainContainer.js +0 -42
  562. package/modern/models/gridRootContainerRef.js +0 -1
  563. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  564. package/node/components/DataGridVirtualScroller.js +0 -42
  565. package/node/models/gridRootContainerRef.js +0 -5
  566. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -0,0 +1,19 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import { useTheme } from '@mui/material/styles';
4
+ export const useGridTheme = apiRef => {
5
+ const theme = useTheme();
6
+ if (!apiRef.current.state.theme) {
7
+ apiRef.current.state.theme = theme;
8
+ }
9
+ const isFirstEffect = React.useRef(true);
10
+ React.useEffect(() => {
11
+ if (isFirstEffect.current) {
12
+ isFirstEffect.current = false;
13
+ } else {
14
+ apiRef.current.setState(state => _extends({}, state, {
15
+ theme
16
+ }));
17
+ }
18
+ }, [apiRef, theme]);
19
+ };
@@ -7,4 +7,4 @@ export declare const columnGroupsStateInitializer: GridStateInitializer<Pick<Dat
7
7
  * @requires useGridColumns (method, event)
8
8
  * @requires useGridParamsApi (method)
9
9
  */
10
- export declare const useGridColumnGrouping: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'columnGroupingModel' | 'experimentalFeatures'>) => void;
10
+ export declare const useGridColumnGrouping: (apiRef: React.MutableRefObject<GridPrivateApiCommunity>, props: Pick<DataGridProcessedProps, 'columnGroupingModel'>) => void;
@@ -41,16 +41,15 @@ const createGroupLookup = columnGroupingModel => {
41
41
  return _extends({}, groupLookup);
42
42
  };
43
43
  export const columnGroupsStateInitializer = (state, props, apiRef) => {
44
- var _props$experimentalFe, _props$columnGrouping, _props$columnGrouping2, _apiRef$current$state;
45
- if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
44
+ var _props$columnGrouping, _props$columnGrouping2, _apiRef$current$state;
45
+ if (!props.columnGroupingModel) {
46
46
  return state;
47
47
  }
48
48
  const columnFields = gridColumnFieldsSelector(apiRef);
49
49
  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
50
50
  const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
51
51
  const unwrappedGroupingModel = unwrapGroupingColumnModel((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
52
- const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, // @ts-expect-error Move this part to `Pro` package
53
- (_apiRef$current$state = apiRef.current.state.pinnedColumns) != null ? _apiRef$current$state : {});
52
+ const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, (_apiRef$current$state = apiRef.current.state.pinnedColumns) != null ? _apiRef$current$state : {});
54
53
  const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => {
55
54
  var _unwrappedGroupingMod, _unwrappedGroupingMod2;
56
55
  return (_unwrappedGroupingMod = (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) == null ? void 0 : _unwrappedGroupingMod2.length) != null ? _unwrappedGroupingMod : 0;
@@ -70,7 +69,6 @@ export const columnGroupsStateInitializer = (state, props, apiRef) => {
70
69
  * @requires useGridParamsApi (method)
71
70
  */
72
71
  export const useGridColumnGrouping = (apiRef, props) => {
73
- var _props$experimentalFe3;
74
72
  /**
75
73
  * API METHODS
76
74
  */
@@ -84,8 +82,8 @@ export const useGridColumnGrouping = (apiRef, props) => {
84
82
  return columnGroupLookup;
85
83
  }, [apiRef]);
86
84
  const columnGroupingApi = {
87
- unstable_getColumnGroupPath: getColumnGroupPath,
88
- unstable_getAllGroupDetails: getAllGroupDetails
85
+ getColumnGroupPath,
86
+ getAllGroupDetails
89
87
  };
90
88
  useGridApiMethod(apiRef, columnGroupingApi, 'public');
91
89
  const handleColumnIndexChange = React.useCallback(() => {
@@ -94,8 +92,6 @@ export const useGridColumnGrouping = (apiRef, props) => {
94
92
  apiRef.current.setState(state => {
95
93
  var _state$columns$ordere, _state$columns, _state$pinnedColumns;
96
94
  const orderedFields = (_state$columns$ordere = (_state$columns = state.columns) == null ? void 0 : _state$columns.orderedFields) != null ? _state$columns$ordere : [];
97
-
98
- // @ts-expect-error Move this logic to `Pro` package
99
95
  const pinnedColumns = (_state$pinnedColumns = state.pinnedColumns) != null ? _state$pinnedColumns : {};
100
96
  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);
101
97
  return _extends({}, state, {
@@ -106,10 +102,7 @@ export const useGridColumnGrouping = (apiRef, props) => {
106
102
  });
107
103
  }, [apiRef, props.columnGroupingModel]);
108
104
  const updateColumnGroupingState = React.useCallback(columnGroupingModel => {
109
- var _props$experimentalFe2, _apiRef$current$getPi, _apiRef$current$getPi2, _apiRef$current;
110
- if (!((_props$experimentalFe2 = props.experimentalFeatures) != null && _props$experimentalFe2.columnGrouping)) {
111
- return;
112
- }
105
+ var _apiRef$current$getPi, _apiRef$current$getPi2, _apiRef$current;
113
106
  // @ts-expect-error Move this logic to `Pro` package
114
107
  const pinnedColumns = (_apiRef$current$getPi = (_apiRef$current$getPi2 = (_apiRef$current = apiRef.current).getPinnedColumns) == null ? void 0 : _apiRef$current$getPi2.call(_apiRef$current)) != null ? _apiRef$current$getPi : {};
115
108
  const columnFields = gridColumnFieldsSelector(apiRef);
@@ -131,7 +124,7 @@ export const useGridColumnGrouping = (apiRef, props) => {
131
124
  }
132
125
  });
133
126
  });
134
- }, [apiRef, (_props$experimentalFe3 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe3.columnGrouping]);
127
+ }, [apiRef]);
135
128
  useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);
136
129
  useGridApiEventHandler(apiRef, 'columnsChange', () => {
137
130
  updateColumnGroupingState(props.columnGroupingModel);
@@ -5,20 +5,17 @@ import { GridSortColumnLookup } from '../sorting';
5
5
  import { GridFilterActiveItemsLookup } from '../filter';
6
6
  import { GridColumnGroupIdentifier, GridColumnIdentifier } from '../focus';
7
7
  import { GridColumnMenuState } from '../columnMenu';
8
- import { GridColumnVisibilityModel } from '../columns';
8
+ import { GridPinnedColumnPosition, GridColumnVisibilityModel } from '../columns';
9
9
  import { GridGroupingStructure } from '../columnGrouping/gridColumnGroupsInterfaces';
10
10
  export interface UseGridColumnHeadersProps {
11
11
  innerRef?: React.Ref<HTMLDivElement>;
12
- minColumnIndex?: number;
13
12
  visibleColumns: GridStateColDef[];
14
13
  sortColumnLookup: GridSortColumnLookup;
15
14
  filterColumnLookup: GridFilterActiveItemsLookup;
16
- columnPositions: number[];
17
15
  columnHeaderTabIndexState: GridColumnIdentifier | null;
18
16
  columnGroupHeaderTabIndexState: GridColumnGroupIdentifier | null;
19
17
  columnHeaderFocus: GridColumnIdentifier | null;
20
18
  columnGroupHeaderFocus: GridColumnGroupIdentifier | null;
21
- densityFactor: number;
22
19
  headerGroupingMaxDepth: number;
23
20
  columnMenuState: GridColumnMenuState;
24
21
  columnVisibility: GridColumnVisibilityModel;
@@ -26,32 +23,30 @@ export interface UseGridColumnHeadersProps {
26
23
  hasOtherElementInTabSequence: boolean;
27
24
  }
28
25
  export interface GetHeadersParams {
29
- renderContext: GridRenderContext | null;
26
+ position?: GridPinnedColumnPosition;
27
+ renderContext?: GridRenderContext;
30
28
  minFirstColumn?: number;
31
29
  maxLastColumn?: number;
32
30
  }
31
+ export declare const GridColumnHeaderRow: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
32
+ ownerState: {
33
+ params?: GetHeadersParams;
34
+ leftOverflow?: number;
35
+ };
36
+ }, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
33
37
  export declare const useGridColumnHeaders: (props: UseGridColumnHeadersProps) => {
34
- renderContext: GridRenderContext | null;
35
- getColumnHeaders: (params?: GetHeadersParams, other?: {}) => React.JSX.Element | null;
38
+ renderContext: GridRenderContext;
39
+ getFiller: (params: GetHeadersParams | undefined, borderTop?: boolean) => React.JSX.Element;
40
+ getColumnHeaders: (params?: GetHeadersParams, other?: {}) => React.JSX.Element;
36
41
  getColumnsToRender: (params?: GetHeadersParams) => {
37
42
  renderedColumns: GridStateColDef[];
38
43
  firstColumnToRender: number;
39
44
  lastColumnToRender: number;
40
- minFirstColumn: number;
41
- maxLastColumn: number;
42
- } | null;
45
+ };
43
46
  getColumnGroupHeaders: (params?: GetHeadersParams) => React.JSX.Element[] | null;
44
47
  isDragging: boolean;
45
- getRootProps: (other?: {}) => {
46
- style: {
47
- minHeight: number;
48
- maxHeight: number;
49
- lineHeight: string;
50
- };
51
- };
52
48
  getInnerProps: () => {
53
49
  ref: ((instance: HTMLDivElement | null) => void) | null;
54
50
  role: string;
55
51
  };
56
- headerHeight: number;
57
52
  };
@@ -1,145 +1,70 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import * as ReactDOM from 'react-dom';
4
3
  import { unstable_useForkRef as useForkRef } from '@mui/utils';
5
- import { styled, useTheme } from '@mui/material/styles';
6
- import { defaultMemoize } from 'reselect';
4
+ import { styled } from '@mui/material/styles';
7
5
  import { useGridSelector } from '../../utils';
8
6
  import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';
9
- import { useGridRootProps } from '../../utils/useGridRootProps';
10
7
  import { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
11
8
  import { GridColumnHeaderItem } from '../../../components/columnHeaders/GridColumnHeaderItem';
12
- import { getFirstColumnIndexToRender, getTotalHeaderHeight } from '../columns/gridColumnsUtils';
13
- import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
14
- import { areRenderContextsEqual, getRenderableIndexes } from '../virtualization/useGridVirtualScroller';
15
- import { gridVirtualizationColumnEnabledSelector } from '../virtualization';
9
+ import { gridDimensionsSelector } from '../dimensions';
10
+ import { gridRenderContextColumnsSelector, gridVirtualizationColumnEnabledSelector } from '../virtualization';
16
11
  import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
12
+ import { GridPinnedColumnPosition, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
13
+ import { GridScrollbarFillerCell as ScrollbarFiller } from '../../../components/GridScrollbarFillerCell';
14
+ import { gridClasses } from '../../../constants/gridClasses';
17
15
  import { jsx as _jsx } from "react/jsx-runtime";
18
- const GridColumnHeaderRow = styled('div', {
16
+ import { jsxs as _jsxs } from "react/jsx-runtime";
17
+ const SpaceFiller = styled('div')({
18
+ /* GridRootStyles conflict */
19
+ '&&': {
20
+ padding: 0,
21
+ width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
22
+ }
23
+ });
24
+ export const GridColumnHeaderRow = styled('div', {
19
25
  name: 'MuiDataGrid',
20
26
  slot: 'ColumnHeaderRow',
21
27
  overridesResolver: (props, styles) => styles.columnHeaderRow
22
- })(() => ({
23
- display: 'flex'
28
+ })(({
29
+ ownerState: {
30
+ params: {
31
+ position
32
+ } = {},
33
+ leftOverflow = 0
34
+ }
35
+ }) => ({
36
+ display: 'flex',
37
+ height: 'var(--DataGrid-headerHeight)',
38
+ transform: position === undefined ? `translate3d(${leftOverflow !== 0 ? `calc(var(--DataGrid-offsetLeft) - ${leftOverflow}px)` : 'var(--DataGrid-offsetLeft)'}, 0, 0)` : undefined
24
39
  }));
25
- function isUIEvent(event) {
26
- return !!event.target;
27
- }
28
40
  export const useGridColumnHeaders = props => {
29
41
  const {
30
42
  innerRef: innerRefProp,
31
- minColumnIndex = 0,
32
43
  visibleColumns,
33
44
  sortColumnLookup,
34
45
  filterColumnLookup,
35
- columnPositions,
36
46
  columnHeaderTabIndexState,
37
47
  columnGroupHeaderTabIndexState,
38
48
  columnHeaderFocus,
39
49
  columnGroupHeaderFocus,
40
- densityFactor,
41
50
  headerGroupingMaxDepth,
42
51
  columnMenuState,
43
52
  columnVisibility,
44
53
  columnGroupsHeaderStructure,
45
54
  hasOtherElementInTabSequence
46
55
  } = props;
47
- const theme = useTheme();
48
56
  const [dragCol, setDragCol] = React.useState('');
49
57
  const [resizeCol, setResizeCol] = React.useState('');
50
58
  const apiRef = useGridPrivateApiContext();
51
59
  const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
52
- const rootProps = useGridRootProps();
53
60
  const innerRef = React.useRef(null);
54
61
  const handleInnerRef = useForkRef(innerRefProp, innerRef);
55
- const [renderContext, setRenderContextRaw] = React.useState(null);
56
- const prevRenderContext = React.useRef(renderContext);
57
- const prevScrollLeft = React.useRef(0);
58
- const currentPage = useGridVisibleRows(apiRef, rootProps);
59
- const totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps.columnHeaderHeight);
60
- const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);
61
- const setRenderContext = React.useCallback(nextRenderContext => {
62
- if (renderContext && nextRenderContext && areRenderContextsEqual(renderContext, nextRenderContext)) {
63
- return;
64
- }
65
- setRenderContextRaw(nextRenderContext);
66
- }, [renderContext]);
62
+ const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
63
+ const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
64
+ const visiblePinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
67
65
  React.useEffect(() => {
68
66
  apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
69
67
  }, [apiRef]);
70
-
71
- // memoize `getFirstColumnIndexToRender`, since it's called on scroll
72
- const getFirstColumnIndexToRenderRef = React.useRef(defaultMemoize(getFirstColumnIndexToRender, {
73
- equalityCheck: (a, b) => ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(key => a[key] === b[key])
74
- }));
75
- const updateInnerPosition = React.useCallback(nextRenderContext => {
76
- const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
77
- firstIndex: nextRenderContext.firstRowIndex,
78
- lastIndex: nextRenderContext.lastRowIndex,
79
- minFirstIndex: 0,
80
- maxLastIndex: currentPage.rows.length,
81
- buffer: rootProps.rowBuffer
82
- });
83
- const firstColumnToRender = getFirstColumnIndexToRenderRef.current({
84
- firstColumnIndex: nextRenderContext.firstColumnIndex,
85
- minColumnIndex,
86
- columnBuffer: rootProps.columnBuffer,
87
- firstRowToRender,
88
- lastRowToRender,
89
- apiRef,
90
- visibleRows: currentPage.rows
91
- });
92
- const direction = theme.direction === 'ltr' ? 1 : -1;
93
- const offset = firstColumnToRender > 0 ? prevScrollLeft.current - direction * columnPositions[firstColumnToRender] : prevScrollLeft.current;
94
- innerRef.current.style.transform = `translate3d(${-offset}px, 0px, 0px)`;
95
- }, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer, theme.direction]);
96
- React.useLayoutEffect(() => {
97
- if (renderContext) {
98
- updateInnerPosition(renderContext);
99
- }
100
- }, [renderContext, updateInnerPosition]);
101
- const handleScroll = React.useCallback(({
102
- left,
103
- renderContext: nextRenderContext = null
104
- }, event) => {
105
- var _prevRenderContext$cu, _prevRenderContext$cu2;
106
- if (!innerRef.current) {
107
- return;
108
- }
109
-
110
- // Ignore vertical scroll.
111
- // Excepts the first event which sets the previous render context.
112
- if (prevScrollLeft.current === left && ((_prevRenderContext$cu = prevRenderContext.current) == null ? void 0 : _prevRenderContext$cu.firstColumnIndex) === (nextRenderContext == null ? void 0 : nextRenderContext.firstColumnIndex) && ((_prevRenderContext$cu2 = prevRenderContext.current) == null ? void 0 : _prevRenderContext$cu2.lastColumnIndex) === (nextRenderContext == null ? void 0 : nextRenderContext.lastColumnIndex)) {
113
- return;
114
- }
115
- prevScrollLeft.current = left;
116
-
117
- // We can only update the position when we guarantee that the render context has been
118
- // rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
119
- let canUpdateInnerPosition = false;
120
- if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
121
- // ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
122
- if (isUIEvent(event)) {
123
- // To prevent flickering, the inner position can only be updated after the new context has
124
- // been rendered. ReactDOM.flushSync ensures that the state changes will happen before
125
- // updating the position.
126
- ReactDOM.flushSync(() => {
127
- setRenderContext(nextRenderContext);
128
- });
129
- canUpdateInnerPosition = true;
130
- } else {
131
- setRenderContext(nextRenderContext);
132
- }
133
- prevRenderContext.current = nextRenderContext;
134
- } else {
135
- canUpdateInnerPosition = true;
136
- }
137
-
138
- // Pass directly the render context to avoid waiting for the next render
139
- if (nextRenderContext && canUpdateInnerPosition) {
140
- updateInnerPosition(nextRenderContext);
141
- }
142
- }, [updateInnerPosition, setRenderContext]);
143
68
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
144
69
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
145
70
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
@@ -148,53 +73,41 @@ export const useGridColumnHeaders = props => {
148
73
  useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
149
74
  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
150
75
  useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
151
- useGridApiEventHandler(apiRef, 'scrollPositionChange', handleScroll);
152
76
 
153
77
  // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
154
78
  const getColumnsToRender = params => {
155
79
  const {
156
- renderContext: nextRenderContext = renderContext,
157
- minFirstColumn = minColumnIndex,
80
+ renderContext: currentContext = renderContext,
81
+ // TODO: `minFirstColumn` is not used anymore, could be refactored out.
158
82
  maxLastColumn = visibleColumns.length
159
83
  } = params || {};
160
- if (!nextRenderContext) {
161
- return null;
162
- }
163
- const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
164
- firstIndex: nextRenderContext.firstRowIndex,
165
- lastIndex: nextRenderContext.lastRowIndex,
166
- minFirstIndex: 0,
167
- maxLastIndex: currentPage.rows.length,
168
- buffer: rootProps.rowBuffer
169
- });
170
- const firstColumnToRender = !hasVirtualization ? 0 : getFirstColumnIndexToRenderRef.current({
171
- firstColumnIndex: nextRenderContext.firstColumnIndex,
172
- minColumnIndex: minFirstColumn,
173
- columnBuffer: rootProps.columnBuffer,
174
- apiRef,
175
- firstRowToRender,
176
- lastRowToRender,
177
- visibleRows: currentPage.rows
178
- });
179
- const lastColumnToRender = !hasVirtualization ? maxLastColumn : Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
84
+ const firstColumnToRender = !hasVirtualization ? 0 : currentContext.firstColumnIndex;
85
+ const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;
180
86
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
181
87
  return {
182
88
  renderedColumns,
183
89
  firstColumnToRender,
184
- lastColumnToRender,
185
- minFirstColumn,
186
- maxLastColumn
90
+ lastColumnToRender
187
91
  };
188
92
  };
93
+ const getFiller = (params, borderTop = false) => {
94
+ const isPinnedRight = (params == null ? void 0 : params.position) === GridPinnedColumnPosition.RIGHT;
95
+ const hasScrollbarFiller = visiblePinnedColumns.right.length > 0 && isPinnedRight || visiblePinnedColumns.right.length === 0 && (params == null ? void 0 : params.position) === undefined;
96
+ return /*#__PURE__*/_jsxs(React.Fragment, {
97
+ children: [(params == null ? void 0 : params.position) === undefined && /*#__PURE__*/_jsx(SpaceFiller, {
98
+ className: gridClasses.columnHeader
99
+ }), hasScrollbarFiller && /*#__PURE__*/_jsx(ScrollbarFiller, {
100
+ header: true,
101
+ borderTop: borderTop,
102
+ pinnedRight: isPinnedRight
103
+ })]
104
+ });
105
+ };
189
106
  const getColumnHeaders = (params, other = {}) => {
190
- const columnsToRender = getColumnsToRender(params);
191
- if (columnsToRender == null) {
192
- return null;
193
- }
194
107
  const {
195
108
  renderedColumns,
196
109
  firstColumnToRender
197
- } = columnsToRender;
110
+ } = getColumnsToRender(params);
198
111
  const columns = [];
199
112
  for (let i = 0; i < renderedColumns.length; i += 1) {
200
113
  const colDef = renderedColumns[i];
@@ -206,7 +119,7 @@ export const useGridColumnHeaders = props => {
206
119
  columns.push( /*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {
207
120
  columnMenuOpen: open,
208
121
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
209
- headerHeight: headerHeight,
122
+ headerHeight: dimensions.headerHeight,
210
123
  isDragging: colDef.field === dragCol,
211
124
  colDef: colDef,
212
125
  colIndex: columnIndex,
@@ -215,11 +128,13 @@ export const useGridColumnHeaders = props => {
215
128
  tabIndex: tabIndex
216
129
  }, other), colDef.field));
217
130
  }
218
- return /*#__PURE__*/_jsx(GridColumnHeaderRow, {
131
+ return /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
219
132
  role: "row",
220
133
  "aria-rowindex": headerGroupingMaxDepth + 1,
221
- ownerState: rootProps,
222
- children: columns
134
+ ownerState: {
135
+ params
136
+ },
137
+ children: [columns, getFiller(params)]
223
138
  });
224
139
  };
225
140
  const getColumnGroupHeaders = params => {
@@ -227,7 +142,7 @@ export const useGridColumnHeaders = props => {
227
142
  return null;
228
143
  }
229
144
  const columnsToRender = getColumnsToRender(params);
230
- if (columnsToRender == null || columnsToRender.renderedColumns.length === 0) {
145
+ if (columnsToRender.renderedColumns.length === 0) {
231
146
  return null;
232
147
  }
233
148
  const {
@@ -237,16 +152,16 @@ export const useGridColumnHeaders = props => {
237
152
  const columns = [];
238
153
  const headerToRender = [];
239
154
  for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
240
- var _apiRef$current$unsta, _apiRef$current$unsta2;
155
+ var _apiRef$current$getCo, _apiRef$current$getCo2;
241
156
  const rowStructure = columnGroupsHeaderStructure[depth];
242
157
  const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
243
- const firstGroupToRender = (_apiRef$current$unsta = apiRef.current.unstable_getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$unsta : null;
158
+ const firstGroupToRender = (_apiRef$current$getCo = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo : null;
244
159
  const firstGroupIndex = rowStructure.findIndex(({
245
160
  groupId,
246
161
  columnFields
247
162
  }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
248
163
  const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
249
- const lastGroupToRender = (_apiRef$current$unsta2 = apiRef.current.unstable_getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$unsta2 : null;
164
+ const lastGroupToRender = (_apiRef$current$getCo2 = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth]) != null ? _apiRef$current$getCo2 : null;
250
165
  const lastGroupIndex = rowStructure.findIndex(({
251
166
  groupId,
252
167
  columnFields
@@ -287,15 +202,14 @@ export const useGridColumnHeaders = props => {
287
202
  });
288
203
  }
289
204
  headerToRender.forEach((depthInfo, depthIndex) => {
290
- columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
291
- style: {
292
- height: `${headerHeight}px`,
293
- transform: `translateX(-${depthInfo.leftOverflow}px)`
294
- },
205
+ columns.push( /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
295
206
  role: "row",
296
207
  "aria-rowindex": depthIndex + 1,
297
- ownerState: rootProps,
298
- children: depthInfo.elements.map(({
208
+ ownerState: {
209
+ params,
210
+ leftOverflow: depthInfo.leftOverflow
211
+ },
212
+ children: [depthInfo.elements.map(({
299
213
  groupId,
300
214
  width,
301
215
  fields,
@@ -311,33 +225,25 @@ export const useGridColumnHeaders = props => {
311
225
  depth: depthIndex,
312
226
  isLastColumn: colIndex === visibleColumns.length - fields.length,
313
227
  maxDepth: headerToRender.length,
314
- height: headerHeight,
228
+ height: dimensions.headerHeight,
315
229
  hasFocus: hasFocus,
316
230
  tabIndex: tabIndex
317
231
  }, groupIndex);
318
- })
232
+ }), getFiller(params)]
319
233
  }, depthIndex));
320
234
  });
321
235
  return columns;
322
236
  };
323
- const rootStyle = {
324
- minHeight: totalHeaderHeight,
325
- maxHeight: totalHeaderHeight,
326
- lineHeight: `${headerHeight}px`
327
- };
328
237
  return {
329
238
  renderContext,
239
+ getFiller,
330
240
  getColumnHeaders,
331
241
  getColumnsToRender,
332
242
  getColumnGroupHeaders,
333
243
  isDragging: !!dragCol,
334
- getRootProps: (other = {}) => _extends({
335
- style: rootStyle
336
- }, other),
337
244
  getInnerProps: () => ({
338
245
  ref: handleInnerRef,
339
246
  role: 'rowgroup'
340
- }),
341
- headerHeight
247
+ })
342
248
  };
343
249
  };
@@ -20,19 +20,25 @@ export const useGridColumnMenu = apiRef => {
20
20
  * API METHODS
21
21
  */
22
22
  const showColumnMenu = React.useCallback(field => {
23
- const shouldUpdate = apiRef.current.setState(state => {
24
- if (state.columnMenu.open && state.columnMenu.field === field) {
25
- return state;
26
- }
27
- logger.debug('Opening Column Menu');
28
- return _extends({}, state, {
29
- columnMenu: {
30
- open: true,
31
- field
23
+ const columnMenuState = gridColumnMenuSelector(apiRef.current.state);
24
+ const newState = {
25
+ open: true,
26
+ field
27
+ };
28
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
29
+ if (shouldUpdate) {
30
+ apiRef.current.setState(state => {
31
+ if (state.columnMenu.open && state.columnMenu.field === field) {
32
+ return state;
32
33
  }
34
+ logger.debug('Opening Column Menu');
35
+ return _extends({}, state, {
36
+ columnMenu: {
37
+ open: true,
38
+ field
39
+ }
40
+ });
33
41
  });
34
- });
35
- if (shouldUpdate) {
36
42
  apiRef.current.hidePreferences();
37
43
  apiRef.current.forceUpdate();
38
44
  }
@@ -64,19 +70,18 @@ export const useGridColumnMenu = apiRef => {
64
70
  }
65
71
  apiRef.current.setColumnHeaderFocus(fieldToFocus);
66
72
  }
67
- const shouldUpdate = apiRef.current.setState(state => {
68
- if (!state.columnMenu.open && state.columnMenu.field === undefined) {
69
- return state;
70
- }
71
- logger.debug('Hiding Column Menu');
72
- return _extends({}, state, {
73
- columnMenu: _extends({}, state.columnMenu, {
74
- open: false,
75
- field: undefined
76
- })
77
- });
78
- });
73
+ const newState = {
74
+ open: false,
75
+ field: undefined
76
+ };
77
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
79
78
  if (shouldUpdate) {
79
+ apiRef.current.setState(state => {
80
+ logger.debug('Hiding Column Menu');
81
+ return _extends({}, state, {
82
+ columnMenu: newState
83
+ });
84
+ });
80
85
  apiRef.current.forceUpdate();
81
86
  }
82
87
  }, [apiRef, logger]);
@@ -1,5 +1,9 @@
1
1
  import { GridColDef, GridStateColDef } from '../../../models/colDef/gridColDef';
2
2
  import type { GridColumnDimensionProperties } from './gridColumnsUtils';
3
+ export declare enum GridPinnedColumnPosition {
4
+ LEFT = "left",
5
+ RIGHT = "right"
6
+ }
3
7
  export type GridColumnLookup = {
4
8
  [field: string]: GridStateColDef;
5
9
  };
@@ -11,6 +15,19 @@ export interface GridColumnsState {
11
15
  lookup: GridColumnLookup;
12
16
  columnVisibilityModel: GridColumnVisibilityModel;
13
17
  }
18
+ export interface GridPinnedColumnFields {
19
+ left?: string[];
20
+ right?: string[];
21
+ }
22
+ export declare const EMPTY_PINNED_COLUMN_FIELDS: {
23
+ left: string[];
24
+ right: string[];
25
+ };
26
+ export interface GridPinnedColumns {
27
+ left: GridStateColDef[];
28
+ right: GridStateColDef[];
29
+ }
30
+ export type GridColumnPinningState = GridPinnedColumnFields;
14
31
  export type GridColumnDimensions = {
15
32
  [key in GridColumnDimensionProperties]?: number;
16
33
  };
@@ -1 +1,9 @@
1
- export {};
1
+ export let GridPinnedColumnPosition = /*#__PURE__*/function (GridPinnedColumnPosition) {
2
+ GridPinnedColumnPosition["LEFT"] = "left";
3
+ GridPinnedColumnPosition["RIGHT"] = "right";
4
+ return GridPinnedColumnPosition;
5
+ }({});
6
+ export const EMPTY_PINNED_COLUMN_FIELDS = {
7
+ left: [],
8
+ right: []
9
+ };
@@ -1,5 +1,5 @@
1
1
  import { GridStateCommunity } from '../../../models/gridStateCommunity';
2
- import { GridColumnLookup } from './gridColumnsInterfaces';
2
+ import { GridColumnLookup, GridPinnedColumnFields } from './gridColumnsInterfaces';
3
3
  /**
4
4
  * Get the columns state
5
5
  * @category Columns
@@ -36,6 +36,19 @@ export declare const gridVisibleColumnDefinitionsSelector: import("../../../util
36
36
  * @category Visible Columns
37
37
  */
38
38
  export declare const gridVisibleColumnFieldsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, string[]>;
39
+ /**
40
+ * Get the visible pinned columns model.
41
+ * @category Visible Columns
42
+ */
43
+ export declare const gridPinnedColumnsSelector: (state: GridStateCommunity) => GridPinnedColumnFields;
44
+ /**
45
+ * Get the visible pinned columns.
46
+ * @category Visible Columns
47
+ */
48
+ export declare const gridVisiblePinnedColumnDefinitionsSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, {
49
+ left: import("../../../internals").GridStateColDef[];
50
+ right: import("../../../internals").GridStateColDef[];
51
+ }>;
39
52
  /**
40
53
  * Get the left position in pixel of each visible columns relative to the left of the first column.
41
54
  * @category Visible Columns