@mui/x-data-grid 8.3.0 β†’ 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,96 @@
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.3.1
9
+
10
+ _May 14, 2025_
11
+
12
+ We'd like to offer a big thanks to the 12 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🌍 Improve Norwegian BokmΓ₯l (nb-NO) locale on the Data Grid
15
+ - 🌍 Improve Korean (ko-KR) locale on the Data Grid and Pickers
16
+ - πŸ“š Documentation improvements
17
+ - 🐞 Bugfixes
18
+
19
+ Special thanks go out to the community members for their valuable contributions:
20
+ @100pearlcent, @htollefsen, @JanPretzel, @sai6855.
21
+ Following are all team members who have contributed to this release:
22
+ @bernardobelchior, @cherniavskii, @flaviendelangle, @Janpot, @JCQuintas, @MBilalShafi, @oliviertassinari, @prakhargupta1.
23
+
24
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
25
+
26
+ ### Data Grid
27
+
28
+ #### `@mui/x-data-grid@8.3.1`
29
+
30
+ - [DataGrid] Add `reason` param for `onRowSelectionModelChange` callback (#17545) @sai6855
31
+ - [DataGrid] Fix `renderContext` calculation loop (#17779) @cherniavskii
32
+ - [DataGrid] Fix column spanning jump on scroll (#17759) @cherniavskii
33
+ - [DataGrid] Fix material augmentation not working (#17761) @cherniavskii
34
+ - [DataGrid] Use arguments selector for checkbox props (#17683) @MBilalShafi
35
+ - [l10n] Improve Norwegian BokmΓ₯l (nb-NO) locale (#17766) @htollefsen
36
+ - [l10n] Improve Korean (ko-KR) locale (#17484) @100pearlcent
37
+
38
+ #### `@mui/x-data-grid-pro@8.3.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
39
+
40
+ Same changes as in `@mui/x-data-grid@8.3.1`.
41
+
42
+ #### `@mui/x-data-grid-premium@8.3.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
43
+
44
+ Same changes as in `@mui/x-data-grid-pro@8.3.1`, plus:
45
+
46
+ - [DataGridPremium] Fix aggregation label not being used in pivot panel (#17760) @cherniavskii
47
+
48
+ ### Date and Time Pickers
49
+
50
+ #### `@mui/x-date-pickers@8.3.1`
51
+
52
+ - [fields] Add notch to the field outlined when the label is manually shrank (#17620) @flaviendelangle
53
+ - [l10n] Improve Korean (ko-KR) locale (#17484) @100pearlcent
54
+
55
+ #### `@mui/x-date-pickers-pro@8.3.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
56
+
57
+ Same changes as in `@mui/x-date-pickers@8.3.1`.
58
+
59
+ ### Charts
60
+
61
+ #### `@mui/x-charts@8.3.1`
62
+
63
+ - [charts] Fix infinite tick number when zoom range is zero (#17750) @bernardobelchior
64
+ - [charts] Improve tick rendering performance (#17755) @bernardobelchior
65
+
66
+ #### `@mui/x-charts-pro@8.3.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
67
+
68
+ Same changes as in `@mui/x-charts@8.3.1`, plus:
69
+
70
+ - [charts-pro] Fix ESM build issue with Vite (#17774) @bernardobelchior
71
+ - [charts-pro] Add benchmark for zoomed in scatter chart (#17756) @bernardobelchior
72
+
73
+ ### Tree View
74
+
75
+ #### `@mui/x-tree-view@8.3.1`
76
+
77
+ Internal changes.
78
+
79
+ #### `@mui/x-tree-view-pro@8.3.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
80
+
81
+ Same changes as in `@mui/x-tree-view@8.3.1`.
82
+
83
+ ### Docs
84
+
85
+ - [docs] Fix 301 to Next.js docs for license @oliviertassinari
86
+ - [docs] Fix AI assistant API URL (#17745) @oliviertassinari
87
+ - [docs] Fix heading structure in README @oliviertassinari
88
+ - [docs] Fix translation keys documentation (#17811) @JanPretzel
89
+ - [docs] Improve CHANGELOG format @oliviertassinari
90
+
91
+ ### Core
92
+
93
+ - [core] Apply YAML convention, blank line only at top level @oliviertassinari
94
+ - [code-infra] Fix dynamic import missing extensions (#17767) @Janpot
95
+ - [code-infra] Replace `mocha` with `vitest` for browser & jsdom tests (#14508) @JCQuintas
96
+ - [scheduler] Create the package and setup a private doc page (#17239) @flaviendelangle
97
+
8
98
  ## 8.3.0
9
99
 
10
100
  _May 8, 2025_
@@ -15,10 +105,8 @@ We'd like to offer a big thanks to the 11 contributors who made this release pos
15
105
  - πŸ“š Documentation improvements
16
106
  - 🐞 Bugfixes
17
107
 
18
- Special thanks go out to this community member for a valuable contribution:
19
- @ptuukkan.
20
- Team members who have contributed to this release:
21
- @alexfauquette, @arminmeh, @bernardobelchior, @flaviendelangle, @Janpot, @JCQuintas, @LukasTy, @MBilalShafi, @rita-codes, @romgrk.
108
+ Special thanks go out to this community member for a valuable contribution: @ptuukkan.
109
+ Team members who have contributed to this release: @alexfauquette, @arminmeh, @bernardobelchior, @flaviendelangle, @Janpot, @JCQuintas, @LukasTy, @MBilalShafi, @rita-codes, @romgrk.
22
110
 
23
111
  ### Data Grid
24
112
 
@@ -531,8 +619,7 @@ We'd like to offer a big thanks to the 12 contributors who made this release pos
531
619
  - πŸ“š Documentation improvements
532
620
  - 🐞 Bugfixes
533
621
 
534
- Team members who have contributed to this release:
535
- @bernardobelchior, @cherniavskii, @flaviendelangle, @JCQuintas, @KenanYusuf, @LukasTy, @MBilalShafi, @michelengelen, @oliviertassinari, @noraleonte, @romgrk, @alexfauquette.
622
+ Team members who have contributed to this release: @bernardobelchior, @cherniavskii, @flaviendelangle, @JCQuintas, @KenanYusuf, @LukasTy, @MBilalShafi, @michelengelen, @oliviertassinari, @noraleonte, @romgrk, @alexfauquette.
536
623
 
537
624
  <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
538
625
 
@@ -845,7 +932,7 @@ We'd like to offer a big thanks to the 21 contributors who made this release pos
845
932
  - 🌍 Improve Chinese (zh-CN), (zh-HK), (zh-TW), Czech (cs-CZ), Korean (ko-KR) and Slovak (sk-Sk) locales on the Data Grid
846
933
  - 🌍 Improve Chinese (zh-CN), (zh-HK) and (zh-TW) locales on the Pickers
847
934
 
848
- ## Breaking changes
935
+ ### Breaking changes
849
936
 
850
937
  - ℹ️ The peer dependency on `@mui/material` has been updated to accept only v7.
851
938
  This has been done to increase the adoption rate of ESM.
@@ -858,7 +945,7 @@ Following are all team members who have contributed to this release:
858
945
 
859
946
  <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
860
947
 
861
- ## Alpha release highlights
948
+ ### Alpha release highlights
862
949
 
863
950
  Below are the highlights of the alpha releases leading up to this beta release:
864
951
 
@@ -3152,8 +3239,7 @@ We'd like to offer a big thanks to the 4 contributors who made this release poss
3152
3239
 
3153
3240
  - 🐞 Bugfixes
3154
3241
 
3155
- Team members who have contributed to this release:
3156
- @arminmeh, @cherniavskii, @LukasTy, @michelengelen.
3242
+ Team members who have contributed to this release: @arminmeh, @cherniavskii, @LukasTy, @michelengelen.
3157
3243
 
3158
3244
  <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
3159
3245
 
@@ -65,11 +65,13 @@ const GridCellCheckboxForwardRef = exports.GridCellCheckboxForwardRef = (0, _for
65
65
  }
66
66
  }, []);
67
67
  const isSelectable = apiRef.current.isRowSelectable(id);
68
- const checkboxPropsSelector = (0, _utils2.getCheckboxPropsSelector)(id, rootProps.rowSelectionPropagation?.parents ?? false);
69
68
  const {
70
69
  isIndeterminate,
71
70
  isChecked
72
- } = (0, _useGridSelector.useGridSelector)(apiRef, checkboxPropsSelector, undefined, _useGridSelector.objectShallowCompare);
71
+ } = (0, _useGridSelector.useGridSelector)(apiRef, _utils2.checkboxPropsSelector, {
72
+ groupId: id,
73
+ autoSelectParents: rootProps.rowSelectionPropagation?.parents ?? false
74
+ });
73
75
  if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {
74
76
  return null;
75
77
  }
@@ -8,8 +8,8 @@ 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 { objectShallowCompare, useGridSelector } from "../../hooks/utils/useGridSelector.js";
12
- import { getCheckboxPropsSelector } from "../../hooks/features/rowSelection/utils.js";
11
+ import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
12
+ import { checkboxPropsSelector } from "../../hooks/features/rowSelection/utils.js";
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  const useUtilityClasses = ownerState => {
15
15
  const {
@@ -57,11 +57,13 @@ const GridCellCheckboxForwardRef = forwardRef(function GridCellCheckboxRenderer(
57
57
  }
58
58
  }, []);
59
59
  const isSelectable = apiRef.current.isRowSelectable(id);
60
- const checkboxPropsSelector = getCheckboxPropsSelector(id, rootProps.rowSelectionPropagation?.parents ?? false);
61
60
  const {
62
61
  isIndeterminate,
63
62
  isChecked
64
- } = useGridSelector(apiRef, checkboxPropsSelector, undefined, objectShallowCompare);
63
+ } = useGridSelector(apiRef, checkboxPropsSelector, {
64
+ groupId: id,
65
+ autoSelectParents: rootProps.rowSelectionPropagation?.parents ?? false
66
+ });
65
67
  if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {
66
68
  return null;
67
69
  }
@@ -302,13 +302,21 @@ export function getFirstNonSpannedColumnToRender({
302
302
  visibleRows
303
303
  }) {
304
304
  let firstNonSpannedColumnToRender = firstColumnToRender;
305
- for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
306
- const row = visibleRows[i];
307
- if (row) {
308
- const rowId = visibleRows[i].id;
309
- const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);
310
- if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {
311
- firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
305
+ let foundStableColumn = false;
306
+
307
+ // Keep checking columns until we find one that's not spanned in any visible row
308
+ while (!foundStableColumn && firstNonSpannedColumnToRender >= 0) {
309
+ foundStableColumn = true;
310
+ for (let i = firstRowToRender; i < lastRowToRender; i += 1) {
311
+ const row = visibleRows[i];
312
+ if (row) {
313
+ const rowId = visibleRows[i].id;
314
+ const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstNonSpannedColumnToRender);
315
+ if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan && cellColSpanInfo.leftVisibleCellIndex < firstNonSpannedColumnToRender) {
316
+ firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;
317
+ foundStableColumn = false;
318
+ break; // Check the new column index against the visible rows, because it might be spanned
319
+ }
312
320
  }
313
321
  }
314
322
  }
@@ -92,7 +92,7 @@ export const useGridRowSelection = (apiRef, props) => {
92
92
  /*
93
93
  * API METHODS
94
94
  */
95
- const setRowSelectionModel = React.useCallback(model => {
95
+ const setRowSelectionModel = React.useCallback((model, reason) => {
96
96
  if (props.signature === GridSignature.DataGrid && !canHaveMultipleSelection && (model.type !== 'include' || model.ids.size > 1)) {
97
97
  throw new Error(['MUI X: `rowSelectionModel` can only contain 1 item in DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock multiple selection.'].join('\n'));
98
98
  }
@@ -101,7 +101,7 @@ export const useGridRowSelection = (apiRef, props) => {
101
101
  logger.debug(`Setting selection model`);
102
102
  apiRef.current.setState(state => _extends({}, state, {
103
103
  rowSelection: props.rowSelection ? model : emptyModel
104
- }));
104
+ }), reason);
105
105
  }
106
106
  }, [apiRef, logger, props.rowSelection, props.signature, canHaveMultipleSelection]);
107
107
  const isRowSelected = React.useCallback(id => {
@@ -142,7 +142,7 @@ export const useGridRowSelection = (apiRef, props) => {
142
142
  findRowsToSelect(apiRef, tree, id, props.rowSelectionPropagation?.descendants ?? false, props.rowSelectionPropagation?.parents ?? false, addRow);
143
143
  }
144
144
  }
145
- apiRef.current.setRowSelectionModel(newSelectionModel);
145
+ apiRef.current.setRowSelectionModel(newSelectionModel, 'singleRowSelection');
146
146
  } else {
147
147
  logger.debug(`Toggling selection for row ${id}`);
148
148
  const selectionModel = gridRowSelectionStateSelector(apiRef);
@@ -168,7 +168,7 @@ export const useGridRowSelection = (apiRef, props) => {
168
168
  }
169
169
  const isSelectionValid = newSelectionModel.type === 'include' && newSelectionModel.ids.size < 2 || canHaveMultipleSelection;
170
170
  if (isSelectionValid) {
171
- apiRef.current.setRowSelectionModel(newSelectionModel);
171
+ apiRef.current.setRowSelectionModel(newSelectionModel, 'singleRowSelection');
172
172
  }
173
173
  }
174
174
  }, [apiRef, logger, applyAutoSelection, tree, props.rowSelectionPropagation?.descendants, props.rowSelectionPropagation?.parents, canHaveMultipleSelection]);
@@ -235,7 +235,7 @@ export const useGridRowSelection = (apiRef, props) => {
235
235
  }
236
236
  const isSelectionValid = newSelectionModel.type === 'include' && newSelectionModel.ids.size < 2 || canHaveMultipleSelection;
237
237
  if (isSelectionValid) {
238
- apiRef.current.setRowSelectionModel(newSelectionModel);
238
+ apiRef.current.setRowSelectionModel(newSelectionModel, 'multipleRowsSelection');
239
239
  }
240
240
  }, [logger, applyAutoSelection, canHaveMultipleSelection, apiRef, tree, props.rowSelectionPropagation?.descendants, props.rowSelectionPropagation?.parents, props.rowSelection]);
241
241
  const getPropagatedRowSelectionModel = React.useCallback(inputSelectionModel => {
@@ -360,7 +360,7 @@ export const useGridRowSelection = (apiRef, props) => {
360
360
  apiRef.current.selectRows(Array.from(newSelectionModel.ids), true, true);
361
361
  }
362
362
  } else {
363
- apiRef.current.setRowSelectionModel(newSelectionModel);
363
+ apiRef.current.setRowSelectionModel(newSelectionModel, 'multipleRowsSelection');
364
364
  }
365
365
  }
366
366
  }, [apiRef, isNestedData, props.rowSelectionPropagation?.parents, props.keepNonExistentRowsSelected, props.filterMode, tree, getRowsToBeSelected]);
@@ -5,7 +5,10 @@ import type { GridPrivateApiCommunity } from "../../../models/api/gridApiCommuni
5
5
  import { type GridRowSelectionPropagation } from "../../../models/gridRowSelectionModel.js";
6
6
  import { type RowSelectionManager } from "../../../models/gridRowSelectionManager.js";
7
7
  export declare const ROW_SELECTION_PROPAGATION_DEFAULT: GridRowSelectionPropagation;
8
- export declare function getCheckboxPropsSelector(groupId: GridRowId, autoSelectParents: boolean): import("@mui/x-data-grid").OutputSelector<import("../../../models/gridStateCommunity.js").GridStateCommunity, RowSelectionManager, {
8
+ export declare const checkboxPropsSelector: import("@mui/x-data-grid").OutputSelector<import("../../../models/gridStateCommunity.js").GridStateCommunity, {
9
+ groupId: GridRowId;
10
+ autoSelectParents: boolean;
11
+ }, {
9
12
  isIndeterminate: boolean;
10
13
  isChecked: boolean;
11
14
  }>;
@@ -27,41 +27,42 @@ function getGridRowGroupSelectableDescendants(apiRef, groupId) {
27
27
  }
28
28
  return descendants;
29
29
  }
30
-
31
- // TODO v8: Use `createSelectorV8`
32
- export function getCheckboxPropsSelector(groupId, autoSelectParents) {
33
- return createSelector(gridRowTreeSelector, gridSortedRowIdsSelector, gridFilteredRowsLookupSelector, gridRowSelectionManagerSelector, (rowTree, sortedRowIds, filteredRowsLookup, rowSelectionManager) => {
34
- const groupNode = rowTree[groupId];
35
- if (!groupNode || groupNode.type !== 'group') {
36
- return {
37
- isIndeterminate: false,
38
- isChecked: rowSelectionManager.has(groupId)
39
- };
30
+ export const checkboxPropsSelector = createSelector(gridRowTreeSelector, gridFilteredRowsLookupSelector, gridRowSelectionManagerSelector, (rowTree, filteredRowsLookup, rowSelectionManager, {
31
+ groupId,
32
+ autoSelectParents
33
+ }) => {
34
+ const groupNode = rowTree[groupId];
35
+ if (!groupNode || groupNode.type !== 'group' || rowSelectionManager.has(groupId)) {
36
+ return {
37
+ isIndeterminate: false,
38
+ isChecked: rowSelectionManager.has(groupId)
39
+ };
40
+ }
41
+ let hasSelectedDescendant = false;
42
+ let hasUnSelectedDescendant = false;
43
+ const traverseDescendants = itemToTraverseId => {
44
+ if (filteredRowsLookup[itemToTraverseId] === false ||
45
+ // Perf: Skip checking the rest of the descendants if we already
46
+ // know that there is a selected and an unselected descendant
47
+ hasSelectedDescendant && hasUnSelectedDescendant) {
48
+ return;
40
49
  }
41
- if (rowSelectionManager.has(groupId)) {
42
- return {
43
- isIndeterminate: false,
44
- isChecked: true
45
- };
50
+ const node = rowTree[itemToTraverseId];
51
+ if (node?.type === 'group') {
52
+ node.children.forEach(traverseDescendants);
46
53
  }
47
- let selectableDescendantsCount = 0;
48
- let selectedDescendantsCount = 0;
49
- const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;
50
- for (let index = startIndex; index < sortedRowIds.length && rowTree[sortedRowIds[index]]?.depth > groupNode.depth; index += 1) {
51
- const id = sortedRowIds[index];
52
- if (filteredRowsLookup[id] !== false) {
53
- selectableDescendantsCount += 1;
54
- if (rowSelectionManager.has(id)) {
55
- selectedDescendantsCount += 1;
56
- }
57
- }
54
+ if (rowSelectionManager.has(itemToTraverseId)) {
55
+ hasSelectedDescendant = true;
56
+ } else {
57
+ hasUnSelectedDescendant = true;
58
58
  }
59
- return {
60
- isIndeterminate: selectedDescendantsCount > 0 && (selectedDescendantsCount < selectableDescendantsCount || !rowSelectionManager.has(groupId)),
61
- isChecked: autoSelectParents ? selectedDescendantsCount > 0 : rowSelectionManager.has(groupId)
62
- };
63
- });
64
- }
59
+ };
60
+ traverseDescendants(groupId);
61
+ return {
62
+ isIndeterminate: hasSelectedDescendant && hasUnSelectedDescendant,
63
+ isChecked: autoSelectParents ? hasSelectedDescendant && !hasUnSelectedDescendant : false
64
+ };
65
+ });
65
66
  export function isMultipleRowSelectionEnabled(props) {
66
67
  if (props.signature === GridSignature.DataGrid) {
67
68
  // DataGrid Community has multiple row selection enabled only if checkbox selection is enabled.
@@ -218,12 +218,13 @@ export const useGridVirtualScroller = () => {
218
218
  scrollCache.buffer = bufferForDirection(isRtl, direction, rootProps.rowBufferPx, rootProps.columnBufferPx, rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6);
219
219
  const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);
220
220
  const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);
221
-
222
- // Prevents batching render context changes
223
- ReactDOM.flushSync(() => {
224
- updateRenderContext(nextRenderContext);
225
- });
226
- scrollTimeout.start(1000, triggerUpdateRenderContext);
221
+ if (!areRenderContextsEqual(nextRenderContext, renderContext)) {
222
+ // Prevents batching render context changes
223
+ ReactDOM.flushSync(() => {
224
+ updateRenderContext(nextRenderContext);
225
+ });
226
+ scrollTimeout.start(1000, triggerUpdateRenderContext);
227
+ }
227
228
  return nextRenderContext;
228
229
  });
229
230
  const forceUpdateRenderContext = () => {
package/esm/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { GridApiCommunity } from "./models/api/gridApiCommunity.js";
2
2
  import { GridInitialStateCommunity, GridStateCommunity } from "./models/gridStateCommunity.js";
3
+ import "./material/index.js";
3
4
  export { useGridApiContext } from "./hooks/utils/useGridApiContext.js";
4
5
  export { useGridApiRef } from "./hooks/utils/useGridApiRef.js";
5
6
  export { useGridRootProps } from "./hooks/utils/useGridRootProps.js";
package/esm/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  /**
2
- * @mui/x-data-grid v8.3.0
2
+ * @mui/x-data-grid v8.3.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
+ import "./material/index.js";
8
9
  export { useGridApiContext } from "./hooks/utils/useGridApiContext.js";
9
10
  export { useGridApiRef } from "./hooks/utils/useGridApiRef.js";
10
11
  export { useGridRootProps } from "./hooks/utils/useGridRootProps.js";
@@ -3,10 +3,9 @@ const koKRGrid = {
3
3
  // Root
4
4
  noRowsLabel: '행이 μ—†μŠ΅λ‹ˆλ‹€.',
5
5
  noResultsOverlayLabel: '결과값이 μ—†μŠ΅λ‹ˆλ‹€.',
6
- // noColumnsOverlayLabel: 'No columns',
7
- // noColumnsOverlayManageColumns: 'Manage columns',
8
- // emptyPivotOverlayLabel: 'Add fields to rows, columns, and values to create a pivot table',
9
-
6
+ noColumnsOverlayLabel: '열이 μ—†μŠ΅λ‹ˆλ‹€',
7
+ noColumnsOverlayManageColumns: 'μ—΄ κ΄€λ¦¬ν•˜κΈ°',
8
+ emptyPivotOverlayLabel: 'ν–‰, μ—΄, 값을 μΆ”κ°€ν•˜μ—¬ ν”Όλ²— ν…Œμ΄λΈ”μ„ λ§Œλ“­λ‹ˆλ‹€.',
10
9
  // Density selector toolbar button text
11
10
  toolbarDensity: 'ν–‰ 간격',
12
11
  toolbarDensityLabel: 'ν–‰ 간격',
@@ -33,11 +32,9 @@ const koKRGrid = {
33
32
  toolbarExportPrint: 'ν”„λ¦°νŠΈ',
34
33
  toolbarExportExcel: 'Excel둜 내보내기',
35
34
  // Toolbar pivot button
36
- // toolbarPivot: 'Pivot',
37
-
35
+ toolbarPivot: 'ν”Όλ²—',
38
36
  // Toolbar AI Assistant button
39
- // toolbarAssistant: 'AI Assistant',
40
-
37
+ toolbarAssistant: 'AI μ–΄μ‹œμŠ€ν„΄νŠΈ',
41
38
  // Columns management text
42
39
  columnsManagementSearchTitle: '검색',
43
40
  columnsManagementNoColumns: '열이 μ—†μŠ΅λ‹ˆλ‹€.',
@@ -99,15 +96,14 @@ const koKRGrid = {
99
96
  'headerFilterOperator>=': 'κ°™κ±°λ‚˜ 더 큰',
100
97
  'headerFilterOperator<': '더 μž‘μ€',
101
98
  'headerFilterOperator<=': 'κ°™κ±°λ‚˜ 더 μž‘μ€',
102
- // headerFilterClear: 'Clear filter',
103
-
99
+ headerFilterClear: 'ν•„ν„° μ΄ˆκΈ°ν™”',
104
100
  // Filter values text
105
101
  filterValueAny: '아무값',
106
102
  filterValueTrue: 'μ°Έ',
107
103
  filterValueFalse: 'κ±°μ§“',
108
104
  // Column menu text
109
105
  columnMenuLabel: '메뉴',
110
- // columnMenuAriaLabel: (columnName: string) => `${columnName} column menu`,
106
+ columnMenuAriaLabel: columnName => `${columnName} μ—΄ 메뉴`,
111
107
  columnMenuShowColumns: 'μ—΄ ν‘œμ‹œ',
112
108
  columnMenuManageColumns: 'μ—΄ 관리',
113
109
  columnMenuFilter: 'ν•„ν„°',
@@ -156,18 +152,18 @@ const koKRGrid = {
156
152
  collapseDetailPanel: 'μ ‘κΈ°',
157
153
  // Pagination
158
154
  paginationRowsPerPage: 'νŽ˜μ΄μ§€ λ‹Ή ν–‰:',
159
- // paginationDisplayedRows: ({
160
- // from,
161
- // to,
162
- // count,
163
- // estimated
164
- // }) => {
165
- // if (!estimated) {
166
- // return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;
167
- // }
168
- // const estimatedLabel = estimated && estimated > to ? `around ${estimated}` : `more than ${to}`;
169
- // return `${from}–${to} of ${count !== -1 ? count : estimatedLabel}`;
170
- // },
155
+ paginationDisplayedRows: ({
156
+ from,
157
+ to,
158
+ count,
159
+ estimated
160
+ }) => {
161
+ if (!estimated) {
162
+ return `${from}–${to} of ${count !== -1 ? count : `${to} 이상`}`;
163
+ }
164
+ const estimatedLabel = estimated && estimated > to ? `μ•½ ${estimated}` : `${to} 이상`;
165
+ return `${from}–${to} of ${count !== -1 ? count : estimatedLabel}`;
166
+ },
171
167
  paginationItemAriaLabel: type => {
172
168
  if (type === 'first') {
173
169
  return '첫 번째 νŽ˜μ΄μ§€λ‘œ 이동';
@@ -191,61 +187,57 @@ const koKRGrid = {
191
187
  aggregationFunctionLabelMax: 'μ΅œλŒ€κ°’',
192
188
  aggregationFunctionLabelSize: '크기',
193
189
  // Pivot panel
194
- // pivotToggleLabel: 'Pivot',
195
- // pivotRows: 'Rows',
196
- // pivotColumns: 'Columns',
197
- // pivotValues: 'Values',
198
- // pivotCloseButton: 'Close pivot settings',
199
- // pivotSearchButton: 'Search fields',
200
- // pivotSearchControlPlaceholder: 'Search fields',
201
- // pivotSearchControlLabel: 'Search fields',
202
- // pivotSearchControlClear: 'Clear search',
203
- // pivotNoFields: 'No fields',
204
- // pivotMenuMoveUp: 'Move up',
205
- // pivotMenuMoveDown: 'Move down',
206
- // pivotMenuMoveToTop: 'Move to top',
207
- // pivotMenuMoveToBottom: 'Move to bottom',
208
- // pivotMenuRows: 'Rows',
209
- // pivotMenuColumns: 'Columns',
210
- // pivotMenuValues: 'Values',
211
- // pivotMenuOptions: 'Field options',
212
- // pivotMenuAddToRows: 'Add to Rows',
213
- // pivotMenuAddToColumns: 'Add to Columns',
214
- // pivotMenuAddToValues: 'Add to Values',
215
- // pivotMenuRemove: 'Remove',
216
- // pivotDragToRows: 'Drag here to create rows',
217
- // pivotDragToColumns: 'Drag here to create columns',
218
- // pivotDragToValues: 'Drag here to create values',
219
- // pivotYearColumnHeaderName: '(Year)',
220
- // pivotQuarterColumnHeaderName: '(Quarter)',
221
-
190
+ pivotToggleLabel: 'ν”Όλ²—',
191
+ pivotRows: 'ν–‰',
192
+ pivotColumns: 'μ—΄',
193
+ pivotValues: 'κ°’',
194
+ pivotCloseButton: 'ν”Όλ²— μ„€μ • λ‹«κΈ°',
195
+ pivotSearchButton: 'ν•„λ“œ 검색',
196
+ pivotSearchControlPlaceholder: 'ν•„λ“œ 검색',
197
+ pivotSearchControlLabel: 'ν•„λ“œ 검색',
198
+ pivotSearchControlClear: '검색 μ΄ˆκΈ°ν™”',
199
+ pivotNoFields: 'ν•„λ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.',
200
+ pivotMenuMoveUp: 'μœ„λ‘œ 이동',
201
+ pivotMenuMoveDown: 'μ•„λž˜λ‘œ 이동',
202
+ pivotMenuMoveToTop: 'μœ„λ‘œ 이동',
203
+ pivotMenuMoveToBottom: 'μ•„λž˜λ‘œ 이동',
204
+ pivotMenuRows: 'ν–‰',
205
+ pivotMenuColumns: 'μ—΄',
206
+ pivotMenuValues: 'κ°’',
207
+ pivotMenuOptions: 'ν•„λ“œ μ˜΅μ…˜',
208
+ pivotMenuAddToRows: '행에 μΆ”κ°€',
209
+ pivotMenuAddToColumns: '열에 μΆ”κ°€',
210
+ pivotMenuAddToValues: '값에 μΆ”κ°€',
211
+ pivotMenuRemove: '제거',
212
+ pivotDragToRows: 'ν–‰ 생성',
213
+ pivotDragToColumns: 'μ—΄ 생성',
214
+ pivotDragToValues: 'κ°’ 생성',
215
+ pivotYearColumnHeaderName: '(λ…„)',
216
+ pivotQuarterColumnHeaderName: '(λΆ„κΈ°)',
222
217
  // AI Assistant panel
223
- // aiAssistantPanelTitle: 'AI Assistant',
224
- // aiAssistantPanelClose: 'Close AI Assistant',
225
- // aiAssistantPanelNewConversation: 'New conversation',
226
- // aiAssistantPanelConversationHistory: 'Conversation history',
227
- // aiAssistantPanelEmptyConversation: 'No prompt history',
228
- // aiAssistantSuggestions: 'Suggestions',
229
-
218
+ aiAssistantPanelTitle: 'AI μ–΄μ‹œμŠ€ν„΄νŠΈ',
219
+ aiAssistantPanelClose: 'AI μ–΄μ‹œμŠ€ν„΄νŠΈ λ‹«κΈ°',
220
+ aiAssistantPanelNewConversation: 'μƒˆ λŒ€ν™”',
221
+ aiAssistantPanelConversationHistory: 'λŒ€ν™” 기둝',
222
+ aiAssistantPanelEmptyConversation: 'ν”„λ‘¬ν”„νŠΈ 내역이 μ—†μŠ΅λ‹ˆλ‹€.',
223
+ aiAssistantSuggestions: 'μ œμ•ˆ',
230
224
  // Prompt field
231
225
  promptFieldLabel: 'ν”„λ‘¬ν”„νŠΈ μž…λ ₯',
232
226
  promptFieldPlaceholder: 'ν”„λ‘¬ν”„νŠΈ μž…λ ₯…',
233
227
  promptFieldPlaceholderWithRecording: 'ν”„λ‘¬ν”„νŠΈ μž…λ ₯ λ˜λŠ” λ…ΉμŒβ€¦',
234
228
  promptFieldPlaceholderListening: 'λ…ΉμŒ 쀑…',
235
- // promptFieldSpeechRecognitionNotSupported: 'Speech recognition is not supported in this browser',
229
+ promptFieldSpeechRecognitionNotSupported: '이 λΈŒλΌμš°μ €μ—μ„œ μŒμ„± 인식을 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.',
236
230
  promptFieldSend: '전솑',
237
231
  promptFieldRecord: 'λ…ΉμŒ',
238
- promptFieldStopRecording: 'λ…ΉμŒ μ •μ§€'
239
-
232
+ promptFieldStopRecording: 'λ…ΉμŒ μ •μ§€',
240
233
  // Prompt
241
- // promptRerun: 'Run again',
242
- // promptProcessing: 'Processing…',
243
- // promptAppliedChanges: 'Applied changes',
244
-
234
+ promptRerun: 'λ‹€μ‹œ μ‹€ν–‰',
235
+ promptProcessing: '처리 쀑…',
236
+ promptAppliedChanges: '변경사항 μ μš©ν•˜κΈ°',
245
237
  // Prompt changes
246
- // promptChangeGroupDescription: (column: string) => `Group by ${column}`,
247
- // promptChangeAggregationLabel: (column: string, aggregation: string) => `${column} (${aggregation})`,
248
- // promptChangeAggregationDescription: (column: string, aggregation: string) => `Aggregate ${column} (${aggregation})`,
238
+ promptChangeGroupDescription: column => `${column} κ°’μœΌλ‘œ κ·Έλ£Ή 생성`,
239
+ promptChangeAggregationLabel: (column, aggregation) => `${column} (${aggregation})`,
240
+ promptChangeAggregationDescription: (column, aggregation) => `${column} (${aggregation}) 집계`,
249
241
  // promptChangeFilterLabel: (column: string, operator: string, value: string) => {
250
242
  // if (operator === 'is any of') {
251
243
  // return `${column} is any of: ${value}`;
@@ -258,13 +250,13 @@ const koKRGrid = {
258
250
  // }
259
251
  // return `Filter where ${column} ${operator} ${value}`;
260
252
  // },
261
- // promptChangeSortDescription: (column: string, direction: string) => `Sort by ${column} (${direction})`,
262
- // promptChangePivotEnableLabel: 'Pivot',
263
- // promptChangePivotEnableDescription: 'Enable pivot',
264
- // promptChangePivotColumnsLabel: (count: number) => `Columns (${count})`,
265
- // promptChangePivotColumnsDescription: (column: string, direction: string) => `${column}${direction ? ` (${direction})` : ''}`,
266
- // promptChangePivotRowsLabel: (count: number) => `Rows (${count})`,
267
- // promptChangePivotValuesLabel: (count: number) => `Values (${count})`,
268
- // promptChangePivotValuesDescription: (column: string, aggregation: string) => `${column} (${aggregation})`,
253
+ promptChangeSortDescription: (column, direction) => `${column} (${direction}) κΈ°μ€€μœΌλ‘œ μ •λ ¬`,
254
+ promptChangePivotEnableLabel: 'ν”Όλ²—',
255
+ promptChangePivotEnableDescription: 'ν”Όλ²— ν™œμ„±ν™”',
256
+ promptChangePivotColumnsLabel: count => `(${count}) 개의 μ—΄`,
257
+ promptChangePivotColumnsDescription: (column, direction) => `${column}${direction ? ` (${direction})` : ''}`,
258
+ promptChangePivotRowsLabel: count => `(${count}) 개의 ν–‰`,
259
+ promptChangePivotValuesLabel: count => `(${count}) 개의 κ°’`,
260
+ promptChangePivotValuesDescription: (column, aggregation) => `${column} (${aggregation})`
269
261
  };
270
262
  export const koKR = getGridLocalization(koKRGrid);