@mui/x-data-grid 7.18.0 → 7.20.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 (196) hide show
  1. package/CHANGELOG.md +213 -11
  2. package/DataGrid/DataGrid.js +12 -0
  3. package/components/cell/GridCell.js +7 -8
  4. package/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  5. package/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  6. package/components/columnSelection/GridCellCheckboxRenderer.js +12 -4
  7. package/components/columnSelection/GridHeaderCheckbox.d.ts +1 -1
  8. package/components/containers/GridRoot.js +1 -1
  9. package/components/containers/GridRootStyles.js +32 -23
  10. package/components/containers/GridToolbarContainer.js +1 -1
  11. package/components/menu/GridMenu.js +1 -1
  12. package/components/panel/GridPanel.d.ts +1 -1
  13. package/components/panel/GridPanel.js +1 -1
  14. package/components/panel/GridPanelContent.js +1 -1
  15. package/components/panel/GridPanelFooter.js +1 -1
  16. package/components/panel/GridPanelHeader.js +1 -1
  17. package/components/panel/GridPanelWrapper.js +1 -1
  18. package/components/panel/filterPanel/filterPanelUtils.d.ts +1 -1
  19. package/components/toolbar/GridToolbarQuickFilter.js +1 -1
  20. package/components/virtualization/GridBottomContainer.d.ts +1 -1
  21. package/components/virtualization/GridBottomContainer.js +18 -1
  22. package/components/virtualization/GridMainContainer.js +3 -1
  23. package/components/virtualization/GridTopContainer.d.ts +1 -1
  24. package/components/virtualization/GridTopContainer.js +1 -1
  25. package/components/virtualization/GridVirtualScrollbar.js +1 -7
  26. package/components/virtualization/GridVirtualScroller.js +1 -0
  27. package/components/virtualization/GridVirtualScrollerFiller.js +3 -4
  28. package/hooks/core/useGridRefs.js +4 -0
  29. package/hooks/features/columnGrouping/gridColumnGroupsSelector.d.ts +4 -4
  30. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +1 -1
  31. package/hooks/features/columnResize/columnResizeSelector.d.ts +1 -1
  32. package/hooks/features/columns/gridColumnsSelector.d.ts +12 -12
  33. package/hooks/features/columns/gridColumnsUtils.js +3 -2
  34. package/hooks/features/density/densitySelector.d.ts +1 -1
  35. package/hooks/features/dimensions/useGridDimensions.js +2 -2
  36. package/hooks/features/editing/useGridCellEditing.js +4 -2
  37. package/hooks/features/editing/useGridRowEditing.js +4 -2
  38. package/hooks/features/events/useGridEvents.d.ts +1 -1
  39. package/hooks/features/events/useGridEvents.js +1 -0
  40. package/hooks/features/filter/gridFilterSelector.d.ts +17 -17
  41. package/hooks/features/filter/gridFilterUtils.js +1 -1
  42. package/hooks/features/focus/gridFocusStateSelector.d.ts +8 -8
  43. package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +3 -3
  44. package/hooks/features/keyboardNavigation/utils.d.ts +1 -1
  45. package/hooks/features/pagination/gridPaginationSelector.d.ts +9 -9
  46. package/hooks/features/rowSelection/gridRowSelectionSelector.d.ts +3 -3
  47. package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
  48. package/hooks/features/rowSelection/useGridRowSelection.js +105 -29
  49. package/hooks/features/rowSelection/utils.d.ts +10 -0
  50. package/hooks/features/rowSelection/utils.js +156 -1
  51. package/hooks/features/rows/gridRowSpanningSelectors.d.ts +3 -3
  52. package/hooks/features/rows/gridRowsSelector.d.ts +14 -14
  53. package/hooks/features/rows/gridRowsUtils.js +1 -1
  54. package/hooks/features/rows/useGridRowSpanning.js +1 -1
  55. package/hooks/features/rows/useGridRows.d.ts +1 -1
  56. package/hooks/features/rows/useGridRows.js +7 -1
  57. package/hooks/features/scroll/useGridScroll.js +26 -22
  58. package/hooks/features/sorting/gridSortingSelector.d.ts +4 -4
  59. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  60. package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +5 -5
  61. package/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  62. package/hooks/utils/useGridApiContext.js +1 -1
  63. package/hooks/utils/useGridApiEventHandler.d.ts +1 -1
  64. package/hooks/utils/useGridApiEventHandler.js +1 -1
  65. package/hooks/utils/useGridConfiguration.js +1 -1
  66. package/hooks/utils/useGridPrivateApiContext.js +1 -1
  67. package/hooks/utils/useGridVisibleRows.d.ts +2 -2
  68. package/index.d.ts +2 -2
  69. package/index.js +3 -3
  70. package/internals/index.d.ts +1 -0
  71. package/internals/index.js +1 -0
  72. package/joy/icons.js +0 -1
  73. package/locales/bgBG.js +8 -9
  74. package/locales/deDE.js +4 -4
  75. package/locales/frFR.js +4 -4
  76. package/locales/hrHR.d.ts +1 -1
  77. package/locales/hrHR.js +69 -46
  78. package/locales/jaJP.js +5 -6
  79. package/locales/ptPT.d.ts +1 -1
  80. package/locales/ptPT.js +4 -4
  81. package/locales/viVN.js +20 -20
  82. package/locales/zhHK.d.ts +1 -1
  83. package/models/api/gridApiCommunity.d.ts +1 -1
  84. package/models/api/gridCoreApi.d.ts +9 -1
  85. package/models/api/gridFilterApi.d.ts +1 -1
  86. package/models/events/gridEventLookup.d.ts +7 -0
  87. package/models/gridRowSelectionModel.d.ts +4 -0
  88. package/models/gridStateCommunity.d.ts +2 -2
  89. package/models/props/DataGridProps.d.ts +38 -10
  90. package/modern/DataGrid/DataGrid.js +12 -0
  91. package/modern/components/cell/GridCell.js +7 -8
  92. package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  93. package/modern/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  94. package/modern/components/columnSelection/GridCellCheckboxRenderer.js +12 -4
  95. package/modern/components/containers/GridRoot.js +1 -1
  96. package/modern/components/containers/GridRootStyles.js +32 -23
  97. package/modern/components/containers/GridToolbarContainer.js +1 -1
  98. package/modern/components/menu/GridMenu.js +1 -1
  99. package/modern/components/panel/GridPanel.js +1 -1
  100. package/modern/components/panel/GridPanelContent.js +1 -1
  101. package/modern/components/panel/GridPanelFooter.js +1 -1
  102. package/modern/components/panel/GridPanelHeader.js +1 -1
  103. package/modern/components/panel/GridPanelWrapper.js +1 -1
  104. package/modern/components/toolbar/GridToolbarQuickFilter.js +1 -1
  105. package/modern/components/virtualization/GridBottomContainer.js +18 -1
  106. package/modern/components/virtualization/GridMainContainer.js +3 -1
  107. package/modern/components/virtualization/GridTopContainer.js +1 -1
  108. package/modern/components/virtualization/GridVirtualScrollbar.js +1 -7
  109. package/modern/components/virtualization/GridVirtualScroller.js +1 -0
  110. package/modern/components/virtualization/GridVirtualScrollerFiller.js +3 -4
  111. package/modern/hooks/core/useGridRefs.js +4 -0
  112. package/modern/hooks/features/columns/gridColumnsUtils.js +3 -2
  113. package/modern/hooks/features/dimensions/useGridDimensions.js +2 -2
  114. package/modern/hooks/features/editing/useGridCellEditing.js +4 -2
  115. package/modern/hooks/features/editing/useGridRowEditing.js +4 -2
  116. package/modern/hooks/features/events/useGridEvents.js +1 -0
  117. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  118. package/modern/hooks/features/rowSelection/useGridRowSelection.js +105 -29
  119. package/modern/hooks/features/rowSelection/utils.js +156 -1
  120. package/modern/hooks/features/rows/gridRowsUtils.js +1 -1
  121. package/modern/hooks/features/rows/useGridRowSpanning.js +1 -1
  122. package/modern/hooks/features/rows/useGridRows.js +7 -1
  123. package/modern/hooks/features/scroll/useGridScroll.js +26 -22
  124. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  125. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  126. package/modern/hooks/utils/useGridApiContext.js +1 -1
  127. package/modern/hooks/utils/useGridApiEventHandler.js +1 -1
  128. package/modern/hooks/utils/useGridConfiguration.js +1 -1
  129. package/modern/hooks/utils/useGridPrivateApiContext.js +1 -1
  130. package/modern/index.js +3 -3
  131. package/modern/internals/index.js +1 -0
  132. package/modern/joy/icons.js +0 -1
  133. package/modern/locales/bgBG.js +8 -9
  134. package/modern/locales/deDE.js +4 -4
  135. package/modern/locales/frFR.js +4 -4
  136. package/modern/locales/hrHR.js +69 -46
  137. package/modern/locales/jaJP.js +5 -6
  138. package/modern/locales/ptPT.js +4 -4
  139. package/modern/locales/viVN.js +20 -20
  140. package/modern/utils/createSelector.js +6 -0
  141. package/modern/utils/domUtils.js +1 -1
  142. package/node/DataGrid/DataGrid.js +12 -0
  143. package/node/components/cell/GridCell.js +7 -8
  144. package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -1
  145. package/node/components/columnHeaders/GridColumnHeaderItem.js +1 -0
  146. package/node/components/columnSelection/GridCellCheckboxRenderer.js +12 -4
  147. package/node/components/containers/GridRoot.js +1 -1
  148. package/node/components/containers/GridRootStyles.js +32 -23
  149. package/node/components/containers/GridToolbarContainer.js +1 -1
  150. package/node/components/menu/GridMenu.js +1 -1
  151. package/node/components/panel/GridPanel.js +1 -1
  152. package/node/components/panel/GridPanelContent.js +1 -1
  153. package/node/components/panel/GridPanelFooter.js +1 -1
  154. package/node/components/panel/GridPanelHeader.js +1 -1
  155. package/node/components/panel/GridPanelWrapper.js +1 -1
  156. package/node/components/toolbar/GridToolbarQuickFilter.js +1 -1
  157. package/node/components/virtualization/GridBottomContainer.js +18 -1
  158. package/node/components/virtualization/GridMainContainer.js +3 -1
  159. package/node/components/virtualization/GridTopContainer.js +1 -1
  160. package/node/components/virtualization/GridVirtualScrollbar.js +1 -7
  161. package/node/components/virtualization/GridVirtualScroller.js +1 -0
  162. package/node/components/virtualization/GridVirtualScrollerFiller.js +3 -4
  163. package/node/hooks/core/useGridRefs.js +4 -0
  164. package/node/hooks/features/columns/gridColumnsUtils.js +3 -2
  165. package/node/hooks/features/dimensions/useGridDimensions.js +2 -2
  166. package/node/hooks/features/editing/useGridCellEditing.js +4 -2
  167. package/node/hooks/features/editing/useGridRowEditing.js +4 -2
  168. package/node/hooks/features/events/useGridEvents.js +1 -0
  169. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  170. package/node/hooks/features/rowSelection/useGridRowSelection.js +102 -26
  171. package/node/hooks/features/rowSelection/utils.js +160 -1
  172. package/node/hooks/features/rows/gridRowsUtils.js +1 -1
  173. package/node/hooks/features/rows/useGridRowSpanning.js +1 -1
  174. package/node/hooks/features/rows/useGridRows.js +7 -1
  175. package/node/hooks/features/scroll/useGridScroll.js +26 -22
  176. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  177. package/node/hooks/features/virtualization/useGridVirtualScroller.js +2 -2
  178. package/node/hooks/utils/useGridApiContext.js +1 -1
  179. package/node/hooks/utils/useGridApiEventHandler.js +1 -1
  180. package/node/hooks/utils/useGridConfiguration.js +1 -1
  181. package/node/hooks/utils/useGridPrivateApiContext.js +1 -1
  182. package/node/index.js +1 -1
  183. package/node/internals/index.js +23 -15
  184. package/node/joy/icons.js +0 -1
  185. package/node/locales/bgBG.js +8 -9
  186. package/node/locales/deDE.js +4 -4
  187. package/node/locales/frFR.js +4 -4
  188. package/node/locales/hrHR.js +69 -46
  189. package/node/locales/jaJP.js +5 -6
  190. package/node/locales/ptPT.js +4 -4
  191. package/node/locales/viVN.js +20 -20
  192. package/node/utils/createSelector.js +6 -0
  193. package/node/utils/domUtils.js +1 -1
  194. package/package.json +4 -4
  195. package/utils/createSelector.js +6 -0
  196. package/utils/domUtils.js +1 -1
@@ -24,7 +24,7 @@ export const buildRootGroup = () => ({
24
24
  */
25
25
  export function checkGridRowIdIsValid(id, row, detailErrorMessage = 'A row was provided without id in the rows prop:') {
26
26
  if (id == null) {
27
- throw new Error(['MUI X: The data grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
27
+ throw new Error(['MUI X: The Data Grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\n'));
28
28
  }
29
29
  }
30
30
  export const getRowIdFromRowModel = (rowModel, getRowId, detailErrorMessage) => {
@@ -202,7 +202,7 @@ export const useGridRowSpanning = (apiRef, props) => {
202
202
  }
203
203
  const rangeToProcess = getUnprocessedRange({
204
204
  firstRowIndex: renderContext.firstRowIndex,
205
- lastRowIndex: renderContext.lastRowIndex - 1
205
+ lastRowIndex: Math.min(renderContext.lastRowIndex - 1, range.lastRowIndex)
206
206
  }, processedRange.current);
207
207
  if (rangeToProcess === null) {
208
208
  return;
@@ -1,5 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
+ import useLazyRef from '@mui/utils/useLazyRef';
3
4
  import { useGridApiMethod } from "../../utils/useGridApiMethod.js";
4
5
  import { useGridLogger } from "../../utils/useGridLogger.js";
5
6
  import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector, gridRowGroupsToFetchSelector } from "./gridRowsSelector.js";
@@ -367,11 +368,16 @@ export const useGridRows = (apiRef, props) => {
367
368
  throttle: false
368
369
  });
369
370
  }, [logger, apiRef, props.rows, props.getRowId, props.loading, props.rowCount, throttledRowsChange]);
371
+ const previousDataSource = useLazyRef(() => props.unstable_dataSource);
370
372
  const handleStrategyProcessorChange = React.useCallback(methodName => {
373
+ if (props.unstable_dataSource && props.unstable_dataSource !== previousDataSource.current) {
374
+ previousDataSource.current = props.unstable_dataSource;
375
+ return;
376
+ }
371
377
  if (methodName === 'rowTreeCreation') {
372
378
  groupRows();
373
379
  }
374
- }, [groupRows]);
380
+ }, [groupRows, previousDataSource, props.unstable_dataSource]);
375
381
  const handleStrategyActivityChange = React.useCallback(() => {
376
382
  // `rowTreeCreation` is the only processor ran when `strategyAvailabilityChange` is fired.
377
383
  // All the other processors listen to `rowsSet` which will be published by the `groupRows` method below.
@@ -14,22 +14,22 @@ import { gridDimensionsSelector } from "../dimensions/index.js";
14
14
  // Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
15
15
  function scrollIntoView(dimensions) {
16
16
  const {
17
- clientHeight,
18
- scrollTop,
19
- offsetHeight,
20
- offsetTop
17
+ containerSize,
18
+ scrollPosition,
19
+ elementSize,
20
+ elementOffset
21
21
  } = dimensions;
22
- const elementBottom = offsetTop + offsetHeight;
22
+ const elementEnd = elementOffset + elementSize;
23
23
  // Always scroll to top when cell is higher than viewport to avoid scroll jump
24
24
  // See https://github.com/mui/mui-x/issues/4513 and https://github.com/mui/mui-x/issues/4514
25
- if (offsetHeight > clientHeight) {
26
- return offsetTop;
25
+ if (elementSize > containerSize) {
26
+ return elementOffset;
27
27
  }
28
- if (elementBottom - clientHeight > scrollTop) {
29
- return elementBottom - clientHeight;
28
+ if (elementEnd - containerSize > scrollPosition) {
29
+ return elementEnd - containerSize;
30
30
  }
31
- if (offsetTop < scrollTop) {
32
- return offsetTop;
31
+ if (elementOffset < scrollPosition) {
32
+ return elementOffset;
33
33
  }
34
34
  return undefined;
35
35
  }
@@ -47,6 +47,8 @@ export const useGridScroll = (apiRef, props) => {
47
47
  const logger = useGridLogger(apiRef, 'useGridScroll');
48
48
  const colRef = apiRef.current.columnHeadersContainerRef;
49
49
  const virtualScrollerRef = apiRef.current.virtualScrollerRef;
50
+ const virtualScrollbarHorizontalRef = apiRef.current.virtualScrollbarHorizontalRef;
51
+ const virtualScrollbarVerticalRef = apiRef.current.virtualScrollbarVerticalRef;
50
52
  const visibleSortedRows = useGridSelector(apiRef, gridExpandedSortedRowEntriesSelector);
51
53
  const scrollToIndexes = React.useCallback(params => {
52
54
  const dimensions = gridDimensionsSelector(apiRef.current.state);
@@ -73,10 +75,10 @@ export const useGridScroll = (apiRef, props) => {
73
75
  }
74
76
  // When using RTL, `scrollLeft` becomes negative, so we must ensure that we only compare values.
75
77
  scrollCoordinates.left = scrollIntoView({
76
- clientHeight: dimensions.viewportInnerSize.width,
77
- scrollTop: Math.abs(virtualScrollerRef.current.scrollLeft),
78
- offsetHeight: cellWidth,
79
- offsetTop: columnPositions[params.colIndex]
78
+ containerSize: dimensions.viewportOuterSize.width,
79
+ scrollPosition: Math.abs(virtualScrollerRef.current.scrollLeft),
80
+ elementSize: cellWidth,
81
+ elementOffset: columnPositions[params.colIndex]
80
82
  });
81
83
  }
82
84
  if (params.rowIndex !== undefined) {
@@ -86,10 +88,10 @@ export const useGridScroll = (apiRef, props) => {
86
88
  const elementIndex = !props.pagination ? params.rowIndex : params.rowIndex - page * pageSize;
87
89
  const targetOffsetHeight = rowsMeta.positions[elementIndex + 1] ? rowsMeta.positions[elementIndex + 1] - rowsMeta.positions[elementIndex] : rowsMeta.currentPageTotalHeight - rowsMeta.positions[elementIndex];
88
90
  scrollCoordinates.top = scrollIntoView({
89
- clientHeight: dimensions.viewportInnerSize.height,
90
- scrollTop: virtualScrollerRef.current.scrollTop,
91
- offsetHeight: targetOffsetHeight,
92
- offsetTop: rowsMeta.positions[elementIndex]
91
+ containerSize: dimensions.viewportInnerSize.height,
92
+ scrollPosition: virtualScrollerRef.current.scrollTop,
93
+ elementSize: targetOffsetHeight,
94
+ elementOffset: rowsMeta.positions[elementIndex]
93
95
  });
94
96
  }
95
97
  scrollCoordinates = apiRef.current.unstable_applyPipeProcessors('scrollToIndexes', scrollCoordinates, params);
@@ -100,18 +102,20 @@ export const useGridScroll = (apiRef, props) => {
100
102
  return false;
101
103
  }, [logger, apiRef, virtualScrollerRef, props.pagination, visibleSortedRows]);
102
104
  const scroll = React.useCallback(params => {
103
- if (virtualScrollerRef.current && params.left !== undefined && colRef.current) {
105
+ if (virtualScrollerRef.current && virtualScrollbarHorizontalRef.current && params.left !== undefined && colRef.current) {
104
106
  const direction = isRtl ? -1 : 1;
105
107
  colRef.current.scrollLeft = params.left;
106
108
  virtualScrollerRef.current.scrollLeft = direction * params.left;
109
+ virtualScrollbarHorizontalRef.current.scrollLeft = direction * params.left;
107
110
  logger.debug(`Scrolling left: ${params.left}`);
108
111
  }
109
- if (virtualScrollerRef.current && params.top !== undefined) {
112
+ if (virtualScrollerRef.current && virtualScrollbarVerticalRef.current && params.top !== undefined) {
110
113
  virtualScrollerRef.current.scrollTop = params.top;
114
+ virtualScrollbarVerticalRef.current.scrollTop = params.top;
111
115
  logger.debug(`Scrolling top: ${params.top}`);
112
116
  }
113
117
  logger.debug(`Scrolling, updating container, and viewport`);
114
- }, [virtualScrollerRef, isRtl, colRef, logger]);
118
+ }, [virtualScrollerRef, virtualScrollbarHorizontalRef, virtualScrollbarVerticalRef, isRtl, colRef, logger]);
115
119
  const getScrollPosition = React.useCallback(() => {
116
120
  if (!virtualScrollerRef?.current) {
117
121
  return {
@@ -3,7 +3,7 @@ import { warnOnce } from '@mui/x-internals/warning';
3
3
  export const sanitizeSortModel = (model, disableMultipleColumnsSorting) => {
4
4
  if (disableMultipleColumnsSorting && model.length > 1) {
5
5
  if (process.env.NODE_ENV !== 'production') {
6
- warnOnce(['MUI X: The `sortModel` can only contain a single item when the `disableMultipleColumnsSorting` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');
6
+ warnOnce(['MUI X: The `sortModel` can only contain a single item when the `disableMultipleColumnsSorting` prop is set to `true`.', 'If you are using the community version of the Data Grid, this prop is always `true`.'], 'error');
7
7
  }
8
8
  return [model[0]];
9
9
  }
@@ -73,8 +73,8 @@ export const useGridVirtualScroller = () => {
73
73
  const gridRootRef = apiRef.current.rootElementRef;
74
74
  const mainRef = apiRef.current.mainElementRef;
75
75
  const scrollerRef = apiRef.current.virtualScrollerRef;
76
- const scrollbarVerticalRef = React.useRef(null);
77
- const scrollbarHorizontalRef = React.useRef(null);
76
+ const scrollbarVerticalRef = apiRef.current.virtualScrollbarVerticalRef;
77
+ const scrollbarHorizontalRef = apiRef.current.virtualScrollbarHorizontalRef;
78
78
  const contentHeight = dimensions.contentSize.height;
79
79
  const columnsTotalWidth = dimensions.columnsTotalWidth;
80
80
  const hasColSpan = useGridSelector(apiRef, gridHasColSpanSelector);
@@ -3,7 +3,7 @@ import { GridApiContext } from "../../components/GridApiContext.js";
3
3
  export function useGridApiContext() {
4
4
  const apiRef = React.useContext(GridApiContext);
5
5
  if (apiRef === undefined) {
6
- throw new Error(['MUI X: Could not find the data grid context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the data grid.'].join('\n'));
6
+ throw new Error(['MUI X: Could not find the Data Grid context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the Data Grid.'].join('\n'));
7
7
  }
8
8
  return apiRef;
9
9
  }
@@ -3,7 +3,7 @@ import { TimerBasedCleanupTracking } from "../../utils/cleanupTracking/TimerBase
3
3
  import { FinalizationRegistryBasedCleanupTracking } from "../../utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js";
4
4
  /**
5
5
  * Signal to the underlying logic what version of the public component API
6
- * of the data grid is exposed.
6
+ * of the Data Grid is exposed.
7
7
  */
8
8
  var GridSignature = /*#__PURE__*/function (GridSignature) {
9
9
  GridSignature["DataGrid"] = "DataGrid";
@@ -3,7 +3,7 @@ import { GridConfigurationContext } from "../../components/GridConfigurationCont
3
3
  export const useGridConfiguration = () => {
4
4
  const configuration = React.useContext(GridConfigurationContext);
5
5
  if (configuration === undefined) {
6
- throw new Error(['MUI X: Could not find the data grid configuration context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the data grid.'].join('\n'));
6
+ throw new Error(['MUI X: Could not find the Data Grid configuration context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the Data Grid.'].join('\n'));
7
7
  }
8
8
  return configuration;
9
9
  };
@@ -6,7 +6,7 @@ if (process.env.NODE_ENV !== 'production') {
6
6
  export function useGridPrivateApiContext() {
7
7
  const privateApiRef = React.useContext(GridPrivateApiContext);
8
8
  if (privateApiRef === undefined) {
9
- throw new Error(['MUI X: Could not find the data grid private context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the data grid.'].join('\n'));
9
+ throw new Error(['MUI X: Could not find the Data Grid private context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the Data Grid.'].join('\n'));
10
10
  }
11
11
  return privateApiRef;
12
12
  }
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.18.0
2
+ * @mui/x-data-grid v7.20.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -29,9 +29,9 @@ export { GridColumnMenu, GRID_COLUMN_MENU_SLOTS, GRID_COLUMN_MENU_SLOT_PROPS } f
29
29
  */
30
30
 
31
31
  /**
32
- * The state of `DataGrid`.
32
+ * The state of Data Grid.
33
33
  */
34
34
 
35
35
  /**
36
- * The initial state of `DataGrid`.
36
+ * The initial state of Data Grid.
37
37
  */
@@ -53,6 +53,7 @@ export { useGridStatePersistence } from "../hooks/features/statePersistence/useG
53
53
  export { useGridVirtualScroller, EMPTY_DETAIL_PANELS } from "../hooks/features/virtualization/useGridVirtualScroller.js";
54
54
  export * from "../hooks/features/virtualization/index.js";
55
55
  export { useGridColumnResize, columnResizeStateInitializer } from "../hooks/features/columnResize/useGridColumnResize.js";
56
+ export { ROW_SELECTION_PROPAGATION_DEFAULT } from "../hooks/features/rowSelection/utils.js";
56
57
  export { useTimeout } from "../hooks/utils/useTimeout.js";
57
58
  export { useGridVisibleRows, getVisibleRows } from "../hooks/utils/useGridVisibleRows.js";
58
59
  export { useGridInitializeState } from "../hooks/utils/useGridInitializeState.js";
@@ -34,7 +34,6 @@ function createSvgIcon(path, displayName) {
34
34
  } = _ref,
35
35
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
36
36
  return /*#__PURE__*/_jsx(SvgIcon, _extends({
37
- "data-testid": `${displayName}Icon`,
38
37
  ref: ref,
39
38
  fill: "none",
40
39
  stroke: "currentColor",
@@ -30,11 +30,10 @@ const bgBGGrid = {
30
30
  toolbarExportPrint: 'Принтиране',
31
31
  toolbarExportExcel: 'Изтегли като Excel',
32
32
  // Columns management text
33
- // columnsManagementSearchTitle: 'Search',
34
- // columnsManagementNoColumns: 'No columns',
35
- // columnsManagementShowHideAllText: 'Show/Hide All',
36
- // columnsManagementReset: 'Reset',
37
-
33
+ columnsManagementSearchTitle: 'Търсене',
34
+ columnsManagementNoColumns: 'Няма колони',
35
+ columnsManagementShowHideAllText: 'Покажи/Скрий Всичко',
36
+ columnsManagementReset: 'Нулирай',
38
37
  // Filter panel text
39
38
  filterPanelAddFilter: 'Добави Филтър',
40
39
  filterPanelRemoveAll: 'Премахни всички',
@@ -48,9 +47,9 @@ const bgBGGrid = {
48
47
  filterPanelInputPlaceholder: 'Стойност на филтъра',
49
48
  // Filter operators text
50
49
  filterOperatorContains: 'съдържа',
51
- // filterOperatorDoesNotContain: 'does not contain',
50
+ filterOperatorDoesNotContain: 'не съдържа',
52
51
  filterOperatorEquals: 'равно',
53
- // filterOperatorDoesNotEqual: 'does not equal',
52
+ filterOperatorDoesNotEqual: 'не е равно',
54
53
  filterOperatorStartsWith: 'започва с',
55
54
  filterOperatorEndsWith: 'завършва с',
56
55
  filterOperatorIs: 'е',
@@ -70,9 +69,9 @@ const bgBGGrid = {
70
69
  'filterOperator<=': '<=',
71
70
  // Header filter operators text
72
71
  headerFilterOperatorContains: 'Съдържа',
73
- // headerFilterOperatorDoesNotContain: 'Does not contain',
72
+ headerFilterOperatorDoesNotContain: 'Не съдържа',
74
73
  headerFilterOperatorEquals: 'Равнo',
75
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
74
+ headerFilterOperatorDoesNotEqual: 'Не е равно',
76
75
  headerFilterOperatorStartsWith: 'Започва с',
77
76
  headerFilterOperatorEndsWith: 'Завършва с',
78
77
  headerFilterOperatorIs: 'Равно е на',
@@ -47,9 +47,9 @@ const deDEGrid = {
47
47
  filterPanelInputPlaceholder: 'Wert filtern',
48
48
  // Filter operators text
49
49
  filterOperatorContains: 'enthält',
50
- // filterOperatorDoesNotContain: 'does not contain',
50
+ filterOperatorDoesNotContain: 'enthält nicht',
51
51
  filterOperatorEquals: 'ist gleich',
52
- // filterOperatorDoesNotEqual: 'does not equal',
52
+ filterOperatorDoesNotEqual: 'ist ungleich',
53
53
  filterOperatorStartsWith: 'beginnt mit',
54
54
  filterOperatorEndsWith: 'endet mit',
55
55
  filterOperatorIs: 'ist',
@@ -69,9 +69,9 @@ const deDEGrid = {
69
69
  'filterOperator<=': '<=',
70
70
  // Header filter operators text
71
71
  headerFilterOperatorContains: 'Enthält',
72
- // headerFilterOperatorDoesNotContain: 'Does not contain',
72
+ headerFilterOperatorDoesNotContain: 'Enthält nicht',
73
73
  headerFilterOperatorEquals: 'Gleich',
74
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
74
+ headerFilterOperatorDoesNotEqual: 'Ungleich',
75
75
  headerFilterOperatorStartsWith: 'Beginnt mit',
76
76
  headerFilterOperatorEndsWith: 'Endet mit',
77
77
  headerFilterOperatorIs: 'Ist',
@@ -47,9 +47,9 @@ const frFRGrid = {
47
47
  filterPanelInputPlaceholder: 'Filtrer la valeur',
48
48
  // Filter operators text
49
49
  filterOperatorContains: 'contient',
50
- // filterOperatorDoesNotContain: 'does not contain',
50
+ filterOperatorDoesNotContain: 'ne contient pas',
51
51
  filterOperatorEquals: 'est égal à',
52
- // filterOperatorDoesNotEqual: 'does not equal',
52
+ filterOperatorDoesNotEqual: "n'est pas égal à",
53
53
  filterOperatorStartsWith: 'commence par',
54
54
  filterOperatorEndsWith: 'se termine par',
55
55
  filterOperatorIs: 'est',
@@ -69,9 +69,9 @@ const frFRGrid = {
69
69
  'filterOperator<=': '<=',
70
70
  // Header filter operators text
71
71
  headerFilterOperatorContains: 'Contient',
72
- // headerFilterOperatorDoesNotContain: 'Does not contain',
72
+ headerFilterOperatorDoesNotContain: 'Ne contient pas',
73
73
  headerFilterOperatorEquals: 'Est égal à',
74
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
74
+ headerFilterOperatorDoesNotEqual: "N'est pas égal à",
75
75
  headerFilterOperatorStartsWith: 'Commence par',
76
76
  headerFilterOperatorEndsWith: 'Se termine par',
77
77
  headerFilterOperatorIs: 'Est',
@@ -7,50 +7,57 @@ const hrHRGrid = {
7
7
  // Density selector toolbar button text
8
8
  toolbarDensity: 'Gustoća',
9
9
  toolbarDensityLabel: 'Gustoća',
10
- toolbarDensityCompact: 'Kompaktan',
11
- toolbarDensityStandard: 'Standard',
10
+ toolbarDensityCompact: 'Kompaktno',
11
+ toolbarDensityStandard: 'Standardno',
12
12
  toolbarDensityComfortable: 'Udobno',
13
13
  // Columns selector toolbar button text
14
14
  toolbarColumns: 'Stupci',
15
15
  toolbarColumnsLabel: 'Odaberite stupce',
16
16
  // Filters toolbar button text
17
17
  toolbarFilters: 'Filteri',
18
- toolbarFiltersLabel: 'Prikaži filtre',
19
- toolbarFiltersTooltipHide: 'Sakrij filtre',
20
- toolbarFiltersTooltipShow: 'Prikaži filtre',
21
- toolbarFiltersTooltipActive: count => count !== 1 ? `${count} aktivnih filtara` : `${count} aktivni filter`,
18
+ toolbarFiltersLabel: 'Prikaži filtere',
19
+ toolbarFiltersTooltipHide: 'Sakrij filtere',
20
+ toolbarFiltersTooltipShow: 'Prikaži filtere',
21
+ toolbarFiltersTooltipActive: count => {
22
+ if (count === 1) {
23
+ return `${count} aktivan filter`;
24
+ }
25
+ if (count < 5) {
26
+ return `${count} aktivna filtera`;
27
+ }
28
+ return `${count} aktivnih filtera`;
29
+ },
22
30
  // Quick filter toolbar field
23
31
  toolbarQuickFilterPlaceholder: 'Traži…',
24
32
  toolbarQuickFilterLabel: 'traži',
25
- toolbarQuickFilterDeleteIconLabel: 'Čisto',
33
+ toolbarQuickFilterDeleteIconLabel: 'Obriši',
26
34
  // Export selector toolbar button text
27
35
  toolbarExport: 'Izvoz',
28
36
  toolbarExportLabel: 'Izvoz',
29
37
  toolbarExportCSV: 'Preuzmi kao CSV',
30
- toolbarExportPrint: 'Ispis',
31
- toolbarExportExcel: 'Preuzmite kao Excel',
38
+ toolbarExportPrint: 'Štampaj',
39
+ toolbarExportExcel: 'Preuzmi kao Excel',
32
40
  // Columns management text
33
- // columnsManagementSearchTitle: 'Search',
34
- // columnsManagementNoColumns: 'No columns',
35
- // columnsManagementShowHideAllText: 'Show/Hide All',
36
- // columnsManagementReset: 'Reset',
37
-
41
+ columnsManagementSearchTitle: 'Traži',
42
+ columnsManagementNoColumns: 'Nema stupaca',
43
+ columnsManagementShowHideAllText: 'Prikaži/Sakrij sve',
44
+ columnsManagementReset: 'Ponovno namjesti',
38
45
  // Filter panel text
39
- filterPanelAddFilter: 'Dodajte filter',
40
- filterPanelRemoveAll: 'Ukloniti sve',
41
- filterPanelDeleteIconLabel: 'Izbrisati',
46
+ filterPanelAddFilter: 'Dodaj filter',
47
+ filterPanelRemoveAll: 'Ukloni sve',
48
+ filterPanelDeleteIconLabel: 'Obriši',
42
49
  filterPanelLogicOperator: 'Logički operator',
43
- filterPanelOperator: 'Operater',
50
+ filterPanelOperator: 'Operator',
44
51
  filterPanelOperatorAnd: 'I',
45
52
  filterPanelOperatorOr: 'Ili',
46
- filterPanelColumns: 'Stupci',
53
+ filterPanelColumns: 'Stupac',
47
54
  filterPanelInputLabel: 'Vrijednost',
48
- filterPanelInputPlaceholder: 'Vrijednost filtra',
55
+ filterPanelInputPlaceholder: 'Vrijednost filtera',
49
56
  // Filter operators text
50
57
  filterOperatorContains: 'sadrži',
51
- // filterOperatorDoesNotContain: 'does not contain',
52
- filterOperatorEquals: 'jednaki',
53
- // filterOperatorDoesNotEqual: 'does not equal',
58
+ filterOperatorDoesNotContain: 'ne sadrži',
59
+ filterOperatorEquals: 'je jednak',
60
+ filterOperatorDoesNotEqual: 'nije jednak',
54
61
  filterOperatorStartsWith: 'počinje sa',
55
62
  filterOperatorEndsWith: 'završava sa',
56
63
  filterOperatorIs: 'je',
@@ -59,8 +66,8 @@ const hrHRGrid = {
59
66
  filterOperatorOnOrAfter: 'je na ili poslije',
60
67
  filterOperatorBefore: 'je prije',
61
68
  filterOperatorOnOrBefore: 'je na ili prije',
62
- filterOperatorIsEmpty: 'prazno je',
63
- filterOperatorIsNotEmpty: 'nije prazna',
69
+ filterOperatorIsEmpty: 'je prazno',
70
+ filterOperatorIsNotEmpty: 'nije prazno',
64
71
  filterOperatorIsAnyOf: 'je bilo koji od',
65
72
  'filterOperator=': '=',
66
73
  'filterOperator!=': '!=',
@@ -70,20 +77,20 @@ const hrHRGrid = {
70
77
  'filterOperator<=': '<=',
71
78
  // Header filter operators text
72
79
  headerFilterOperatorContains: 'Sadrži',
73
- // headerFilterOperatorDoesNotContain: 'Does not contain',
80
+ headerFilterOperatorDoesNotContain: 'Ne sadrži',
74
81
  headerFilterOperatorEquals: 'Jednako',
75
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
82
+ headerFilterOperatorDoesNotEqual: 'Nije jednako',
76
83
  headerFilterOperatorStartsWith: 'Počinje sa',
77
- headerFilterOperatorEndsWith: 'Završava s',
84
+ headerFilterOperatorEndsWith: 'Završava sa',
78
85
  headerFilterOperatorIs: 'Je',
79
86
  headerFilterOperatorNot: 'Nije',
80
87
  headerFilterOperatorAfter: 'Je poslije',
81
88
  headerFilterOperatorOnOrAfter: 'Je uključeno ili poslije',
82
- headerFilterOperatorBefore: 'Je li prije',
83
- headerFilterOperatorOnOrBefore: 'Uključeno je ili prije',
84
- headerFilterOperatorIsEmpty: 'Prazno je',
85
- headerFilterOperatorIsNotEmpty: 'Nije prazna',
86
- headerFilterOperatorIsAnyOf: 'Je li bilo koji od',
89
+ headerFilterOperatorBefore: 'Je prije',
90
+ headerFilterOperatorOnOrBefore: 'Je uključeno ili prije',
91
+ headerFilterOperatorIsEmpty: 'Je prazno',
92
+ headerFilterOperatorIsNotEmpty: 'Nije prazno',
93
+ headerFilterOperatorIsAnyOf: 'Je bilo koji od',
87
94
  'headerFilterOperator=': 'Jednako',
88
95
  'headerFilterOperator!=': 'Nije jednako',
89
96
  'headerFilterOperator>': 'Veći od',
@@ -92,32 +99,48 @@ const hrHRGrid = {
92
99
  'headerFilterOperator<=': 'Manje od ili jednako',
93
100
  // Filter values text
94
101
  filterValueAny: 'bilo koji',
95
- filterValueTrue: 'pravi',
96
- filterValueFalse: 'lažno',
102
+ filterValueTrue: 'tačno',
103
+ filterValueFalse: 'netačno',
97
104
  // Column menu text
98
- columnMenuLabel: 'Jelovnik ',
105
+ columnMenuLabel: 'Izbornik',
99
106
  columnMenuShowColumns: 'Prikaži stupce',
100
107
  columnMenuManageColumns: 'Upravljanje stupcima',
101
- columnMenuFilter: 'filtar',
108
+ columnMenuFilter: 'Filter',
102
109
  columnMenuHideColumn: 'Sakrij stupac',
103
110
  columnMenuUnsort: 'Poništi sortiranje',
104
111
  columnMenuSortAsc: 'Poredaj uzlazno',
105
- columnMenuSortDesc: 'Poredaj silaznim redom',
112
+ columnMenuSortDesc: 'Poredaj silazno',
106
113
  // Column header text
107
- columnHeaderFiltersTooltipActive: count => count !== 1 ? `${count} aktivnih filtara` : `${count} aktivni filter`,
108
- columnHeaderFiltersLabel: 'Prikaži filtre',
109
- columnHeaderSortIconLabel: 'Vrsta',
114
+ columnHeaderFiltersTooltipActive: count => {
115
+ if (count === 1) {
116
+ return `${count} aktivan filter`;
117
+ }
118
+ if (count < 5) {
119
+ return `${count} aktivna filtera`;
120
+ }
121
+ return `${count} aktivnih filtera`;
122
+ },
123
+ columnHeaderFiltersLabel: 'Prikaži filtere',
124
+ columnHeaderSortIconLabel: 'Poredaj',
110
125
  // Rows selected footer text
111
- footerRowSelected: count => count !== 1 ? `Odabrano je ${count.toLocaleString()} redaka` : `${count.toLocaleString()} redak odabran`,
126
+ footerRowSelected: count => {
127
+ if (count === 1) {
128
+ return `Odabran je ${count.toLocaleString()} redak`;
129
+ }
130
+ if (count < 5) {
131
+ return `Odabrana su ${count.toLocaleString()} retka`;
132
+ }
133
+ return `Odabrano je ${count.toLocaleString()} redaka`;
134
+ },
112
135
  // Total row amount footer text
113
136
  footerTotalRows: 'Ukupno redaka:',
114
137
  // Total visible row amount footer text
115
138
  footerTotalVisibleRows: (visibleCount, totalCount) => `${visibleCount.toLocaleString()} od ${totalCount.toLocaleString()}`,
116
139
  // Checkbox selection text
117
- checkboxSelectionHeaderName: 'Odabir potvrdnog okvira',
140
+ checkboxSelectionHeaderName: 'Odabir redaka',
118
141
  checkboxSelectionSelectAllRows: 'Odaberite sve retke',
119
142
  checkboxSelectionUnselectAllRows: 'Poništi odabir svih redaka',
120
- checkboxSelectionSelectRow: 'Odaberite red',
143
+ checkboxSelectionSelectRow: 'Odaberite redak',
121
144
  checkboxSelectionUnselectRow: 'Poništi odabir retka',
122
145
  // Boolean cell text
123
146
  booleanCellTrueLabel: 'Da',
@@ -129,7 +152,7 @@ const hrHRGrid = {
129
152
  pinToRight: 'Prikvači desno',
130
153
  unpin: 'Otkvači',
131
154
  // Tree Data
132
- treeDataGroupingHeaderName: 'Group',
155
+ treeDataGroupingHeaderName: 'Skupina',
133
156
  treeDataExpand: 'vidjeti djecu',
134
157
  treeDataCollapse: 'sakriti djecu',
135
158
  // Grouping columns
@@ -139,7 +162,7 @@ const hrHRGrid = {
139
162
  // Master/detail
140
163
  detailPanelToggle: 'Prebacivanje ploče s detaljima',
141
164
  expandDetailPanel: 'Proširiti',
142
- collapseDetailPanel: 'Kolaps',
165
+ collapseDetailPanel: 'Skupiti',
143
166
  // Row reordering text
144
167
  rowReorderingHeaderName: 'Promjena redoslijeda',
145
168
  // Aggregation
@@ -33,8 +33,7 @@ const jaJPGrid = {
33
33
  columnsManagementSearchTitle: '検索',
34
34
  columnsManagementNoColumns: 'カラムなし',
35
35
  columnsManagementShowHideAllText: 'すべて表示/非表示',
36
- // columnsManagementReset: 'Reset',
37
-
36
+ columnsManagementReset: 'リセット',
38
37
  // Filter panel text
39
38
  filterPanelAddFilter: 'フィルター追加',
40
39
  filterPanelRemoveAll: 'すべて削除',
@@ -48,9 +47,9 @@ const jaJPGrid = {
48
47
  filterPanelInputPlaceholder: '値を入力…',
49
48
  // Filter operators text
50
49
  filterOperatorContains: '...を含む',
51
- // filterOperatorDoesNotContain: 'does not contain',
50
+ filterOperatorDoesNotContain: '...を含まない',
52
51
  filterOperatorEquals: '...に等しい',
53
- // filterOperatorDoesNotEqual: 'does not equal',
52
+ filterOperatorDoesNotEqual: '...に等しくない',
54
53
  filterOperatorStartsWith: '...で始まる',
55
54
  filterOperatorEndsWith: '...で終わる',
56
55
  filterOperatorIs: '...である',
@@ -70,9 +69,9 @@ const jaJPGrid = {
70
69
  'filterOperator<=': '<=',
71
70
  // Header filter operators text
72
71
  headerFilterOperatorContains: '含む',
73
- // headerFilterOperatorDoesNotContain: 'Does not contain',
72
+ headerFilterOperatorDoesNotContain: '含まない',
74
73
  headerFilterOperatorEquals: '等しい',
75
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
74
+ headerFilterOperatorDoesNotEqual: '等しくない',
76
75
  headerFilterOperatorStartsWith: 'で始まる',
77
76
  headerFilterOperatorEndsWith: 'で終わる',
78
77
  headerFilterOperatorIs: 'である',
@@ -47,9 +47,9 @@ const ptPTGrid = {
47
47
  filterPanelInputPlaceholder: 'Valor do filtro',
48
48
  // Filter operators text
49
49
  filterOperatorContains: 'contém',
50
- // filterOperatorDoesNotContain: 'does not contain',
50
+ filterOperatorDoesNotContain: 'não contém',
51
51
  filterOperatorEquals: 'é igual a',
52
- // filterOperatorDoesNotEqual: 'does not equal',
52
+ filterOperatorDoesNotEqual: 'não é igual a',
53
53
  filterOperatorStartsWith: 'começa com',
54
54
  filterOperatorEndsWith: 'termina com',
55
55
  filterOperatorIs: 'é',
@@ -69,9 +69,9 @@ const ptPTGrid = {
69
69
  'filterOperator<=': '<=',
70
70
  // Header filter operators text
71
71
  headerFilterOperatorContains: 'Contém',
72
- // headerFilterOperatorDoesNotContain: 'Does not contain',
72
+ headerFilterOperatorDoesNotContain: 'Não contém',
73
73
  headerFilterOperatorEquals: 'É igual a',
74
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
74
+ headerFilterOperatorDoesNotEqual: 'Não é igual',
75
75
  headerFilterOperatorStartsWith: 'Começa com',
76
76
  headerFilterOperatorEndsWith: 'Termina com',
77
77
  headerFilterOperatorIs: 'É',