@mui/x-data-grid-premium 8.0.0-alpha.0 → 8.0.0-alpha.10

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 (157) hide show
  1. package/CHANGELOG.md +2215 -119
  2. package/DataGridPremium/DataGridPremium.js +40 -40
  3. package/DataGridPremium/useDataGridPremiumComponent.d.ts +2 -2
  4. package/DataGridPremium/useDataGridPremiumComponent.js +4 -2
  5. package/DataGridPremium/useDataGridPremiumProps.js +5 -3
  6. package/README.md +3 -3
  7. package/components/GridAggregationHeader.js +6 -1
  8. package/components/GridColumnMenuAggregationItem.js +77 -49
  9. package/components/GridColumnMenuRowGroupItem.js +5 -11
  10. package/components/GridColumnMenuRowUngroupItem.js +10 -19
  11. package/components/GridDataSourceGroupingCriteriaCell.js +1 -2
  12. package/components/GridPremiumColumnMenu.d.ts +1 -1
  13. package/components/GridPremiumColumnMenu.js +5 -5
  14. package/components/index.d.ts +1 -0
  15. package/components/index.js +12 -0
  16. package/components/promptControl/GridToolbarPromptControl.d.ts +26 -0
  17. package/components/promptControl/GridToolbarPromptControl.js +220 -0
  18. package/components/promptControl/RecordButton.d.ts +16 -0
  19. package/components/promptControl/RecordButton.js +119 -0
  20. package/components/promptControl/index.d.ts +1 -0
  21. package/components/promptControl/index.js +12 -0
  22. package/esm/DataGridPremium/DataGridPremium.js +42 -42
  23. package/esm/DataGridPremium/useDataGridPremiumComponent.js +5 -3
  24. package/esm/DataGridPremium/useDataGridPremiumProps.js +6 -4
  25. package/esm/components/GridAggregationHeader.js +6 -1
  26. package/esm/components/GridColumnMenuAggregationItem.js +75 -47
  27. package/esm/components/GridColumnMenuRowGroupItem.js +6 -11
  28. package/esm/components/GridColumnMenuRowUngroupItem.js +11 -19
  29. package/esm/components/GridDataSourceGroupingCriteriaCell.js +1 -2
  30. package/esm/components/GridPremiumColumnMenu.js +5 -5
  31. package/esm/components/index.js +1 -0
  32. package/esm/components/promptControl/GridToolbarPromptControl.js +213 -0
  33. package/esm/components/promptControl/RecordButton.js +111 -0
  34. package/esm/components/promptControl/index.js +1 -0
  35. package/esm/hooks/features/aggregation/createAggregationLookup.js +52 -55
  36. package/esm/hooks/features/aggregation/gridAggregationUtils.js +17 -13
  37. package/esm/hooks/features/aggregation/index.js +0 -1
  38. package/esm/hooks/features/aggregation/useGridAggregation.js +22 -10
  39. package/esm/hooks/features/aggregation/useGridAggregationPreProcessors.js +8 -14
  40. package/esm/hooks/features/cellSelection/useGridCellSelection.js +5 -6
  41. package/esm/hooks/features/clipboard/useGridClipboardImport.js +1 -1
  42. package/esm/hooks/features/dataSource/cache.js +3 -0
  43. package/esm/hooks/features/dataSource/models.js +1 -0
  44. package/esm/hooks/features/dataSource/useGridDataSourcePremium.js +53 -0
  45. package/esm/hooks/features/index.js +2 -1
  46. package/esm/hooks/features/promptControl/api.js +22 -0
  47. package/esm/hooks/features/promptControl/index.js +1 -0
  48. package/esm/hooks/features/promptControl/types.js +1 -0
  49. package/esm/hooks/features/rowGrouping/createGroupingColDef.js +5 -1
  50. package/esm/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -2
  51. package/esm/hooks/features/rowGrouping/useGridRowGrouping.js +2 -2
  52. package/esm/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +9 -4
  53. package/esm/hooks/utils/useGridAriaAttributes.js +1 -3
  54. package/esm/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  55. package/esm/material/icons.js +7 -1
  56. package/esm/material/index.js +4 -2
  57. package/esm/utils/releaseInfo.js +1 -1
  58. package/hooks/features/aggregation/createAggregationLookup.d.ts +7 -6
  59. package/hooks/features/aggregation/createAggregationLookup.js +52 -55
  60. package/hooks/features/aggregation/gridAggregationInterfaces.d.ts +18 -5
  61. package/hooks/features/aggregation/gridAggregationSelectors.d.ts +2 -2
  62. package/hooks/features/aggregation/gridAggregationUtils.d.ts +12 -13
  63. package/hooks/features/aggregation/gridAggregationUtils.js +17 -13
  64. package/hooks/features/aggregation/index.d.ts +1 -1
  65. package/hooks/features/aggregation/index.js +0 -12
  66. package/hooks/features/aggregation/useGridAggregation.d.ts +2 -2
  67. package/hooks/features/aggregation/useGridAggregation.js +22 -10
  68. package/hooks/features/aggregation/useGridAggregationPreProcessors.d.ts +2 -2
  69. package/hooks/features/aggregation/useGridAggregationPreProcessors.js +8 -14
  70. package/hooks/features/aggregation/wrapColumnWithAggregation.d.ts +4 -2
  71. package/hooks/features/cellSelection/gridCellSelectionInterfaces.d.ts +3 -3
  72. package/hooks/features/cellSelection/useGridCellSelection.d.ts +2 -2
  73. package/hooks/features/cellSelection/useGridCellSelection.js +4 -5
  74. package/hooks/features/clipboard/useGridClipboardImport.d.ts +2 -2
  75. package/hooks/features/clipboard/useGridClipboardImport.js +1 -1
  76. package/hooks/features/dataSource/cache.d.ts +2 -0
  77. package/hooks/features/dataSource/cache.js +9 -0
  78. package/hooks/features/dataSource/models.d.ts +47 -0
  79. package/hooks/features/dataSource/models.js +5 -0
  80. package/hooks/features/dataSource/useGridDataSourcePremium.d.ts +4 -0
  81. package/hooks/features/dataSource/useGridDataSourcePremium.js +62 -0
  82. package/hooks/features/export/serializer/excelSerializer.d.ts +3 -2
  83. package/hooks/features/export/useGridExcelExport.d.ts +2 -2
  84. package/hooks/features/index.d.ts +1 -0
  85. package/hooks/features/index.js +11 -0
  86. package/hooks/features/promptControl/api.d.ts +2 -0
  87. package/hooks/features/promptControl/api.js +28 -0
  88. package/hooks/features/promptControl/index.d.ts +2 -0
  89. package/hooks/features/promptControl/index.js +12 -0
  90. package/hooks/features/promptControl/types.d.ts +25 -0
  91. package/hooks/features/promptControl/types.js +5 -0
  92. package/hooks/features/rowGrouping/createGroupingColDef.d.ts +2 -2
  93. package/hooks/features/rowGrouping/createGroupingColDef.js +5 -1
  94. package/hooks/features/rowGrouping/gridRowGroupingSelector.d.ts +2 -2
  95. package/hooks/features/rowGrouping/gridRowGroupingUtils.d.ts +4 -4
  96. package/hooks/features/rowGrouping/gridRowGroupingUtils.js +1 -1
  97. package/hooks/features/rowGrouping/useGridDataSourceRowGroupingPreProcessors.d.ts +2 -2
  98. package/hooks/features/rowGrouping/useGridRowGrouping.d.ts +2 -2
  99. package/hooks/features/rowGrouping/useGridRowGrouping.js +1 -1
  100. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.d.ts +2 -2
  101. package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +9 -4
  102. package/hooks/utils/useGridApiContext.d.ts +1 -1
  103. package/hooks/utils/useGridApiRef.d.ts +3 -1
  104. package/hooks/utils/useGridAriaAttributes.js +1 -3
  105. package/hooks/utils/useGridPrivateApiContext.d.ts +1 -1
  106. package/hooks/utils/useKeepGroupedColumnsHidden.d.ts +2 -2
  107. package/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  108. package/index.d.ts +2 -0
  109. package/index.js +1 -1
  110. package/material/icons.d.ts +6 -0
  111. package/material/icons.js +8 -2
  112. package/material/index.d.ts +2 -0
  113. package/material/index.js +3 -1
  114. package/models/dataGridPremiumProps.d.ts +8 -12
  115. package/models/gridApiPremium.d.ts +5 -3
  116. package/models/gridGroupingValueGetter.d.ts +2 -1
  117. package/models/gridPastedValueParser.d.ts +2 -1
  118. package/models/gridPremiumIconSlotsComponent.d.ts +10 -0
  119. package/modern/DataGridPremium/DataGridPremium.js +42 -42
  120. package/modern/DataGridPremium/useDataGridPremiumComponent.js +5 -3
  121. package/modern/DataGridPremium/useDataGridPremiumProps.js +6 -4
  122. package/modern/components/GridAggregationHeader.js +6 -1
  123. package/modern/components/GridColumnMenuAggregationItem.js +75 -47
  124. package/modern/components/GridColumnMenuRowGroupItem.js +6 -11
  125. package/modern/components/GridColumnMenuRowUngroupItem.js +11 -19
  126. package/modern/components/GridDataSourceGroupingCriteriaCell.js +1 -2
  127. package/modern/components/GridPremiumColumnMenu.js +5 -5
  128. package/modern/components/index.js +1 -0
  129. package/modern/components/promptControl/GridToolbarPromptControl.js +213 -0
  130. package/modern/components/promptControl/RecordButton.js +111 -0
  131. package/modern/components/promptControl/index.js +1 -0
  132. package/modern/hooks/features/aggregation/createAggregationLookup.js +52 -55
  133. package/modern/hooks/features/aggregation/gridAggregationUtils.js +17 -13
  134. package/modern/hooks/features/aggregation/index.js +0 -1
  135. package/modern/hooks/features/aggregation/useGridAggregation.js +22 -10
  136. package/modern/hooks/features/aggregation/useGridAggregationPreProcessors.js +8 -14
  137. package/modern/hooks/features/cellSelection/useGridCellSelection.js +5 -6
  138. package/modern/hooks/features/clipboard/useGridClipboardImport.js +1 -1
  139. package/modern/hooks/features/dataSource/cache.js +3 -0
  140. package/modern/hooks/features/dataSource/models.js +1 -0
  141. package/modern/hooks/features/dataSource/useGridDataSourcePremium.js +53 -0
  142. package/modern/hooks/features/index.js +2 -1
  143. package/modern/hooks/features/promptControl/api.js +22 -0
  144. package/modern/hooks/features/promptControl/index.js +1 -0
  145. package/modern/hooks/features/promptControl/types.js +1 -0
  146. package/modern/hooks/features/rowGrouping/createGroupingColDef.js +5 -1
  147. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -2
  148. package/modern/hooks/features/rowGrouping/useGridRowGrouping.js +2 -2
  149. package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +9 -4
  150. package/modern/hooks/utils/useGridAriaAttributes.js +1 -3
  151. package/modern/hooks/utils/useKeepGroupedColumnsHidden.js +2 -2
  152. package/modern/index.js +1 -1
  153. package/modern/material/icons.js +7 -1
  154. package/modern/material/index.js +4 -2
  155. package/modern/utils/releaseInfo.js +1 -1
  156. package/package.json +8 -8
  157. package/utils/releaseInfo.js +1 -1
@@ -1,4 +1,5 @@
1
- import { useGridInitialization, useGridInitializeState, useGridClipboard, useGridColumnMenu, useGridColumns, columnsStateInitializer, useGridDensity, useGridCsvExport, useGridPrintExport, useGridFilter, filterStateInitializer, useGridFocus, useGridKeyboardNavigation, useGridPagination, paginationStateInitializer, useGridPreferencesPanel, useGridEditing, editingStateInitializer, useGridRows, useGridRowsPreProcessors, rowsStateInitializer, useGridRowsMeta, useGridParamsApi, useGridRowSelection, useGridSorting, sortingStateInitializer, useGridScroll, useGridEvents, dimensionsStateInitializer, useGridDimensions, useGridStatePersistence, useGridRowSelectionPreProcessors, columnMenuStateInitializer, densityStateInitializer, focusStateInitializer, preferencePanelStateInitializer, rowsMetaStateInitializer, rowSelectionStateInitializer, useGridColumnReorder, columnReorderStateInitializer, useGridColumnResize, columnResizeStateInitializer, useGridTreeData, useGridTreeDataPreProcessors, useGridColumnPinning, columnPinningStateInitializer, useGridColumnPinningPreProcessors, useGridDetailPanel, detailPanelStateInitializer, useGridDetailPanelPreProcessors, useGridInfiniteLoader, useGridColumnSpanning, useGridRowReorder, useGridRowReorderPreProcessors, useGridRowPinning, useGridRowPinningPreProcessors, rowPinningStateInitializer, useGridColumnGrouping, columnGroupsStateInitializer, useGridLazyLoader, useGridLazyLoaderPreProcessors, headerFilteringStateInitializer, useGridHeaderFiltering, virtualizationStateInitializer, useGridVirtualization, useGridDataSourceTreeDataPreProcessors, useGridDataSource, dataSourceStateInitializer, useGridRowSpanning, rowSpanningStateInitializer, useGridListView, listViewStateInitializer } from '@mui/x-data-grid-pro/internals';
1
+ import { useGridInitialization, useGridInitializeState, useGridClipboard, useGridColumnMenu, useGridColumns, columnsStateInitializer, useGridDensity, useGridCsvExport, useGridPrintExport, useGridFilter, filterStateInitializer, useGridFocus, useGridKeyboardNavigation, useGridPagination, paginationStateInitializer, useGridPreferencesPanel, useGridEditing, editingStateInitializer, useGridRows, useGridRowsPreProcessors, rowsStateInitializer, useGridRowsMeta, useGridParamsApi, useGridRowSelection, useGridSorting, sortingStateInitializer, useGridScroll, useGridEvents, dimensionsStateInitializer, useGridDimensions, useGridStatePersistence, useGridRowSelectionPreProcessors, columnMenuStateInitializer, densityStateInitializer, focusStateInitializer, preferencePanelStateInitializer, rowsMetaStateInitializer, rowSelectionStateInitializer, useGridColumnReorder, columnReorderStateInitializer, useGridColumnResize, columnResizeStateInitializer, useGridTreeData, useGridTreeDataPreProcessors, useGridColumnPinning, columnPinningStateInitializer, useGridColumnPinningPreProcessors, useGridDetailPanel, detailPanelStateInitializer, useGridDetailPanelPreProcessors, useGridInfiniteLoader, useGridColumnSpanning, useGridRowReorder, useGridRowReorderPreProcessors, useGridRowPinning, useGridRowPinningPreProcessors, rowPinningStateInitializer, useGridColumnGrouping, columnGroupsStateInitializer, useGridLazyLoader, useGridLazyLoaderPreProcessors, useGridDataSourceLazyLoader, headerFilteringStateInitializer, useGridHeaderFiltering, virtualizationStateInitializer, useGridVirtualization, useGridDataSourceTreeDataPreProcessors, dataSourceStateInitializer, useGridRowSpanning, rowSpanningStateInitializer, useGridListView, listViewStateInitializer } from '@mui/x-data-grid-pro/internals';
2
+ import { useGridDataSourcePremium as useGridDataSource } from "../hooks/features/dataSource/useGridDataSourcePremium.js";
2
3
  // Premium-only features
3
4
  import { useGridAggregation, aggregationStateInitializer } from "../hooks/features/aggregation/useGridAggregation.js";
4
5
  import { useGridAggregationPreProcessors } from "../hooks/features/aggregation/useGridAggregationPreProcessors.js";
@@ -42,6 +43,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
42
43
  useGridInitializeState(columnPinningStateInitializer, apiRef, props);
43
44
  useGridInitializeState(columnsStateInitializer, apiRef, props);
44
45
  useGridInitializeState(rowPinningStateInitializer, apiRef, props);
46
+ useGridInitializeState(paginationStateInitializer, apiRef, props);
45
47
  useGridInitializeState(rowsStateInitializer, apiRef, props);
46
48
  useGridInitializeState(editingStateInitializer, apiRef, props);
47
49
  useGridInitializeState(focusStateInitializer, apiRef, props);
@@ -52,7 +54,6 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
52
54
  useGridInitializeState(densityStateInitializer, apiRef, props);
53
55
  useGridInitializeState(columnReorderStateInitializer, apiRef, props);
54
56
  useGridInitializeState(columnResizeStateInitializer, apiRef, props);
55
- useGridInitializeState(paginationStateInitializer, apiRef, props);
56
57
  useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
57
58
  useGridInitializeState(columnMenuStateInitializer, apiRef, props);
58
59
  useGridInitializeState(columnGroupsStateInitializer, apiRef, props);
@@ -63,6 +64,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
63
64
  useGridHeaderFiltering(apiRef, props);
64
65
  useGridTreeData(apiRef, props);
65
66
  useGridAggregation(apiRef, props);
67
+ useGridDataSource(apiRef, props);
66
68
  useGridKeyboardNavigation(apiRef, props);
67
69
  useGridRowSelection(apiRef, props);
68
70
  useGridCellSelection(apiRef, props);
@@ -90,6 +92,7 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
90
92
  useGridScroll(apiRef, props);
91
93
  useGridInfiniteLoader(apiRef, props);
92
94
  useGridLazyLoader(apiRef, props);
95
+ useGridDataSourceLazyLoader(apiRef, props);
93
96
  useGridColumnMenu(apiRef);
94
97
  useGridCsvExport(apiRef, props);
95
98
  useGridPrintExport(apiRef, props);
@@ -98,7 +101,6 @@ export const useDataGridPremiumComponent = (inputApiRef, props) => {
98
101
  useGridDimensions(apiRef, props);
99
102
  useGridEvents(apiRef, props);
100
103
  useGridStatePersistence(apiRef);
101
- useGridDataSource(apiRef, props);
102
104
  useGridVirtualization(apiRef, props);
103
105
  useGridListView(apiRef, props);
104
106
  return apiRef;
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useThemeProps } from '@mui/material/styles';
4
4
  import { DATA_GRID_PRO_PROPS_DEFAULT_VALUES, GRID_DEFAULT_LOCALE_TEXT, GridSignature } from '@mui/x-data-grid-pro';
5
- import { computeSlots, useProps } from '@mui/x-data-grid-pro/internals';
5
+ import { computeSlots } from '@mui/x-data-grid-pro/internals';
6
6
  import { GRID_AGGREGATION_FUNCTIONS } from "../hooks/features/aggregation/index.js";
7
7
  import { DATA_GRID_PREMIUM_DEFAULT_SLOTS_COMPONENTS } from "../constants/dataGridPremiumDefaultSlotsComponents.js";
8
8
  const getDataGridPremiumForcedProps = themedProps => _extends({
@@ -34,18 +34,20 @@ export const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PRO
34
34
  });
35
35
  const defaultSlots = DATA_GRID_PREMIUM_DEFAULT_SLOTS_COMPONENTS;
36
36
  export const useDataGridPremiumProps = inProps => {
37
- const themedProps = useProps(
37
+ const themedProps =
38
38
  // eslint-disable-next-line material-ui/mui-name-matches-component-name
39
39
  useThemeProps({
40
40
  props: inProps,
41
41
  name: 'MuiDataGrid'
42
- }));
42
+ });
43
43
  const localeText = React.useMemo(() => _extends({}, GRID_DEFAULT_LOCALE_TEXT, themedProps.localeText), [themedProps.localeText]);
44
44
  const slots = React.useMemo(() => computeSlots({
45
45
  defaultSlots,
46
46
  slots: themedProps.slots
47
47
  }), [themedProps.slots]);
48
- return React.useMemo(() => _extends({}, DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES, themedProps, {
48
+ return React.useMemo(() => _extends({}, DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES, themedProps.unstable_dataSource ? {
49
+ aggregationFunctions: {}
50
+ } : {}, themedProps, {
49
51
  localeText,
50
52
  slots
51
53
  }, getDataGridPremiumForcedProps(themedProps)), [themedProps, localeText, slots]);
@@ -12,7 +12,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
12
  const GridAggregationHeaderRoot = styled('div', {
13
13
  name: 'MuiDataGrid',
14
14
  slot: 'AggregationColumnHeader',
15
- overridesResolver: (_, styles) => styles.aggregationColumnHeader
15
+ overridesResolver: (props, styles) => {
16
+ const {
17
+ ownerState
18
+ } = props;
19
+ return [styles.aggregationColumnHeader, ownerState.colDef.headerAlign === 'left' && styles['aggregationColumnHeader--alignLeft'], ownerState.colDef.headerAlign === 'center' && styles['aggregationColumnHeader--alignCenter'], ownerState.colDef.headerAlign === 'right' && styles['aggregationColumnHeader--alignRight']];
20
+ }
16
21
  })({
17
22
  display: 'flex',
18
23
  flexDirection: 'column',
@@ -1,11 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
2
  import _toPropertyKey from "@babel/runtime/helpers/esm/toPropertyKey";
3
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
+ const _excluded = ["native"];
4
5
  import * as React from 'react';
5
6
  import PropTypes from 'prop-types';
6
7
  import { useGridSelector } from '@mui/x-data-grid-pro';
7
- import ListItemIcon from '@mui/material/ListItemIcon';
8
- import ListItemText from '@mui/material/ListItemText';
9
8
  import FormControl from '@mui/material/FormControl';
10
9
  import InputLabel from '@mui/material/InputLabel';
11
10
  import { unstable_useId as useId } from '@mui/utils';
@@ -14,18 +13,27 @@ import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
14
13
  import { canColumnHaveAggregationFunction, getAggregationFunctionLabel, getAvailableAggregationFunctions } from "../hooks/features/aggregation/gridAggregationUtils.js";
15
14
  import { gridAggregationModelSelector } from "../hooks/features/aggregation/gridAggregationSelectors.js";
16
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
+ import { createElement as _createElement } from "react";
17
17
  function GridColumnMenuAggregationItem(props) {
18
18
  const {
19
19
  colDef
20
20
  } = props;
21
21
  const apiRef = useGridApiContext();
22
+ const inputRef = React.useRef(null);
22
23
  const rootProps = useGridRootProps();
23
24
  const id = useId();
24
25
  const aggregationModel = useGridSelector(apiRef, gridAggregationModelSelector);
25
26
  const availableAggregationFunctions = React.useMemo(() => getAvailableAggregationFunctions({
26
27
  aggregationFunctions: rootProps.aggregationFunctions,
27
- colDef
28
- }), [colDef, rootProps.aggregationFunctions]);
28
+ colDef,
29
+ isDataSource: !!rootProps.unstable_dataSource
30
+ }), [colDef, rootProps.aggregationFunctions, rootProps.unstable_dataSource]);
31
+ const _ref = rootProps.slotProps?.baseSelect || {},
32
+ {
33
+ native: isBaseSelectNative = false
34
+ } = _ref,
35
+ baseSelectProps = _objectWithoutPropertiesLoose(_ref, _excluded);
36
+ const baseSelectOptionProps = rootProps.slotProps?.baseSelectOption || {};
29
37
  const selectedAggregationRule = React.useMemo(() => {
30
38
  if (!colDef || !aggregationModel[colDef.field]) {
31
39
  return '';
@@ -34,12 +42,13 @@ function GridColumnMenuAggregationItem(props) {
34
42
  if (canColumnHaveAggregationFunction({
35
43
  colDef,
36
44
  aggregationFunctionName,
37
- aggregationFunction: rootProps.aggregationFunctions[aggregationFunctionName]
45
+ aggregationFunction: rootProps.aggregationFunctions[aggregationFunctionName],
46
+ isDataSource: !!rootProps.unstable_dataSource
38
47
  })) {
39
48
  return aggregationFunctionName;
40
49
  }
41
50
  return '';
42
- }, [rootProps.aggregationFunctions, aggregationModel, colDef]);
51
+ }, [rootProps.aggregationFunctions, rootProps.unstable_dataSource, aggregationModel, colDef]);
43
52
  const handleAggregationItemChange = event => {
44
53
  const newAggregationItem = event.target?.value || undefined;
45
54
  const currentModel = gridAggregationModelSelector(apiRef);
@@ -52,47 +61,66 @@ function GridColumnMenuAggregationItem(props) {
52
61
  apiRef.current.hideColumnMenu();
53
62
  };
54
63
  const label = apiRef.current.getLocaleText('aggregationMenuItemHeader');
55
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
56
- disableRipple: true,
57
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
58
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuAggregationIcon, {
59
- fontSize: "small"
60
- })
61
- }), /*#__PURE__*/_jsx(ListItemText, {
62
- children: /*#__PURE__*/_jsxs(FormControl, {
63
- size: "small",
64
- fullWidth: true,
65
- sx: {
66
- minWidth: 150
64
+ const handleMenuItemKeyDown = React.useCallback(event => {
65
+ if (event.key === 'Enter' || event.key === ' ') {
66
+ inputRef.current.focus();
67
+ }
68
+ }, []);
69
+ const handleSelectKeyDown = React.useCallback(event => {
70
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === ' ') {
71
+ event.stopPropagation();
72
+ }
73
+ }, []);
74
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
75
+ inert: true,
76
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuAggregationIcon, {
77
+ fontSize: "small"
78
+ }),
79
+ onKeyDown: handleMenuItemKeyDown,
80
+ children: /*#__PURE__*/_jsxs(FormControl, {
81
+ size: "small",
82
+ fullWidth: true,
83
+ sx: {
84
+ minWidth: 150
85
+ },
86
+ children: [/*#__PURE__*/_jsx(InputLabel, {
87
+ id: `${id}-label`,
88
+ htmlFor: `${id}-input`,
89
+ children: label
90
+ }), /*#__PURE__*/_jsxs(rootProps.slots.baseSelect, _extends({
91
+ labelId: `${id}-label`,
92
+ inputRef: inputRef,
93
+ id: `${id}-input`,
94
+ value: selectedAggregationRule,
95
+ label: label,
96
+ color: "primary",
97
+ onChange: handleAggregationItemChange,
98
+ MenuProps: {
99
+ PaperProps: {
100
+ onKeyDown: handleSelectKeyDown
101
+ }
67
102
  },
68
- children: [/*#__PURE__*/_jsx(InputLabel, {
69
- id: `${id}-label`,
70
- children: label
71
- }), /*#__PURE__*/_jsxs(rootProps.slots.baseSelect, {
72
- labelId: `${id}-label`,
73
- id: `${id}-input`,
74
- value: selectedAggregationRule,
75
- label: label,
76
- color: "primary",
77
- onChange: handleAggregationItemChange,
78
- onBlur: event => event.stopPropagation(),
79
- fullWidth: true,
80
- children: [/*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
81
- value: "",
82
- children: "..."
83
- }), availableAggregationFunctions.map(aggFunc => /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
84
- value: aggFunc,
85
- children: getAggregationFunctionLabel({
86
- apiRef,
87
- aggregationRule: {
88
- aggregationFunctionName: aggFunc,
89
- aggregationFunction: rootProps.aggregationFunctions[aggFunc]
90
- }
91
- })
92
- }, aggFunc))]
93
- })]
94
- })
95
- })]
103
+ onBlur: event => event.stopPropagation(),
104
+ native: isBaseSelectNative,
105
+ fullWidth: true
106
+ }, baseSelectProps, {
107
+ children: [/*#__PURE__*/_jsx(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {
108
+ native: isBaseSelectNative,
109
+ value: "",
110
+ children: "..."
111
+ })), availableAggregationFunctions.map(aggFunc => /*#__PURE__*/_createElement(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {
112
+ key: aggFunc,
113
+ value: aggFunc,
114
+ native: isBaseSelectNative
115
+ }), getAggregationFunctionLabel({
116
+ apiRef,
117
+ aggregationRule: {
118
+ aggregationFunctionName: aggFunc,
119
+ aggregationFunction: rootProps.aggregationFunctions[aggFunc]
120
+ }
121
+ })))]
122
+ }))]
123
+ })
96
124
  });
97
125
  }
98
126
  process.env.NODE_ENV !== "production" ? GridColumnMenuAggregationItem.propTypes = {
@@ -1,12 +1,10 @@
1
1
  import * as React from 'react';
2
- import ListItemIcon from '@mui/material/ListItemIcon';
3
- import ListItemText from '@mui/material/ListItemText';
4
2
  import { useGridSelector, gridColumnLookupSelector } from '@mui/x-data-grid-pro';
5
3
  import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
6
4
  import { gridRowGroupingSanitizedModelSelector } from "../hooks/features/rowGrouping/gridRowGroupingSelector.js";
7
5
  import { getRowGroupingCriteriaFromGroupingField, GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD, isGroupingColumn } from "../hooks/features/rowGrouping/gridRowGroupingUtils.js";
8
6
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
9
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
10
8
  export function GridColumnMenuRowGroupItem(props) {
11
9
  const {
12
10
  colDef,
@@ -23,16 +21,13 @@ export function GridColumnMenuRowGroupItem(props) {
23
21
  };
24
22
  const groupedColumn = columnsLookup[field];
25
23
  const name = groupedColumn.headerName ?? field;
26
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
24
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
27
25
  onClick: ungroupColumn,
28
26
  disabled: !groupedColumn.groupable,
29
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
30
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuUngroupIcon, {
31
- fontSize: "small"
32
- })
33
- }), /*#__PURE__*/_jsx(ListItemText, {
34
- children: apiRef.current.getLocaleText('unGroupColumn')(name)
35
- })]
27
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuUngroupIcon, {
28
+ fontSize: "small"
29
+ }),
30
+ children: apiRef.current.getLocaleText('unGroupColumn')(name)
36
31
  }, field);
37
32
  };
38
33
  if (!colDef || !isGroupingColumn(colDef.field)) {
@@ -1,11 +1,9 @@
1
1
  import * as React from 'react';
2
- import ListItemIcon from '@mui/material/ListItemIcon';
3
- import ListItemText from '@mui/material/ListItemText';
4
2
  import { gridColumnLookupSelector, useGridSelector } from '@mui/x-data-grid-pro';
5
3
  import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
6
4
  import { gridRowGroupingSanitizedModelSelector } from "../hooks/features/rowGrouping/gridRowGroupingSelector.js";
7
5
  import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
9
7
  export function GridColumnMenuRowUngroupItem(props) {
10
8
  const {
11
9
  colDef,
@@ -28,25 +26,19 @@ export function GridColumnMenuRowUngroupItem(props) {
28
26
  };
29
27
  const name = columnsLookup[colDef.field].headerName ?? colDef.field;
30
28
  if (rowGroupingModel.includes(colDef.field)) {
31
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
29
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
32
30
  onClick: ungroupColumn,
33
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
34
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuUngroupIcon, {
35
- fontSize: "small"
36
- })
37
- }), /*#__PURE__*/_jsx(ListItemText, {
38
- children: apiRef.current.getLocaleText('unGroupColumn')(name)
39
- })]
31
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuUngroupIcon, {
32
+ fontSize: "small"
33
+ }),
34
+ children: apiRef.current.getLocaleText('unGroupColumn')(name)
40
35
  });
41
36
  }
42
- return /*#__PURE__*/_jsxs(rootProps.slots.baseMenuItem, {
37
+ return /*#__PURE__*/_jsx(rootProps.slots.baseMenuItem, {
43
38
  onClick: groupColumn,
44
- children: [/*#__PURE__*/_jsx(ListItemIcon, {
45
- children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuGroupIcon, {
46
- fontSize: "small"
47
- })
48
- }), /*#__PURE__*/_jsx(ListItemText, {
49
- children: apiRef.current.getLocaleText('groupColumn')(name)
50
- })]
39
+ iconStart: /*#__PURE__*/_jsx(rootProps.slots.columnMenuGroupIcon, {
40
+ fontSize: "small"
41
+ }),
42
+ children: apiRef.current.getLocaleText('groupColumn')(name)
51
43
  });
52
44
  }
@@ -2,7 +2,6 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { unstable_composeClasses as composeClasses } from '@mui/utils';
4
4
  import Box from '@mui/material/Box';
5
- import CircularProgress from '@mui/material/CircularProgress';
6
5
  import { useGridPrivateApiContext } from '@mui/x-data-grid-pro/internals';
7
6
  import { useGridSelector, getDataGridUtilityClass } from '@mui/x-data-grid-pro';
8
7
  import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
@@ -47,7 +46,7 @@ function GridGroupingCriteriaCellIcon(props) {
47
46
  if (isDataLoading) {
48
47
  return /*#__PURE__*/_jsx("div", {
49
48
  className: classes.loadingContainer,
50
- children: /*#__PURE__*/_jsx(CircularProgress, {
49
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseCircularProgress, {
51
50
  size: "1rem",
52
51
  color: "inherit"
53
52
  })
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { GridGenericColumnMenu, GRID_COLUMN_MENU_SLOTS, GRID_COLUMN_MENU_SLOT_PROPS } from '@mui/x-data-grid-pro';
4
+ import { forwardRef } from '@mui/x-internals/forwardRef';
4
5
  import { GridColumnMenuAggregationItem } from "./GridColumnMenuAggregationItem.js";
5
6
  import { isGroupingColumn } from "../hooks/features/rowGrouping/index.js";
6
7
  import { GridColumnMenuRowGroupItem } from "./GridColumnMenuRowGroupItem.js";
@@ -27,11 +28,10 @@ export const GRID_COLUMN_MENU_SLOT_PROPS_PREMIUM = _extends({}, GRID_COLUMN_MENU
27
28
  displayOrder: 27
28
29
  }
29
30
  });
30
- export const GridPremiumColumnMenu = /*#__PURE__*/React.forwardRef(function GridPremiumColumnMenuSimple(props, ref) {
31
- return /*#__PURE__*/_jsx(GridGenericColumnMenu, _extends({
32
- ref: ref
33
- }, props, {
31
+ export const GridPremiumColumnMenu = forwardRef(function GridPremiumColumnMenuSimple(props, ref) {
32
+ return /*#__PURE__*/_jsx(GridGenericColumnMenu, _extends({}, props, {
34
33
  defaultSlots: GRID_COLUMN_MENU_SLOTS_PREMIUM,
35
- defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS_PREMIUM
34
+ defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS_PREMIUM,
35
+ ref: ref
36
36
  }));
37
37
  });
@@ -1,4 +1,5 @@
1
1
  export * from "./GridExcelExportMenuItem.js";
2
2
  export * from "../material/icons.js";
3
3
  export * from "./GridColumnMenuAggregationItem.js";
4
+ export * from "./promptControl/index.js";
4
5
  export { GridColumnMenuGroupingItem } from "./GridPremiumColumnMenu.js";
@@ -0,0 +1,213 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import { styled } from '@mui/material/styles';
4
+ import composeClasses from '@mui/utils/composeClasses';
5
+ import useEventCallback from '@mui/utils/useEventCallback';
6
+ import { getDataGridUtilityClass, GRID_CHECKBOX_SELECTION_FIELD, gridColumnDefinitionsSelector, gridColumnLookupSelector, GridLogicOperator, gridRowsLookupSelector } from '@mui/x-data-grid';
7
+ import { getValueOptions, getVisibleRows } from '@mui/x-data-grid/internals';
8
+ import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
9
+ import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
10
+ import { RecordButton, BrowserSpeechRecognition } from "./RecordButton.js";
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ const supportsSpeechRecognition = !!BrowserSpeechRecognition;
13
+ const useUtilityClasses = ownerState => {
14
+ const {
15
+ classes,
16
+ recording
17
+ } = ownerState;
18
+ const slots = {
19
+ root: ['toolbarPromptControl', recording && 'toolbarPromptControl--recording'],
20
+ recordingIndicator: ['toolbarPromptControlRecordingIndicator'],
21
+ recordButton: ['toolbarPromptControlRecordButton'],
22
+ sendButton: ['toolbarPromptControlSendButton']
23
+ };
24
+ return composeClasses(slots, getDataGridUtilityClass, classes);
25
+ };
26
+ const GridToolbarPromptControlRoot = styled('div', {
27
+ name: 'MuiDataGrid',
28
+ slot: 'ToolbarPromptControl',
29
+ overridesResolver: (props, styles) => {
30
+ const {
31
+ ownerState
32
+ } = props;
33
+ return [styles.toolbarPromptControl, ownerState.recording && styles['toolbarPromptControl--recording']];
34
+ }
35
+ })({
36
+ flex: 1,
37
+ display: 'flex',
38
+ flexDirection: 'row'
39
+ });
40
+ function sampleData(apiRef) {
41
+ const columns = gridColumnDefinitionsSelector(apiRef);
42
+ const rows = Object.values(gridRowsLookupSelector(apiRef));
43
+ const columnExamples = {};
44
+ columns.forEach(column => {
45
+ columnExamples[column.field] = Array.from({
46
+ length: Math.min(5, rows.length)
47
+ }).map(() => {
48
+ const row = rows[Math.floor(Math.random() * rows.length)];
49
+ if (column.valueGetter) {
50
+ return column.valueGetter(row[column.field], row, column, apiRef);
51
+ }
52
+ return row[column.field];
53
+ });
54
+ });
55
+ return columnExamples;
56
+ }
57
+ function generateContext(apiRef, examples) {
58
+ const columns = gridColumnDefinitionsSelector(apiRef);
59
+ const columnsContext = columns.map(column => ({
60
+ field: column.field,
61
+ description: column.description ?? null,
62
+ examples: examples?.[column.field] ?? column.unstable_examples ?? [],
63
+ type: column.type ?? 'string',
64
+ allowedOperators: column.filterOperators?.map(operator => operator.value) ?? []
65
+ }));
66
+ return `The columns are described by the following JSON:\n${JSON.stringify(columnsContext)}`;
67
+ }
68
+ function GridToolbarPromptControl(props) {
69
+ const apiRef = useGridApiContext();
70
+ const rootProps = useGridRootProps();
71
+ const {
72
+ onPrompt,
73
+ lang,
74
+ allowDataSampling = false
75
+ } = props;
76
+ const [isLoading, setLoading] = React.useState(false);
77
+ const [error, setError] = React.useState(null);
78
+ const [isRecording, setRecording] = React.useState(false);
79
+ const [query, setQuery] = React.useState('');
80
+ const ownerState = {
81
+ classes: rootProps.classes,
82
+ recording: isRecording
83
+ };
84
+ const classes = useUtilityClasses(ownerState);
85
+ const examplesFromData = React.useMemo(() => allowDataSampling ? sampleData(apiRef) : undefined, [apiRef, allowDataSampling]);
86
+ const processPrompt = React.useCallback(() => {
87
+ const context = generateContext(apiRef, examplesFromData);
88
+ const columnsByField = gridColumnLookupSelector(apiRef);
89
+ setLoading(true);
90
+ setError(null);
91
+ apiRef.current.setLoading(true);
92
+ onPrompt(context, query).then(result => {
93
+ const interestColumns = [];
94
+ apiRef.current.setFilterModel({
95
+ items: result.filters.map((filter, index) => {
96
+ const item = {
97
+ id: index,
98
+ field: filter.column,
99
+ operator: filter.operator,
100
+ value: filter.value
101
+ };
102
+ const column = columnsByField[filter.column];
103
+ if (column.type === 'singleSelect') {
104
+ const options = getValueOptions(column) ?? [];
105
+ const found = options.find(option => typeof option === 'object' && option.label === filter.value);
106
+ if (found) {
107
+ item.value = found.value;
108
+ }
109
+ }
110
+ return item;
111
+ }),
112
+ logicOperator: result.filterOperator ?? GridLogicOperator.And,
113
+ quickFilterValues: []
114
+ });
115
+ apiRef.current.setRowGroupingModel(result.grouping.map(g => g.column));
116
+ apiRef.current.setAggregationModel(result.aggregation);
117
+ apiRef.current.setSortModel(result.sorting.map(s => ({
118
+ field: s.column,
119
+ sort: s.direction
120
+ })));
121
+ const rows = getVisibleRows(apiRef, rootProps);
122
+ const selectedRowIds = result.select === -1 ? [] : rows.rows.slice(0, result.select).map(r => {
123
+ return apiRef.current.getRowId(r);
124
+ });
125
+ apiRef.current.setRowSelectionModel(selectedRowIds);
126
+ const columns = apiRef.current.getAllColumns();
127
+ const targetIndex = Number(columns.find(c => c.field === GRID_CHECKBOX_SELECTION_FIELD) !== undefined) + Number(result.grouping.length);
128
+ interestColumns.push(...Object.keys(result.aggregation));
129
+ interestColumns.push(...result.filters.map(f => f.column));
130
+ interestColumns.reverse().forEach(c => apiRef.current.setColumnIndex(c, targetIndex));
131
+ }).catch(_ => {
132
+ setError(apiRef.current.getLocaleText('toolbarPromptControlErrorMessage'));
133
+ }).finally(() => {
134
+ setLoading(false);
135
+ apiRef.current.setState(state => _extends({}, state, {
136
+ rows: _extends({}, state.rows, {
137
+ loading: false
138
+ })
139
+ }));
140
+ });
141
+ }, [apiRef, rootProps, onPrompt, examplesFromData, query]);
142
+ const handleChange = useEventCallback(event => {
143
+ setQuery(event.target.value);
144
+ });
145
+ const handleKeyDown = useEventCallback(event => {
146
+ if (event.code === 'Enter') {
147
+ processPrompt();
148
+ }
149
+ });
150
+ const handleDone = useEventCallback(value => {
151
+ setQuery(value);
152
+ if (value) {
153
+ processPrompt();
154
+ }
155
+ });
156
+ const placeholder = supportsSpeechRecognition ? apiRef.current.getLocaleText('toolbarPromptControlWithRecordingPlaceholder') : apiRef.current.getLocaleText('toolbarPromptControlPlaceholder');
157
+ return /*#__PURE__*/_jsx(GridToolbarPromptControlRoot, {
158
+ ownerState: ownerState,
159
+ className: classes.root,
160
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseTextField, {
161
+ placeholder: isRecording ? apiRef.current.getLocaleText('toolbarPromptControlRecordingPlaceholder') : placeholder,
162
+ "aria-label": apiRef.current.getLocaleText('toolbarPromptControlLabel'),
163
+ disabled: isLoading,
164
+ value: query,
165
+ style: {
166
+ flex: 1
167
+ },
168
+ onChange: handleChange,
169
+ size: "small",
170
+ onKeyDown: handleKeyDown,
171
+ error: !!error,
172
+ helperText: error,
173
+ slotProps: {
174
+ input: {
175
+ startAdornment: supportsSpeechRecognition && /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
176
+ position: "start",
177
+ children: /*#__PURE__*/_jsx(RecordButton, {
178
+ className: classes.recordButton,
179
+ lang: lang,
180
+ recording: isRecording,
181
+ setRecording: setRecording,
182
+ disabled: isLoading,
183
+ onUpdate: setQuery,
184
+ onDone: handleDone,
185
+ onError: setError
186
+ })
187
+ }),
188
+ endAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
189
+ position: "end",
190
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseTooltip, {
191
+ title: apiRef.current.getLocaleText('toolbarPromptControlSendActionLabel'),
192
+ children: /*#__PURE__*/_jsx("div", {
193
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, {
194
+ className: classes.sendButton,
195
+ disabled: isLoading || isRecording || query === '',
196
+ color: "primary",
197
+ onClick: processPrompt,
198
+ size: "small",
199
+ "aria-label": apiRef.current.getLocaleText('toolbarPromptControlSendActionAriaLabel'),
200
+ edge: "end",
201
+ children: /*#__PURE__*/_jsx(rootProps.slots.toolbarPromptSendIcon, {
202
+ fontSize: "small"
203
+ })
204
+ })
205
+ })
206
+ })
207
+ })
208
+ }
209
+ }
210
+ })
211
+ });
212
+ }
213
+ export { GridToolbarPromptControl };