@mui/x-data-grid 7.23.6 → 7.24.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 (244) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/DataGrid/DataGrid.js +4 -5
  3. package/DataGrid/useDataGridComponent.d.ts +2 -1
  4. package/DataGrid/useDataGridComponent.js +1 -1
  5. package/components/GridHeaders.js +2 -2
  6. package/components/GridRow.d.ts +5 -9
  7. package/components/GridRow.js +28 -105
  8. package/components/GridSkeletonLoadingOverlay.js +18 -18
  9. package/components/cell/GridCell.d.ts +9 -16
  10. package/components/cell/GridCell.js +17 -35
  11. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -5
  12. package/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  13. package/components/columnHeaders/GridColumnHeaderFilterIconButton.d.ts +3 -3
  14. package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +21 -7
  15. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -5
  16. package/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  17. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  18. package/components/containers/GridRoot.d.ts +2 -2
  19. package/components/containers/GridRoot.js +14 -6
  20. package/components/containers/GridRootStyles.js +1 -0
  21. package/components/panel/GridPanel.js +2 -1
  22. package/components/panel/filterPanel/GridFilterInputValueProps.d.ts +2 -1
  23. package/components/toolbar/GridToolbarColumnsButton.js +6 -1
  24. package/components/toolbar/GridToolbarFilterButton.js +6 -1
  25. package/components/virtualization/GridVirtualScrollbar.js +11 -12
  26. package/components/virtualization/GridVirtualScroller.js +4 -4
  27. package/context/GridContextProvider.d.ts +2 -1
  28. package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +2 -2
  29. package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +2 -2
  30. package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +2 -2
  31. package/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.d.ts +2 -2
  32. package/hooks/core/strategyProcessing/useGridStrategyProcessing.d.ts +2 -2
  33. package/hooks/core/useGridApiInitialization.d.ts +2 -2
  34. package/hooks/core/useGridInitialization.d.ts +2 -2
  35. package/hooks/core/useGridIsRtl.d.ts +2 -2
  36. package/hooks/core/useGridLocaleText.d.ts +2 -2
  37. package/hooks/core/useGridLoggerFactory.d.ts +2 -2
  38. package/hooks/core/useGridRefs.d.ts +2 -2
  39. package/hooks/core/useGridStateInitialization.d.ts +2 -2
  40. package/hooks/features/clipboard/useGridClipboard.d.ts +2 -2
  41. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +2 -2
  42. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +5 -7
  43. package/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  44. package/hooks/features/columnMenu/useGridColumnMenu.d.ts +2 -2
  45. package/hooks/features/columnMenu/useGridColumnMenu.js +0 -2
  46. package/hooks/features/columnResize/useGridColumnResize.d.ts +2 -2
  47. package/hooks/features/columnResize/useGridColumnResize.js +4 -2
  48. package/hooks/features/columns/gridColumnsUtils.d.ts +4 -4
  49. package/hooks/features/columns/useGridColumnSpanning.d.ts +2 -2
  50. package/hooks/features/columns/useGridColumns.d.ts +2 -2
  51. package/hooks/features/density/useGridDensity.d.ts +2 -2
  52. package/hooks/features/dimensions/useGridDimensions.d.ts +2 -2
  53. package/hooks/features/dimensions/useGridDimensions.js +1 -3
  54. package/hooks/features/editing/useGridCellEditing.d.ts +2 -2
  55. package/hooks/features/editing/useGridEditing.d.ts +2 -2
  56. package/hooks/features/editing/useGridRowEditing.d.ts +2 -2
  57. package/hooks/features/events/useGridEvents.d.ts +2 -2
  58. package/hooks/features/export/serializers/csvSerializer.d.ts +2 -1
  59. package/hooks/features/export/useGridCsvExport.d.ts +2 -2
  60. package/hooks/features/export/useGridPrintExport.d.ts +2 -2
  61. package/hooks/features/export/utils.d.ts +2 -2
  62. package/hooks/features/filter/gridFilterSelector.js +6 -1
  63. package/hooks/features/filter/gridFilterUtils.d.ts +7 -7
  64. package/hooks/features/filter/gridFilterUtils.js +3 -3
  65. package/hooks/features/filter/useGridFilter.d.ts +2 -2
  66. package/hooks/features/focus/useGridFocus.d.ts +2 -2
  67. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +2 -2
  68. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +2 -2
  69. package/hooks/features/keyboardNavigation/utils.d.ts +3 -3
  70. package/hooks/features/listView/useGridListView.d.ts +2 -2
  71. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +3 -0
  72. package/hooks/features/pagination/gridPaginationSelector.d.ts +20 -1
  73. package/hooks/features/pagination/gridPaginationSelector.js +39 -1
  74. package/hooks/features/pagination/useGridPagination.d.ts +3 -3
  75. package/hooks/features/pagination/useGridPagination.js +5 -3
  76. package/hooks/features/pagination/useGridPaginationMeta.d.ts +2 -2
  77. package/hooks/features/pagination/useGridPaginationModel.d.ts +2 -2
  78. package/hooks/features/pagination/useGridPaginationModel.js +23 -1
  79. package/hooks/features/pagination/useGridRowCount.d.ts +2 -2
  80. package/hooks/features/preferencesPanel/gridPreferencePanelSelector.d.ts +1 -0
  81. package/hooks/features/preferencesPanel/gridPreferencePanelSelector.js +8 -1
  82. package/hooks/features/preferencesPanel/index.d.ts +1 -1
  83. package/hooks/features/preferencesPanel/index.js +1 -1
  84. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +2 -2
  85. package/hooks/features/preferencesPanel/useGridPreferencesPanel.js +14 -38
  86. package/hooks/features/rowSelection/useGridRowSelection.d.ts +2 -2
  87. package/hooks/features/rowSelection/useGridRowSelectionPreProcessors.d.ts +2 -2
  88. package/hooks/features/rowSelection/utils.d.ts +3 -2
  89. package/hooks/features/rows/gridRowSpanningUtils.d.ts +2 -2
  90. package/hooks/features/rows/gridRowsSelector.js +1 -1
  91. package/hooks/features/rows/gridRowsUtils.d.ts +4 -4
  92. package/hooks/features/rows/useGridParamsApi.d.ts +2 -2
  93. package/hooks/features/rows/useGridRowSpanning.d.ts +2 -2
  94. package/hooks/features/rows/useGridRows.d.ts +2 -2
  95. package/hooks/features/rows/useGridRows.js +2 -2
  96. package/hooks/features/rows/useGridRowsMeta.d.ts +2 -2
  97. package/hooks/features/rows/useGridRowsPreProcessors.d.ts +2 -2
  98. package/hooks/features/scroll/useGridScroll.d.ts +2 -2
  99. package/hooks/features/sorting/gridSortingUtils.d.ts +3 -3
  100. package/hooks/features/sorting/gridSortingUtils.js +2 -2
  101. package/hooks/features/sorting/useGridSorting.d.ts +2 -2
  102. package/hooks/features/statePersistence/useGridStatePersistence.d.ts +2 -2
  103. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.d.ts +6 -0
  104. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  105. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
  106. package/hooks/features/virtualization/useGridVirtualScroller.js +92 -50
  107. package/hooks/features/virtualization/useGridVirtualization.d.ts +2 -2
  108. package/hooks/utils/useGridApiContext.d.ts +2 -2
  109. package/hooks/utils/useGridApiEventHandler.d.ts +4 -4
  110. package/hooks/utils/useGridApiMethod.d.ts +2 -2
  111. package/hooks/utils/useGridApiRef.d.ts +2 -2
  112. package/hooks/utils/useGridApiRef.js +3 -1
  113. package/hooks/utils/useGridInitializeState.d.ts +3 -3
  114. package/hooks/utils/useGridLogger.d.ts +2 -2
  115. package/hooks/utils/useGridNativeEventListener.d.ts +2 -1
  116. package/hooks/utils/useGridPrivateApiContext.d.ts +2 -1
  117. package/hooks/utils/useGridSelector.d.ts +3 -3
  118. package/hooks/utils/useGridVisibleRows.d.ts +8 -6
  119. package/hooks/utils/useGridVisibleRows.js +5 -28
  120. package/index.js +1 -1
  121. package/internals/constants.d.ts +6 -0
  122. package/internals/constants.js +8 -1
  123. package/internals/index.d.ts +1 -0
  124. package/internals/index.js +1 -0
  125. package/internals/utils/attachPinnedStyle.d.ts +2 -0
  126. package/internals/utils/attachPinnedStyle.js +9 -0
  127. package/internals/utils/getPinnedCellOffset.d.ts +3 -3
  128. package/internals/utils/getPinnedCellOffset.js +6 -7
  129. package/internals/utils/index.d.ts +1 -0
  130. package/internals/utils/index.js +2 -1
  131. package/locales/faIR.js +5 -6
  132. package/locales/urPK.js +9 -10
  133. package/models/colDef/gridColDef.d.ts +9 -8
  134. package/models/events/gridEventLookup.d.ts +6 -1
  135. package/models/gridExport.d.ts +2 -2
  136. package/models/gridFilterOperator.d.ts +2 -1
  137. package/models/gridStateCommunity.d.ts +4 -0
  138. package/models/props/DataGridProps.d.ts +2 -1
  139. package/modern/DataGrid/DataGrid.js +4 -5
  140. package/modern/DataGrid/useDataGridComponent.js +1 -1
  141. package/modern/components/GridHeaders.js +2 -2
  142. package/modern/components/GridRow.js +28 -105
  143. package/modern/components/GridSkeletonLoadingOverlay.js +18 -18
  144. package/modern/components/cell/GridCell.js +17 -35
  145. package/modern/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  146. package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +21 -7
  147. package/modern/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  148. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  149. package/modern/components/containers/GridRoot.js +14 -6
  150. package/modern/components/containers/GridRootStyles.js +1 -0
  151. package/modern/components/panel/GridPanel.js +2 -1
  152. package/modern/components/toolbar/GridToolbarColumnsButton.js +6 -1
  153. package/modern/components/toolbar/GridToolbarFilterButton.js +6 -1
  154. package/modern/components/virtualization/GridVirtualScrollbar.js +11 -12
  155. package/modern/components/virtualization/GridVirtualScroller.js +4 -4
  156. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  157. package/modern/hooks/features/columnMenu/useGridColumnMenu.js +0 -2
  158. package/modern/hooks/features/columnResize/useGridColumnResize.js +4 -2
  159. package/modern/hooks/features/dimensions/useGridDimensions.js +1 -3
  160. package/modern/hooks/features/filter/gridFilterSelector.js +6 -1
  161. package/modern/hooks/features/filter/gridFilterUtils.js +3 -3
  162. package/modern/hooks/features/pagination/gridPaginationSelector.js +39 -1
  163. package/modern/hooks/features/pagination/useGridPagination.js +5 -3
  164. package/modern/hooks/features/pagination/useGridPaginationModel.js +23 -1
  165. package/modern/hooks/features/preferencesPanel/gridPreferencePanelSelector.js +8 -1
  166. package/modern/hooks/features/preferencesPanel/index.js +1 -1
  167. package/modern/hooks/features/preferencesPanel/useGridPreferencesPanel.js +14 -38
  168. package/modern/hooks/features/rows/gridRowsSelector.js +1 -1
  169. package/modern/hooks/features/rows/useGridRows.js +2 -2
  170. package/modern/hooks/features/sorting/gridSortingUtils.js +2 -2
  171. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  172. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +92 -50
  173. package/modern/hooks/utils/useGridApiRef.js +3 -1
  174. package/modern/hooks/utils/useGridVisibleRows.js +5 -28
  175. package/modern/index.js +1 -1
  176. package/modern/internals/constants.js +8 -1
  177. package/modern/internals/index.js +1 -0
  178. package/modern/internals/utils/attachPinnedStyle.js +9 -0
  179. package/modern/internals/utils/getPinnedCellOffset.js +6 -7
  180. package/modern/internals/utils/index.js +2 -1
  181. package/modern/locales/faIR.js +5 -6
  182. package/modern/locales/urPK.js +9 -10
  183. package/modern/utils/cellBorderUtils.js +5 -5
  184. package/modern/utils/domUtils.js +7 -2
  185. package/modern/utils/isJSDOM.js +1 -0
  186. package/modern/utils/rtlFlipSide.js +22 -0
  187. package/node/DataGrid/DataGrid.js +2 -3
  188. package/node/DataGrid/useDataGridComponent.js +1 -1
  189. package/node/components/GridHeaders.js +2 -2
  190. package/node/components/GridRow.js +27 -104
  191. package/node/components/GridSkeletonLoadingOverlay.js +17 -17
  192. package/node/components/cell/GridCell.js +18 -36
  193. package/node/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  194. package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +20 -6
  195. package/node/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  196. package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  197. package/node/components/containers/GridRoot.js +14 -6
  198. package/node/components/containers/GridRootStyles.js +1 -0
  199. package/node/components/panel/GridPanel.js +2 -1
  200. package/node/components/toolbar/GridToolbarColumnsButton.js +6 -1
  201. package/node/components/toolbar/GridToolbarFilterButton.js +6 -1
  202. package/node/components/virtualization/GridVirtualScrollbar.js +11 -12
  203. package/node/components/virtualization/GridVirtualScroller.js +4 -4
  204. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +32 -74
  205. package/node/hooks/features/columnMenu/useGridColumnMenu.js +0 -2
  206. package/node/hooks/features/columnResize/useGridColumnResize.js +4 -2
  207. package/node/hooks/features/dimensions/useGridDimensions.js +3 -5
  208. package/node/hooks/features/filter/gridFilterSelector.js +6 -1
  209. package/node/hooks/features/filter/gridFilterUtils.js +3 -3
  210. package/node/hooks/features/pagination/gridPaginationSelector.js +41 -3
  211. package/node/hooks/features/pagination/useGridPagination.js +5 -3
  212. package/node/hooks/features/pagination/useGridPaginationModel.js +23 -1
  213. package/node/hooks/features/preferencesPanel/gridPreferencePanelSelector.js +9 -2
  214. package/node/hooks/features/preferencesPanel/index.js +11 -10
  215. package/node/hooks/features/preferencesPanel/useGridPreferencesPanel.js +14 -38
  216. package/node/hooks/features/rows/gridRowsSelector.js +1 -1
  217. package/node/hooks/features/rows/useGridRows.js +1 -1
  218. package/node/hooks/features/sorting/gridSortingUtils.js +2 -2
  219. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +49 -0
  220. package/node/hooks/features/virtualization/useGridVirtualScroller.js +94 -52
  221. package/node/hooks/utils/useGridApiRef.js +3 -1
  222. package/node/hooks/utils/useGridVisibleRows.js +3 -28
  223. package/node/index.js +1 -1
  224. package/node/internals/constants.js +9 -2
  225. package/node/internals/index.js +12 -0
  226. package/node/internals/utils/attachPinnedStyle.js +15 -0
  227. package/node/internals/utils/getPinnedCellOffset.js +6 -7
  228. package/node/internals/utils/index.js +11 -0
  229. package/node/locales/faIR.js +5 -6
  230. package/node/locales/urPK.js +9 -10
  231. package/node/utils/cellBorderUtils.js +5 -5
  232. package/node/utils/domUtils.js +7 -2
  233. package/node/utils/isJSDOM.js +7 -0
  234. package/node/utils/rtlFlipSide.js +29 -0
  235. package/package.json +2 -2
  236. package/utils/cellBorderUtils.d.ts +3 -3
  237. package/utils/cellBorderUtils.js +5 -5
  238. package/utils/createSelector.d.ts +3 -3
  239. package/utils/domUtils.js +7 -2
  240. package/utils/getPublicApiRef.d.ts +2 -1
  241. package/utils/isJSDOM.d.ts +1 -0
  242. package/utils/isJSDOM.js +1 -0
  243. package/utils/rtlFlipSide.d.ts +2 -0
  244. package/utils/rtlFlipSide.js +22 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,156 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.24.1
7
+
8
+ _Jan 24, 2025_
9
+
10
+ We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🐞 Bugfixes
13
+ - 🌍 Improve Persian (fa-IR) locale on the Data Grid
14
+
15
+ Special thanks go out to the community contributors who have helped make this release possible:
16
+ @mostafaRoosta74, @lauri865.
17
+ Following are all team members who have contributed to this release:
18
+ @alexfauquette, @JCQuintas, @cherniavskii, @LukasTy, @arminmeh.
19
+
20
+ ### Data Grid
21
+
22
+ #### `@mui/x-data-grid@7.24.1`
23
+
24
+ - [DataGrid] Fix toggling preference panel from toolbar (#16276) @lauri865
25
+ - [DataGrid] Only try to mount filter button if there are filters present (#16269) @lauri865
26
+ - [DataGrid] Revert `apiRef` to be `MutableRefObject` for React versions < 19 (#16320) @arminmeh
27
+ - [l10n] Improve Persian (fa-IR) locale (#15964) @mostafaRoosta74
28
+
29
+ #### `@mui/x-data-grid-pro@7.24.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
30
+
31
+ Same changes as in `@mui/x-data-grid@7.24.1`.
32
+
33
+ #### `@mui/x-data-grid-premium@7.24.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
34
+
35
+ Same changes as in `@mui/x-data-grid-pro@7.24.1`.
36
+
37
+ ### Date and Time Pickers
38
+
39
+ #### `@mui/x-date-pickers@7.24.1`
40
+
41
+ - [fields] Reset `all` selected state on section edit (#16232) @LukasTy
42
+
43
+ #### `@mui/x-date-pickers-pro@7.24.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
44
+
45
+ Same changes as in `@mui/x-date-pickers@7.24.1`.
46
+
47
+ ### Charts
48
+
49
+ #### `@mui/x-charts@7.24.1`
50
+
51
+ - [charts] Handle case where gradient stop `offset` could be `Infinite` (@JCQuintas) (#16309) @JCQuintas
52
+
53
+ #### `@mui/x-charts-pro@7.24.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
54
+
55
+ Same changes as in `@mui/x-charts@7.24.1`.
56
+
57
+ ### Tree View
58
+
59
+ #### `@mui/x-tree-view@7.24.1`
60
+
61
+ Internal changes.
62
+
63
+ #### `@mui/x-tree-view-pro@7.24.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
64
+
65
+ Same changes as in `@mui/x-tree-view@7.24.1`.
66
+
67
+ ### Docs
68
+
69
+ - [docs] Fix `domainLimit` definition (#16271) @alexfauquette
70
+
71
+ ### Core
72
+
73
+ - [core] Make `@mui/x-internals` a dependency of `@mui/x-license` (#16265) @alexfauquette
74
+ - [test] Fix flaky column pinning tests (#16228) @cherniavskii
75
+ - [test] Fix flaky tests (#16264) @lauri865
76
+
77
+ ## 7.24.0
78
+
79
+ _Jan 17, 2025_
80
+
81
+ We'd like to offer a big thanks to the 8 contributors who made this release possible. Here are some highlights ✨:
82
+
83
+ - 🔄 Data Grid [Scroll restoration](https://next.mui.com/x/react-data-grid/scrolling/#scroll-restoration)
84
+ - 🐞 Bugfixes
85
+
86
+ Special thanks go out to the community contributors who have helped make this release possible:
87
+ @lauri865, @AxharKhan.
88
+ Following are all team members who have contributed to this release:
89
+ @KenanYusuf, @arminmeh, @cherniavskii, @michelengelen, @samuelsycamore, @LukasTy.
90
+
91
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
92
+
93
+ ### Data Grid
94
+
95
+ #### `@mui/x-data-grid@7.24.0`
96
+
97
+ - [DataGrid] Fix resizing right pinned column (#16193) @KenanYusuf
98
+ - [DataGrid] Improve scrollbar deadzone with overlay scrollbars (#16212) @lauri865
99
+ - [DataGrid] Scroll restoration (#16208) @lauri865
100
+ - [DataGrid] Fix row, cell and header memoizations (#16195) @lauri865
101
+ - [l10n] Improve Urdu (ur-PK) locale (#16081) @AxharKhan
102
+
103
+ #### `@mui/x-data-grid-pro@7.24.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
104
+
105
+ Same changes as in `@mui/x-data-grid@7.24.0`, plus:
106
+
107
+ - [DataGridPro] Add test for column pinning with disabled column virtualization (#16196) @cherniavskii
108
+ - [DataGridPro] Fix width of right-pinned column group during resize (#16207) @cherniavskii
109
+
110
+ #### `@mui/x-data-grid-premium@7.24.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
111
+
112
+ Same changes as in `@mui/x-data-grid-pro@7.24.0`.
113
+
114
+ ### Date and Time Pickers
115
+
116
+ #### `@mui/x-date-pickers@7.24.0`
117
+
118
+ Internal changes.
119
+
120
+ #### `@mui/x-date-pickers-pro@7.24.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
121
+
122
+ Same changes as in `@mui/x-date-pickers@7.24.0`.
123
+
124
+ ### Charts
125
+
126
+ #### `@mui/x-charts@7.24.0`
127
+
128
+ Internal changes.
129
+
130
+ #### `@mui/x-charts-pro@7.24.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
131
+
132
+ Same changes as in `@mui/x-charts@7.24.0`.
133
+
134
+ ### Tree View
135
+
136
+ #### `@mui/x-tree-view@7.24.0`
137
+
138
+ Internal changes.
139
+
140
+ #### `@mui/x-tree-view-pro@7.24.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
141
+
142
+ Same changes as in `@mui/x-tree-view@7.24.0`.
143
+
144
+ ### Docs
145
+
146
+ - [docs] Copyedit the Data Grid cell selection page (#16213) @samuelsycamore
147
+ - [docs] Fix demo rendering issue on Codesandbox (#16129) @arminmeh
148
+
149
+ ### Core
150
+
151
+ - [core] Type all references as `RefObject` (#16125) @arminmeh
152
+ - [code-infra] Refactor `react` and `react-dom` definitions to simplify dep resolving (#16214) @LukasTy
153
+ - [infra] Improve cherry-pick action target list (#16188) @michelengelen
154
+ - [test] Fix flaky column pinning unit test (#16209) @cherniavskii
155
+
6
156
  ## 7.23.6
7
157
 
8
158
  _Jan 9, 2025_
@@ -4,14 +4,14 @@ import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { forwardRef } from '@mui/x-internals/forwardRef';
7
- import { GridBody, GridFooterPlaceholder, GridHeader, GridRoot } from "../components/index.js";
7
+ import { GridRoot } from "../components/index.js";
8
8
  import { useGridAriaAttributes } from "../hooks/utils/useGridAriaAttributes.js";
9
9
  import { useGridRowAriaAttributes } from "../hooks/features/rows/useGridRowAriaAttributes.js";
10
10
  import { GridContextProvider } from "../context/GridContextProvider.js";
11
11
  import { useDataGridComponent } from "./useDataGridComponent.js";
12
12
  import { useDataGridProps } from "./useDataGridProps.js";
13
13
  import { propValidatorsDataGrid, validateProps } from "../internals/utils/propValidation.js";
14
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
15
  const configuration = {
16
16
  hooks: {
17
17
  useGridAriaAttributes,
@@ -34,13 +34,12 @@ const DataGridRaw = forwardRef(function DataGrid(inProps, ref) {
34
34
  privateApiRef: privateApiRef,
35
35
  configuration: configuration,
36
36
  props: props,
37
- children: /*#__PURE__*/_jsxs(GridRoot, _extends({
37
+ children: /*#__PURE__*/_jsx(GridRoot, _extends({
38
38
  className: props.className,
39
39
  style: props.style,
40
40
  sx: props.sx
41
41
  }, props.forwardedProps, props.slotProps?.root, {
42
- ref: ref,
43
- children: [/*#__PURE__*/_jsx(GridHeader, {}), /*#__PURE__*/_jsx(GridBody, {}), /*#__PURE__*/_jsx(GridFooterPlaceholder, {})]
42
+ ref: ref
44
43
  }))
45
44
  });
46
45
  });
@@ -1,3 +1,4 @@
1
+ import { RefObject } from '@mui/x-internals/types';
1
2
  import { DataGridProcessedProps } from '../models/props/DataGridProps';
2
3
  import { GridApiCommunity, GridPrivateApiCommunity } from '../models/api/gridApiCommunity';
3
- export declare const useDataGridComponent: (inputApiRef: React.RefObject<GridApiCommunity> | undefined, props: DataGridProcessedProps) => import("react").RefObject<GridPrivateApiCommunity>;
4
+ export declare const useDataGridComponent: (inputApiRef: RefObject<GridApiCommunity> | undefined, props: DataGridProcessedProps) => import("react").RefObject<GridPrivateApiCommunity>;
@@ -44,6 +44,7 @@ export const useDataGridComponent = (inputApiRef, props) => {
44
44
  useGridInitializeState(dimensionsStateInitializer, apiRef, props);
45
45
  useGridInitializeState(rowSelectionStateInitializer, apiRef, props);
46
46
  useGridInitializeState(columnsStateInitializer, apiRef, props);
47
+ useGridInitializeState(paginationStateInitializer, apiRef, props);
47
48
  useGridInitializeState(rowsStateInitializer, apiRef, props);
48
49
  useGridInitializeState(editingStateInitializer, apiRef, props);
49
50
  useGridInitializeState(focusStateInitializer, apiRef, props);
@@ -53,7 +54,6 @@ export const useDataGridComponent = (inputApiRef, props) => {
53
54
  useGridInitializeState(rowSpanningStateInitializer, apiRef, props);
54
55
  useGridInitializeState(densityStateInitializer, apiRef, props);
55
56
  useGridInitializeState(columnResizeStateInitializer, apiRef, props);
56
- useGridInitializeState(paginationStateInitializer, apiRef, props);
57
57
  useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
58
58
  useGridInitializeState(columnMenuStateInitializer, apiRef, props);
59
59
  useGridInitializeState(columnGroupsStateInitializer, apiRef, props);
@@ -18,7 +18,7 @@ function GridHeaders() {
18
18
  const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
19
19
  const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
20
20
  const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
21
- const cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);
21
+ const hasNoCellTabIndexState = useGridSelector(apiRef, () => gridTabIndexCellSelector(apiRef) === null);
22
22
  const columnGroupHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnGroupHeaderSelector);
23
23
  const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
24
24
  const columnGroupHeaderFocus = useGridSelector(apiRef, gridFocusColumnGroupHeaderSelector);
@@ -26,7 +26,7 @@ function GridHeaders() {
26
26
  const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
27
27
  const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
28
28
  const columnGroupsHeaderStructure = useGridSelector(apiRef, gridColumnGroupsHeaderStructureSelector);
29
- const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && cellTabIndexState === null);
29
+ const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && hasNoCellTabIndexState);
30
30
  const columnsContainerRef = apiRef.current.columnHeadersContainerRef;
31
31
  return /*#__PURE__*/_jsx(rootProps.slots.columnHeaders, _extends({
32
32
  ref: columnsContainerRef,
@@ -2,8 +2,6 @@ import * as React from 'react';
2
2
  import { GridRowId, GridRowModel } from '../models/gridRows';
3
3
  import { GridPinnedColumns } from '../hooks/features/columns';
4
4
  import type { GridStateColDef } from '../models/colDef/gridColDef';
5
- import type { GridRenderContext } from '../models/params/gridScrollParams';
6
- import type { GridDimensions } from '../hooks/features/dimensions';
7
5
  export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
8
6
  row: GridRowModel;
9
7
  rowId: GridRowId;
@@ -16,8 +14,9 @@ export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
16
14
  rowHeight: number | 'auto';
17
15
  offsetTop: number | undefined;
18
16
  offsetLeft: number;
19
- dimensions: GridDimensions;
20
- renderContext: GridRenderContext;
17
+ columnsTotalWidth: number;
18
+ firstColumnIndex: number;
19
+ lastColumnIndex: number;
21
20
  visibleColumns: GridStateColDef[];
22
21
  pinnedColumns: GridPinnedColumns;
23
22
  /**
@@ -25,15 +24,12 @@ export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
25
24
  * If `null`, no cell in this row has focus.
26
25
  */
27
26
  focusedColumnIndex: number | undefined;
28
- /**
29
- * Determines which cell should be tabbable by having tabIndex=0.
30
- * If `null`, no cell in this row is in the tab sequence.
31
- */
32
- tabbableCell: string | null;
33
27
  isFirstVisible: boolean;
34
28
  isLastVisible: boolean;
35
29
  isNotVisible: boolean;
36
30
  showBottomBorder: boolean;
31
+ scrollbarWidth: number;
32
+ gridHasFiller: boolean;
37
33
  onClick?: React.MouseEventHandler<HTMLDivElement>;
38
34
  onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;
39
35
  onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetTop", "offsetLeft", "dimensions", "renderContext", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
3
+ const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetTop", "offsetLeft", "columnsTotalWidth", "firstColumnIndex", "lastColumnIndex", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "scrollbarWidth", "gridHasFiller", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
@@ -11,44 +11,22 @@ import { GridEditModes, GridRowModes, GridCellModes } from "../models/gridEditRo
11
11
  import { gridClasses } from "../constants/gridClasses.js";
12
12
  import { composeGridClasses } from "../utils/composeGridClasses.js";
13
13
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
14
+ import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.js";
14
15
  import { gridColumnPositionsSelector } from "../hooks/features/columns/gridColumnsSelector.js";
15
16
  import { useGridSelector, objectShallowCompare } from "../hooks/utils/useGridSelector.js";
16
17
  import { useGridVisibleRows } from "../hooks/utils/useGridVisibleRows.js";
17
18
  import { findParentElementFromClassName, isEventTargetInPortal } from "../utils/domUtils.js";
18
19
  import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../colDef/gridCheckboxSelectionColDef.js";
19
20
  import { GRID_ACTIONS_COLUMN_TYPE } from "../colDef/gridActionsColDef.js";
20
- import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from "../internals/constants.js";
21
+ import { GRID_DETAIL_PANEL_TOGGLE_FIELD, PinnedColumnPosition } from "../internals/constants.js";
21
22
  import { gridSortModelSelector } from "../hooks/features/sorting/gridSortingSelector.js";
22
23
  import { gridRowMaximumTreeDepthSelector } from "../hooks/features/rows/gridRowsSelector.js";
23
24
  import { gridEditRowsStateSelector } from "../hooks/features/editing/gridEditingSelectors.js";
24
- import { PinnedPosition, gridPinnedColumnPositionLookup } from "./cell/GridCell.js";
25
25
  import { GridScrollbarFillerCell as ScrollbarFiller } from "./GridScrollbarFillerCell.js";
26
26
  import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
27
27
  import { useGridConfiguration } from "../hooks/utils/useGridConfiguration.js";
28
28
  import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.js";
29
- import { gridVirtualizationColumnEnabledSelector } from "../hooks/index.js";
30
29
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
31
- function EmptyCell({
32
- width
33
- }) {
34
- if (!width) {
35
- return null;
36
- }
37
- return /*#__PURE__*/_jsx("div", {
38
- role: "presentation",
39
- className: clsx(gridClasses.cell, gridClasses.cellEmpty),
40
- style: {
41
- '--width': `${width}px`
42
- }
43
- });
44
- }
45
- process.env.NODE_ENV !== "production" ? EmptyCell.propTypes = {
46
- // ----------------------------- Warning --------------------------------
47
- // | These PropTypes are generated from the TypeScript type definitions |
48
- // | To update them edit the TypeScript types and run "pnpm proptypes" |
49
- // ----------------------------------------------------------------------
50
- width: PropTypes.number.isRequired
51
- } : void 0;
52
30
  const GridRow = forwardRef(function GridRow(props, refProp) {
53
31
  const {
54
32
  selected,
@@ -61,13 +39,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
61
39
  visibleColumns,
62
40
  pinnedColumns,
63
41
  offsetLeft,
64
- dimensions,
65
- renderContext,
42
+ columnsTotalWidth,
43
+ firstColumnIndex,
44
+ lastColumnIndex,
66
45
  focusedColumnIndex,
67
46
  isFirstVisible,
68
47
  isLastVisible,
69
48
  isNotVisible,
70
49
  showBottomBorder,
50
+ scrollbarWidth,
51
+ gridHasFiller,
71
52
  onClick,
72
53
  onDoubleClick,
73
54
  onMouseEnter,
@@ -87,14 +68,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
87
68
  const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);
88
69
  const handleRef = useForkRef(ref, refProp);
89
70
  const rowNode = apiRef.current.getRowNode(rowId);
90
- const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
91
- const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
92
71
  const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;
93
72
  const editable = rootProps.editMode === GridEditModes.Row;
94
- const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
95
73
  const hasFocusCell = focusedColumnIndex !== undefined;
96
- const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < renderContext.firstColumnIndex;
97
- const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= renderContext.lastColumnIndex;
74
+ const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < firstColumnIndex;
75
+ const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= lastColumnIndex;
98
76
  const classes = composeGridClasses(rootProps.classes, {
99
77
  root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']
100
78
  });
@@ -210,14 +188,14 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
210
188
  });
211
189
  rowClassNames.push(rootProps.getRowClassName(rowParams));
212
190
  }
213
- const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedPosition.NONE) => {
191
+ const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
214
192
  const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
215
193
  if (cellColSpanInfo?.spannedByColSpan) {
216
194
  return null;
217
195
  }
218
196
  const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
219
197
  const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
220
- const pinnedOffset = getPinnedCellOffset(gridPinnedColumnPositionLookup[pinnedPosition], column.computedWidth, indexRelativeToAllColumns, columnPositions, dimensions);
198
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
221
199
  if (rowNode?.type === 'skeletonRow') {
222
200
  return /*#__PURE__*/_jsx(slots.skeletonCell, {
223
201
  type: column.type,
@@ -236,7 +214,9 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
236
214
  const canReorderColumn = !(disableColumnReorder || column.disableReorder);
237
215
  const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
238
216
  const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
239
- const cellIsNotVisible = pinnedPosition === PinnedPosition.VIRTUAL;
217
+ const cellIsNotVisible = pinnedPosition === PinnedColumnPosition.VIRTUAL;
218
+ const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
219
+ const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
240
220
  return /*#__PURE__*/_jsx(slots.cell, _extends({
241
221
  column: column,
242
222
  width: width,
@@ -249,9 +229,8 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
249
229
  isNotVisible: cellIsNotVisible,
250
230
  pinnedOffset: pinnedOffset,
251
231
  pinnedPosition: pinnedPosition,
252
- sectionIndex: indexInSection,
253
- sectionLength: sectionLength,
254
- gridHasFiller: gridHasFiller
232
+ showLeftBorder: showLeftBorder,
233
+ showRightBorder: showRightBorder
255
234
  }, slotProps?.cell), column.field);
256
235
  };
257
236
 
@@ -262,25 +241,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
262
241
  }
263
242
  const leftCells = pinnedColumns.left.map((column, i) => {
264
243
  const indexRelativeToAllColumns = i;
265
- return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedPosition.LEFT);
244
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedColumnPosition.LEFT);
266
245
  });
267
246
  const rightCells = pinnedColumns.right.map((column, i) => {
268
247
  const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
269
- return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedPosition.RIGHT);
248
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedColumnPosition.RIGHT);
270
249
  });
271
250
  const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
272
251
  const cells = [];
273
252
  if (hasVirtualFocusCellLeft) {
274
- cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));
275
- }
276
- let firstColumnIndex;
277
- let lastColumnIndex;
278
- if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
279
- firstColumnIndex = 0;
280
- lastColumnIndex = visibleColumns.length;
281
- } else {
282
- firstColumnIndex = renderContext.firstColumnIndex;
283
- lastColumnIndex = renderContext.lastColumnIndex;
253
+ cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
284
254
  }
285
255
  for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
286
256
  const column = visibleColumns[i];
@@ -291,7 +261,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
291
261
  cells.push(getCell(column, indexInSection, i, middleColumnsLength));
292
262
  }
293
263
  if (hasVirtualFocusCellRight) {
294
- cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));
264
+ cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
295
265
  }
296
266
  const eventHandlers = row ? {
297
267
  onClick: publishClick,
@@ -301,8 +271,6 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
301
271
  onMouseOut: publish('rowMouseOut', onMouseOut),
302
272
  onMouseOver: publish('rowMouseOver', onMouseOver)
303
273
  } : null;
304
- const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth - scrollbarWidth;
305
- const emptyCellWidth = Math.max(0, expandedWidth);
306
274
  return /*#__PURE__*/_jsxs("div", _extends({
307
275
  "data-id": rowId,
308
276
  "data-rowindex": index,
@@ -317,11 +285,9 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
317
285
  style: {
318
286
  width: offsetLeft
319
287
  }
320
- }), cells, emptyCellWidth > 0 && /*#__PURE__*/_jsx(EmptyCell, {
321
- width: emptyCellWidth
322
- }), rightCells.length > 0 && /*#__PURE__*/_jsx("div", {
288
+ }), cells, /*#__PURE__*/_jsx("div", {
323
289
  role: "presentation",
324
- className: gridClasses.filler
290
+ className: clsx(gridClasses.cell, gridClasses.cellEmpty)
325
291
  }), rightCells, scrollbarWidth !== 0 && /*#__PURE__*/_jsx(ScrollbarFiller, {
326
292
  pinnedRight: pinnedColumns.right.length > 0
327
293
  })]
@@ -332,48 +298,14 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
332
298
  // | These PropTypes are generated from the TypeScript type definitions |
333
299
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
334
300
  // ----------------------------------------------------------------------
335
- dimensions: PropTypes.shape({
336
- bottomContainerHeight: PropTypes.number.isRequired,
337
- columnsTotalWidth: PropTypes.number.isRequired,
338
- contentSize: PropTypes.shape({
339
- height: PropTypes.number.isRequired,
340
- width: PropTypes.number.isRequired
341
- }).isRequired,
342
- groupHeaderHeight: PropTypes.number.isRequired,
343
- hasScrollX: PropTypes.bool.isRequired,
344
- hasScrollY: PropTypes.bool.isRequired,
345
- headerFilterHeight: PropTypes.number.isRequired,
346
- headerHeight: PropTypes.number.isRequired,
347
- headersTotalHeight: PropTypes.number.isRequired,
348
- isReady: PropTypes.bool.isRequired,
349
- leftPinnedWidth: PropTypes.number.isRequired,
350
- minimumSize: PropTypes.shape({
351
- height: PropTypes.number.isRequired,
352
- width: PropTypes.number.isRequired
353
- }).isRequired,
354
- rightPinnedWidth: PropTypes.number.isRequired,
355
- root: PropTypes.shape({
356
- height: PropTypes.number.isRequired,
357
- width: PropTypes.number.isRequired
358
- }).isRequired,
359
- rowHeight: PropTypes.number.isRequired,
360
- rowWidth: PropTypes.number.isRequired,
361
- scrollbarSize: PropTypes.number.isRequired,
362
- topContainerHeight: PropTypes.number.isRequired,
363
- viewportInnerSize: PropTypes.shape({
364
- height: PropTypes.number.isRequired,
365
- width: PropTypes.number.isRequired
366
- }).isRequired,
367
- viewportOuterSize: PropTypes.shape({
368
- height: PropTypes.number.isRequired,
369
- width: PropTypes.number.isRequired
370
- }).isRequired
371
- }).isRequired,
301
+ columnsTotalWidth: PropTypes.number.isRequired,
302
+ firstColumnIndex: PropTypes.number.isRequired,
372
303
  /**
373
304
  * Determines which cell has focus.
374
305
  * If `null`, no cell in this row has focus.
375
306
  */
376
307
  focusedColumnIndex: PropTypes.number,
308
+ gridHasFiller: PropTypes.bool.isRequired,
377
309
  /**
378
310
  * Index of the row in the whole sorted and filtered dataset.
379
311
  * If some rows above have expanded children, this index also take those children into account.
@@ -382,6 +314,7 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
382
314
  isFirstVisible: PropTypes.bool.isRequired,
383
315
  isLastVisible: PropTypes.bool.isRequired,
384
316
  isNotVisible: PropTypes.bool.isRequired,
317
+ lastColumnIndex: PropTypes.number.isRequired,
385
318
  offsetLeft: PropTypes.number.isRequired,
386
319
  offsetTop: PropTypes.number,
387
320
  onClick: PropTypes.func,
@@ -389,22 +322,12 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
389
322
  onMouseEnter: PropTypes.func,
390
323
  onMouseLeave: PropTypes.func,
391
324
  pinnedColumns: PropTypes.object.isRequired,
392
- renderContext: PropTypes.shape({
393
- firstColumnIndex: PropTypes.number.isRequired,
394
- firstRowIndex: PropTypes.number.isRequired,
395
- lastColumnIndex: PropTypes.number.isRequired,
396
- lastRowIndex: PropTypes.number.isRequired
397
- }).isRequired,
398
325
  row: PropTypes.object.isRequired,
399
326
  rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
400
327
  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
328
+ scrollbarWidth: PropTypes.number.isRequired,
401
329
  selected: PropTypes.bool.isRequired,
402
330
  showBottomBorder: PropTypes.bool.isRequired,
403
- /**
404
- * Determines which cell should be tabbable by having tabIndex=0.
405
- * If `null`, no cell in this row is in the tab sequence.
406
- */
407
- tabbableCell: PropTypes.string,
408
331
  visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired
409
332
  } : void 0;
410
333
  const MemoizedGridRow = fastMemo(GridRow);
@@ -4,15 +4,19 @@ import clsx from 'clsx';
4
4
  import { styled } from '@mui/system';
5
5
  import useForkRef from '@mui/utils/useForkRef';
6
6
  import composeClasses from '@mui/utils/composeClasses';
7
+ import { useRtl } from '@mui/system/RtlProvider';
7
8
  import { forwardRef } from '@mui/x-internals/forwardRef';
8
9
  import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
9
10
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
10
- import { GridPinnedColumnPosition, gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridDimensionsSelector, gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, useGridApiEventHandler, useGridSelector } from "../hooks/index.js";
11
+ import { gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridDimensionsSelector, gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, useGridApiEventHandler, useGridSelector } from "../hooks/index.js";
12
+ import { PinnedColumnPosition } from "../internals/constants.js";
11
13
  import { getDataGridUtilityClass, gridClasses } from "../constants/gridClasses.js";
12
14
  import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.js";
13
15
  import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.js";
14
16
  import { escapeOperandAttributeSelector } from "../utils/domUtils.js";
15
17
  import { GridScrollbarFillerCell } from "./GridScrollbarFillerCell.js";
18
+ import { rtlFlipSide } from "../utils/rtlFlipSide.js";
19
+ import { attachPinnedStyle } from "../internals/utils/index.js";
16
20
  import { jsx as _jsx } from "react/jsx-runtime";
17
21
  const SkeletonOverlay = styled('div', {
18
22
  name: 'MuiDataGrid',
@@ -40,6 +44,7 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
40
44
  const {
41
45
  slots
42
46
  } = rootProps;
47
+ const isRtl = useRtl();
43
48
  const classes = useUtilityClasses({
44
49
  classes: rootProps.classes
45
50
  });
@@ -55,18 +60,12 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
55
60
  const allVisibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
56
61
  const columns = React.useMemo(() => allVisibleColumns.slice(0, inViewportCount), [allVisibleColumns, inViewportCount]);
57
62
  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
58
- const getPinnedStyle = React.useCallback((computedWidth, index, position) => {
59
- const pinnedOffset = getPinnedCellOffset(position, computedWidth, index, positions, dimensions);
60
- return {
61
- [position]: pinnedOffset
62
- };
63
- }, [dimensions, positions]);
64
63
  const getPinnedPosition = React.useCallback(field => {
65
64
  if (pinnedColumns.left.findIndex(col => col.field === field) !== -1) {
66
- return GridPinnedColumnPosition.LEFT;
65
+ return PinnedColumnPosition.LEFT;
67
66
  }
68
67
  if (pinnedColumns.right.findIndex(col => col.field === field) !== -1) {
69
- return GridPinnedColumnPosition.RIGHT;
68
+ return PinnedColumnPosition.RIGHT;
70
69
  }
71
70
  return undefined;
72
71
  }, [pinnedColumns.left, pinnedColumns.right]);
@@ -77,13 +76,15 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
77
76
  for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {
78
77
  const column = columns[colIndex];
79
78
  const pinnedPosition = getPinnedPosition(column.field);
80
- const isPinnedLeft = pinnedPosition === GridPinnedColumnPosition.LEFT;
81
- const isPinnedRight = pinnedPosition === GridPinnedColumnPosition.RIGHT;
82
- const sectionLength = pinnedPosition ? pinnedColumns[pinnedPosition].length // pinned section
79
+ const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
80
+ const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
81
+ const pinnedSide = rtlFlipSide(pinnedPosition, isRtl);
82
+ const sectionLength = pinnedSide ? pinnedColumns[pinnedSide].length // pinned section
83
83
  : columns.length - pinnedColumns.left.length - pinnedColumns.right.length; // middle section
84
- const sectionIndex = pinnedPosition ? pinnedColumns[pinnedPosition].findIndex(col => col.field === column.field) // pinned section
84
+ const sectionIndex = pinnedSide ? pinnedColumns[pinnedSide].findIndex(col => col.field === column.field) // pinned section
85
85
  : colIndex - pinnedColumns.left.length; // middle section
86
- const pinnedStyle = pinnedPosition && getPinnedStyle(column.computedWidth, colIndex, pinnedPosition);
86
+ const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
87
+ const pinnedStyle = attachPinnedStyle({}, isRtl, pinnedPosition, getPinnedCellOffset(pinnedPosition, column.computedWidth, colIndex, positions, dimensions.columnsTotalWidth, scrollbarWidth));
87
88
  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
88
89
  const showRightBorder = shouldCellShowRightBorder(pinnedPosition, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
89
90
  const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, sectionIndex);
@@ -97,7 +98,6 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
97
98
  width: emptyCellWidth,
98
99
  empty: true
99
100
  }, `skeleton-filler-column-${i}`);
100
- const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
101
101
  const hasScrollbarFiller = isLastColumn && scrollbarWidth !== 0;
102
102
  if (hasFillerBefore) {
103
103
  rowCells.push(emptyCell);
@@ -129,7 +129,7 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
129
129
  }, `skeleton-row-${i}`));
130
130
  }
131
131
  return array;
132
- }, [slots, columns, pinnedColumns, skeletonRowsCount, rootProps.showCellVerticalBorder, dimensions.columnsTotalWidth, dimensions.viewportOuterSize.width, dimensions.rowHeight, dimensions.hasScrollY, dimensions.scrollbarSize, getPinnedPosition, getPinnedStyle]);
132
+ }, [slots, columns, pinnedColumns, skeletonRowsCount, rootProps.showCellVerticalBorder, dimensions, positions, getPinnedPosition, isRtl]);
133
133
 
134
134
  // Sync the column resize of the overlay columns with the grid
135
135
  const handleColumnResize = params => {
@@ -143,8 +143,8 @@ const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverla
143
143
  }
144
144
  const resizedColIndex = columns.findIndex(col => col.field === colDef.field);
145
145
  const pinnedPosition = getPinnedPosition(colDef.field);
146
- const isPinnedLeft = pinnedPosition === GridPinnedColumnPosition.LEFT;
147
- const isPinnedRight = pinnedPosition === GridPinnedColumnPosition.RIGHT;
146
+ const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
147
+ const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
148
148
  const currentWidth = getComputedStyle(cells[0]).getPropertyValue('--width');
149
149
  const delta = parseInt(currentWidth, 10) - width;
150
150
  if (cells) {