@mui/x-data-grid 5.15.3 → 5.17.1

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 (257) hide show
  1. package/CHANGELOG.md +150 -1
  2. package/DataGrid/DataGrid.js +2 -0
  3. package/DataGrid/useDataGridComponent.js +5 -0
  4. package/components/DataGridColumnHeaders.js +4 -3
  5. package/components/GridRow.d.ts +2 -1
  6. package/components/GridRow.js +136 -85
  7. package/components/base/GridBody.js +8 -5
  8. package/components/base/GridOverlays.js +3 -3
  9. package/components/cell/GridBooleanCell.js +2 -1
  10. package/components/cell/GridCell.js +9 -1
  11. package/components/cell/GridEditBooleanCell.js +2 -1
  12. package/components/cell/GridEditDateCell.js +2 -1
  13. package/components/cell/GridEditInputCell.js +2 -1
  14. package/components/cell/GridEditSingleSelectCell.js +2 -1
  15. package/components/cell/GridSkeletonCell.d.ts +12 -0
  16. package/components/cell/GridSkeletonCell.js +60 -0
  17. package/components/cell/index.d.ts +1 -0
  18. package/components/cell/index.js +2 -1
  19. package/components/columnHeaders/GridColumnGroupHeader.d.ts +14 -0
  20. package/components/columnHeaders/GridColumnGroupHeader.js +122 -0
  21. package/components/columnHeaders/GridColumnHeaderItem.js +55 -71
  22. package/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  23. package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +32 -0
  24. package/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  25. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  26. package/components/containers/GridRoot.js +3 -3
  27. package/components/containers/GridRootStyles.js +16 -2
  28. package/components/panel/GridColumnsPanel.d.ts +6 -1
  29. package/components/panel/GridColumnsPanel.js +38 -6
  30. package/components/panel/GridPanel.d.ts +1 -1
  31. package/constants/defaultGridSlotsComponents.js +2 -1
  32. package/constants/gridClasses.d.ts +24 -0
  33. package/constants/gridClasses.js +1 -1
  34. package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
  35. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.d.ts +7 -0
  36. package/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  37. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +7 -0
  38. package/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  39. package/hooks/features/columnGrouping/index.d.ts +2 -0
  40. package/hooks/features/columnGrouping/index.js +2 -0
  41. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +24 -0
  42. package/hooks/features/columnGrouping/useGridColumnGrouping.js +153 -0
  43. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.d.ts +4 -0
  44. package/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  45. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +7 -6
  46. package/hooks/features/columnHeaders/useGridColumnHeaders.js +204 -9
  47. package/hooks/features/density/densitySelector.d.ts +2 -0
  48. package/hooks/features/density/densitySelector.js +3 -1
  49. package/hooks/features/density/densityState.d.ts +1 -0
  50. package/hooks/features/density/useGridDensity.d.ts +1 -1
  51. package/hooks/features/density/useGridDensity.js +45 -9
  52. package/hooks/features/dimensions/useGridDimensions.js +4 -4
  53. package/hooks/features/export/useGridPrintExport.js +3 -3
  54. package/hooks/features/filter/gridFilterSelector.d.ts +3 -3
  55. package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
  56. package/hooks/features/filter/gridFilterUtils.js +55 -54
  57. package/hooks/features/filter/useGridFilter.js +1 -1
  58. package/hooks/features/focus/useGridFocus.js +13 -3
  59. package/hooks/features/index.d.ts +1 -0
  60. package/hooks/features/index.js +1 -0
  61. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  62. package/hooks/features/pagination/gridPaginationSelector.d.ts +1 -1
  63. package/hooks/features/rows/gridRowsSelector.d.ts +1 -1
  64. package/hooks/features/rows/useGridParamsApi.js +1 -1
  65. package/hooks/features/rows/useGridRows.js +65 -8
  66. package/hooks/features/rows/useGridRowsMeta.js +36 -16
  67. package/hooks/features/selection/gridSelectionSelector.d.ts +1 -1
  68. package/hooks/features/sorting/gridSortingSelector.d.ts +1 -1
  69. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
  70. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  71. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  72. package/index.js +1 -1
  73. package/internals/index.d.ts +3 -1
  74. package/internals/index.js +3 -1
  75. package/legacy/DataGrid/DataGrid.js +2 -0
  76. package/legacy/DataGrid/useDataGridComponent.js +5 -0
  77. package/legacy/components/DataGridColumnHeaders.js +4 -3
  78. package/legacy/components/GridRow.js +138 -85
  79. package/legacy/components/base/GridBody.js +8 -5
  80. package/legacy/components/base/GridOverlays.js +3 -3
  81. package/legacy/components/cell/GridBooleanCell.js +2 -1
  82. package/legacy/components/cell/GridCell.js +11 -1
  83. package/legacy/components/cell/GridEditBooleanCell.js +2 -1
  84. package/legacy/components/cell/GridEditDateCell.js +2 -1
  85. package/legacy/components/cell/GridEditInputCell.js +2 -1
  86. package/legacy/components/cell/GridEditSingleSelectCell.js +2 -1
  87. package/legacy/components/cell/GridSkeletonCell.js +57 -0
  88. package/legacy/components/cell/index.js +2 -1
  89. package/legacy/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  90. package/legacy/components/columnHeaders/GridColumnHeaderItem.js +78 -88
  91. package/legacy/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  92. package/legacy/components/columnHeaders/GridGenericColumnHeaderItem.js +112 -0
  93. package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  94. package/legacy/components/containers/GridRoot.js +3 -3
  95. package/legacy/components/containers/GridRootStyles.js +14 -5
  96. package/legacy/components/panel/GridColumnsPanel.js +41 -6
  97. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  98. package/legacy/constants/gridClasses.js +1 -1
  99. package/legacy/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  100. package/legacy/hooks/features/columnGrouping/gridColumnGroupsSelector.js +12 -0
  101. package/legacy/hooks/features/columnGrouping/index.js +2 -0
  102. package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +151 -0
  103. package/legacy/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +35 -0
  104. package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +213 -12
  105. package/legacy/hooks/features/density/densitySelector.js +6 -0
  106. package/legacy/hooks/features/density/useGridDensity.js +44 -6
  107. package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -4
  108. package/legacy/hooks/features/export/useGridPrintExport.js +3 -3
  109. package/legacy/hooks/features/filter/gridFilterUtils.js +61 -56
  110. package/legacy/hooks/features/filter/useGridFilter.js +1 -1
  111. package/legacy/hooks/features/focus/useGridFocus.js +13 -3
  112. package/legacy/hooks/features/index.js +1 -0
  113. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  114. package/legacy/hooks/features/rows/useGridParamsApi.js +1 -1
  115. package/legacy/hooks/features/rows/useGridRows.js +73 -8
  116. package/legacy/hooks/features/rows/useGridRowsMeta.js +45 -18
  117. package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +31 -13
  118. package/legacy/index.js +1 -1
  119. package/legacy/internals/index.js +3 -1
  120. package/legacy/models/api/gridColumnGroupingApi.js +1 -0
  121. package/legacy/models/events/gridEvents.js +2 -0
  122. package/legacy/models/gridColumnGrouping.js +6 -0
  123. package/legacy/models/index.js +2 -1
  124. package/legacy/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  125. package/legacy/models/params/index.js +2 -1
  126. package/legacy/utils/utils.js +18 -0
  127. package/models/api/gridApiCommon.d.ts +2 -1
  128. package/models/api/gridColumnGroupingApi.d.ts +19 -0
  129. package/models/api/gridColumnGroupingApi.js +1 -0
  130. package/models/api/gridDensityApi.d.ts +2 -1
  131. package/models/api/gridParamsApi.d.ts +1 -1
  132. package/models/api/gridRowApi.d.ts +6 -0
  133. package/models/api/gridRowsMetaApi.d.ts +6 -1
  134. package/models/colDef/gridColDef.d.ts +15 -1
  135. package/models/events/gridEventLookup.d.ts +7 -1
  136. package/models/events/gridEvents.d.ts +3 -1
  137. package/models/events/gridEvents.js +2 -0
  138. package/models/gridColumnGrouping.d.ts +67 -0
  139. package/models/gridColumnGrouping.js +6 -0
  140. package/models/gridRows.d.ts +5 -5
  141. package/models/gridSlotsComponent.d.ts +5 -0
  142. package/models/gridStateCommunity.d.ts +2 -1
  143. package/models/index.d.ts +1 -0
  144. package/models/index.js +2 -1
  145. package/models/params/gridCellParams.d.ts +7 -2
  146. package/models/params/gridRenderedRowsIntervalChangeParams.d.ts +10 -0
  147. package/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  148. package/models/params/index.d.ts +1 -0
  149. package/models/params/index.js +2 -1
  150. package/models/props/DataGridProps.d.ts +6 -0
  151. package/modern/DataGrid/DataGrid.js +2 -0
  152. package/modern/DataGrid/useDataGridComponent.js +5 -0
  153. package/modern/components/DataGridColumnHeaders.js +4 -3
  154. package/modern/components/GridRow.js +133 -84
  155. package/modern/components/base/GridBody.js +8 -5
  156. package/modern/components/base/GridOverlays.js +3 -3
  157. package/modern/components/cell/GridBooleanCell.js +2 -1
  158. package/modern/components/cell/GridCell.js +9 -1
  159. package/modern/components/cell/GridEditBooleanCell.js +2 -1
  160. package/modern/components/cell/GridEditDateCell.js +2 -1
  161. package/modern/components/cell/GridEditInputCell.js +2 -1
  162. package/modern/components/cell/GridEditSingleSelectCell.js +2 -1
  163. package/modern/components/cell/GridSkeletonCell.js +60 -0
  164. package/modern/components/cell/index.js +2 -1
  165. package/modern/components/columnHeaders/GridColumnGroupHeader.js +120 -0
  166. package/modern/components/columnHeaders/GridColumnHeaderItem.js +53 -69
  167. package/modern/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  168. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +104 -0
  169. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  170. package/modern/components/containers/GridRoot.js +3 -3
  171. package/modern/components/containers/GridRootStyles.js +16 -2
  172. package/modern/components/panel/GridColumnsPanel.js +38 -6
  173. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  174. package/modern/constants/gridClasses.js +1 -1
  175. package/modern/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +1 -0
  176. package/modern/hooks/features/columnGrouping/gridColumnGroupsSelector.js +8 -0
  177. package/modern/hooks/features/columnGrouping/index.js +2 -0
  178. package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +145 -0
  179. package/modern/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +29 -0
  180. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -9
  181. package/modern/hooks/features/density/densitySelector.js +3 -1
  182. package/modern/hooks/features/density/useGridDensity.js +37 -9
  183. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -4
  184. package/modern/hooks/features/export/useGridPrintExport.js +3 -3
  185. package/modern/hooks/features/filter/gridFilterUtils.js +54 -53
  186. package/modern/hooks/features/filter/useGridFilter.js +1 -1
  187. package/modern/hooks/features/focus/useGridFocus.js +13 -3
  188. package/modern/hooks/features/index.js +1 -0
  189. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  190. package/modern/hooks/features/rows/useGridParamsApi.js +1 -1
  191. package/modern/hooks/features/rows/useGridRows.js +65 -8
  192. package/modern/hooks/features/rows/useGridRowsMeta.js +36 -16
  193. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  194. package/modern/index.js +1 -1
  195. package/modern/internals/index.js +3 -1
  196. package/modern/models/api/gridColumnGroupingApi.js +1 -0
  197. package/modern/models/events/gridEvents.js +2 -0
  198. package/modern/models/gridColumnGrouping.js +6 -0
  199. package/modern/models/index.js +2 -1
  200. package/modern/models/params/gridRenderedRowsIntervalChangeParams.js +1 -0
  201. package/modern/models/params/index.js +2 -1
  202. package/modern/utils/utils.js +16 -0
  203. package/node/DataGrid/DataGrid.js +2 -0
  204. package/node/DataGrid/useDataGridComponent.js +7 -0
  205. package/node/components/DataGridColumnHeaders.js +4 -3
  206. package/node/components/GridRow.js +136 -77
  207. package/node/components/base/GridBody.js +7 -4
  208. package/node/components/base/GridOverlays.js +2 -2
  209. package/node/components/cell/GridBooleanCell.js +2 -1
  210. package/node/components/cell/GridCell.js +9 -1
  211. package/node/components/cell/GridEditBooleanCell.js +2 -1
  212. package/node/components/cell/GridEditDateCell.js +2 -1
  213. package/node/components/cell/GridEditInputCell.js +2 -1
  214. package/node/components/cell/GridEditSingleSelectCell.js +2 -1
  215. package/node/components/cell/GridSkeletonCell.js +81 -0
  216. package/node/components/cell/index.js +13 -0
  217. package/node/components/columnHeaders/GridColumnGroupHeader.js +141 -0
  218. package/node/components/columnHeaders/GridColumnHeaderItem.js +53 -72
  219. package/node/components/columnHeaders/GridColumnHeadersInner.js +2 -1
  220. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +126 -0
  221. package/node/components/columnSelection/GridCellCheckboxRenderer.js +2 -1
  222. package/node/components/containers/GridRoot.js +4 -4
  223. package/node/components/containers/GridRootStyles.js +16 -2
  224. package/node/components/panel/GridColumnsPanel.js +36 -5
  225. package/node/constants/defaultGridSlotsComponents.js +1 -0
  226. package/node/constants/gridClasses.js +1 -1
  227. package/node/hooks/features/columnGrouping/gridColumnGroupsInterfaces.js +5 -0
  228. package/node/hooks/features/columnGrouping/gridColumnGroupsSelector.js +18 -0
  229. package/node/hooks/features/columnGrouping/index.js +18 -0
  230. package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +182 -0
  231. package/node/hooks/features/columnGrouping/useGridColumnGroupingPreProcessors.js +55 -0
  232. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +207 -8
  233. package/node/hooks/features/density/densitySelector.js +6 -2
  234. package/node/hooks/features/density/useGridDensity.js +48 -9
  235. package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
  236. package/node/hooks/features/export/useGridPrintExport.js +2 -2
  237. package/node/hooks/features/filter/gridFilterUtils.js +55 -55
  238. package/node/hooks/features/filter/useGridFilter.js +1 -1
  239. package/node/hooks/features/focus/useGridFocus.js +13 -3
  240. package/node/hooks/features/index.js +13 -0
  241. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -0
  242. package/node/hooks/features/rows/useGridParamsApi.js +1 -1
  243. package/node/hooks/features/rows/useGridRows.js +60 -7
  244. package/node/hooks/features/rows/useGridRowsMeta.js +35 -15
  245. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -5
  246. package/node/index.js +1 -1
  247. package/node/internals/index.js +28 -0
  248. package/node/models/api/gridColumnGroupingApi.js +5 -0
  249. package/node/models/events/gridEvents.js +2 -0
  250. package/node/models/gridColumnGrouping.js +13 -0
  251. package/node/models/index.js +13 -0
  252. package/node/models/params/gridRenderedRowsIntervalChangeParams.js +5 -0
  253. package/node/models/params/index.js +13 -0
  254. package/node/utils/utils.js +18 -0
  255. package/package.json +3 -3
  256. package/utils/utils.d.ts +1 -0
  257. package/utils/utils.js +16 -0
@@ -12,5 +12,5 @@ function getDataGridUtilityClass(slot) {
12
12
  return (0, _material.generateUtilityClass)('MuiDataGrid', slot);
13
13
  }
14
14
 
15
- const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
15
+ const gridClasses = (0, _material.generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
16
16
  exports.gridClasses = gridClasses;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.gridColumnGroupsLookupSelector = exports.gridColumnGroupingSelector = void 0;
7
+
8
+ var _createSelector = require("../../../utils/createSelector");
9
+
10
+ /**
11
+ * @category ColumnGrouping
12
+ * @ignore - do not document.
13
+ */
14
+ const gridColumnGroupingSelector = state => state.columnGrouping;
15
+
16
+ exports.gridColumnGroupingSelector = gridColumnGroupingSelector;
17
+ const gridColumnGroupsLookupSelector = (0, _createSelector.createSelector)(gridColumnGroupingSelector, columnGrouping => columnGrouping.lookup);
18
+ exports.gridColumnGroupsLookupSelector = gridColumnGroupsLookupSelector;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _gridColumnGroupsSelector = require("./gridColumnGroupsSelector");
8
+
9
+ Object.keys(_gridColumnGroupsSelector).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _gridColumnGroupsSelector[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _gridColumnGroupsSelector[key];
16
+ }
17
+ });
18
+ });
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.columnGroupsStateInitializer = void 0;
9
+ exports.hasGroupPath = hasGroupPath;
10
+ exports.useGridColumnGrouping = exports.unwrapGroupingColumnModel = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
15
+
16
+ var React = _interopRequireWildcard(require("react"));
17
+
18
+ var _gridColumnGrouping = require("../../../models/gridColumnGrouping");
19
+
20
+ var _gridColumnGroupsSelector = require("./gridColumnGroupsSelector");
21
+
22
+ var _gridColumnsSelector = require("../columns/gridColumnsSelector");
23
+
24
+ var _useGridApiMethod = require("../../utils/useGridApiMethod");
25
+
26
+ const _excluded = ["groupId", "children"];
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ function hasGroupPath(lookupElement) {
33
+ return lookupElement.groupPath !== undefined;
34
+ }
35
+
36
+ // This is the recurrence function that help writing `unwrapGroupingColumnModel()`
37
+ const recurrentUnwrapGroupingColumnModel = (columnGroupNode, parents, unwrappedGroupingModelToComplet) => {
38
+ if ((0, _gridColumnGrouping.isLeaf)(columnGroupNode)) {
39
+ if (unwrappedGroupingModelToComplet[columnGroupNode.field] !== undefined) {
40
+ throw new Error([`MUI: columnGroupingModel contains duplicated field`, `column field ${columnGroupNode.field} occurrs two times in the grouping model:`, `- ${unwrappedGroupingModelToComplet[columnGroupNode.field].join(' > ')}`, `- ${parents.join(' > ')}`].join('\n'));
41
+ }
42
+
43
+ unwrappedGroupingModelToComplet[columnGroupNode.field] = parents;
44
+ return;
45
+ }
46
+
47
+ const {
48
+ groupId,
49
+ children
50
+ } = columnGroupNode;
51
+ children.forEach(child => {
52
+ recurrentUnwrapGroupingColumnModel(child, [...parents, groupId], unwrappedGroupingModelToComplet);
53
+ });
54
+ };
55
+ /**
56
+ * This is a function that provide for each column the array of its parents.
57
+ * Parents are ordered from the root to the leaf.
58
+ * @param columnGroupingModel The model such as provided in DataGrid props
59
+ * @returns An object `{[field]: groupIds}` where `groupIds` is the parents of the column `field`
60
+ */
61
+
62
+
63
+ const unwrapGroupingColumnModel = columnGroupingModel => {
64
+ if (!columnGroupingModel) {
65
+ return {};
66
+ }
67
+
68
+ const unwrappedSubTree = {};
69
+ columnGroupingModel.forEach(columnGroupNode => {
70
+ recurrentUnwrapGroupingColumnModel(columnGroupNode, [], unwrappedSubTree);
71
+ });
72
+ return unwrappedSubTree;
73
+ };
74
+
75
+ exports.unwrapGroupingColumnModel = unwrapGroupingColumnModel;
76
+
77
+ const createGroupLookup = columnGroupingModel => {
78
+ let groupLookup = {};
79
+ columnGroupingModel.forEach(node => {
80
+ if ((0, _gridColumnGrouping.isLeaf)(node)) {
81
+ return;
82
+ }
83
+
84
+ const {
85
+ groupId,
86
+ children
87
+ } = node,
88
+ other = (0, _objectWithoutPropertiesLoose2.default)(node, _excluded);
89
+
90
+ if (!groupId) {
91
+ throw new Error('MUI: An element of the columnGroupingModel does not have either `field` or `groupId`.');
92
+ }
93
+
94
+ if (!children) {
95
+ console.warn(`MUI: group groupId=${groupId} has no children.`);
96
+ }
97
+
98
+ const groupParam = (0, _extends2.default)({}, other, {
99
+ groupId
100
+ });
101
+ const subTreeLookup = createGroupLookup(children);
102
+
103
+ if (subTreeLookup[groupId] !== undefined || groupLookup[groupId] !== undefined) {
104
+ throw new Error(`MUI: The groupId ${groupId} is used multiple times in the columnGroupingModel.`);
105
+ }
106
+
107
+ groupLookup = (0, _extends2.default)({}, groupLookup, subTreeLookup, {
108
+ [groupId]: groupParam
109
+ });
110
+ });
111
+ return (0, _extends2.default)({}, groupLookup);
112
+ };
113
+
114
+ const columnGroupsStateInitializer = (state, props) => {
115
+ var _props$columnGrouping;
116
+
117
+ const groupLookup = createGroupLookup((_props$columnGrouping = props.columnGroupingModel) != null ? _props$columnGrouping : []);
118
+ return (0, _extends2.default)({}, state, {
119
+ columnGrouping: {
120
+ lookup: groupLookup,
121
+ groupCollapsedModel: {}
122
+ }
123
+ });
124
+ };
125
+ /**
126
+ * @requires useGridColumns (method, event)
127
+ * @requires useGridParamsApi (method)
128
+ */
129
+
130
+
131
+ exports.columnGroupsStateInitializer = columnGroupsStateInitializer;
132
+
133
+ const useGridColumnGrouping = (apiRef, props) => {
134
+ var _props$experimentalFe2;
135
+
136
+ /**
137
+ * API METHODS
138
+ */
139
+ const getColumnGroupPath = React.useCallback(field => {
140
+ var _columnLookup$field$g, _columnLookup$field;
141
+
142
+ const columnLookup = (0, _gridColumnsSelector.gridColumnLookupSelector)(apiRef);
143
+ return (_columnLookup$field$g = (_columnLookup$field = columnLookup[field]) == null ? void 0 : _columnLookup$field.groupPath) != null ? _columnLookup$field$g : [];
144
+ }, [apiRef]);
145
+ const getAllGroupDetails = React.useCallback(() => {
146
+ const columnGroupLookup = (0, _gridColumnGroupsSelector.gridColumnGroupsLookupSelector)(apiRef);
147
+ return columnGroupLookup;
148
+ }, [apiRef]);
149
+ const columnGroupingApi = {
150
+ unstable_getColumnGroupPath: getColumnGroupPath,
151
+ unstable_getAllGroupDetails: getAllGroupDetails
152
+ };
153
+ (0, _useGridApiMethod.useGridApiMethod)(apiRef, columnGroupingApi, 'GridColumnGroupingApi');
154
+ /**
155
+ * EFFECTS
156
+ */
157
+ // The effect does not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`
158
+ // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
159
+
160
+ const isFirstRender = React.useRef(true);
161
+ React.useEffect(() => {
162
+ var _props$experimentalFe, _props$columnGrouping2;
163
+
164
+ if (isFirstRender.current) {
165
+ isFirstRender.current = false;
166
+ return;
167
+ }
168
+
169
+ if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
170
+ return;
171
+ }
172
+
173
+ const groupLookup = createGroupLookup((_props$columnGrouping2 = props.columnGroupingModel) != null ? _props$columnGrouping2 : []);
174
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
175
+ columnGrouping: (0, _extends2.default)({}, state.columnGrouping, {
176
+ lookup: groupLookup
177
+ })
178
+ }));
179
+ }, [apiRef, props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
180
+ };
181
+
182
+ exports.useGridColumnGrouping = useGridColumnGrouping;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useGridColumnGroupingPreProcessors = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var React = _interopRequireWildcard(require("react"));
13
+
14
+ var _pipeProcessing = require("../../core/pipeProcessing");
15
+
16
+ var _utils = require("../../../utils/utils");
17
+
18
+ var _useGridColumnGrouping = require("./useGridColumnGrouping");
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ const useGridColumnGroupingPreProcessors = (apiRef, props) => {
25
+ var _props$experimentalFe2;
26
+
27
+ const addHeaderGroups = React.useCallback(columnsState => {
28
+ var _props$experimentalFe;
29
+
30
+ if (!((_props$experimentalFe = props.experimentalFeatures) != null && _props$experimentalFe.columnGrouping)) {
31
+ return columnsState;
32
+ }
33
+
34
+ const unwrappedGroupingModel = (0, _useGridColumnGrouping.unwrapGroupingColumnModel)(props.columnGroupingModel);
35
+ columnsState.all.forEach(field => {
36
+ var _unwrappedGroupingMod, _unwrappedGroupingMod2;
37
+
38
+ const newGroupPath = (_unwrappedGroupingMod = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod : [];
39
+ const lookupElement = columnsState.lookup[field];
40
+
41
+ if ((0, _useGridColumnGrouping.hasGroupPath)(lookupElement) && (0, _utils.isDeepEqual)(newGroupPath, lookupElement == null ? void 0 : lookupElement.groupPath)) {
42
+ // Avoid modifying the pointer to allow shadow comparison in https://github.com/mui/mui-x/blob/f90afbf10a1264ee8b453d7549dd7cdd6110a4ed/packages/grid/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts#L446:L453
43
+ return;
44
+ }
45
+
46
+ columnsState.lookup[field] = (0, _extends2.default)({}, columnsState.lookup[field], {
47
+ groupPath: (_unwrappedGroupingMod2 = unwrappedGroupingModel[field]) != null ? _unwrappedGroupingMod2 : []
48
+ });
49
+ });
50
+ return columnsState;
51
+ }, [props.columnGroupingModel, (_props$experimentalFe2 = props.experimentalFeatures) == null ? void 0 : _props$experimentalFe2.columnGrouping]);
52
+ (0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'hydrateColumns', addHeaderGroups);
53
+ };
54
+
55
+ exports.useGridColumnGroupingPreProcessors = useGridColumnGroupingPreProcessors;
@@ -15,6 +15,8 @@ var ReactDOM = _interopRequireWildcard(require("react-dom"));
15
15
 
16
16
  var _utils = require("@mui/material/utils");
17
17
 
18
+ var _styles = require("@mui/material/styles");
19
+
18
20
  var _reselect = require("reselect");
19
21
 
20
22
  var _useGridApiContext = require("../../utils/useGridApiContext");
@@ -45,12 +47,26 @@ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
45
47
 
46
48
  var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
47
49
 
50
+ var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
51
+
52
+ var _utils2 = require("../../../utils/utils");
53
+
48
54
  var _jsxRuntime = require("react/jsx-runtime");
49
55
 
50
56
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
51
57
 
52
58
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
59
 
60
+ // TODO: add the possibility to switch this value if needed for customization
61
+ const MERGE_EMPTY_CELLS = true;
62
+ const GridColumnHeaderRow = (0, _styles.styled)('div', {
63
+ name: 'MuiDataGrid',
64
+ slot: 'ColumnHeaderRow',
65
+ overridesResolver: (props, styles) => styles.columnHeaderRow
66
+ })(() => ({
67
+ display: 'flex'
68
+ }));
69
+
54
70
  function isUIEvent(event) {
55
71
  return !!event.target;
56
72
  }
@@ -69,6 +85,8 @@ const useGridColumnHeaders = props => {
69
85
  const cellTabIndexState = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridTabIndexCellSelector);
70
86
  const columnHeaderFocus = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridFocusColumnHeaderSelector);
71
87
  const headerHeight = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityHeaderHeightSelector);
88
+ const headerGroupingMaxDepth = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityHeaderGroupingMaxDepthSelector);
89
+ const totalHeaderHeight = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityTotalHeaderHeightSelector);
72
90
  const filterColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterActiveItemsLookupSelector);
73
91
  const sortColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortColumnLookupSelector);
74
92
  const columnMenuState = (0, _useGridSelector.useGridSelector)(apiRef, _columnMenuSelector.gridColumnMenuSelector);
@@ -164,9 +182,9 @@ const useGridColumnHeaders = props => {
164
182
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnResizeStop', handleColumnResizeStop);
165
183
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);
166
184
  (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);
167
- (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsScroll', handleScroll);
185
+ (0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowsScroll', handleScroll); // Helper for computation common between getColumnHeaders and getColumnGroupHeaders
168
186
 
169
- const getColumns = (params, other = {}) => {
187
+ const getColumnsToRender = params => {
170
188
  const {
171
189
  renderContext: nextRenderContext = renderContext,
172
190
  minFirstColumn = minColumnIndex,
@@ -177,7 +195,6 @@ const useGridColumnHeaders = props => {
177
195
  return null;
178
196
  }
179
197
 
180
- const columns = [];
181
198
  const [firstRowToRender, lastRowToRender] = (0, _useGridVirtualScroller.getRenderableIndexes)({
182
199
  firstIndex: nextRenderContext.firstRowIndex,
183
200
  lastIndex: nextRenderContext.lastRowIndex,
@@ -196,6 +213,27 @@ const useGridColumnHeaders = props => {
196
213
  });
197
214
  const lastColumnToRender = Math.min(nextRenderContext.lastColumnIndex + rootProps.columnBuffer, maxLastColumn);
198
215
  const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);
216
+ return {
217
+ renderedColumns,
218
+ firstColumnToRender,
219
+ lastColumnToRender,
220
+ minFirstColumn,
221
+ maxLastColumn
222
+ };
223
+ };
224
+
225
+ const getColumnHeaders = (params, other = {}) => {
226
+ const columnsToRender = getColumnsToRender(params);
227
+
228
+ if (columnsToRender == null) {
229
+ return null;
230
+ }
231
+
232
+ const {
233
+ renderedColumns,
234
+ firstColumnToRender
235
+ } = columnsToRender;
236
+ const columns = [];
199
237
 
200
238
  for (let i = 0; i < renderedColumns.length; i += 1) {
201
239
  const column = renderedColumns[i];
@@ -220,25 +258,186 @@ const useGridColumnHeaders = props => {
220
258
  }, other), column.field));
221
259
  }
222
260
 
261
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
262
+ role: "row",
263
+ "aria-rowindex": headerGroupingMaxDepth + 1,
264
+ children: columns
265
+ });
266
+ };
267
+
268
+ const getParents = (path = [], depth) => path.slice(0, depth + 1);
269
+
270
+ const getColumnGroupHeaders = params => {
271
+ if (headerGroupingMaxDepth === 0) {
272
+ return null;
273
+ }
274
+
275
+ const columnsToRender = getColumnsToRender(params);
276
+
277
+ if (columnsToRender == null) {
278
+ return null;
279
+ }
280
+
281
+ const {
282
+ renderedColumns,
283
+ firstColumnToRender,
284
+ lastColumnToRender,
285
+ maxLastColumn
286
+ } = columnsToRender;
287
+ const columns = [];
288
+ const headerToRender = [];
289
+
290
+ for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {
291
+ var _visibleColumns$first, _visibleColumns$first2, _visibleColumns$first3;
292
+
293
+ // Initialize the header line with a grouping item containing all the columns on the left of the virtualization which are in the same group as the first group to render
294
+ const initialHeader = [];
295
+ let leftOverflow = 0;
296
+ let columnIndex = firstColumnToRender - 1;
297
+ const firstColumnToRenderGroup = (_visibleColumns$first = visibleColumns[firstColumnToRender]) == null ? void 0 : (_visibleColumns$first2 = _visibleColumns$first.groupPath) == null ? void 0 : _visibleColumns$first2[depth]; // The array of parent is used to manage empty grouping cell
298
+ // When two empty grouping cell are next to each other, we merge them if the belong to the same group.
299
+
300
+ const firstColumnToRenderGroupParents = getParents((_visibleColumns$first3 = visibleColumns[firstColumnToRender]) == null ? void 0 : _visibleColumns$first3.groupPath, depth);
301
+
302
+ while (firstColumnToRenderGroup !== null && columnIndex >= minColumnIndex && (_visibleColumns$colum = visibleColumns[columnIndex]) != null && _visibleColumns$colum.groupPath && (0, _utils2.isDeepEqual)(getParents((_visibleColumns$colum2 = visibleColumns[columnIndex]) == null ? void 0 : _visibleColumns$colum2.groupPath, depth), firstColumnToRenderGroupParents)) {
303
+ var _visibleColumns$colum, _visibleColumns$colum2, _column$computedWidth;
304
+
305
+ const column = visibleColumns[columnIndex];
306
+ leftOverflow += (_column$computedWidth = column.computedWidth) != null ? _column$computedWidth : 0;
307
+
308
+ if (initialHeader.length === 0) {
309
+ var _column$computedWidth2;
310
+
311
+ initialHeader.push({
312
+ width: (_column$computedWidth2 = column.computedWidth) != null ? _column$computedWidth2 : 0,
313
+ fields: [column.field],
314
+ groupId: firstColumnToRenderGroup,
315
+ groupParents: firstColumnToRenderGroupParents,
316
+ colIndex: columnIndex
317
+ });
318
+ } else {
319
+ var _column$computedWidth3;
320
+
321
+ initialHeader[0].width += (_column$computedWidth3 = column.computedWidth) != null ? _column$computedWidth3 : 0;
322
+ initialHeader[0].fields.push(column.field);
323
+ initialHeader[0].colIndex = columnIndex;
324
+ }
325
+
326
+ columnIndex -= 1;
327
+ }
328
+
329
+ const depthInfo = renderedColumns.reduce((aggregated, column, i) => {
330
+ var _column$computedWidth7;
331
+
332
+ const lastItem = aggregated[aggregated.length - 1];
333
+
334
+ if (column.groupPath && column.groupPath.length > depth) {
335
+ var _column$computedWidth5;
336
+
337
+ if (lastItem && lastItem.groupId === column.groupPath[depth]) {
338
+ var _column$computedWidth4;
339
+
340
+ // Merge with the previous columns
341
+ return [...aggregated.slice(0, aggregated.length - 1), (0, _extends2.default)({}, lastItem, {
342
+ width: lastItem.width + ((_column$computedWidth4 = column.computedWidth) != null ? _column$computedWidth4 : 0),
343
+ fields: [...lastItem.fields, column.field]
344
+ })];
345
+ } // Create a new grouping
346
+
347
+
348
+ return [...aggregated, {
349
+ groupId: column.groupPath[depth],
350
+ groupParents: getParents(column.groupPath, depth),
351
+ width: (_column$computedWidth5 = column.computedWidth) != null ? _column$computedWidth5 : 0,
352
+ fields: [column.field],
353
+ colIndex: firstColumnToRender + i
354
+ }];
355
+ }
356
+
357
+ if (MERGE_EMPTY_CELLS && lastItem && lastItem.groupId === null && (0, _utils2.isDeepEqual)(getParents(column.groupPath, depth), lastItem.groupParents)) {
358
+ var _column$computedWidth6;
359
+
360
+ // We merge with previous column
361
+ return [...aggregated.slice(0, aggregated.length - 1), (0, _extends2.default)({}, lastItem, {
362
+ width: lastItem.width + ((_column$computedWidth6 = column.computedWidth) != null ? _column$computedWidth6 : 0),
363
+ fields: [...lastItem.fields, column.field]
364
+ })];
365
+ } // We create new empty cell
366
+
367
+
368
+ return [...aggregated, {
369
+ groupId: null,
370
+ groupParents: getParents(column.groupPath, depth),
371
+ width: (_column$computedWidth7 = column.computedWidth) != null ? _column$computedWidth7 : 0,
372
+ fields: [column.field],
373
+ colIndex: firstColumnToRender + i
374
+ }];
375
+ }, initialHeader);
376
+ columnIndex = lastColumnToRender;
377
+ const lastColumnToRenderGroup = depthInfo[depthInfo.length - 1].groupId;
378
+
379
+ while (lastColumnToRenderGroup !== null && columnIndex < maxLastColumn && (_visibleColumns$colum3 = visibleColumns[columnIndex]) != null && _visibleColumns$colum3.groupPath && ((_visibleColumns$colum4 = visibleColumns[columnIndex]) == null ? void 0 : (_visibleColumns$colum5 = _visibleColumns$colum4.groupPath) == null ? void 0 : _visibleColumns$colum5[depth]) === lastColumnToRenderGroup) {
380
+ var _visibleColumns$colum3, _visibleColumns$colum4, _visibleColumns$colum5, _column$computedWidth8;
381
+
382
+ const column = visibleColumns[columnIndex];
383
+ depthInfo[depthInfo.length - 1].width += (_column$computedWidth8 = column.computedWidth) != null ? _column$computedWidth8 : 0;
384
+ depthInfo[depthInfo.length - 1].fields.push(column.field);
385
+ columnIndex += 1;
386
+ }
387
+
388
+ headerToRender.push({
389
+ leftOverflow,
390
+ elements: [...depthInfo]
391
+ });
392
+ }
393
+
394
+ headerToRender.forEach((depthInfo, depthIndex) => {
395
+ columns.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnHeaderRow, {
396
+ style: {
397
+ height: `${headerHeight}px`,
398
+ transform: `translateX(-${depthInfo.leftOverflow}px)`
399
+ },
400
+ role: "row",
401
+ "aria-rowindex": depthIndex + 1,
402
+ children: depthInfo.elements.map(({
403
+ groupId,
404
+ width,
405
+ fields,
406
+ colIndex
407
+ }, groupIndex) => {
408
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnGroupHeader.GridColumnGroupHeader, {
409
+ groupId: groupId,
410
+ width: width,
411
+ fields: fields,
412
+ colIndex: colIndex,
413
+ depth: depthIndex,
414
+ isLastColumn: colIndex === visibleColumns.length - fields.length,
415
+ extendRowFullWidth: !rootProps.disableExtendRowFullWidth,
416
+ maxDepth: headerToRender.length,
417
+ height: headerHeight
418
+ }, groupIndex);
419
+ })
420
+ }, depthIndex));
421
+ });
223
422
  return columns;
224
423
  };
225
424
 
226
425
  const rootStyle = {
227
- minHeight: headerHeight,
228
- maxHeight: headerHeight,
426
+ minHeight: totalHeaderHeight,
427
+ maxHeight: totalHeaderHeight,
229
428
  lineHeight: `${headerHeight}px`
230
429
  };
231
430
  return {
232
431
  renderContext,
233
- getColumns,
432
+ getColumnHeaders,
433
+ getColumnGroupHeaders,
234
434
  isDragging: !!dragCol,
235
435
  getRootProps: (other = {}) => (0, _extends2.default)({
236
436
  style: rootStyle
237
437
  }, other),
238
438
  getInnerProps: () => ({
239
439
  ref: handleInnerRef,
240
- 'aria-rowindex': 1,
241
- role: 'row'
440
+ role: 'rowgroup'
242
441
  })
243
442
  };
244
443
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridDensityValueSelector = exports.gridDensitySelector = exports.gridDensityRowHeightSelector = exports.gridDensityHeaderHeightSelector = exports.gridDensityFactorSelector = void 0;
6
+ exports.gridDensityValueSelector = exports.gridDensityTotalHeaderHeightSelector = exports.gridDensitySelector = exports.gridDensityRowHeightSelector = exports.gridDensityHeaderHeightSelector = exports.gridDensityHeaderGroupingMaxDepthSelector = exports.gridDensityFactorSelector = void 0;
7
7
 
8
8
  var _createSelector = require("../../../utils/createSelector");
9
9
 
@@ -16,5 +16,9 @@ const gridDensityRowHeightSelector = (0, _createSelector.createSelector)(gridDen
16
16
  exports.gridDensityRowHeightSelector = gridDensityRowHeightSelector;
17
17
  const gridDensityHeaderHeightSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerHeight);
18
18
  exports.gridDensityHeaderHeightSelector = gridDensityHeaderHeightSelector;
19
+ const gridDensityHeaderGroupingMaxDepthSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerGroupingMaxDepth);
20
+ exports.gridDensityHeaderGroupingMaxDepthSelector = gridDensityHeaderGroupingMaxDepthSelector;
19
21
  const gridDensityFactorSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.factor);
20
- exports.gridDensityFactorSelector = gridDensityFactorSelector;
22
+ exports.gridDensityFactorSelector = gridDensityFactorSelector;
23
+ const gridDensityTotalHeaderHeightSelector = (0, _createSelector.createSelector)(gridDensitySelector, density => density.headerHeight * (1 + density.headerGroupingMaxDepth));
24
+ exports.gridDensityTotalHeaderHeightSelector = gridDensityTotalHeaderHeightSelector;