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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/CHANGELOG.md +379 -2
  2. package/DataGrid/DataGrid.js +6 -6
  3. package/DataGrid/useDataGridComponent.js +2 -1
  4. package/DataGrid/useDataGridProps.js +1 -0
  5. package/README.md +1 -1
  6. package/components/GridColumnHeaders.d.ts +3 -2
  7. package/components/GridColumnHeaders.js +3 -11
  8. package/components/GridDetailPanels.d.ts +5 -0
  9. package/components/GridDetailPanels.js +4 -0
  10. package/components/GridHeaders.d.ts +4 -0
  11. package/components/GridHeaders.js +53 -0
  12. package/components/GridPinnedRows.d.ts +7 -0
  13. package/components/GridPinnedRows.js +4 -0
  14. package/components/GridRow.d.ts +7 -4
  15. package/components/GridRow.js +260 -97
  16. package/components/GridScrollbarFillerCell.d.ts +7 -0
  17. package/components/GridScrollbarFillerCell.js +39 -0
  18. package/components/base/GridBody.d.ts +2 -13
  19. package/components/base/GridBody.js +2 -116
  20. package/components/base/GridOverlays.js +10 -21
  21. package/components/cell/GridActionsCellItem.d.ts +2 -2
  22. package/components/cell/GridCell.d.ts +15 -21
  23. package/components/cell/GridCell.js +67 -372
  24. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  25. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -1
  26. package/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  27. package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
  28. package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  29. package/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  30. package/components/containers/GridRoot.js +18 -15
  31. package/components/containers/GridRootStyles.js +307 -204
  32. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  33. package/components/panel/GridPanel.js +3 -4
  34. package/components/panel/filterPanel/GridFilterForm.d.ts +6 -4
  35. package/components/panel/filterPanel/GridFilterForm.js +31 -14
  36. package/components/panel/filterPanel/GridFilterPanel.js +46 -20
  37. package/components/toolbar/GridToolbarColumnsButton.d.ts +13 -1
  38. package/components/toolbar/GridToolbarColumnsButton.js +40 -22
  39. package/components/toolbar/GridToolbarDensitySelector.d.ts +13 -1
  40. package/components/toolbar/GridToolbarDensitySelector.js +40 -22
  41. package/components/toolbar/GridToolbarExport.d.ts +10 -1
  42. package/components/toolbar/GridToolbarExport.js +6 -1
  43. package/components/toolbar/GridToolbarExportContainer.d.ts +15 -1
  44. package/components/toolbar/GridToolbarExportContainer.js +41 -23
  45. package/components/toolbar/GridToolbarFilterButton.d.ts +5 -4
  46. package/components/toolbar/GridToolbarFilterButton.js +6 -10
  47. package/components/virtualization/GridBottomContainer.d.ts +2 -0
  48. package/components/virtualization/GridBottomContainer.js +25 -0
  49. package/components/{containers → virtualization}/GridMainContainer.d.ts +2 -0
  50. package/components/virtualization/GridMainContainer.js +20 -0
  51. package/components/virtualization/GridTopContainer.d.ts +2 -0
  52. package/components/virtualization/GridTopContainer.js +35 -0
  53. package/components/virtualization/GridVirtualScrollbar.d.ts +7 -0
  54. package/components/virtualization/GridVirtualScrollbar.js +131 -0
  55. package/components/virtualization/GridVirtualScroller.d.ts +4 -4
  56. package/components/virtualization/GridVirtualScroller.js +69 -16
  57. package/components/virtualization/GridVirtualScrollerFiller.d.ts +4 -0
  58. package/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  59. package/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  60. package/constants/defaultGridSlotsComponents.js +6 -2
  61. package/constants/gridClasses.d.ts +60 -8
  62. package/constants/gridClasses.js +1 -1
  63. package/hooks/core/gridCoreSelector.d.ts +6 -0
  64. package/hooks/core/gridCoreSelector.js +5 -0
  65. package/hooks/core/useGridInitialization.js +4 -0
  66. package/hooks/core/useGridRefs.d.ts +3 -0
  67. package/hooks/core/useGridRefs.js +13 -0
  68. package/hooks/core/useGridTheme.d.ts +3 -0
  69. package/hooks/core/useGridTheme.js +19 -0
  70. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  71. package/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  72. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +13 -18
  73. package/hooks/features/columnHeaders/useGridColumnHeaders.js +68 -162
  74. package/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  75. package/hooks/features/columns/gridColumnsInterfaces.d.ts +17 -0
  76. package/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  77. package/hooks/features/columns/gridColumnsSelector.d.ts +14 -1
  78. package/hooks/features/columns/gridColumnsSelector.js +52 -0
  79. package/hooks/features/columns/gridColumnsUtils.d.ts +1 -5
  80. package/hooks/features/columns/gridColumnsUtils.js +10 -12
  81. package/hooks/features/columns/index.d.ts +2 -2
  82. package/hooks/features/columns/index.js +2 -1
  83. package/hooks/features/columns/useGridColumnSpanning.js +62 -61
  84. package/hooks/features/columns/useGridColumns.js +20 -23
  85. package/hooks/features/dimensions/gridDimensionsApi.d.ts +60 -11
  86. package/hooks/features/dimensions/gridDimensionsSelectors.d.ts +2 -0
  87. package/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  88. package/hooks/features/dimensions/index.d.ts +2 -0
  89. package/hooks/features/dimensions/index.js +1 -0
  90. package/hooks/features/dimensions/useGridDimensions.d.ts +7 -1
  91. package/hooks/features/dimensions/useGridDimensions.js +216 -148
  92. package/hooks/features/export/serializers/csvSerializer.js +2 -2
  93. package/hooks/features/filter/useGridFilter.js +3 -3
  94. package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -2
  95. package/hooks/features/focus/gridFocusStateSelector.js +2 -6
  96. package/hooks/features/focus/useGridFocus.js +3 -3
  97. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  98. package/hooks/features/pagination/useGridPagination.js +3 -5
  99. package/hooks/features/rows/gridRowsInterfaces.d.ts +1 -0
  100. package/hooks/features/rows/gridRowsSelector.d.ts +2 -2
  101. package/hooks/features/rows/gridRowsSelector.js +5 -5
  102. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  103. package/hooks/features/rows/gridRowsUtils.js +4 -4
  104. package/hooks/features/rows/useGridRowsMeta.js +7 -4
  105. package/hooks/features/scroll/useGridScroll.js +8 -10
  106. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  107. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  108. package/hooks/features/sorting/useGridSorting.js +15 -10
  109. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +14 -0
  110. package/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  111. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +27 -42
  112. package/hooks/features/virtualization/useGridVirtualScroller.js +441 -438
  113. package/hooks/features/virtualization/useGridVirtualization.d.ts +8 -0
  114. package/hooks/features/virtualization/useGridVirtualization.js +8 -1
  115. package/hooks/utils/index.d.ts +3 -0
  116. package/hooks/utils/index.js +4 -1
  117. package/hooks/utils/useGridAriaAttributes.js +1 -2
  118. package/hooks/utils/useGridNativeEventListener.js +4 -9
  119. package/hooks/utils/useResizeObserver.d.ts +2 -0
  120. package/hooks/utils/useResizeObserver.js +36 -0
  121. package/hooks/utils/useRunOnce.d.ts +5 -0
  122. package/hooks/utils/useRunOnce.js +18 -0
  123. package/index.js +1 -1
  124. package/internals/index.d.ts +12 -9
  125. package/internals/index.js +9 -7
  126. package/legacy/DataGrid/DataGrid.js +6 -6
  127. package/legacy/DataGrid/useDataGridComponent.js +2 -1
  128. package/legacy/DataGrid/useDataGridProps.js +1 -0
  129. package/legacy/components/GridColumnHeaders.js +3 -11
  130. package/legacy/components/GridDetailPanels.js +4 -0
  131. package/legacy/components/GridHeaders.js +53 -0
  132. package/legacy/components/GridPinnedRows.js +4 -0
  133. package/legacy/components/GridRow.js +258 -98
  134. package/legacy/components/GridScrollbarFillerCell.js +36 -0
  135. package/legacy/components/base/GridBody.js +2 -114
  136. package/legacy/components/base/GridOverlays.js +10 -25
  137. package/legacy/components/cell/GridCell.js +69 -377
  138. package/legacy/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  139. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  140. package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  141. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +1 -2
  142. package/legacy/components/containers/GridRoot.js +18 -15
  143. package/legacy/components/containers/GridRootStyles.js +215 -137
  144. package/legacy/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  145. package/legacy/components/panel/GridPanel.js +3 -4
  146. package/legacy/components/panel/filterPanel/GridFilterForm.js +30 -13
  147. package/legacy/components/panel/filterPanel/GridFilterPanel.js +49 -20
  148. package/legacy/components/toolbar/GridToolbarColumnsButton.js +40 -21
  149. package/legacy/components/toolbar/GridToolbarDensitySelector.js +40 -21
  150. package/legacy/components/toolbar/GridToolbarExport.js +6 -1
  151. package/legacy/components/toolbar/GridToolbarExportContainer.js +40 -21
  152. package/legacy/components/toolbar/GridToolbarFilterButton.js +6 -10
  153. package/legacy/components/virtualization/GridBottomContainer.js +25 -0
  154. package/legacy/components/virtualization/GridMainContainer.js +20 -0
  155. package/legacy/components/virtualization/GridTopContainer.js +35 -0
  156. package/legacy/components/virtualization/GridVirtualScrollbar.js +129 -0
  157. package/legacy/components/virtualization/GridVirtualScroller.js +67 -16
  158. package/legacy/components/virtualization/GridVirtualScrollerFiller.js +70 -0
  159. package/legacy/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  160. package/legacy/constants/defaultGridSlotsComponents.js +6 -2
  161. package/legacy/constants/gridClasses.js +1 -1
  162. package/legacy/hooks/core/gridCoreSelector.js +7 -0
  163. package/legacy/hooks/core/useGridInitialization.js +4 -0
  164. package/legacy/hooks/core/useGridRefs.js +13 -0
  165. package/legacy/hooks/core/useGridTheme.js +21 -0
  166. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +7 -14
  167. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +69 -181
  168. package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  169. package/legacy/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  170. package/legacy/hooks/features/columns/gridColumnsSelector.js +62 -0
  171. package/legacy/hooks/features/columns/gridColumnsUtils.js +10 -16
  172. package/legacy/hooks/features/columns/index.js +2 -1
  173. package/legacy/hooks/features/columns/useGridColumnSpanning.js +60 -59
  174. package/legacy/hooks/features/columns/useGridColumns.js +22 -23
  175. package/legacy/hooks/features/dimensions/gridDimensionsSelectors.js +3 -0
  176. package/legacy/hooks/features/dimensions/index.js +1 -0
  177. package/legacy/hooks/features/dimensions/useGridDimensions.js +226 -151
  178. package/legacy/hooks/features/export/serializers/csvSerializer.js +2 -2
  179. package/legacy/hooks/features/filter/useGridFilter.js +3 -3
  180. package/legacy/hooks/features/focus/gridFocusStateSelector.js +2 -6
  181. package/legacy/hooks/features/focus/useGridFocus.js +3 -3
  182. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  183. package/legacy/hooks/features/pagination/useGridPagination.js +3 -5
  184. package/legacy/hooks/features/rows/gridRowsSelector.js +5 -5
  185. package/legacy/hooks/features/rows/gridRowsUtils.js +4 -4
  186. package/legacy/hooks/features/rows/useGridRowsMeta.js +7 -4
  187. package/legacy/hooks/features/scroll/useGridScroll.js +8 -10
  188. package/legacy/hooks/features/sorting/gridSortingUtils.js +1 -1
  189. package/legacy/hooks/features/sorting/useGridSorting.js +15 -10
  190. package/legacy/hooks/features/virtualization/gridVirtualizationSelectors.js +29 -1
  191. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +490 -483
  192. package/legacy/hooks/features/virtualization/useGridVirtualization.js +8 -1
  193. package/legacy/hooks/utils/index.js +4 -1
  194. package/legacy/hooks/utils/useGridAriaAttributes.js +1 -2
  195. package/legacy/hooks/utils/useGridNativeEventListener.js +4 -9
  196. package/legacy/hooks/utils/useResizeObserver.js +36 -0
  197. package/legacy/hooks/utils/useRunOnce.js +18 -0
  198. package/legacy/index.js +1 -1
  199. package/legacy/internals/index.js +9 -7
  200. package/legacy/locales/hrHR.js +161 -0
  201. package/legacy/locales/index.js +4 -1
  202. package/legacy/locales/ptPT.js +161 -0
  203. package/legacy/locales/zhHK.js +161 -0
  204. package/legacy/models/index.js +0 -1
  205. package/legacy/models/params/index.js +1 -2
  206. package/legacy/utils/utils.js +10 -1
  207. package/locales/hrHR.d.ts +1 -0
  208. package/locales/hrHR.js +149 -0
  209. package/locales/index.d.ts +3 -0
  210. package/locales/index.js +4 -1
  211. package/locales/ptPT.d.ts +1 -0
  212. package/locales/ptPT.js +149 -0
  213. package/locales/zhHK.d.ts +1 -0
  214. package/locales/zhHK.js +149 -0
  215. package/models/api/gridColumnGroupingApi.d.ts +2 -2
  216. package/models/api/gridCoreApi.d.ts +16 -16
  217. package/models/api/gridRowsMetaApi.d.ts +1 -1
  218. package/models/api/gridVirtualizationApi.d.ts +2 -3
  219. package/models/events/gridEventLookup.d.ts +3 -3
  220. package/models/gridFilterModel.d.ts +1 -1
  221. package/models/gridSlotsComponent.d.ts +16 -2
  222. package/models/gridStateCommunity.d.ts +5 -1
  223. package/models/index.d.ts +0 -1
  224. package/models/index.js +0 -1
  225. package/models/params/index.d.ts +0 -1
  226. package/models/params/index.js +1 -2
  227. package/models/props/DataGridProps.d.ts +6 -11
  228. package/modern/DataGrid/DataGrid.js +6 -6
  229. package/modern/DataGrid/useDataGridComponent.js +2 -1
  230. package/modern/DataGrid/useDataGridProps.js +1 -0
  231. package/modern/components/GridColumnHeaders.js +3 -11
  232. package/modern/components/GridDetailPanels.js +4 -0
  233. package/modern/components/GridHeaders.js +53 -0
  234. package/modern/components/GridPinnedRows.js +4 -0
  235. package/modern/components/GridRow.js +258 -96
  236. package/modern/components/GridScrollbarFillerCell.js +39 -0
  237. package/modern/components/base/GridBody.js +2 -116
  238. package/modern/components/base/GridOverlays.js +10 -16
  239. package/modern/components/cell/GridCell.js +65 -369
  240. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  241. package/modern/components/columnHeaders/GridColumnHeaderItem.js +7 -3
  242. package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  243. package/modern/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  244. package/modern/components/containers/GridRoot.js +18 -14
  245. package/modern/components/containers/GridRootStyles.js +307 -204
  246. package/modern/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  247. package/modern/components/panel/GridPanel.js +3 -4
  248. package/modern/components/panel/filterPanel/GridFilterForm.js +30 -13
  249. package/modern/components/panel/filterPanel/GridFilterPanel.js +46 -20
  250. package/modern/components/toolbar/GridToolbarColumnsButton.js +38 -21
  251. package/modern/components/toolbar/GridToolbarDensitySelector.js +38 -21
  252. package/modern/components/toolbar/GridToolbarExport.js +6 -1
  253. package/modern/components/toolbar/GridToolbarExportContainer.js +39 -22
  254. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -10
  255. package/modern/components/virtualization/GridBottomContainer.js +25 -0
  256. package/modern/components/virtualization/GridMainContainer.js +20 -0
  257. package/modern/components/virtualization/GridTopContainer.js +35 -0
  258. package/modern/components/virtualization/GridVirtualScrollbar.js +131 -0
  259. package/modern/components/virtualization/GridVirtualScroller.js +69 -16
  260. package/modern/components/virtualization/GridVirtualScrollerFiller.js +71 -0
  261. package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  262. package/modern/constants/defaultGridSlotsComponents.js +6 -2
  263. package/modern/constants/gridClasses.js +1 -1
  264. package/modern/hooks/core/gridCoreSelector.js +5 -0
  265. package/modern/hooks/core/useGridInitialization.js +4 -0
  266. package/modern/hooks/core/useGridRefs.js +13 -0
  267. package/modern/hooks/core/useGridTheme.js +19 -0
  268. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  269. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +67 -160
  270. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  271. package/modern/hooks/features/columns/gridColumnsInterfaces.js +9 -1
  272. package/modern/hooks/features/columns/gridColumnsSelector.js +51 -0
  273. package/modern/hooks/features/columns/gridColumnsUtils.js +10 -12
  274. package/modern/hooks/features/columns/index.js +2 -1
  275. package/modern/hooks/features/columns/useGridColumnSpanning.js +62 -61
  276. package/modern/hooks/features/columns/useGridColumns.js +19 -21
  277. package/modern/hooks/features/dimensions/gridDimensionsSelectors.js +1 -0
  278. package/modern/hooks/features/dimensions/index.js +1 -0
  279. package/modern/hooks/features/dimensions/useGridDimensions.js +214 -146
  280. package/modern/hooks/features/export/serializers/csvSerializer.js +2 -2
  281. package/modern/hooks/features/filter/useGridFilter.js +3 -3
  282. package/modern/hooks/features/focus/gridFocusStateSelector.js +2 -6
  283. package/modern/hooks/features/focus/useGridFocus.js +3 -3
  284. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -16
  285. package/modern/hooks/features/pagination/useGridPagination.js +3 -5
  286. package/modern/hooks/features/rows/gridRowsSelector.js +2 -2
  287. package/modern/hooks/features/rows/gridRowsUtils.js +4 -4
  288. package/modern/hooks/features/rows/useGridRowsMeta.js +7 -4
  289. package/modern/hooks/features/scroll/useGridScroll.js +8 -9
  290. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  291. package/modern/hooks/features/sorting/useGridSorting.js +15 -10
  292. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  293. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +435 -432
  294. package/modern/hooks/features/virtualization/useGridVirtualization.js +8 -1
  295. package/modern/hooks/utils/index.js +4 -1
  296. package/modern/hooks/utils/useGridAriaAttributes.js +1 -1
  297. package/modern/hooks/utils/useGridNativeEventListener.js +3 -9
  298. package/modern/hooks/utils/useResizeObserver.js +36 -0
  299. package/modern/hooks/utils/useRunOnce.js +18 -0
  300. package/modern/index.js +1 -1
  301. package/modern/internals/index.js +9 -7
  302. package/modern/locales/hrHR.js +149 -0
  303. package/modern/locales/index.js +4 -1
  304. package/modern/locales/ptPT.js +149 -0
  305. package/modern/locales/zhHK.js +149 -0
  306. package/modern/models/index.js +0 -1
  307. package/modern/models/params/index.js +1 -2
  308. package/modern/utils/utils.js +10 -1
  309. package/node/DataGrid/DataGrid.js +6 -6
  310. package/node/DataGrid/useDataGridComponent.js +1 -0
  311. package/node/DataGrid/useDataGridProps.js +1 -0
  312. package/node/components/GridColumnHeaders.js +3 -11
  313. package/node/components/GridDetailPanels.js +10 -0
  314. package/node/components/GridHeaders.js +60 -0
  315. package/node/components/GridPinnedRows.js +10 -0
  316. package/node/components/GridRow.js +256 -94
  317. package/node/components/GridScrollbarFillerCell.js +47 -0
  318. package/node/components/base/GridBody.js +7 -118
  319. package/node/components/base/GridOverlays.js +9 -15
  320. package/node/components/cell/GridCell.js +66 -369
  321. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -6
  322. package/node/components/columnHeaders/GridColumnHeaderItem.js +8 -4
  323. package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -2
  324. package/node/components/columnHeaders/GridColumnHeadersInner.js +1 -1
  325. package/node/components/containers/GridRoot.js +17 -14
  326. package/node/components/containers/GridRootStyles.js +175 -72
  327. package/node/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +1 -1
  328. package/node/components/panel/GridPanel.js +3 -4
  329. package/node/components/panel/filterPanel/GridFilterForm.js +29 -12
  330. package/node/components/panel/filterPanel/GridFilterPanel.js +45 -19
  331. package/node/components/toolbar/GridToolbarColumnsButton.js +36 -20
  332. package/node/components/toolbar/GridToolbarDensitySelector.js +36 -20
  333. package/node/components/toolbar/GridToolbarExport.js +6 -1
  334. package/node/components/toolbar/GridToolbarExportContainer.js +37 -21
  335. package/node/components/toolbar/GridToolbarFilterButton.js +6 -10
  336. package/node/components/virtualization/GridBottomContainer.js +34 -0
  337. package/node/components/{containers → virtualization}/GridMainContainer.js +7 -29
  338. package/node/components/virtualization/GridTopContainer.js +44 -0
  339. package/node/components/virtualization/GridVirtualScrollbar.js +138 -0
  340. package/node/components/virtualization/GridVirtualScroller.js +69 -17
  341. package/node/components/virtualization/GridVirtualScrollerFiller.js +77 -0
  342. package/node/components/virtualization/GridVirtualScrollerRenderZone.js +2 -1
  343. package/node/constants/defaultGridSlotsComponents.js +5 -1
  344. package/node/constants/gridClasses.js +1 -1
  345. package/node/hooks/core/gridCoreSelector.js +12 -0
  346. package/node/hooks/core/useGridInitialization.js +4 -0
  347. package/node/hooks/core/useGridRefs.js +22 -0
  348. package/node/hooks/core/useGridTheme.js +29 -0
  349. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +5 -12
  350. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +65 -159
  351. package/node/hooks/features/columnMenu/useGridColumnMenu.js +28 -23
  352. package/node/hooks/features/columns/gridColumnsInterfaces.js +11 -1
  353. package/node/hooks/features/columns/gridColumnsSelector.js +52 -1
  354. package/node/hooks/features/columns/gridColumnsUtils.js +10 -13
  355. package/node/hooks/features/columns/index.js +22 -61
  356. package/node/hooks/features/columns/useGridColumnSpanning.js +62 -61
  357. package/node/hooks/features/columns/useGridColumns.js +20 -22
  358. package/node/hooks/features/dimensions/gridDimensionsSelectors.js +8 -0
  359. package/node/hooks/features/dimensions/index.js +11 -0
  360. package/node/hooks/features/dimensions/useGridDimensions.js +215 -144
  361. package/node/hooks/features/export/serializers/csvSerializer.js +2 -2
  362. package/node/hooks/features/filter/useGridFilter.js +2 -2
  363. package/node/hooks/features/focus/gridFocusStateSelector.js +3 -7
  364. package/node/hooks/features/focus/useGridFocus.js +2 -2
  365. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -15
  366. package/node/hooks/features/pagination/useGridPagination.js +3 -5
  367. package/node/hooks/features/rows/gridRowsSelector.js +2 -2
  368. package/node/hooks/features/rows/gridRowsUtils.js +4 -4
  369. package/node/hooks/features/rows/useGridRowsMeta.js +5 -3
  370. package/node/hooks/features/scroll/useGridScroll.js +8 -9
  371. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  372. package/node/hooks/features/sorting/useGridSorting.js +15 -10
  373. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +22 -2
  374. package/node/hooks/features/virtualization/useGridVirtualScroller.js +434 -431
  375. package/node/hooks/features/virtualization/useGridVirtualization.js +9 -1
  376. package/node/hooks/utils/index.js +36 -0
  377. package/node/hooks/utils/useGridAriaAttributes.js +1 -1
  378. package/node/hooks/utils/useGridNativeEventListener.js +3 -9
  379. package/node/hooks/utils/useResizeObserver.js +44 -0
  380. package/node/hooks/utils/useRunOnce.js +27 -0
  381. package/node/index.js +1 -1
  382. package/node/internals/index.js +86 -71
  383. package/node/locales/hrHR.js +155 -0
  384. package/node/locales/index.js +33 -0
  385. package/node/locales/ptPT.js +155 -0
  386. package/node/locales/zhHK.js +155 -0
  387. package/node/models/index.js +0 -11
  388. package/node/models/params/index.js +0 -11
  389. package/node/utils/utils.js +11 -1
  390. package/package.json +6 -6
  391. package/utils/utils.d.ts +6 -0
  392. package/utils/utils.js +10 -1
  393. package/components/DataGridVirtualScroller.d.ts +0 -3
  394. package/components/DataGridVirtualScroller.js +0 -35
  395. package/components/containers/GridMainContainer.js +0 -43
  396. package/legacy/components/DataGridVirtualScroller.js +0 -32
  397. package/legacy/components/containers/GridMainContainer.js +0 -45
  398. package/legacy/models/gridRootContainerRef.js +0 -1
  399. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  400. package/models/gridRootContainerRef.d.ts +0 -5
  401. package/models/gridRootContainerRef.js +0 -1
  402. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +0 -10
  403. package/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  404. package/modern/components/DataGridVirtualScroller.js +0 -35
  405. package/modern/components/containers/GridMainContainer.js +0 -42
  406. package/modern/models/gridRootContainerRef.js +0 -1
  407. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +0 -1
  408. package/node/components/DataGridVirtualScroller.js +0 -42
  409. package/node/models/gridRootContainerRef.js +0 -5
  410. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +0 -5
@@ -4,150 +4,75 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useGridColumnHeaders = void 0;
7
+ exports.useGridColumnHeaders = exports.GridColumnHeaderRow = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var ReactDOM = _interopRequireWildcard(require("react-dom"));
11
10
  var _utils = require("@mui/utils");
12
11
  var _styles = require("@mui/material/styles");
13
- var _reselect = require("reselect");
14
12
  var _utils2 = require("../../utils");
15
13
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
16
- var _useGridRootProps = require("../../utils/useGridRootProps");
17
14
  var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
18
15
  var _GridColumnHeaderItem = require("../../../components/columnHeaders/GridColumnHeaderItem");
19
- var _gridColumnsUtils = require("../columns/gridColumnsUtils");
20
- var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
21
- var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
16
+ var _dimensions = require("../dimensions");
22
17
  var _virtualization = require("../virtualization");
23
18
  var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
19
+ var _columns = require("../columns");
20
+ var _GridScrollbarFillerCell = require("../../../components/GridScrollbarFillerCell");
21
+ var _gridClasses = require("../../../constants/gridClasses");
24
22
  var _jsxRuntime = require("react/jsx-runtime");
25
23
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
26
24
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
27
- const GridColumnHeaderRow = (0, _styles.styled)('div', {
25
+ const SpaceFiller = (0, _styles.styled)('div')({
26
+ /* GridRootStyles conflict */
27
+ '&&': {
28
+ padding: 0,
29
+ width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
30
+ }
31
+ });
32
+ const GridColumnHeaderRow = exports.GridColumnHeaderRow = (0, _styles.styled)('div', {
28
33
  name: 'MuiDataGrid',
29
34
  slot: 'ColumnHeaderRow',
30
35
  overridesResolver: (props, styles) => styles.columnHeaderRow
31
- })(() => ({
32
- display: 'flex'
36
+ })(({
37
+ ownerState: {
38
+ params: {
39
+ position
40
+ } = {},
41
+ leftOverflow = 0
42
+ }
43
+ }) => ({
44
+ display: 'flex',
45
+ height: 'var(--DataGrid-headerHeight)',
46
+ transform: position === undefined ? `translate3d(${leftOverflow !== 0 ? `calc(var(--DataGrid-offsetLeft) - ${leftOverflow}px)` : 'var(--DataGrid-offsetLeft)'}, 0, 0)` : undefined
33
47
  }));
34
- function isUIEvent(event) {
35
- return !!event.target;
36
- }
37
48
  const useGridColumnHeaders = props => {
38
49
  const {
39
50
  innerRef: innerRefProp,
40
- minColumnIndex = 0,
41
51
  visibleColumns,
42
52
  sortColumnLookup,
43
53
  filterColumnLookup,
44
- columnPositions,
45
54
  columnHeaderTabIndexState,
46
55
  columnGroupHeaderTabIndexState,
47
56
  columnHeaderFocus,
48
57
  columnGroupHeaderFocus,
49
- densityFactor,
50
58
  headerGroupingMaxDepth,
51
59
  columnMenuState,
52
60
  columnVisibility,
53
61
  columnGroupsHeaderStructure,
54
62
  hasOtherElementInTabSequence
55
63
  } = props;
56
- const theme = (0, _styles.useTheme)();
57
64
  const [dragCol, setDragCol] = React.useState('');
58
65
  const [resizeCol, setResizeCol] = React.useState('');
59
66
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
60
67
  const hasVirtualization = (0, _utils2.useGridSelector)(apiRef, _virtualization.gridVirtualizationColumnEnabledSelector);
61
- const rootProps = (0, _useGridRootProps.useGridRootProps)();
62
68
  const innerRef = React.useRef(null);
63
69
  const handleInnerRef = (0, _utils.unstable_useForkRef)(innerRefProp, innerRef);
64
- const [renderContext, setRenderContextRaw] = React.useState(null);
65
- const prevRenderContext = React.useRef(renderContext);
66
- const prevScrollLeft = React.useRef(0);
67
- const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, rootProps);
68
- const totalHeaderHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps.columnHeaderHeight);
69
- const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);
70
- const setRenderContext = React.useCallback(nextRenderContext => {
71
- if (renderContext && nextRenderContext && (0, _useGridVirtualScroller.areRenderContextsEqual)(renderContext, nextRenderContext)) {
72
- return;
73
- }
74
- setRenderContextRaw(nextRenderContext);
75
- }, [renderContext]);
70
+ const dimensions = (0, _utils2.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
71
+ const renderContext = (0, _utils2.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
72
+ const visiblePinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
76
73
  React.useEffect(() => {
77
74
  apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
78
75
  }, [apiRef]);
79
-
80
- // memoize `getFirstColumnIndexToRender`, since it's called on scroll
81
- const getFirstColumnIndexToRenderRef = React.useRef((0, _reselect.defaultMemoize)(_gridColumnsUtils.getFirstColumnIndexToRender, {
82
- equalityCheck: (a, b) => ['firstColumnIndex', 'minColumnIndex', 'columnBuffer'].every(key => a[key] === b[key])
83
- }));
84
- const updateInnerPosition = React.useCallback(nextRenderContext => {
85
- const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
86
- firstIndex: nextRenderContext.firstRowIndex,
87
- lastIndex: nextRenderContext.lastRowIndex,
88
- minFirstIndex: 0,
89
- maxLastIndex: currentPage.rows.length,
90
- buffer: rootProps.rowBuffer
91
- });
92
- const firstColumnToRender = getFirstColumnIndexToRenderRef.current({
93
- firstColumnIndex: nextRenderContext.firstColumnIndex,
94
- minColumnIndex,
95
- columnBuffer: rootProps.columnBuffer,
96
- firstRowToRender,
97
- lastRowToRender,
98
- apiRef,
99
- visibleRows: currentPage.rows
100
- });
101
- const direction = theme.direction === 'ltr' ? 1 : -1;
102
- const offset = firstColumnToRender > 0 ? prevScrollLeft.current - direction * columnPositions[firstColumnToRender] : prevScrollLeft.current;
103
- innerRef.current.style.transform = `translate3d(${-offset}px, 0px, 0px)`;
104
- }, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer, theme.direction]);
105
- React.useLayoutEffect(() => {
106
- if (renderContext) {
107
- updateInnerPosition(renderContext);
108
- }
109
- }, [renderContext, updateInnerPosition]);
110
- const handleScroll = React.useCallback(({
111
- left,
112
- renderContext: nextRenderContext = null
113
- }, event) => {
114
- if (!innerRef.current) {
115
- return;
116
- }
117
-
118
- // Ignore vertical scroll.
119
- // Excepts the first event which sets the previous render context.
120
- if (prevScrollLeft.current === left && prevRenderContext.current?.firstColumnIndex === nextRenderContext?.firstColumnIndex && prevRenderContext.current?.lastColumnIndex === nextRenderContext?.lastColumnIndex) {
121
- return;
122
- }
123
- prevScrollLeft.current = left;
124
-
125
- // We can only update the position when we guarantee that the render context has been
126
- // rendered. This is achieved using ReactDOM.flushSync or when the context doesn't change.
127
- let canUpdateInnerPosition = false;
128
- if (nextRenderContext !== prevRenderContext.current || !prevRenderContext.current) {
129
- // ReactDOM.flushSync cannot be called on `scroll` events fired inside effects
130
- if (isUIEvent(event)) {
131
- // To prevent flickering, the inner position can only be updated after the new context has
132
- // been rendered. ReactDOM.flushSync ensures that the state changes will happen before
133
- // updating the position.
134
- ReactDOM.flushSync(() => {
135
- setRenderContext(nextRenderContext);
136
- });
137
- canUpdateInnerPosition = true;
138
- } else {
139
- setRenderContext(nextRenderContext);
140
- }
141
- prevRenderContext.current = nextRenderContext;
142
- } else {
143
- canUpdateInnerPosition = true;
144
- }
145
-
146
- // Pass directly the render context to avoid waiting for the next render
147
- if (nextRenderContext && canUpdateInnerPosition) {
148
- updateInnerPosition(nextRenderContext);
149
- }
150
- }, [updateInnerPosition, setRenderContext]);
151
76
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
152
77
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
153
78
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
@@ -156,53 +81,41 @@ const useGridColumnHeaders = props => {
156
81
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnResizeStop', handleColumnResizeStop);
157
82
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
158
83
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
159
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'scrollPositionChange', handleScroll);
160
84
 
161
85
  // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
162
86
  const getColumnsToRender = params => {
163
87
  const {
164
- renderContext: nextRenderContext = renderContext,
165
- minFirstColumn = minColumnIndex,
88
+ renderContext: currentContext = renderContext,
89
+ // TODO: `minFirstColumn` is not used anymore, could be refactored out.
166
90
  maxLastColumn = visibleColumns.length
167
91
  } = params || {};
168
- if (!nextRenderContext) {
169
- return null;
170
- }
171
- const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
172
- firstIndex: nextRenderContext.firstRowIndex,
173
- lastIndex: nextRenderContext.lastRowIndex,
174
- minFirstIndex: 0,
175
- maxLastIndex: currentPage.rows.length,
176
- buffer: rootProps.rowBuffer
177
- });
178
- const firstColumnToRender = !hasVirtualization ? 0 : getFirstColumnIndexToRenderRef.current({
179
- firstColumnIndex: nextRenderContext.firstColumnIndex,
180
- minColumnIndex: minFirstColumn,
181
- columnBuffer: rootProps.columnBuffer,
182
- apiRef,
183
- firstRowToRender,
184
- lastRowToRender,
185
- visibleRows: currentPage.rows
186
- });
187
- const lastColumnToRender = !hasVirtualization ? maxLastColumn : Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
92
+ const firstColumnToRender = !hasVirtualization ? 0 : currentContext.firstColumnIndex;
93
+ const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;
188
94
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
189
95
  return {
190
96
  renderedColumns,
191
97
  firstColumnToRender,
192
- lastColumnToRender,
193
- minFirstColumn,
194
- maxLastColumn
98
+ lastColumnToRender
195
99
  };
196
100
  };
101
+ const getFiller = (params, borderTop = false) => {
102
+ const isPinnedRight = params?.position === _columns.GridPinnedColumnPosition.RIGHT;
103
+ const hasScrollbarFiller = visiblePinnedColumns.right.length > 0 && isPinnedRight || visiblePinnedColumns.right.length === 0 && params?.position === undefined;
104
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
105
+ children: [params?.position === undefined && /*#__PURE__*/(0, _jsxRuntime.jsx)(SpaceFiller, {
106
+ className: _gridClasses.gridClasses.columnHeader
107
+ }), hasScrollbarFiller && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridScrollbarFillerCell.GridScrollbarFillerCell, {
108
+ header: true,
109
+ borderTop: borderTop,
110
+ pinnedRight: isPinnedRight
111
+ })]
112
+ });
113
+ };
197
114
  const getColumnHeaders = (params, other = {}) => {
198
- const columnsToRender = getColumnsToRender(params);
199
- if (columnsToRender == null) {
200
- return null;
201
- }
202
115
  const {
203
116
  renderedColumns,
204
117
  firstColumnToRender
205
- } = columnsToRender;
118
+ } = getColumnsToRender(params);
206
119
  const columns = [];
207
120
  for (let i = 0; i < renderedColumns.length; i += 1) {
208
121
  const colDef = renderedColumns[i];
@@ -214,7 +127,7 @@ const useGridColumnHeaders = props => {
214
127
  columns.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnHeaderItem.GridColumnHeaderItem, (0, _extends2.default)({}, sortColumnLookup[colDef.field], {
215
128
  columnMenuOpen: open,
216
129
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
217
- headerHeight: headerHeight,
130
+ headerHeight: dimensions.headerHeight,
218
131
  isDragging: colDef.field === dragCol,
219
132
  colDef: colDef,
220
133
  colIndex: columnIndex,
@@ -223,11 +136,13 @@ const useGridColumnHeaders = props => {
223
136
  tabIndex: tabIndex
224
137
  }, other), colDef.field));
225
138
  }
226
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
139
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridColumnHeaderRow, {
227
140
  role: "row",
228
141
  "aria-rowindex": headerGroupingMaxDepth + 1,
229
- ownerState: rootProps,
230
- children: columns
142
+ ownerState: {
143
+ params
144
+ },
145
+ children: [columns, getFiller(params)]
231
146
  });
232
147
  };
233
148
  const getColumnGroupHeaders = params => {
@@ -235,7 +150,7 @@ const useGridColumnHeaders = props => {
235
150
  return null;
236
151
  }
237
152
  const columnsToRender = getColumnsToRender(params);
238
- if (columnsToRender == null || columnsToRender.renderedColumns.length === 0) {
153
+ if (columnsToRender.renderedColumns.length === 0) {
239
154
  return null;
240
155
  }
241
156
  const {
@@ -247,13 +162,13 @@ const useGridColumnHeaders = props => {
247
162
  for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
248
163
  const rowStructure = columnGroupsHeaderStructure[depth];
249
164
  const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
250
- const firstGroupToRender = apiRef.current.unstable_getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
165
+ const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
251
166
  const firstGroupIndex = rowStructure.findIndex(({
252
167
  groupId,
253
168
  columnFields
254
169
  }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
255
170
  const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
256
- const lastGroupToRender = apiRef.current.unstable_getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
171
+ const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
257
172
  const lastGroupIndex = rowStructure.findIndex(({
258
173
  groupId,
259
174
  columnFields
@@ -293,15 +208,14 @@ const useGridColumnHeaders = props => {
293
208
  });
294
209
  }
295
210
  headerToRender.forEach((depthInfo, depthIndex) => {
296
- columns.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
297
- style: {
298
- height: `${headerHeight}px`,
299
- transform: `translateX(-${depthInfo.leftOverflow}px)`
300
- },
211
+ columns.push( /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridColumnHeaderRow, {
301
212
  role: "row",
302
213
  "aria-rowindex": depthIndex + 1,
303
- ownerState: rootProps,
304
- children: depthInfo.elements.map(({
214
+ ownerState: {
215
+ params,
216
+ leftOverflow: depthInfo.leftOverflow
217
+ },
218
+ children: [depthInfo.elements.map(({
305
219
  groupId,
306
220
  width,
307
221
  fields,
@@ -317,34 +231,26 @@ const useGridColumnHeaders = props => {
317
231
  depth: depthIndex,
318
232
  isLastColumn: colIndex === visibleColumns.length - fields.length,
319
233
  maxDepth: headerToRender.length,
320
- height: headerHeight,
234
+ height: dimensions.headerHeight,
321
235
  hasFocus: hasFocus,
322
236
  tabIndex: tabIndex
323
237
  }, groupIndex);
324
- })
238
+ }), getFiller(params)]
325
239
  }, depthIndex));
326
240
  });
327
241
  return columns;
328
242
  };
329
- const rootStyle = {
330
- minHeight: totalHeaderHeight,
331
- maxHeight: totalHeaderHeight,
332
- lineHeight: `${headerHeight}px`
333
- };
334
243
  return {
335
244
  renderContext,
245
+ getFiller,
336
246
  getColumnHeaders,
337
247
  getColumnsToRender,
338
248
  getColumnGroupHeaders,
339
249
  isDragging: !!dragCol,
340
- getRootProps: (other = {}) => (0, _extends2.default)({
341
- style: rootStyle
342
- }, other),
343
250
  getInnerProps: () => ({
344
251
  ref: handleInnerRef,
345
252
  role: 'rowgroup'
346
- }),
347
- headerHeight
253
+ })
348
254
  };
349
255
  };
350
256
  exports.useGridColumnHeaders = useGridColumnHeaders;
@@ -30,19 +30,25 @@ const useGridColumnMenu = apiRef => {
30
30
  * API METHODS
31
31
  */
32
32
  const showColumnMenu = React.useCallback(field => {
33
- const shouldUpdate = apiRef.current.setState(state => {
34
- if (state.columnMenu.open && state.columnMenu.field === field) {
35
- return state;
36
- }
37
- logger.debug('Opening Column Menu');
38
- return (0, _extends2.default)({}, state, {
39
- columnMenu: {
40
- open: true,
41
- field
33
+ const columnMenuState = (0, _columnMenuSelector.gridColumnMenuSelector)(apiRef.current.state);
34
+ const newState = {
35
+ open: true,
36
+ field
37
+ };
38
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
39
+ if (shouldUpdate) {
40
+ apiRef.current.setState(state => {
41
+ if (state.columnMenu.open && state.columnMenu.field === field) {
42
+ return state;
42
43
  }
44
+ logger.debug('Opening Column Menu');
45
+ return (0, _extends2.default)({}, state, {
46
+ columnMenu: {
47
+ open: true,
48
+ field
49
+ }
50
+ });
43
51
  });
44
- });
45
- if (shouldUpdate) {
46
52
  apiRef.current.hidePreferences();
47
53
  apiRef.current.forceUpdate();
48
54
  }
@@ -74,19 +80,18 @@ const useGridColumnMenu = apiRef => {
74
80
  }
75
81
  apiRef.current.setColumnHeaderFocus(fieldToFocus);
76
82
  }
77
- const shouldUpdate = apiRef.current.setState(state => {
78
- if (!state.columnMenu.open && state.columnMenu.field === undefined) {
79
- return state;
80
- }
81
- logger.debug('Hiding Column Menu');
82
- return (0, _extends2.default)({}, state, {
83
- columnMenu: (0, _extends2.default)({}, state.columnMenu, {
84
- open: false,
85
- field: undefined
86
- })
87
- });
88
- });
83
+ const newState = {
84
+ open: false,
85
+ field: undefined
86
+ };
87
+ const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;
89
88
  if (shouldUpdate) {
89
+ apiRef.current.setState(state => {
90
+ logger.debug('Hiding Column Menu');
91
+ return (0, _extends2.default)({}, state, {
92
+ columnMenu: newState
93
+ });
94
+ });
90
95
  apiRef.current.forceUpdate();
91
96
  }
92
97
  }, [apiRef, logger]);
@@ -2,4 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
5
+ });
6
+ exports.GridPinnedColumnPosition = exports.EMPTY_PINNED_COLUMN_FIELDS = void 0;
7
+ let GridPinnedColumnPosition = exports.GridPinnedColumnPosition = /*#__PURE__*/function (GridPinnedColumnPosition) {
8
+ GridPinnedColumnPosition["LEFT"] = "left";
9
+ GridPinnedColumnPosition["RIGHT"] = "right";
10
+ return GridPinnedColumnPosition;
11
+ }({});
12
+ const EMPTY_PINNED_COLUMN_FIELDS = exports.EMPTY_PINNED_COLUMN_FIELDS = {
13
+ left: [],
14
+ right: []
15
+ };
@@ -3,8 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsTotalWidthSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
6
+ exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsTotalWidthSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
+ var _gridColumnsInterfaces = require("./gridColumnsInterfaces");
9
+ var _gridCoreSelector = require("../../core/gridCoreSelector");
8
10
  /**
9
11
  * Get the columns state
10
12
  * @category Columns
@@ -49,6 +51,55 @@ const gridVisibleColumnDefinitionsSelector = exports.gridVisibleColumnDefinition
49
51
  */
50
52
  const gridVisibleColumnFieldsSelector = exports.gridVisibleColumnFieldsSelector = (0, _createSelector.createSelectorMemoized)(gridVisibleColumnDefinitionsSelector, visibleColumns => visibleColumns.map(column => column.field));
51
53
 
54
+ /**
55
+ * Get the visible pinned columns model.
56
+ * @category Visible Columns
57
+ */
58
+ const gridPinnedColumnsSelector = state => state.pinnedColumns;
59
+
60
+ /**
61
+ * Get the visible pinned columns.
62
+ * @category Visible Columns
63
+ */
64
+ exports.gridPinnedColumnsSelector = gridPinnedColumnsSelector;
65
+ const gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisiblePinnedColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, _gridCoreSelector.gridThemeSelector, (columnsState, model, visibleColumnFields, theme) => {
66
+ const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, theme.direction === 'rtl');
67
+ const visiblePinnedColumns = {
68
+ left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
69
+ right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
70
+ };
71
+ return visiblePinnedColumns;
72
+ });
73
+ function filterVisibleColumns(pinnedColumns, columns, invert) {
74
+ if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
75
+ return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS;
76
+ }
77
+ if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) {
78
+ return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS;
79
+ }
80
+ const filter = (newPinnedColumns, remainingColumns) => {
81
+ if (!Array.isArray(newPinnedColumns)) {
82
+ return [];
83
+ }
84
+ return newPinnedColumns.filter(field => remainingColumns.includes(field));
85
+ };
86
+ const leftPinnedColumns = filter(pinnedColumns.left, columns);
87
+ const columnsWithoutLeftPinnedColumns = columns.filter(
88
+ // Filter out from the remaining columns those columns already pinned to the left
89
+ field => !leftPinnedColumns.includes(field));
90
+ const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);
91
+ if (invert) {
92
+ return {
93
+ left: rightPinnedColumns,
94
+ right: leftPinnedColumns
95
+ };
96
+ }
97
+ return {
98
+ left: leftPinnedColumns,
99
+ right: rightPinnedColumns
100
+ };
101
+ }
102
+
52
103
  /**
53
104
  * Get the left position in pixel of each visible columns relative to the left of the first column.
54
105
  * @category Visible Columns
@@ -10,7 +10,7 @@ exports.createColumnsState = void 0;
10
10
  exports.getFirstColumnIndexToRender = getFirstColumnIndexToRender;
11
11
  exports.getFirstNonSpannedColumnToRender = getFirstNonSpannedColumnToRender;
12
12
  exports.getTotalHeaderHeight = getTotalHeaderHeight;
13
- exports.mergeColumnsState = exports.hydrateColumnsWidth = void 0;
13
+ exports.hydrateColumnsWidth = void 0;
14
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
15
  var _colDef = require("../../../colDef");
16
16
  var _gridColumnsSelector = require("./gridColumnsSelector");
@@ -18,6 +18,8 @@ var _utils = require("../../../utils/utils");
18
18
  var _densitySelector = require("../density/densitySelector");
19
19
  var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
20
20
  const COLUMNS_DIMENSION_PROPERTIES = exports.COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];
21
+ const COLUMN_TYPES = (0, _colDef.getGridDefaultColumnTypes)();
22
+
21
23
  /**
22
24
  * Computes width for flex columns.
23
25
  * Based on CSS Flexbox specification:
@@ -211,10 +213,10 @@ const applyInitialState = (columnsState, initialState) => {
211
213
  return newColumnsState;
212
214
  };
213
215
  exports.applyInitialState = applyInitialState;
214
- function getDefaultColTypeDef(columnTypes, type) {
215
- let colDef = columnTypes[_colDef.DEFAULT_GRID_COL_TYPE_KEY];
216
- if (type && columnTypes[type]) {
217
- colDef = columnTypes[type];
216
+ function getDefaultColTypeDef(type) {
217
+ let colDef = COLUMN_TYPES[_colDef.DEFAULT_GRID_COL_TYPE_KEY];
218
+ if (type && COLUMN_TYPES[type]) {
219
+ colDef = COLUMN_TYPES[type];
218
220
  }
219
221
  return colDef;
220
222
  }
@@ -222,7 +224,6 @@ const createColumnsState = ({
222
224
  apiRef,
223
225
  columnsToUpsert,
224
226
  initialState,
225
- columnTypes,
226
227
  columnVisibilityModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef),
227
228
  keepOnlyColumnsToUpsert = false
228
229
  }) => {
@@ -258,7 +259,7 @@ const createColumnsState = ({
258
259
  columnsToKeep[field] = true;
259
260
  let existingState = columnsState.lookup[field];
260
261
  if (existingState == null) {
261
- existingState = (0, _extends2.default)({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
262
+ existingState = (0, _extends2.default)({}, getDefaultColTypeDef(newColumn.type), {
262
263
  field,
263
264
  hasBeenResized: false
264
265
  });
@@ -269,7 +270,7 @@ const createColumnsState = ({
269
270
 
270
271
  // If the column type has changed - merge the existing state with the default column type definition
271
272
  if (existingState && existingState.type !== newColumn.type) {
272
- existingState = (0, _extends2.default)({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
273
+ existingState = (0, _extends2.default)({}, getDefaultColTypeDef(newColumn.type), {
273
274
  field
274
275
  });
275
276
  }
@@ -295,13 +296,9 @@ const createColumnsState = ({
295
296
  }
296
297
  const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);
297
298
  const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);
298
- return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.()?.viewportInnerSize.width ?? 0);
299
+ return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.().viewportInnerSize.width ?? 0);
299
300
  };
300
301
  exports.createColumnsState = createColumnsState;
301
- const mergeColumnsState = columnsState => state => (0, _extends2.default)({}, state, {
302
- columns: columnsState
303
- });
304
- exports.mergeColumnsState = mergeColumnsState;
305
302
  function getFirstNonSpannedColumnToRender({
306
303
  firstColumnToRender,
307
304
  apiRef,