@adaptabletools/adaptable 18.1.2 → 18.1.3

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 (42) hide show
  1. package/package.json +1 -1
  2. package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -1
  3. package/src/AdaptableOptions/AdaptableFrameworkComponent.d.ts +5 -13
  4. package/src/AdaptableOptions/CommentOptions.d.ts +5 -0
  5. package/src/AdaptableOptions/NoteOptions.d.ts +6 -0
  6. package/src/Api/CommentApi.d.ts +4 -0
  7. package/src/Api/Implementation/CommentsApiImpl.d.ts +1 -0
  8. package/src/Api/Implementation/CommentsApiImpl.js +3 -0
  9. package/src/Api/Implementation/UserInterfaceApiImpl.d.ts +3 -8
  10. package/src/Api/Internal/AlertInternalApi.d.ts +1 -0
  11. package/src/Api/Internal/AlertInternalApi.js +9 -8
  12. package/src/Api/UserInterfaceApi.d.ts +4 -8
  13. package/src/PredefinedConfig/Common/CustomWindowConfig.d.ts +13 -0
  14. package/src/PredefinedConfig/Common/CustomWindowConfig.js +1 -0
  15. package/src/PredefinedConfig/Common/ProgressIndicatorConfig.d.ts +23 -0
  16. package/src/PredefinedConfig/Common/ProgressIndicatorConfig.js +1 -0
  17. package/src/PredefinedConfig/Common/RowSummary.d.ts +8 -1
  18. package/src/PredefinedConfig/SystemState.d.ts +3 -5
  19. package/src/Redux/ActionsReducers/SystemRedux.d.ts +4 -9
  20. package/src/Redux/ActionsReducers/SystemRedux.js +5 -7
  21. package/src/Strategy/LayoutModule.js +4 -2
  22. package/src/Strategy/Utilities/Layout/getLayoutFilterViewItems.js +1 -1
  23. package/src/Utilities/Extensions/ObjectExtensions.d.ts +3 -0
  24. package/src/Utilities/Extensions/ObjectExtensions.js +9 -0
  25. package/src/Utilities/Services/QueryLanguageService.js +1 -0
  26. package/src/Utilities/Services/RowSummaryService.js +12 -3
  27. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +9 -1
  28. package/src/View/Comments/CommentsEditor.js +13 -1
  29. package/src/View/Layout/Wizard/sections/RowSummarySection.js +39 -11
  30. package/src/View/Note/NoteEditor.js +12 -5
  31. package/src/agGrid/AdaptableAgGrid.d.ts +3 -3
  32. package/src/agGrid/AdaptableAgGrid.js +9 -5
  33. package/src/agGrid/AgGridColumnAdapter.d.ts +1 -1
  34. package/src/agGrid/defaultAdaptableOptions.js +6 -0
  35. package/src/components/ExpressionEditor/ExpressionPreview.js +12 -6
  36. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +17 -5
  37. package/src/env.js +2 -2
  38. package/src/metamodel/adaptable.metamodel.d.ts +24 -0
  39. package/src/metamodel/adaptable.metamodel.js +1 -1
  40. package/src/parser/src/types.d.ts +12 -8
  41. package/src/types.d.ts +3 -1
  42. package/tsconfig.esm.tsbuildinfo +1 -1
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Box, Flex } from 'rebass';
3
+ import { CheckBox } from '../../../../components/CheckBox';
3
4
  import FormLayout, { FormRow } from '../../../../components/FormLayout';
4
5
  import Panel from '../../../../components/Panel';
5
6
  import { Select } from '../../../../components/Select';
@@ -9,12 +10,13 @@ import { Tag } from '../../../../components/Tag';
9
10
  import { summarySupportedExpressions, WEIGHTED_AVERAGE_AGGREATED_FUNCTION, } from '../../../../PredefinedConfig/Common/RowSummary';
10
11
  import { mapColumnDataTypeToExpressionFunctionType } from '../../../../Utilities/adaptableQlUtils';
11
12
  import { LayoutModuleId } from '../../../../Utilities/Constants/ModuleConstants';
13
+ import { aggregatedExpressionFunctions } from '../../../../Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions';
12
14
  import { sortWithOrderArray } from '../../../../Utilities/sortWithOrder';
13
15
  import { useAdaptable } from '../../../AdaptableContext';
16
+ import { SuspendToggleButton } from '../../../Components/Buttons/SuspendToggleButton';
14
17
  import { ValueSelector } from '../../../Components/ValueSelector';
15
18
  import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
16
19
  import { columnFilter } from './Utilities';
17
- import { SuspendToggleButton } from '../../../Components/Buttons/SuspendToggleButton';
18
20
  export const areSummaryRowsValid = (layout) => {
19
21
  var _a;
20
22
  if (!layout.RowSummaries)
@@ -31,22 +33,37 @@ export const areSummaryRowsValid = (layout) => {
31
33
  });
32
34
  return valid;
33
35
  };
36
+ const availableExpressionsForColumnTypeCache = new Map();
34
37
  const getAvailableExpressionsForColumnType = (columnType, availableScalarExpressions) => {
35
- const inputType = mapColumnDataTypeToExpressionFunctionType(columnType);
36
- return summarySupportedExpressions
37
- .filter((expression) => availableScalarExpressions[expression])
38
+ const key = columnType;
39
+ if (availableExpressionsForColumnTypeCache.has(key)) {
40
+ return availableExpressionsForColumnTypeCache.get(key);
41
+ }
42
+ const columnInputType = mapColumnDataTypeToExpressionFunctionType(columnType);
43
+ const expressions = Object.keys(availableScalarExpressions)
44
+ .filter((availableExpression) => {
45
+ if (!aggregatedExpressionFunctions.includes(availableExpression)) {
46
+ // is custom
47
+ return true;
48
+ }
49
+ return Boolean(summarySupportedExpressions.includes(availableExpression));
50
+ })
38
51
  .map((expression) => {
39
52
  var _a, _b;
40
53
  const expressionDef = availableScalarExpressions[expression];
41
54
  let firstArg = null;
55
+ // filter out expressions without inputs defined
56
+ if (!(expressionDef === null || expressionDef === void 0 ? void 0 : expressionDef.inputs)) {
57
+ return null;
58
+ }
42
59
  if (Array.isArray((_a = expressionDef === null || expressionDef === void 0 ? void 0 : expressionDef.inputs) === null || _a === void 0 ? void 0 : _a[0])) {
43
60
  // @ts-ignore
44
- firstArg = (_b = expressionDef.inputs.find((input) => input.includes(inputType))) === null || _b === void 0 ? void 0 : _b[0];
61
+ firstArg = (_b = expressionDef.inputs.find((input) => input.includes(columnInputType))) === null || _b === void 0 ? void 0 : _b[0];
45
62
  }
46
63
  else {
47
64
  firstArg = expressionDef.inputs[0];
48
65
  }
49
- if (inputType === firstArg) {
66
+ if (columnInputType === firstArg) {
50
67
  return expression;
51
68
  }
52
69
  else {
@@ -54,6 +71,8 @@ const getAvailableExpressionsForColumnType = (columnType, availableScalarExpress
54
71
  }
55
72
  })
56
73
  .filter(Boolean);
74
+ availableExpressionsForColumnTypeCache.set(key, expressions);
75
+ return expressions;
57
76
  };
58
77
  export const RowGroupingSectionSummary = () => {
59
78
  var _a;
@@ -61,7 +80,8 @@ export const RowGroupingSectionSummary = () => {
61
80
  const { data: layout } = useOnePageAdaptableWizardContext();
62
81
  return (React.createElement(Box, null, ((_a = layout.RowGroupedColumns) === null || _a === void 0 ? void 0 : _a.length) ? (layout.RowGroupedColumns.map((columnId) => (React.createElement(Tag, { mr: 1, key: columnId }, adaptable.api.columnApi.getFriendlyNameForColumnId(columnId))))) : (React.createElement(Tag, null, "No Row Grouping"))));
63
82
  };
64
- const RowSummaryEditor = ({ rowSummary, onChange, availableScalarExpressions, onDelete, }) => {
83
+ const RowSummaryEditor = React.memo(({ rowSummary, onChange, availableScalarExpressions, onDelete, }) => {
84
+ var _a;
65
85
  const { data: layout } = useOnePageAdaptableWizardContext();
66
86
  const adaptable = useAdaptable();
67
87
  const columns = React.useMemo(() => {
@@ -102,7 +122,11 @@ const RowSummaryEditor = ({ rowSummary, onChange, availableScalarExpressions, on
102
122
  },
103
123
  ], value: rowSummary.Position, onChange: (position) => {
104
124
  onChange(Object.assign(Object.assign({}, rowSummary), { Position: position }));
105
- } }))),
125
+ } })),
126
+ React.createElement(FormRow, { label: "" },
127
+ React.createElement(CheckBox, { checked: (_a = rowSummary.IncludeOnlyFilteredRows) !== null && _a !== void 0 ? _a : true, onChange: (IncludeOnlyFilteredRows) => {
128
+ onChange(Object.assign(Object.assign({}, rowSummary), { IncludeOnlyFilteredRows }));
129
+ } }, "Include Only Filtered Rows"))),
106
130
  React.createElement(Flex, { flexDirection: 'column', mt: 2, mb: 1 },
107
131
  React.createElement(Flex, { alignItems: "center", flex: 1, mb: 2 }, "Column Aggregations"),
108
132
  React.createElement(Panel, { bodyProps: { maxHeight: '100%' }, style: { height: 360 } },
@@ -120,7 +144,9 @@ const RowSummaryEditor = ({ rowSummary, onChange, availableScalarExpressions, on
120
144
  }));
121
145
  // check out if this layout has a aggregation with wighted column
122
146
  const aggregation = (_c = layout.AggregationColumns) === null || _c === void 0 ? void 0 : _c[column.columnId];
123
- if (aggregation && typeof aggregation === 'object' && aggregation.weightedColumnId) {
147
+ if (aggregation &&
148
+ typeof aggregation === 'object' &&
149
+ aggregation.weightedColumnId) {
124
150
  expressionOptions.push({
125
151
  label: 'WEIGHTERD_AVG',
126
152
  value: WEIGHTED_AVERAGE_AGGREATED_FUNCTION,
@@ -140,15 +166,16 @@ const RowSummaryEditor = ({ rowSummary, onChange, availableScalarExpressions, on
140
166
  });
141
167
  onChange(Object.assign(Object.assign({}, rowSummary), { ColumnsMap: newColumnsMap }));
142
168
  } })))));
143
- };
169
+ });
144
170
  export const RowSummarySection = (props) => {
145
171
  var _a;
146
172
  const adaptable = useAdaptable();
147
173
  const { data: layout } = useOnePageAdaptableWizardContext();
148
174
  const availableScalarExpressions = React.useMemo(() => {
149
- return adaptable.api.internalApi
175
+ const sytemExpressions = adaptable.api.internalApi
150
176
  .getQueryLanguageService()
151
177
  .getModuleExpressionFunctionsMap(LayoutModuleId).aggregatedScalarFunctions;
178
+ return sytemExpressions;
152
179
  }, []);
153
180
  return (React.createElement(Tabs, { style: { height: '100%' } },
154
181
  React.createElement(Tabs.Tab, null, "Row Summaries"),
@@ -163,6 +190,7 @@ export const RowSummarySection = (props) => {
163
190
  {
164
191
  Position: 'Top',
165
192
  ColumnsMap: {},
193
+ IncludeOnlyFilteredRows: true,
166
194
  },
167
195
  ] }));
168
196
  }, icon: "plus" }, "Add Row Summary")),
@@ -1,7 +1,12 @@
1
1
  import throttle from 'lodash/throttle';
2
2
  import * as React from 'react';
3
3
  import Textarea from '../../components/Textarea';
4
+ import SimpleButton from '../../components/SimpleButton';
5
+ import { useAdaptable } from '../AdaptableContext';
4
6
  export const NoteEditor = ({ note, onNoteChange, onClose, editMode, isReadonly }) => {
7
+ var _a, _b;
8
+ const { api } = useAdaptable();
9
+ const showPopupCloseButton = (_b = (_a = api.optionsApi.getNoteOptions()) === null || _a === void 0 ? void 0 : _a.showPopupCloseButton) !== null && _b !== void 0 ? _b : true;
5
10
  const textAreaRef = React.useRef(null);
6
11
  const [liveValue, setLiveValue] = React.useState(note || '');
7
12
  const throttledOnChange = React.useMemo(() => {
@@ -20,9 +25,11 @@ export const NoteEditor = ({ note, onNoteChange, onClose, editMode, isReadonly }
20
25
  if (note === undefined || note === null) {
21
26
  return null;
22
27
  }
23
- return (React.createElement(Textarea, { readOnly: isReadonly, ref: textAreaRef, width: "100%", minWidth: 180, minHeight: 120, value: liveValue, onBlur: () => onClose(), onKeyDown: (event) => {
24
- if (event.key === 'Escape') {
25
- onClose();
26
- }
27
- }, onChange: (event) => throttledOnChange(event.target.value) }));
28
+ return (React.createElement(React.Fragment, null,
29
+ React.createElement(Textarea, { readOnly: isReadonly, ref: textAreaRef, width: "100%", minWidth: 180, minHeight: 120, style: { paddingRight: showPopupCloseButton ? 30 : 0 }, value: liveValue, onBlur: () => onClose(), onKeyDown: (event) => {
30
+ if (event.key === 'Escape') {
31
+ onClose();
32
+ }
33
+ }, onChange: (event) => throttledOnChange(event.target.value) }),
34
+ showPopupCloseButton && (React.createElement(SimpleButton, { variant: "text", style: { position: 'absolute', right: 5, top: 5 }, icon: "close" }))));
28
35
  };
@@ -2,7 +2,7 @@ import { AdaptableOptions } from '../AdaptableOptions/AdaptableOptions';
2
2
  import { ChartRef, Column, GridApi, GridOptions, IRowNode, Module, RowModelType } from '@ag-grid-community/core';
3
3
  import { AdaptableLogger } from './AdaptableLogger';
4
4
  import { AdaptableApi } from '../Api/AdaptableApi';
5
- import { DistinctColumnValuesParams, IAdaptable } from '../AdaptableInterfaces/IAdaptable';
5
+ import { AdaptableVariant, DistinctColumnValuesParams, IAdaptable } from '../AdaptableInterfaces/IAdaptable';
6
6
  import { EmitterCallback } from '../Utilities/Emitter';
7
7
  import { AdaptablePlugin } from '../AdaptableOptions/AdaptablePlugin';
8
8
  import { AgGridAdapter } from './AgGridAdapter';
@@ -25,7 +25,7 @@ import { AgGridMenuAdapter } from './AgGridMenuAdapter';
25
25
  import { AdaptableColumn, AdaptableTheme, ChartDefinition, ColumnSort, DataUpdateConfig, GridCell, Layout, ReportData, SelectedCellInfo, SelectedRowInfo } from '../types';
26
26
  import { RenderReactRootFn } from '../renderReactRoot';
27
27
  import { AgGridOptionsService } from './AgGridOptionsService';
28
- import { AdaptableVariant, AgGridColumnAdapter } from './AgGridColumnAdapter';
28
+ import { AgGridColumnAdapter } from './AgGridColumnAdapter';
29
29
  import { RowEditService } from '../Utilities/Services/RowEditService';
30
30
  export type AdaptableLifecycleState = 'initial' | 'preprocessOptions' | 'initAdaptableState' | 'setupAgGrid' | 'initAgGrid' | 'available' | 'ready' | 'preDestroyed';
31
31
  type RenderAgGridFrameworkComponentResult = false | GridApi;
@@ -257,7 +257,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
257
257
  includeGroupRows?: boolean;
258
258
  filterFn?: (rowNode: IRowNode) => boolean;
259
259
  }): void;
260
- getAgGridRowModelType(): RowModelType;
260
+ getAgGridRowModelType(gridOptions?: GridOptions): RowModelType;
261
261
  getAllRowNodes(config?: {
262
262
  includeGroupRows?: boolean;
263
263
  filterFn?: (rowNode: IRowNode) => boolean;
@@ -78,7 +78,7 @@ import { AdaptableApp } from '../View/AdaptableView';
78
78
  import { renderReactRoot as defaultRenderReactRoot } from '../renderReactRoot';
79
79
  import { AgGridOptionsService } from './AgGridOptionsService';
80
80
  import { parseDateValue } from '../Utilities/Helpers/DateHelper';
81
- import { AgGridColumnAdapter, getEditorsForColumnTypes, } from './AgGridColumnAdapter';
81
+ import { AgGridColumnAdapter, getEditorsForColumnTypes } from './AgGridColumnAdapter';
82
82
  import uniqBy from 'lodash/uniqBy';
83
83
  import getScrollbarSize from '../Utilities/getScrollbarSize';
84
84
  import { isWeightedAverageAggregation, WEIGHTED_AVERAGE_AGG_FN_NAME, } from '../PredefinedConfig/Common/AggregationColumns';
@@ -719,7 +719,8 @@ export class AdaptableAgGrid {
719
719
  */
720
720
  // Build the default group sort comparator - will get custom sort values (but not functions) in real time
721
721
  // TODO: if a custom 'aggFunc' property is defined (see setupColumnAggFunc()), it won't be evaluated
722
- if (this.adaptableOptions.groupingOptions.autoOrderGroupedColumns) {
722
+ if (this.getAgGridRowModelType(gridOptions) === 'clientSide' &&
723
+ this.adaptableOptions.groupingOptions.autoOrderGroupedColumns) {
723
724
  this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'initialGroupOrderComparator', (original_initialGroupOrderComparator) => {
724
725
  if (original_initialGroupOrderComparator) {
725
726
  return original_initialGroupOrderComparator;
@@ -2467,11 +2468,14 @@ export class AdaptableAgGrid {
2467
2468
  }
2468
2469
  });
2469
2470
  }
2470
- getAgGridRowModelType() {
2471
- var _a;
2471
+ getAgGridRowModelType(gridOptions) {
2472
2472
  // it seems that this can be null so we need explicitly to return "clientSide" in this case
2473
2473
  // need to check that for ServerSideRowModel it is ALWAYS returned...
2474
- return (_a = this.agGridAdapter.getAgGridApi().getGridOption('rowModelType')) !== null && _a !== void 0 ? _a : 'clientSide';
2474
+ var _a, _b;
2475
+ if (gridOptions) {
2476
+ return (_a = gridOptions.rowModelType) !== null && _a !== void 0 ? _a : 'clientSide';
2477
+ }
2478
+ return (_b = this.agGridAdapter.getAgGridApi().getGridOption('rowModelType')) !== null && _b !== void 0 ? _b : 'clientSide';
2475
2479
  }
2476
2480
  getAllRowNodes(config) {
2477
2481
  let rowNodes = [];
@@ -1,7 +1,7 @@
1
1
  import { AdaptableAgGrid } from './AdaptableAgGrid';
2
2
  import { ColumnSetupInfo } from './ColumnSetupInfo';
3
3
  import { ColDef, Column } from '@ag-grid-community/core';
4
- export type AdaptableVariant = 'vanilla' | 'react' | 'angular';
4
+ import { AdaptableVariant } from '../AdaptableInterfaces/IAdaptable';
5
5
  export declare function getEditorsForColumnTypes(variant: AdaptableVariant): Record<string, ColDef['cellEditor']>;
6
6
  export declare class AgGridColumnAdapter {
7
7
  private adaptableInstance;
@@ -322,6 +322,12 @@ const DefaultAdaptableOptions = {
322
322
  intents: {},
323
323
  },
324
324
  },
325
+ commentOptions: {
326
+ showPopupCloseButton: true,
327
+ },
328
+ noteOptions: {
329
+ showPopupCloseButton: true,
330
+ },
325
331
  };
326
332
  export function applyDefaultAdaptableOptions(adaptableOptions) {
327
333
  var _a;
@@ -11,10 +11,16 @@ export const ExpressionPreview = (props) => {
11
11
  // '[Column Name] > 2' => ['[Column Name]', '>', '2']
12
12
  // not the prettiest
13
13
  const strWithMarkedGroupes = expressionWithFriendlyNames.replace(/\]/gi, '],').split(',');
14
- return (React.createElement(React.Fragment, null, strWithMarkedGroupes.map((part, index) => {
15
- const partEl = part.includes('[') ? React.createElement("i", null, part.replace(/[\[\]]/g, '')) : part;
16
- return React.createElement(React.Fragment, { key: index },
17
- "\u00A0",
18
- partEl);
19
- })));
14
+ return (
15
+ /**
16
+ * The etra wrapper is neede because the tag has display inline-flex and makes the content inside <i> to be displayed on
17
+ * multiple lines when the expression is too long.
18
+ *
19
+ * The div allows the text to flow normally.
20
+ */
21
+ (React.createElement("div", null, strWithMarkedGroupes.map((part, index) => {
22
+ const partEl = part.includes('[') ? React.createElement("i", null, part.replace(/[\[\]]/g, '')) : part;
23
+ return React.createElement(React.Fragment, { key: index }, partEl);
24
+ })))
25
+ );
20
26
  };
@@ -39,8 +39,20 @@ export const PrimitiveColumnOrFieldSelector = (props) => {
39
39
  } }));
40
40
  }
41
41
  const typeOptions = [
42
- { label: 'Column', value: 'column', icon: 'grid' },
43
- { label: 'Field', value: 'field', icon: 'column-outline' },
42
+ {
43
+ label: (React.createElement(Flex, { alignItems: "center" },
44
+ React.createElement(Icon, { name: "grid" }),
45
+ React.createElement(Text, { ml: 2 }, "Column"))),
46
+ value: 'column',
47
+ icon: 'grid',
48
+ },
49
+ {
50
+ label: (React.createElement(Flex, { alignItems: "center" },
51
+ React.createElement(Icon, { name: "column-outline" }),
52
+ React.createElement(Text, { ml: 2 }, "Field"))),
53
+ value: 'field',
54
+ icon: 'column-outline',
55
+ },
44
56
  ];
45
57
  return !hasFieldsOrValueIsField || props.hideFields ? (React.createElement(Box, null, input)) : (React.createElement(InputGroup, { Component: Flex, "data-id": "query-first-arg-wrapper" },
46
58
  React.createElement(Select, { renderSingleValue: (value) => {
@@ -130,14 +142,14 @@ export const PrimiteValueInput = (props) => {
130
142
  }
131
143
  const options = [
132
144
  {
133
- label: (React.createElement(Flex, null,
145
+ label: (React.createElement(Flex, { alignItems: "center" },
134
146
  React.createElement(Icon, { name: "columns" }),
135
147
  React.createElement(Text, { ml: 2 }, "Column"))),
136
148
  icon: 'columns',
137
149
  value: 'column-name',
138
150
  },
139
151
  {
140
- label: (React.createElement(Flex, null,
152
+ label: (React.createElement(Flex, { alignItems: "center" },
141
153
  React.createElement(Icon, { name: "edit" }),
142
154
  React.createElement(Text, { ml: 2 }, "Value"))),
143
155
  icon: 'edit',
@@ -146,7 +158,7 @@ export const PrimiteValueInput = (props) => {
146
158
  ];
147
159
  if (hasFieldsOrValueIsField || type === 'field') {
148
160
  options.push({
149
- label: (React.createElement(Flex, null,
161
+ label: (React.createElement(Flex, { alignItems: "center" },
150
162
  React.createElement(Icon, { name: "column-outline" }),
151
163
  React.createElement(Text, { ml: 2 }, "Field"))),
152
164
  icon: 'column-outline',
package/src/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
3
- PUBLISH_TIMESTAMP: 1718367349733 || Date.now(),
4
- VERSION: "18.1.2" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1718813924279 || Date.now(),
4
+ VERSION: "18.1.3" || '--current-version--',
5
5
  };
@@ -4354,6 +4354,24 @@ export declare const ADAPTABLE_METAMODEL: {
4354
4354
  desc: string;
4355
4355
  }[];
4356
4356
  };
4357
+ ProgressIndicatorConfig: {
4358
+ name: string;
4359
+ kind: string;
4360
+ desc: string;
4361
+ props: ({
4362
+ name: string;
4363
+ kind: string;
4364
+ desc: string;
4365
+ isOpt: boolean;
4366
+ ref?: undefined;
4367
+ } | {
4368
+ name: string;
4369
+ kind: string;
4370
+ desc: string;
4371
+ isOpt: boolean;
4372
+ ref: string;
4373
+ })[];
4374
+ };
4357
4375
  QueryableColumnContext: {
4358
4376
  name: string;
4359
4377
  kind: string;
@@ -4727,6 +4745,12 @@ export declare const ADAPTABLE_METAMODEL: {
4727
4745
  desc: string;
4728
4746
  isOpt?: undefined;
4729
4747
  ref?: undefined;
4748
+ } | {
4749
+ name: string;
4750
+ kind: string;
4751
+ desc: string;
4752
+ isOpt: boolean;
4753
+ ref?: undefined;
4730
4754
  } | {
4731
4755
  name: string;
4732
4756
  kind: string;