@meshmakers/octo-ui 3.3.610 → 3.3.630

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.
@@ -1,15 +1,371 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, OnChanges, EventEmitter, SimpleChanges, OnDestroy, EnvironmentProviders } from '@angular/core';
2
+ import { OnInit, OnDestroy, EventEmitter, OnChanges, SimpleChanges, AfterViewInit, Provider, InjectionToken, EnvironmentProviders } from '@angular/core';
3
3
  import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
4
4
  import { SVGIcon } from '@progress/kendo-svg-icons';
5
+ import { AttributeItem, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeSelectorItem as CkTypeSelectorItem$1, FieldFilterDto, SearchFilterDto, SortDto, FieldFilterOperatorsDto, RtEntityDto, CkTypeDto, CkModelDto, RtAssociationDto, GetCkTypesDtoGQL, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource } from '@meshmakers/octo-services';
5
6
  import { GridDataResult, CellClickEvent, RowArgs, PageChangeEvent, SelectionEvent } from '@progress/kendo-angular-grid';
6
- import { FieldFilterDto, SearchFilterDto, SortDto, AttributeItem, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeSelectorItem as CkTypeSelectorItem$1, FieldFilterOperatorsDto, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource } from '@meshmakers/octo-services';
7
+ import { TreeItemDataTyped, CommandItemExecuteEventArgs, CommandItem } from '@meshmakers/shared-services';
7
8
  import { ControlValueAccessor, Validator, FormControl, AbstractControl, ValidationErrors } from '@angular/forms';
8
9
  import { AutoCompleteComponent, PopupSettings } from '@progress/kendo-angular-dropdowns';
9
- import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase } from '@meshmakers/shared-ui';
10
+ import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase, FetchDataOptions, FetchResultTyped, BaseTreeDetailComponent, NodeDroppedEvent } from '@meshmakers/shared-ui';
10
11
  import { State } from '@progress/kendo-data-query/dist/npm/state';
11
- import { TreeItemDataTyped } from '@meshmakers/shared-services';
12
12
  import { Observable } from 'rxjs';
13
+ import { Routes } from '@angular/router';
14
+
15
+ interface AttributeSelectorDialogData {
16
+ rtCkTypeId: string;
17
+ selectedAttributes?: string[];
18
+ dialogTitle?: string;
19
+ singleSelect?: boolean;
20
+ includeNavigationProperties?: boolean;
21
+ maxDepth?: number;
22
+ /** Additional virtual attributes to include in the available list (e.g., Timestamp for stream data queries) */
23
+ additionalAttributes?: AttributeItem[];
24
+ /** When true, hides the navigation properties checkbox and max depth controls */
25
+ hideNavigationControls?: boolean;
26
+ /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */
27
+ attributePaths?: string[];
28
+ }
29
+ interface AttributeSelectorDialogResult {
30
+ selectedAttributes: AttributeItem[];
31
+ }
32
+ interface ValueTypeFilterOption$1 {
33
+ text: string;
34
+ value: AttributeValueTypeDto$1 | null;
35
+ }
36
+ declare class AttributeSelectorDialogComponent implements OnInit {
37
+ private readonly windowRef;
38
+ private readonly attributeService;
39
+ private searchSubject;
40
+ protected readonly arrowRightIcon: _progress_kendo_svg_icons.SVGIcon;
41
+ protected readonly arrowLeftIcon: _progress_kendo_svg_icons.SVGIcon;
42
+ protected readonly chevronDoubleRightIcon: _progress_kendo_svg_icons.SVGIcon;
43
+ protected readonly chevronDoubleLeftIcon: _progress_kendo_svg_icons.SVGIcon;
44
+ protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
45
+ protected readonly arrowUpIcon: _progress_kendo_svg_icons.SVGIcon;
46
+ protected readonly arrowDownIcon: _progress_kendo_svg_icons.SVGIcon;
47
+ private _data;
48
+ get data(): AttributeSelectorDialogData;
49
+ set data(value: AttributeSelectorDialogData);
50
+ dialogTitle: string;
51
+ rtCkTypeId: string;
52
+ singleSelect: boolean;
53
+ private additionalAttributes;
54
+ searchText: string;
55
+ selectedSingleKey: string[];
56
+ selectedValueTypeFilter: AttributeValueTypeDto$1 | null;
57
+ includeNavigationProperties: boolean;
58
+ maxDepth: number | null;
59
+ hideNavigationControls: boolean;
60
+ private attributePathsSet;
61
+ availableAttributes: AttributeItem[];
62
+ selectedAttributes: AttributeItem[];
63
+ availableGridData: GridDataResult;
64
+ selectedGridData: GridDataResult;
65
+ selectedAvailableKeys: string[];
66
+ selectedChosenKeys: string[];
67
+ valueTypeOptions: ValueTypeFilterOption$1[];
68
+ private lastClickTime;
69
+ private lastClickedItem;
70
+ private readonly doubleClickDelay;
71
+ ngOnInit(): void;
72
+ private initializeFromData;
73
+ private loadAvailableAttributes;
74
+ private loadInitialSelectedAttributes;
75
+ onSearchChange(value: string): void;
76
+ onValueTypeFilterChange(_value: AttributeValueTypeDto$1 | null): void;
77
+ onNavigationPropertiesChange(): void;
78
+ onMaxDepthChange(value: number | null): void;
79
+ addSelected(): void;
80
+ removeSelected(): void;
81
+ addAll(): void;
82
+ removeAll(): void;
83
+ private sortAvailableAttributes;
84
+ canMoveUp(): boolean;
85
+ canMoveDown(): boolean;
86
+ moveUp(): void;
87
+ moveDown(): void;
88
+ private updateGrids;
89
+ private updateAvailableGrid;
90
+ private updateSelectedGrid;
91
+ onCancel(): void;
92
+ onConfirm(): void;
93
+ /**
94
+ * Handle cell click on available attributes grid to detect double-click
95
+ */
96
+ onAvailableCellClick(event: CellClickEvent): void;
97
+ /**
98
+ * Handle cell click on selected attributes grid to detect double-click
99
+ */
100
+ onSelectedCellClick(event: CellClickEvent): void;
101
+ /**
102
+ * Handle cell click on single-select grid to detect double-click (confirm immediately)
103
+ */
104
+ onSingleSelectCellClick(event: CellClickEvent): void;
105
+ /**
106
+ * Move a single attribute from available to selected
107
+ */
108
+ private moveAttributeToSelected;
109
+ /**
110
+ * Move a single attribute from selected to available
111
+ */
112
+ private moveAttributeToAvailable;
113
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSelectorDialogComponent, never>;
114
+ static ɵcmp: i0.ɵɵComponentDeclaration<AttributeSelectorDialogComponent, "mm-attribute-selector-dialog", never, {}, {}, never, never, true, never>;
115
+ }
116
+
117
+ interface AttributeSelectorResult {
118
+ confirmed: boolean;
119
+ selectedAttributes: AttributeItem[];
120
+ }
121
+ declare class AttributeSelectorDialogService {
122
+ private readonly windowService;
123
+ private readonly windowStateService;
124
+ /**
125
+ * Opens the attribute selector dialog
126
+ * @param rtCkTypeId The RtCkType ID to fetch attributes for
127
+ * @param selectedAttributes Optional array of pre-selected attribute paths
128
+ * @param dialogTitle Optional custom dialog title
129
+ * @param singleSelect Optional flag for single-select mode
130
+ * @param additionalAttributes Optional virtual attributes to include (e.g., Timestamp for stream data)
131
+ * @param includeNavigationProperties Optional flag to control navigation property inclusion
132
+ * @param maxDepth Optional max depth for navigation properties
133
+ * @param hideNavigationControls Optional flag to hide the navigation property controls in the dialog
134
+ * @returns Promise that resolves with the result containing selected attributes and confirmation status
135
+ */
136
+ openAttributeSelector(rtCkTypeId: string, selectedAttributes?: string[], dialogTitle?: string, singleSelect?: boolean, additionalAttributes?: AttributeItem[], includeNavigationProperties?: boolean, maxDepth?: number, hideNavigationControls?: boolean, attributePaths?: string[]): Promise<AttributeSelectorResult>;
137
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSelectorDialogService, never>;
138
+ static ɵprov: i0.ɵɵInjectableDeclaration<AttributeSelectorDialogService>;
139
+ }
140
+
141
+ interface AttributeSortItem {
142
+ attributePath: string;
143
+ attributeValueType: string;
144
+ sortOrder: 'standard' | 'ascending' | 'descending';
145
+ }
146
+ interface AttributeSortSelectorDialogData {
147
+ ckTypeId: string;
148
+ selectedAttributes?: AttributeSortItem[];
149
+ dialogTitle?: string;
150
+ /** When set, controls whether navigation properties are included in the attribute list */
151
+ includeNavigationProperties?: boolean;
152
+ /** When true, hides the navigation property controls (if they were to be added) */
153
+ hideNavigationControls?: boolean;
154
+ /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */
155
+ attributePaths?: string[];
156
+ }
157
+ interface AttributeSortSelectorDialogResult {
158
+ selectedAttributes: AttributeSortItem[];
159
+ }
160
+ interface SortOption {
161
+ text: string;
162
+ value: 'standard' | 'ascending' | 'descending';
163
+ }
164
+ interface ValueTypeFilterOption {
165
+ text: string;
166
+ value: AttributeValueTypeDto$1 | null;
167
+ }
168
+ declare class AttributeSortSelectorDialogComponent implements OnInit {
169
+ private readonly windowRef;
170
+ private readonly attributeService;
171
+ private searchSubject;
172
+ data: AttributeSortSelectorDialogData;
173
+ ckTypeId: string;
174
+ includeNavigationProperties: boolean | undefined;
175
+ private attributePathsSet;
176
+ searchText: string;
177
+ currentSortOrder: 'standard' | 'ascending' | 'descending';
178
+ selectedValueTypeFilter: AttributeValueTypeDto$1 | null;
179
+ availableAttributes: AttributeItem[];
180
+ selectedAttributes: AttributeSortItem[];
181
+ availableGridData: GridDataResult;
182
+ selectedGridData: GridDataResult;
183
+ selectedAvailableKeys: string[];
184
+ selectedChosenKeys: string[];
185
+ private lastClickTime;
186
+ private lastClickedItem;
187
+ private readonly doubleClickDelay;
188
+ dialogTitle: string;
189
+ sortOptions: SortOption[];
190
+ valueTypeOptions: ValueTypeFilterOption[];
191
+ protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
192
+ protected readonly sortAscIcon: _progress_kendo_svg_icons.SVGIcon;
193
+ protected readonly sortDescIcon: _progress_kendo_svg_icons.SVGIcon;
194
+ ngOnInit(): void;
195
+ private loadAvailableAttributes;
196
+ onSearchChange(value: string): void;
197
+ onValueTypeFilterChange(_value: AttributeValueTypeDto$1 | null): void;
198
+ setSortOrder(order: 'standard' | 'ascending' | 'descending'): void;
199
+ addAttributeWithSort(): void;
200
+ onAvailableCellClick(event: CellClickEvent): void;
201
+ onSelectedCellClick(event: CellClickEvent): void;
202
+ private addAttributeToSelected;
203
+ removeAttribute(attribute: AttributeSortItem): void;
204
+ getSortIndicator(sortOrder: string): string;
205
+ getSortText(sortOrder: string): string;
206
+ private updateGrids;
207
+ private updateAvailableGrid;
208
+ private updateSelectedGrid;
209
+ onOk(): void;
210
+ onCancel(): void;
211
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogComponent, never>;
212
+ static ɵcmp: i0.ɵɵComponentDeclaration<AttributeSortSelectorDialogComponent, "mm-attribute-sort-selector-dialog", never, {}, {}, never, never, true, never>;
213
+ }
214
+
215
+ interface AttributeSortSelectorResult {
216
+ confirmed: boolean;
217
+ selectedAttributes: AttributeSortItem[];
218
+ }
219
+ declare class AttributeSortSelectorDialogService {
220
+ private readonly windowService;
221
+ private readonly windowStateService;
222
+ /**
223
+ * Opens the attribute sort selector dialog
224
+ * @param ckTypeId The CkType ID to fetch attributes for
225
+ * @param selectedAttributes Optional array of pre-selected attributes with sort orders
226
+ * @param dialogTitle Optional custom dialog title
227
+ * @param includeNavigationProperties Optional flag to control navigation property inclusion
228
+ * @param hideNavigationControls Optional flag to hide the navigation property controls
229
+ * @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status
230
+ */
231
+ openAttributeSortSelector(ckTypeId: string, selectedAttributes?: AttributeSortItem[], dialogTitle?: string, includeNavigationProperties?: boolean, hideNavigationControls?: boolean, attributePaths?: string[]): Promise<AttributeSortSelectorResult>;
232
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogService, never>;
233
+ static ɵprov: i0.ɵɵInjectableDeclaration<AttributeSortSelectorDialogService>;
234
+ }
235
+
236
+ interface CkTypeSelectorDialogData {
237
+ selectedCkTypeId?: string;
238
+ ckModelIds?: string[];
239
+ dialogTitle?: string;
240
+ allowAbstract?: boolean;
241
+ derivedFromRtCkTypeId?: string;
242
+ }
243
+ interface CkTypeSelectorDialogResult {
244
+ selectedCkType: CkTypeSelectorItem$1;
245
+ }
246
+ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
247
+ private readonly windowRef;
248
+ private readonly ckTypeSelectorService;
249
+ private searchSubject;
250
+ private subscriptions;
251
+ protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
252
+ protected readonly filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
253
+ dialogTitle: string;
254
+ allowAbstract: boolean;
255
+ searchText: string;
256
+ selectedModel: string | null;
257
+ availableModels: string[];
258
+ gridData: GridDataResult;
259
+ isLoading: boolean;
260
+ pageSize: number;
261
+ skip: number;
262
+ selectedKeys: string[];
263
+ selectedType: CkTypeSelectorItem$1 | null;
264
+ selectItemBy: (context: RowArgs) => string;
265
+ private initialCkModelIds?;
266
+ derivedFromRtCkTypeId?: string;
267
+ private lastClickTime;
268
+ private lastClickRtCkTypeId;
269
+ /** Data passed from the service */
270
+ data?: CkTypeSelectorDialogData;
271
+ ngOnInit(): void;
272
+ ngOnDestroy(): void;
273
+ private loadTypes;
274
+ private getDerivedTypes;
275
+ private filterDerivedTypesFallback;
276
+ private loadAvailableModels;
277
+ onSearchChange(value: string): void;
278
+ onModelFilterChange(_value: string | null): void;
279
+ clearFilters(): void;
280
+ onPageChange(event: PageChangeEvent): void;
281
+ onSelectionChange(event: SelectionEvent): void;
282
+ onCellClick(event: CellClickEvent): void;
283
+ onCancel(): void;
284
+ onConfirm(): void;
285
+ static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
286
+ static ɵcmp: i0.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, {}, {}, never, never, true, never>;
287
+ }
288
+
289
+ interface CkTypeSelectorResult {
290
+ confirmed: boolean;
291
+ selectedCkType: CkTypeSelectorItem$1 | null;
292
+ }
293
+ declare class CkTypeSelectorDialogService {
294
+ private readonly windowService;
295
+ private readonly windowStateService;
296
+ /**
297
+ * Opens the CkType selector dialog
298
+ * @param options Dialog options
299
+ * @returns Promise that resolves with the result containing selected CkType and confirmation status
300
+ */
301
+ openCkTypeSelector(options?: {
302
+ selectedCkTypeId?: string;
303
+ ckModelIds?: string[];
304
+ dialogTitle?: string;
305
+ allowAbstract?: boolean;
306
+ derivedFromRtCkTypeId?: string;
307
+ }): Promise<CkTypeSelectorResult>;
308
+ static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
309
+ static ɵprov: i0.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
310
+ }
311
+
312
+ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
313
+ autocomplete: AutoCompleteComponent;
314
+ placeholder: string;
315
+ minSearchLength: number;
316
+ maxResults: number;
317
+ debounceMs: number;
318
+ ckModelIds?: string[];
319
+ allowAbstract: boolean;
320
+ dialogTitle: string;
321
+ advancedSearchLabel: string;
322
+ derivedFromRtCkTypeId?: string;
323
+ private _disabled;
324
+ get disabled(): boolean;
325
+ set disabled(value: boolean);
326
+ private _required;
327
+ get required(): boolean;
328
+ set required(value: boolean);
329
+ ckTypeSelected: EventEmitter<CkTypeSelectorItem$1>;
330
+ ckTypeCleared: EventEmitter<void>;
331
+ searchFormControl: FormControl<any>;
332
+ filteredTypes: string[];
333
+ selectedCkType: CkTypeSelectorItem$1 | null;
334
+ isLoading: boolean;
335
+ private typeMap;
336
+ private searchSubject;
337
+ private subscriptions;
338
+ private onChange;
339
+ private onTouched;
340
+ protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
341
+ protected popupSettings: PopupSettings;
342
+ private static popupStyleInjected;
343
+ private readonly ckTypeSelectorService;
344
+ private readonly dialogService;
345
+ private readonly elementRef;
346
+ ngOnInit(): void;
347
+ ngOnDestroy(): void;
348
+ writeValue(value: CkTypeSelectorItem$1 | null): void;
349
+ registerOnChange(fn: (value: CkTypeSelectorItem$1 | null) => void): void;
350
+ registerOnTouched(fn: () => void): void;
351
+ setDisabledState(isDisabled: boolean): void;
352
+ validate(control: AbstractControl): ValidationErrors | null;
353
+ onFilterChange(filter: string): void;
354
+ onSelectionChange(value: string): void;
355
+ onFocus(): void;
356
+ onBlur(): void;
357
+ clear(): void;
358
+ focus(): void;
359
+ reset(): void;
360
+ private setupSearch;
361
+ private getDerivedTypes;
362
+ private filterDerivedTypesFallback;
363
+ private injectPopupStyles;
364
+ private selectCkType;
365
+ openDialog(event?: Event): Promise<void>;
366
+ static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
367
+ static ɵcmp: i0.ɵɵComponentDeclaration<CkTypeSelectorInputComponent, "mm-ck-type-selector-input", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "maxResults": { "alias": "maxResults"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "ckModelIds": { "alias": "ckModelIds"; "required": false; }; "allowAbstract": { "alias": "allowAbstract"; "required": false; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; }; "advancedSearchLabel": { "alias": "advancedSearchLabel"; "required": false; }; "derivedFromRtCkTypeId": { "alias": "derivedFromRtCkTypeId"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
368
+ }
13
369
 
14
370
  declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {
15
371
  private _searchFilterAttributePaths;
@@ -22,9 +378,204 @@ declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto
22
378
  private static getOperatorAndValue;
23
379
  }
24
380
 
25
- declare abstract class OctoGraphQlHierarchyDataSource<TQueryDto> extends HierarchyDataSourceBase<TQueryDto> {
26
- abstract fetchChildren(item: TreeItemDataTyped<TQueryDto>): Promise<TreeItemDataTyped<TQueryDto>[]>;
27
- abstract fetchRootNodes(): Promise<TreeItemDataTyped<TQueryDto>[]>;
381
+ declare abstract class OctoGraphQlHierarchyDataSource<TQueryDto> extends HierarchyDataSourceBase<TQueryDto> {
382
+ abstract fetchChildren(item: TreeItemDataTyped<TQueryDto>): Promise<TreeItemDataTyped<TQueryDto>[]>;
383
+ abstract fetchRootNodes(): Promise<TreeItemDataTyped<TQueryDto>[]>;
384
+ }
385
+
386
+ interface CopyOption {
387
+ label: string;
388
+ value: string;
389
+ displayText: string;
390
+ }
391
+ /**
392
+ * A reusable component for displaying and copying entity identifiers.
393
+ * Provides a dropdown button with options to copy:
394
+ * - RtId: The runtime ObjectId
395
+ * - CkTypeId: The full versioned Construction Kit type ID
396
+ * - RtCkTypeId: The runtime CK type ID (unversioned)
397
+ * - RtEntityId: Combined format {RtCkTypeId}@{RtId}
398
+ *
399
+ * @example
400
+ * ```html
401
+ * <mm-entity-id-info
402
+ * [rtId]="entity.rtId"
403
+ * [rtCkTypeId]="entity.ckTypeId"
404
+ * [ckTypeId]="entity.constructionKitType?.ckTypeId?.fullName">
405
+ * </mm-entity-id-info>
406
+ * ```
407
+ */
408
+ declare class EntityIdInfoComponent {
409
+ private readonly notificationService;
410
+ protected readonly copyIcon: _progress_kendo_svg_icons.SVGIcon;
411
+ /** The RtId (ObjectId) of the entity */
412
+ rtId: string;
413
+ /** The RtCkTypeId - runtime CK type ID (e.g., System.Communication/MeshAdapter) */
414
+ rtCkTypeId: string;
415
+ /** The CkTypeId - full versioned Construction Kit type ID (e.g., System.Communication-2.0.3/MeshAdapter-1) */
416
+ ckTypeId?: string;
417
+ protected get copyOptions(): CopyOption[];
418
+ private truncateValue;
419
+ protected copyToClipboard(option: CopyOption): Promise<void>;
420
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
421
+ static ɵcmp: i0.ɵɵComponentDeclaration<EntityIdInfoComponent, "mm-entity-id-info", never, { "rtId": { "alias": "rtId"; "required": true; }; "rtCkTypeId": { "alias": "rtCkTypeId"; "required": true; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; }, {}, never, never, true, never>;
422
+ }
423
+
424
+ /**
425
+ * Variable definition for use in filter values.
426
+ * Generic interface that can be provided by any consumer (e.g., MeshBoard).
427
+ */
428
+ interface FilterVariable {
429
+ /** Variable name (without $ prefix) */
430
+ name: string;
431
+ /** Display label for UI */
432
+ label?: string;
433
+ /** Variable data type */
434
+ type?: 'string' | 'number' | 'boolean' | 'date' | 'datetime';
435
+ }
436
+ interface FieldFilterItem extends FieldFilterDto {
437
+ id: number;
438
+ /** If true, comparisonValue contains a variable reference (e.g., $myVar) */
439
+ useVariable?: boolean;
440
+ }
441
+ type InputType = 'text' | 'number' | 'boolean' | 'datetime';
442
+ declare class FieldFilterEditorComponent implements OnChanges {
443
+ private readonly attributeService;
444
+ protected readonly plusIcon: _progress_kendo_svg_icons.SVGIcon;
445
+ protected readonly minusIcon: _progress_kendo_svg_icons.SVGIcon;
446
+ protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
447
+ protected readonly dollarIcon: _progress_kendo_svg_icons.SVGIcon;
448
+ private readonly arrayOperators;
449
+ readonly operators: {
450
+ label: string;
451
+ value: FieldFilterOperatorsDto;
452
+ }[];
453
+ readonly booleanOptions: string[];
454
+ availableAttributes: AttributeItem[];
455
+ /**
456
+ * Optional CK type ID for self-loading attributes.
457
+ * When set, the component loads available attributes itself and shows
458
+ * navigation property controls (checkbox + max depth).
459
+ * When not set, the component uses the externally provided availableAttributes input.
460
+ */
461
+ ckTypeId?: string;
462
+ /**
463
+ * When true, hides the "Include Navigation Properties" checkbox and Max Depth controls,
464
+ * and forces attribute loading without navigation properties.
465
+ * Used for stream data queries which don't support navigation properties.
466
+ */
467
+ hideNavigationProperties: boolean;
468
+ /**
469
+ * When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching).
470
+ * Used for stream data queries to show only stream-data-enabled attributes.
471
+ */
472
+ attributePaths?: string[];
473
+ /** Enable variable mode - allows using variables instead of literal values */
474
+ enableVariables: boolean;
475
+ /** Available variables for selection when enableVariables is true */
476
+ availableVariables: FilterVariable[];
477
+ /** Controls for self-loading mode (when ckTypeId is set) */
478
+ includeNavigationProperties: boolean;
479
+ maxDepth: number | null;
480
+ isLoadingAttributes: boolean;
481
+ private _filters;
482
+ private nextId;
483
+ filteredAttributeList: AttributeItem[];
484
+ private attributeTypeMap;
485
+ get filters(): FieldFilterItem[];
486
+ set filters(value: FieldFilterItem[]);
487
+ filtersChange: EventEmitter<FieldFilterItem[]>;
488
+ selectedKeys: number[];
489
+ ngOnChanges(changes?: SimpleChanges): void;
490
+ /**
491
+ * Detects filters that contain variable references and sets useVariable flag.
492
+ * This ensures proper display when filters are loaded from saved configuration.
493
+ */
494
+ private detectVariableFilters;
495
+ private buildAttributeTypeMap;
496
+ onNavigationPropertiesChange(): void;
497
+ onMaxDepthChange(value: number | null): void;
498
+ private loadAttributesFromCkType;
499
+ private filterAvailableAttributes;
500
+ private getAttributeDepth;
501
+ addFilter(): void;
502
+ removeFilter(filter: FieldFilterItem): void;
503
+ removeSelected(): void;
504
+ onFilterChange(): void;
505
+ onAttributeChange(filter: FieldFilterItem, attributePath: string): void;
506
+ onOperatorChange(filter: FieldFilterItem): void;
507
+ onComparisonValueChange(filter: FieldFilterItem, inputValue: string | null): void;
508
+ onComparisonValueBlur(filter: FieldFilterItem): void;
509
+ onBooleanValueChange(filter: FieldFilterItem, value: string): void;
510
+ onNumericValueChange(filter: FieldFilterItem, value: number | null): void;
511
+ onDateTimeValueChange(filter: FieldFilterItem, value: Date | null): void;
512
+ getDisplayValue(filter: FieldFilterItem): string;
513
+ getBooleanValue(filter: FieldFilterItem): string;
514
+ getNumericValue(filter: FieldFilterItem): number;
515
+ getDateTimeValue(filter: FieldFilterItem): Date | null;
516
+ getInputType(filter: FieldFilterItem): InputType;
517
+ getDecimals(filter: FieldFilterItem): number;
518
+ getNumberFormat(filter: FieldFilterItem): string;
519
+ getValuePlaceholder(filter: FieldFilterItem): string;
520
+ isArrayOperator(operator: FieldFilterOperatorsDto): boolean;
521
+ isSelected(filter: FieldFilterItem): boolean;
522
+ toggleSelection(filter: FieldFilterItem): void;
523
+ isAllSelected(): boolean;
524
+ isIndeterminate(): boolean;
525
+ toggleSelectAll(event: Event): void;
526
+ onAttributeFilterChange(filter: string): void;
527
+ /**
528
+ * Toggles between literal value and variable mode for a filter.
529
+ */
530
+ toggleVariableMode(filter: FieldFilterItem): void;
531
+ /**
532
+ * Gets the selected variable object for a filter that uses variable mode.
533
+ */
534
+ getSelectedVariable(filter: FieldFilterItem): FilterVariable | null;
535
+ /**
536
+ * Handles variable selection from the dropdown.
537
+ */
538
+ onVariableSelected(filter: FieldFilterItem, variable: FilterVariable | null): void;
539
+ /**
540
+ * Extracts variable name from ${variableName} or $variableName format.
541
+ */
542
+ private extractVariableName;
543
+ /**
544
+ * Checks if a filter value is a variable reference.
545
+ */
546
+ isVariableValue(value: unknown): boolean;
547
+ /**
548
+ * Formats a variable name for display (e.g., "myVar" -> "${myVar}").
549
+ */
550
+ formatVariableDisplay(name: string): string;
551
+ getFieldFilters(): FieldFilterDto[];
552
+ setFieldFilters(filters: FieldFilterDto[]): void;
553
+ clear(): void;
554
+ private isArrayValue;
555
+ private extractArrayContent;
556
+ private parseAndCleanArrayValues;
557
+ static ɵfac: i0.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
558
+ static ɵcmp: i0.ɵɵComponentDeclaration<FieldFilterEditorComponent, "mm-field-filter-editor", never, { "availableAttributes": { "alias": "availableAttributes"; "required": false; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; "hideNavigationProperties": { "alias": "hideNavigationProperties"; "required": false; }; "attributePaths": { "alias": "attributePaths"; "required": false; }; "enableVariables": { "alias": "enableVariables"; "required": false; }; "availableVariables": { "alias": "availableVariables"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; }, { "filtersChange": "filtersChange"; }, never, never, true, never>;
559
+ }
560
+
561
+ /**
562
+ * Animated OctoMesh logo loader component.
563
+ * Displays the OctoMesh octopus SVG with wiggling tentacles
564
+ * and orbiting data blocks representing data loading.
565
+ *
566
+ * Uses `--kendo-color-primary` for theme-independent coloring.
567
+ * Override the color via CSS `color` property on the host element.
568
+ *
569
+ * @example
570
+ * ```html
571
+ * <mm-octo-loader [size]="'medium'"></mm-octo-loader>
572
+ * <mm-octo-loader [size]="'small'"></mm-octo-loader>
573
+ * ```
574
+ */
575
+ declare class OctoLoaderComponent {
576
+ size: 'small' | 'medium';
577
+ static ɵfac: i0.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
578
+ static ɵcmp: i0.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
28
579
  }
29
580
 
30
581
  declare enum AttributeValueTypeDto {
@@ -359,598 +910,880 @@ declare class PropertyValueDisplayComponent implements OnInit {
359
910
  key: string;
360
911
  value: unknown;
361
912
  }[];
362
- /**
363
- * Determine the appropriate type for a nested property value
364
- */
365
- getPropertyType(value: unknown): AttributeValueTypeDto;
366
- /**
367
- * Check if this is a BINARY_LINKED type with download capability
368
- */
369
- isBinaryLinkedWithDownload(): boolean;
370
- /**
371
- * Get the filename from binary info
372
- */
373
- getBinaryFilename(): string | null;
374
- /**
375
- * Get the file size from binary info
376
- */
377
- getBinarySize(): number | null;
378
- /**
379
- * Get the content type from binary info
380
- */
381
- getBinaryContentType(): string | null;
382
- /**
383
- * Format file size to human readable format
384
- */
385
- formatFileSize(bytes: number | null): string;
386
- /**
387
- * Handle download button click
388
- */
389
- onDownload(): void;
390
- static ɵfac: i0.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
391
- static ɵcmp: i0.ɵɵComponentDeclaration<PropertyValueDisplayComponent, "mm-property-value-display", never, { "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; }, { "binaryDownload": "binaryDownload"; }, never, never, true, never>;
392
- }
393
-
394
- interface AttributeSelectorDialogData {
395
- rtCkTypeId: string;
396
- selectedAttributes?: string[];
397
- dialogTitle?: string;
398
- singleSelect?: boolean;
399
- includeNavigationProperties?: boolean;
400
- maxDepth?: number;
401
- /** Additional virtual attributes to include in the available list (e.g., Timestamp for stream data queries) */
402
- additionalAttributes?: AttributeItem[];
403
- /** When true, hides the navigation properties checkbox and max depth controls */
404
- hideNavigationControls?: boolean;
405
- /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */
406
- attributePaths?: string[];
407
- }
408
- interface AttributeSelectorDialogResult {
409
- selectedAttributes: AttributeItem[];
410
- }
411
- interface ValueTypeFilterOption$1 {
412
- text: string;
413
- value: AttributeValueTypeDto$1 | null;
414
- }
415
- declare class AttributeSelectorDialogComponent implements OnInit {
416
- private readonly windowRef;
417
- private readonly attributeService;
418
- private searchSubject;
419
- protected readonly arrowRightIcon: _progress_kendo_svg_icons.SVGIcon;
420
- protected readonly arrowLeftIcon: _progress_kendo_svg_icons.SVGIcon;
421
- protected readonly chevronDoubleRightIcon: _progress_kendo_svg_icons.SVGIcon;
422
- protected readonly chevronDoubleLeftIcon: _progress_kendo_svg_icons.SVGIcon;
423
- protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
424
- protected readonly arrowUpIcon: _progress_kendo_svg_icons.SVGIcon;
425
- protected readonly arrowDownIcon: _progress_kendo_svg_icons.SVGIcon;
426
- data: AttributeSelectorDialogData;
427
- dialogTitle: string;
428
- rtCkTypeId: string;
429
- singleSelect: boolean;
430
- private additionalAttributes;
431
- searchText: string;
432
- selectedSingleKey: string[];
433
- selectedValueTypeFilter: AttributeValueTypeDto$1 | null;
434
- includeNavigationProperties: boolean;
435
- maxDepth: number | null;
436
- hideNavigationControls: boolean;
437
- private attributePathsSet;
438
- availableAttributes: AttributeItem[];
439
- selectedAttributes: AttributeItem[];
440
- availableGridData: GridDataResult;
441
- selectedGridData: GridDataResult;
442
- selectedAvailableKeys: string[];
443
- selectedChosenKeys: string[];
444
- valueTypeOptions: ValueTypeFilterOption$1[];
445
- private lastClickTime;
446
- private lastClickedItem;
447
- private readonly doubleClickDelay;
448
- ngOnInit(): void;
449
- private loadAvailableAttributes;
450
- private loadInitialSelectedAttributes;
451
- onSearchChange(value: string): void;
452
- onValueTypeFilterChange(_value: AttributeValueTypeDto$1 | null): void;
453
- onNavigationPropertiesChange(): void;
454
- onMaxDepthChange(value: number | null): void;
455
- addSelected(): void;
456
- removeSelected(): void;
457
- addAll(): void;
458
- removeAll(): void;
459
- private sortAvailableAttributes;
460
- canMoveUp(): boolean;
461
- canMoveDown(): boolean;
462
- moveUp(): void;
463
- moveDown(): void;
464
- private updateGrids;
465
- private updateAvailableGrid;
466
- private updateSelectedGrid;
467
- onCancel(): void;
468
- onConfirm(): void;
469
- /**
470
- * Handle cell click on available attributes grid to detect double-click
471
- */
472
- onAvailableCellClick(event: CellClickEvent): void;
473
- /**
474
- * Handle cell click on selected attributes grid to detect double-click
475
- */
476
- onSelectedCellClick(event: CellClickEvent): void;
477
- /**
478
- * Handle cell click on single-select grid to detect double-click (confirm immediately)
479
- */
480
- onSingleSelectCellClick(event: CellClickEvent): void;
481
- /**
482
- * Move a single attribute from available to selected
483
- */
484
- private moveAttributeToSelected;
485
- /**
486
- * Move a single attribute from selected to available
487
- */
488
- private moveAttributeToAvailable;
489
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSelectorDialogComponent, never>;
490
- static ɵcmp: i0.ɵɵComponentDeclaration<AttributeSelectorDialogComponent, "mm-attribute-selector-dialog", never, {}, {}, never, never, true, never>;
491
- }
492
-
493
- interface AttributeSelectorResult {
494
- confirmed: boolean;
495
- selectedAttributes: AttributeItem[];
496
- }
497
- declare class AttributeSelectorDialogService {
498
- private readonly windowService;
499
- private readonly windowStateService;
500
- /**
501
- * Opens the attribute selector dialog
502
- * @param rtCkTypeId The RtCkType ID to fetch attributes for
503
- * @param selectedAttributes Optional array of pre-selected attribute paths
504
- * @param dialogTitle Optional custom dialog title
505
- * @param singleSelect Optional flag for single-select mode
506
- * @param additionalAttributes Optional virtual attributes to include (e.g., Timestamp for stream data)
507
- * @param includeNavigationProperties Optional flag to control navigation property inclusion
508
- * @param maxDepth Optional max depth for navigation properties
509
- * @param hideNavigationControls Optional flag to hide the navigation property controls in the dialog
510
- * @returns Promise that resolves with the result containing selected attributes and confirmation status
511
- */
512
- openAttributeSelector(rtCkTypeId: string, selectedAttributes?: string[], dialogTitle?: string, singleSelect?: boolean, additionalAttributes?: AttributeItem[], includeNavigationProperties?: boolean, maxDepth?: number, hideNavigationControls?: boolean, attributePaths?: string[]): Promise<AttributeSelectorResult>;
513
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSelectorDialogService, never>;
514
- static ɵprov: i0.ɵɵInjectableDeclaration<AttributeSelectorDialogService>;
515
- }
516
-
517
- interface AttributeSortItem {
518
- attributePath: string;
519
- attributeValueType: string;
520
- sortOrder: 'standard' | 'ascending' | 'descending';
521
- }
522
- interface AttributeSortSelectorDialogData {
523
- ckTypeId: string;
524
- selectedAttributes?: AttributeSortItem[];
525
- dialogTitle?: string;
526
- /** When set, controls whether navigation properties are included in the attribute list */
527
- includeNavigationProperties?: boolean;
528
- /** When true, hides the navigation property controls (if they were to be added) */
529
- hideNavigationControls?: boolean;
530
- /** When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching) */
531
- attributePaths?: string[];
532
- }
533
- interface AttributeSortSelectorDialogResult {
534
- selectedAttributes: AttributeSortItem[];
535
- }
536
- interface SortOption {
537
- text: string;
538
- value: 'standard' | 'ascending' | 'descending';
539
- }
540
- interface ValueTypeFilterOption {
541
- text: string;
542
- value: AttributeValueTypeDto$1 | null;
543
- }
544
- declare class AttributeSortSelectorDialogComponent implements OnInit {
545
- private readonly windowRef;
546
- private readonly attributeService;
547
- private searchSubject;
548
- data: AttributeSortSelectorDialogData;
549
- ckTypeId: string;
550
- includeNavigationProperties: boolean | undefined;
551
- private attributePathsSet;
552
- searchText: string;
553
- currentSortOrder: 'standard' | 'ascending' | 'descending';
554
- selectedValueTypeFilter: AttributeValueTypeDto$1 | null;
555
- availableAttributes: AttributeItem[];
556
- selectedAttributes: AttributeSortItem[];
557
- availableGridData: GridDataResult;
558
- selectedGridData: GridDataResult;
559
- selectedAvailableKeys: string[];
560
- selectedChosenKeys: string[];
561
- private lastClickTime;
562
- private lastClickedItem;
563
- private readonly doubleClickDelay;
564
- dialogTitle: string;
565
- sortOptions: SortOption[];
566
- valueTypeOptions: ValueTypeFilterOption[];
567
- protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
568
- protected readonly sortAscIcon: _progress_kendo_svg_icons.SVGIcon;
569
- protected readonly sortDescIcon: _progress_kendo_svg_icons.SVGIcon;
570
- ngOnInit(): void;
571
- private loadAvailableAttributes;
572
- onSearchChange(value: string): void;
573
- onValueTypeFilterChange(_value: AttributeValueTypeDto$1 | null): void;
574
- setSortOrder(order: 'standard' | 'ascending' | 'descending'): void;
575
- addAttributeWithSort(): void;
576
- onAvailableCellClick(event: CellClickEvent): void;
577
- onSelectedCellClick(event: CellClickEvent): void;
578
- private addAttributeToSelected;
579
- removeAttribute(attribute: AttributeSortItem): void;
580
- getSortIndicator(sortOrder: string): string;
581
- getSortText(sortOrder: string): string;
582
- private updateGrids;
583
- private updateAvailableGrid;
584
- private updateSelectedGrid;
585
- onOk(): void;
586
- onCancel(): void;
587
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogComponent, never>;
588
- static ɵcmp: i0.ɵɵComponentDeclaration<AttributeSortSelectorDialogComponent, "mm-attribute-sort-selector-dialog", never, {}, {}, never, never, true, never>;
913
+ /**
914
+ * Determine the appropriate type for a nested property value
915
+ */
916
+ getPropertyType(value: unknown): AttributeValueTypeDto;
917
+ /**
918
+ * Check if this is a BINARY_LINKED type with download capability
919
+ */
920
+ isBinaryLinkedWithDownload(): boolean;
921
+ /**
922
+ * Get the filename from binary info
923
+ */
924
+ getBinaryFilename(): string | null;
925
+ /**
926
+ * Get the file size from binary info
927
+ */
928
+ getBinarySize(): number | null;
929
+ /**
930
+ * Get the content type from binary info
931
+ */
932
+ getBinaryContentType(): string | null;
933
+ /**
934
+ * Format file size to human readable format
935
+ */
936
+ formatFileSize(bytes: number | null): string;
937
+ /**
938
+ * Handle download button click
939
+ */
940
+ onDownload(): void;
941
+ static ɵfac: i0.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
942
+ static ɵcmp: i0.ɵɵComponentDeclaration<PropertyValueDisplayComponent, "mm-property-value-display", never, { "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; }, { "binaryDownload": "binaryDownload"; }, never, never, true, never>;
589
943
  }
590
944
 
591
- interface AttributeSortSelectorResult {
592
- confirmed: boolean;
593
- selectedAttributes: AttributeSortItem[];
945
+ interface RtEntityId {
946
+ rtId: string;
947
+ ckTypeId: string;
594
948
  }
595
- declare class AttributeSortSelectorDialogService {
596
- private readonly windowService;
597
- private readonly windowStateService;
949
+ declare class RtEntityIdHelper {
598
950
  /**
599
- * Opens the attribute sort selector dialog
600
- * @param ckTypeId The CkType ID to fetch attributes for
601
- * @param selectedAttributes Optional array of pre-selected attributes with sort orders
602
- * @param dialogTitle Optional custom dialog title
603
- * @param includeNavigationProperties Optional flag to control navigation property inclusion
604
- * @param hideNavigationControls Optional flag to hide the navigation property controls
605
- * @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status
951
+ * Encodes ckTypeId@rtId into a URL-safe Base64 string for routing
606
952
  */
607
- openAttributeSortSelector(ckTypeId: string, selectedAttributes?: AttributeSortItem[], dialogTitle?: string, includeNavigationProperties?: boolean, hideNavigationControls?: boolean, attributePaths?: string[]): Promise<AttributeSortSelectorResult>;
608
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogService, never>;
609
- static ɵprov: i0.ɵɵInjectableDeclaration<AttributeSortSelectorDialogService>;
953
+ static encode(rtId: string, ckTypeId: string): string;
954
+ /**
955
+ * Encodes a ckTypeId@rtId string directly into a URL-safe Base64 string
956
+ */
957
+ static encodeFromString(entityIdentifier: string): string;
958
+ /**
959
+ * Decodes URL parameter back to RtEntityId
960
+ */
961
+ static decode(encoded: string): RtEntityId;
962
+ /**
963
+ * Validates if a string is in the correct ckTypeId@rtId format
964
+ */
965
+ static isValidFormat(entityIdentifier: string): boolean;
610
966
  }
611
967
 
612
- interface CkTypeSelectorDialogData {
613
- selectedCkTypeId?: string;
614
- ckModelIds?: string[];
615
- dialogTitle?: string;
616
- allowAbstract?: boolean;
617
- derivedFromRtCkTypeId?: string;
968
+ declare class EntityDetailComponent implements OnInit, OnDestroy {
969
+ private readonly location;
970
+ private readonly route;
971
+ private readonly router;
972
+ private readonly dataSource;
973
+ private readonly destroy$;
974
+ protected readonly arrowLeftIcon: _progress_kendo_svg_icons.SVGIcon;
975
+ entity: RtEntityDto | null;
976
+ loading: boolean;
977
+ error: string | null;
978
+ entityId: RtEntityId | null;
979
+ ngOnInit(): Promise<void>;
980
+ ngOnDestroy(): void;
981
+ loadEntity(): Promise<void>;
982
+ navigateBack(): void;
983
+ navigateToEntity(rtId: string, ckTypeId: string): Promise<void>;
984
+ getEntityDisplayName(): string;
985
+ /**
986
+ * Handle property value changes from the property grid
987
+ */
988
+ onPropertyChange(event: unknown): void;
989
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
990
+ static ɵcmp: i0.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, {}, {}, never, never, true, never>;
618
991
  }
619
- interface CkTypeSelectorDialogResult {
620
- selectedCkType: CkTypeSelectorItem$1;
992
+
993
+ declare const botService: {
994
+ name: string;
995
+ content: string;
996
+ viewBox: string;
997
+ };
998
+ declare const dashboard: {
999
+ name: string;
1000
+ content: string;
1001
+ viewBox: string;
1002
+ };
1003
+ declare const tenancy: {
1004
+ name: string;
1005
+ content: string;
1006
+ viewBox: string;
1007
+ };
1008
+ declare const code: {
1009
+ name: string;
1010
+ content: string;
1011
+ viewBox: string;
1012
+ };
1013
+ declare const identityService: {
1014
+ name: string;
1015
+ content: string;
1016
+ viewBox: string;
1017
+ };
1018
+ declare const storage: {
1019
+ name: string;
1020
+ content: string;
1021
+ viewBox: string;
1022
+ };
1023
+ declare const publicIcon: {
1024
+ name: string;
1025
+ content: string;
1026
+ viewBox: string;
1027
+ };
1028
+ declare const power: {
1029
+ name: string;
1030
+ content: string;
1031
+ viewBox: string;
1032
+ };
1033
+ declare const team_dashboard: {
1034
+ name: string;
1035
+ content: string;
1036
+ viewBox: string;
1037
+ };
1038
+ declare const swagger_asset: {
1039
+ name: string;
1040
+ content: string;
1041
+ viewBox: string;
1042
+ };
1043
+ declare const swagger_bot: {
1044
+ name: string;
1045
+ content: string;
1046
+ viewBox: string;
1047
+ };
1048
+ declare const swagger_identity: {
1049
+ name: string;
1050
+ content: string;
1051
+ viewBox: string;
1052
+ };
1053
+ declare const swagger_communication: {
1054
+ name: string;
1055
+ content: string;
1056
+ viewBox: string;
1057
+ };
1058
+ declare const swagger: {
1059
+ name: string;
1060
+ content: string;
1061
+ viewBox: string;
1062
+ };
1063
+ declare const user_diagnostics: {
1064
+ name: string;
1065
+ content: string;
1066
+ viewBox: string;
1067
+ };
1068
+ declare const work: {
1069
+ name: string;
1070
+ content: string;
1071
+ viewBox: string;
1072
+ };
1073
+ declare const more_time: {
1074
+ name: string;
1075
+ content: string;
1076
+ viewBox: string;
1077
+ };
1078
+ declare const manage_accounts: {
1079
+ name: string;
1080
+ content: string;
1081
+ viewBox: string;
1082
+ };
1083
+ declare const group: {
1084
+ name: string;
1085
+ content: string;
1086
+ viewBox: string;
1087
+ };
1088
+ declare const app_registration: {
1089
+ name: string;
1090
+ content: string;
1091
+ viewBox: string;
1092
+ };
1093
+ declare const settings: {
1094
+ name: string;
1095
+ content: string;
1096
+ viewBox: string;
1097
+ };
1098
+ declare const account_tree: {
1099
+ name: string;
1100
+ content: string;
1101
+ viewBox: string;
1102
+ };
1103
+ declare const analytics: {
1104
+ name: string;
1105
+ content: string;
1106
+ viewBox: string;
1107
+ };
1108
+ declare const travel_explore: {
1109
+ name: string;
1110
+ content: string;
1111
+ viewBox: string;
1112
+ };
1113
+ declare const page_info: {
1114
+ name: string;
1115
+ content: string;
1116
+ viewBox: string;
1117
+ };
1118
+ declare const query_builder: {
1119
+ name: string;
1120
+ content: string;
1121
+ viewBox: string;
1122
+ };
1123
+ declare const event_list: {
1124
+ name: string;
1125
+ content: string;
1126
+ viewBox: string;
1127
+ };
1128
+ declare const graphic_eq: {
1129
+ name: string;
1130
+ content: string;
1131
+ viewBox: string;
1132
+ };
1133
+ declare const pool: {
1134
+ name: string;
1135
+ content: string;
1136
+ viewBox: string;
1137
+ };
1138
+ declare const component_exchange: {
1139
+ name: string;
1140
+ content: string;
1141
+ viewBox: string;
1142
+ };
1143
+ declare const schedule_send: {
1144
+ name: string;
1145
+ content: string;
1146
+ viewBox: string;
1147
+ };
1148
+ declare const text_snippet: {
1149
+ name: string;
1150
+ content: string;
1151
+ viewBox: string;
1152
+ };
1153
+ declare const notifications: {
1154
+ name: string;
1155
+ content: string;
1156
+ viewBox: string;
1157
+ };
1158
+ declare const webhook: {
1159
+ name: string;
1160
+ content: string;
1161
+ viewBox: string;
1162
+ };
1163
+ declare const pages: {
1164
+ name: string;
1165
+ content: string;
1166
+ viewBox: string;
1167
+ };
1168
+ declare const insert_link: {
1169
+ name: string;
1170
+ content: string;
1171
+ viewBox: string;
1172
+ };
1173
+ declare const add: {
1174
+ name: string;
1175
+ content: string;
1176
+ viewBox: string;
1177
+ };
1178
+ declare const customer: {
1179
+ name: string;
1180
+ content: string;
1181
+ viewBox: string;
1182
+ };
1183
+ declare const computer: {
1184
+ name: string;
1185
+ content: string;
1186
+ viewBox: string;
1187
+ };
1188
+ declare const checklist: {
1189
+ name: string;
1190
+ content: string;
1191
+ viewBox: string;
1192
+ };
1193
+ declare const sort: {
1194
+ name: string;
1195
+ content: string;
1196
+ viewBox: string;
1197
+ };
1198
+ declare const person_search: {
1199
+ name: string;
1200
+ content: string;
1201
+ viewBox: string;
1202
+ };
1203
+ declare const category: {
1204
+ name: string;
1205
+ content: string;
1206
+ viewBox: string;
1207
+ };
1208
+ declare const chat: {
1209
+ name: string;
1210
+ content: string;
1211
+ viewBox: string;
1212
+ };
1213
+ declare const playlist_add_check: {
1214
+ name: string;
1215
+ content: string;
1216
+ viewBox: string;
1217
+ };
1218
+ declare const article: {
1219
+ name: string;
1220
+ content: string;
1221
+ viewBox: string;
1222
+ };
1223
+
1224
+ /**
1225
+ * Translatable messages for the RuntimeBrowser components.
1226
+ * Pass translated strings to override the English defaults.
1227
+ */
1228
+ interface RuntimeBrowserMessages {
1229
+ title: string;
1230
+ badgeLabel: string;
1231
+ titlePrefix: string;
1232
+ ready: string;
1233
+ selectItem: string;
1234
+ noPropertiesAvailable: string;
1235
+ constructionKitModel: string;
1236
+ constructionKitModels: string;
1237
+ fullName: string;
1238
+ semanticName: string;
1239
+ modelName: string;
1240
+ version: string;
1241
+ state: string;
1242
+ selectTypeFromTree: string;
1243
+ browseModelsAndTypes: string;
1244
+ type: string;
1245
+ abstract: string;
1246
+ final: string;
1247
+ base: string;
1248
+ runtimeEntities: string;
1249
+ runtimeId: string;
1250
+ typeId: string;
1251
+ entityIdentifier: string;
1252
+ wellKnownName: string;
1253
+ entityInformation: string;
1254
+ loadingEntityDetails: string;
1255
+ retry: string;
1256
+ attributes: string;
1257
+ associations: string;
1258
+ direction: string;
1259
+ role: string;
1260
+ relatedType: string;
1261
+ relatedEntity: string;
1262
+ all: string;
1263
+ inbound: string;
1264
+ outbound: string;
1265
+ allRoles: string;
1266
+ allTypes: string;
1267
+ entityId: string;
1268
+ viewDetails: string;
1269
+ copyToClipboard: string;
1270
+ copyEntityIdentifierToClipboard: string;
1271
+ goToEntity: string;
1272
+ refresh: string;
1273
+ create: string;
1274
+ edit: string;
1275
+ delete: string;
1276
+ createEntity: string;
1277
+ updateEntity: string;
1278
+ name: string;
1279
+ runtimeCkTypeId: string;
1280
+ targetLocation: string;
1281
+ rootLevel: string;
1282
+ entityType: string;
1283
+ selectType: string;
1284
+ selectTypePrompt: string;
1285
+ save: string;
1286
+ cancel: string;
1287
+ longitude: string;
1288
+ latitude: string;
1289
+ resetToInitialValue: string;
1290
+ attributesFor: string;
1291
+ couldNotLoadEntityDetails: string;
1292
+ failedToLoadEntityDetails: string;
1293
+ copiedToClipboard: string;
1294
+ failedToCopyToClipboard: string;
1295
+ downloadNotAvailable: string;
1296
+ failedToLoadDownloadInfo: string;
1297
+ missingRequiredIdentifiers: string;
1298
+ failedToCreateEntity: string;
1299
+ failedToUpdateEntity: string;
1300
+ goToEntityTitle: string;
1301
+ goToEntityPrompt: string;
1302
+ go: string;
1303
+ created: string;
1304
+ modified: string;
621
1305
  }
622
- declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
623
- private readonly windowRef;
624
- private readonly ckTypeSelectorService;
625
- private searchSubject;
626
- private subscriptions;
627
- protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
628
- protected readonly filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
629
- dialogTitle: string;
630
- allowAbstract: boolean;
631
- searchText: string;
632
- selectedModel: string | null;
633
- availableModels: string[];
634
- gridData: GridDataResult;
635
- isLoading: boolean;
636
- pageSize: number;
637
- skip: number;
638
- selectedKeys: string[];
639
- selectedType: CkTypeSelectorItem$1 | null;
640
- selectItemBy: (context: RowArgs) => string;
641
- private initialCkModelIds?;
642
- derivedFromRtCkTypeId?: string;
643
- private lastClickTime;
644
- private lastClickRtCkTypeId;
645
- /** Data passed from the service */
646
- data?: CkTypeSelectorDialogData;
647
- ngOnInit(): void;
648
- ngOnDestroy(): void;
649
- private loadTypes;
650
- private loadAvailableModels;
651
- onSearchChange(value: string): void;
652
- onModelFilterChange(_value: string | null): void;
653
- clearFilters(): void;
654
- onPageChange(event: PageChangeEvent): void;
655
- onSelectionChange(event: SelectionEvent): void;
656
- onCellClick(event: CellClickEvent): void;
657
- onCancel(): void;
658
- onConfirm(): void;
659
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
660
- static ɵcmp: i0.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, {}, {}, never, never, true, never>;
1306
+ /**
1307
+ * Default English messages for the RuntimeBrowser components.
1308
+ */
1309
+ declare const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages;
1310
+
1311
+ declare class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<RtEntityDto> {
1312
+ private readonly getRuntimeEntitiesGQL;
1313
+ private ckTypeId;
1314
+ constructor();
1315
+ setRtCkTypeId(ckTypeId: string): void;
1316
+ fetchData(queryOptions: FetchDataOptions): Observable<FetchResultTyped<RtEntityDto> | null>;
1317
+ static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
1318
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
661
1319
  }
662
1320
 
663
- interface CkTypeSelectorResult {
664
- confirmed: boolean;
665
- selectedCkType: CkTypeSelectorItem$1 | null;
1321
+ /**
1322
+ * Performs helpful Octomesh Types operations, like checks, comparisons etc.
1323
+ */
1324
+ declare class TypeHelperService {
1325
+ /**
1326
+ * Checks if given item is runtime entity.
1327
+ *
1328
+ * @param item Item to check.
1329
+ * @returns True for runtime entity, false otherwise.
1330
+ */
1331
+ isRuntimeEntity(item: unknown): item is RtEntityDto;
1332
+ static ɵfac: i0.ɵɵFactoryDeclaration<TypeHelperService, never>;
1333
+ static ɵprov: i0.ɵɵInjectableDeclaration<TypeHelperService>;
666
1334
  }
667
- declare class CkTypeSelectorDialogService {
668
- private readonly windowService;
669
- private readonly windowStateService;
1335
+
1336
+ interface CreateInput {
670
1337
  /**
671
- * Opens the CkType selector dialog
672
- * @param options Dialog options
673
- * @returns Promise that resolves with the result containing selected CkType and confirmation status
1338
+ * Parent context: object is always present; ckTypeId, rtId and name are optional (undefined for root-level creation, e.g. when creating under a CK Type or when parentNode is null).
1339
+ * Code uses parent?.ckTypeId and parent?.rtId defensively when building associations.
674
1340
  */
675
- openCkTypeSelector(options?: {
676
- selectedCkTypeId?: string;
677
- ckModelIds?: string[];
678
- dialogTitle?: string;
679
- allowAbstract?: boolean;
680
- derivedFromRtCkTypeId?: string;
681
- }): Promise<CkTypeSelectorResult>;
682
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
683
- static ɵprov: i0.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
1341
+ parent: {
1342
+ ckTypeId?: string;
1343
+ rtId?: string;
1344
+ name?: string;
1345
+ };
1346
+ /**
1347
+ * List of available CK types to choose from when creating a new entity. This is required to populate the dropdown for type selection in the UI.
1348
+ */
1349
+ ckTypes: CkTypeDto[];
1350
+ }
1351
+ interface CreateOutput {
1352
+ success: boolean;
1353
+ data?: {
1354
+ /**
1355
+ * The RT ID of the newly created entity. This is returned after a successful creation operation and can be used for further operations or navigation. It is optional because the creation might fail, in which case this value would be undefined.
1356
+ */
1357
+ createdRtEntityId: string;
1358
+ };
684
1359
  }
685
1360
 
686
- declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
687
- autocomplete: AutoCompleteComponent;
688
- placeholder: string;
689
- minSearchLength: number;
690
- maxResults: number;
691
- debounceMs: number;
692
- ckModelIds?: string[];
693
- allowAbstract: boolean;
694
- dialogTitle: string;
695
- advancedSearchLabel: string;
696
- derivedFromRtCkTypeId?: string;
697
- private _disabled;
698
- get disabled(): boolean;
699
- set disabled(value: boolean);
700
- private _required;
701
- get required(): boolean;
702
- set required(value: boolean);
703
- ckTypeSelected: EventEmitter<CkTypeSelectorItem$1>;
704
- ckTypeCleared: EventEmitter<void>;
705
- searchFormControl: FormControl<any>;
706
- filteredTypes: string[];
707
- selectedCkType: CkTypeSelectorItem$1 | null;
708
- isLoading: boolean;
709
- private typeMap;
710
- private searchSubject;
711
- private subscriptions;
712
- private onChange;
713
- private onTouched;
714
- protected readonly searchIcon: _progress_kendo_svg_icons.SVGIcon;
715
- protected popupSettings: PopupSettings;
716
- private static popupStyleInjected;
717
- private readonly ckTypeSelectorService;
718
- private readonly dialogService;
719
- private readonly elementRef;
720
- ngOnInit(): void;
721
- ngOnDestroy(): void;
722
- writeValue(value: CkTypeSelectorItem$1 | null): void;
723
- registerOnChange(fn: (value: CkTypeSelectorItem$1 | null) => void): void;
724
- registerOnTouched(fn: () => void): void;
725
- setDisabledState(isDisabled: boolean): void;
726
- validate(control: AbstractControl): ValidationErrors | null;
727
- onFilterChange(filter: string): void;
728
- onSelectionChange(value: string): void;
729
- onFocus(): void;
730
- onBlur(): void;
731
- clear(): void;
732
- focus(): void;
733
- reset(): void;
734
- private setupSearch;
735
- private injectPopupStyles;
736
- private selectCkType;
737
- openDialog(event?: Event): Promise<void>;
738
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
739
- static ɵcmp: i0.ɵɵComponentDeclaration<CkTypeSelectorInputComponent, "mm-ck-type-selector-input", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "maxResults": { "alias": "maxResults"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "ckModelIds": { "alias": "ckModelIds"; "required": false; }; "allowAbstract": { "alias": "allowAbstract"; "required": false; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; }; "advancedSearchLabel": { "alias": "advancedSearchLabel"; "required": false; }; "derivedFromRtCkTypeId": { "alias": "derivedFromRtCkTypeId"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
1361
+ interface UpdateInput {
1362
+ /**
1363
+ * The name of the entity being updated. This is required to display the name of the entity in the UI.
1364
+ */
1365
+ name: string;
1366
+ /**
1367
+ * The RT ID of the entity being updated. This is required to identify which entity to update in the backend.
1368
+ */
1369
+ rtId: string;
1370
+ /**
1371
+ * The RT CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.
1372
+ */
1373
+ rtCkTypeId: string;
1374
+ /**
1375
+ * The CK type ID of the entity being updated. This is required to understand the structure and attributes of the entity for proper mapping and validation during the update operation.
1376
+ */
1377
+ ckTypeId: string;
1378
+ }
1379
+ interface UpdateOutput {
1380
+ success: boolean;
1381
+ data?: {
1382
+ /**
1383
+ * The RT ID of the updated entity. This is returned after a successful update operation and can be used for further operations or navigation. It is optional because the update might fail, in which case this value would be undefined.
1384
+ */
1385
+ updatedRtEntityId: string;
1386
+ };
740
1387
  }
741
1388
 
742
- /**
743
- * Variable definition for use in filter values.
744
- * Generic interface that can be provided by any consumer (e.g., MeshBoard).
745
- */
746
- interface FilterVariable {
747
- /** Variable name (without $ prefix) */
748
- name: string;
749
- /** Display label for UI */
750
- label?: string;
751
- /** Variable data type */
752
- type?: 'string' | 'number' | 'boolean' | 'date' | 'datetime';
1389
+ type BrowserItem$3 = RtEntityDto | CkModelDto | CkTypeDto | {
1390
+ isCkModelsRoot?: boolean;
1391
+ ckModelId?: string;
1392
+ };
1393
+ /** Payload emitted when create or update finishes; parent uses it to refresh tree and optionally reload detail view. */
1394
+ interface EntitySavedEvent {
1395
+ parentCkTypeId?: string;
1396
+ parentRtId?: string;
1397
+ /** True when save was an update; parent should reload detail view after tree refresh. */
1398
+ isUpdate?: boolean;
753
1399
  }
754
- interface FieldFilterItem extends FieldFilterDto {
755
- id: number;
756
- /** If true, comparisonValue contains a variable reference (e.g., $myVar) */
757
- useVariable?: boolean;
1400
+ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit {
1401
+ selectedItem: TreeItemDataTyped<BrowserItem$3> | null;
1402
+ set messages(value: Partial<RuntimeBrowserMessages>);
1403
+ protected _messages: RuntimeBrowserMessages;
1404
+ entitySaved: EventEmitter<void | EntitySavedEvent>;
1405
+ dataSourceDirective?: CkTypeEntitiesDataSourceDirective;
1406
+ private readonly router;
1407
+ private readonly route;
1408
+ private readonly entityDataSource;
1409
+ private readonly stateService;
1410
+ protected readonly typeHelperService: TypeHelperService;
1411
+ protected readonly detailsIcon: _progress_kendo_svg_icons.SVGIcon;
1412
+ protected fullEntity: RtEntityDto | null;
1413
+ protected get ckTypeColumns(): ({
1414
+ field: string;
1415
+ displayName: string;
1416
+ dataType: "text";
1417
+ format?: undefined;
1418
+ } | {
1419
+ field: string;
1420
+ displayName: string;
1421
+ format: "short";
1422
+ dataType: "iso8601";
1423
+ })[];
1424
+ protected get ckTypeViewDetailsCommand(): {
1425
+ id: string;
1426
+ type: "link";
1427
+ text: string;
1428
+ svgIcon: _progress_kendo_svg_icons.SVGIcon;
1429
+ onClick: (eventArgs: CommandItemExecuteEventArgs) => Promise<void>;
1430
+ };
1431
+ protected loading: boolean;
1432
+ protected error: string | null;
1433
+ private pendingRtCkTypeId;
1434
+ protected isCreateModeEnabled: boolean;
1435
+ protected isUpdateModeEnabled: boolean;
1436
+ protected createInput: CreateInput | undefined;
1437
+ protected updateInput: UpdateInput | undefined;
1438
+ ngAfterViewInit(): void;
1439
+ ngOnChanges(changes: SimpleChanges): Promise<void>;
1440
+ protected loadFullEntityDetails(): Promise<void>;
1441
+ protected navigateToDetails(): Promise<void>;
1442
+ protected navigateToEntity(rtId: string, ckTypeId: string): Promise<void>;
1443
+ protected getEntityForDisplay(): RtEntityDto | null;
1444
+ protected isCkModel(item: BrowserItem$3): item is CkModelDto;
1445
+ protected isCkType(item: BrowserItem$3): item is CkTypeDto;
1446
+ protected isCkModelsRoot(item: BrowserItem$3): item is {
1447
+ isCkModelsRoot?: boolean;
1448
+ ckModelId?: string;
1449
+ };
1450
+ protected getCkModelIdFullName(item: BrowserItem$3): string;
1451
+ protected getCkModelIdName(item: BrowserItem$3): string;
1452
+ protected getCkModelIdVersion(item: BrowserItem$3): string;
1453
+ protected getCkModelIdSemanticName(item: BrowserItem$3): string;
1454
+ protected getCkModelState(item: BrowserItem$3): string;
1455
+ protected getCkTypeId(item: BrowserItem$3): string;
1456
+ protected getRtCkTypeId(item: BrowserItem$3): string;
1457
+ protected isCkTypeAbstract(item: BrowserItem$3): boolean;
1458
+ protected isCkTypeFinal(item: BrowserItem$3): boolean;
1459
+ protected getCkTypeBaseType(item: BrowserItem$3): string | null;
1460
+ protected onViewEntityDetails: (eventArgs: CommandItemExecuteEventArgs) => Promise<void>;
1461
+ /**
1462
+ * Activates the creation UI and provides necessary data
1463
+ * @param parentNode The tree node under which the new entity will be created, or null for root-level creation
1464
+ * @param allowedTypes List of compatible entity types for the new node
1465
+ */
1466
+ enterCreateMode(parentNode: TreeItemDataTyped<BrowserItem$3> | null, allowedTypes: CkTypeDto[]): void;
1467
+ enterEditMode(selectedItem: TreeItemDataTyped<BrowserItem$3> | null, rtCkTypeId: string | undefined): void;
1468
+ /**
1469
+ * Handles the result of the save operation from the child component
1470
+ * @param result Object containing success status and new entity details
1471
+ */
1472
+ onEntityCreationFinished(result: CreateOutput): void;
1473
+ /**
1474
+ * Called when update editor saves. Emits so parent refreshes tree, then parent will call
1475
+ * reloadCurrentEntityDetails() after refresh so the detail view shows fresh data.
1476
+ */
1477
+ onEntityUpdateFinished(result: UpdateOutput): void;
1478
+ /**
1479
+ * Reloads full entity details for the currently selected item.
1480
+ * Called by parent after tree refresh so the detail view shows data after create/update.
1481
+ */
1482
+ reloadCurrentEntityDetails(): void;
1483
+ onCancel(): void;
1484
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
1485
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserDetailsComponent, "mm-runtime-browser-details", never, { "selectedItem": { "alias": "selectedItem"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, { "entitySaved": "entitySaved"; }, never, never, true, never>;
758
1486
  }
759
- type InputType = 'text' | 'number' | 'boolean' | 'datetime';
760
- declare class FieldFilterEditorComponent implements OnChanges {
761
- private readonly attributeService;
762
- protected readonly plusIcon: _progress_kendo_svg_icons.SVGIcon;
763
- protected readonly minusIcon: _progress_kendo_svg_icons.SVGIcon;
764
- protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
765
- protected readonly dollarIcon: _progress_kendo_svg_icons.SVGIcon;
766
- private readonly arrayOperators;
767
- readonly operators: {
768
- label: string;
769
- value: FieldFilterOperatorsDto;
770
- }[];
771
- readonly booleanOptions: string[];
772
- availableAttributes: AttributeItem[];
1487
+
1488
+ type BrowserItem$2 = RtEntityDto | CkModelDto | CkTypeDto | {
1489
+ isCkModelsRoot?: boolean;
1490
+ ckModelId?: string;
1491
+ };
1492
+ declare class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<BrowserItem$2> {
1493
+ private readonly getTreesDtoGQL;
1494
+ private readonly getTreeNodesDtoGQL;
1495
+ private readonly getCkModelsGQL;
1496
+ private readonly getCkTypesGQL;
1497
+ private readonly getCkModelByIdDtoGQL;
1498
+ private readonly deleteEntitiesDtoGQL;
1499
+ private readonly getRuntimeEntityAssociationsByIdDtoGQL;
1500
+ private readonly updateTreeNodesDtoGQL;
1501
+ private readonly typeHelperService;
1502
+ private isCkModelsRoot;
1503
+ private isCkModel;
1504
+ private isCkType;
1505
+ private static readonly levelMetaData;
1506
+ private static readonly ckTypeMetaData;
1507
+ fetchChildren(item: TreeItemDataTyped<BrowserItem$2>): Promise<TreeItemDataTyped<BrowserItem$2>[]>;
1508
+ fetchRootNodes(): Promise<TreeItemDataTyped<BrowserItem$2>[]>;
773
1509
  /**
774
- * Optional CK type ID for self-loading attributes.
775
- * When set, the component loads available attributes itself and shows
776
- * navigation property controls (checkbox + max depth).
777
- * When not set, the component uses the externally provided availableAttributes input.
1510
+ * Gets ParentChild association of given Runtime Entity.
1511
+ *
1512
+ * @param ckTypeId Ck Type Id.
1513
+ * @param rtId Runtime Id.
1514
+ * @param isParentAssoc if true, fetches only parent, otherwise children.
1515
+ *
1516
+ * @returns Fetches configured association.
778
1517
  */
779
- ckTypeId?: string;
1518
+ getParentChildAssociation(ckTypeId: string, rtId: string, isParentAssoc: boolean): Promise<RtAssociationDto[] | undefined>;
780
1519
  /**
781
- * When true, hides the "Include Navigation Properties" checkbox and Max Depth controls,
782
- * and forces attribute loading without navigation properties.
783
- * Used for stream data queries which don't support navigation properties.
1520
+ * Swaps parent of the given object.
1521
+ *
1522
+ * @param srcObjRtId Runtime Entity Id of the object that is supposed to have its association changed.
1523
+ * @param oldParentCkTypeId CkTypeId of the current parent.
1524
+ * @param oldParentRtId Runtime Entity Id of the current parent.
1525
+ * @param newParentCkTypeId CkTypeId of the target parent.
1526
+ * @param newParentRtId Runtime Entity Id of the target parent.
1527
+ *
1528
+ * @returns true if association was successfully swapped.
784
1529
  */
785
- hideNavigationProperties: boolean;
1530
+ updateParentChildAssociation(srcObjRtId: string, oldParentCkTypeId: string, oldParentRtId: string, newParentCkTypeId: string, newParentRtId: string): Promise<boolean>;
786
1531
  /**
787
- * When set, restricts the available attributes to only these attribute paths (filtered client-side after fetching).
788
- * Used for stream data queries to show only stream-data-enabled attributes.
1532
+ * Returns ckTypeId and rtId of a parent of given runtime entity.
1533
+ *
1534
+ * @param ckTypeId Runtime entity's ck type
1535
+ * @param rtId Runtime entity's runtime id
1536
+ * @returns object with parent's ckTypeId and rtId, or undefined when not found or on error.
789
1537
  */
790
- attributePaths?: string[];
791
- /** Enable variable mode - allows using variables instead of literal values */
792
- enableVariables: boolean;
793
- /** Available variables for selection when enableVariables is true */
794
- availableVariables: FilterVariable[];
795
- /** Controls for self-loading mode (when ckTypeId is set) */
796
- includeNavigationProperties: boolean;
797
- maxDepth: number | null;
798
- isLoadingAttributes: boolean;
799
- private _filters;
800
- private nextId;
801
- filteredAttributeList: AttributeItem[];
802
- private attributeTypeMap;
803
- get filters(): FieldFilterItem[];
804
- set filters(value: FieldFilterItem[]);
805
- filtersChange: EventEmitter<FieldFilterItem[]>;
806
- selectedKeys: number[];
807
- ngOnChanges(changes?: SimpleChanges): void;
1538
+ getRuntimeEntityParentData(ckTypeId: string, rtId: string): Promise<{
1539
+ ckTypeId: string;
1540
+ rtId: string;
1541
+ } | undefined>;
808
1542
  /**
809
- * Detects filters that contain variable references and sets useVariable flag.
810
- * This ensures proper display when filters are loaded from saved configuration.
1543
+ * Performs cascade delete operation on given runtime entity.
1544
+ *
1545
+ * @param itemToDelete Potential runtime entity.
1546
+ * @returns true on successful delete, false on database error or if object is not a runtime entity.
811
1547
  */
812
- private detectVariableFilters;
813
- private buildAttributeTypeMap;
814
- onNavigationPropertiesChange(): void;
815
- onMaxDepthChange(value: number | null): void;
816
- private loadAttributesFromCkType;
817
- addFilter(): void;
818
- removeFilter(filter: FieldFilterItem): void;
819
- removeSelected(): void;
820
- onFilterChange(): void;
821
- onAttributeChange(filter: FieldFilterItem, attributePath: string): void;
822
- onOperatorChange(filter: FieldFilterItem): void;
823
- onComparisonValueChange(filter: FieldFilterItem, inputValue: string | null): void;
824
- onComparisonValueBlur(filter: FieldFilterItem): void;
825
- onBooleanValueChange(filter: FieldFilterItem, value: string): void;
826
- onNumericValueChange(filter: FieldFilterItem, value: number | null): void;
827
- onDateTimeValueChange(filter: FieldFilterItem, value: Date | null): void;
828
- getDisplayValue(filter: FieldFilterItem): string;
829
- getBooleanValue(filter: FieldFilterItem): string;
830
- getNumericValue(filter: FieldFilterItem): number;
831
- getDateTimeValue(filter: FieldFilterItem): Date | null;
832
- getInputType(filter: FieldFilterItem): InputType;
833
- getDecimals(filter: FieldFilterItem): number;
834
- getNumberFormat(filter: FieldFilterItem): string;
835
- getValuePlaceholder(filter: FieldFilterItem): string;
836
- isArrayOperator(operator: FieldFilterOperatorsDto): boolean;
837
- isSelected(filter: FieldFilterItem): boolean;
838
- toggleSelection(filter: FieldFilterItem): void;
839
- isAllSelected(): boolean;
840
- isIndeterminate(): boolean;
841
- toggleSelectAll(event: Event): void;
842
- onAttributeFilterChange(filter: string): void;
1548
+ deleteRtEntityAndChildren(itemToDelete: TreeItemDataTyped<unknown>): Promise<boolean>;
843
1549
  /**
844
- * Toggles between literal value and variable mode for a filter.
1550
+ * Check if the Basic construction kit is available in the system
845
1551
  */
846
- toggleVariableMode(filter: FieldFilterItem): void;
1552
+ private checkBasicConstructionKitAvailable;
1553
+ private fetchCkModels;
1554
+ private fetchCkTypes;
1555
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
1556
+ static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
1557
+ }
1558
+
1559
+ type BrowserItem$1 = RtEntityDto | CkModelDto | CkTypeDto | {
1560
+ isCkModelsRoot?: boolean;
1561
+ ckModelId?: string;
1562
+ };
1563
+ declare class RuntimeBrowserComponent implements AfterViewInit {
1564
+ protected readonly ckTypesGQL: GetCkTypesDtoGQL;
1565
+ protected readonly dataSource: RuntimeBrowserDataSource;
1566
+ private readonly getRuntimeEntityByIdGQL;
1567
+ private readonly inputService;
1568
+ private readonly router;
1569
+ private readonly route;
1570
+ private readonly stateService;
1571
+ private readonly typeHelperService;
1572
+ private readonly notificationService;
1573
+ private isSelectedItemAnRtEntity;
1574
+ private isLoading;
1575
+ private isCreating;
1576
+ private isEditing;
1577
+ messages: i0.InputSignal<Partial<RuntimeBrowserMessages>>;
1578
+ protected readonly resolvedMessages: i0.Signal<RuntimeBrowserMessages>;
1579
+ treeDetail: BaseTreeDetailComponent<BrowserItem$1>;
1580
+ detailsPanel: RuntimeBrowserDetailsComponent;
1581
+ protected get leftToolbarActions(): CommandItem[];
1582
+ protected get rightToolbarActions(): CommandItem[];
1583
+ private _selectedItem;
1584
+ protected get selectedItem(): TreeItemDataTyped<BrowserItem$1> | null;
1585
+ protected set selectedItem(item: TreeItemDataTyped<BrowserItem$1> | null);
1586
+ private get isGoToEntityButtonEnabled();
1587
+ private get isRefreshButtonEnabled();
1588
+ private get isCreateButtonEnabled();
1589
+ private get isDeleteButtonEnabled();
1590
+ private get isEditButtonEnabled();
1591
+ ngAfterViewInit(): void;
847
1592
  /**
848
- * Gets the selected variable object for a filter that uses variable mode.
1593
+ * Wait for the tree component to be fully initialized and ready
849
1594
  */
850
- getSelectedVariable(filter: FieldFilterItem): FilterVariable | null;
1595
+ private waitForTreeComponent;
851
1596
  /**
852
- * Handles variable selection from the dropdown.
1597
+ * Restore the previously selected tree item and expand path
853
1598
  */
854
- onVariableSelected(filter: FieldFilterItem, variable: FilterVariable | null): void;
1599
+ private restoreTreeState;
1600
+ protected onNodeSelected(treeItem: TreeItemDataTyped<unknown>): void;
855
1601
  /**
856
- * Extracts variable name from ${variableName} or $variableName format.
1602
+ * Boilerplate for showing warning notification.
1603
+ *
1604
+ * @param message Message of the warning.
857
1605
  */
858
- private extractVariableName;
1606
+ private _showWarningNotification;
859
1607
  /**
860
- * Checks if a filter value is a variable reference.
1608
+ * Occurs when item has been dropped on the Runtime Browser tree.
1609
+ *
1610
+ * @param event Metadata of the drag and drop operation.
861
1611
  */
862
- isVariableValue(value: unknown): boolean;
1612
+ protected onNodeDropped(event: NodeDroppedEvent<unknown>): Promise<void>;
863
1613
  /**
864
- * Formats a variable name for display (e.g., "myVar" -> "${myVar}").
1614
+ * Save the state using the expanded keys from the tree component.
1615
+ * This is much more efficient than recursively searching for the path.
865
1616
  */
866
- formatVariableDisplay(name: string): string;
867
- getFieldFilters(): FieldFilterDto[];
868
- setFieldFilters(filters: FieldFilterDto[]): void;
869
- clear(): void;
870
- private isArrayValue;
871
- private extractArrayContent;
872
- private parseAndCleanArrayValues;
873
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
874
- static ɵcmp: i0.ɵɵComponentDeclaration<FieldFilterEditorComponent, "mm-field-filter-editor", never, { "availableAttributes": { "alias": "availableAttributes"; "required": false; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; "hideNavigationProperties": { "alias": "hideNavigationProperties"; "required": false; }; "attributePaths": { "alias": "attributePaths"; "required": false; }; "enableVariables": { "alias": "enableVariables"; "required": false; }; "availableVariables": { "alias": "availableVariables"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; }, { "filtersChange": "filtersChange"; }, never, never, true, never>;
1617
+ private saveStateFromExpandedKeys;
1618
+ /**
1619
+ * Generate a unique key for a tree item (same logic as in TreeComponent)
1620
+ */
1621
+ private getItemKey;
1622
+ private extractBrowserItem;
1623
+ private getItemText;
1624
+ /**
1625
+ * Create a TreeItemDataTyped from saved state data
1626
+ */
1627
+ private createTreeItemFromSavedState;
1628
+ /**
1629
+ * Toolbar action: Open dialog to navigate to entity
1630
+ */
1631
+ protected onGotoEntity(): Promise<void>;
1632
+ /**
1633
+ * Toolbar action: Refresh tree data
1634
+ */
1635
+ protected onRefresh(): Promise<void>;
1636
+ /**
1637
+ * Toolbar action: Delete selected tree node
1638
+ */
1639
+ protected onDelete(): Promise<void>;
1640
+ /**
1641
+ * Navigate to entity details route using the format "ckTypeId@rtId"
1642
+ * @param entityIdentifier - String in format "ckTypeId@rtId"
1643
+ * @example navigateToEntityDetails("Basic/TreeNode@507f1f77bcf86cd799439011")
1644
+ */
1645
+ private navigateToEntityDetails;
1646
+ /**
1647
+ * Main action to initiate the creation of a new node
1648
+ */
1649
+ protected onCreate(): Promise<void>;
1650
+ protected onEdit(): Promise<void>;
1651
+ /**
1652
+ * Filters the list of types to find compatible types for entity creation.
1653
+ * For root-level creation, only allows Basic/Tree types.
1654
+ * For child creation, allows non-abstract TreeNode types.
1655
+ *
1656
+ * @param types - All available CK types
1657
+ * @param isRootLevel - If true, only Basic/Tree types are allowed
1658
+ * @returns Filtered list of compatible types
1659
+ */
1660
+ private getCompatibleTreeTypes;
1661
+ /**
1662
+ * Checks if a specific type or its base type belongs to the TreeNode hierarchy
1663
+ */
1664
+ private isTreeNodeType;
1665
+ /**
1666
+ * Handles entitySaved from the details panel: refreshes the tree, then reloads the detail view
1667
+ * when the save was an update so the user sees fresh data.
1668
+ */
1669
+ protected onEntitySaved(event: EntitySavedEvent | void): Promise<void>;
1670
+ /**
1671
+ * Refresh tree data after entity creation.
1672
+ * IMPORTANT: We use refreshTree() instead of refreshRuntimeEntities() because
1673
+ * refreshRuntimeEntities() only manipulates expanded keys but doesn't force data
1674
+ * reload from the data source. This causes stale data to persist in Kendo TreeView
1675
+ */
1676
+ protected refreshTreeAfterCreation(parentInfo?: {
1677
+ parentRtId?: string;
1678
+ }): Promise<void>;
1679
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
1680
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserComponent, "mm-runtime-browser", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
875
1681
  }
876
1682
 
877
- interface CopyOption {
878
- label: string;
879
- value: string;
880
- displayText: string;
1683
+ /**
1684
+ * Simple outlet component for runtime browser routes.
1685
+ * Use as the parent component when mounting runtime browser routes as children.
1686
+ */
1687
+ declare class RuntimeBrowserOutletComponent {
1688
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
1689
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
881
1690
  }
1691
+
882
1692
  /**
883
- * A reusable component for displaying and copying entity identifiers.
884
- * Provides a dropdown button with options to copy:
885
- * - RtId: The runtime ObjectId
886
- * - CkTypeId: The full versioned Construction Kit type ID
887
- * - RtCkTypeId: The runtime CK type ID (unversioned)
888
- * - RtEntityId: Combined format {RtCkTypeId}@{RtId}
889
- *
890
- * @example
891
- * ```html
892
- * <mm-entity-id-info
893
- * [rtId]="entity.rtId"
894
- * [rtCkTypeId]="entity.ckTypeId"
895
- * [ckTypeId]="entity.constructionKitType?.ckTypeId?.fullName">
896
- * </mm-entity-id-info>
897
- * ```
1693
+ * Page component that wraps RuntimeBrowserComponent with optional message override.
1694
+ * Use RUNTIME_BROWSER_MESSAGES token to provide custom/translated messages at route level.
898
1695
  */
899
- declare class EntityIdInfoComponent {
900
- private readonly notificationService;
901
- protected readonly copyIcon: _progress_kendo_svg_icons.SVGIcon;
902
- /** The RtId (ObjectId) of the entity */
903
- rtId: string;
904
- /** The RtCkTypeId - runtime CK type ID (e.g., System.Communication/MeshAdapter) */
905
- rtCkTypeId: string;
906
- /** The CkTypeId - full versioned Construction Kit type ID (e.g., System.Communication-2.0.3/MeshAdapter-1) */
907
- ckTypeId?: string;
908
- protected get copyOptions(): CopyOption[];
909
- private truncateValue;
910
- protected copyToClipboard(option: CopyOption): Promise<void>;
911
- static ɵfac: i0.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
912
- static ɵcmp: i0.ɵɵComponentDeclaration<EntityIdInfoComponent, "mm-entity-id-info", never, { "rtId": { "alias": "rtId"; "required": true; }; "rtCkTypeId": { "alias": "rtCkTypeId"; "required": true; }; "ckTypeId": { "alias": "ckTypeId"; "required": false; }; }, {}, never, never, true, never>;
1696
+ declare class RuntimeBrowserPageComponent {
1697
+ private readonly injectedMessages;
1698
+ protected readonly messages: RuntimeBrowserMessages;
1699
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
1700
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
913
1701
  }
914
1702
 
1703
+ /** Options for creating runtime browser routes. */
1704
+ interface RuntimeBrowserRouteOptions {
1705
+ /** Base path for breadcrumb URLs (e.g. 'repository/browser', 'administration/plant-management'). */
1706
+ basePath: string;
1707
+ /** Breadcrumb label for the main browser view. Default: 'Runtime Browser'. */
1708
+ breadcrumbLabel?: string;
1709
+ /** Breadcrumb label for the entity detail view. Default: 'Entity Details'. */
1710
+ entityBreadcrumbLabel?: string;
1711
+ /** Optional SVG icon for breadcrumbs. */
1712
+ svgIcon?: SVGIcon;
1713
+ /** Optional custom page component for the main view (overrides RuntimeBrowserPageComponent). */
1714
+ pageComponent?: unknown;
1715
+ /** Optional route-level providers (e.g. for RUNTIME_BROWSER_MESSAGES). */
1716
+ providers?: Provider[];
1717
+ }
915
1718
  /**
916
- * Animated OctoMesh logo loader component.
917
- * Displays the OctoMesh octopus SVG with wiggling tentacles
918
- * and orbiting data blocks representing data loading.
919
- *
920
- * Uses `--kendo-color-primary` for theme-independent coloring.
921
- * Override the color via CSS `color` property on the host element.
1719
+ * Creates routes for the runtime browser feature (main view + entity detail).
1720
+ * Use these as children of a parent route that has a router-outlet.
922
1721
  *
923
1722
  * @example
924
- * ```html
925
- * <mm-octo-loader [size]="'medium'"></mm-octo-loader>
926
- * <mm-octo-loader [size]="'small'"></mm-octo-loader>
927
- * ```
1723
+ * // In repository.routes.ts
1724
+ * import { storage } from '@meshmakers/octo-ui';
1725
+ * {
1726
+ * path: 'browser',
1727
+ * component: RuntimeBrowserOutletComponent,
1728
+ * children: createRuntimeBrowserRoutes({
1729
+ * basePath: 'repository/browser',
1730
+ * breadcrumbLabel: 'Runtime Browser',
1731
+ * entityBreadcrumbLabel: 'Entity Details',
1732
+ * svgIcon: storage,
1733
+ * }),
1734
+ * data: { roles: [Roles.AdminPanelManagement], breadcrumb: [{ label: 'Repository', url: 'repository' }] },
1735
+ * }
928
1736
  */
929
- declare class OctoLoaderComponent {
930
- size: 'small' | 'medium';
931
- static ɵfac: i0.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
932
- static ɵcmp: i0.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
933
- }
1737
+ declare function createRuntimeBrowserRoutes(options: RuntimeBrowserRouteOptions): Routes;
934
1738
 
935
- declare class TenantSwitcherComponent {
936
- currentTenantId: string | null;
937
- allowedTenants: string[];
938
- isDenied: boolean;
939
- tenantSelected: EventEmitter<string>;
940
- refreshRequested: EventEmitter<void>;
941
- protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
942
- protected isRefreshing: boolean;
943
- private anchor;
944
- private popup;
945
- showPopup: boolean;
946
- onKeydown(event: KeyboardEvent): void;
947
- onDocumentClick(event: MouseEvent): void;
948
- onToggle(): void;
949
- onSelectTenant(tenantId: string): void;
950
- onRefresh(event: MouseEvent): void;
951
- private contains;
952
- static ɵfac: i0.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
953
- static ɵcmp: i0.ɵɵComponentDeclaration<TenantSwitcherComponent, "mm-tenant-switcher", never, { "currentTenantId": { "alias": "currentTenantId"; "required": false; }; "allowedTenants": { "alias": "allowedTenants"; "required": false; }; "isDenied": { "alias": "isDenied"; "required": false; }; }, { "tenantSelected": "tenantSelected"; "refreshRequested": "refreshRequested"; }, never, never, true, never>;
1739
+ /**
1740
+ * Injection token for RuntimeBrowser messages.
1741
+ * Provide this at route or component level to override default English messages (e.g. for i18n).
1742
+ */
1743
+ declare const RUNTIME_BROWSER_MESSAGES: InjectionToken<RuntimeBrowserMessages>;
1744
+
1745
+ type BrowserItem = RtEntityDto | CkModelDto | CkTypeDto | {
1746
+ isCkModelsRoot?: boolean;
1747
+ ckModelId?: string;
1748
+ };
1749
+ interface BrowserState {
1750
+ selectedItemId: string;
1751
+ selectedItemText: string;
1752
+ selectedItemData: BrowserItem;
1753
+ parentPath: TreeItemDataTyped<BrowserItem>[];
1754
+ expandedKeys: string[];
1755
+ timestamp: number;
1756
+ }
1757
+ declare class RuntimeBrowserStateService {
1758
+ private currentState;
1759
+ /**
1760
+ * Save the current browser state including selected item information and parent path
1761
+ * @deprecated Use saveStateWithKeys instead for better performance
1762
+ */
1763
+ saveState(selectedItem: TreeItemDataTyped<BrowserItem> | null, parentPath?: TreeItemDataTyped<BrowserItem>[]): void;
1764
+ /**
1765
+ * Save the current browser state using expanded keys from the tree.
1766
+ * This is more efficient as it doesn't require recursive tree traversal.
1767
+ */
1768
+ saveStateWithKeys(selectedItem: TreeItemDataTyped<BrowserItem> | null, expandedKeys: string[]): void;
1769
+ /**
1770
+ * Get the saved browser state
1771
+ */
1772
+ getState(): BrowserState | null;
1773
+ /**
1774
+ * Clear the saved state
1775
+ */
1776
+ clearState(): void;
1777
+ /**
1778
+ * Check if the given item matches the saved state
1779
+ */
1780
+ isItemMatching(item: TreeItemDataTyped<BrowserItem>): boolean;
1781
+ /**
1782
+ * Get unique identifier for a tree item
1783
+ */
1784
+ private getItemId;
1785
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
1786
+ static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
954
1787
  }
955
1788
 
956
1789
  /**
@@ -1044,11 +1877,32 @@ declare class RuntimeEntityVariableDialogService {
1044
1877
  static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
1045
1878
  }
1046
1879
 
1880
+ declare class TenantSwitcherComponent {
1881
+ currentTenantId: string | null;
1882
+ allowedTenants: string[];
1883
+ isDenied: boolean;
1884
+ tenantSelected: EventEmitter<string>;
1885
+ refreshRequested: EventEmitter<void>;
1886
+ protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
1887
+ protected isRefreshing: boolean;
1888
+ private anchor;
1889
+ private popup;
1890
+ showPopup: boolean;
1891
+ onKeydown(event: KeyboardEvent): void;
1892
+ onDocumentClick(event: MouseEvent): void;
1893
+ onToggle(): void;
1894
+ onSelectTenant(tenantId: string): void;
1895
+ onRefresh(event: MouseEvent): void;
1896
+ private contains;
1897
+ static ɵfac: i0.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
1898
+ static ɵcmp: i0.ɵɵComponentDeclaration<TenantSwitcherComponent, "mm-tenant-switcher", never, { "currentTenantId": { "alias": "currentTenantId"; "required": false; }; "allowedTenants": { "alias": "allowedTenants"; "required": false; }; "isDenied": { "alias": "isDenied"; "required": false; }; }, { "tenantSelected": "tenantSelected"; "refreshRequested": "refreshRequested"; }, never, never, true, never>;
1899
+ }
1900
+
1047
1901
  /**
1048
1902
  * Provides OctoUi services using modern Angular provider functions.
1049
1903
  * This is the recommended approach for library providers.
1050
1904
  */
1051
1905
  declare function provideOctoUi(): EnvironmentProviders;
1052
1906
 
1053
- export { AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DefaultPropertyCategory, EntityIdInfoComponent, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, provideOctoUi };
1054
- export type { AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, FieldFilterItem, FilterVariable, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption };
1907
+ export { AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_RUNTIME_BROWSER_MESSAGES, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RtEntityIdHelper, RuntimeBrowserComponent, RuntimeBrowserOutletComponent, RuntimeBrowserPageComponent, RuntimeBrowserStateService, RuntimeEntityVariableDialogComponent, RuntimeEntityVariableDialogService, TenantSwitcherComponent, account_tree, add, analytics, app_registration, article, botService, category, chat, checklist, code, component_exchange, computer, createRuntimeBrowserRoutes, customer, dashboard, event_list, graphic_eq, group, identityService, insert_link, manage_accounts, more_time, notifications, page_info, pages, person_search, playlist_add_check, pool, power, provideOctoUi, publicIcon, query_builder, schedule_send, settings, sort, storage, swagger, swagger_asset, swagger_bot, swagger_communication, swagger_identity, team_dashboard, tenancy, text_snippet, travel_explore, user_diagnostics, webhook, work };
1908
+ export type { AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserState, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, FieldFilterItem, FilterVariable, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption };