@meshmakers/octo-ui 3.3.980 → 3.3.1010

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,13 +1,13 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
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, RtEntityDto, CkModelDto, CkTypeDto, RtAssociationDto, FieldFilterOperatorsDto, GetCkTypesDtoGQL, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource } from '@meshmakers/octo-services';
5
+ import { AttributeItem, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeSelectorItem as CkTypeSelectorItem$1, RtEntityDto, FieldFilterDto, SearchFilterDto, SortDto, CkModelDto, CkTypeDto, RtAssociationDto, FieldFilterOperatorsDto, GetCkTypesDtoGQL, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource } from '@meshmakers/octo-services';
6
6
  import { GridDataResult, CellClickEvent, RowArgs, PageChangeEvent, SelectionEvent } from '@progress/kendo-angular-grid';
7
7
  import { TreeItemDataTyped, TreeItemData, CommandItemExecuteEventArgs, CommandItem } from '@meshmakers/shared-services';
8
8
  import { ControlValueAccessor, Validator, FormControl, AbstractControl, ValidationErrors } from '@angular/forms';
9
9
  import { AutoCompleteComponent, PopupSettings } from '@progress/kendo-angular-dropdowns';
10
- import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase, FetchDataOptions, FetchResultTyped, BaseTreeDetailComponent, NodeDroppedEvent } from '@meshmakers/shared-ui';
10
+ import { DataSourceTyped, ListViewComponent, HierarchyDataSourceBase, ListViewMessages, FetchDataOptions, FetchResultTyped, BaseTreeDetailComponent, NodeDroppedEvent, TreeComponent } from '@meshmakers/shared-ui';
11
11
  import { State } from '@progress/kendo-data-query/dist/npm/state';
12
12
  import { Observable } from 'rxjs';
13
13
  import { Routes } from '@angular/router';
@@ -110,8 +110,8 @@ declare class AttributeSelectorDialogComponent implements OnInit {
110
110
  * Move a single attribute from selected to available
111
111
  */
112
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>;
113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSelectorDialogComponent, never>;
114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AttributeSelectorDialogComponent, "mm-attribute-selector-dialog", never, {}, {}, never, never, true, never>;
115
115
  }
116
116
 
117
117
  interface AttributeSelectorResult {
@@ -134,8 +134,8 @@ declare class AttributeSelectorDialogService {
134
134
  * @returns Promise that resolves with the result containing selected attributes and confirmation status
135
135
  */
136
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>;
137
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSelectorDialogService, never>;
138
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AttributeSelectorDialogService>;
139
139
  }
140
140
 
141
141
  interface AttributeSortItem {
@@ -214,8 +214,8 @@ declare class AttributeSortSelectorDialogComponent implements OnInit {
214
214
  private updateSelectedGrid;
215
215
  onOk(): void;
216
216
  onCancel(): void;
217
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogComponent, never>;
218
- static ɵcmp: i0.ɵɵComponentDeclaration<AttributeSortSelectorDialogComponent, "mm-attribute-sort-selector-dialog", never, {}, {}, never, never, true, never>;
217
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSortSelectorDialogComponent, never>;
218
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AttributeSortSelectorDialogComponent, "mm-attribute-sort-selector-dialog", never, {}, {}, never, never, true, never>;
219
219
  }
220
220
 
221
221
  interface AttributeSortSelectorResult {
@@ -235,16 +235,52 @@ declare class AttributeSortSelectorDialogService {
235
235
  * @returns Promise that resolves with the result containing selected attributes with sort orders and confirmation status
236
236
  */
237
237
  openAttributeSortSelector(ckTypeId: string, selectedAttributes?: AttributeSortItem[], dialogTitle?: string, includeNavigationProperties?: boolean, hideNavigationControls?: boolean, attributePaths?: string[], additionalAttributes?: AttributeItem[]): Promise<AttributeSortSelectorResult>;
238
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributeSortSelectorDialogService, never>;
239
- static ɵprov: i0.ɵɵInjectableDeclaration<AttributeSortSelectorDialogService>;
238
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AttributeSortSelectorDialogService, never>;
239
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AttributeSortSelectorDialogService>;
240
240
  }
241
241
 
242
+ interface CkTypeSelectorDialogMessages {
243
+ modelFilterLabel: string;
244
+ modelFilterPlaceholder: string;
245
+ typeSearchLabel: string;
246
+ typeSearchPlaceholder: string;
247
+ clearFiltersTitle: string;
248
+ columnTypeTitle: string;
249
+ columnBaseTypeTitle: string;
250
+ columnDescriptionTitle: string;
251
+ badgeAbstract: string;
252
+ badgeFinal: string;
253
+ selectedLabel: string;
254
+ cancel: string;
255
+ ok: string;
256
+ defaultDialogTitle: string;
257
+ pagerItemsPerPage: string;
258
+ pagerOf: string;
259
+ pagerItems: string;
260
+ pagerPage: string;
261
+ pagerFirstPage: string;
262
+ pagerLastPage: string;
263
+ pagerPreviousPage: string;
264
+ pagerNextPage: string;
265
+ noRecords: string;
266
+ /** Tooltip on the dialog window close (X) button. */
267
+ closeTitle?: string;
268
+ /** Tooltip on the dialog window minimize button. */
269
+ minimizeTitle?: string;
270
+ /** Tooltip on the dialog window maximize button. */
271
+ maximizeTitle?: string;
272
+ /** Tooltip on the dialog window restore button. */
273
+ restoreTitle?: string;
274
+ }
275
+ declare const DEFAULT_CK_TYPE_SELECTOR_DIALOG_MESSAGES: CkTypeSelectorDialogMessages;
276
+
242
277
  interface CkTypeSelectorDialogData {
243
278
  selectedCkTypeId?: string;
244
279
  ckModelIds?: string[];
245
280
  dialogTitle?: string;
246
281
  allowAbstract?: boolean;
247
282
  derivedFromRtCkTypeId?: string;
283
+ messages?: Partial<CkTypeSelectorDialogMessages>;
248
284
  }
249
285
  interface CkTypeSelectorDialogResult {
250
286
  selectedCkType: CkTypeSelectorItem$1;
@@ -258,6 +294,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
258
294
  protected readonly filterClearIcon: _progress_kendo_svg_icons.SVGIcon;
259
295
  dialogTitle: string;
260
296
  allowAbstract: boolean;
297
+ _messages: CkTypeSelectorDialogMessages;
298
+ set messages(value: Partial<CkTypeSelectorDialogMessages> | undefined);
261
299
  searchText: string;
262
300
  selectedModel: string | null;
263
301
  availableModels: string[];
@@ -288,8 +326,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
288
326
  onCellClick(event: CellClickEvent): void;
289
327
  onCancel(): void;
290
328
  onConfirm(): void;
291
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
292
- static ɵcmp: i0.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, {}, {}, never, never, true, never>;
329
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
330
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, { "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
293
331
  }
294
332
 
295
333
  interface CkTypeSelectorResult {
@@ -299,22 +337,30 @@ interface CkTypeSelectorResult {
299
337
  declare class CkTypeSelectorDialogService {
300
338
  private readonly windowService;
301
339
  private readonly windowStateService;
302
- /**
303
- * Opens the CkType selector dialog
304
- * @param options Dialog options
305
- * @returns Promise that resolves with the result containing selected CkType and confirmation status
306
- */
340
+ defaultMessages: Partial<CkTypeSelectorDialogMessages> | undefined;
307
341
  openCkTypeSelector(options?: {
308
342
  selectedCkTypeId?: string;
309
343
  ckModelIds?: string[];
310
344
  dialogTitle?: string;
311
345
  allowAbstract?: boolean;
312
346
  derivedFromRtCkTypeId?: string;
347
+ messages?: Partial<CkTypeSelectorDialogMessages>;
313
348
  }): Promise<CkTypeSelectorResult>;
314
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
315
- static ɵprov: i0.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
349
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
350
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
316
351
  }
317
352
 
353
+ interface CkTypeSelectorInputMessages {
354
+ placeholder: string;
355
+ /** `{0}` is replaced with the current search value. */
356
+ noTypesFound: string;
357
+ /** `{0}` is replaced with the minimum search length. */
358
+ minCharactersHint: string;
359
+ advancedSearchLabel: string;
360
+ defaultDialogTitle: string;
361
+ }
362
+ declare const DEFAULT_CK_TYPE_SELECTOR_INPUT_MESSAGES: CkTypeSelectorInputMessages;
363
+
318
364
  declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
319
365
  autocomplete: AutoCompleteComponent;
320
366
  placeholder: string;
@@ -326,6 +372,11 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
326
372
  dialogTitle: string;
327
373
  advancedSearchLabel: string;
328
374
  derivedFromRtCkTypeId?: string;
375
+ _messages: CkTypeSelectorInputMessages;
376
+ set messages(value: Partial<CkTypeSelectorInputMessages> | undefined);
377
+ dialogMessages?: Partial<CkTypeSelectorDialogMessages>;
378
+ protected formatNoTypesFound(searchValue: string): string;
379
+ protected formatMinCharactersHint(minLength: number): string;
329
380
  private _disabled;
330
381
  get disabled(): boolean;
331
382
  set disabled(value: boolean);
@@ -369,8 +420,128 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
369
420
  private injectPopupStyles;
370
421
  private selectCkType;
371
422
  openDialog(event?: Event): Promise<void>;
372
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
373
- 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>;
423
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
424
+ static ɵcmp: _angular_core.ɵɵ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; }; "messages": { "alias": "messages"; "required": false; }; "dialogMessages": { "alias": "dialogMessages"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
425
+ }
426
+
427
+ /**
428
+ * Pure helpers for extracting runtime data point names from a CK entity. Kept
429
+ * Angular-free so unit tests can exercise the record-shape branches without
430
+ * spinning up a TestBed, and so the same logic can be called both from the
431
+ * service (which fetches the entity via GraphQL) and from any caller that
432
+ * already has the entity in hand (e.g. the runtime-browser detail pane).
433
+ *
434
+ * A "data point" here is one entry of an entity's `States` or `DataPoints`
435
+ * RecordArray attribute — for Loxone Controls these are the state names
436
+ * (`tempActual`, `co2`, `humidityActual`, …); for adapters that don't model
437
+ * sub-states the array is absent and the only available data point is the
438
+ * default `currentValue` constant the runtime adapter exposes for
439
+ * single-state polling.
440
+ */
441
+ /**
442
+ * Default data-point name for entities without a States/DataPoints RecordArray.
443
+ * Matches the constant the runtime adapters (Loxone, MQTT, OPC-UA) use as the
444
+ * `sourceAttributePath` fallback when no specific state is configured.
445
+ */
446
+ declare const DEFAULT_DATA_POINT = "currentValue";
447
+ /** Minimal shape we accept for an attribute item. */
448
+ interface AttributeItemLike {
449
+ attributeName?: string | null;
450
+ value?: unknown;
451
+ }
452
+ /**
453
+ * Extracts the list of available data point names from an entity's attribute
454
+ * list. Always includes {@link DEFAULT_DATA_POINT} first; named state entries
455
+ * follow in alphabetical order.
456
+ *
457
+ * Tolerates the three record shapes the platform produces for a RecordArray:
458
+ *
459
+ * 1. GraphQL: each record is `{ ckRecordId, attributes: [{attributeName, value}, …] }`.
460
+ * 2. Pipeline / MongoDB: each record is `{ attributes: { Name: "…", ExternalId: "…" } }`.
461
+ * 3. Flat: each record is `{ Name: "…", ExternalId: "…" }` (older dumps / sample data).
462
+ *
463
+ * Returns `[DEFAULT_DATA_POINT]` for null/undefined input, attributes without a
464
+ * States/DataPoints entry, or malformed RecordArrays.
465
+ */
466
+ declare function extractDataPointNames(attributes: readonly (AttributeItemLike | null | undefined)[] | null | undefined): string[];
467
+
468
+ /**
469
+ * Source data-point picker for DataPointMapping `sourceAttributePath`.
470
+ *
471
+ * Renders a Kendo combobox of the data points exposed by a source entity —
472
+ * a Loxone Control's State names (`tempActual`, `co2`, …), an MQTT topic
473
+ * sub-key, an OPC-UA node attribute, etc. — with `currentValue` as the
474
+ * always-available default for single-state sources.
475
+ *
476
+ * Two ways to feed the picker:
477
+ * - `entity` — pass a pre-loaded RtEntityDto; the picker reads the
478
+ * States/DataPoints RecordArray straight off it (no GraphQL roundtrip).
479
+ * Used by the runtime-browser detail pane.
480
+ * - `entityRtId` + `entityCkTypeId` — the picker fetches the entity via
481
+ * `getRuntimeEntityById` and extracts data points itself. Used by the
482
+ * mapping-edit dialog where only the IDs are known.
483
+ *
484
+ * `allowCustom: true` keeps the picker useful when the user needs to escape
485
+ * the catalogue — e.g. typing a path the entity hasn't published yet, or a
486
+ * field a future state will expose.
487
+ */
488
+ declare class DataPointPickerComponent {
489
+ private readonly resolver;
490
+ /** Pre-loaded source entity. When set, no GraphQL call is made. */
491
+ readonly entity: _angular_core.InputSignal<RtEntityDto | null | undefined>;
492
+ /** Source entity rtId. Required (together with ckTypeId) when `entity` is not provided. */
493
+ readonly entityRtId: _angular_core.InputSignal<string | null | undefined>;
494
+ /** Source entity CK type id. */
495
+ readonly entityCkTypeId: _angular_core.InputSignal<string | null | undefined>;
496
+ /** Two-way bound data-point name. */
497
+ readonly value: _angular_core.ModelSignal<string>;
498
+ /** Optional placeholder shown when the combobox is empty. */
499
+ readonly placeholder: _angular_core.InputSignal<string>;
500
+ /** Disables the combobox without hiding it. */
501
+ readonly disabled: _angular_core.InputSignal<boolean>;
502
+ /** Emits whenever the user enters a custom filter — useful for callers that
503
+ * want to refine a backing catalogue independently of the value selection. */
504
+ readonly filterChange: _angular_core.OutputEmitterRef<string>;
505
+ protected readonly options: _angular_core.WritableSignal<string[]>;
506
+ protected readonly loading: _angular_core.WritableSignal<boolean>;
507
+ /**
508
+ * Current filter text entered into the combobox. Drives the case-insensitive
509
+ * *contains* match below. Kendo's combobox by default does not filter the
510
+ * `[data]` it is given — when `filterable` is true it just emits
511
+ * `filterChange` events and expects the consumer to refilter. Without this,
512
+ * typing "co2" would show every data point regardless of name.
513
+ */
514
+ protected readonly filter: _angular_core.WritableSignal<string>;
515
+ protected readonly filteredOptions: _angular_core.Signal<string[]>;
516
+ constructor();
517
+ protected onValueChange(v: string | null): void;
518
+ protected onFilterChange(filter: string): void;
519
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointPickerComponent, never>;
520
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataPointPickerComponent, "mm-data-point-picker", never, { "entity": { "alias": "entity"; "required": false; "isSignal": true; }; "entityRtId": { "alias": "entityRtId"; "required": false; "isSignal": true; }; "entityCkTypeId": { "alias": "entityCkTypeId"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "filterChange": "filterChange"; }, never, never, true, never>;
521
+ }
522
+
523
+ /**
524
+ * Resolves the list of runtime data points available on a source entity.
525
+ * Single source of truth shared by the runtime-browser detail pane (which
526
+ * already has the entity loaded) and the mapping-edit dialog (which only
527
+ * has rtId + ckTypeId and has to fetch). Picks the right path automatically:
528
+ *
529
+ * - {@link extractFromEntity} is sync — pass a pre-loaded entity.
530
+ * - {@link load} is async — fetches via `getRuntimeEntityById` then extracts.
531
+ *
532
+ * Both paths share the same pure helper so a Loxone Control's state list
533
+ * (`tempActual`, `co2`, …) is reported identically regardless of who's asking.
534
+ */
535
+ declare class DataPointResolverService {
536
+ private readonly getRuntimeEntityByIdGQL;
537
+ extractFromEntity(entity: {
538
+ attributes?: {
539
+ items?: readonly (AttributeItemLike | null | undefined)[] | null;
540
+ } | null;
541
+ } | null | undefined): string[];
542
+ load(rtId: string, ckTypeId: string): Promise<string[]>;
543
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointResolverService, never>;
544
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DataPointResolverService>;
374
545
  }
375
546
 
376
547
  declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {
@@ -423,8 +594,8 @@ declare class EntityIdInfoComponent {
423
594
  protected get copyOptions(): CopyOption[];
424
595
  private truncateValue;
425
596
  protected copyToClipboard(option: CopyOption): Promise<void>;
426
- static ɵfac: i0.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
427
- 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>;
597
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
598
+ static ɵcmp: _angular_core.ɵɵ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>;
428
599
  }
429
600
 
430
601
  type BrowserItem$3 = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -512,8 +683,8 @@ declare class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<Br
512
683
  private checkBasicConstructionKitAvailable;
513
684
  private fetchCkModels;
514
685
  private fetchCkTypes;
515
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
516
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
686
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
687
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
517
688
  }
518
689
 
519
690
  interface EntitySelectorDialogData {
@@ -528,7 +699,7 @@ interface EntitySelectorDialogResult {
528
699
  }
529
700
 
530
701
  declare class EntitySelectorDialogComponent {
531
- private readonly dialogRef;
702
+ private readonly windowRef;
532
703
  readonly treeDataSource: RuntimeBrowserDataSource;
533
704
  data: EntitySelectorDialogData;
534
705
  selectedEntity: {
@@ -539,8 +710,8 @@ declare class EntitySelectorDialogComponent {
539
710
  onNodeSelected(node: TreeItemData): void;
540
711
  onConfirm(): void;
541
712
  onCancel(): void;
542
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
543
- static ɵcmp: i0.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
713
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
714
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
544
715
  }
545
716
 
546
717
  interface EntitySelectorResult {
@@ -548,10 +719,17 @@ interface EntitySelectorResult {
548
719
  entity?: EntitySelectorDialogResult;
549
720
  }
550
721
  declare class EntitySelectorDialogService {
551
- private readonly dialogService;
722
+ private readonly windowService;
723
+ private readonly windowStateService;
724
+ /**
725
+ * Opens the entity selector as a Kendo Window so it stacks correctly above
726
+ * other Kendo Windows (e.g. the Mapping-Edit dialog calls this from its
727
+ * own Window — Kendo Dialogs would land underneath because Window and
728
+ * Dialog use different z-index ranges).
729
+ */
552
730
  openEntitySelector(data?: EntitySelectorDialogData): Promise<EntitySelectorResult>;
553
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
554
- static ɵprov: i0.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
731
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
732
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
555
733
  }
556
734
 
557
735
  /**
@@ -687,8 +865,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
687
865
  private isArrayValue;
688
866
  private extractArrayContent;
689
867
  private parseAndCleanArrayValues;
690
- static ɵfac: i0.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
691
- 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>;
868
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
869
+ static ɵcmp: _angular_core.ɵɵ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>;
692
870
  }
693
871
 
694
872
  /**
@@ -707,8 +885,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
707
885
  */
708
886
  declare class OctoLoaderComponent {
709
887
  size: 'small' | 'medium';
710
- static ɵfac: i0.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
711
- static ɵcmp: i0.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
888
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
889
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
712
890
  }
713
891
 
714
892
  declare enum AttributeValueTypeDto {
@@ -820,6 +998,23 @@ interface BinaryDownloadEvent {
820
998
  downloadUri?: string;
821
999
  }
822
1000
 
1001
+ /**
1002
+ * Translatable messages for PropertyGridComponent.
1003
+ */
1004
+ interface PropertyGridMessages {
1005
+ /** Placeholder for the search input. Default: "Search attributes..." */
1006
+ searchPlaceholder: string;
1007
+ /** Title of the Property column. Default: "Property" */
1008
+ columnPropertyTitle: string;
1009
+ /** Title of the Value column. Default: "Value" */
1010
+ columnValueTitle: string;
1011
+ /** Title of the Type column. Default: "Type" */
1012
+ columnTypeTitle: string;
1013
+ /** Tooltip on the read-only lock icon. Default: "Read-only" */
1014
+ readOnlyTooltip: string;
1015
+ }
1016
+ declare const DEFAULT_PROPERTY_GRID_MESSAGES: PropertyGridMessages;
1017
+
823
1018
  /** Represents an attribute from an RtEntity */
824
1019
  interface RtAttribute {
825
1020
  attributeName?: string | null;
@@ -904,8 +1099,8 @@ declare class PropertyConverterService {
904
1099
  * Check if string is ISO date format
905
1100
  */
906
1101
  private isIsoDateString;
907
- static ɵfac: i0.ɵɵFactoryDeclaration<PropertyConverterService, never>;
908
- static ɵprov: i0.ɵɵInjectableDeclaration<PropertyConverterService>;
1102
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyConverterService, never>;
1103
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PropertyConverterService>;
909
1104
  }
910
1105
 
911
1106
  /**
@@ -915,6 +1110,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
915
1110
  data: PropertyGridItem[];
916
1111
  config: PropertyGridConfig;
917
1112
  showTypeColumn: boolean;
1113
+ protected _messages: PropertyGridMessages;
1114
+ set messages(value: Partial<PropertyGridMessages> | undefined);
918
1115
  propertyChange: EventEmitter<PropertyChangeEvent>;
919
1116
  saveRequested: EventEmitter<PropertyGridItem[]>;
920
1117
  binaryDownload: EventEmitter<BinaryDownloadEvent>;
@@ -963,8 +1160,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
963
1160
  * Handle binary download request from property value display
964
1161
  */
965
1162
  onBinaryDownload(event: BinaryDownloadEvent): void;
966
- static ɵfac: i0.ɵɵFactoryDeclaration<PropertyGridComponent, never>;
967
- static ɵcmp: i0.ɵɵComponentDeclaration<PropertyGridComponent, "mm-property-grid", never, { "data": { "alias": "data"; "required": false; }; "config": { "alias": "config"; "required": false; }; "showTypeColumn": { "alias": "showTypeColumn"; "required": false; }; }, { "propertyChange": "propertyChange"; "saveRequested": "saveRequested"; "binaryDownload": "binaryDownload"; }, never, never, true, never>;
1163
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyGridComponent, never>;
1164
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyGridComponent, "mm-property-grid", never, { "data": { "alias": "data"; "required": false; }; "config": { "alias": "config"; "required": false; }; "showTypeColumn": { "alias": "showTypeColumn"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, { "propertyChange": "propertyChange"; "saveRequested": "saveRequested"; "binaryDownload": "binaryDownload"; }, never, never, true, never>;
968
1165
  }
969
1166
 
970
1167
  /**
@@ -1080,8 +1277,8 @@ declare class PropertyValueDisplayComponent implements OnInit, OnChanges {
1080
1277
  * Handle download button click
1081
1278
  */
1082
1279
  onDownload(): void;
1083
- static ɵfac: i0.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
1084
- 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; }; "attributeName": { "alias": "attributeName"; "required": false; }; }, { "binaryDownload": "binaryDownload"; }, never, never, true, never>;
1280
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
1281
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyValueDisplayComponent, "mm-property-value-display", never, { "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "attributeName": { "alias": "attributeName"; "required": false; }; }, { "binaryDownload": "binaryDownload"; }, never, never, true, never>;
1085
1282
  }
1086
1283
 
1087
1284
  interface RecordProperty {
@@ -1168,9 +1365,207 @@ declare class RecordDetailDialogComponent implements OnInit {
1168
1365
  private getObjectProperties;
1169
1366
  private inferType;
1170
1367
  private formatAttributeName;
1171
- static ɵfac: i0.ɵɵFactoryDeclaration<RecordDetailDialogComponent, never>;
1172
- static ɵcmp: i0.ɵɵComponentDeclaration<RecordDetailDialogComponent, "mm-record-detail-dialog", never, { "attributeName": { "alias": "attributeName"; "required": false; }; "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
1368
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordDetailDialogComponent, never>;
1369
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RecordDetailDialogComponent, "mm-record-detail-dialog", never, { "attributeName": { "alias": "attributeName"; "required": false; }; "value": { "alias": "value"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
1370
+ }
1371
+
1372
+ /**
1373
+ * Translatable messages for the RuntimeBrowser components.
1374
+ * Pass translated strings to override the English defaults.
1375
+ */
1376
+ interface RuntimeBrowserMessages {
1377
+ /**
1378
+ * Messages forwarded to the embedded ck-type-selector-input
1379
+ * (rendered by the create-editor flow).
1380
+ */
1381
+ ckTypeSelectorInput?: Partial<CkTypeSelectorInputMessages>;
1382
+ /**
1383
+ * Messages forwarded to the embedded property-grid
1384
+ * (attributes tab in entity detail view).
1385
+ */
1386
+ propertyGrid?: Partial<PropertyGridMessages>;
1387
+ /**
1388
+ * Messages forwarded to the embedded list-view
1389
+ * (associations tab in entity detail view: column headers, pager,
1390
+ * Excel/PDF/Refresh tooltips).
1391
+ */
1392
+ listView?: Partial<ListViewMessages>;
1393
+ /** Header label for record card in attributes-group. Default: "Record" */
1394
+ recordLabel?: string;
1395
+ /** Back button on the standalone entity-detail page. Default: "Back" */
1396
+ back?: string;
1397
+ /** Hint above a RECORD_ARRAY tabstrip in attributes-group. */
1398
+ recordArrayHint?: string;
1399
+ /** Hint above an optional RECORD section in attributes-group. */
1400
+ recordHint?: string;
1401
+ /** "Add" button for RECORD_ARRAY items. Default: "Add" */
1402
+ addRecord?: string;
1403
+ /** "Remove" button for RECORD_ARRAY items. Default: "Remove" */
1404
+ removeRecord?: string;
1405
+ /** "Load" button for optional RECORD. Default: "Load" */
1406
+ loadRecord?: string;
1407
+ /** "Unload" button for optional RECORD. Default: "Unload" */
1408
+ unloadRecord?: string;
1409
+ /** Hint for GEO longitude input. */
1410
+ longitudeHint?: string;
1411
+ /** Hint for GEO latitude input. */
1412
+ latitudeHint?: string;
1413
+ /**
1414
+ * Drag-and-drop messages for the binary attribute drop zone
1415
+ * (forwarded to <kendo-fileselect-messages>).
1416
+ */
1417
+ dragDrop?: {
1418
+ /** Drop-zone hint label. Default: 'Drop files here to upload' */
1419
+ dropZone?: string;
1420
+ /** Error shown when a file exceeds the size limit. Default: 'File size too large.' */
1421
+ errorFileTooBig?: string;
1422
+ /** Error shown when the file extension is not allowed. Default: 'File type not allowed.' */
1423
+ errorInvalidType?: string;
1424
+ /** Error shown when file upload fails. Default: 'File failed to upload.' */
1425
+ errorUploadFailed?: string;
1426
+ };
1427
+ /**
1428
+ * Labels/tooltips for the binary reference (file picker) editor,
1429
+ * shown when a BINARY attribute is restored from stored base64 data.
1430
+ */
1431
+ binaryReference?: {
1432
+ /** Inline label text. Default: 'Preview (restored from stored data)' */
1433
+ label?: string;
1434
+ /** Tooltip on the label span. Default: 'Content and size are from stored data. File name is a placeholder because the original name is not stored.' */
1435
+ tooltip?: string;
1436
+ };
1437
+ /**
1438
+ * Labels/tooltips for the reference preview component,
1439
+ * shown when a BINARY_LINKED attribute is a synthetic reference file.
1440
+ */
1441
+ referencePreview?: {
1442
+ /** Inline label text. Default: 'Preview (reference file)' */
1443
+ label?: string;
1444
+ /** Tooltip on the label span. Default: 'Shows metadata of an existing file in the system; content is not loaded. Replace with a file to change.' */
1445
+ tooltip?: string;
1446
+ };
1447
+ /**
1448
+ * Generic error messages emitted by mm-attribute-field.
1449
+ */
1450
+ attributeField?: {
1451
+ /** Validation error shown below a field when it is invalid and dirty/touched. Default: 'This field is required or invalid.' */
1452
+ errorMessage?: string;
1453
+ };
1454
+ title: string;
1455
+ badgeLabel: string;
1456
+ titlePrefix: string;
1457
+ ready: string;
1458
+ selectItem: string;
1459
+ noPropertiesAvailable: string;
1460
+ constructionKitModel: string;
1461
+ constructionKitModels: string;
1462
+ fullName: string;
1463
+ semanticName: string;
1464
+ modelName: string;
1465
+ version: string;
1466
+ state: string;
1467
+ selectTypeFromTree: string;
1468
+ browseModelsAndTypes: string;
1469
+ type: string;
1470
+ abstract: string;
1471
+ final: string;
1472
+ base: string;
1473
+ runtimeEntities: string;
1474
+ runtimeId: string;
1475
+ typeId: string;
1476
+ entityIdentifier: string;
1477
+ wellKnownName: string;
1478
+ entityInformation: string;
1479
+ loadingEntityDetails: string;
1480
+ retry: string;
1481
+ attributes: string;
1482
+ associations: string;
1483
+ direction: string;
1484
+ role: string;
1485
+ relatedType: string;
1486
+ relatedEntity: string;
1487
+ all: string;
1488
+ inbound: string;
1489
+ outbound: string;
1490
+ allRoles: string;
1491
+ allTypes: string;
1492
+ entityId: string;
1493
+ viewDetails: string;
1494
+ copyToClipboard: string;
1495
+ copyEntityIdentifierToClipboard: string;
1496
+ goToEntity: string;
1497
+ refresh: string;
1498
+ create: string;
1499
+ edit: string;
1500
+ delete: string;
1501
+ createEntity: string;
1502
+ updateEntity: string;
1503
+ name: string;
1504
+ runtimeCkTypeId: string;
1505
+ targetLocation: string;
1506
+ rootLevel: string;
1507
+ entityType: string;
1508
+ selectType: string;
1509
+ selectTypePrompt: string;
1510
+ save: string;
1511
+ cancel: string;
1512
+ longitude: string;
1513
+ latitude: string;
1514
+ resetToInitialValue: string;
1515
+ attributesFor: string;
1516
+ couldNotLoadEntityDetails: string;
1517
+ failedToLoadEntityDetails: string;
1518
+ entityNotFound?: string;
1519
+ entityIdInvalidFormat?: string;
1520
+ copiedToClipboard: string;
1521
+ failedToCopyToClipboard: string;
1522
+ downloadNotAvailable: string;
1523
+ failedToLoadDownloadInfo: string;
1524
+ missingRequiredIdentifiers: string;
1525
+ failedToCreateEntity: string;
1526
+ failedToUpdateEntity: string;
1527
+ goToEntityTitle: string;
1528
+ goToEntityPrompt: string;
1529
+ go: string;
1530
+ created: string;
1531
+ modified: string;
1532
+ dataMapping: string;
1533
+ mappingTarget: string;
1534
+ mappingSourceAttributePath: string;
1535
+ mappingTargetAttributePath: string;
1536
+ mappingExpression: string;
1537
+ mappingExpressionHint: string;
1538
+ selectTargetEntity: string;
1539
+ removeMapping: string;
1540
+ saveMapping: string;
1541
+ noMappingConfigured: string;
1542
+ mappingSaved: string;
1543
+ mappingRemoved: string;
1544
+ failedToSaveMapping: string;
1545
+ failedToLoadMapping: string;
1546
+ /** Toast text emitted when user tries to move a tree item INTO the root. */
1547
+ treeMoveToRootUnsupported?: string;
1548
+ /** Toast text emitted when user tries to drop a tree item directly ON the root node. */
1549
+ treeMoveOnRootUnsupported?: string;
1550
+ /** Card header prefix for each mapping card: "MAPPING N". Default: "MAPPING" */
1551
+ mappingHeader?: string;
1552
+ /** Label for the source data point row. Default: "Source Data Point" */
1553
+ mappingSourceDataPoint?: string;
1554
+ /** Label for the "Add Mapping" toolbar button. Default: "+ Add Mapping" */
1555
+ mappingAddMapping?: string;
1556
+ /** Label for the "Save All Mappings" button. Default: "Save All Mappings" */
1557
+ mappingSaveAll?: string;
1558
+ /** Placeholder shown when a target entity or attribute is not configured. Default: "(not set)" */
1559
+ mappingNotSet?: string;
1560
+ /** Label for the "Select..." / "Change..." picker buttons. Default: "Select..." */
1561
+ mappingSelect?: string;
1562
+ /** Empty-state hint shown when no mappings exist. Default: "No data point mappings configured yet." */
1563
+ mappingNoneConfigured?: string;
1173
1564
  }
1565
+ /**
1566
+ * Default English messages for the RuntimeBrowser components.
1567
+ */
1568
+ declare const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages;
1174
1569
 
1175
1570
  /**
1176
1571
  * Result of validating a mapping expression.
@@ -1250,6 +1645,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
1250
1645
  private readonly attributeSelectorDialog;
1251
1646
  private readonly destroy$;
1252
1647
  protected readonly arrowLeftIcon: _progress_kendo_svg_icons.SVGIcon;
1648
+ protected _messages: RuntimeBrowserMessages;
1649
+ set messages(value: Partial<RuntimeBrowserMessages> | undefined);
1253
1650
  showDataMapping: boolean;
1254
1651
  entity: RtEntityDto | null;
1255
1652
  loading: boolean;
@@ -1272,8 +1669,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
1272
1669
  onSelectSourceAttribute(mapping: DataPointMappingItem): Promise<void>;
1273
1670
  onSelectTargetAttribute(mapping: DataPointMappingItem): Promise<void>;
1274
1671
  onSaveAllMappings(): Promise<void>;
1275
- static ɵfac: i0.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
1276
- static ɵcmp: i0.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, {}, {}, never, never, true, never>;
1672
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
1673
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, { "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
1277
1674
  }
1278
1675
 
1279
1676
  declare const botService: {
@@ -1507,115 +1904,14 @@ declare const article: {
1507
1904
  viewBox: string;
1508
1905
  };
1509
1906
 
1510
- /**
1511
- * Translatable messages for the RuntimeBrowser components.
1512
- * Pass translated strings to override the English defaults.
1513
- */
1514
- interface RuntimeBrowserMessages {
1515
- title: string;
1516
- badgeLabel: string;
1517
- titlePrefix: string;
1518
- ready: string;
1519
- selectItem: string;
1520
- noPropertiesAvailable: string;
1521
- constructionKitModel: string;
1522
- constructionKitModels: string;
1523
- fullName: string;
1524
- semanticName: string;
1525
- modelName: string;
1526
- version: string;
1527
- state: string;
1528
- selectTypeFromTree: string;
1529
- browseModelsAndTypes: string;
1530
- type: string;
1531
- abstract: string;
1532
- final: string;
1533
- base: string;
1534
- runtimeEntities: string;
1535
- runtimeId: string;
1536
- typeId: string;
1537
- entityIdentifier: string;
1538
- wellKnownName: string;
1539
- entityInformation: string;
1540
- loadingEntityDetails: string;
1541
- retry: string;
1542
- attributes: string;
1543
- associations: string;
1544
- direction: string;
1545
- role: string;
1546
- relatedType: string;
1547
- relatedEntity: string;
1548
- all: string;
1549
- inbound: string;
1550
- outbound: string;
1551
- allRoles: string;
1552
- allTypes: string;
1553
- entityId: string;
1554
- viewDetails: string;
1555
- copyToClipboard: string;
1556
- copyEntityIdentifierToClipboard: string;
1557
- goToEntity: string;
1558
- refresh: string;
1559
- create: string;
1560
- edit: string;
1561
- delete: string;
1562
- createEntity: string;
1563
- updateEntity: string;
1564
- name: string;
1565
- runtimeCkTypeId: string;
1566
- targetLocation: string;
1567
- rootLevel: string;
1568
- entityType: string;
1569
- selectType: string;
1570
- selectTypePrompt: string;
1571
- save: string;
1572
- cancel: string;
1573
- longitude: string;
1574
- latitude: string;
1575
- resetToInitialValue: string;
1576
- attributesFor: string;
1577
- couldNotLoadEntityDetails: string;
1578
- failedToLoadEntityDetails: string;
1579
- copiedToClipboard: string;
1580
- failedToCopyToClipboard: string;
1581
- downloadNotAvailable: string;
1582
- failedToLoadDownloadInfo: string;
1583
- missingRequiredIdentifiers: string;
1584
- failedToCreateEntity: string;
1585
- failedToUpdateEntity: string;
1586
- goToEntityTitle: string;
1587
- goToEntityPrompt: string;
1588
- go: string;
1589
- created: string;
1590
- modified: string;
1591
- dataMapping: string;
1592
- mappingTarget: string;
1593
- mappingSourceAttributePath: string;
1594
- mappingTargetAttributePath: string;
1595
- mappingExpression: string;
1596
- mappingExpressionHint: string;
1597
- selectTargetEntity: string;
1598
- removeMapping: string;
1599
- saveMapping: string;
1600
- noMappingConfigured: string;
1601
- mappingSaved: string;
1602
- mappingRemoved: string;
1603
- failedToSaveMapping: string;
1604
- failedToLoadMapping: string;
1605
- }
1606
- /**
1607
- * Default English messages for the RuntimeBrowser components.
1608
- */
1609
- declare const DEFAULT_RUNTIME_BROWSER_MESSAGES: RuntimeBrowserMessages;
1610
-
1611
1907
  declare class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<RtEntityDto> {
1612
1908
  private readonly getRuntimeEntitiesGQL;
1613
1909
  private ckTypeId;
1614
1910
  constructor();
1615
1911
  setRtCkTypeId(ckTypeId: string): void;
1616
1912
  fetchData(queryOptions: FetchDataOptions): Observable<FetchResultTyped<RtEntityDto> | null>;
1617
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
1618
- static ɵdir: i0.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
1913
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
1914
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
1619
1915
  }
1620
1916
 
1621
1917
  /**
@@ -1629,8 +1925,8 @@ declare class TypeHelperService {
1629
1925
  * @returns True for runtime entity, false otherwise.
1630
1926
  */
1631
1927
  isRuntimeEntity(item: unknown): item is RtEntityDto;
1632
- static ɵfac: i0.ɵɵFactoryDeclaration<TypeHelperService, never>;
1633
- static ɵprov: i0.ɵɵInjectableDeclaration<TypeHelperService>;
1928
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TypeHelperService, never>;
1929
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TypeHelperService>;
1634
1930
  }
1635
1931
 
1636
1932
  interface CreateInput {
@@ -1724,7 +2020,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1724
2020
  private readonly entitySelectorDialog;
1725
2021
  private readonly attributeSelectorDialog;
1726
2022
  dataMappings: DataPointMappingItem[];
1727
- sourceDataPoints: string[];
1728
2023
  /**
1729
2024
  * Optional expression validator function passed through to EntityDetailViewComponent → DataMappingListComponent.
1730
2025
  */
@@ -1831,11 +2126,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1831
2126
  * Tracks in-memory changes to a mapping (no server save yet).
1832
2127
  */
1833
2128
  onMappingChanged(_mapping: DataPointMappingItem): void;
1834
- /**
1835
- * Extracts DataPoint names from the entity's States/DataPoints RecordArray attribute.
1836
- * Provides them as dropdown options for sourceAttributePath selection.
1837
- */
1838
- private extractSourceDataPoints;
1839
2129
  /**
1840
2130
  * Opens attribute selector for the source entity's attributes.
1841
2131
  */
@@ -1848,8 +2138,8 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1848
2138
  * Saves all DataPointMapping entities (attributes + MapsTo associations).
1849
2139
  */
1850
2140
  onSaveAllMappings(): Promise<void>;
1851
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
1852
- static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserDetailsComponent, "mm-runtime-browser-details", never, { "selectedItem": { "alias": "selectedItem"; "required": false; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; }; }, { "entitySaved": "entitySaved"; }, never, never, true, never>;
2141
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
2142
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserDetailsComponent, "mm-runtime-browser-details", never, { "selectedItem": { "alias": "selectedItem"; "required": false; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; }; }, { "entitySaved": "entitySaved"; }, never, never, true, never>;
1853
2143
  }
1854
2144
 
1855
2145
  type BrowserItem$1 = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -1870,14 +2160,14 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1870
2160
  private isSelectedItemAnRtEntity;
1871
2161
  private isLoading;
1872
2162
  private isEditing;
1873
- messages: i0.InputSignal<Partial<RuntimeBrowserMessages>>;
1874
- showDataMapping: i0.InputSignal<boolean>;
2163
+ messages: _angular_core.InputSignal<Partial<RuntimeBrowserMessages>>;
2164
+ showDataMapping: _angular_core.InputSignal<boolean>;
1875
2165
  /**
1876
2166
  * Optional expression validator function for DataPointMapping expressions.
1877
2167
  * Passed through to RuntimeBrowserDetailsComponent → EntityDetailViewComponent → DataMappingListComponent.
1878
2168
  */
1879
- expressionValidator: i0.InputSignal<ExpressionValidatorFn | undefined>;
1880
- protected readonly resolvedMessages: i0.Signal<RuntimeBrowserMessages>;
2169
+ expressionValidator: _angular_core.InputSignal<ExpressionValidatorFn | undefined>;
2170
+ protected readonly resolvedMessages: _angular_core.Signal<RuntimeBrowserMessages>;
1881
2171
  treeDetail: BaseTreeDetailComponent<BrowserItem$1>;
1882
2172
  detailsPanel: RuntimeBrowserDetailsComponent;
1883
2173
  protected get leftToolbarActions(): CommandItem[];
@@ -1964,8 +2254,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1964
2254
  protected refreshTreeAfterCreation(parentInfo?: {
1965
2255
  parentRtId?: string;
1966
2256
  }): Promise<void>;
1967
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
1968
- static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserComponent, "mm-runtime-browser", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; "isSignal": true; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2257
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
2258
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserComponent, "mm-runtime-browser", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "showDataMapping": { "alias": "showDataMapping"; "required": false; "isSignal": true; }; "expressionValidator": { "alias": "expressionValidator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1969
2259
  }
1970
2260
 
1971
2261
  /**
@@ -1973,8 +2263,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1973
2263
  * Use as the parent component when mounting runtime browser routes as children.
1974
2264
  */
1975
2265
  declare class RuntimeBrowserOutletComponent {
1976
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
1977
- static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
2266
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
2267
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
1978
2268
  }
1979
2269
 
1980
2270
  /**
@@ -1984,8 +2274,8 @@ declare class RuntimeBrowserOutletComponent {
1984
2274
  declare class RuntimeBrowserPageComponent {
1985
2275
  private readonly injectedMessages;
1986
2276
  protected readonly messages: RuntimeBrowserMessages;
1987
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
1988
- static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
2277
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
2278
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
1989
2279
  }
1990
2280
 
1991
2281
  /** Options for creating runtime browser routes. */
@@ -2078,8 +2368,8 @@ declare class AssociationValidationService {
2078
2368
  private toLowerCamelCase;
2079
2369
  /** Clears the role cache (e.g. on tenant switch). */
2080
2370
  clearCache(): void;
2081
- static ɵfac: i0.ɵɵFactoryDeclaration<AssociationValidationService, never>;
2082
- static ɵprov: i0.ɵɵInjectableDeclaration<AssociationValidationService>;
2371
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AssociationValidationService, never>;
2372
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AssociationValidationService>;
2083
2373
  }
2084
2374
 
2085
2375
  type BrowserItem = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -2122,8 +2412,8 @@ declare class RuntimeBrowserStateService {
2122
2412
  * Get unique identifier for a tree item
2123
2413
  */
2124
2414
  private getItemId;
2125
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
2126
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
2415
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
2416
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
2127
2417
  }
2128
2418
 
2129
2419
  /**
@@ -2182,16 +2472,16 @@ declare class DataMappingOverviewComponent implements OnInit {
2182
2472
  rtId: string;
2183
2473
  ckTypeId: string;
2184
2474
  }>;
2185
- readonly mappings: i0.WritableSignal<DataPointMappingOverviewItem[]>;
2186
- readonly loading: i0.WritableSignal<boolean>;
2187
- readonly selectedMapping: i0.WritableSignal<DataPointMappingOverviewItem | null>;
2475
+ readonly mappings: _angular_core.WritableSignal<DataPointMappingOverviewItem[]>;
2476
+ readonly loading: _angular_core.WritableSignal<boolean>;
2477
+ readonly selectedMapping: _angular_core.WritableSignal<DataPointMappingOverviewItem | null>;
2188
2478
  pageSize: number;
2189
2479
  skip: number;
2190
- readonly gridData: i0.Signal<{
2480
+ readonly gridData: _angular_core.Signal<{
2191
2481
  data: DataPointMappingOverviewItem[];
2192
2482
  total: number;
2193
2483
  }>;
2194
- readonly summary: i0.Signal<MappingOverviewSummary>;
2484
+ readonly summary: _angular_core.Signal<MappingOverviewSummary>;
2195
2485
  protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
2196
2486
  protected readonly checkIcon: _progress_kendo_svg_icons.SVGIcon;
2197
2487
  protected readonly warnIcon: _progress_kendo_svg_icons.SVGIcon;
@@ -2210,8 +2500,544 @@ declare class DataMappingOverviewComponent implements OnInit {
2210
2500
  * Updates items in-place and triggers signal update.
2211
2501
  */
2212
2502
  private resolveEntityNames;
2213
- static ɵfac: i0.ɵɵFactoryDeclaration<DataMappingOverviewComponent, never>;
2214
- static ɵcmp: i0.ɵɵComponentDeclaration<DataMappingOverviewComponent, "mm-data-mapping-overview", never, {}, { "navigateToEntity": "navigateToEntity"; }, never, never, true, never>;
2503
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataMappingOverviewComponent, never>;
2504
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataMappingOverviewComponent, "mm-data-mapping-overview", never, {}, { "navigateToEntity": "navigateToEntity"; }, never, never, true, never>;
2505
+ }
2506
+
2507
+ /**
2508
+ * Generic configuration that drives the Mapping Coverage Tree.
2509
+ *
2510
+ * The tree displays any entity hierarchy reachable via a single association role
2511
+ * (defaults to `System/ParentChild` between `Basic/Tree` and `Basic/TreeNode`).
2512
+ * Mapping counts are computed from the number of inbound associations with
2513
+ * `mappingRoleId` (defaults to `System.Communication/MapsTo`).
2514
+ */
2515
+ interface MappingCoverageTreeConfig {
2516
+ /** CK type of root entities the user can pick (e.g. `Basic/Tree`). */
2517
+ rootCkTypeId: string;
2518
+ /** CK type of child nodes in the hierarchy (e.g. `Basic/TreeNode`). */
2519
+ childCkTypeId: string;
2520
+ /** Association role connecting parent to child (e.g. `System/ParentChild`). Inbound direction is used. */
2521
+ childRoleId: string;
2522
+ /** Association role connecting target entities to their DataPointMappings. */
2523
+ mappingRoleId: string;
2524
+ /** Association role connecting DataPointMappings back to their source entities. */
2525
+ mappingSourceRoleId: string;
2526
+ /** CK type of the mapping entity (e.g. `System.Communication/DataPointMapping`). */
2527
+ mappingCkTypeId: string;
2528
+ /** Outbound role name used when creating a new mapping with a MapsTo association. */
2529
+ mappingTargetOutboundRoleName: string;
2530
+ /** Outbound role name used when creating/updating a new mapping with a MapsFrom association. */
2531
+ mappingSourceOutboundRoleName: string;
2532
+ /** CK type of the pipeline used to drive validation (defaults to System.Communication/Pipeline). */
2533
+ validationPipelineCkTypeId: string;
2534
+ /** CK type of pipeline executions whose OutputData carries the validation report. */
2535
+ validationExecutionCkTypeId: string;
2536
+ /** Association role linking a PipelineExecution to its Pipeline (defaults to System.Communication/ExecutedPipeline). */
2537
+ validationExecutesRoleId: string;
2538
+ /**
2539
+ * CK types whose entities can act as mapping sources. Used by the Orphan
2540
+ * Sources tab to list unmapped candidates (e.g. `Loxone/Control`,
2541
+ * `MQTT/Topic`, `OpcUa/Node`). Empty list hides the tab.
2542
+ */
2543
+ sourceCandidateCkTypeIds: string[];
2544
+ }
2545
+ /**
2546
+ * Default configuration: Basic/Tree + Basic/TreeNode driven by System/ParentChild,
2547
+ * mappings via System.Communication/MapsTo.
2548
+ */
2549
+ declare const DEFAULT_MAPPING_COVERAGE_TREE_CONFIG: MappingCoverageTreeConfig;
2550
+ /**
2551
+ * Reference to a runtime entity used in the coverage tree (root, node, source, target).
2552
+ */
2553
+ interface CoverageEntityRef {
2554
+ rtId: string;
2555
+ ckTypeId: string;
2556
+ name: string;
2557
+ description?: string;
2558
+ }
2559
+ /**
2560
+ * Coverage validation status calculated by the ValidateDataPointCoverage pipeline
2561
+ * node. Maps to the JSON `status` field in its emitted report.
2562
+ */
2563
+ type CoverageNodeStatus = 'ok' | 'warning' | 'error' | 'info';
2564
+ /**
2565
+ * Per-node detail loaded from the latest validation execution's OutputData. Held
2566
+ * in a `Map<rtId, …>` by the component and consulted by the data source when
2567
+ * decorating tree items.
2568
+ */
2569
+ interface CoverageValidationDetail {
2570
+ status: CoverageNodeStatus;
2571
+ /**
2572
+ * Worst status found in the node's subtree (including the node itself).
2573
+ * Used to colour the tree icon so an `info` node with red descendants is
2574
+ * still visually flagged as red — the user sees where to drill in without
2575
+ * expanding every branch.
2576
+ */
2577
+ subtreeStatus: CoverageNodeStatus;
2578
+ /** Aggregate counts of each status in the subtree (including this node). */
2579
+ subtreeCounts: {
2580
+ ok: number;
2581
+ warning: number;
2582
+ error: number;
2583
+ info: number;
2584
+ };
2585
+ required: string[];
2586
+ recommended: string[];
2587
+ present: string[];
2588
+ missingRequired: string[];
2589
+ missingRecommended: string[];
2590
+ }
2591
+ /**
2592
+ * Payload attached to every tree item in the coverage tree. Stored as the `item`
2593
+ * of a `TreeItemDataTyped<CoverageNodePayload>` so the host can render and react.
2594
+ */
2595
+ interface CoverageNodePayload extends CoverageEntityRef {
2596
+ /** Number of inbound mappings (DataPointMappings pointing to this node). */
2597
+ mappingCount: number;
2598
+ /** Whether this node has structural children (drives expand chevron). */
2599
+ hasChildren: boolean;
2600
+ /** True for the synthetic root entity (the picked Tree). */
2601
+ isRoot: boolean;
2602
+ /** Validation status from the latest validation report (when loaded). */
2603
+ validationStatus: CoverageNodeStatus | null;
2604
+ /** Full validation detail (missing/present lists) when loaded. */
2605
+ validationDetail: CoverageValidationDetail | null;
2606
+ }
2607
+ type CoverageTreeItem = TreeItemDataTyped<CoverageNodePayload>;
2608
+ /**
2609
+ * Flat view-model for a DataPointMapping shown in the detail panel.
2610
+ */
2611
+ interface CoverageMappingItem {
2612
+ rtId: string;
2613
+ ckTypeId: string;
2614
+ name: string;
2615
+ enabled: boolean;
2616
+ sourceAttributePath: string;
2617
+ targetAttributePath: string;
2618
+ mappingExpression: string;
2619
+ sourceRtId?: string;
2620
+ sourceCkTypeId?: string;
2621
+ sourceName?: string;
2622
+ }
2623
+ interface CoverageTreeIcons {
2624
+ rootIcon: SVGIcon;
2625
+ nodeIcon: SVGIcon;
2626
+ nodeWithMappingsIcon?: SVGIcon;
2627
+ }
2628
+ /**
2629
+ * Counts emitted by the ValidateDataPointCoverage pipeline node in the
2630
+ * <c>summary</c> object of its JSON report. Mirrors the C# `SummaryCounters`
2631
+ * record so the UI can render the totals without recomputing.
2632
+ */
2633
+ interface CoverageReportSummary {
2634
+ ok: number;
2635
+ warning: number;
2636
+ error: number;
2637
+ info: number;
2638
+ total: number;
2639
+ }
2640
+ /**
2641
+ * One step in the parent chain of an OrphanCandidate (closest parent first).
2642
+ * Loaded via 3 nested `targets(direction: OUTBOUND, role: $childRoleId)` hops
2643
+ * in `getOrphanCandidates.graphql` so the orphan tab can show where each
2644
+ * source sits in the structural tree without a follow-up query.
2645
+ */
2646
+ interface OrphanCandidateParent {
2647
+ rtId: string;
2648
+ ckTypeId: string;
2649
+ name: string;
2650
+ }
2651
+ /**
2652
+ * Source candidate listed in the Orphan Sources tab. Carries the inbound
2653
+ * MapsFrom mapping count so the tab can split the catalogue into mapped vs
2654
+ * unmapped entries without an extra round trip.
2655
+ */
2656
+ interface OrphanCandidate {
2657
+ rtId: string;
2658
+ ckTypeId: string;
2659
+ name: string;
2660
+ description?: string;
2661
+ mappingCount: number;
2662
+ /**
2663
+ * Ancestors via the configured `childRoleId` (default System/ParentChild),
2664
+ * ordered from immediate parent (index 0) to root-most known ancestor.
2665
+ * Empty when the source has no parents reachable within 3 hops or when
2666
+ * the parent walk failed (e.g. `childCkTypeId` did not match the parent's
2667
+ * concrete type). The UI displays this as a breadcrumb under the entity
2668
+ * name; absence is silent (no parent → no breadcrumb).
2669
+ */
2670
+ parentPath: OrphanCandidateParent[];
2671
+ }
2672
+
2673
+ /**
2674
+ * Generic hierarchy data source for the Mapping Coverage Tree.
2675
+ *
2676
+ * Configure with `setRoot(...)` and `setConfig(...)` before passing to a
2677
+ * `<mm-tree-view>` instance. The data source resolves child nodes through the
2678
+ * configured `childRoleId` / `childCkTypeId` and decorates each item with the
2679
+ * number of inbound mappings (via `mappingRoleId`).
2680
+ */
2681
+ declare class MappingCoverageTreeDataSource extends HierarchyDataSourceBase<CoverageNodePayload> {
2682
+ private readonly getCoverageNodeGQL;
2683
+ private _root;
2684
+ private _config;
2685
+ private _rootMappingCount;
2686
+ private _validationMap;
2687
+ setRoot(root: CoverageEntityRef | null): void;
2688
+ setConfig(config: MappingCoverageTreeConfig): void;
2689
+ /**
2690
+ * Inject the validation report (rtId → status detail) loaded from the
2691
+ * latest PipelineExecution. Pass an empty map to clear the overlay.
2692
+ * The caller must trigger a tree refresh after updating the map.
2693
+ */
2694
+ setValidationMap(map: ReadonlyMap<string, CoverageValidationDetail>): void;
2695
+ getValidationMap(): ReadonlyMap<string, CoverageValidationDetail>;
2696
+ getRoot(): CoverageEntityRef | null;
2697
+ getRootMappingCount(): number;
2698
+ fetchRootNodes(): Promise<CoverageTreeItem[]>;
2699
+ fetchChildren(item: TreeItemDataTyped<CoverageNodePayload>): Promise<CoverageTreeItem[]>;
2700
+ /**
2701
+ * Reloads the coverage payload (mapping count / hasChildren flag) for a single
2702
+ * entity. Used after CRUD operations on mappings so the badge updates without
2703
+ * collapsing the surrounding subtree.
2704
+ */
2705
+ refreshNode(rtId: string, ckTypeId: string): Promise<CoverageNodePayload | null>;
2706
+ private buildItem;
2707
+ private queryNode;
2708
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeDataSource, never>;
2709
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingCoverageTreeDataSource>;
2710
+ }
2711
+
2712
+ interface RootCandidate {
2713
+ rtId: string;
2714
+ ckTypeId: string;
2715
+ name: string;
2716
+ description: string;
2717
+ }
2718
+ interface PipelineCandidate {
2719
+ rtId: string;
2720
+ ckTypeId: string;
2721
+ name: string;
2722
+ }
2723
+ /**
2724
+ * A bucket of orphan candidates sharing the same immediate parent. Produced
2725
+ * by `orphanGroupedList` when the "group by parent" toggle is on.
2726
+ */
2727
+ interface OrphanGroup {
2728
+ /** Stable key — parent's CkTypeId@RtId, or `__no_parent__` for the catch-all bucket. */
2729
+ key: string;
2730
+ /** Human-readable label rendered as the section heading. */
2731
+ label: string;
2732
+ items: OrphanCandidate[];
2733
+ }
2734
+ /**
2735
+ * Master-detail component that visualises mapping coverage on a generic entity
2736
+ * hierarchy (defaults: Basic/Tree + Basic/TreeNode, mappings via
2737
+ * System.Communication/MapsTo). The user picks a root, browses the hierarchy on
2738
+ * the left and inspects / edits DataPointMappings on the right.
2739
+ *
2740
+ * Phase 1: tree + counts + read-only mapping list + CRUD (add new mapping,
2741
+ * relink source via {@link EntitySelectorDialogService}, delete).
2742
+ */
2743
+ declare class MappingCoverageTreeComponent implements OnInit {
2744
+ private readonly entitySelector;
2745
+ private readonly editDialog;
2746
+ private readonly confirmation;
2747
+ private readonly communicationService;
2748
+ private readonly getEntitiesByCkType;
2749
+ private readonly getNodeMappingsGQL;
2750
+ private readonly getRuntimeEntityByIdGQL;
2751
+ private readonly getLatestValidationGQL;
2752
+ private readonly getOrphanCandidatesGQL;
2753
+ private readonly createEntitiesGQL;
2754
+ private readonly deleteEntitiesGQL;
2755
+ private readonly updateEntitiesGQL;
2756
+ protected readonly dataSource: MappingCoverageTreeDataSource;
2757
+ protected treeView: TreeComponent;
2758
+ /** Optional override for non-default hierarchies / mapping roles. */
2759
+ config: MappingCoverageTreeConfig;
2760
+ /** Pre-select a root on first show (e.g. via route param). */
2761
+ initialRoot: CoverageEntityRef | null;
2762
+ /**
2763
+ * Current tenant ID. Required for the "Run Validation" pipeline trigger
2764
+ * which calls a tenant-scoped REST endpoint on the Communication Controller.
2765
+ * When not provided, the Run button is hidden and the user has to trigger
2766
+ * the pipeline externally.
2767
+ */
2768
+ tenantId: string | null;
2769
+ readonly entitySelected: EventEmitter<CoverageEntityRef>;
2770
+ protected readonly icons: {
2771
+ refresh: _progress_kendo_svg_icons.SVGIcon;
2772
+ folderOpen: _progress_kendo_svg_icons.SVGIcon;
2773
+ plus: _progress_kendo_svg_icons.SVGIcon;
2774
+ pencil: _progress_kendo_svg_icons.SVGIcon;
2775
+ trash: _progress_kendo_svg_icons.SVGIcon;
2776
+ link: _progress_kendo_svg_icons.SVGIcon;
2777
+ };
2778
+ protected readonly rootCandidates: _angular_core.WritableSignal<RootCandidate[]>;
2779
+ protected readonly selectedRoot: _angular_core.WritableSignal<RootCandidate | null>;
2780
+ protected readonly selectedNode: _angular_core.WritableSignal<CoverageNodePayload | null>;
2781
+ protected readonly mappings: _angular_core.WritableSignal<CoverageMappingItem[]>;
2782
+ protected readonly mappingsLoading: _angular_core.WritableSignal<boolean>;
2783
+ protected readonly mappingsError: _angular_core.WritableSignal<string | null>;
2784
+ protected readonly validationPipelines: _angular_core.WritableSignal<PipelineCandidate[]>;
2785
+ protected readonly selectedPipeline: _angular_core.WritableSignal<PipelineCandidate | null>;
2786
+ protected readonly validationSummary: _angular_core.WritableSignal<CoverageReportSummary | null>;
2787
+ protected readonly validationExecutedAt: _angular_core.WritableSignal<string | null>;
2788
+ protected readonly validationLoading: _angular_core.WritableSignal<boolean>;
2789
+ protected readonly validationError: _angular_core.WritableSignal<string | null>;
2790
+ protected readonly validationRunning: _angular_core.WritableSignal<boolean>;
2791
+ /** Active tab: 'coverage' shows the tree, 'orphans' shows the unmapped sources. */
2792
+ protected readonly activeTab: _angular_core.WritableSignal<"coverage" | "orphans">;
2793
+ /** Source CK type currently inspected for orphans. */
2794
+ protected readonly orphanCkType: _angular_core.WritableSignal<string | null>;
2795
+ protected readonly orphanCandidates: _angular_core.WritableSignal<OrphanCandidate[]>;
2796
+ protected readonly orphanLoading: _angular_core.WritableSignal<boolean>;
2797
+ protected readonly orphanError: _angular_core.WritableSignal<string | null>;
2798
+ protected readonly orphanHideMapped: _angular_core.WritableSignal<boolean>;
2799
+ protected readonly orphanFilteredList: _angular_core.Signal<OrphanCandidate[]>;
2800
+ protected readonly orphanStats: _angular_core.Signal<{
2801
+ total: number;
2802
+ unmapped: number;
2803
+ mapped: number;
2804
+ }>;
2805
+ /**
2806
+ * Which parent CK type to group by, or null for a flat list. We let the user
2807
+ * pick the type instead of just "immediate parent" because Loxone-style trees
2808
+ * include intermediate buckets (Loxone/Category) where each parent rtId is
2809
+ * unique per room — grouping by Category produces dozens of look-alike
2810
+ * sections ("Stellantrieb" appears N times, once per room). The user almost
2811
+ * always wants Loxone/Room or whichever level genuinely partitions the data,
2812
+ * so we expose all parent types seen in the loaded data and let them choose.
2813
+ */
2814
+ protected readonly orphanGroupParentType: _angular_core.WritableSignal<string | null>;
2815
+ /**
2816
+ * Distinct parent CK type ids found in the loaded candidates, sorted so the
2817
+ * deepest type (root-most ancestor) comes first. For Loxone-Controls this is
2818
+ * Loxone/Room first, then Loxone/Category — usually the deeper one is also
2819
+ * the more meaningful grouping context.
2820
+ */
2821
+ protected readonly orphanAvailableParentTypes: _angular_core.Signal<string[]>;
2822
+ protected readonly orphanGroupedList: _angular_core.Signal<OrphanGroup[]>;
2823
+ protected readonly summaryLine: _angular_core.Signal<string | null>;
2824
+ ngOnInit(): Promise<void>;
2825
+ protected onPipelineSelectChange(rtId: string): void;
2826
+ protected refreshValidation(): Promise<void>;
2827
+ protected clearValidation(): void;
2828
+ protected selectTab(tab: 'coverage' | 'orphans'): void;
2829
+ protected onOrphanCkTypeChange(ckTypeId: string): void;
2830
+ protected refreshOrphans(): Promise<void>;
2831
+ protected toggleOrphanHideMapped(): void;
2832
+ protected onOrphanGroupParentTypeChange(value: string): void;
2833
+ /**
2834
+ * Returns the parent chain ordered for breadcrumb display: root-most ancestor
2835
+ * first, immediate parent last. `parentPath` itself is stored immediate-first
2836
+ * (so `parentPath[0]` cheaply reports the grouping key), but humans read
2837
+ * breadcrumbs from outside in.
2838
+ */
2839
+ protected breadcrumbFor(item: OrphanCandidate): OrphanCandidateParent[];
2840
+ /**
2841
+ * Fetches all entities of the selected source CK type and tags each with
2842
+ * its inbound MapsFrom DataPointMapping count. The view filters the list
2843
+ * down to mappingCount === 0 by default, but the user can flip the toggle
2844
+ * to see all candidates (mapped + unmapped) for verification.
2845
+ */
2846
+ private loadOrphanCandidates;
2847
+ /**
2848
+ * Opens the mapping editor pre-populated with the orphan as source and lets
2849
+ * the user pick the target + attribute paths. Creates the DataPointMapping
2850
+ * entity atomically on save (both MapsFrom and MapsTo wired up in one
2851
+ * mutation). Cancel leaves nothing behind.
2852
+ */
2853
+ protected createMappingFromOrphan(orphan: OrphanCandidate): Promise<void>;
2854
+ protected trackOrphanByRtId(_index: number, item: OrphanCandidate): string;
2855
+ /**
2856
+ * Triggers the selected validation pipeline on the Communication Controller
2857
+ * and, when it completes, automatically refreshes the coverage report so the
2858
+ * tree colour-codes update. Requires {@link tenantId} to be set.
2859
+ *
2860
+ * Polling strategy: every 1.5 s, fetch the latest execution metadata for the
2861
+ * pipeline. When `dateTime` differs from the snapshot taken before the run,
2862
+ * we know a new execution finished — refresh and stop. Aborts after 60 s.
2863
+ */
2864
+ protected runValidation(): Promise<void>;
2865
+ private refreshTreeOverlay;
2866
+ private loadValidationPipelines;
2867
+ protected refreshRoots(): Promise<void>;
2868
+ protected pickRoot(): Promise<void>;
2869
+ protected selectRoot(root: RootCandidate): Promise<void>;
2870
+ protected onRootSelectChange(rtId: string): void;
2871
+ protected onNodeSelected(item: TreeItemData): Promise<void>;
2872
+ protected refreshSelected(): Promise<void>;
2873
+ protected addMapping(): Promise<void>;
2874
+ /**
2875
+ * Opens the focused edit dialog for one mapping and, on save, persists
2876
+ * attribute and (if changed) MapsFrom- / MapsTo-association updates in a
2877
+ * single UpdateRuntimeEntities mutation.
2878
+ */
2879
+ protected editMapping(mapping: CoverageMappingItem): Promise<void>;
2880
+ private saveEditedMapping;
2881
+ protected deleteMapping(mapping: CoverageMappingItem): Promise<void>;
2882
+ protected trackByRtId(_index: number, item: {
2883
+ rtId: string;
2884
+ }): string;
2885
+ private loadRootCandidates;
2886
+ private loadMappingsForSelected;
2887
+ /**
2888
+ * Resolves source entity names by issuing a parallel `getRuntimeEntityById`
2889
+ * per unique (rtId, ckTypeId) pair. Updates the mappings signal in-place so
2890
+ * the detail panel re-renders with names. Failures are silent — the row
2891
+ * still falls back to displaying the source rtId.
2892
+ */
2893
+ private resolveSourceNames;
2894
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeComponent, never>;
2895
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingCoverageTreeComponent, "mm-mapping-coverage-tree", never, { "config": { "alias": "config"; "required": false; }; "initialRoot": { "alias": "initialRoot"; "required": false; }; "tenantId": { "alias": "tenantId"; "required": false; }; }, { "entitySelected": "entitySelected"; }, never, never, true, never>;
2896
+ }
2897
+
2898
+ /**
2899
+ * Editable view-model for one DataPointMapping. The fields mirror the CK
2900
+ * attributes (Name, Enabled, SourceAttributePath, MappingExpression,
2901
+ * TargetAttributePath) plus both the MapsFrom source-entity reference and
2902
+ * the MapsTo target-entity reference. The `_originalSource*` and
2903
+ * `_originalTarget*` snapshots let the caller decide whether the
2904
+ * corresponding association needs an update on save.
2905
+ *
2906
+ * `rtId === ''` denotes a not-yet-persisted mapping (orphan-tab "Map…"
2907
+ * flow). The caller branches on this to choose CreateEntities vs.
2908
+ * UpdateRuntimeEntities.
2909
+ */
2910
+ interface MappingEditValue {
2911
+ rtId: string;
2912
+ ckTypeId: string;
2913
+ name: string;
2914
+ enabled: boolean;
2915
+ sourceRtId?: string;
2916
+ sourceCkTypeId?: string;
2917
+ sourceName?: string;
2918
+ sourceAttributePath: string;
2919
+ mappingExpression: string;
2920
+ /** MapsTo target entity reference. Empty for new mappings until the user picks one. */
2921
+ targetRtId?: string;
2922
+ targetCkTypeId?: string;
2923
+ targetName?: string;
2924
+ targetAttributePath: string;
2925
+ /** Source rtId at dialog-open time — used to detect MapsFrom changes. */
2926
+ _originalSourceRtId?: string;
2927
+ _originalSourceCkTypeId?: string;
2928
+ /** Target rtId at dialog-open time — used to detect MapsTo changes. */
2929
+ _originalTargetRtId?: string;
2930
+ _originalTargetCkTypeId?: string;
2931
+ }
2932
+ interface MappingEditDialogData {
2933
+ mapping: MappingEditValue;
2934
+ title?: string;
2935
+ /**
2936
+ * Default CK type id for the Target Attribute Path autocomplete when the
2937
+ * mapping has no target picked yet. Once the user picks a target entity,
2938
+ * the model's `targetCkTypeId` takes over.
2939
+ * @deprecated Set `mapping.targetCkTypeId` instead; this is kept for
2940
+ * backward compatibility with the original (target-fixed) usage where
2941
+ * the dialog was always opened for a specific tree node.
2942
+ */
2943
+ targetCkTypeId?: string;
2944
+ }
2945
+ type MappingEditDialogResult = {
2946
+ confirmed: true;
2947
+ mapping: MappingEditValue;
2948
+ } | {
2949
+ confirmed: false;
2950
+ };
2951
+ /**
2952
+ * Focused single-mapping editor dialog. The host renders this via
2953
+ * `MappingEditDialogService.open(...)` and awaits the resulting promise:
2954
+ * `confirmed=true` means the user saved (caller persists), `confirmed=false`
2955
+ * means cancel.
2956
+ */
2957
+ declare class MappingEditDialogComponent {
2958
+ private readonly windowRef;
2959
+ private readonly entitySelector;
2960
+ private readonly attributeSelectorDialog;
2961
+ private readonly attributeService;
2962
+ protected readonly icons: {
2963
+ link: _progress_kendo_svg_icons.SVGIcon;
2964
+ browse: _progress_kendo_svg_icons.SVGIcon;
2965
+ regenerate: _progress_kendo_svg_icons.SVGIcon;
2966
+ };
2967
+ /** Set by the service before the dialog content is shown. */
2968
+ data: MappingEditDialogData;
2969
+ /** Reactive working copy — the form binds to this. */
2970
+ protected readonly model: _angular_core.WritableSignal<MappingEditValue>;
2971
+ /** Target CK-type attribute catalogue. The source side is now handled by
2972
+ * the dedicated {@link DataPointPickerComponent}, which loads runtime state
2973
+ * names from the entity itself instead of CK schema attributes. */
2974
+ private readonly targetAttributes;
2975
+ private readonly targetFilter;
2976
+ protected readonly targetAttributesLoading: _angular_core.WritableSignal<boolean>;
2977
+ protected readonly targetAttributeList: _angular_core.Signal<AttributeItem[]>;
2978
+ /**
2979
+ * Effective target CK type id — prefers the value picked by the user via
2980
+ * {@link pickTarget}; falls back to the optional {@link MappingEditDialogData.targetCkTypeId}
2981
+ * legacy default. Drives the Target Attribute Path autocomplete dropdown.
2982
+ */
2983
+ protected readonly effectiveTargetCkTypeId: _angular_core.Signal<string | undefined>;
2984
+ initialise(data: MappingEditDialogData): void;
2985
+ /**
2986
+ * Enabled when at least one labelled side of the mapping is filled enough
2987
+ * to produce a meaningful name. We require *some* identifying info on each
2988
+ * end so the generated name isn't just "(unset) → (unset)".
2989
+ */
2990
+ protected canGenerateName(): boolean;
2991
+ /**
2992
+ * Writes a deterministic, human-readable name into the mapping based on the
2993
+ * current source/target selection. Format:
2994
+ * `{sourceName} {sourcePath} → {targetName} {targetPath}`
2995
+ * Falls back to rtId fragments when names are missing. The user can still
2996
+ * edit the result freely — this just gives them a sensible starting point
2997
+ * so they don't have to invent a name from scratch when finishing an
2998
+ * orphan-tab mapping.
2999
+ */
3000
+ protected generateName(): void;
3001
+ protected isValid(): boolean;
3002
+ protected pickSource(): Promise<void>;
3003
+ protected pickTarget(): Promise<void>;
3004
+ protected onSourceAttributePathChange(value: string): void;
3005
+ protected onTargetAttributePathChange(value: string | null): void;
3006
+ protected onTargetAttributeFilter(filter: string): void;
3007
+ protected onSave(): void;
3008
+ protected onCancel(): void;
3009
+ /**
3010
+ * Fetches the CK-schema attribute catalogue for the target side and stores
3011
+ * it for the target combobox dropdown. Navigation properties are excluded —
3012
+ * they drown out the direct attributes; the browse button below opens the
3013
+ * full {@link AttributeSelectorDialog} for users who need a deep path.
3014
+ *
3015
+ * (The source side now uses {@link DataPointPickerComponent}, which queries
3016
+ * the runtime entity's States RecordArray directly — runtime data points,
3017
+ * not CK schema attributes, are what the runtime engine matches against.)
3018
+ */
3019
+ private loadTargetAttributes;
3020
+ protected browseTargetAttribute(): Promise<void>;
3021
+ private emptyValue;
3022
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogComponent, never>;
3023
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingEditDialogComponent, "mm-mapping-edit-dialog", never, {}, {}, never, never, true, never>;
3024
+ }
3025
+
3026
+ declare class MappingEditDialogService {
3027
+ private readonly windowService;
3028
+ private readonly windowStateService;
3029
+ /**
3030
+ * Opens the focused mapping editor as a resizable Kendo Window and returns
3031
+ * the user's choice. The window's size is persisted across sessions via
3032
+ * `WindowStateService` (same pattern as the AttributeSelectorDialog and the
3033
+ * EntitySelectDialog).
3034
+ *
3035
+ * The host is responsible for persisting changes when `confirmed=true` — the
3036
+ * dialog itself only mutates a local copy.
3037
+ */
3038
+ open(data: MappingEditDialogData): Promise<MappingEditDialogResult>;
3039
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogService, never>;
3040
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingEditDialogService>;
2215
3041
  }
2216
3042
 
2217
3043
  /**
@@ -2264,11 +3090,11 @@ declare class RuntimeEntityVariableDialogComponent {
2264
3090
  protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
2265
3091
  /** Data passed to the dialog (set by service) */
2266
3092
  data: RuntimeEntityVariableDialogData;
2267
- readonly selectedCkType: i0.WritableSignal<CkTypeSelectorItem | null>;
2268
- readonly selectedEntity: i0.WritableSignal<RuntimeEntityItem | null>;
2269
- readonly variableMappings: i0.WritableSignal<RuntimeEntityVariableMapping[]>;
2270
- readonly entityDataSource: i0.Signal<RuntimeEntitySelectDataSource | null>;
2271
- readonly entityDialogDataSource: i0.Signal<RuntimeEntityDialogDataSource | null>;
3093
+ readonly selectedCkType: _angular_core.WritableSignal<CkTypeSelectorItem | null>;
3094
+ readonly selectedEntity: _angular_core.WritableSignal<RuntimeEntityItem | null>;
3095
+ readonly variableMappings: _angular_core.WritableSignal<RuntimeEntityVariableMapping[]>;
3096
+ readonly entityDataSource: _angular_core.Signal<RuntimeEntitySelectDataSource | null>;
3097
+ readonly entityDialogDataSource: _angular_core.Signal<RuntimeEntityDialogDataSource | null>;
2272
3098
  private readonly VALID_NAME_REGEX;
2273
3099
  onCkTypeSelected(ckType: CkTypeSelectorItem): void;
2274
3100
  onCkTypeCleared(): void;
@@ -2284,8 +3110,8 @@ declare class RuntimeEntityVariableDialogComponent {
2284
3110
  private addAttributeMappings;
2285
3111
  private attributePathToVariableName;
2286
3112
  private isDuplicateName;
2287
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogComponent, never>;
2288
- static ɵcmp: i0.ɵɵComponentDeclaration<RuntimeEntityVariableDialogComponent, "mm-runtime-entity-variable-dialog", never, {}, {}, never, never, true, never>;
3113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogComponent, never>;
3114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeEntityVariableDialogComponent, "mm-runtime-entity-variable-dialog", never, {}, {}, never, never, true, never>;
2289
3115
  }
2290
3116
 
2291
3117
  interface RuntimeEntityVariableResult {
@@ -2301,8 +3127,8 @@ declare class RuntimeEntityVariableDialogService {
2301
3127
  * @returns Promise with confirmation status and dialog result
2302
3128
  */
2303
3129
  openRuntimeEntityVariableDialog(data?: RuntimeEntityVariableDialogData): Promise<RuntimeEntityVariableResult>;
2304
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
2305
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
3130
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
3131
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
2306
3132
  }
2307
3133
 
2308
3134
  declare class TenantSwitcherComponent {
@@ -2322,8 +3148,8 @@ declare class TenantSwitcherComponent {
2322
3148
  onSelectTenant(tenantId: string): void;
2323
3149
  onRefresh(event: MouseEvent): void;
2324
3150
  private contains;
2325
- static ɵfac: i0.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
2326
- 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>;
3151
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
3152
+ static ɵcmp: _angular_core.ɵɵ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>;
2327
3153
  }
2328
3154
 
2329
3155
  /**
@@ -2332,5 +3158,5 @@ declare class TenantSwitcherComponent {
2332
3158
  */
2333
3159
  declare function provideOctoUi(): EnvironmentProviders;
2334
3160
 
2335
- export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_RUNTIME_BROWSER_MESSAGES, DataMappingOverviewComponent, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, EntitySelectorDialogComponent, EntitySelectorDialogService, FieldFilterEditorComponent, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RecordDetailDialogComponent, 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 };
2336
- export type { AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };
3161
+ export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_CK_TYPE_SELECTOR_DIALOG_MESSAGES, DEFAULT_CK_TYPE_SELECTOR_INPUT_MESSAGES, DEFAULT_DATA_POINT, DEFAULT_MAPPING_COVERAGE_TREE_CONFIG, DEFAULT_PROPERTY_GRID_MESSAGES, DEFAULT_RUNTIME_BROWSER_MESSAGES, DataMappingOverviewComponent, DataPointPickerComponent, DataPointResolverService, DefaultPropertyCategory, EntityDetailComponent, EntityIdInfoComponent, EntitySelectorDialogComponent, EntitySelectorDialogService, FieldFilterEditorComponent, MappingCoverageTreeComponent, MappingCoverageTreeDataSource, MappingEditDialogComponent, MappingEditDialogService, OctoGraphQlDataSource, OctoGraphQlHierarchyDataSource, OctoLoaderComponent, PropertyConverterService, PropertyDisplayMode, PropertyGridComponent, PropertyValueDisplayComponent, RUNTIME_BROWSER_MESSAGES, RecordDetailDialogComponent, 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, extractDataPointNames, 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 };
3162
+ export type { AttributeItemLike, AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogMessages, CkTypeSelectorDialogResult, CkTypeSelectorInputMessages, CkTypeSelectorResult, CoverageEntityRef, CoverageMappingItem, CoverageNodePayload, CoverageTreeIcons, CoverageTreeItem, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingCoverageTreeConfig, MappingEditDialogData, MappingEditDialogResult, MappingEditValue, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, PropertyGridMessages, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };