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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/CHANGELOG.md +554 -51
  2. package/DataGrid/DataGrid.js +15 -27
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +1 -1
  6. package/colDef/gridDateColDef.js +1 -1
  7. package/components/GridColumnHeaders.d.ts +3 -2
  8. package/components/GridColumnHeaders.js +3 -11
  9. package/components/GridDetailPanels.d.ts +5 -0
  10. package/components/GridDetailPanels.js +4 -0
  11. package/components/GridHeaders.d.ts +4 -0
  12. package/components/GridHeaders.js +53 -0
  13. package/components/GridPagination.d.ts +4 -4
  14. package/components/GridPagination.js +1 -1
  15. package/components/GridPinnedRows.d.ts +7 -0
  16. package/components/GridPinnedRows.js +4 -0
  17. package/components/GridRow.d.ts +7 -4
  18. package/components/GridRow.js +260 -97
  19. package/components/GridScrollbarFillerCell.d.ts +7 -0
  20. package/components/GridScrollbarFillerCell.js +39 -0
  21. package/components/base/GridBody.d.ts +2 -13
  22. package/components/base/GridBody.js +2 -116
  23. package/components/base/GridOverlays.js +10 -21
  24. package/components/cell/GridActionsCell.js +1 -1
  25. package/components/cell/GridActionsCellItem.d.ts +6 -6
  26. package/components/cell/GridCell.d.ts +15 -21
  27. package/components/cell/GridCell.js +68 -373
  28. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  29. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  30. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  31. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  32. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  33. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  34. package/components/containers/GridRoot.js +18 -15
  35. package/components/containers/GridRootStyles.js +307 -204
  36. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  37. package/components/panel/GridPanel.d.ts +3 -3
  38. package/components/panel/GridPanel.js +3 -4
  39. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  40. package/components/panel/filterPanel/GridFilterForm.js +32 -15
  41. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  42. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  43. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  44. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  45. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  46. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  47. package/components/toolbar/GridToolbarExport.js +6 -1
  48. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  49. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  50. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  51. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  52. package/components/toolbar/GridToolbarQuickFilter.d.ts +4 -0
  53. package/components/toolbar/GridToolbarQuickFilter.js +4 -0
  54. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  55. package/components/virtualization/GridBottomContainer.js +25 -0
  56. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  57. package/components/virtualization/GridMainContainer.js +20 -0
  58. package/components/virtualization/GridTopContainer.d.ts +2 -0
  59. package/components/virtualization/GridTopContainer.js +35 -0
  60. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  61. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  62. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  63. package/components/virtualization/GridVirtualScroller.js +69 -16
  64. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  65. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  66. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  67. package/constants/defaultGridSlotsComponents.js +6 -2
  68. package/constants/gridClasses.d.ts +60 -8
  69. package/constants/gridClasses.js +1 -1
  70. package/hooks/core/gridCoreSelector.d.ts +6 -0
  71. package/hooks/core/gridCoreSelector.js +5 -0
  72. package/hooks/core/useGridInitialization.js +4 -0
  73. package/hooks/core/useGridLoggerFactory.js +2 -2
  74. package/hooks/core/useGridRefs.d.ts +3 -0
  75. package/hooks/core/useGridRefs.js +13 -0
  76. package/hooks/core/useGridTheme.d.ts +3 -0
  77. package/hooks/core/useGridTheme.js +19 -0
  78. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  79. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  80. package/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
  81. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  82. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  83. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  84. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  85. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  86. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  87. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  88. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  89. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  90. package/hooks/features/columns/index.d.ts +2 -2
  91. package/hooks/features/columns/index.js +2 -1
  92. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  93. package/hooks/features/columns/useGridColumns.js +20 -23
  94. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  95. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  96. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  97. package/hooks/features/dimensions/index.d.ts +2 -0
  98. package/hooks/features/dimensions/index.js +1 -0
  99. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  100. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  101. package/hooks/features/editing/useGridCellEditing.js +4 -4
  102. package/hooks/features/editing/useGridRowEditing.js +4 -4
  103. package/hooks/features/export/serializers/csvSerializer.js +3 -3
  104. package/hooks/features/export/useGridPrintExport.js +1 -1
  105. package/hooks/features/filter/gridFilterUtils.js +5 -5
  106. package/hooks/features/filter/useGridFilter.js +3 -3
  107. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  108. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  109. package/hooks/features/focus/useGridFocus.js +3 -3
  110. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  111. package/hooks/features/pagination/gridPaginationUtils.js +2 -2
  112. package/hooks/features/pagination/useGridPagination.js +3 -5
  113. package/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  114. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  115. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  116. package/hooks/features/rows/gridRowsSelector.js +5 -5
  117. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  118. package/hooks/features/rows/gridRowsUtils.js +6 -6
  119. package/hooks/features/rows/useGridRows.js +7 -7
  120. package/hooks/features/rows/useGridRowsMeta.js +9 -6
  121. package/hooks/features/scroll/useGridScroll.js +8 -10
  122. package/hooks/features/sorting/gridSortingUtils.js +5 -3
  123. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  124. package/hooks/features/sorting/useGridSorting.js +15 -10
  125. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  126. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  127. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  128. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  129. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  130. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  131. package/hooks/utils/index.d.ts +3 -0
  132. package/hooks/utils/index.js +4 -1
  133. package/hooks/utils/useGridApiContext.js +1 -1
  134. package/hooks/utils/useGridAriaAttributes.js +1 -2
  135. package/hooks/utils/useGridNativeEventListener.js +4 -9
  136. package/hooks/utils/useGridPrivateApiContext.js +1 -1
  137. package/hooks/utils/useGridRootProps.js +1 -1
  138. package/hooks/utils/useGridSelector.js +1 -1
  139. package/hooks/utils/useResizeObserver.d.ts +2 -0
  140. package/hooks/utils/useResizeObserver.js +36 -0
  141. package/hooks/utils/useRunOnce.d.ts +5 -0
  142. package/hooks/utils/useRunOnce.js +18 -0
  143. package/index.d.ts +0 -1
  144. package/index.js +1 -2
  145. package/internals/index.d.ts +13 -9
  146. package/internals/index.js +9 -7
  147. package/internals/utils/index.d.ts +1 -0
  148. package/internals/utils/index.js +2 -1
  149. package/internals/utils/propValidation.d.ts +4 -0
  150. package/internals/utils/propValidation.js +19 -0
  151. package/legacy/DataGrid/DataGrid.js +20 -29
  152. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  153. package/legacy/DataGrid/useDataGridProps.js +1 -0
  154. package/legacy/colDef/gridDateColDef.js +1 -1
  155. package/legacy/components/GridColumnHeaders.js +3 -11
  156. package/legacy/components/GridDetailPanels.js +4 -0
  157. package/legacy/components/GridHeaders.js +53 -0
  158. package/legacy/components/GridPagination.js +1 -1
  159. package/legacy/components/GridPinnedRows.js +4 -0
  160. package/legacy/components/GridRow.js +258 -98
  161. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  162. package/legacy/components/base/GridBody.js +2 -114
  163. package/legacy/components/base/GridOverlays.js +10 -25
  164. package/legacy/components/cell/GridActionsCell.js +1 -1
  165. package/legacy/components/cell/GridCell.js +70 -378
  166. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  167. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  168. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  169. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  170. package/legacy/components/containers/GridRoot.js +18 -15
  171. package/legacy/components/containers/GridRootStyles.js +215 -137
  172. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  173. package/legacy/components/panel/GridPanel.js +3 -4
  174. package/legacy/components/panel/filterPanel/GridFilterForm.js +31 -14
  175. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  176. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  177. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  178. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  179. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  180. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  181. package/legacy/components/toolbar/GridToolbarQuickFilter.js +4 -0
  182. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  183. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  184. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  185. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  186. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  187. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  188. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  189. package/legacy/constants/defaultGridSlotsComponents.js +6 -2
  190. package/legacy/constants/gridClasses.js +1 -1
  191. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  192. package/legacy/hooks/core/useGridInitialization.js +4 -0
  193. package/legacy/hooks/core/useGridLoggerFactory.js +2 -2
  194. package/legacy/hooks/core/useGridRefs.js +13 -0
  195. package/legacy/hooks/core/useGridTheme.js +21 -0
  196. package/legacy/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  197. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +13 -18
  198. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  199. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  200. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  201. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  202. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  203. package/legacy/hooks/features/columns/index.js +2 -1
  204. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  205. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  206. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  207. package/legacy/hooks/features/dimensions/index.js +1 -0
  208. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  209. package/legacy/hooks/features/editing/useGridCellEditing.js +4 -4
  210. package/legacy/hooks/features/editing/useGridRowEditing.js +4 -4
  211. package/legacy/hooks/features/export/serializers/csvSerializer.js +3 -3
  212. package/legacy/hooks/features/export/useGridPrintExport.js +1 -1
  213. package/legacy/hooks/features/filter/gridFilterUtils.js +5 -5
  214. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  215. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  216. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  217. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  218. package/legacy/hooks/features/pagination/gridPaginationUtils.js +2 -2
  219. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  220. package/legacy/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  221. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  222. package/legacy/hooks/features/rows/gridRowsUtils.js +6 -6
  223. package/legacy/hooks/features/rows/useGridParamsApi.js +4 -5
  224. package/legacy/hooks/features/rows/useGridRows.js +7 -7
  225. package/legacy/hooks/features/rows/useGridRowsMeta.js +9 -6
  226. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  227. package/legacy/hooks/features/sorting/gridSortingUtils.js +5 -3
  228. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  229. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  230. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  231. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  232. package/legacy/hooks/utils/index.js +4 -1
  233. package/legacy/hooks/utils/useGridApiContext.js +1 -1
  234. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  235. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  236. package/legacy/hooks/utils/useGridPrivateApiContext.js +1 -1
  237. package/legacy/hooks/utils/useGridRootProps.js +1 -1
  238. package/legacy/hooks/utils/useGridSelector.js +1 -1
  239. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  240. package/legacy/hooks/utils/useRunOnce.js +18 -0
  241. package/legacy/index.js +1 -2
  242. package/legacy/internals/index.js +9 -7
  243. package/legacy/internals/utils/index.js +2 -1
  244. package/legacy/internals/utils/propValidation.js +21 -0
  245. package/legacy/locales/hrHR.js +161 -0
  246. package/legacy/locales/index.js +4 -1
  247. package/legacy/locales/ptPT.js +161 -0
  248. package/legacy/locales/zhHK.js +161 -0
  249. package/legacy/models/index.js +0 -1
  250. package/legacy/models/params/index.js +1 -2
  251. package/legacy/utils/createSelector.js +1 -1
  252. package/legacy/utils/exportAs.js +1 -1
  253. package/legacy/utils/utils.js +10 -1
  254. package/locales/hrHR.d.ts +1 -0
  255. package/locales/hrHR.js +149 -0
  256. package/locales/index.d.ts +3 -0
  257. package/locales/index.js +4 -1
  258. package/locales/ptPT.d.ts +1 -0
  259. package/locales/ptPT.js +149 -0
  260. package/locales/zhHK.d.ts +1 -0
  261. package/locales/zhHK.js +149 -0
  262. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  263. package/models/api/gridCoreApi.d.ts +16 -16
  264. package/models/api/gridRowsMetaApi.d.ts +1 -1
  265. package/models/api/gridVirtualizationApi.d.ts +2 -3
  266. package/models/events/gridEventLookup.d.ts +3 -3
  267. package/models/gridFilterModel.d.ts +1 -1
  268. package/models/gridSlotsComponent.d.ts +16 -2
  269. package/models/gridStateCommunity.d.ts +5 -1
  270. package/models/index.d.ts +0 -1
  271. package/models/index.js +0 -1
  272. package/models/params/index.d.ts +0 -1
  273. package/models/params/index.js +1 -2
  274. package/models/props/DataGridProps.d.ts +7 -12
  275. package/modern/DataGrid/DataGrid.js +15 -27
  276. package/modern/DataGrid/useDataGridComponent.js +2 -1
  277. package/modern/DataGrid/useDataGridProps.js +1 -0
  278. package/modern/colDef/gridDateColDef.js +1 -1
  279. package/modern/components/GridColumnHeaders.js +3 -11
  280. package/modern/components/GridDetailPanels.js +4 -0
  281. package/modern/components/GridHeaders.js +53 -0
  282. package/modern/components/GridPagination.js +1 -1
  283. package/modern/components/GridPinnedRows.js +4 -0
  284. package/modern/components/GridRow.js +258 -96
  285. package/modern/components/GridScrollbarFillerCell.js +39 -0
  286. package/modern/components/base/GridBody.js +2 -116
  287. package/modern/components/base/GridOverlays.js +10 -16
  288. package/modern/components/cell/GridActionsCell.js +1 -1
  289. package/modern/components/cell/GridCell.js +66 -370
  290. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  291. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  292. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  293. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  294. package/modern/components/containers/GridRoot.js +18 -14
  295. package/modern/components/containers/GridRootStyles.js +307 -204
  296. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  297. package/modern/components/panel/GridPanel.js +3 -4
  298. package/modern/components/panel/filterPanel/GridFilterForm.js +31 -14
  299. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  300. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  301. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  302. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  303. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  304. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  305. package/modern/components/toolbar/GridToolbarQuickFilter.js +4 -0
  306. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  307. package/modern/components/virtualization/GridMainContainer.js +20 -0
  308. package/modern/components/virtualization/GridTopContainer.js +35 -0
  309. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  310. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  311. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  312. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  313. package/modern/constants/defaultGridSlotsComponents.js +6 -2
  314. package/modern/constants/gridClasses.js +1 -1
  315. package/modern/hooks/core/gridCoreSelector.js +5 -0
  316. package/modern/hooks/core/useGridInitialization.js +4 -0
  317. package/modern/hooks/core/useGridLoggerFactory.js +2 -2
  318. package/modern/hooks/core/useGridRefs.js +13 -0
  319. package/modern/hooks/core/useGridTheme.js +19 -0
  320. package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  321. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
  322. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  323. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  324. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  325. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  326. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  327. package/modern/hooks/features/columns/index.js +2 -1
  328. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  329. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  330. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  331. package/modern/hooks/features/dimensions/index.js +1 -0
  332. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  333. package/modern/hooks/features/editing/useGridCellEditing.js +4 -4
  334. package/modern/hooks/features/editing/useGridRowEditing.js +4 -4
  335. package/modern/hooks/features/export/serializers/csvSerializer.js +3 -3
  336. package/modern/hooks/features/export/useGridPrintExport.js +1 -1
  337. package/modern/hooks/features/filter/gridFilterUtils.js +5 -5
  338. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  339. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  340. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  341. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  342. package/modern/hooks/features/pagination/gridPaginationUtils.js +2 -2
  343. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  344. package/modern/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  345. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  346. package/modern/hooks/features/rows/gridRowsUtils.js +6 -6
  347. package/modern/hooks/features/rows/useGridRows.js +7 -7
  348. package/modern/hooks/features/rows/useGridRowsMeta.js +9 -6
  349. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  350. package/modern/hooks/features/sorting/gridSortingUtils.js +5 -3
  351. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  352. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  353. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  354. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  355. package/modern/hooks/utils/index.js +4 -1
  356. package/modern/hooks/utils/useGridApiContext.js +1 -1
  357. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  358. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  359. package/modern/hooks/utils/useGridPrivateApiContext.js +1 -1
  360. package/modern/hooks/utils/useGridRootProps.js +1 -1
  361. package/modern/hooks/utils/useGridSelector.js +1 -1
  362. package/modern/hooks/utils/useResizeObserver.js +36 -0
  363. package/modern/hooks/utils/useRunOnce.js +18 -0
  364. package/modern/index.js +1 -2
  365. package/modern/internals/index.js +9 -7
  366. package/modern/internals/utils/index.js +2 -1
  367. package/modern/internals/utils/propValidation.js +19 -0
  368. package/modern/locales/hrHR.js +149 -0
  369. package/modern/locales/index.js +4 -1
  370. package/modern/locales/ptPT.js +149 -0
  371. package/modern/locales/zhHK.js +149 -0
  372. package/modern/models/index.js +0 -1
  373. package/modern/models/params/index.js +1 -2
  374. package/modern/utils/createSelector.js +1 -1
  375. package/modern/utils/exportAs.js +1 -1
  376. package/modern/utils/utils.js +10 -1
  377. package/node/DataGrid/DataGrid.js +15 -27
  378. package/node/DataGrid/useDataGridComponent.js +1 -0
  379. package/node/DataGrid/useDataGridProps.js +1 -0
  380. package/node/colDef/gridDateColDef.js +1 -1
  381. package/node/components/GridColumnHeaders.js +3 -11
  382. package/node/components/GridDetailPanels.js +10 -0
  383. package/node/components/GridHeaders.js +60 -0
  384. package/node/components/GridPagination.js +1 -1
  385. package/node/components/GridPinnedRows.js +10 -0
  386. package/node/components/GridRow.js +256 -94
  387. package/node/components/GridScrollbarFillerCell.js +47 -0
  388. package/node/components/base/GridBody.js +7 -118
  389. package/node/components/base/GridOverlays.js +9 -15
  390. package/node/components/cell/GridActionsCell.js +1 -1
  391. package/node/components/cell/GridCell.js +67 -370
  392. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  393. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  394. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  395. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  396. package/node/components/containers/GridRoot.js +17 -14
  397. package/node/components/containers/GridRootStyles.js +175 -72
  398. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  399. package/node/components/panel/GridPanel.js +3 -4
  400. package/node/components/panel/filterPanel/GridFilterForm.js +30 -13
  401. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  402. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  403. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  404. package/node/components/toolbar/GridToolbarExport.js +6 -1
  405. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  406. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  407. package/node/components/toolbar/GridToolbarQuickFilter.js +4 -0
  408. package/node/components/virtualization/GridBottomContainer.js +34 -0
  409. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  410. package/node/components/virtualization/GridTopContainer.js +44 -0
  411. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  412. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  413. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  414. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  415. package/node/constants/defaultGridSlotsComponents.js +5 -1
  416. package/node/constants/gridClasses.js +1 -1
  417. package/node/hooks/core/gridCoreSelector.js +12 -0
  418. package/node/hooks/core/useGridInitialization.js +4 -0
  419. package/node/hooks/core/useGridLoggerFactory.js +2 -2
  420. package/node/hooks/core/useGridRefs.js +22 -0
  421. package/node/hooks/core/useGridTheme.js +29 -0
  422. package/node/hooks/features/columnGrouping/gridColumnGroupsUtils.js +1 -1
  423. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +11 -16
  424. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  425. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  426. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  427. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  428. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  429. package/node/hooks/features/columns/index.js +22 -61
  430. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  431. package/node/hooks/features/columns/useGridColumns.js +20 -22
  432. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  433. package/node/hooks/features/dimensions/index.js +11 -0
  434. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  435. package/node/hooks/features/editing/useGridCellEditing.js +4 -4
  436. package/node/hooks/features/editing/useGridRowEditing.js +4 -4
  437. package/node/hooks/features/export/serializers/csvSerializer.js +3 -3
  438. package/node/hooks/features/export/useGridPrintExport.js +1 -1
  439. package/node/hooks/features/filter/gridFilterUtils.js +5 -5
  440. package/node/hooks/features/filter/useGridFilter.js +2 -2
  441. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  442. package/node/hooks/features/focus/useGridFocus.js +2 -2
  443. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  444. package/node/hooks/features/pagination/gridPaginationUtils.js +2 -2
  445. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  446. package/node/hooks/features/rowSelection/useGridRowSelection.js +1 -1
  447. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  448. package/node/hooks/features/rows/gridRowsUtils.js +6 -6
  449. package/node/hooks/features/rows/useGridRows.js +7 -7
  450. package/node/hooks/features/rows/useGridRowsMeta.js +7 -5
  451. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  452. package/node/hooks/features/sorting/gridSortingUtils.js +5 -3
  453. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  454. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  455. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  456. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  457. package/node/hooks/utils/index.js +36 -0
  458. package/node/hooks/utils/useGridApiContext.js +1 -1
  459. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  460. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  461. package/node/hooks/utils/useGridPrivateApiContext.js +1 -1
  462. package/node/hooks/utils/useGridRootProps.js +1 -1
  463. package/node/hooks/utils/useGridSelector.js +1 -1
  464. package/node/hooks/utils/useResizeObserver.js +44 -0
  465. package/node/hooks/utils/useRunOnce.js +27 -0
  466. package/node/index.js +1 -13
  467. package/node/internals/index.js +86 -71
  468. package/node/internals/utils/index.js +11 -0
  469. package/node/internals/utils/propValidation.js +26 -0
  470. package/node/locales/hrHR.js +155 -0
  471. package/node/locales/index.js +33 -0
  472. package/node/locales/ptPT.js +155 -0
  473. package/node/locales/zhHK.js +155 -0
  474. package/node/models/index.js +0 -11
  475. package/node/models/params/index.js +0 -11
  476. package/node/utils/createSelector.js +1 -1
  477. package/node/utils/exportAs.js +1 -1
  478. package/node/utils/utils.js +11 -1
  479. package/package.json +6 -6
  480. package/utils/createSelector.js +1 -1
  481. package/utils/exportAs.js +1 -1
  482. package/utils/utils.d.ts +6 -0
  483. package/utils/utils.js +10 -1
  484. package/components/DataGridVirtualScroller.d.ts +0 -3
  485. package/components/DataGridVirtualScroller.js +0 -35
  486. package/components/containers/GridMainContainer.js +0 -43
  487. package/legacy/components/DataGridVirtualScroller.js +0 -32
  488. package/legacy/components/containers/GridMainContainer.js +0 -45
  489. package/legacy/models/gridRootContainerRef.js +0 -1
  490. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  491. package/models/gridRootContainerRef.d.ts +0 -5
  492. package/models/gridRootContainerRef.js +0 -1
  493. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  494. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  495. package/modern/components/DataGridVirtualScroller.js +0 -35
  496. package/modern/components/containers/GridMainContainer.js +0 -42
  497. package/modern/models/gridRootContainerRef.js +0 -1
  498. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  499. package/node/components/DataGridVirtualScroller.js +0 -42
  500. package/node/models/gridRootContainerRef.js +0 -5
  501. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -1,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
@@ -1,4 +1,7 @@
1
1
  import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';
2
+ import { EMPTY_PINNED_COLUMN_FIELDS } from './gridColumnsInterfaces';
3
+ import { gridThemeSelector } from '../../core/gridCoreSelector';
4
+
2
5
  /**
3
6
  * Get the columns state
4
7
  * @category Columns
@@ -42,6 +45,55 @@ export const gridVisibleColumnDefinitionsSelector = createSelectorMemoized(gridC
42
45
  */
43
46
  export const gridVisibleColumnFieldsSelector = createSelectorMemoized(gridVisibleColumnDefinitionsSelector, visibleColumns => visibleColumns.map(column => column.field));
44
47
 
48
+ /**
49
+ * Get the visible pinned columns model.
50
+ * @category Visible Columns
51
+ */
52
+ export const gridPinnedColumnsSelector = state => state.pinnedColumns;
53
+
54
+ /**
55
+ * Get the visible pinned columns.
56
+ * @category Visible Columns
57
+ */
58
+ export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, gridThemeSelector, (columnsState, model, visibleColumnFields, theme) => {
59
+ const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, theme.direction === 'rtl');
60
+ const visiblePinnedColumns = {
61
+ left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
62
+ right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
63
+ };
64
+ return visiblePinnedColumns;
65
+ });
66
+ function filterVisibleColumns(pinnedColumns, columns, invert) {
67
+ var _pinnedColumns$left, _pinnedColumns$right;
68
+ if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
69
+ return EMPTY_PINNED_COLUMN_FIELDS;
70
+ }
71
+ if (((_pinnedColumns$left = pinnedColumns.left) == null ? void 0 : _pinnedColumns$left.length) === 0 && ((_pinnedColumns$right = pinnedColumns.right) == null ? void 0 : _pinnedColumns$right.length) === 0) {
72
+ return EMPTY_PINNED_COLUMN_FIELDS;
73
+ }
74
+ const filter = (newPinnedColumns, remainingColumns) => {
75
+ if (!Array.isArray(newPinnedColumns)) {
76
+ return [];
77
+ }
78
+ return newPinnedColumns.filter(field => remainingColumns.includes(field));
79
+ };
80
+ const leftPinnedColumns = filter(pinnedColumns.left, columns);
81
+ const columnsWithoutLeftPinnedColumns = columns.filter(
82
+ // Filter out from the remaining columns those columns already pinned to the left
83
+ field => !leftPinnedColumns.includes(field));
84
+ const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);
85
+ if (invert) {
86
+ return {
87
+ left: rightPinnedColumns,
88
+ right: leftPinnedColumns
89
+ };
90
+ }
91
+ return {
92
+ left: leftPinnedColumns,
93
+ right: rightPinnedColumns
94
+ };
95
+ }
96
+
45
97
  /**
46
98
  * Get the left position in pixel of each visible columns relative to the left of the first column.
47
99
  * @category Visible Columns
@@ -1,7 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { GridColumnsState, GridColumnsRawState, GridColumnVisibilityModel, GridColumnsInitialState } from './gridColumnsInterfaces';
3
- import { GridColumnTypesRecord } from '../../../models';
4
- import { GridStateCommunity } from '../../../models/gridStateCommunity';
5
3
  import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
6
4
  import { GridColDef } from '../../../models/colDef/gridColDef';
7
5
  import { GridApiCommon } from '../../../models/api/gridApiCommon';
@@ -39,15 +37,13 @@ export declare const hydrateColumnsWidth: (rawState: GridColumnsRawState, viewpo
39
37
  * The columns not registered in `orderedFields` will be placed after the imported columns.
40
38
  */
41
39
  export declare const applyInitialState: (columnsState: GridColumnsRawState, initialState: GridColumnsInitialState | undefined) => GridColumnsRawState;
42
- export declare const createColumnsState: ({ apiRef, columnsToUpsert, initialState, columnTypes, columnVisibilityModel, keepOnlyColumnsToUpsert, }: {
40
+ export declare const createColumnsState: ({ apiRef, columnsToUpsert, initialState, columnVisibilityModel, keepOnlyColumnsToUpsert, }: {
43
41
  columnsToUpsert: readonly GridColDef[];
44
42
  initialState: GridColumnsInitialState | undefined;
45
- columnTypes: GridColumnTypesRecord;
46
43
  columnVisibilityModel?: GridColumnVisibilityModel | undefined;
47
44
  keepOnlyColumnsToUpsert: boolean;
48
45
  apiRef: React.MutableRefObject<GridApiCommunity>;
49
46
  }) => GridColumnsState;
50
- export declare const mergeColumnsState: (columnsState: GridColumnsState) => (state: GridStateCommunity) => GridStateCommunity;
51
47
  export declare function getFirstNonSpannedColumnToRender({ firstColumnToRender, apiRef, firstRowToRender, lastRowToRender, visibleRows, }: {
52
48
  firstColumnToRender: number;
53
49
  apiRef: React.MutableRefObject<GridApiCommon>;
@@ -1,10 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { DEFAULT_GRID_COL_TYPE_KEY, GRID_STRING_COL_DEF } from '../../../colDef';
2
+ import { DEFAULT_GRID_COL_TYPE_KEY, GRID_STRING_COL_DEF, getGridDefaultColumnTypes } from '../../../colDef';
3
3
  import { gridColumnsStateSelector, gridColumnVisibilityModelSelector } from './gridColumnsSelector';
4
4
  import { clamp } from '../../../utils/utils';
5
5
  import { gridDensityFactorSelector } from '../density/densitySelector';
6
6
  import { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';
7
7
  export const COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
8
+ const COLUMN_TYPES = getGridDefaultColumnTypes();
9
+
8
10
  /**
9
11
  * Computes width for flex columns.
10
12
  * Based on CSS Flexbox specification:
@@ -196,10 +198,10 @@ export const applyInitialState = (columnsState, initialState) => {
196
198
  });
197
199
  return newColumnsState;
198
200
  };
199
- function getDefaultColTypeDef(columnTypes, type) {
200
- let colDef = columnTypes[DEFAULT_GRID_COL_TYPE_KEY];
201
- if (type && columnTypes[type]) {
202
- colDef = columnTypes[type];
201
+ function getDefaultColTypeDef(type) {
202
+ let colDef = COLUMN_TYPES[DEFAULT_GRID_COL_TYPE_KEY];
203
+ if (type && COLUMN_TYPES[type]) {
204
+ colDef = COLUMN_TYPES[type];
203
205
  }
204
206
  return colDef;
205
207
  }
@@ -207,7 +209,6 @@ export const createColumnsState = ({
207
209
  apiRef,
208
210
  columnsToUpsert,
209
211
  initialState,
210
- columnTypes,
211
212
  columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),
212
213
  keepOnlyColumnsToUpsert = false
213
214
  }) => {
@@ -244,7 +245,7 @@ export const createColumnsState = ({
244
245
  columnsToKeep[field] = true;
245
246
  let existingState = columnsState.lookup[field];
246
247
  if (existingState == null) {
247
- existingState = _extends({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
248
+ existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {
248
249
  field,
249
250
  hasBeenResized: false
250
251
  });
@@ -255,7 +256,7 @@ export const createColumnsState = ({
255
256
 
256
257
  // If the column type has changed - merge the existing state with the default column type definition
257
258
  if (existingState && existingState.type !== newColumn.type) {
258
- existingState = _extends({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
259
+ existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {
259
260
  field
260
261
  });
261
262
  }
@@ -281,11 +282,8 @@ export const createColumnsState = ({
281
282
  }
282
283
  const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
283
284
  const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
284
- return hydrateColumnsWidth(columnsStateWithPortableColumns, (_apiRef$current$getRo = (_apiRef$current$getRo2 = (_apiRef$current = apiRef.current).getRootDimensions) == null || (_apiRef$current$getRo2 = _apiRef$current$getRo2.call(_apiRef$current)) == null ? void 0 : _apiRef$current$getRo2.viewportInnerSize.width) != null ? _apiRef$current$getRo : 0);
285
+ return hydrateColumnsWidth(columnsStateWithPortableColumns, (_apiRef$current$getRo = (_apiRef$current$getRo2 = (_apiRef$current = apiRef.current).getRootDimensions) == null ? void 0 : _apiRef$current$getRo2.call(_apiRef$current).viewportInnerSize.width) != null ? _apiRef$current$getRo : 0);
285
286
  };
286
- export const mergeColumnsState = columnsState => state => _extends({}, state, {
287
- columns: columnsState
288
- });
289
287
  export function getFirstNonSpannedColumnToRender({
290
288
  firstColumnToRender,
291
289
  apiRef,
@@ -1,2 +1,2 @@
1
- export { gridColumnFieldsSelector, gridColumnLookupSelector, gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridVisibleColumnFieldsSelector, gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridFilterableColumnDefinitionsSelector, gridFilterableColumnLookupSelector, } from './gridColumnsSelector';
2
- export type { GridColumnLookup, GridColumnsState, GridColumnsInitialState, GridColumnVisibilityModel, } from './gridColumnsInterfaces';
1
+ export * from './gridColumnsSelector';
2
+ export * from './gridColumnsInterfaces';
@@ -1 +1,2 @@
1
- export { gridColumnFieldsSelector, gridColumnLookupSelector, gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridVisibleColumnFieldsSelector, gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridFilterableColumnDefinitionsSelector, gridFilterableColumnLookupSelector } from './gridColumnsSelector';
1
+ export * from './gridColumnsSelector';
2
+ export * from './gridColumnsInterfaces';