@mui/x-data-grid 7.0.0-beta.6 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/CHANGELOG.md +311 -12
  2. package/DataGrid/DataGrid.js +57 -17
  3. package/DataGrid/useDataGridComponent.js +3 -0
  4. package/DataGrid/useDataGridProps.js +6 -7
  5. package/README.md +1 -1
  6. package/components/GridColumnHeaders.d.ts +1 -2
  7. package/components/GridColumnHeaders.js +6 -17
  8. package/components/GridFooter.js +2 -3
  9. package/components/GridHeader.js +1 -2
  10. package/components/GridHeaders.js +1 -4
  11. package/components/GridPagination.d.ts +6 -5
  12. package/components/GridPagination.js +14 -11
  13. package/components/GridRow.d.ts +1 -1
  14. package/components/GridRow.js +17 -36
  15. package/components/GridScrollArea.d.ts +10 -0
  16. package/components/GridScrollArea.js +150 -0
  17. package/components/base/GridFooterPlaceholder.js +1 -2
  18. package/components/base/GridOverlays.js +3 -6
  19. package/components/cell/GridActionsCell.js +4 -6
  20. package/components/cell/GridActionsCellItem.d.ts +8 -25
  21. package/components/cell/GridActionsCellItem.js +8 -5
  22. package/components/cell/GridBooleanCell.d.ts +1 -0
  23. package/components/cell/GridBooleanCell.js +3 -2
  24. package/components/cell/GridCell.d.ts +7 -0
  25. package/components/cell/GridCell.js +18 -11
  26. package/components/cell/GridEditBooleanCell.js +1 -2
  27. package/components/cell/GridEditDateCell.js +2 -3
  28. package/components/cell/GridEditInputCell.js +2 -2
  29. package/components/cell/GridEditSingleSelectCell.js +5 -8
  30. package/components/columnHeaders/ColumnHeaderMenuIcon.js +2 -3
  31. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  32. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -0
  33. package/components/columnHeaders/GridColumnGroupHeader.js +22 -13
  34. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +2 -3
  35. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -0
  36. package/components/columnHeaders/GridColumnHeaderItem.js +26 -12
  37. package/components/columnHeaders/GridColumnHeaderSortIcon.js +1 -2
  38. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -3
  39. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -0
  40. package/components/columnHeaders/GridGenericColumnHeaderItem.js +7 -6
  41. package/components/columnSelection/GridCellCheckboxRenderer.js +3 -5
  42. package/components/columnSelection/GridHeaderCheckbox.js +1 -2
  43. package/components/columnsManagement/GridColumnsManagement.js +17 -21
  44. package/components/containers/GridRoot.js +3 -3
  45. package/components/containers/GridRootStyles.js +12 -20
  46. package/components/menu/GridMenu.js +4 -6
  47. package/components/menu/columnMenu/GridColumnHeaderMenu.js +1 -1
  48. package/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js +2 -3
  49. package/components/panel/GridColumnsPanel.js +1 -2
  50. package/components/panel/GridPanel.d.ts +1 -10
  51. package/components/panel/GridPanel.js +1 -2
  52. package/components/panel/GridPreferencesPanel.js +2 -3
  53. package/components/panel/filterPanel/GridFilterForm.js +24 -27
  54. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -1
  55. package/components/panel/filterPanel/GridFilterInputBoolean.js +6 -7
  56. package/components/panel/filterPanel/GridFilterInputDate.d.ts +1 -1
  57. package/components/panel/filterPanel/GridFilterInputDate.js +3 -4
  58. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +11 -15
  59. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +10 -14
  60. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -1
  61. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +10 -11
  62. package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -1
  63. package/components/panel/filterPanel/GridFilterInputValue.js +5 -7
  64. package/components/panel/filterPanel/GridFilterPanel.js +5 -9
  65. package/components/panel/filterPanel/filterPanelUtils.js +1 -1
  66. package/components/toolbar/GridToolbarColumnsButton.js +3 -5
  67. package/components/toolbar/GridToolbarDensitySelector.js +8 -10
  68. package/components/toolbar/GridToolbarExport.js +2 -2
  69. package/components/toolbar/GridToolbarExportContainer.js +3 -5
  70. package/components/toolbar/GridToolbarFilterButton.js +3 -5
  71. package/components/toolbar/GridToolbarQuickFilter.js +4 -5
  72. package/components/virtualization/GridVirtualScrollbar.js +4 -0
  73. package/components/virtualization/GridVirtualScroller.js +6 -1
  74. package/components/virtualization/GridVirtualScrollerContent.js +1 -2
  75. package/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  76. package/components/virtualization/GridVirtualScrollerRenderZone.js +1 -2
  77. package/constants/gridClasses.d.ts +6 -32
  78. package/constants/gridClasses.js +1 -1
  79. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  80. package/hooks/core/strategyProcessing/useGridStrategyProcessing.js +1 -2
  81. package/hooks/core/useGridApiInitialization.js +4 -6
  82. package/hooks/features/clipboard/useGridClipboard.js +6 -5
  83. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +4 -16
  84. package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +4 -8
  85. package/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -23
  86. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +23 -7
  87. package/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -101
  88. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +2 -2
  89. package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
  90. package/hooks/features/columnResize/columnResizeSelector.js +3 -0
  91. package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
  92. package/hooks/features/columnResize/columnResizeState.js +1 -0
  93. package/hooks/features/columnResize/gridColumnResizeApi.d.ts +44 -0
  94. package/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  95. package/hooks/features/columnResize/index.d.ts +3 -0
  96. package/hooks/features/columnResize/index.js +3 -0
  97. package/hooks/features/columnResize/useGridColumnResize.d.ts +10 -0
  98. package/hooks/features/columnResize/useGridColumnResize.js +553 -0
  99. package/hooks/features/columns/gridColumnsSelector.js +1 -2
  100. package/hooks/features/columns/gridColumnsUtils.d.ts +0 -9
  101. package/hooks/features/columns/gridColumnsUtils.js +5 -22
  102. package/hooks/features/columns/useGridColumnSpanning.js +1 -2
  103. package/hooks/features/columns/useGridColumns.js +11 -19
  104. package/hooks/features/density/densitySelector.d.ts +4 -2
  105. package/hooks/features/density/densitySelector.js +8 -2
  106. package/hooks/features/density/densityState.d.ts +1 -4
  107. package/hooks/features/density/useGridDensity.d.ts +2 -4
  108. package/hooks/features/density/useGridDensity.js +21 -29
  109. package/hooks/features/dimensions/useGridDimensions.js +7 -10
  110. package/hooks/features/editing/useGridCellEditing.js +25 -8
  111. package/hooks/features/editing/useGridEditing.js +1 -2
  112. package/hooks/features/editing/useGridRowEditing.js +4 -6
  113. package/hooks/features/export/serializers/csvSerializer.d.ts +2 -0
  114. package/hooks/features/export/serializers/csvSerializer.js +25 -16
  115. package/hooks/features/export/useGridCsvExport.js +9 -10
  116. package/hooks/features/export/useGridPrintExport.js +17 -22
  117. package/hooks/features/export/utils.js +2 -3
  118. package/hooks/features/filter/gridFilterSelector.js +15 -22
  119. package/hooks/features/filter/gridFilterUtils.js +10 -16
  120. package/hooks/features/filter/useGridFilter.js +9 -15
  121. package/hooks/features/focus/useGridFocus.js +5 -6
  122. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +1 -0
  123. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
  124. package/hooks/features/headerFiltering/useGridHeaderFiltering.js +23 -5
  125. package/hooks/features/index.d.ts +1 -0
  126. package/hooks/features/index.js +1 -0
  127. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +1 -2
  128. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +19 -2
  129. package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
  130. package/hooks/features/pagination/gridPaginationSelector.js +9 -4
  131. package/hooks/features/pagination/useGridPagination.d.ts +1 -6
  132. package/hooks/features/pagination/useGridPagination.js +9 -158
  133. package/hooks/features/pagination/useGridPaginationModel.d.ts +11 -0
  134. package/hooks/features/pagination/useGridPaginationModel.js +165 -0
  135. package/hooks/features/pagination/useGridRowCount.d.ts +8 -0
  136. package/hooks/features/pagination/useGridRowCount.js +94 -0
  137. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +7 -12
  138. package/hooks/features/rowSelection/useGridRowSelection.js +11 -16
  139. package/hooks/features/rows/gridRowsSelector.js +11 -19
  140. package/hooks/features/rows/gridRowsUtils.js +7 -9
  141. package/hooks/features/rows/useGridParamsApi.js +1 -1
  142. package/hooks/features/rows/useGridRows.js +4 -13
  143. package/hooks/features/rows/useGridRowsMeta.js +7 -13
  144. package/hooks/features/scroll/useGridScroll.js +3 -4
  145. package/hooks/features/sorting/gridSortingSelector.js +4 -7
  146. package/hooks/features/sorting/useGridSorting.js +8 -14
  147. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +4 -4
  148. package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  149. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +3 -3
  150. package/hooks/features/virtualization/useGridVirtualScroller.js +220 -71
  151. package/hooks/utils/useGridApiEventHandler.js +5 -10
  152. package/hooks/utils/useGridNativeEventListener.js +1 -2
  153. package/hooks/utils/useLazyRef.d.ts +1 -2
  154. package/hooks/utils/useLazyRef.js +1 -11
  155. package/hooks/utils/useOnMount.d.ts +1 -2
  156. package/hooks/utils/useOnMount.js +1 -7
  157. package/hooks/utils/useTimeout.d.ts +1 -11
  158. package/hooks/utils/useTimeout.js +1 -36
  159. package/index.js +1 -1
  160. package/internals/index.d.ts +3 -1
  161. package/internals/index.js +2 -1
  162. package/internals/utils/getPinnedCellOffset.d.ts +3 -0
  163. package/internals/utils/getPinnedCellOffset.js +17 -0
  164. package/internals/utils/useProps.js +1 -2
  165. package/joy/joySlots.js +18 -63
  166. package/locales/jaJP.js +3 -4
  167. package/material/index.js +0 -2
  168. package/models/api/gridApiCommon.d.ts +3 -3
  169. package/models/api/gridCoreApi.d.ts +1 -5
  170. package/models/api/gridRowsMetaApi.d.ts +1 -1
  171. package/models/api/index.d.ts +1 -1
  172. package/models/api/index.js +0 -1
  173. package/models/events/gridEventLookup.d.ts +13 -0
  174. package/models/gridExport.d.ts +6 -0
  175. package/models/gridHeaderFilteringModel.d.ts +1 -0
  176. package/models/gridSlotsComponent.d.ts +0 -5
  177. package/models/gridStateCommunity.d.ts +3 -0
  178. package/models/params/gridScrollParams.d.ts +5 -3
  179. package/models/props/DataGridProps.d.ts +58 -28
  180. package/modern/DataGrid/DataGrid.js +57 -17
  181. package/modern/DataGrid/useDataGridComponent.js +3 -0
  182. package/modern/DataGrid/useDataGridProps.js +6 -7
  183. package/modern/components/GridColumnHeaders.js +6 -17
  184. package/modern/components/GridHeaders.js +1 -4
  185. package/modern/components/GridPagination.js +13 -6
  186. package/modern/components/GridRow.js +4 -19
  187. package/modern/components/GridScrollArea.js +150 -0
  188. package/modern/components/cell/GridActionsCell.js +1 -1
  189. package/modern/components/cell/GridActionsCellItem.js +4 -0
  190. package/modern/components/cell/GridBooleanCell.js +3 -2
  191. package/modern/components/cell/GridCell.js +11 -3
  192. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  193. package/modern/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  194. package/modern/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  195. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  196. package/modern/components/containers/GridRoot.js +3 -3
  197. package/modern/components/containers/GridRootStyles.js +12 -20
  198. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  199. package/modern/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  200. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  201. package/modern/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  202. package/modern/components/toolbar/GridToolbarDensitySelector.js +5 -5
  203. package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
  204. package/modern/components/virtualization/GridVirtualScroller.js +6 -1
  205. package/modern/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  206. package/modern/constants/gridClasses.js +1 -1
  207. package/modern/hooks/features/clipboard/useGridClipboard.js +4 -2
  208. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +184 -97
  209. package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
  210. package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
  211. package/modern/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
  212. package/modern/hooks/features/columnResize/index.js +3 -0
  213. package/modern/hooks/features/columnResize/useGridColumnResize.js +553 -0
  214. package/modern/hooks/features/columns/gridColumnsUtils.js +4 -20
  215. package/modern/hooks/features/density/densitySelector.js +8 -2
  216. package/modern/hooks/features/density/useGridDensity.js +21 -29
  217. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -5
  218. package/modern/hooks/features/editing/useGridCellEditing.js +22 -3
  219. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  220. package/modern/hooks/features/export/serializers/csvSerializer.js +23 -12
  221. package/modern/hooks/features/export/useGridCsvExport.js +2 -1
  222. package/modern/hooks/features/export/useGridPrintExport.js +8 -7
  223. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  224. package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
  225. package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  226. package/modern/hooks/features/index.js +1 -0
  227. package/modern/hooks/features/pagination/gridPaginationSelector.js +8 -2
  228. package/modern/hooks/features/pagination/useGridPagination.js +8 -149
  229. package/modern/hooks/features/pagination/useGridPaginationModel.js +165 -0
  230. package/modern/hooks/features/pagination/useGridRowCount.js +94 -0
  231. package/modern/hooks/features/rowSelection/useGridRowSelection.js +3 -2
  232. package/modern/hooks/features/scroll/useGridScroll.js +1 -1
  233. package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  234. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  235. package/modern/hooks/utils/useLazyRef.js +1 -11
  236. package/modern/hooks/utils/useOnMount.js +1 -7
  237. package/modern/hooks/utils/useTimeout.js +1 -36
  238. package/modern/index.js +1 -1
  239. package/modern/internals/index.js +2 -1
  240. package/modern/internals/utils/getPinnedCellOffset.js +17 -0
  241. package/modern/joy/joySlots.js +11 -50
  242. package/modern/locales/jaJP.js +3 -4
  243. package/modern/material/index.js +0 -2
  244. package/modern/models/api/index.js +0 -1
  245. package/modern/utils/cellBorderUtils.js +8 -0
  246. package/modern/utils/createSelector.js +1 -1
  247. package/modern/utils/domUtils.js +144 -0
  248. package/modern/utils/keyboardUtils.js +1 -1
  249. package/node/DataGrid/DataGrid.js +57 -17
  250. package/node/DataGrid/useDataGridComponent.js +3 -0
  251. package/node/DataGrid/useDataGridProps.js +6 -7
  252. package/node/components/GridColumnHeaders.js +6 -16
  253. package/node/components/GridHeaders.js +1 -4
  254. package/node/components/GridPagination.js +10 -4
  255. package/node/components/GridRow.js +3 -18
  256. package/node/components/GridScrollArea.js +158 -0
  257. package/node/components/cell/GridActionsCell.js +1 -1
  258. package/node/components/cell/GridActionsCellItem.js +4 -0
  259. package/node/components/cell/GridBooleanCell.js +3 -2
  260. package/node/components/cell/GridCell.js +12 -4
  261. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
  262. package/node/components/columnHeaders/GridColumnGroupHeader.js +18 -8
  263. package/node/components/columnHeaders/GridColumnHeaderItem.js +21 -6
  264. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
  265. package/node/components/containers/GridRoot.js +2 -2
  266. package/node/components/containers/GridRootStyles.js +12 -20
  267. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +1 -1
  268. package/node/components/panel/filterPanel/GridFilterInputDate.js +1 -1
  269. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +1 -1
  270. package/node/components/panel/filterPanel/GridFilterInputValue.js +1 -1
  271. package/node/components/toolbar/GridToolbarDensitySelector.js +4 -4
  272. package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
  273. package/node/components/virtualization/GridVirtualScroller.js +6 -1
  274. package/node/components/virtualization/GridVirtualScrollerFiller.js +2 -1
  275. package/node/constants/gridClasses.js +1 -1
  276. package/node/hooks/features/clipboard/useGridClipboard.js +4 -2
  277. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +190 -103
  278. package/node/hooks/features/columnResize/columnResizeSelector.js +10 -0
  279. package/node/hooks/features/columnResize/columnResizeState.js +5 -0
  280. package/node/hooks/features/columnResize/gridColumnResizeApi.js +16 -0
  281. package/node/hooks/features/columnResize/index.js +38 -0
  282. package/node/hooks/features/columnResize/useGridColumnResize.js +564 -0
  283. package/node/hooks/features/columns/gridColumnsUtils.js +4 -21
  284. package/node/hooks/features/density/densitySelector.js +9 -3
  285. package/node/hooks/features/density/useGridDensity.js +22 -30
  286. package/node/hooks/features/dimensions/useGridDimensions.js +4 -5
  287. package/node/hooks/features/editing/useGridCellEditing.js +22 -3
  288. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  289. package/node/hooks/features/export/serializers/csvSerializer.js +23 -12
  290. package/node/hooks/features/export/useGridCsvExport.js +2 -1
  291. package/node/hooks/features/export/useGridPrintExport.js +8 -7
  292. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  293. package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +4 -1
  294. package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
  295. package/node/hooks/features/index.js +11 -0
  296. package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
  297. package/node/hooks/features/pagination/useGridPagination.js +9 -153
  298. package/node/hooks/features/pagination/useGridPaginationModel.js +176 -0
  299. package/node/hooks/features/pagination/useGridRowCount.js +103 -0
  300. package/node/hooks/features/rowSelection/useGridRowSelection.js +2 -1
  301. package/node/hooks/features/scroll/useGridScroll.js +1 -1
  302. package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
  303. package/node/hooks/features/virtualization/useGridVirtualScroller.js +211 -57
  304. package/node/hooks/utils/useLazyRef.js +7 -13
  305. package/node/hooks/utils/useOnMount.js +8 -10
  306. package/node/hooks/utils/useTimeout.js +7 -37
  307. package/node/index.js +1 -1
  308. package/node/internals/index.js +27 -8
  309. package/node/internals/utils/getPinnedCellOffset.js +24 -0
  310. package/node/joy/joySlots.js +11 -50
  311. package/node/locales/jaJP.js +3 -4
  312. package/node/material/index.js +0 -2
  313. package/node/models/api/index.js +0 -11
  314. package/node/utils/cellBorderUtils.js +16 -0
  315. package/node/utils/createSelector.js +1 -1
  316. package/node/utils/domUtils.js +155 -0
  317. package/node/utils/keyboardUtils.js +1 -1
  318. package/package.json +4 -4
  319. package/utils/cellBorderUtils.d.ts +3 -0
  320. package/utils/cellBorderUtils.js +8 -0
  321. package/utils/createSelector.js +9 -9
  322. package/utils/domUtils.d.ts +14 -1
  323. package/utils/domUtils.js +144 -0
  324. package/utils/getGridLocalization.js +9 -12
  325. package/utils/keyboardUtils.js +1 -1
  326. package/components/columnHeaders/GridColumnHeadersInner.d.ts +0 -8
  327. package/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  328. package/modern/components/columnHeaders/GridColumnHeadersInner.js +0 -58
  329. package/node/components/columnHeaders/GridColumnHeadersInner.js +0 -67
@@ -1,6 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { unstable_useForkRef as useForkRef } from '@mui/utils';
4
3
  import { styled, useTheme } from '@mui/material/styles';
5
4
  import { useGridSelector } from '../../utils';
6
5
  import { useGridRootProps } from '../../utils/useGridRootProps';
@@ -13,16 +12,11 @@ import { computeOffsetLeft } from '../virtualization/useGridVirtualScroller';
13
12
  import { GridColumnGroupHeader } from '../../../components/columnHeaders/GridColumnGroupHeader';
14
13
  import { GridPinnedColumnPosition, gridColumnPositionsSelector, gridVisiblePinnedColumnDefinitionsSelector } from '../columns';
15
14
  import { GridScrollbarFillerCell as ScrollbarFiller } from '../../../components/GridScrollbarFillerCell';
15
+ import { getPinnedCellOffset } from '../../../internals/utils/getPinnedCellOffset';
16
+ import { GridColumnHeaderSeparatorSides } from '../../../components/columnHeaders/GridColumnHeaderSeparator';
16
17
  import { gridClasses } from '../../../constants/gridClasses';
17
18
  import { jsx as _jsx } from "react/jsx-runtime";
18
19
  import { jsxs as _jsxs } from "react/jsx-runtime";
19
- const SpaceFiller = styled('div')({
20
- /* GridRootStyles conflict */
21
- '&&&': {
22
- padding: 0,
23
- width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
24
- }
25
- });
26
20
  export const GridColumnHeaderRow = styled('div', {
27
21
  name: 'MuiDataGrid',
28
22
  slot: 'ColumnHeaderRow',
@@ -33,7 +27,6 @@ export const GridColumnHeaderRow = styled('div', {
33
27
  });
34
28
  export const useGridColumnHeaders = props => {
35
29
  const {
36
- innerRef: innerRefProp,
37
30
  visibleColumns,
38
31
  sortColumnLookup,
39
32
  filterColumnLookup,
@@ -53,20 +46,30 @@ export const useGridColumnHeaders = props => {
53
46
  const theme = useTheme();
54
47
  const rootProps = useGridRootProps();
55
48
  const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
56
- const innerRef = React.useRef(null);
57
- const handleInnerRef = useForkRef(innerRefProp, innerRef);
58
49
  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
59
50
  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
60
51
  const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);
61
52
  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
62
53
  const offsetLeft = computeOffsetLeft(columnPositions, renderContext, theme.direction, pinnedColumns.left.length);
63
54
  React.useEffect(() => {
64
- apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
55
+ apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;
65
56
  }, [apiRef]);
66
57
  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);
67
58
  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);
68
59
  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);
69
60
  const handleColumnReorderStop = React.useCallback(() => setDragCol(''), []);
61
+ const leftRenderContext = React.useMemo(() => {
62
+ return pinnedColumns.left.length ? {
63
+ firstColumnIndex: 0,
64
+ lastColumnIndex: pinnedColumns.left.length
65
+ } : null;
66
+ }, [pinnedColumns.left.length]);
67
+ const rightRenderContext = React.useMemo(() => {
68
+ return pinnedColumns.right.length ? {
69
+ firstColumnIndex: visibleColumns.length - pinnedColumns.right.length,
70
+ lastColumnIndex: visibleColumns.length
71
+ } : null;
72
+ }, [pinnedColumns.right.length, visibleColumns.length]);
70
73
  useGridApiEventHandler(apiRef, 'columnResizeStart', handleColumnResizeStart);
71
74
  useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);
72
75
  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
@@ -99,8 +102,9 @@ export const useGridColumnHeaders = props => {
99
102
  style: {
100
103
  width: leftOffsetWidth
101
104
  }
102
- }), children, isNotPinned && /*#__PURE__*/_jsx(SpaceFiller, {
103
- className: gridClasses.columnHeader
105
+ }), children, isNotPinned && /*#__PURE__*/_jsx("div", {
106
+ role: "presentation",
107
+ className: gridClasses.filler
104
108
  }), hasScrollbarFiller && /*#__PURE__*/_jsx(ScrollbarFiller, {
105
109
  header: true,
106
110
  borderTop: borderTop,
@@ -108,6 +112,27 @@ export const useGridColumnHeaders = props => {
108
112
  })]
109
113
  });
110
114
  };
115
+ const getCellOffsetStyle = ({
116
+ pinnedPosition,
117
+ columnIndex,
118
+ computedWidth
119
+ }) => {
120
+ let style;
121
+ if (pinnedPosition === 'left' || pinnedPosition === 'right') {
122
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, computedWidth, columnIndex, columnPositions, dimensions);
123
+ if (pinnedPosition === 'left') {
124
+ style = {
125
+ left: pinnedOffset
126
+ };
127
+ }
128
+ if (pinnedPosition === 'right') {
129
+ style = {
130
+ right: pinnedOffset
131
+ };
132
+ }
133
+ }
134
+ return style;
135
+ };
111
136
  const getColumnHeaders = (params, other = {}) => {
112
137
  const {
113
138
  renderedColumns,
@@ -121,6 +146,12 @@ export const useGridColumnHeaders = props => {
121
146
  const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === colDef.field || isFirstColumn && !hasOtherElementInTabSequence ? 0 : -1;
122
147
  const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;
123
148
  const open = columnMenuState.open && columnMenuState.field === colDef.field;
149
+ const pinnedPosition = params?.position;
150
+ const style = getCellOffsetStyle({
151
+ pinnedPosition,
152
+ columnIndex,
153
+ computedWidth: colDef.computedWidth
154
+ });
124
155
  columns.push( /*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {
125
156
  columnMenuOpen: open,
126
157
  filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,
@@ -130,118 +161,174 @@ export const useGridColumnHeaders = props => {
130
161
  colIndex: columnIndex,
131
162
  isResizing: resizeCol === colDef.field,
132
163
  hasFocus: hasFocus,
133
- tabIndex: tabIndex
164
+ tabIndex: tabIndex,
165
+ pinnedPosition: pinnedPosition,
166
+ style: style,
167
+ indexInSection: i,
168
+ sectionLength: renderedColumns.length
134
169
  }, other), colDef.field));
135
170
  }
136
- return /*#__PURE__*/_jsx(GridColumnHeaderRow, {
171
+ return getFillers(params, columns, 0);
172
+ };
173
+ const getColumnHeadersRow = () => {
174
+ return /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
137
175
  role: "row",
138
176
  "aria-rowindex": headerGroupingMaxDepth + 1,
139
177
  ownerState: rootProps,
140
- children: getFillers(params, columns, 0)
178
+ children: [leftRenderContext && getColumnHeaders({
179
+ position: GridPinnedColumnPosition.LEFT,
180
+ renderContext: leftRenderContext,
181
+ minFirstColumn: leftRenderContext.firstColumnIndex,
182
+ maxLastColumn: leftRenderContext.lastColumnIndex
183
+ }, {
184
+ disableReorder: true
185
+ }), getColumnHeaders({
186
+ renderContext,
187
+ minFirstColumn: pinnedColumns.left.length,
188
+ maxLastColumn: visibleColumns.length - pinnedColumns.right.length
189
+ }), rightRenderContext && getColumnHeaders({
190
+ position: GridPinnedColumnPosition.RIGHT,
191
+ renderContext: rightRenderContext,
192
+ minFirstColumn: rightRenderContext.firstColumnIndex,
193
+ maxLastColumn: rightRenderContext.lastColumnIndex
194
+ }, {
195
+ disableReorder: true,
196
+ separatorSide: GridColumnHeaderSeparatorSides.Left
197
+ })]
141
198
  });
142
199
  };
143
- const getColumnGroupHeaders = params => {
144
- if (headerGroupingMaxDepth === 0) {
145
- return null;
146
- }
200
+ const getColumnGroupHeaders = ({
201
+ depth,
202
+ params
203
+ }) => {
147
204
  const columnsToRender = getColumnsToRender(params);
148
205
  if (columnsToRender.renderedColumns.length === 0) {
149
206
  return null;
150
207
  }
151
208
  const {
209
+ renderedColumns,
152
210
  firstColumnToRender,
153
211
  lastColumnToRender
154
212
  } = columnsToRender;
155
- const columns = [];
156
- const headerToRender = [];
157
- for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
158
- const rowStructure = columnGroupsHeaderStructure[depth];
159
- const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
160
- const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
161
- const firstGroupIndex = rowStructure.findIndex(({
162
- groupId,
163
- columnFields
164
- }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
165
- const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
166
- const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
167
- const lastGroupIndex = rowStructure.findIndex(({
168
- groupId,
169
- columnFields
170
- }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
171
- const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
172
- return _extends({}, groupStructure, {
173
- columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
174
- });
175
- }).filter(groupStructure => groupStructure.columnFields.length > 0);
176
- const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
177
- const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
178
- const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
179
- const column = apiRef.current.getColumn(field);
180
- return acc + (column.computedWidth ?? 0);
181
- }, 0);
182
- let columnIndex = firstColumnToRender;
183
- const elements = visibleColumnGroupHeader.map(({
184
- groupId,
185
- columnFields
186
- }) => {
187
- const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
188
- const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
189
- const headerInfo = {
190
- groupId,
191
- width: columnFields.reduce((acc, field) => acc + apiRef.current.getColumn(field).computedWidth, 0),
192
- fields: columnFields,
193
- colIndex: columnIndex,
194
- hasFocus,
195
- tabIndex
196
- };
197
- columnIndex += columnFields.length;
198
- return headerInfo;
199
- });
200
- headerToRender.push({
201
- leftOverflow,
202
- elements
213
+ const rowStructure = columnGroupsHeaderStructure[depth];
214
+ const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;
215
+ const firstGroupToRender = apiRef.current.getColumnGroupPath(firstColumnFieldToRender)[depth] ?? null;
216
+ const firstGroupIndex = rowStructure.findIndex(({
217
+ groupId,
218
+ columnFields
219
+ }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));
220
+ const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;
221
+ const lastGroupToRender = apiRef.current.getColumnGroupPath(lastColumnFieldToRender)[depth] ?? null;
222
+ const lastGroupIndex = rowStructure.findIndex(({
223
+ groupId,
224
+ columnFields
225
+ }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));
226
+ const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {
227
+ return _extends({}, groupStructure, {
228
+ columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)
203
229
  });
204
- }
205
- headerToRender.forEach((depthInfo, depthIndex) => {
206
- const children = depthInfo.elements.map(({
230
+ }).filter(groupStructure => groupStructure.columnFields.length > 0);
231
+ const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);
232
+ const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);
233
+ const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {
234
+ const column = apiRef.current.getColumn(field);
235
+ return acc + (column.computedWidth ?? 0);
236
+ }, 0);
237
+ let columnIndex = firstColumnToRender;
238
+ const children = visibleColumnGroupHeader.map(({
239
+ groupId,
240
+ columnFields
241
+ }, index) => {
242
+ const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);
243
+ const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
244
+ const headerInfo = {
207
245
  groupId,
208
- width,
209
- fields,
210
- colIndex,
246
+ width: columnFields.reduce((acc, field) => acc + apiRef.current.getColumn(field).computedWidth, 0),
247
+ fields: columnFields,
248
+ colIndex: columnIndex,
211
249
  hasFocus,
212
250
  tabIndex
213
- }, groupIndex) => {
214
- return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
215
- groupId: groupId,
216
- width: width,
217
- fields: fields,
218
- colIndex: colIndex,
219
- depth: depthIndex,
220
- isLastColumn: colIndex === visibleColumns.length - fields.length,
221
- maxDepth: headerToRender.length,
222
- height: dimensions.headerHeight,
223
- hasFocus: hasFocus,
224
- tabIndex: tabIndex
225
- }, groupIndex);
251
+ };
252
+ const pinnedPosition = params.position;
253
+ const style = getCellOffsetStyle({
254
+ pinnedPosition,
255
+ columnIndex,
256
+ computedWidth: headerInfo.width
226
257
  });
227
- columns.push( /*#__PURE__*/_jsx(GridColumnHeaderRow, {
258
+ columnIndex += columnFields.length;
259
+ let indexInSection = index;
260
+ if (pinnedPosition === 'left') {
261
+ // Group headers can expand to multiple columns, we need to adjust the index
262
+ indexInSection = columnIndex - 1;
263
+ }
264
+ return /*#__PURE__*/_jsx(GridColumnGroupHeader, {
265
+ groupId: groupId,
266
+ width: headerInfo.width,
267
+ fields: headerInfo.fields,
268
+ colIndex: headerInfo.colIndex,
269
+ depth: depth,
270
+ isLastColumn: headerInfo.colIndex === visibleColumns.length - headerInfo.fields.length,
271
+ maxDepth: headerGroupingMaxDepth,
272
+ height: dimensions.headerHeight,
273
+ hasFocus: hasFocus,
274
+ tabIndex: tabIndex,
275
+ pinnedPosition: pinnedPosition,
276
+ style: style,
277
+ indexInSection: indexInSection,
278
+ sectionLength: renderedColumns.length
279
+ }, index);
280
+ });
281
+ return getFillers(params, children, leftOverflow);
282
+ };
283
+ const getColumnGroupHeadersRows = () => {
284
+ if (headerGroupingMaxDepth === 0) {
285
+ return null;
286
+ }
287
+ const headerRows = [];
288
+ for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
289
+ headerRows.push( /*#__PURE__*/_jsxs(GridColumnHeaderRow, {
228
290
  role: "row",
229
- "aria-rowindex": depthIndex + 1,
291
+ "aria-rowindex": depth + 1,
230
292
  ownerState: rootProps,
231
- children: getFillers(params, children, depthInfo.leftOverflow)
232
- }, depthIndex));
233
- });
234
- return columns;
293
+ children: [leftRenderContext && getColumnGroupHeaders({
294
+ depth,
295
+ params: {
296
+ position: GridPinnedColumnPosition.LEFT,
297
+ renderContext: leftRenderContext,
298
+ minFirstColumn: leftRenderContext.firstColumnIndex,
299
+ maxLastColumn: leftRenderContext.lastColumnIndex
300
+ }
301
+ }), getColumnGroupHeaders({
302
+ depth,
303
+ params: {
304
+ renderContext
305
+ }
306
+ }), rightRenderContext && getColumnGroupHeaders({
307
+ depth,
308
+ params: {
309
+ position: GridPinnedColumnPosition.RIGHT,
310
+ renderContext: rightRenderContext,
311
+ minFirstColumn: rightRenderContext.firstColumnIndex,
312
+ maxLastColumn: rightRenderContext.lastColumnIndex
313
+ }
314
+ })]
315
+ }, depth));
316
+ }
317
+ return headerRows;
235
318
  };
236
319
  return {
237
320
  renderContext,
321
+ leftRenderContext,
322
+ rightRenderContext,
323
+ pinnedColumns,
324
+ visibleColumns,
325
+ getCellOffsetStyle,
238
326
  getFillers,
239
- getColumnHeaders,
327
+ getColumnHeadersRow,
240
328
  getColumnsToRender,
241
- getColumnGroupHeaders,
329
+ getColumnGroupHeadersRows,
242
330
  isDragging: !!dragCol,
243
331
  getInnerProps: () => ({
244
- ref: handleInnerRef,
245
332
  role: 'rowgroup'
246
333
  })
247
334
  };
@@ -0,0 +1,3 @@
1
+ import { createSelector } from '../../../utils/createSelector';
2
+ export const gridColumnResizeSelector = state => state.columnResize;
3
+ export const gridResizingColumnFieldSelector = createSelector(gridColumnResizeSelector, columnResize => columnResize.resizingColumnField);
@@ -0,0 +1,10 @@
1
+ export const DEFAULT_GRID_AUTOSIZE_OPTIONS = {
2
+ includeHeaders: true,
3
+ includeOutliers: false,
4
+ outliersFactor: 1.5,
5
+ expand: false
6
+ };
7
+
8
+ /**
9
+ * The Resize API interface that is available in the grid `apiRef`.
10
+ */
@@ -0,0 +1,3 @@
1
+ export * from './columnResizeSelector';
2
+ export * from './columnResizeState';
3
+ export * from './gridColumnResizeApi';