@mui/x-data-grid 8.0.0-alpha.7 → 8.0.0-alpha.8

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 (322) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/DataGrid/DataGrid.js +4 -5
  3. package/DataGrid/useDataGridComponent.js +1 -1
  4. package/components/GridHeaders.js +2 -2
  5. package/components/GridRow.d.ts +5 -9
  6. package/components/GridRow.js +26 -78
  7. package/components/GridSkeletonLoadingOverlay.js +18 -18
  8. package/components/cell/GridCell.d.ts +9 -16
  9. package/components/cell/GridCell.js +17 -35
  10. package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -5
  11. package/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  12. package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -5
  13. package/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  14. package/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  15. package/components/containers/GridRoot.d.ts +2 -2
  16. package/components/containers/GridRoot.js +14 -6
  17. package/components/containers/GridRootStyles.js +7 -0
  18. package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +1 -0
  19. package/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  20. package/components/panel/filterPanel/GridFilterInputDate.d.ts +2 -1
  21. package/components/panel/filterPanel/GridFilterInputDate.js +32 -29
  22. package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  23. package/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  24. package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +1 -0
  25. package/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  26. package/components/panel/filterPanel/GridFilterInputValue.d.ts +1 -0
  27. package/components/panel/filterPanel/GridFilterInputValue.js +34 -28
  28. package/components/panel/filterPanel/GridFilterInputValueProps.d.ts +1 -1
  29. package/components/virtualization/GridVirtualScrollbar.js +11 -12
  30. package/components/virtualization/GridVirtualScroller.js +4 -4
  31. package/constants/gridClasses.d.ts +12 -0
  32. package/constants/gridClasses.js +1 -1
  33. package/constants/localeTextConstants.js +1 -0
  34. package/context/GridContextProvider.d.ts +1 -1
  35. package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
  36. package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
  37. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +5 -7
  38. package/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  39. package/hooks/features/columnMenu/useGridColumnMenu.d.ts +1 -1
  40. package/hooks/features/columns/gridColumnsUtils.d.ts +3 -3
  41. package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
  42. package/hooks/features/columns/useGridColumns.d.ts +1 -1
  43. package/hooks/features/density/useGridDensity.d.ts +1 -1
  44. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  45. package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
  46. package/hooks/features/editing/useGridCellEditing.js +1 -1
  47. package/hooks/features/editing/useGridEditing.d.ts +1 -1
  48. package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
  49. package/hooks/features/editing/useGridRowEditing.js +1 -1
  50. package/hooks/features/events/useGridEvents.d.ts +1 -1
  51. package/hooks/features/export/serializers/csvSerializer.d.ts +1 -1
  52. package/hooks/features/export/useGridCsvExport.d.ts +1 -1
  53. package/hooks/features/export/useGridPrintExport.d.ts +1 -1
  54. package/hooks/features/export/utils.d.ts +1 -1
  55. package/hooks/features/filter/gridFilterSelector.d.ts +1 -1
  56. package/hooks/features/filter/gridFilterSelector.js +6 -1
  57. package/hooks/features/filter/gridFilterUtils.d.ts +6 -6
  58. package/hooks/features/filter/gridFilterUtils.js +3 -3
  59. package/hooks/features/filter/useGridFilter.d.ts +1 -1
  60. package/hooks/features/focus/useGridFocus.d.ts +1 -1
  61. package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
  62. package/hooks/features/keyboardNavigation/utils.d.ts +2 -2
  63. package/hooks/features/listView/useGridListView.d.ts +1 -1
  64. package/hooks/features/pagination/gridPaginationInterfaces.d.ts +3 -0
  65. package/hooks/features/pagination/gridPaginationSelector.d.ts +21 -2
  66. package/hooks/features/pagination/gridPaginationSelector.js +39 -1
  67. package/hooks/features/pagination/useGridPagination.d.ts +2 -2
  68. package/hooks/features/pagination/useGridPagination.js +5 -3
  69. package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
  70. package/hooks/features/pagination/useGridPaginationModel.d.ts +1 -1
  71. package/hooks/features/pagination/useGridPaginationModel.js +23 -1
  72. package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
  73. package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
  74. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  75. package/hooks/features/rowSelection/utils.d.ts +2 -2
  76. package/hooks/features/rows/gridRowSpanningUtils.d.ts +1 -1
  77. package/hooks/features/rows/gridRowsSelector.js +1 -1
  78. package/hooks/features/rows/gridRowsUtils.d.ts +3 -3
  79. package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
  80. package/hooks/features/rows/useGridRowSpanning.d.ts +1 -1
  81. package/hooks/features/rows/useGridRows.d.ts +1 -1
  82. package/hooks/features/rows/useGridRows.js +2 -2
  83. package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
  84. package/hooks/features/scroll/useGridScroll.d.ts +1 -1
  85. package/hooks/features/sorting/gridSortingUtils.d.ts +2 -2
  86. package/hooks/features/sorting/gridSortingUtils.js +2 -2
  87. package/hooks/features/sorting/useGridSorting.d.ts +1 -1
  88. package/hooks/features/statePersistence/useGridStatePersistence.d.ts +1 -1
  89. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.d.ts +6 -0
  90. package/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  91. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
  92. package/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  93. package/hooks/features/virtualization/useGridVirtualization.d.ts +1 -1
  94. package/hooks/utils/useGridApiContext.d.ts +1 -1
  95. package/hooks/utils/useGridApiEventHandler.d.ts +3 -3
  96. package/hooks/utils/useGridNativeEventListener.d.ts +1 -1
  97. package/hooks/utils/useGridPrivateApiContext.d.ts +1 -1
  98. package/hooks/utils/useGridSelector.d.ts +1 -1
  99. package/hooks/utils/useGridVisibleRows.d.ts +7 -5
  100. package/hooks/utils/useGridVisibleRows.js +5 -28
  101. package/index.js +1 -1
  102. package/internals/constants.d.ts +6 -0
  103. package/internals/constants.js +8 -1
  104. package/internals/index.d.ts +1 -0
  105. package/internals/index.js +1 -0
  106. package/internals/utils/attachPinnedStyle.d.ts +2 -0
  107. package/internals/utils/attachPinnedStyle.js +9 -0
  108. package/internals/utils/getPinnedCellOffset.d.ts +3 -3
  109. package/internals/utils/getPinnedCellOffset.js +6 -7
  110. package/internals/utils/index.d.ts +1 -0
  111. package/internals/utils/index.js +2 -1
  112. package/locales/arSD.js +2 -0
  113. package/locales/beBY.js +1 -0
  114. package/locales/bgBG.js +2 -0
  115. package/locales/csCZ.js +2 -0
  116. package/locales/daDK.js +2 -0
  117. package/locales/deDE.js +2 -0
  118. package/locales/elGR.js +2 -0
  119. package/locales/esES.js +2 -0
  120. package/locales/faIR.js +2 -0
  121. package/locales/fiFI.js +2 -0
  122. package/locales/frFR.js +2 -0
  123. package/locales/heIL.js +2 -0
  124. package/locales/hrHR.js +2 -0
  125. package/locales/huHU.js +2 -0
  126. package/locales/isIS.js +2 -0
  127. package/locales/itIT.js +2 -0
  128. package/locales/jaJP.js +2 -0
  129. package/locales/koKR.js +2 -0
  130. package/locales/nbNO.js +2 -0
  131. package/locales/nlNL.js +2 -0
  132. package/locales/nnNO.js +2 -0
  133. package/locales/plPL.js +2 -0
  134. package/locales/ptBR.js +2 -0
  135. package/locales/ptPT.js +2 -0
  136. package/locales/roRO.js +2 -0
  137. package/locales/ruRU.js +2 -0
  138. package/locales/skSK.js +2 -0
  139. package/locales/svSE.js +2 -0
  140. package/locales/trTR.js +2 -0
  141. package/locales/ukUA.js +2 -0
  142. package/locales/urPK.js +2 -0
  143. package/locales/viVN.js +2 -0
  144. package/locales/zhCN.js +2 -0
  145. package/locales/zhHK.js +2 -0
  146. package/locales/zhTW.js +2 -0
  147. package/material/index.js +2 -1
  148. package/models/api/gridLocaleTextApi.d.ts +1 -0
  149. package/models/colDef/gridColDef.d.ts +8 -8
  150. package/models/events/gridEventLookup.d.ts +6 -1
  151. package/models/gridExport.d.ts +1 -1
  152. package/models/gridFilterOperator.d.ts +1 -1
  153. package/models/gridIconSlotsComponent.d.ts +5 -0
  154. package/models/gridStateCommunity.d.ts +4 -0
  155. package/modern/DataGrid/DataGrid.js +4 -5
  156. package/modern/DataGrid/useDataGridComponent.js +1 -1
  157. package/modern/components/GridHeaders.js +2 -2
  158. package/modern/components/GridRow.js +26 -78
  159. package/modern/components/GridSkeletonLoadingOverlay.js +18 -18
  160. package/modern/components/cell/GridCell.js +17 -35
  161. package/modern/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  162. package/modern/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  163. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +2 -2
  164. package/modern/components/containers/GridRoot.js +14 -6
  165. package/modern/components/containers/GridRootStyles.js +7 -0
  166. package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  167. package/modern/components/panel/filterPanel/GridFilterInputDate.js +32 -29
  168. package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  169. package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  170. package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  171. package/modern/components/panel/filterPanel/GridFilterInputValue.js +34 -28
  172. package/modern/components/virtualization/GridVirtualScrollbar.js +11 -12
  173. package/modern/components/virtualization/GridVirtualScroller.js +4 -4
  174. package/modern/constants/gridClasses.js +1 -1
  175. package/modern/constants/localeTextConstants.js +1 -0
  176. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +34 -76
  177. package/modern/hooks/features/editing/useGridCellEditing.js +1 -1
  178. package/modern/hooks/features/editing/useGridRowEditing.js +1 -1
  179. package/modern/hooks/features/filter/gridFilterSelector.js +6 -1
  180. package/modern/hooks/features/filter/gridFilterUtils.js +3 -3
  181. package/modern/hooks/features/pagination/gridPaginationSelector.js +39 -1
  182. package/modern/hooks/features/pagination/useGridPagination.js +5 -3
  183. package/modern/hooks/features/pagination/useGridPaginationModel.js +23 -1
  184. package/modern/hooks/features/rows/gridRowsSelector.js +1 -1
  185. package/modern/hooks/features/rows/useGridRows.js +2 -2
  186. package/modern/hooks/features/sorting/gridSortingUtils.js +2 -2
  187. package/modern/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +42 -0
  188. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  189. package/modern/hooks/utils/useGridVisibleRows.js +5 -28
  190. package/modern/index.js +1 -1
  191. package/modern/internals/constants.js +8 -1
  192. package/modern/internals/index.js +1 -0
  193. package/modern/internals/utils/attachPinnedStyle.js +9 -0
  194. package/modern/internals/utils/getPinnedCellOffset.js +6 -7
  195. package/modern/internals/utils/index.js +2 -1
  196. package/modern/locales/arSD.js +2 -0
  197. package/modern/locales/beBY.js +1 -0
  198. package/modern/locales/bgBG.js +2 -0
  199. package/modern/locales/csCZ.js +2 -0
  200. package/modern/locales/daDK.js +2 -0
  201. package/modern/locales/deDE.js +2 -0
  202. package/modern/locales/elGR.js +2 -0
  203. package/modern/locales/esES.js +2 -0
  204. package/modern/locales/faIR.js +2 -0
  205. package/modern/locales/fiFI.js +2 -0
  206. package/modern/locales/frFR.js +2 -0
  207. package/modern/locales/heIL.js +2 -0
  208. package/modern/locales/hrHR.js +2 -0
  209. package/modern/locales/huHU.js +2 -0
  210. package/modern/locales/isIS.js +2 -0
  211. package/modern/locales/itIT.js +2 -0
  212. package/modern/locales/jaJP.js +2 -0
  213. package/modern/locales/koKR.js +2 -0
  214. package/modern/locales/nbNO.js +2 -0
  215. package/modern/locales/nlNL.js +2 -0
  216. package/modern/locales/nnNO.js +2 -0
  217. package/modern/locales/plPL.js +2 -0
  218. package/modern/locales/ptBR.js +2 -0
  219. package/modern/locales/ptPT.js +2 -0
  220. package/modern/locales/roRO.js +2 -0
  221. package/modern/locales/ruRU.js +2 -0
  222. package/modern/locales/skSK.js +2 -0
  223. package/modern/locales/svSE.js +2 -0
  224. package/modern/locales/trTR.js +2 -0
  225. package/modern/locales/ukUA.js +2 -0
  226. package/modern/locales/urPK.js +2 -0
  227. package/modern/locales/viVN.js +2 -0
  228. package/modern/locales/zhCN.js +2 -0
  229. package/modern/locales/zhHK.js +2 -0
  230. package/modern/locales/zhTW.js +2 -0
  231. package/modern/material/index.js +2 -1
  232. package/modern/utils/cellBorderUtils.js +5 -5
  233. package/modern/utils/domUtils.js +7 -2
  234. package/modern/utils/rtlFlipSide.js +22 -0
  235. package/node/DataGrid/DataGrid.js +2 -3
  236. package/node/DataGrid/useDataGridComponent.js +1 -1
  237. package/node/components/GridHeaders.js +2 -2
  238. package/node/components/GridRow.js +25 -77
  239. package/node/components/GridSkeletonLoadingOverlay.js +17 -17
  240. package/node/components/cell/GridCell.js +18 -36
  241. package/node/components/columnHeaders/GridColumnGroupHeader.js +7 -10
  242. package/node/components/columnHeaders/GridColumnHeaderItem.js +13 -12
  243. package/node/components/columnSelection/GridCellCheckboxRenderer.js +1 -1
  244. package/node/components/containers/GridRoot.js +14 -6
  245. package/node/components/containers/GridRootStyles.js +7 -0
  246. package/node/components/panel/filterPanel/GridFilterInputBoolean.js +12 -16
  247. package/node/components/panel/filterPanel/GridFilterInputDate.js +31 -28
  248. package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -1
  249. package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -1
  250. package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +13 -17
  251. package/node/components/panel/filterPanel/GridFilterInputValue.js +33 -27
  252. package/node/components/virtualization/GridVirtualScrollbar.js +11 -12
  253. package/node/components/virtualization/GridVirtualScroller.js +4 -4
  254. package/node/constants/gridClasses.js +1 -1
  255. package/node/constants/localeTextConstants.js +1 -0
  256. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +32 -74
  257. package/node/hooks/features/editing/useGridCellEditing.js +1 -1
  258. package/node/hooks/features/editing/useGridRowEditing.js +1 -1
  259. package/node/hooks/features/filter/gridFilterSelector.js +6 -1
  260. package/node/hooks/features/filter/gridFilterUtils.js +3 -3
  261. package/node/hooks/features/pagination/gridPaginationSelector.js +41 -3
  262. package/node/hooks/features/pagination/useGridPagination.js +5 -3
  263. package/node/hooks/features/pagination/useGridPaginationModel.js +23 -1
  264. package/node/hooks/features/rows/gridRowsSelector.js +1 -1
  265. package/node/hooks/features/rows/useGridRows.js +1 -1
  266. package/node/hooks/features/sorting/gridSortingUtils.js +2 -2
  267. package/node/hooks/features/virtualization/gridFocusedVirtualCellSelector.js +49 -0
  268. package/node/hooks/features/virtualization/useGridVirtualScroller.js +91 -42
  269. package/node/hooks/utils/useGridVisibleRows.js +3 -28
  270. package/node/index.js +1 -1
  271. package/node/internals/constants.js +9 -2
  272. package/node/internals/index.js +12 -0
  273. package/node/internals/utils/attachPinnedStyle.js +15 -0
  274. package/node/internals/utils/getPinnedCellOffset.js +6 -7
  275. package/node/internals/utils/index.js +11 -0
  276. package/node/locales/arSD.js +2 -0
  277. package/node/locales/beBY.js +1 -0
  278. package/node/locales/bgBG.js +2 -0
  279. package/node/locales/csCZ.js +2 -0
  280. package/node/locales/daDK.js +2 -0
  281. package/node/locales/deDE.js +2 -0
  282. package/node/locales/elGR.js +2 -0
  283. package/node/locales/esES.js +2 -0
  284. package/node/locales/faIR.js +2 -0
  285. package/node/locales/fiFI.js +2 -0
  286. package/node/locales/frFR.js +2 -0
  287. package/node/locales/heIL.js +2 -0
  288. package/node/locales/hrHR.js +2 -0
  289. package/node/locales/huHU.js +2 -0
  290. package/node/locales/isIS.js +2 -0
  291. package/node/locales/itIT.js +2 -0
  292. package/node/locales/jaJP.js +2 -0
  293. package/node/locales/koKR.js +2 -0
  294. package/node/locales/nbNO.js +2 -0
  295. package/node/locales/nlNL.js +2 -0
  296. package/node/locales/nnNO.js +2 -0
  297. package/node/locales/plPL.js +2 -0
  298. package/node/locales/ptBR.js +2 -0
  299. package/node/locales/ptPT.js +2 -0
  300. package/node/locales/roRO.js +2 -0
  301. package/node/locales/ruRU.js +2 -0
  302. package/node/locales/skSK.js +2 -0
  303. package/node/locales/svSE.js +2 -0
  304. package/node/locales/trTR.js +2 -0
  305. package/node/locales/ukUA.js +2 -0
  306. package/node/locales/urPK.js +2 -0
  307. package/node/locales/viVN.js +2 -0
  308. package/node/locales/zhCN.js +2 -0
  309. package/node/locales/zhHK.js +2 -0
  310. package/node/locales/zhTW.js +2 -0
  311. package/node/material/index.js +2 -1
  312. package/node/utils/cellBorderUtils.js +5 -5
  313. package/node/utils/domUtils.js +7 -2
  314. package/node/utils/rtlFlipSide.js +29 -0
  315. package/package.json +2 -2
  316. package/utils/cellBorderUtils.d.ts +3 -3
  317. package/utils/cellBorderUtils.js +5 -5
  318. package/utils/createSelector.d.ts +1 -1
  319. package/utils/domUtils.js +7 -2
  320. package/utils/getPublicApiRef.d.ts +1 -1
  321. package/utils/rtlFlipSide.d.ts +2 -0
  322. package/utils/rtlFlipSide.js +22 -0
@@ -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,22 +11,21 @@ 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
30
  const GridRow = forwardRef(function GridRow(props, refProp) {
32
31
  const {
@@ -40,13 +39,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
40
39
  visibleColumns,
41
40
  pinnedColumns,
42
41
  offsetLeft,
43
- dimensions,
44
- renderContext,
42
+ columnsTotalWidth,
43
+ firstColumnIndex,
44
+ lastColumnIndex,
45
45
  focusedColumnIndex,
46
46
  isFirstVisible,
47
47
  isLastVisible,
48
48
  isNotVisible,
49
49
  showBottomBorder,
50
+ scrollbarWidth,
51
+ gridHasFiller,
50
52
  onClick,
51
53
  onDoubleClick,
52
54
  onMouseEnter,
@@ -66,14 +68,11 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
66
68
  const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);
67
69
  const handleRef = useForkRef(ref, refProp);
68
70
  const rowNode = apiRef.current.getRowNode(rowId);
69
- const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
70
- const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
71
71
  const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;
72
72
  const editable = rootProps.editMode === GridEditModes.Row;
73
- const hasColumnVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);
74
73
  const hasFocusCell = focusedColumnIndex !== undefined;
75
- const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < renderContext.firstColumnIndex;
76
- 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;
77
76
  const classes = composeGridClasses(rootProps.classes, {
78
77
  root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']
79
78
  });
@@ -189,14 +188,14 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
189
188
  });
190
189
  rowClassNames.push(rootProps.getRowClassName(rowParams));
191
190
  }
192
- const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedPosition.NONE) => {
191
+ const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
193
192
  const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
194
193
  if (cellColSpanInfo?.spannedByColSpan) {
195
194
  return null;
196
195
  }
197
196
  const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
198
197
  const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
199
- const pinnedOffset = getPinnedCellOffset(gridPinnedColumnPositionLookup[pinnedPosition], column.computedWidth, indexRelativeToAllColumns, columnPositions, dimensions);
198
+ const pinnedOffset = getPinnedCellOffset(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
200
199
  if (rowNode?.type === 'skeletonRow') {
201
200
  return /*#__PURE__*/_jsx(slots.skeletonCell, {
202
201
  type: column.type,
@@ -215,7 +214,9 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
215
214
  const canReorderColumn = !(disableColumnReorder || column.disableReorder);
216
215
  const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;
217
216
  const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);
218
- 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);
219
220
  return /*#__PURE__*/_jsx(slots.cell, _extends({
220
221
  column: column,
221
222
  width: width,
@@ -228,9 +229,8 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
228
229
  isNotVisible: cellIsNotVisible,
229
230
  pinnedOffset: pinnedOffset,
230
231
  pinnedPosition: pinnedPosition,
231
- sectionIndex: indexInSection,
232
- sectionLength: sectionLength,
233
- gridHasFiller: gridHasFiller
232
+ showLeftBorder: showLeftBorder,
233
+ showRightBorder: showRightBorder
234
234
  }, slotProps?.cell), column.field);
235
235
  };
236
236
 
@@ -241,25 +241,16 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
241
241
  }
242
242
  const leftCells = pinnedColumns.left.map((column, i) => {
243
243
  const indexRelativeToAllColumns = i;
244
- return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedPosition.LEFT);
244
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedColumnPosition.LEFT);
245
245
  });
246
246
  const rightCells = pinnedColumns.right.map((column, i) => {
247
247
  const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
248
- return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedPosition.RIGHT);
248
+ return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedColumnPosition.RIGHT);
249
249
  });
250
250
  const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
251
251
  const cells = [];
252
252
  if (hasVirtualFocusCellLeft) {
253
- cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));
254
- }
255
- let firstColumnIndex;
256
- let lastColumnIndex;
257
- if (!rootProps.disableVirtualization && !hasColumnVirtualization) {
258
- firstColumnIndex = 0;
259
- lastColumnIndex = visibleColumns.length;
260
- } else {
261
- firstColumnIndex = renderContext.firstColumnIndex;
262
- lastColumnIndex = renderContext.lastColumnIndex;
253
+ cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
263
254
  }
264
255
  for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
265
256
  const column = visibleColumns[i];
@@ -270,7 +261,7 @@ const GridRow = forwardRef(function GridRow(props, refProp) {
270
261
  cells.push(getCell(column, indexInSection, i, middleColumnsLength));
271
262
  }
272
263
  if (hasVirtualFocusCellRight) {
273
- 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));
274
265
  }
275
266
  const eventHandlers = row ? {
276
267
  onClick: publishClick,
@@ -307,48 +298,14 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
307
298
  // | These PropTypes are generated from the TypeScript type definitions |
308
299
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
309
300
  // ----------------------------------------------------------------------
310
- dimensions: PropTypes.shape({
311
- bottomContainerHeight: PropTypes.number.isRequired,
312
- columnsTotalWidth: PropTypes.number.isRequired,
313
- contentSize: PropTypes.shape({
314
- height: PropTypes.number.isRequired,
315
- width: PropTypes.number.isRequired
316
- }).isRequired,
317
- groupHeaderHeight: PropTypes.number.isRequired,
318
- hasScrollX: PropTypes.bool.isRequired,
319
- hasScrollY: PropTypes.bool.isRequired,
320
- headerFilterHeight: PropTypes.number.isRequired,
321
- headerHeight: PropTypes.number.isRequired,
322
- headersTotalHeight: PropTypes.number.isRequired,
323
- isReady: PropTypes.bool.isRequired,
324
- leftPinnedWidth: PropTypes.number.isRequired,
325
- minimumSize: PropTypes.shape({
326
- height: PropTypes.number.isRequired,
327
- width: PropTypes.number.isRequired
328
- }).isRequired,
329
- rightPinnedWidth: PropTypes.number.isRequired,
330
- root: PropTypes.shape({
331
- height: PropTypes.number.isRequired,
332
- width: PropTypes.number.isRequired
333
- }).isRequired,
334
- rowHeight: PropTypes.number.isRequired,
335
- rowWidth: PropTypes.number.isRequired,
336
- scrollbarSize: PropTypes.number.isRequired,
337
- topContainerHeight: PropTypes.number.isRequired,
338
- viewportInnerSize: PropTypes.shape({
339
- height: PropTypes.number.isRequired,
340
- width: PropTypes.number.isRequired
341
- }).isRequired,
342
- viewportOuterSize: PropTypes.shape({
343
- height: PropTypes.number.isRequired,
344
- width: PropTypes.number.isRequired
345
- }).isRequired
346
- }).isRequired,
301
+ columnsTotalWidth: PropTypes.number.isRequired,
302
+ firstColumnIndex: PropTypes.number.isRequired,
347
303
  /**
348
304
  * Determines which cell has focus.
349
305
  * If `null`, no cell in this row has focus.
350
306
  */
351
307
  focusedColumnIndex: PropTypes.number,
308
+ gridHasFiller: PropTypes.bool.isRequired,
352
309
  /**
353
310
  * Index of the row in the whole sorted and filtered dataset.
354
311
  * If some rows above have expanded children, this index also take those children into account.
@@ -357,6 +314,7 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
357
314
  isFirstVisible: PropTypes.bool.isRequired,
358
315
  isLastVisible: PropTypes.bool.isRequired,
359
316
  isNotVisible: PropTypes.bool.isRequired,
317
+ lastColumnIndex: PropTypes.number.isRequired,
360
318
  offsetLeft: PropTypes.number.isRequired,
361
319
  offsetTop: PropTypes.number,
362
320
  onClick: PropTypes.func,
@@ -364,22 +322,12 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
364
322
  onMouseEnter: PropTypes.func,
365
323
  onMouseLeave: PropTypes.func,
366
324
  pinnedColumns: PropTypes.object.isRequired,
367
- renderContext: PropTypes.shape({
368
- firstColumnIndex: PropTypes.number.isRequired,
369
- firstRowIndex: PropTypes.number.isRequired,
370
- lastColumnIndex: PropTypes.number.isRequired,
371
- lastRowIndex: PropTypes.number.isRequired
372
- }).isRequired,
373
325
  row: PropTypes.object.isRequired,
374
326
  rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
375
327
  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
328
+ scrollbarWidth: PropTypes.number.isRequired,
376
329
  selected: PropTypes.bool.isRequired,
377
330
  showBottomBorder: PropTypes.bool.isRequired,
378
- /**
379
- * Determines which cell should be tabbable by having tabIndex=0.
380
- * If `null`, no cell in this row is in the tab sequence.
381
- */
382
- tabbableCell: PropTypes.string,
383
331
  visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired
384
332
  } : void 0;
385
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) {
@@ -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 = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "sectionIndex", "sectionLength", "gridHasFiller", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
3
+ const _excluded = ["column", "rowId", "editCellState", "align", "children", "colIndex", "width", "className", "style", "colSpan", "disableDragEvents", "isNotVisible", "pinnedOffset", "pinnedPosition", "showRightBorder", "showLeftBorder", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"],
4
4
  _excluded2 = ["changeReason", "unstable_updateValueOnRender"];
5
5
  import * as React from 'react';
6
6
  import PropTypes from 'prop-types';
@@ -16,22 +16,16 @@ import { useGridSelector, objectShallowCompare } from "../../hooks/utils/useGrid
16
16
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
17
17
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
18
18
  import { gridFocusCellSelector } from "../../hooks/features/focus/gridFocusStateSelector.js";
19
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
20
19
  import { GridPinnedColumnPosition } from "../../hooks/features/columns/gridColumnsInterfaces.js";
20
+ import { PinnedColumnPosition } from "../../internals/constants.js";
21
21
  import { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from "../../hooks/features/rows/gridRowSpanningSelectors.js";
22
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
22
23
  import { jsx as _jsx } from "react/jsx-runtime";
23
- export let PinnedPosition = /*#__PURE__*/function (PinnedPosition) {
24
- PinnedPosition[PinnedPosition["NONE"] = 0] = "NONE";
25
- PinnedPosition[PinnedPosition["LEFT"] = 1] = "LEFT";
26
- PinnedPosition[PinnedPosition["RIGHT"] = 2] = "RIGHT";
27
- PinnedPosition[PinnedPosition["VIRTUAL"] = 3] = "VIRTUAL";
28
- return PinnedPosition;
29
- }({});
30
24
  export const gridPinnedColumnPositionLookup = {
31
- [PinnedPosition.LEFT]: GridPinnedColumnPosition.LEFT,
32
- [PinnedPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,
33
- [PinnedPosition.NONE]: undefined,
34
- [PinnedPosition.VIRTUAL]: undefined
25
+ [PinnedColumnPosition.LEFT]: GridPinnedColumnPosition.LEFT,
26
+ [PinnedColumnPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,
27
+ [PinnedColumnPosition.NONE]: undefined,
28
+ [PinnedColumnPosition.VIRTUAL]: undefined
35
29
  };
36
30
  const EMPTY_CELL_PARAMS = {
37
31
  id: -1,
@@ -69,7 +63,7 @@ const useUtilityClasses = ownerState => {
69
63
  classes
70
64
  } = ownerState;
71
65
  const slots = {
72
- root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']
66
+ root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']
73
67
  };
74
68
  return composeClasses(slots, getDataGridUtilityClass, classes);
75
69
  };
@@ -92,9 +86,8 @@ const GridCell = forwardRef(function GridCell(props, ref) {
92
86
  isNotVisible,
93
87
  pinnedOffset,
94
88
  pinnedPosition,
95
- sectionIndex,
96
- sectionLength,
97
- gridHasFiller,
89
+ showRightBorder,
90
+ showLeftBorder,
98
91
  onClick,
99
92
  onDoubleClick,
100
93
  onMouseDown,
@@ -161,9 +154,6 @@ const GridCell = forwardRef(function GridCell(props, ref) {
161
154
  const handleRef = useForkRef(ref, cellRef);
162
155
  const focusElementRef = React.useRef(null);
163
156
  const isSelectionMode = rootProps.cellSelection ?? false;
164
- const position = gridPinnedColumnPositionLookup[pinnedPosition];
165
- const showLeftBorder = shouldCellShowLeftBorder(position, sectionIndex);
166
- const showRightBorder = shouldCellShowRightBorder(position, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
167
157
  const ownerState = {
168
158
  align,
169
159
  showLeftBorder,
@@ -212,18 +202,11 @@ const GridCell = forwardRef(function GridCell(props, ref) {
212
202
  border: 0
213
203
  };
214
204
  }
215
- const cellStyle = _extends({
205
+ const cellStyle = attachPinnedStyle(_extends({
216
206
  '--width': `${width}px`
217
- }, styleProp);
218
- const isLeftPinned = pinnedPosition === PinnedPosition.LEFT;
219
- const isRightPinned = pinnedPosition === PinnedPosition.RIGHT;
220
- if (isLeftPinned || isRightPinned) {
221
- let side = isLeftPinned ? 'left' : 'right';
222
- if (isRtl) {
223
- side = isLeftPinned ? 'right' : 'left';
224
- }
225
- cellStyle[side] = pinnedOffset;
226
- }
207
+ }, styleProp), isRtl, pinnedPosition, pinnedOffset);
208
+ const isLeftPinned = pinnedPosition === PinnedColumnPosition.LEFT;
209
+ const isRightPinned = pinnedPosition === PinnedColumnPosition.RIGHT;
227
210
  if (rowSpan > 1) {
228
211
  cellStyle.height = `calc(var(--height) * ${rowSpan})`;
229
212
  cellStyle.zIndex = 5;
@@ -353,13 +336,12 @@ process.env.NODE_ENV !== "production" ? GridCell.propTypes = {
353
336
  isValidating: PropTypes.bool,
354
337
  value: PropTypes.any
355
338
  }),
356
- gridHasFiller: PropTypes.bool.isRequired,
357
339
  isNotVisible: PropTypes.bool.isRequired,
358
- pinnedOffset: PropTypes.number.isRequired,
340
+ pinnedOffset: PropTypes.number,
359
341
  pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]).isRequired,
360
342
  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
361
- sectionIndex: PropTypes.number.isRequired,
362
- sectionLength: PropTypes.number.isRequired,
343
+ showLeftBorder: PropTypes.bool.isRequired,
344
+ showRightBorder: PropTypes.bool.isRequired,
363
345
  width: PropTypes.number.isRequired
364
346
  } : void 0;
365
347
  const MemoizedGridCell = fastMemo(GridCell);
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { unstable_useId as useId, unstable_composeClasses as composeClasses } from '@mui/utils';
4
+ import { useRtl } from '@mui/system/RtlProvider';
4
5
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
5
6
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
6
7
  import { gridColumnGroupsLookupSelector } from "../../hooks/features/columnGrouping/gridColumnGroupsSelector.js";
@@ -8,7 +9,8 @@ import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
8
9
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
9
10
  import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
10
11
  import { isEventTargetInPortal } from "../../utils/domUtils.js";
11
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
12
+ import { PinnedColumnPosition } from "../../internals/constants.js";
13
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
12
14
  import { jsx as _jsx } from "react/jsx-runtime";
13
15
  const useUtilityClasses = ownerState => {
14
16
  const {
@@ -22,7 +24,7 @@ const useUtilityClasses = ownerState => {
22
24
  pinnedPosition
23
25
  } = ownerState;
24
26
  const slots = {
25
- root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
27
+ root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
26
28
  draggableContainer: ['columnHeaderDraggableContainer'],
27
29
  titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],
28
30
  titleContainerContent: ['columnHeaderTitleContainerContent']
@@ -42,12 +44,10 @@ function GridColumnGroupHeader(props) {
42
44
  tabIndex,
43
45
  isLastColumn,
44
46
  pinnedPosition,
45
- style,
46
- indexInSection,
47
- sectionLength,
48
- gridHasFiller
47
+ pinnedOffset
49
48
  } = props;
50
49
  const rootProps = useGridRootProps();
50
+ const isRtl = useRtl();
51
51
  const headerCellRef = React.useRef(null);
52
52
  const apiRef = useGridApiContext();
53
53
  const columnGroupsLookup = useGridSelector(apiRef, gridColumnGroupsLookupSelector);
@@ -72,12 +72,8 @@ function GridColumnGroupHeader(props) {
72
72
  if (groupId && render) {
73
73
  headerComponent = render(renderParams);
74
74
  }
75
- const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
76
- const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
77
75
  const ownerState = _extends({}, props, {
78
76
  classes: rootProps.classes,
79
- showLeftBorder,
80
- showRightBorder,
81
77
  headerAlign,
82
78
  depth,
83
79
  isDragging: false
@@ -110,6 +106,7 @@ function GridColumnGroupHeader(props) {
110
106
  onBlur: publish('columnGroupHeaderBlur')
111
107
  }), [publish]);
112
108
  const headerClassName = typeof group.headerClassName === 'function' ? group.headerClassName(renderParams) : group.headerClassName;
109
+ const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
113
110
  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
114
111
  ref: headerCellRef,
115
112
  classes: classes,
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
4
4
  import clsx from 'clsx';
5
5
  import { unstable_composeClasses as composeClasses, unstable_useId as useId } from '@mui/utils';
6
6
  import { fastMemo } from '@mui/x-internals/fastMemo';
7
+ import { useRtl } from '@mui/system/RtlProvider';
7
8
  import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
8
9
  import { ColumnHeaderMenuIcon } from "./ColumnHeaderMenuIcon.js";
9
10
  import { GridColumnHeaderMenu } from "../menu/columnMenu/GridColumnHeaderMenu.js";
@@ -11,7 +12,8 @@ import { gridClasses, getDataGridUtilityClass } from "../../constants/gridClasse
11
12
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
12
13
  import { GridGenericColumnHeaderItem } from "./GridGenericColumnHeaderItem.js";
13
14
  import { isEventTargetInPortal } from "../../utils/domUtils.js";
14
- import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../../utils/cellBorderUtils.js";
15
+ import { PinnedColumnPosition } from "../../internals/constants.js";
16
+ import { attachPinnedStyle } from "../../internals/utils/index.js";
15
17
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
18
  const useUtilityClasses = ownerState => {
17
19
  const {
@@ -31,7 +33,7 @@ const useUtilityClasses = ownerState => {
31
33
  // todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work
32
34
  const isColumnNumeric = colDef.type === 'number';
33
35
  const slots = {
34
- root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight',
36
+ root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight',
35
37
  // TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom
36
38
  // See https://github.com/mui/mui-x/pull/14559
37
39
  isLastUnpinned && 'columnHeader--lastUnpinned', isSiblingFocused && 'columnHeader--siblingFocused'],
@@ -56,14 +58,14 @@ function GridColumnHeaderItem(props) {
56
58
  tabIndex,
57
59
  disableReorder,
58
60
  separatorSide,
59
- style,
61
+ showLeftBorder,
62
+ showRightBorder,
60
63
  pinnedPosition,
61
- indexInSection,
62
- sectionLength,
63
- gridHasFiller
64
+ pinnedOffset
64
65
  } = props;
65
66
  const apiRef = useGridPrivateApiContext();
66
67
  const rootProps = useGridRootProps();
68
+ const isRtl = useRtl();
67
69
  const headerCellRef = React.useRef(null);
68
70
  const columnMenuId = useId();
69
71
  const columnMenuButtonId = useId();
@@ -74,8 +76,6 @@ function GridColumnHeaderItem(props) {
74
76
  if (colDef.renderHeader) {
75
77
  headerComponent = colDef.renderHeader(apiRef.current.getColumnHeaderParams(colDef.field));
76
78
  }
77
- const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
78
- const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);
79
79
  const ownerState = _extends({}, props, {
80
80
  classes: rootProps.classes,
81
81
  showRightBorder,
@@ -171,6 +171,7 @@ function GridColumnHeaderItem(props) {
171
171
  colDef
172
172
  }) : colDef.headerClassName;
173
173
  const label = colDef.headerName ?? colDef.field;
174
+ const style = React.useMemo(() => attachPinnedStyle(_extends({}, props.style), isRtl, pinnedPosition, pinnedOffset), [pinnedPosition, pinnedOffset, props.style, isRtl]);
174
175
  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({
175
176
  ref: headerCellRef,
176
177
  classes: classes,
@@ -209,18 +210,18 @@ process.env.NODE_ENV !== "production" ? GridColumnHeaderItem.propTypes = {
209
210
  columnMenuOpen: PropTypes.bool.isRequired,
210
211
  disableReorder: PropTypes.bool,
211
212
  filterItemsCounter: PropTypes.number,
212
- gridHasFiller: PropTypes.bool.isRequired,
213
213
  hasFocus: PropTypes.bool,
214
214
  headerHeight: PropTypes.number.isRequired,
215
- indexInSection: PropTypes.number.isRequired,
216
215
  isDragging: PropTypes.bool.isRequired,
217
216
  isLast: PropTypes.bool.isRequired,
218
217
  isLastUnpinned: PropTypes.bool.isRequired,
219
218
  isResizing: PropTypes.bool.isRequired,
220
219
  isSiblingFocused: PropTypes.bool.isRequired,
221
- pinnedPosition: PropTypes.oneOf(['left', 'right']),
222
- sectionLength: PropTypes.number.isRequired,
220
+ pinnedOffset: PropTypes.number,
221
+ pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]),
223
222
  separatorSide: PropTypes.oneOf(['left', 'right']),
223
+ showLeftBorder: PropTypes.bool.isRequired,
224
+ showRightBorder: PropTypes.bool.isRequired,
224
225
  sortDirection: PropTypes.oneOf(['asc', 'desc']),
225
226
  sortIndex: PropTypes.number,
226
227
  style: PropTypes.object,
@@ -8,7 +8,7 @@ import { forwardRef } from '@mui/x-internals/forwardRef';
8
8
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
9
9
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
10
10
  import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
11
- import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
11
+ import { objectShallowCompare, useGridSelector } from "../../hooks/utils/useGridSelector.js";
12
12
  import { getCheckboxPropsSelector } from "../../hooks/features/rowSelection/utils.js";
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  const useUtilityClasses = ownerState => {
@@ -76,7 +76,7 @@ const GridCellCheckboxForwardRef = forwardRef(function GridCellCheckboxRenderer(
76
76
  const {
77
77
  isIndeterminate,
78
78
  isChecked
79
- } = useGridSelector(apiRef, checkboxPropsSelector);
79
+ } = useGridSelector(apiRef, checkboxPropsSelector, undefined, objectShallowCompare);
80
80
  if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {
81
81
  return null;
82
82
  }