@mui/x-data-grid-premium 8.3.1 → 8.4.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 (30) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/DataGridPremium/DataGridPremium.js +5 -3
  3. package/DataGridPremium/useDataGridPremiumProps.js +2 -2
  4. package/components/GridColumnMenuRowGroupItem.js +1 -0
  5. package/components/GridPremiumToolbar.js +1 -0
  6. package/components/collapsible/CollapsibleContext.js +1 -0
  7. package/components/promptField/PromptFieldContext.js +1 -0
  8. package/components/resizablePanel/ResizablePanelContext.js +1 -0
  9. package/esm/DataGridPremium/DataGridPremium.js +5 -3
  10. package/esm/DataGridPremium/useDataGridPremiumProps.js +2 -2
  11. package/esm/components/GridColumnMenuRowGroupItem.js +1 -0
  12. package/esm/components/GridPremiumToolbar.js +1 -0
  13. package/esm/components/collapsible/CollapsibleContext.js +1 -0
  14. package/esm/components/promptField/PromptFieldContext.js +1 -0
  15. package/esm/components/resizablePanel/ResizablePanelContext.js +1 -0
  16. package/esm/hooks/features/aggregation/wrapColumnWithAggregation.js +1 -0
  17. package/esm/hooks/features/cellSelection/useGridCellSelection.js +3 -2
  18. package/esm/hooks/features/clipboard/useGridClipboardImport.d.ts +1 -1
  19. package/esm/hooks/features/clipboard/useGridClipboardImport.js +4 -3
  20. package/esm/hooks/features/rowGrouping/createGroupingColDef.js +1 -0
  21. package/esm/index.js +1 -1
  22. package/esm/models/dataGridPremiumProps.d.ts +3 -2
  23. package/hooks/features/aggregation/wrapColumnWithAggregation.js +1 -0
  24. package/hooks/features/cellSelection/useGridCellSelection.js +3 -2
  25. package/hooks/features/clipboard/useGridClipboardImport.d.ts +1 -1
  26. package/hooks/features/clipboard/useGridClipboardImport.js +4 -3
  27. package/hooks/features/rowGrouping/createGroupingColDef.js +1 -0
  28. package/index.js +1 -1
  29. package/models/dataGridPremiumProps.d.ts +3 -2
  30. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -5,6 +5,116 @@
5
5
  All notable changes to this project will be documented in this file.
6
6
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
7
7
 
8
+ ## 8.4.0
9
+
10
+ _May 21, 2025_
11
+
12
+ We'd like to offer a big thanks to the 21 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🔺 Support regular [`pyramid` variation in the `<FunnelChart />` component](https://mui.com/x/react-charts/funnel/#pyramid-chart):
15
+
16
+ <img width="398" alt="Pyramid funnel chart" src="https://github.com/user-attachments/assets/90ccb221-3a48-4ffa-8878-89c6db16da86" />
17
+
18
+ - 📚 Documentation improvements
19
+ - 🌎 Improve Icelandic (is-IS) locale on the Data Grid
20
+ - 🐞 Bugfixes
21
+
22
+ Special thanks go out to the community members for their valuable contributions:
23
+ @aizerin, @arminmeh, @campmarc, @jyash97, @mapache-salvaje, @noraleonte, @nusr, @ragnarr18, @romgrk, @whereisrmsqhs.
24
+ Following are all team members who have contributed to this release:
25
+ @alexfauquette, @bernardobelchior, @flaviendelangle, @JCQuintas, @KenanYusuf, @LukasTy, @MBilalShafi, @rita-codes.
26
+
27
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
28
+
29
+ ### Data Grid
30
+
31
+ #### `@mui/x-data-grid@8.4.0`
32
+
33
+ - [DataGrid] Fix content rendering for large rows while using automatic page size (#14737) @campmarc
34
+ - [DataGrid] Fix disabled typography variants crashing grid (#17934) @KenanYusuf
35
+ - [DataGrid] Fix tree data demo crash (#17904) @MBilalShafi
36
+ - [DataGrid] Use `exclude` selection model type if quick filter does not have actual values (#17899) @arminmeh
37
+ - [DataGrid] Fix clipboard copy behavior for cell ranges with empty cells (#16797) @nusr
38
+ - [l10n] Improve Icelandic (is-IS) locale (#17915) @ragnarr18
39
+
40
+ #### `@mui/x-data-grid-pro@8.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
41
+
42
+ Same changes as in `@mui/x-data-grid@8.4.0`, plus:
43
+
44
+ - [DataGridPro] Add `aria-expanded` attribute to the master detail toggle button (#17122) @whereisrmsqhs
45
+ - [DataGridPro] Preserve row state during server-side lazy loading (#17743) @arminmeh
46
+ - [DataGridPro] Prevent text selection when reordering rows (#16568) @jyash97
47
+
48
+ #### `@mui/x-data-grid-premium@8.4.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
49
+
50
+ Same changes as in `@mui/x-data-grid-pro@8.4.0`.
51
+
52
+ ### Date and Time Pickers
53
+
54
+ #### `@mui/x-date-pickers@8.4.0`
55
+
56
+ - [fields] Ensure fresh `disabled` value is used when focusing or clicking (#17914) @aizerin
57
+ - [fields] Improve the field controlled edition (#17816) @flaviendelangle
58
+ - [pickers] Fix `PickersTextField` overflow (#17942) @noraleonte
59
+
60
+ #### `@mui/x-date-pickers-pro@8.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
61
+
62
+ Same changes as in `@mui/x-date-pickers@8.4.0`.
63
+
64
+ ### Charts
65
+
66
+ #### `@mui/x-charts@8.4.0`
67
+
68
+ - [charts] Add grouped axes demo (#17848) @bernardobelchior
69
+ - [charts] Enable tooltip disable portal (#17871) @alexfauquette
70
+ - [charts] Improve performance in scatter chart (#17849) @bernardobelchior
71
+ - [charts] Recreate `isPointInside` less often (#17850) @bernardobelchior
72
+ - [charts] Try fix for flaky `useAnimate` test (#17777) @JCQuintas
73
+ - [charts] Add `isXInside` and `isYInside` (#17911) @bernardobelchior
74
+
75
+ #### `@mui/x-charts-pro@8.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
76
+
77
+ Same changes as in `@mui/x-charts@8.4.0`, plus:
78
+
79
+ - [charts-pro] Add size for zoom slider (#17736) @bernardobelchior
80
+ - [charts-pro] Add zoom slider tooltip (#17733) @bernardobelchior
81
+ - [charts-pro] Clean and document Heatmap Tooltip (#17933) @alexfauquette
82
+ - [charts-pro] Introduce `Pyramid` chart (#17783) @JCQuintas
83
+ - [charts-pro] Update zoom slider nomenclature (#17938) @bernardobelchior
84
+ - [charts-pro] Fix error when importing rasterizehtml (#17897) @bernardobelchior
85
+
86
+ ### Tree View
87
+
88
+ #### `@mui/x-tree-view@8.4.0`
89
+
90
+ - [TreeView] Add `getItemChildren` prop in `RichTreeView` (#17894) @rita-codes
91
+ - [TreeView] Add a method in the `apiRef` to toggle the editing status of an item (#17768) @rita-codes
92
+ - [TreeView] Add missing sx prop on the Tree Item component (#17930) @flaviendelangle
93
+
94
+ #### `@mui/x-tree-view-pro@8.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
95
+
96
+ Same changes as in `@mui/x-tree-view@8.4.0`.
97
+
98
+ ### Docs
99
+
100
+ - [docs] Add a recipe for drag and drop row grouping (#17638) @KenanYusuf
101
+ - [docs] Add introductory text to Data Grid component pages (#17902) @KenanYusuf
102
+ - [docs] Refactor embedded CodeSandbox on Data Grid—Quickstart page (#17749) @rita-codes
103
+ - [docs] Remove double border on Data Grid—Quickstart demo (#17932) @rita-codes
104
+ - [docs] Standardize `apiRef` copy (#17776) @mapache-salvaje
105
+ - [docs][DataGrid] Revise server-side data docs (#17007) @mapache-salvaje
106
+ - [docs][DataGrid] Audit and revise the tree data doc (#17650) @mapache-salvaje
107
+ - [docs][pickers] Fix migration guide references to range fields (#17861) @LukasTy
108
+ - [docs][charts] Reorganize the Tooltip documentation (#17917) @alexfauquette
109
+
110
+ ### Core
111
+
112
+ - [core] refactor: remove manual `displayName` (#17845) @romgrk
113
+ - [code-infra] Document how to use `vitest` cli (#17847) @JCQuintas
114
+ - [code-infra] Increase charts export test timeout (#17909) @JCQuintas
115
+ - [code-infra] Set `isolatedModules=true` in tsconfig (#17781) @JCQuintas
116
+ - [infra] Ensure proper docs preview path resolution (#17863) @LukasTy
117
+
8
118
  ## 8.3.1
9
119
 
10
120
  _May 14, 2025_
@@ -40,7 +40,7 @@ const configuration = {
40
40
  }
41
41
  }
42
42
  };
43
- const releaseInfo = "MTc0NzE3MzYwMDAwMA==";
43
+ const releaseInfo = "MTc0Nzc3ODQwMDAwMA==";
44
44
  const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
45
45
  packageName: "x-data-grid-premium",
46
46
  releaseInfo: releaseInfo
@@ -1251,8 +1251,9 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
1251
1251
  /**
1252
1252
  * The function is used to split the pasted text into rows and cells.
1253
1253
  * @param {string} text The text pasted from the clipboard.
1254
+ * @param {string} delimiter The delimiter used to split the text. Default is the tab character and can be set with the `clipboardCopyCellDelimiter` prop.
1254
1255
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
1255
- * @default (pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }
1256
+ * @default (pastedText, delimiter = '\t') => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split(delimiter)); }
1256
1257
  */
1257
1258
  splitClipboardPastedText: _propTypes.default.func,
1258
1259
  style: _propTypes.default.object,
@@ -1287,4 +1288,5 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
1287
1288
  * API:
1288
1289
  * - [DataGridPremium API](https://mui.com/x/api/data-grid/data-grid-premium/)
1289
1290
  */
1290
- const DataGridPremium = exports.DataGridPremium = /*#__PURE__*/React.memo(DataGridPremiumRaw);
1291
+ const DataGridPremium = exports.DataGridPremium = /*#__PURE__*/React.memo(DataGridPremiumRaw);
1292
+ if (process.env.NODE_ENV !== "production") DataGridPremium.displayName = "DataGridPremium";
@@ -35,11 +35,11 @@ const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = exports.DATA_GRID_PREMIUM_PROPS_D
35
35
  aggregationRowsScope: 'filtered',
36
36
  getAggregationPosition: groupNode => groupNode.depth === -1 ? 'footer' : 'inline',
37
37
  disableClipboardPaste: false,
38
- splitClipboardPastedText: pastedText => {
38
+ splitClipboardPastedText: (pastedText, delimiter = '\t') => {
39
39
  // Excel on Windows adds an empty line break at the end of the copied text.
40
40
  // See https://github.com/mui/mui-x/issues/9103
41
41
  const text = pastedText.replace(/\r?\n$/, '');
42
- return text.split(/\r\n|\n|\r/).map(row => row.split('\t'));
42
+ return text.split(/\r\n|\n|\r/).map(row => row.split(delimiter));
43
43
  },
44
44
  disablePivoting: false,
45
45
  getPivotDerivedColumns: _utils.defaultGetPivotDerivedColumns,
@@ -37,6 +37,7 @@ function GridColumnMenuRowGroupItem(props) {
37
37
  children: apiRef.current.getLocaleText('unGroupColumn')(name)
38
38
  }, field);
39
39
  };
40
+ if (process.env.NODE_ENV !== "production") renderUnGroupingMenuItem.displayName = "renderUnGroupingMenuItem";
40
41
  if (!colDef || !(0, _gridRowGroupingUtils.isGroupingColumn)(colDef.field)) {
41
42
  return null;
42
43
  }
@@ -52,6 +52,7 @@ function GridPremiumToolbar(props) {
52
52
  onClick: onMenuItemClick,
53
53
  children: apiRef.current.getLocaleText('toolbarExportExcel')
54
54
  }) : undefined;
55
+ if (process.env.NODE_ENV !== "production") additionalExportMenuItems.displayName = "additionalExportMenuItems";
55
56
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_internals.GridToolbar, (0, _extends2.default)({}, other, {
56
57
  additionalItems: additionalItems,
57
58
  additionalExportMenuItems: additionalExportMenuItems
@@ -8,6 +8,7 @@ exports.CollapsibleContext = void 0;
8
8
  exports.useCollapsibleContext = useCollapsibleContext;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  const CollapsibleContext = exports.CollapsibleContext = /*#__PURE__*/React.createContext(undefined);
11
+ if (process.env.NODE_ENV !== "production") CollapsibleContext.displayName = "CollapsibleContext";
11
12
  function useCollapsibleContext() {
12
13
  const context = React.useContext(CollapsibleContext);
13
14
  if (context === undefined) {
@@ -8,6 +8,7 @@ exports.PromptFieldContext = void 0;
8
8
  exports.usePromptFieldContext = usePromptFieldContext;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  const PromptFieldContext = exports.PromptFieldContext = /*#__PURE__*/React.createContext(undefined);
11
+ if (process.env.NODE_ENV !== "production") PromptFieldContext.displayName = "PromptFieldContext";
11
12
  function usePromptFieldContext() {
12
13
  const context = React.useContext(PromptFieldContext);
13
14
  if (context === undefined) {
@@ -8,6 +8,7 @@ exports.ResizablePanelContext = void 0;
8
8
  exports.useResizablePanelContext = useResizablePanelContext;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  const ResizablePanelContext = exports.ResizablePanelContext = /*#__PURE__*/React.createContext(undefined);
11
+ if (process.env.NODE_ENV !== "production") ResizablePanelContext.displayName = "ResizablePanelContext";
11
12
  function useResizablePanelContext() {
12
13
  const context = React.useContext(ResizablePanelContext);
13
14
  if (context === undefined) {
@@ -33,7 +33,7 @@ const configuration = {
33
33
  }
34
34
  }
35
35
  };
36
- const releaseInfo = "MTc0NzE3MzYwMDAwMA==";
36
+ const releaseInfo = "MTc0Nzc3ODQwMDAwMA==";
37
37
  const watermark = /*#__PURE__*/_jsx(Watermark, {
38
38
  packageName: "x-data-grid-premium",
39
39
  releaseInfo: releaseInfo
@@ -1244,8 +1244,9 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
1244
1244
  /**
1245
1245
  * The function is used to split the pasted text into rows and cells.
1246
1246
  * @param {string} text The text pasted from the clipboard.
1247
+ * @param {string} delimiter The delimiter used to split the text. Default is the tab character and can be set with the `clipboardCopyCellDelimiter` prop.
1247
1248
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
1248
- * @default (pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }
1249
+ * @default (pastedText, delimiter = '\t') => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split(delimiter)); }
1249
1250
  */
1250
1251
  splitClipboardPastedText: PropTypes.func,
1251
1252
  style: PropTypes.object,
@@ -1280,4 +1281,5 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
1280
1281
  * API:
1281
1282
  * - [DataGridPremium API](https://mui.com/x/api/data-grid/data-grid-premium/)
1282
1283
  */
1283
- export const DataGridPremium = /*#__PURE__*/React.memo(DataGridPremiumRaw);
1284
+ export const DataGridPremium = /*#__PURE__*/React.memo(DataGridPremiumRaw);
1285
+ if (process.env.NODE_ENV !== "production") DataGridPremium.displayName = "DataGridPremium";
@@ -27,11 +27,11 @@ export const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PRO
27
27
  aggregationRowsScope: 'filtered',
28
28
  getAggregationPosition: groupNode => groupNode.depth === -1 ? 'footer' : 'inline',
29
29
  disableClipboardPaste: false,
30
- splitClipboardPastedText: pastedText => {
30
+ splitClipboardPastedText: (pastedText, delimiter = '\t') => {
31
31
  // Excel on Windows adds an empty line break at the end of the copied text.
32
32
  // See https://github.com/mui/mui-x/issues/9103
33
33
  const text = pastedText.replace(/\r?\n$/, '');
34
- return text.split(/\r\n|\n|\r/).map(row => row.split('\t'));
34
+ return text.split(/\r\n|\n|\r/).map(row => row.split(delimiter));
35
35
  },
36
36
  disablePivoting: false,
37
37
  getPivotDerivedColumns: defaultGetPivotDerivedColumns,
@@ -30,6 +30,7 @@ export function GridColumnMenuRowGroupItem(props) {
30
30
  children: apiRef.current.getLocaleText('unGroupColumn')(name)
31
31
  }, field);
32
32
  };
33
+ if (process.env.NODE_ENV !== "production") renderUnGroupingMenuItem.displayName = "renderUnGroupingMenuItem";
33
34
  if (!colDef || !isGroupingColumn(colDef.field)) {
34
35
  return null;
35
36
  }
@@ -44,6 +44,7 @@ export function GridPremiumToolbar(props) {
44
44
  onClick: onMenuItemClick,
45
45
  children: apiRef.current.getLocaleText('toolbarExportExcel')
46
46
  }) : undefined;
47
+ if (process.env.NODE_ENV !== "production") additionalExportMenuItems.displayName = "additionalExportMenuItems";
47
48
  return /*#__PURE__*/_jsx(GridToolbar, _extends({}, other, {
48
49
  additionalItems: additionalItems,
49
50
  additionalExportMenuItems: additionalExportMenuItems
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  export const CollapsibleContext = /*#__PURE__*/React.createContext(undefined);
3
+ if (process.env.NODE_ENV !== "production") CollapsibleContext.displayName = "CollapsibleContext";
3
4
  export function useCollapsibleContext() {
4
5
  const context = React.useContext(CollapsibleContext);
5
6
  if (context === undefined) {
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  export const PromptFieldContext = /*#__PURE__*/React.createContext(undefined);
3
+ if (process.env.NODE_ENV !== "production") PromptFieldContext.displayName = "PromptFieldContext";
3
4
  export function usePromptFieldContext() {
4
5
  const context = React.useContext(PromptFieldContext);
5
6
  if (context === undefined) {
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  export const ResizablePanelContext = /*#__PURE__*/React.createContext(undefined);
3
+ if (process.env.NODE_ENV !== "production") ResizablePanelContext.displayName = "ResizablePanelContext";
3
4
  export function useResizablePanelContext() {
4
5
  const context = React.useContext(ResizablePanelContext);
5
6
  if (context === undefined) {
@@ -134,6 +134,7 @@ const getWrappedRenderHeader = ({
134
134
  renderHeader: renderHeader
135
135
  }));
136
136
  };
137
+ if (process.env.NODE_ENV !== "production") wrappedRenderHeader.displayName = "wrappedRenderHeader";
137
138
  return wrappedRenderHeader;
138
139
  };
139
140
 
@@ -458,7 +458,7 @@ export const useGridCellSelection = (apiRef, props) => {
458
458
  const sortedSelectedRowIds = sortedRowIds.filter(id => unsortedSelectedRowIds.includes(`${id}`));
459
459
  const copyData = sortedSelectedRowIds.reduce((acc, rowId) => {
460
460
  const fieldsMap = cellSelectionModel[rowId];
461
- const rowString = Object.keys(fieldsMap).reduce((acc2, field) => {
461
+ const rowValues = Object.keys(fieldsMap).map(field => {
462
462
  let cellData;
463
463
  if (fieldsMap[field]) {
464
464
  const cellParams = apiRef.current.getCellParams(rowId, field);
@@ -473,8 +473,9 @@ export const useGridCellSelection = (apiRef, props) => {
473
473
  } else {
474
474
  cellData = '';
475
475
  }
476
- return acc2 === '' ? cellData : [acc2, cellData].join(clipboardCopyCellDelimiter);
476
+ return cellData;
477
477
  }, '');
478
+ const rowString = rowValues.join(clipboardCopyCellDelimiter);
478
479
  return acc === '' ? rowString : [acc, rowString].join('\r\n');
479
480
  }, '');
480
481
  return copyData;
@@ -1,4 +1,4 @@
1
1
  import { RefObject } from '@mui/x-internals/types';
2
2
  import { GridPrivateApiPremium } from "../../../models/gridApiPremium.js";
3
3
  import type { DataGridPremiumProcessedProps } from "../../../models/dataGridPremiumProps.js";
4
- export declare const useGridClipboardImport: (apiRef: RefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "pagination" | "paginationMode" | "processRowUpdate" | "onProcessRowUpdateError" | "getRowId" | "onClipboardPasteStart" | "onClipboardPasteEnd" | "splitClipboardPastedText" | "disableClipboardPaste" | "onBeforeClipboardPasteStart">) => void;
4
+ export declare const useGridClipboardImport: (apiRef: RefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "pagination" | "paginationMode" | "processRowUpdate" | "onProcessRowUpdateError" | "getRowId" | "onClipboardPasteStart" | "onClipboardPasteEnd" | "splitClipboardPastedText" | "disableClipboardPaste" | "onBeforeClipboardPasteStart" | "clipboardCopyCellDelimiter">) => void;
@@ -256,8 +256,9 @@ export const useGridClipboardImport = (apiRef, props) => {
256
256
  const getRowId = props.getRowId;
257
257
  const enableClipboardPaste = !props.disableClipboardPaste;
258
258
  const logger = useGridLogger(apiRef, 'useGridClipboardImport');
259
- const splitClipboardPastedText = props.splitClipboardPastedText;
260
259
  const {
260
+ clipboardCopyCellDelimiter,
261
+ splitClipboardPastedText,
261
262
  pagination,
262
263
  paginationMode,
263
264
  onBeforeClipboardPasteStart
@@ -285,7 +286,7 @@ export const useGridClipboardImport = (apiRef, props) => {
285
286
  if (!text) {
286
287
  return;
287
288
  }
288
- const pastedData = splitClipboardPastedText(text);
289
+ const pastedData = splitClipboardPastedText(text, clipboardCopyCellDelimiter);
289
290
  if (!pastedData) {
290
291
  return;
291
292
  }
@@ -318,7 +319,7 @@ export const useGridClipboardImport = (apiRef, props) => {
318
319
  paginationMode
319
320
  });
320
321
  cellUpdater.applyUpdates();
321
- }, [apiRef, processRowUpdate, onProcessRowUpdateError, getRowId, enableClipboardPaste, splitClipboardPastedText, pagination, paginationMode, onBeforeClipboardPasteStart, logger]);
322
+ }, [apiRef, processRowUpdate, onProcessRowUpdateError, getRowId, enableClipboardPaste, splitClipboardPastedText, clipboardCopyCellDelimiter, pagination, paginationMode, onBeforeClipboardPasteStart, logger]);
322
323
  const checkIfCanStartEditing = React.useCallback((initialValue, {
323
324
  event
324
325
  }) => {
@@ -255,6 +255,7 @@ export const createGroupingColDefForAllGroupingCriteria = ({
255
255
  // Then we apply the sorting / filtering on the leaves based on the properties of `leavesColDef`
256
256
  //
257
257
  // By default, we apply the sorting / filtering on the groups of the top level grouping criteria based on the properties of `columnsLookup[orderedGroupedByFields[0]]`.
258
+ if (process.env.NODE_ENV !== "production") commonProperties.renderCell.displayName = "commonProperties.renderCell";
258
259
  let sourceProperties;
259
260
  if (mainGroupingCriteria && rowGroupingModel.includes(mainGroupingCriteria)) {
260
261
  sourceProperties = getGroupingCriteriaProperties(columnsLookup[mainGroupingCriteria], true);
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v8.3.1
2
+ * @mui/x-data-grid-premium v8.4.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -78,10 +78,11 @@ export interface DataGridPremiumPropsWithDefaultValue<R extends GridValidRowMode
78
78
  /**
79
79
  * The function is used to split the pasted text into rows and cells.
80
80
  * @param {string} text The text pasted from the clipboard.
81
+ * @param {string} delimiter The delimiter used to split the text. Default is the tab character and can be set with the `clipboardCopyCellDelimiter` prop.
81
82
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
82
- * @default (pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }
83
+ * @default (pastedText, delimiter = '\t') => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split(delimiter)); }
83
84
  */
84
- splitClipboardPastedText: (text: string) => string[][] | null;
85
+ splitClipboardPastedText: (text: string, delimiter: string) => string[][] | null;
85
86
  /**
86
87
  * If `true`, the pivoting feature is disabled.
87
88
  * @default false
@@ -142,6 +142,7 @@ const getWrappedRenderHeader = ({
142
142
  renderHeader: renderHeader
143
143
  }));
144
144
  };
145
+ if (process.env.NODE_ENV !== "production") wrappedRenderHeader.displayName = "wrappedRenderHeader";
145
146
  return wrappedRenderHeader;
146
147
  };
147
148
 
@@ -467,7 +467,7 @@ const useGridCellSelection = (apiRef, props) => {
467
467
  const sortedSelectedRowIds = sortedRowIds.filter(id => unsortedSelectedRowIds.includes(`${id}`));
468
468
  const copyData = sortedSelectedRowIds.reduce((acc, rowId) => {
469
469
  const fieldsMap = cellSelectionModel[rowId];
470
- const rowString = Object.keys(fieldsMap).reduce((acc2, field) => {
470
+ const rowValues = Object.keys(fieldsMap).map(field => {
471
471
  let cellData;
472
472
  if (fieldsMap[field]) {
473
473
  const cellParams = apiRef.current.getCellParams(rowId, field);
@@ -482,8 +482,9 @@ const useGridCellSelection = (apiRef, props) => {
482
482
  } else {
483
483
  cellData = '';
484
484
  }
485
- return acc2 === '' ? cellData : [acc2, cellData].join(clipboardCopyCellDelimiter);
485
+ return cellData;
486
486
  }, '');
487
+ const rowString = rowValues.join(clipboardCopyCellDelimiter);
487
488
  return acc === '' ? rowString : [acc, rowString].join('\r\n');
488
489
  }, '');
489
490
  return copyData;
@@ -1,4 +1,4 @@
1
1
  import { RefObject } from '@mui/x-internals/types';
2
2
  import { GridPrivateApiPremium } from "../../../models/gridApiPremium.js";
3
3
  import type { DataGridPremiumProcessedProps } from "../../../models/dataGridPremiumProps.js";
4
- export declare const useGridClipboardImport: (apiRef: RefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "pagination" | "paginationMode" | "processRowUpdate" | "onProcessRowUpdateError" | "getRowId" | "onClipboardPasteStart" | "onClipboardPasteEnd" | "splitClipboardPastedText" | "disableClipboardPaste" | "onBeforeClipboardPasteStart">) => void;
4
+ export declare const useGridClipboardImport: (apiRef: RefObject<GridPrivateApiPremium>, props: Pick<DataGridPremiumProcessedProps, "pagination" | "paginationMode" | "processRowUpdate" | "onProcessRowUpdateError" | "getRowId" | "onClipboardPasteStart" | "onClipboardPasteEnd" | "splitClipboardPastedText" | "disableClipboardPaste" | "onBeforeClipboardPasteStart" | "clipboardCopyCellDelimiter">) => void;
@@ -264,8 +264,9 @@ const useGridClipboardImport = (apiRef, props) => {
264
264
  const getRowId = props.getRowId;
265
265
  const enableClipboardPaste = !props.disableClipboardPaste;
266
266
  const logger = (0, _internals.useGridLogger)(apiRef, 'useGridClipboardImport');
267
- const splitClipboardPastedText = props.splitClipboardPastedText;
268
267
  const {
268
+ clipboardCopyCellDelimiter,
269
+ splitClipboardPastedText,
269
270
  pagination,
270
271
  paginationMode,
271
272
  onBeforeClipboardPasteStart
@@ -293,7 +294,7 @@ const useGridClipboardImport = (apiRef, props) => {
293
294
  if (!text) {
294
295
  return;
295
296
  }
296
- const pastedData = splitClipboardPastedText(text);
297
+ const pastedData = splitClipboardPastedText(text, clipboardCopyCellDelimiter);
297
298
  if (!pastedData) {
298
299
  return;
299
300
  }
@@ -326,7 +327,7 @@ const useGridClipboardImport = (apiRef, props) => {
326
327
  paginationMode
327
328
  });
328
329
  cellUpdater.applyUpdates();
329
- }, [apiRef, processRowUpdate, onProcessRowUpdateError, getRowId, enableClipboardPaste, splitClipboardPastedText, pagination, paginationMode, onBeforeClipboardPasteStart, logger]);
330
+ }, [apiRef, processRowUpdate, onProcessRowUpdateError, getRowId, enableClipboardPaste, splitClipboardPastedText, clipboardCopyCellDelimiter, pagination, paginationMode, onBeforeClipboardPasteStart, logger]);
330
331
  const checkIfCanStartEditing = React.useCallback((initialValue, {
331
332
  event
332
333
  }) => {
@@ -264,6 +264,7 @@ const createGroupingColDefForAllGroupingCriteria = ({
264
264
  // Then we apply the sorting / filtering on the leaves based on the properties of `leavesColDef`
265
265
  //
266
266
  // By default, we apply the sorting / filtering on the groups of the top level grouping criteria based on the properties of `columnsLookup[orderedGroupedByFields[0]]`.
267
+ if (process.env.NODE_ENV !== "production") commonProperties.renderCell.displayName = "commonProperties.renderCell";
267
268
  let sourceProperties;
268
269
  if (mainGroupingCriteria && rowGroupingModel.includes(mainGroupingCriteria)) {
269
270
  sourceProperties = getGroupingCriteriaProperties(columnsLookup[mainGroupingCriteria], true);
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v8.3.1
2
+ * @mui/x-data-grid-premium v8.4.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -78,10 +78,11 @@ export interface DataGridPremiumPropsWithDefaultValue<R extends GridValidRowMode
78
78
  /**
79
79
  * The function is used to split the pasted text into rows and cells.
80
80
  * @param {string} text The text pasted from the clipboard.
81
+ * @param {string} delimiter The delimiter used to split the text. Default is the tab character and can be set with the `clipboardCopyCellDelimiter` prop.
81
82
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
82
- * @default (pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }
83
+ * @default (pastedText, delimiter = '\t') => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split(delimiter)); }
83
84
  */
84
- splitClipboardPastedText: (text: string) => string[][] | null;
85
+ splitClipboardPastedText: (text: string, delimiter: string) => string[][] | null;
85
86
  /**
86
87
  * If `true`, the pivoting feature is disabled.
87
88
  * @default false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-premium",
3
- "version": "8.3.1",
3
+ "version": "8.4.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The Premium plan edition of the MUI X Data Grid Components.",
6
6
  "main": "./index.js",
@@ -42,10 +42,10 @@
42
42
  "exceljs": "^4.4.0",
43
43
  "prop-types": "^15.8.1",
44
44
  "reselect": "^5.1.1",
45
- "@mui/x-data-grid-pro": "8.3.1",
46
- "@mui/x-data-grid": "8.3.1",
47
- "@mui/x-internals": "8.3.1",
48
- "@mui/x-license": "8.3.1"
45
+ "@mui/x-license": "8.4.0",
46
+ "@mui/x-data-grid-pro": "8.4.0",
47
+ "@mui/x-internals": "8.4.0",
48
+ "@mui/x-data-grid": "8.4.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@emotion/react": "^11.9.0",