@adaptabletools/adaptable 22.0.10 → 22.1.0-canary.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 (71) hide show
  1. package/index.css +33 -1
  2. package/index.css.map +1 -1
  3. package/package.json +3 -4
  4. package/src/AdaptableState/Common/AdaptablePredicate.js +1 -1
  5. package/src/AdaptableState/InitialState.d.ts +2 -2
  6. package/src/AdaptableState/LayoutState.d.ts +47 -0
  7. package/src/Api/CalendarApi.d.ts +15 -0
  8. package/src/Api/ColumnScopeApi.d.ts +5 -0
  9. package/src/Api/DataChangeHistoryApi.d.ts +7 -2
  10. package/src/Api/Implementation/CalendarApiImpl.d.ts +3 -0
  11. package/src/Api/Implementation/CalendarApiImpl.js +10 -0
  12. package/src/Api/Implementation/ColumnScopeApiImpl.d.ts +1 -0
  13. package/src/Api/Implementation/ColumnScopeApiImpl.js +12 -0
  14. package/src/Api/Implementation/DataChangeHistoryApiImpl.d.ts +2 -1
  15. package/src/Api/Implementation/DataChangeHistoryApiImpl.js +7 -0
  16. package/src/Api/Implementation/LayoutHelpers.js +12 -0
  17. package/src/Api/Internal/AlertInternalApi.js +4 -1
  18. package/src/Api/Internal/FormatColumnInternalApi.js +3 -3
  19. package/src/Strategy/FlashingCellModule.js +1 -0
  20. package/src/Strategy/PlusMinusModule.js +3 -3
  21. package/src/Utilities/Constants/GeneralConstants.js +2 -1
  22. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.d.ts +1 -1
  23. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +41 -2
  24. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  25. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +31 -2
  26. package/src/Utilities/Helpers/AdaptableHelper.js +30 -4
  27. package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +1 -0
  28. package/src/Utilities/Services/MetamodelService.js +18 -18
  29. package/src/Utilities/Services/QueryLanguageService.d.ts +2 -0
  30. package/src/Utilities/Services/QueryLanguageService.js +20 -8
  31. package/src/Utilities/Services/ValidationService.js +3 -1
  32. package/src/View/Components/EntityRulesEditor/index.js +1 -1
  33. package/src/View/Components/ModuleValueSelector/index.js +9 -1
  34. package/src/View/Components/ReorderDraggable/index.js +22 -36
  35. package/src/View/Components/ValueSelector/index.js +46 -50
  36. package/src/View/Dashboard/PinnedToolbarsSelector.js +1 -1
  37. package/src/View/Layout/Wizard/LayoutWizard.js +16 -1
  38. package/src/View/Layout/Wizard/sections/RowSelectionSection.d.ts +8 -0
  39. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +141 -0
  40. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +0 -1
  41. package/src/agGrid/AdaptableAgGrid.js +10 -0
  42. package/src/components/Dashboard/Dashboard.js +1 -1
  43. package/src/components/DragAndDropContext/ModuleManager.d.ts +1 -0
  44. package/src/components/DragAndDropContext/ModuleManager.js +12 -37
  45. package/src/components/DragAndDropContext/TabList.d.ts +11 -6
  46. package/src/components/DragAndDropContext/TabList.js +78 -36
  47. package/src/components/DragAndDropContext/UnusedPanel.js +10 -21
  48. package/src/components/ExpressionEditor/BaseEditorInput.d.ts +2 -0
  49. package/src/components/ExpressionEditor/BaseEditorInput.js +4 -0
  50. package/src/components/ExpressionEditor/EditorInput.d.ts +3 -1
  51. package/src/components/ExpressionEditor/EditorInput.js +20 -9
  52. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.d.ts +2 -1
  53. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +3 -12
  54. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +17 -19
  55. package/src/components/ExpressionEditor/index.d.ts +2 -1
  56. package/src/components/ExpressionEditor/index.js +1 -1
  57. package/src/components/Tree/TreeDropdown/index.js +38 -27
  58. package/src/components/dnd/index.d.ts +3 -13
  59. package/src/components/dnd/index.js +4 -55
  60. package/src/env.js +2 -2
  61. package/src/layout-manager/src/LayoutManagerModel.d.ts +2 -1
  62. package/src/layout-manager/src/index.d.ts +9 -0
  63. package/src/layout-manager/src/index.js +97 -1
  64. package/src/layout-manager/src/normalizeLayoutModel.js +8 -0
  65. package/src/layout-manager/src/simplifyLayoutModel.js +6 -0
  66. package/src/metamodel/adaptable-metamodel-model.d.ts +22 -13
  67. package/src/metamodel/adaptable.metamodel.d.ts +3773 -5143
  68. package/src/metamodel/adaptable.metamodel.js +1 -1
  69. package/src/parser/src/parser.js +55 -1218
  70. package/src/parser/src/types.d.ts +5 -0
  71. package/tsconfig.esm.tsbuildinfo +1 -1
@@ -1,55 +1,4 @@
1
- import * as React from 'react';
2
- import { DragDropContext as DDContext, Draggable, Droppable as DNDDroppable, } from '@adaptabletools/react-beautiful-dnd';
3
- import { useState } from 'react';
4
- /**
5
- * We're doing all this because the placeholder is not correctly displayed in react-beautiful-dnd
6
- * with React 19.
7
- * So we make sure it properly occupies the space of the dragged item, so the
8
- * container won't flicker when we're dragging an item (as the drag item receives
9
- * position: fixed while dragging, so content does not have the initial height anymore, therefore,
10
- * the placeholder is included, with the computed height of the dragging element)
11
- */
12
- const Droppable = (props) => {
13
- const children = props.children;
14
- const { placeholderStyle } = React.useContext(AdaptableDDContext);
15
- return (React.createElement(DNDDroppable, { ...props }, (provided, snapshot) => {
16
- provided.placeholder = (React.createElement("div", { key: "placeholder", style: placeholderStyle || {
17
- visibility: 'hidden',
18
- pointerEvents: 'none',
19
- height: 0,
20
- } }));
21
- return children(provided, snapshot);
22
- }));
23
- };
24
- const queryAttr = 'data-rbd-draggable-id';
25
- const AdaptableDDContext = React.createContext({
26
- placeholderStyle: null,
27
- });
28
- const DragDropContext = (props) => {
29
- const getDraggedDom = (draggableId) => {
30
- const domQuery = `[${queryAttr}='${draggableId}']`;
31
- const draggedDOM = document.querySelector(domQuery);
32
- return draggedDOM;
33
- };
34
- const [placeholderStyle, setPlaceholderStyle] = useState(null);
35
- const handleDragStart = (initial, provided) => {
36
- props.onDragStart?.(initial, provided);
37
- const draggedDOM = getDraggedDom(initial.draggableId);
38
- if (!draggedDOM) {
39
- return;
40
- }
41
- const { clientHeight, clientWidth } = draggedDOM;
42
- const computedStyle = window.getComputedStyle(draggedDOM);
43
- setPlaceholderStyle({
44
- height: clientHeight + parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom),
45
- width: clientWidth,
46
- });
47
- };
48
- const handleDragEnd = (result, provided) => {
49
- props.onDragEnd?.(result, provided);
50
- setPlaceholderStyle(null);
51
- };
52
- return (React.createElement(AdaptableDDContext.Provider, { value: { placeholderStyle } },
53
- React.createElement(DDContext, { ...props, onDragStart: handleDragStart, onDragEnd: handleDragEnd })));
54
- };
55
- export { Draggable, Droppable, DragDropContext };
1
+ export { DragDropProvider, DragList, useDragDropProvider, useDragListContext, DRAG_ITEM_ATTRIBUTE, } from '@infinite-table/infinite-react';
2
+ export function defaultDragProxyMove({ proxyElement, dx, dy }) {
3
+ proxyElement.style.transform = `translate3d(${Math.round(dx)}px, ${Math.round(dy)}px, 0)`;
4
+ }
package/src/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  NEXT_PUBLIC_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: 1775746119161 || Date.now(),
4
- VERSION: "22.0.10" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1776278112836 || Date.now(),
4
+ VERSION: "22.1.0-canary.0" || '--current-version--',
5
5
  };
@@ -1,4 +1,4 @@
1
- import { ColumnSizingMap } from '../../AdaptableState/LayoutState';
1
+ import { ColumnSizingMap, LayoutRowSelection } from '../../AdaptableState/LayoutState';
2
2
  import { XOR } from '../../Utilities/Extensions/TypeExtensions';
3
3
  /**
4
4
  * Defines how a Column is sorted
@@ -112,6 +112,7 @@ export interface BaseLayoutModel {
112
112
  ColumnPinning?: {
113
113
  [columnId: string]: 'left' | 'right';
114
114
  };
115
+ RowSelection?: LayoutRowSelection | false;
115
116
  /**
116
117
  * Display Grand Total Row of the Pivot Table
117
118
  */
@@ -1,6 +1,7 @@
1
1
  import { ColumnState, GridApi, GridOptions, GridState } from 'ag-grid-enterprise';
2
2
  import { PivotLayoutModel, TableLayoutModel } from './LayoutManagerModel';
3
3
  import { LMEmitter } from './LMEmitter';
4
+ import { LayoutRowSelection } from '../../AdaptableState/LayoutState';
4
5
  export declare const PIVOT_ANY_TOTAL_COL_TYPE = "pivotAnyTotal";
5
6
  export declare const PIVOT_GRAND_TOTAL_COL_TYPE = "pivotGrandTotal";
6
7
  export declare const PIVOT_COLUMN_TOTAL_COL_TYPE = "pivotColumnTotal";
@@ -9,6 +10,7 @@ export type LayoutManagerOptions = {
9
10
  gridApi: GridApi;
10
11
  debugId: string;
11
12
  layoutChangeDebounce?: number;
13
+ initialRowSelection?: GridOptions['rowSelection'];
12
14
  };
13
15
  type ApplyLayoutOptions = {
14
16
  skipApplyRowGroupsExpandedState?: boolean;
@@ -26,6 +28,7 @@ export declare class LayoutManager<DATA_TYPE = any> extends LMEmitter {
26
28
  private suppressGlobalAgGridEventListener;
27
29
  private supressGlobalAgGridEventTimeoutId;
28
30
  private layoutManagerDebugId;
31
+ private initialRowSelection;
29
32
  constructor(options: LayoutManagerOptions);
30
33
  destroy(): void;
31
34
  private setupEvents;
@@ -69,6 +72,12 @@ export declare class LayoutManager<DATA_TYPE = any> extends LMEmitter {
69
72
  private getLayoutDetailsAsString;
70
73
  applyColumnDefsChanges(layout: TableLayoutModel | PivotLayoutModel): boolean;
71
74
  private applyColumnSizingColumnDefsChanges;
75
+ static readonly SELECTION_COLUMN_ID = "ag-Grid-SelectionColumn";
76
+ static getGridOptionForRowSelectionFromLayout(layoutRowSelection: LayoutRowSelection | false | undefined, baseGridRowSelection: GridOptions['rowSelection']): GridOptions['rowSelection'] | undefined;
77
+ static isSelectionColumnInNonFirstPosition(tableColumns: string[] | undefined): boolean;
78
+ private ensureSelectionColumnPositionUnlocked;
79
+ private getRowSelectionFromGrid;
80
+ private applyRowSelection;
72
81
  private applyTableLayout;
73
82
  private getRowGroupNodePathsAs;
74
83
  applyRowGroupValues(RowGroupValues: TableLayoutModel['RowGroupValues'], rowGroupedColumns: string[]): void;
@@ -151,6 +151,7 @@ export class LayoutManager extends LMEmitter {
151
151
  suppressGlobalAgGridEventListener = false;
152
152
  supressGlobalAgGridEventTimeoutId = null;
153
153
  layoutManagerDebugId;
154
+ initialRowSelection;
154
155
  constructor(options) {
155
156
  super({ debugId: options.debugId });
156
157
  this.layoutChangeDebounce = options.layoutChangeDebounce ?? 0;
@@ -159,6 +160,7 @@ export class LayoutManager extends LMEmitter {
159
160
  wait: this.layoutChangeDebounce,
160
161
  }).bind(this);
161
162
  }
163
+ this.initialRowSelection = options.initialRowSelection;
162
164
  this.setOptions(options);
163
165
  // this ensures the grand total columns are positioned correctly (before/after) even when changed at runtime
164
166
  // see https://www.ag-grid.com/react-data-grid/pivoting-column-groups/#changing-data-filters-and-configurations
@@ -400,6 +402,7 @@ export class LayoutManager extends LMEmitter {
400
402
  PivotGroupedColumns: layout.RowGroupedColumns,
401
403
  PivotAggregationColumns: layout.TableAggregationColumns,
402
404
  GrandTotalRow: layout.GrandTotalRow,
405
+ RowSelection: layout.RowSelection,
403
406
  PivotExpandLevel: prevLayout?.PivotExpandLevel ?? -1,
404
407
  };
405
408
  if (storePivotResultColumns) {
@@ -431,7 +434,6 @@ export class LayoutManager extends LMEmitter {
431
434
  }
432
435
  getUndecidedLayoutModelFromGrid(columnState) {
433
436
  let TableColumns = columnState.map((c) => c.colId);
434
- // .filter((colId) => colId !== 'ag-Grid-SelectionColumn');
435
437
  let ColumnSorts = [];
436
438
  const RowGroupedColumns = [];
437
439
  let RowGroupValues = undefined;
@@ -739,6 +741,7 @@ export class LayoutManager extends LMEmitter {
739
741
  GrandTotalRow: this.gridApi.getGridOption('grandTotalRow'),
740
742
  SuppressAggFuncInHeader: this.gridApi.getGridOption('suppressAggFuncInHeader'),
741
743
  RowGroupDisplayType: this.gridApi.getGridOption('groupDisplayType') === 'multipleColumns' ? 'multi' : 'single',
744
+ RowSelection: this.getRowSelectionFromGrid(),
742
745
  });
743
746
  return layout;
744
747
  }
@@ -813,6 +816,8 @@ export class LayoutManager extends LMEmitter {
813
816
  const flatColDefs = flattenColDefs(colDefs);
814
817
  const colDefsById = new Map(flatColDefs.map((colDef) => [colDef.colId ?? colDef.field, colDef]));
815
818
  const getColDef = (colId) => colDefsById.get(colId);
819
+ // TODO to implement support for row selection in server-side row model
820
+ // agGridState.rowSelection = { ... }
816
821
  agGridState.columnVisibility = {
817
822
  hiddenColIds: flatColDefs
818
823
  .filter((colDef) => {
@@ -1101,6 +1106,7 @@ export class LayoutManager extends LMEmitter {
1101
1106
  else {
1102
1107
  this.gridApi.setGridOption('grandTotalRow', null);
1103
1108
  }
1109
+ this.applyRowSelection(layout);
1104
1110
  this.applyColumnDefsChanges(layout);
1105
1111
  if (isPivotLayoutModel(layout)) {
1106
1112
  try {
@@ -1158,8 +1164,98 @@ export class LayoutManager extends LMEmitter {
1158
1164
  }
1159
1165
  return false;
1160
1166
  }
1167
+ static SELECTION_COLUMN_ID = 'ag-Grid-SelectionColumn';
1168
+ static getGridOptionForRowSelectionFromLayout(layoutRowSelection, baseGridRowSelection) {
1169
+ if (layoutRowSelection === false) {
1170
+ return undefined;
1171
+ }
1172
+ if (layoutRowSelection == null) {
1173
+ return baseGridRowSelection;
1174
+ }
1175
+ const current = baseGridRowSelection && typeof baseGridRowSelection !== 'string'
1176
+ ? baseGridRowSelection
1177
+ : {};
1178
+ const updated = { ...current };
1179
+ if (layoutRowSelection.Mode != null) {
1180
+ updated.mode = layoutRowSelection.Mode;
1181
+ }
1182
+ if (layoutRowSelection.Checkboxes != null) {
1183
+ updated.checkboxes = layoutRowSelection.Checkboxes;
1184
+ }
1185
+ if (layoutRowSelection.GroupSelectMode != null) {
1186
+ updated.groupSelects = layoutRowSelection.GroupSelectMode;
1187
+ }
1188
+ if (layoutRowSelection.SelectAllMode != null) {
1189
+ updated.selectAll = layoutRowSelection.SelectAllMode;
1190
+ }
1191
+ if (layoutRowSelection.HeaderCheckbox != null) {
1192
+ updated.headerCheckbox = layoutRowSelection.HeaderCheckbox;
1193
+ }
1194
+ if (layoutRowSelection.EnableClickSelection != null) {
1195
+ updated.enableClickSelection = layoutRowSelection.EnableClickSelection;
1196
+ }
1197
+ if (layoutRowSelection.CheckboxInGroupColumn != null) {
1198
+ updated.checkboxLocation = layoutRowSelection.CheckboxInGroupColumn
1199
+ ? 'autoGroupColumn'
1200
+ : 'selectionColumn';
1201
+ }
1202
+ return updated;
1203
+ }
1204
+ static isSelectionColumnInNonFirstPosition(tableColumns) {
1205
+ if (!tableColumns) {
1206
+ return false;
1207
+ }
1208
+ const index = tableColumns.indexOf(LayoutManager.SELECTION_COLUMN_ID);
1209
+ return index > 0;
1210
+ }
1211
+ ensureSelectionColumnPositionUnlocked(layout) {
1212
+ if (LayoutManager.isSelectionColumnInNonFirstPosition(layout.TableColumns)) {
1213
+ const current = this.gridApi.getGridOption('selectionColumnDef');
1214
+ if (!current || current.lockPosition !== false) {
1215
+ this.gridApi.setGridOption('selectionColumnDef', {
1216
+ ...current,
1217
+ lockPosition: false,
1218
+ });
1219
+ }
1220
+ }
1221
+ }
1222
+ getRowSelectionFromGrid() {
1223
+ const gridRowSelection = this.gridApi.getGridOption('rowSelection');
1224
+ if (!gridRowSelection || typeof gridRowSelection === 'string') {
1225
+ return this.currentLayout?.RowSelection === false ? false : undefined;
1226
+ }
1227
+ const rs = gridRowSelection;
1228
+ const result = {
1229
+ Mode: rs.mode ?? 'singleRow',
1230
+ };
1231
+ if (rs.checkboxes != null) {
1232
+ result.Checkboxes = rs.checkboxes;
1233
+ }
1234
+ if (rs.mode === 'multiRow' && rs.groupSelects != null) {
1235
+ result.GroupSelectMode = rs.groupSelects;
1236
+ }
1237
+ if (rs.mode === 'multiRow' && rs.selectAll != null) {
1238
+ result.SelectAllMode = rs.selectAll;
1239
+ }
1240
+ if (rs.mode === 'multiRow' && rs.headerCheckbox != null) {
1241
+ result.HeaderCheckbox = rs.headerCheckbox;
1242
+ }
1243
+ if (rs.enableClickSelection != null) {
1244
+ result.EnableClickSelection =
1245
+ rs.enableClickSelection;
1246
+ }
1247
+ if (rs.checkboxLocation != null) {
1248
+ result.CheckboxInGroupColumn = rs.checkboxLocation === 'autoGroupColumn';
1249
+ }
1250
+ return result;
1251
+ }
1252
+ applyRowSelection(layout) {
1253
+ const rowSelection = LayoutManager.getGridOptionForRowSelectionFromLayout(layout.RowSelection, this.initialRowSelection);
1254
+ this.gridApi.setGridOption('rowSelection', rowSelection);
1255
+ }
1161
1256
  applyTableLayout(layout, options) {
1162
1257
  this.withSuppressColumnAnimation(() => {
1258
+ this.ensureSelectionColumnPositionUnlocked(layout);
1163
1259
  // if we apply the state here, before calling setGridOption for groupDisplayType
1164
1260
  // the order is not always correctly applied
1165
1261
  // this.gridApi.applyColumnState(state);
@@ -35,6 +35,10 @@ export function normalizeTableLayoutModel(layout, options) {
35
35
  // make it an own property
36
36
  layout.GrandTotalRow = undefined;
37
37
  }
38
+ if (!('RowSelection' in layout)) {
39
+ // make it an own property
40
+ layout.RowSelection = undefined;
41
+ }
38
42
  const ColumnOrderSet = new Set(layout.TableColumns);
39
43
  if (layout.RowGroupedColumns && layout.RowGroupedColumns.length && layout.TableColumns) {
40
44
  // the layout.TableColumns might not include the group columns
@@ -168,6 +172,10 @@ export function normalizePivotLayoutModel(layout) {
168
172
  // make it an own property
169
173
  layout.PivotColumnTotal = undefined;
170
174
  }
175
+ if (!('RowSelection' in layout)) {
176
+ // make it an own property
177
+ layout.RowSelection = undefined;
178
+ }
171
179
  // if (layout.PivotGroupedColumns && layout.PivotGroupedColumns.length) {
172
180
  layout.RowGroupDisplayType = layout.RowGroupDisplayType || 'single';
173
181
  // }
@@ -8,6 +8,9 @@ export function simplifyTableLayoutModel(layout) {
8
8
  if (layout.ColumnSizing && !Object.keys(layout.ColumnSizing).length) {
9
9
  delete layout.ColumnSizing;
10
10
  }
11
+ if (layout.RowSelection == undefined) {
12
+ delete layout.RowSelection;
13
+ }
11
14
  if (layout.ColumnSorts && !layout.ColumnSorts.length) {
12
15
  delete layout.ColumnSorts;
13
16
  }
@@ -72,6 +75,9 @@ export function simplifyPivotLayoutModel(layout) {
72
75
  if (layout.ColumnSizing && !Object.keys(layout.ColumnSizing).length) {
73
76
  delete layout.ColumnSizing;
74
77
  }
78
+ if (layout.RowSelection == undefined) {
79
+ delete layout.RowSelection;
80
+ }
75
81
  if (!layout.SuppressAggFuncInHeader) {
76
82
  delete layout.SuppressAggFuncInHeader;
77
83
  }
@@ -1,19 +1,28 @@
1
1
  export type AdaptableMetamodel = Record<string, MetamodelItem>;
2
2
  export interface MetamodelItem {
3
- name: string;
4
- kind: 'A' | 'I' | 'C';
5
- desc: string;
6
- props?: MetamodelItemProperty[];
3
+ /** Item kind: 'A' (type alias), 'I' (interface), 'C' (class) */
4
+ k: 'A' | 'I' | 'C';
5
+ /** Description (only present for noCode-tagged items) */
6
+ d?: string;
7
+ /** Properties of this item */
8
+ p?: MetamodelItemProperty[];
7
9
  }
8
10
  export interface MetamodelItemProperty {
9
- name: string;
10
- kind: MetamodelItemPropertyKind;
11
- desc: string;
12
- uiLabel?: string;
13
- ref?: string;
14
- isOpt?: boolean;
15
- defVal?: unknown;
16
- gridInfo?: 'item' | 'container';
17
- noCode?: 'item' | 'container';
11
+ /** Property name */
12
+ n: string;
13
+ /** Property kind / type */
14
+ k: MetamodelItemPropertyKind;
15
+ /** Description (only present for noCode-tagged properties) */
16
+ d?: string;
17
+ /** UI label override for display */
18
+ l?: string;
19
+ /** Reference to another MetamodelItem key */
20
+ r?: string;
21
+ /** Whether the property is optional */
22
+ o?: boolean;
23
+ /** Grid Info role: 'item' or 'container' */
24
+ g?: 'item' | 'container';
25
+ /** No-Code role: 'item' or 'container' */
26
+ nC?: 'item' | 'container';
18
27
  }
19
28
  export type MetamodelItemPropertyKind = 'R' | 'n' | 's' | 'b' | 'd' | 'f' | 'a' | 'i' | 'u';