@mui/x-data-grid 9.0.0-beta.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +267 -1
  2. package/DataGrid/DataGrid.js +1 -0
  3. package/DataGrid/DataGrid.mjs +1 -0
  4. package/components/GridColumnUnsortedIcon.d.mts +5 -2
  5. package/components/GridColumnUnsortedIcon.d.ts +5 -2
  6. package/components/GridColumnUnsortedIcon.js +20 -6
  7. package/components/GridColumnUnsortedIcon.mjs +20 -5
  8. package/components/GridDetailPanels.d.mts +1 -4
  9. package/components/GridDetailPanels.d.ts +1 -4
  10. package/components/GridPinnedRows.d.mts +0 -2
  11. package/components/GridPinnedRows.d.ts +0 -2
  12. package/components/GridRowDragAndDropOverlay.js +1 -1
  13. package/components/GridRowDragAndDropOverlay.mjs +2 -2
  14. package/components/GridScrollbarFillerCell.js +9 -1
  15. package/components/GridScrollbarFillerCell.mjs +9 -1
  16. package/components/cell/GridCell.js +4 -2
  17. package/components/cell/GridCell.mjs +4 -2
  18. package/components/columnHeaders/GridColumnGroupHeader.js +5 -3
  19. package/components/columnHeaders/GridColumnGroupHeader.mjs +5 -3
  20. package/components/columnHeaders/GridColumnHeaderItem.js +3 -1
  21. package/components/columnHeaders/GridColumnHeaderItem.mjs +3 -1
  22. package/components/containers/GridRootStyles.js +86 -5
  23. package/components/containers/GridRootStyles.mjs +86 -5
  24. package/components/index.d.mts +3 -1
  25. package/components/index.d.ts +3 -1
  26. package/components/index.js +10 -2
  27. package/components/index.mjs +2 -1
  28. package/components/panel/filterPanel/GridFilterForm.js +1 -1
  29. package/components/panel/filterPanel/GridFilterForm.mjs +1 -1
  30. package/components/virtualization/GridBottomContainer.js +4 -1
  31. package/components/virtualization/GridBottomContainer.mjs +4 -1
  32. package/components/virtualization/GridVirtualScroller.js +55 -30
  33. package/components/virtualization/GridVirtualScroller.mjs +56 -31
  34. package/components/virtualization/GridVirtualScrollerContent.js +5 -1
  35. package/components/virtualization/GridVirtualScrollerContent.mjs +5 -1
  36. package/constants/gridClasses.d.mts +40 -1
  37. package/constants/gridClasses.d.ts +40 -1
  38. package/constants/gridClasses.js +2 -2
  39. package/constants/gridClasses.mjs +2 -2
  40. package/constants/localeTextConstants.js +1 -1
  41. package/constants/localeTextConstants.mjs +1 -1
  42. package/hooks/core/useGridVirtualizer.js +1 -0
  43. package/hooks/core/useGridVirtualizer.mjs +1 -0
  44. package/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -4
  45. package/hooks/features/columnHeaders/useGridColumnHeaders.mjs +8 -4
  46. package/hooks/features/dimensions/useGridDimensions.js +1 -0
  47. package/hooks/features/dimensions/useGridDimensions.mjs +1 -0
  48. package/hooks/features/export/useGridPrintExport.js +5 -1
  49. package/hooks/features/export/useGridPrintExport.mjs +5 -1
  50. package/hooks/features/focus/useGridFocus.js +4 -0
  51. package/hooks/features/focus/useGridFocus.mjs +4 -0
  52. package/hooks/features/rowSelection/useGridRowSelection.js +17 -1
  53. package/hooks/features/rowSelection/useGridRowSelection.mjs +17 -1
  54. package/hooks/features/virtualization/gridVirtualizationSelectors.d.mts +8 -0
  55. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +8 -0
  56. package/hooks/features/virtualization/gridVirtualizationSelectors.js +8 -1
  57. package/hooks/features/virtualization/gridVirtualizationSelectors.mjs +7 -0
  58. package/hooks/features/virtualization/index.d.mts +1 -1
  59. package/hooks/features/virtualization/index.d.ts +1 -1
  60. package/hooks/features/virtualization/index.js +44 -13
  61. package/hooks/features/virtualization/index.mjs +1 -1
  62. package/hooks/utils/usePinnedScrollOffset.d.mts +3 -0
  63. package/hooks/utils/usePinnedScrollOffset.d.ts +3 -0
  64. package/hooks/utils/usePinnedScrollOffset.js +27 -0
  65. package/hooks/utils/usePinnedScrollOffset.mjs +21 -0
  66. package/index.js +1 -1
  67. package/index.mjs +1 -1
  68. package/internals/index.d.mts +3 -2
  69. package/internals/index.d.ts +3 -2
  70. package/internals/index.js +29 -0
  71. package/internals/index.mjs +3 -2
  72. package/locales/arSD.js +1 -1
  73. package/locales/arSD.mjs +1 -1
  74. package/locales/beBY.js +1 -1
  75. package/locales/beBY.mjs +1 -1
  76. package/locales/bgBG.js +1 -1
  77. package/locales/bgBG.mjs +1 -1
  78. package/locales/bnBD.js +1 -1
  79. package/locales/bnBD.mjs +1 -1
  80. package/locales/caES.js +1 -1
  81. package/locales/caES.mjs +1 -1
  82. package/locales/csCZ.js +1 -1
  83. package/locales/csCZ.mjs +1 -1
  84. package/locales/daDK.js +1 -1
  85. package/locales/daDK.mjs +1 -1
  86. package/locales/deDE.js +1 -1
  87. package/locales/deDE.mjs +1 -1
  88. package/locales/elGR.js +1 -1
  89. package/locales/elGR.mjs +1 -1
  90. package/locales/esES.js +1 -1
  91. package/locales/esES.mjs +1 -1
  92. package/locales/faIR.js +1 -1
  93. package/locales/faIR.mjs +1 -1
  94. package/locales/fiFI.js +1 -1
  95. package/locales/fiFI.mjs +1 -1
  96. package/locales/frFR.js +1 -1
  97. package/locales/frFR.mjs +1 -1
  98. package/locales/heIL.js +1 -1
  99. package/locales/heIL.mjs +1 -1
  100. package/locales/hrHR.js +1 -1
  101. package/locales/hrHR.mjs +1 -1
  102. package/locales/huHU.js +1 -1
  103. package/locales/huHU.mjs +1 -1
  104. package/locales/hyAM.js +1 -1
  105. package/locales/hyAM.mjs +1 -1
  106. package/locales/idID.js +1 -1
  107. package/locales/idID.mjs +1 -1
  108. package/locales/isIS.js +1 -1
  109. package/locales/isIS.mjs +1 -1
  110. package/locales/itIT.js +1 -1
  111. package/locales/itIT.mjs +1 -1
  112. package/locales/jaJP.js +1 -1
  113. package/locales/jaJP.mjs +1 -1
  114. package/locales/koKR.js +1 -1
  115. package/locales/koKR.mjs +1 -1
  116. package/locales/nbNO.js +1 -1
  117. package/locales/nbNO.mjs +1 -1
  118. package/locales/nlNL.js +1 -1
  119. package/locales/nlNL.mjs +1 -1
  120. package/locales/nnNO.js +1 -1
  121. package/locales/nnNO.mjs +1 -1
  122. package/locales/plPL.js +1 -1
  123. package/locales/plPL.mjs +1 -1
  124. package/locales/ptBR.js +1 -1
  125. package/locales/ptBR.mjs +1 -1
  126. package/locales/ptPT.js +1 -1
  127. package/locales/ptPT.mjs +1 -1
  128. package/locales/roRO.js +1 -1
  129. package/locales/roRO.mjs +1 -1
  130. package/locales/ruRU.js +1 -1
  131. package/locales/ruRU.mjs +1 -1
  132. package/locales/skSK.js +1 -1
  133. package/locales/skSK.mjs +1 -1
  134. package/locales/svSE.js +1 -1
  135. package/locales/svSE.mjs +1 -1
  136. package/locales/thTH.js +1 -1
  137. package/locales/thTH.mjs +1 -1
  138. package/locales/trTR.js +1 -1
  139. package/locales/trTR.mjs +1 -1
  140. package/locales/ukUA.js +1 -1
  141. package/locales/ukUA.mjs +1 -1
  142. package/locales/urPK.js +1 -1
  143. package/locales/urPK.mjs +1 -1
  144. package/locales/viVN.js +1 -1
  145. package/locales/viVN.mjs +1 -1
  146. package/locales/zhCN.js +1 -1
  147. package/locales/zhCN.mjs +1 -1
  148. package/locales/zhHK.js +1 -1
  149. package/locales/zhHK.mjs +1 -1
  150. package/locales/zhTW.js +1 -1
  151. package/locales/zhTW.mjs +1 -1
  152. package/material/index.js +26 -21
  153. package/material/index.mjs +26 -21
  154. package/material/variables.js +4 -4
  155. package/material/variables.mjs +4 -5
  156. package/models/api/gridLocaleTextApi.d.mts +1 -1
  157. package/models/api/gridLocaleTextApi.d.ts +1 -1
  158. package/models/gridBaseSlots.d.mts +4 -2
  159. package/models/gridBaseSlots.d.ts +4 -2
  160. package/models/props/DataGridProps.d.mts +9 -0
  161. package/models/props/DataGridProps.d.ts +9 -0
  162. package/package.json +6 -6
  163. package/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.mjs +2 -2
  164. package/utils/cleanupTracking/TimerBasedCleanupTracking.mjs +2 -2
  165. package/utils/domUtils.js +3 -2
  166. package/utils/domUtils.mjs +3 -2
  167. package/utils/keyboardUtils.d.mts +2 -0
  168. package/utils/keyboardUtils.d.ts +2 -0
  169. package/utils/keyboardUtils.js +8 -0
  170. package/utils/keyboardUtils.mjs +6 -0
@@ -293,6 +293,10 @@ export const useGridFocus = (apiRef, props) => {
293
293
  if (event.relatedTarget?.getAttribute('class')?.includes(gridClasses.columnHeader)) {
294
294
  return;
295
295
  }
296
+ // Don't clear focus when it moves to a body cell — setCellFocus already set it
297
+ if (event.relatedTarget?.getAttribute('class')?.includes(gridClasses.cell)) {
298
+ return;
299
+ }
296
300
  logger.debug(`Clearing focus`);
297
301
  apiRef.current.setState(state => _extends({}, state, {
298
302
  focus: {
@@ -334,6 +334,21 @@ You need to upgrade to DataGridPro or DataGridPremium component to unlock multip
334
334
  ids: new Set(currentSelection.ids)
335
335
  };
336
336
  const selectionManager = (0, _gridRowSelectionManager.createRowSelectionManager)(newSelectionModel);
337
+ const isOrHasSelectableDescendant = nodeId => {
338
+ const node = rowTree[nodeId];
339
+ if (!node) {
340
+ return false;
341
+ }
342
+
343
+ // Only consider nodes that are present (not filtered out) when using client-side filtering.
344
+ if (props.filterMode !== 'server' && filteredRowsLookup[nodeId] === false) {
345
+ return false;
346
+ }
347
+ if (node.type !== 'group') {
348
+ return Boolean(rowsLookup[nodeId]) && apiRef.current.isRowSelectable(nodeId);
349
+ }
350
+ return node.children.some(childId => isOrHasSelectableDescendant(childId));
351
+ };
337
352
  let hasChanged = false;
338
353
  for (const id of currentSelection.ids) {
339
354
  if (isNonExistent(id)) {
@@ -356,7 +371,8 @@ You need to upgrade to DataGridPro or DataGridPremium component to unlock multip
356
371
  continue;
357
372
  }
358
373
  // Keep previously selected tree data parents selected if all their children are filtered out
359
- if (!node.children.every(childId => filteredRowsLookup[childId] === false)) {
374
+ // or not selectable.
375
+ if (node.children.some(childId => filteredRowsLookup[childId] !== false && isOrHasSelectableDescendant(childId))) {
360
376
  selectionManager.unselect(id);
361
377
  hasChanged = true;
362
378
  }
@@ -326,6 +326,21 @@ You need to upgrade to DataGridPro or DataGridPremium component to unlock multip
326
326
  ids: new Set(currentSelection.ids)
327
327
  };
328
328
  const selectionManager = createRowSelectionManager(newSelectionModel);
329
+ const isOrHasSelectableDescendant = nodeId => {
330
+ const node = rowTree[nodeId];
331
+ if (!node) {
332
+ return false;
333
+ }
334
+
335
+ // Only consider nodes that are present (not filtered out) when using client-side filtering.
336
+ if (props.filterMode !== 'server' && filteredRowsLookup[nodeId] === false) {
337
+ return false;
338
+ }
339
+ if (node.type !== 'group') {
340
+ return Boolean(rowsLookup[nodeId]) && apiRef.current.isRowSelectable(nodeId);
341
+ }
342
+ return node.children.some(childId => isOrHasSelectableDescendant(childId));
343
+ };
329
344
  let hasChanged = false;
330
345
  for (const id of currentSelection.ids) {
331
346
  if (isNonExistent(id)) {
@@ -348,7 +363,8 @@ You need to upgrade to DataGridPro or DataGridPremium component to unlock multip
348
363
  continue;
349
364
  }
350
365
  // Keep previously selected tree data parents selected if all their children are filtered out
351
- if (!node.children.every(childId => filteredRowsLookup[childId] === false)) {
366
+ // or not selectable.
367
+ if (node.children.some(childId => filteredRowsLookup[childId] !== false && isOrHasSelectableDescendant(childId))) {
352
368
  selectionManager.unselect(id);
353
369
  hasChanged = true;
354
370
  }
@@ -27,6 +27,14 @@ export declare const gridVirtualizationColumnEnabledSelector: (args_0: import("r
27
27
  export declare const gridVirtualizationRowEnabledSelector: (args_0: import("react").RefObject<{
28
28
  state: GridStateCommunity;
29
29
  } | null>) => boolean;
30
+ /**
31
+ * Get the layout mode
32
+ * @category Virtualization
33
+ * @ignore - do not document.
34
+ */
35
+ export declare const gridVirtualizationLayoutModeSelector: (args_0: import("react").RefObject<{
36
+ state: GridStateCommunity;
37
+ } | null>) => "controlled" | "uncontrolled";
30
38
  /**
31
39
  * Get the render context
32
40
  * @category Virtualization
@@ -27,6 +27,14 @@ export declare const gridVirtualizationColumnEnabledSelector: (args_0: import("r
27
27
  export declare const gridVirtualizationRowEnabledSelector: (args_0: import("react").RefObject<{
28
28
  state: GridStateCommunity;
29
29
  } | null>) => boolean;
30
+ /**
31
+ * Get the layout mode
32
+ * @category Virtualization
33
+ * @ignore - do not document.
34
+ */
35
+ export declare const gridVirtualizationLayoutModeSelector: (args_0: import("react").RefObject<{
36
+ state: GridStateCommunity;
37
+ } | null>) => "controlled" | "uncontrolled";
30
38
  /**
31
39
  * Get the render context
32
40
  * @category Virtualization
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.gridVirtualizationSelector = exports.gridVirtualizationRowEnabledSelector = exports.gridVirtualizationEnabledSelector = exports.gridVirtualizationColumnEnabledSelector = exports.gridRenderContextSelector = exports.gridRenderContextColumnsSelector = void 0;
6
+ exports.gridVirtualizationSelector = exports.gridVirtualizationRowEnabledSelector = exports.gridVirtualizationLayoutModeSelector = exports.gridVirtualizationEnabledSelector = exports.gridVirtualizationColumnEnabledSelector = exports.gridRenderContextSelector = exports.gridRenderContextColumnsSelector = void 0;
7
7
  var _createSelector = require("../../../utils/createSelector");
8
8
  /**
9
9
  * Get the columns state
@@ -30,6 +30,13 @@ const gridVirtualizationColumnEnabledSelector = exports.gridVirtualizationColumn
30
30
  */
31
31
  const gridVirtualizationRowEnabledSelector = exports.gridVirtualizationRowEnabledSelector = (0, _createSelector.createSelector)(gridVirtualizationSelector, state => state.enabledForRows);
32
32
 
33
+ /**
34
+ * Get the layout mode
35
+ * @category Virtualization
36
+ * @ignore - do not document.
37
+ */
38
+ const gridVirtualizationLayoutModeSelector = exports.gridVirtualizationLayoutModeSelector = (0, _createSelector.createSelector)(gridVirtualizationSelector, state => state.layoutMode);
39
+
33
40
  /**
34
41
  * Get the render context
35
42
  * @category Virtualization
@@ -24,6 +24,13 @@ export const gridVirtualizationColumnEnabledSelector = createSelector(gridVirtua
24
24
  */
25
25
  export const gridVirtualizationRowEnabledSelector = createSelector(gridVirtualizationSelector, state => state.enabledForRows);
26
26
 
27
+ /**
28
+ * Get the layout mode
29
+ * @category Virtualization
30
+ * @ignore - do not document.
31
+ */
32
+ export const gridVirtualizationLayoutModeSelector = createSelector(gridVirtualizationSelector, state => state.layoutMode);
33
+
27
34
  /**
28
35
  * Get the render context
29
36
  * @category Virtualization
@@ -1,3 +1,3 @@
1
1
  export { EMPTY_RENDER_CONTEXT } from '@mui/x-virtualizer';
2
2
  export * from "./useGridVirtualization.mjs";
3
- export * from "./gridVirtualizationSelectors.mjs";
3
+ export { gridVirtualizationSelector, gridVirtualizationEnabledSelector, gridVirtualizationColumnEnabledSelector, gridVirtualizationRowEnabledSelector, gridRenderContextSelector, gridRenderContextColumnsSelector } from "./gridVirtualizationSelectors.mjs";
@@ -1,3 +1,3 @@
1
1
  export { EMPTY_RENDER_CONTEXT } from '@mui/x-virtualizer';
2
2
  export * from "./useGridVirtualization.js";
3
- export * from "./gridVirtualizationSelectors.js";
3
+ export { gridVirtualizationSelector, gridVirtualizationEnabledSelector, gridVirtualizationColumnEnabledSelector, gridVirtualizationRowEnabledSelector, gridRenderContextSelector, gridRenderContextColumnsSelector } from "./gridVirtualizationSelectors.js";
@@ -4,7 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  var _exportNames = {
7
- EMPTY_RENDER_CONTEXT: true
7
+ EMPTY_RENDER_CONTEXT: true,
8
+ gridVirtualizationSelector: true,
9
+ gridVirtualizationEnabledSelector: true,
10
+ gridVirtualizationColumnEnabledSelector: true,
11
+ gridVirtualizationRowEnabledSelector: true,
12
+ gridRenderContextSelector: true,
13
+ gridRenderContextColumnsSelector: true
8
14
  };
9
15
  Object.defineProperty(exports, "EMPTY_RENDER_CONTEXT", {
10
16
  enumerable: true,
@@ -12,6 +18,42 @@ Object.defineProperty(exports, "EMPTY_RENDER_CONTEXT", {
12
18
  return _xVirtualizer.EMPTY_RENDER_CONTEXT;
13
19
  }
14
20
  });
21
+ Object.defineProperty(exports, "gridRenderContextColumnsSelector", {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _gridVirtualizationSelectors.gridRenderContextColumnsSelector;
25
+ }
26
+ });
27
+ Object.defineProperty(exports, "gridRenderContextSelector", {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _gridVirtualizationSelectors.gridRenderContextSelector;
31
+ }
32
+ });
33
+ Object.defineProperty(exports, "gridVirtualizationColumnEnabledSelector", {
34
+ enumerable: true,
35
+ get: function () {
36
+ return _gridVirtualizationSelectors.gridVirtualizationColumnEnabledSelector;
37
+ }
38
+ });
39
+ Object.defineProperty(exports, "gridVirtualizationEnabledSelector", {
40
+ enumerable: true,
41
+ get: function () {
42
+ return _gridVirtualizationSelectors.gridVirtualizationEnabledSelector;
43
+ }
44
+ });
45
+ Object.defineProperty(exports, "gridVirtualizationRowEnabledSelector", {
46
+ enumerable: true,
47
+ get: function () {
48
+ return _gridVirtualizationSelectors.gridVirtualizationRowEnabledSelector;
49
+ }
50
+ });
51
+ Object.defineProperty(exports, "gridVirtualizationSelector", {
52
+ enumerable: true,
53
+ get: function () {
54
+ return _gridVirtualizationSelectors.gridVirtualizationSelector;
55
+ }
56
+ });
15
57
  var _xVirtualizer = require("@mui/x-virtualizer");
16
58
  var _useGridVirtualization = require("./useGridVirtualization");
17
59
  Object.keys(_useGridVirtualization).forEach(function (key) {
@@ -25,15 +67,4 @@ Object.keys(_useGridVirtualization).forEach(function (key) {
25
67
  }
26
68
  });
27
69
  });
28
- var _gridVirtualizationSelectors = require("./gridVirtualizationSelectors");
29
- Object.keys(_gridVirtualizationSelectors).forEach(function (key) {
30
- if (key === "default" || key === "__esModule") return;
31
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
32
- if (key in exports && exports[key] === _gridVirtualizationSelectors[key]) return;
33
- Object.defineProperty(exports, key, {
34
- enumerable: true,
35
- get: function () {
36
- return _gridVirtualizationSelectors[key];
37
- }
38
- });
39
- });
70
+ var _gridVirtualizationSelectors = require("./gridVirtualizationSelectors");
@@ -1,3 +1,3 @@
1
1
  export { EMPTY_RENDER_CONTEXT } from '@mui/x-virtualizer';
2
2
  export * from "./useGridVirtualization.mjs";
3
- export * from "./gridVirtualizationSelectors.mjs";
3
+ export { gridVirtualizationSelector, gridVirtualizationEnabledSelector, gridVirtualizationColumnEnabledSelector, gridVirtualizationRowEnabledSelector, gridRenderContextSelector, gridRenderContextColumnsSelector } from "./gridVirtualizationSelectors.mjs";
@@ -0,0 +1,3 @@
1
+ import { PinnedColumnPosition } from "../../internals/constants.mjs";
2
+ import type { useGridPrivateApiContext } from "./useGridPrivateApiContext.mjs";
3
+ export declare function usePinnedScrollOffset(apiRef: ReturnType<typeof useGridPrivateApiContext>, pinnedPosition?: PinnedColumnPosition): number;
@@ -0,0 +1,3 @@
1
+ import { PinnedColumnPosition } from "../../internals/constants.js";
2
+ import type { useGridPrivateApiContext } from "./useGridPrivateApiContext.js";
3
+ export declare function usePinnedScrollOffset(apiRef: ReturnType<typeof useGridPrivateApiContext>, pinnedPosition?: PinnedColumnPosition): number;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePinnedScrollOffset = usePinnedScrollOffset;
7
+ var _xVirtualizer = require("@mui/x-virtualizer");
8
+ var _constants = require("../../internals/constants");
9
+ function usePinnedScrollOffset(apiRef, pinnedPosition) {
10
+ const store = apiRef.current.virtualizer.store;
11
+
12
+ // SAFETY: For performance reasons, we only add store selectors for pinned cells in controlled
13
+ // mode. Both pinnedPosition and layoutMode are stable (never change for a given instance),
14
+ // so the hook call order is consistent across renders.
15
+ if (pinnedPosition !== undefined) {
16
+ const layoutMode = store.use(_xVirtualizer.Virtualization.selectors.layoutMode);
17
+ if (layoutMode === 'controlled') {
18
+ if (pinnedPosition === _constants.PinnedColumnPosition.LEFT) {
19
+ return store.use(_xVirtualizer.Virtualization.selectors.pinnedLeftOffsetSelector);
20
+ }
21
+ if (pinnedPosition === _constants.PinnedColumnPosition.RIGHT) {
22
+ return store.use(_xVirtualizer.Virtualization.selectors.pinnedRightOffsetSelector);
23
+ }
24
+ }
25
+ }
26
+ return 0;
27
+ }
@@ -0,0 +1,21 @@
1
+ import { Virtualization } from '@mui/x-virtualizer';
2
+ import { PinnedColumnPosition } from "../../internals/constants.mjs";
3
+ export function usePinnedScrollOffset(apiRef, pinnedPosition) {
4
+ const store = apiRef.current.virtualizer.store;
5
+
6
+ // SAFETY: For performance reasons, we only add store selectors for pinned cells in controlled
7
+ // mode. Both pinnedPosition and layoutMode are stable (never change for a given instance),
8
+ // so the hook call order is consistent across renders.
9
+ if (pinnedPosition !== undefined) {
10
+ const layoutMode = store.use(Virtualization.selectors.layoutMode);
11
+ if (layoutMode === 'controlled') {
12
+ if (pinnedPosition === PinnedColumnPosition.LEFT) {
13
+ return store.use(Virtualization.selectors.pinnedLeftOffsetSelector);
14
+ }
15
+ if (pinnedPosition === PinnedColumnPosition.RIGHT) {
16
+ return store.use(Virtualization.selectors.pinnedRightOffsetSelector);
17
+ }
18
+ }
19
+ }
20
+ return 0;
21
+ }
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v9.0.0-beta.0
2
+ * @mui/x-data-grid v9.0.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v9.0.0-beta.0
2
+ * @mui/x-data-grid v9.0.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -88,6 +88,7 @@ export { useTimeout } from "../hooks/utils/useTimeout.mjs";
88
88
  export { useGridVisibleRows, getVisibleRows } from "../hooks/utils/useGridVisibleRows.mjs";
89
89
  export { useGridInitializeState } from "../hooks/utils/useGridInitializeState.mjs";
90
90
  export type { GridStateInitializer } from "../hooks/utils/useGridInitializeState.mjs";
91
+ export { usePinnedScrollOffset } from "../hooks/utils/usePinnedScrollOffset.mjs";
91
92
  export type * as BaseSlots from "../models/gridBaseSlots.mjs";
92
93
  export type * from "../models/props/DataGridProps.mjs";
93
94
  export type { GridAggregationPosition, GridAggregationCellMeta } from "../models/gridAggregation.mjs";
@@ -102,8 +103,8 @@ export * from "../utils/rtlFlipSide.mjs";
102
103
  export { NotRendered } from "../utils/assert.mjs";
103
104
  export { createSelector, createRootSelector, createSelectorMemoized } from "../utils/createSelector.mjs";
104
105
  export { gridRowGroupsToFetchSelector } from "../hooks/features/rows/gridRowsSelector.mjs";
105
- export { findParentElementFromClassName, getActiveElement, isEventTargetInPortal } from "../utils/domUtils.mjs";
106
- export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut } from "../utils/keyboardUtils.mjs";
106
+ export { findParentElementFromClassName, getActiveElement, getGridCellElement, isEventTargetInPortal } from "../utils/domUtils.mjs";
107
+ export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut, isFillDownShortcut, isFillRightShortcut } from "../utils/keyboardUtils.mjs";
107
108
  export * from "../utils/utils.mjs";
108
109
  export { exportAs } from "../utils/exportAs.mjs";
109
110
  export * from "../utils/getPublicApiRef.mjs";
@@ -88,6 +88,7 @@ export { useTimeout } from "../hooks/utils/useTimeout.js";
88
88
  export { useGridVisibleRows, getVisibleRows } from "../hooks/utils/useGridVisibleRows.js";
89
89
  export { useGridInitializeState } from "../hooks/utils/useGridInitializeState.js";
90
90
  export type { GridStateInitializer } from "../hooks/utils/useGridInitializeState.js";
91
+ export { usePinnedScrollOffset } from "../hooks/utils/usePinnedScrollOffset.js";
91
92
  export type * as BaseSlots from "../models/gridBaseSlots.js";
92
93
  export type * from "../models/props/DataGridProps.js";
93
94
  export type { GridAggregationPosition, GridAggregationCellMeta } from "../models/gridAggregation.js";
@@ -102,8 +103,8 @@ export * from "../utils/rtlFlipSide.js";
102
103
  export { NotRendered } from "../utils/assert.js";
103
104
  export { createSelector, createRootSelector, createSelectorMemoized } from "../utils/createSelector.js";
104
105
  export { gridRowGroupsToFetchSelector } from "../hooks/features/rows/gridRowsSelector.js";
105
- export { findParentElementFromClassName, getActiveElement, isEventTargetInPortal } from "../utils/domUtils.js";
106
- export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut } from "../utils/keyboardUtils.js";
106
+ export { findParentElementFromClassName, getActiveElement, getGridCellElement, isEventTargetInPortal } from "../utils/domUtils.js";
107
+ export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut, isFillDownShortcut, isFillRightShortcut } from "../utils/keyboardUtils.js";
107
108
  export * from "../utils/utils.js";
108
109
  export { exportAs } from "../utils/exportAs.js";
109
110
  export * from "../utils/getPublicApiRef.js";
@@ -105,6 +105,7 @@ var _exportNames = {
105
105
  useGridVisibleRows: true,
106
106
  getVisibleRows: true,
107
107
  useGridInitializeState: true,
108
+ usePinnedScrollOffset: true,
108
109
  DataSourceRowsUpdateStrategy: true,
109
110
  CacheChunkManager: true,
110
111
  useGridDataSourceBase: true,
@@ -117,12 +118,15 @@ var _exportNames = {
117
118
  createSelectorMemoized: true,
118
119
  findParentElementFromClassName: true,
119
120
  getActiveElement: true,
121
+ getGridCellElement: true,
120
122
  isEventTargetInPortal: true,
121
123
  isNavigationKey: true,
122
124
  isPasteShortcut: true,
123
125
  isCopyShortcut: true,
124
126
  isUndoShortcut: true,
125
127
  isRedoShortcut: true,
128
+ isFillDownShortcut: true,
129
+ isFillRightShortcut: true,
126
130
  exportAs: true,
127
131
  useGridPrivateApiContext: true,
128
132
  serializeCellValue: true,
@@ -358,6 +362,12 @@ Object.defineProperty(exports, "getColumnsToExport", {
358
362
  return _utils3.getColumnsToExport;
359
363
  }
360
364
  });
365
+ Object.defineProperty(exports, "getGridCellElement", {
366
+ enumerable: true,
367
+ get: function () {
368
+ return _domUtils.getGridCellElement;
369
+ }
370
+ });
361
371
  Object.defineProperty(exports, "getGridFilter", {
362
372
  enumerable: true,
363
373
  get: function () {
@@ -502,6 +512,18 @@ Object.defineProperty(exports, "isEventTargetInPortal", {
502
512
  return _domUtils.isEventTargetInPortal;
503
513
  }
504
514
  });
515
+ Object.defineProperty(exports, "isFillDownShortcut", {
516
+ enumerable: true,
517
+ get: function () {
518
+ return _keyboardUtils.isFillDownShortcut;
519
+ }
520
+ });
521
+ Object.defineProperty(exports, "isFillRightShortcut", {
522
+ enumerable: true,
523
+ get: function () {
524
+ return _keyboardUtils.isFillRightShortcut;
525
+ }
526
+ });
505
527
  Object.defineProperty(exports, "isNavigationKey", {
506
528
  enumerable: true,
507
529
  get: function () {
@@ -868,6 +890,12 @@ Object.defineProperty(exports, "useIsCellEditable", {
868
890
  return _useGridCellEditable.useIsCellEditable;
869
891
  }
870
892
  });
893
+ Object.defineProperty(exports, "usePinnedScrollOffset", {
894
+ enumerable: true,
895
+ get: function () {
896
+ return _usePinnedScrollOffset.usePinnedScrollOffset;
897
+ }
898
+ });
871
899
  Object.defineProperty(exports, "useTimeout", {
872
900
  enumerable: true,
873
901
  get: function () {
@@ -1017,6 +1045,7 @@ var _useGridListView = require("../hooks/features/listView/useGridListView");
1017
1045
  var _useTimeout = require("../hooks/utils/useTimeout");
1018
1046
  var _useGridVisibleRows = require("../hooks/utils/useGridVisibleRows");
1019
1047
  var _useGridInitializeState = require("../hooks/utils/useGridInitializeState");
1048
+ var _usePinnedScrollOffset = require("../hooks/utils/usePinnedScrollOffset");
1020
1049
  var _utils2 = require("../hooks/features/dataSource/utils");
1021
1050
  var _useGridDataSourceBase = require("../hooks/features/dataSource/useGridDataSourceBase");
1022
1051
  var _gridDataSourceSelector = require("../hooks/features/dataSource/gridDataSourceSelector");
@@ -71,6 +71,7 @@ export { useGridListView, listViewStateInitializer } from "../hooks/features/lis
71
71
  export { useTimeout } from "../hooks/utils/useTimeout.mjs";
72
72
  export { useGridVisibleRows, getVisibleRows } from "../hooks/utils/useGridVisibleRows.mjs";
73
73
  export { useGridInitializeState } from "../hooks/utils/useGridInitializeState.mjs";
74
+ export { usePinnedScrollOffset } from "../hooks/utils/usePinnedScrollOffset.mjs";
74
75
  export { DataSourceRowsUpdateStrategy } from "../hooks/features/dataSource/utils.mjs";
75
76
  export { useGridDataSourceBase } from "../hooks/features/dataSource/useGridDataSourceBase.mjs";
76
77
  export { CacheChunkManager } from "../hooks/features/dataSource/utils.mjs";
@@ -81,8 +82,8 @@ export * from "../utils/rtlFlipSide.mjs";
81
82
  export { NotRendered } from "../utils/assert.mjs";
82
83
  export { createSelector, createRootSelector, createSelectorMemoized } from "../utils/createSelector.mjs";
83
84
  export { gridRowGroupsToFetchSelector } from "../hooks/features/rows/gridRowsSelector.mjs";
84
- export { findParentElementFromClassName, getActiveElement, isEventTargetInPortal } from "../utils/domUtils.mjs";
85
- export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut } from "../utils/keyboardUtils.mjs";
85
+ export { findParentElementFromClassName, getActiveElement, getGridCellElement, isEventTargetInPortal } from "../utils/domUtils.mjs";
86
+ export { isNavigationKey, isPasteShortcut, isCopyShortcut, isUndoShortcut, isRedoShortcut, isFillDownShortcut, isFillRightShortcut } from "../utils/keyboardUtils.mjs";
86
87
  export * from "../utils/utils.mjs";
87
88
  export { exportAs } from "../utils/exportAs.mjs";
88
89
  export * from "../utils/getPublicApiRef.mjs";
package/locales/arSD.js CHANGED
@@ -65,7 +65,7 @@ const arSDGrid = {
65
65
  filterPanelOperator: 'عامل',
66
66
  filterPanelOperatorAnd: 'و',
67
67
  filterPanelOperatorOr: 'أو',
68
- filterPanelColumns: 'الأعمدة',
68
+ filterPanelColumn: 'الأعمدة',
69
69
  filterPanelInputLabel: 'القيمة',
70
70
  filterPanelInputPlaceholder: 'ترشِيح قيمة',
71
71
  // Filter operators text
package/locales/arSD.mjs CHANGED
@@ -59,7 +59,7 @@ const arSDGrid = {
59
59
  filterPanelOperator: 'عامل',
60
60
  filterPanelOperatorAnd: 'و',
61
61
  filterPanelOperatorOr: 'أو',
62
- filterPanelColumns: 'الأعمدة',
62
+ filterPanelColumn: 'الأعمدة',
63
63
  filterPanelInputLabel: 'القيمة',
64
64
  filterPanelInputPlaceholder: 'ترشِيح قيمة',
65
65
  // Filter operators text
package/locales/beBY.js CHANGED
@@ -79,7 +79,7 @@ const beBYGrid = {
79
79
  filterPanelOperator: 'Аператары',
80
80
  filterPanelOperatorAnd: 'І',
81
81
  filterPanelOperatorOr: 'Або',
82
- filterPanelColumns: 'Слупкі',
82
+ filterPanelColumn: 'Слупкі',
83
83
  filterPanelInputLabel: 'Значэнне',
84
84
  filterPanelInputPlaceholder: 'Значэнне фільтра',
85
85
  // Filter operators text
package/locales/beBY.mjs CHANGED
@@ -73,7 +73,7 @@ const beBYGrid = {
73
73
  filterPanelOperator: 'Аператары',
74
74
  filterPanelOperatorAnd: 'І',
75
75
  filterPanelOperatorOr: 'Або',
76
- filterPanelColumns: 'Слупкі',
76
+ filterPanelColumn: 'Слупкі',
77
77
  filterPanelInputLabel: 'Значэнне',
78
78
  filterPanelInputPlaceholder: 'Значэнне фільтра',
79
79
  // Filter operators text
package/locales/bgBG.js CHANGED
@@ -65,7 +65,7 @@ const bgBGGrid = {
65
65
  filterPanelOperator: 'Оператори',
66
66
  filterPanelOperatorAnd: 'И',
67
67
  filterPanelOperatorOr: 'Или',
68
- filterPanelColumns: 'Колони',
68
+ filterPanelColumn: 'Колони',
69
69
  filterPanelInputLabel: 'Стойност',
70
70
  filterPanelInputPlaceholder: 'Стойност на филтъра',
71
71
  // Filter operators text
package/locales/bgBG.mjs CHANGED
@@ -59,7 +59,7 @@ const bgBGGrid = {
59
59
  filterPanelOperator: 'Оператори',
60
60
  filterPanelOperatorAnd: 'И',
61
61
  filterPanelOperatorOr: 'Или',
62
- filterPanelColumns: 'Колони',
62
+ filterPanelColumn: 'Колони',
63
63
  filterPanelInputLabel: 'Стойност',
64
64
  filterPanelInputPlaceholder: 'Стойност на филтъра',
65
65
  // Filter operators text
package/locales/bnBD.js CHANGED
@@ -64,7 +64,7 @@ const bnBDGrid = {
64
64
  filterPanelOperator: 'অপারেটর',
65
65
  filterPanelOperatorAnd: 'এবং',
66
66
  filterPanelOperatorOr: 'অথবা',
67
- filterPanelColumns: 'কলাম',
67
+ filterPanelColumn: 'কলাম',
68
68
  filterPanelInputLabel: 'মান',
69
69
  filterPanelInputPlaceholder: 'ফিল্টার মান',
70
70
  // Filter operators text
package/locales/bnBD.mjs CHANGED
@@ -58,7 +58,7 @@ const bnBDGrid = {
58
58
  filterPanelOperator: 'অপারেটর',
59
59
  filterPanelOperatorAnd: 'এবং',
60
60
  filterPanelOperatorOr: 'অথবা',
61
- filterPanelColumns: 'কলাম',
61
+ filterPanelColumn: 'কলাম',
62
62
  filterPanelInputLabel: 'মান',
63
63
  filterPanelInputPlaceholder: 'ফিল্টার মান',
64
64
  // Filter operators text
package/locales/caES.js CHANGED
@@ -61,7 +61,7 @@ const caESGrid = {
61
61
  filterPanelOperator: 'Operadors',
62
62
  filterPanelOperatorAnd: 'I',
63
63
  filterPanelOperatorOr: 'O',
64
- filterPanelColumns: 'Columnes',
64
+ filterPanelColumn: 'Columnes',
65
65
  filterPanelInputLabel: 'Valor',
66
66
  filterPanelInputPlaceholder: 'Valor del filtre',
67
67
  // Filter operators text
package/locales/caES.mjs CHANGED
@@ -55,7 +55,7 @@ const caESGrid = {
55
55
  filterPanelOperator: 'Operadors',
56
56
  filterPanelOperatorAnd: 'I',
57
57
  filterPanelOperatorOr: 'O',
58
- filterPanelColumns: 'Columnes',
58
+ filterPanelColumn: 'Columnes',
59
59
  filterPanelInputLabel: 'Valor',
60
60
  filterPanelInputPlaceholder: 'Valor del filtre',
61
61
  // Filter operators text
package/locales/csCZ.js CHANGED
@@ -73,7 +73,7 @@ const csCZGrid = {
73
73
  filterPanelOperator: 'Operátory',
74
74
  filterPanelOperatorAnd: 'A',
75
75
  filterPanelOperatorOr: 'Nebo',
76
- filterPanelColumns: 'Sloupce',
76
+ filterPanelColumn: 'Sloupce',
77
77
  filterPanelInputLabel: 'Hodnota',
78
78
  filterPanelInputPlaceholder: 'Hodnota filtru',
79
79
  // Filter operators text
package/locales/csCZ.mjs CHANGED
@@ -67,7 +67,7 @@ const csCZGrid = {
67
67
  filterPanelOperator: 'Operátory',
68
68
  filterPanelOperatorAnd: 'A',
69
69
  filterPanelOperatorOr: 'Nebo',
70
- filterPanelColumns: 'Sloupce',
70
+ filterPanelColumn: 'Sloupce',
71
71
  filterPanelInputLabel: 'Hodnota',
72
72
  filterPanelInputPlaceholder: 'Hodnota filtru',
73
73
  // Filter operators text
package/locales/daDK.js CHANGED
@@ -65,7 +65,7 @@ const daDKGrid = {
65
65
  filterPanelOperator: 'Operator',
66
66
  filterPanelOperatorAnd: 'Og',
67
67
  filterPanelOperatorOr: 'Eller',
68
- filterPanelColumns: 'Kolonner',
68
+ filterPanelColumn: 'Kolonner',
69
69
  filterPanelInputLabel: 'Værdi',
70
70
  filterPanelInputPlaceholder: 'Filterværdi',
71
71
  // Filter operators text
package/locales/daDK.mjs CHANGED
@@ -59,7 +59,7 @@ const daDKGrid = {
59
59
  filterPanelOperator: 'Operator',
60
60
  filterPanelOperatorAnd: 'Og',
61
61
  filterPanelOperatorOr: 'Eller',
62
- filterPanelColumns: 'Kolonner',
62
+ filterPanelColumn: 'Kolonner',
63
63
  filterPanelInputLabel: 'Værdi',
64
64
  filterPanelInputPlaceholder: 'Filterværdi',
65
65
  // Filter operators text
package/locales/deDE.js CHANGED
@@ -62,7 +62,7 @@ const deDEGrid = {
62
62
  filterPanelOperator: 'Operatoren',
63
63
  filterPanelOperatorAnd: 'Und',
64
64
  filterPanelOperatorOr: 'Oder',
65
- filterPanelColumns: 'Spalten',
65
+ filterPanelColumn: 'Spalten',
66
66
  filterPanelInputLabel: 'Wert',
67
67
  filterPanelInputPlaceholder: 'Wert filtern',
68
68
  // Filter operators text
package/locales/deDE.mjs CHANGED
@@ -56,7 +56,7 @@ const deDEGrid = {
56
56
  filterPanelOperator: 'Operatoren',
57
57
  filterPanelOperatorAnd: 'Und',
58
58
  filterPanelOperatorOr: 'Oder',
59
- filterPanelColumns: 'Spalten',
59
+ filterPanelColumn: 'Spalten',
60
60
  filterPanelInputLabel: 'Wert',
61
61
  filterPanelInputPlaceholder: 'Wert filtern',
62
62
  // Filter operators text
package/locales/elGR.js CHANGED
@@ -65,7 +65,7 @@ const elGRGrid = {
65
65
  filterPanelOperator: 'Τελεστές',
66
66
  filterPanelOperatorAnd: 'Καί',
67
67
  filterPanelOperatorOr: 'Ή',
68
- filterPanelColumns: 'Στήλες',
68
+ filterPanelColumn: 'Στήλες',
69
69
  filterPanelInputLabel: 'Τιμή',
70
70
  filterPanelInputPlaceholder: 'Τιμή φίλτρου',
71
71
  // Filter operators text
package/locales/elGR.mjs CHANGED
@@ -59,7 +59,7 @@ const elGRGrid = {
59
59
  filterPanelOperator: 'Τελεστές',
60
60
  filterPanelOperatorAnd: 'Καί',
61
61
  filterPanelOperatorOr: 'Ή',
62
- filterPanelColumns: 'Στήλες',
62
+ filterPanelColumn: 'Στήλες',
63
63
  filterPanelInputLabel: 'Τιμή',
64
64
  filterPanelInputPlaceholder: 'Τιμή φίλτρου',
65
65
  // Filter operators text