@meshmakers/octo-ui 3.3.980 → 3.3.1000

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, 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,8 +235,8 @@ 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
242
  interface CkTypeSelectorDialogData {
@@ -288,8 +288,8 @@ declare class CkTypeSelectorDialogComponent implements OnInit, OnDestroy {
288
288
  onCellClick(event: CellClickEvent): void;
289
289
  onCancel(): void;
290
290
  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>;
291
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogComponent, never>;
292
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CkTypeSelectorDialogComponent, "mm-ck-type-selector-dialog", never, {}, {}, never, never, true, never>;
293
293
  }
294
294
 
295
295
  interface CkTypeSelectorResult {
@@ -311,8 +311,8 @@ declare class CkTypeSelectorDialogService {
311
311
  allowAbstract?: boolean;
312
312
  derivedFromRtCkTypeId?: string;
313
313
  }): Promise<CkTypeSelectorResult>;
314
- static ɵfac: i0.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
315
- static ɵprov: i0.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
314
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorDialogService, never>;
315
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CkTypeSelectorDialogService>;
316
316
  }
317
317
 
318
318
  declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
@@ -369,8 +369,128 @@ declare class CkTypeSelectorInputComponent implements OnInit, OnDestroy, Control
369
369
  private injectPopupStyles;
370
370
  private selectCkType;
371
371
  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>;
372
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeSelectorInputComponent, never>;
373
+ 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; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "ckTypeSelected": "ckTypeSelected"; "ckTypeCleared": "ckTypeCleared"; }, never, never, true, never>;
374
+ }
375
+
376
+ /**
377
+ * Pure helpers for extracting runtime data point names from a CK entity. Kept
378
+ * Angular-free so unit tests can exercise the record-shape branches without
379
+ * spinning up a TestBed, and so the same logic can be called both from the
380
+ * service (which fetches the entity via GraphQL) and from any caller that
381
+ * already has the entity in hand (e.g. the runtime-browser detail pane).
382
+ *
383
+ * A "data point" here is one entry of an entity's `States` or `DataPoints`
384
+ * RecordArray attribute — for Loxone Controls these are the state names
385
+ * (`tempActual`, `co2`, `humidityActual`, …); for adapters that don't model
386
+ * sub-states the array is absent and the only available data point is the
387
+ * default `currentValue` constant the runtime adapter exposes for
388
+ * single-state polling.
389
+ */
390
+ /**
391
+ * Default data-point name for entities without a States/DataPoints RecordArray.
392
+ * Matches the constant the runtime adapters (Loxone, MQTT, OPC-UA) use as the
393
+ * `sourceAttributePath` fallback when no specific state is configured.
394
+ */
395
+ declare const DEFAULT_DATA_POINT = "currentValue";
396
+ /** Minimal shape we accept for an attribute item. */
397
+ interface AttributeItemLike {
398
+ attributeName?: string | null;
399
+ value?: unknown;
400
+ }
401
+ /**
402
+ * Extracts the list of available data point names from an entity's attribute
403
+ * list. Always includes {@link DEFAULT_DATA_POINT} first; named state entries
404
+ * follow in alphabetical order.
405
+ *
406
+ * Tolerates the three record shapes the platform produces for a RecordArray:
407
+ *
408
+ * 1. GraphQL: each record is `{ ckRecordId, attributes: [{attributeName, value}, …] }`.
409
+ * 2. Pipeline / MongoDB: each record is `{ attributes: { Name: "…", ExternalId: "…" } }`.
410
+ * 3. Flat: each record is `{ Name: "…", ExternalId: "…" }` (older dumps / sample data).
411
+ *
412
+ * Returns `[DEFAULT_DATA_POINT]` for null/undefined input, attributes without a
413
+ * States/DataPoints entry, or malformed RecordArrays.
414
+ */
415
+ declare function extractDataPointNames(attributes: readonly (AttributeItemLike | null | undefined)[] | null | undefined): string[];
416
+
417
+ /**
418
+ * Source data-point picker for DataPointMapping `sourceAttributePath`.
419
+ *
420
+ * Renders a Kendo combobox of the data points exposed by a source entity —
421
+ * a Loxone Control's State names (`tempActual`, `co2`, …), an MQTT topic
422
+ * sub-key, an OPC-UA node attribute, etc. — with `currentValue` as the
423
+ * always-available default for single-state sources.
424
+ *
425
+ * Two ways to feed the picker:
426
+ * - `entity` — pass a pre-loaded RtEntityDto; the picker reads the
427
+ * States/DataPoints RecordArray straight off it (no GraphQL roundtrip).
428
+ * Used by the runtime-browser detail pane.
429
+ * - `entityRtId` + `entityCkTypeId` — the picker fetches the entity via
430
+ * `getRuntimeEntityById` and extracts data points itself. Used by the
431
+ * mapping-edit dialog where only the IDs are known.
432
+ *
433
+ * `allowCustom: true` keeps the picker useful when the user needs to escape
434
+ * the catalogue — e.g. typing a path the entity hasn't published yet, or a
435
+ * field a future state will expose.
436
+ */
437
+ declare class DataPointPickerComponent {
438
+ private readonly resolver;
439
+ /** Pre-loaded source entity. When set, no GraphQL call is made. */
440
+ readonly entity: _angular_core.InputSignal<RtEntityDto | null | undefined>;
441
+ /** Source entity rtId. Required (together with ckTypeId) when `entity` is not provided. */
442
+ readonly entityRtId: _angular_core.InputSignal<string | null | undefined>;
443
+ /** Source entity CK type id. */
444
+ readonly entityCkTypeId: _angular_core.InputSignal<string | null | undefined>;
445
+ /** Two-way bound data-point name. */
446
+ readonly value: _angular_core.ModelSignal<string>;
447
+ /** Optional placeholder shown when the combobox is empty. */
448
+ readonly placeholder: _angular_core.InputSignal<string>;
449
+ /** Disables the combobox without hiding it. */
450
+ readonly disabled: _angular_core.InputSignal<boolean>;
451
+ /** Emits whenever the user enters a custom filter — useful for callers that
452
+ * want to refine a backing catalogue independently of the value selection. */
453
+ readonly filterChange: _angular_core.OutputEmitterRef<string>;
454
+ protected readonly options: _angular_core.WritableSignal<string[]>;
455
+ protected readonly loading: _angular_core.WritableSignal<boolean>;
456
+ /**
457
+ * Current filter text entered into the combobox. Drives the case-insensitive
458
+ * *contains* match below. Kendo's combobox by default does not filter the
459
+ * `[data]` it is given — when `filterable` is true it just emits
460
+ * `filterChange` events and expects the consumer to refilter. Without this,
461
+ * typing "co2" would show every data point regardless of name.
462
+ */
463
+ protected readonly filter: _angular_core.WritableSignal<string>;
464
+ protected readonly filteredOptions: _angular_core.Signal<string[]>;
465
+ constructor();
466
+ protected onValueChange(v: string | null): void;
467
+ protected onFilterChange(filter: string): void;
468
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointPickerComponent, never>;
469
+ 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>;
470
+ }
471
+
472
+ /**
473
+ * Resolves the list of runtime data points available on a source entity.
474
+ * Single source of truth shared by the runtime-browser detail pane (which
475
+ * already has the entity loaded) and the mapping-edit dialog (which only
476
+ * has rtId + ckTypeId and has to fetch). Picks the right path automatically:
477
+ *
478
+ * - {@link extractFromEntity} is sync — pass a pre-loaded entity.
479
+ * - {@link load} is async — fetches via `getRuntimeEntityById` then extracts.
480
+ *
481
+ * Both paths share the same pure helper so a Loxone Control's state list
482
+ * (`tempActual`, `co2`, …) is reported identically regardless of who's asking.
483
+ */
484
+ declare class DataPointResolverService {
485
+ private readonly getRuntimeEntityByIdGQL;
486
+ extractFromEntity(entity: {
487
+ attributes?: {
488
+ items?: readonly (AttributeItemLike | null | undefined)[] | null;
489
+ } | null;
490
+ } | null | undefined): string[];
491
+ load(rtId: string, ckTypeId: string): Promise<string[]>;
492
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataPointResolverService, never>;
493
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DataPointResolverService>;
374
494
  }
375
495
 
376
496
  declare abstract class OctoGraphQlDataSource<TDto> extends DataSourceTyped<TDto | null> {
@@ -423,8 +543,8 @@ declare class EntityIdInfoComponent {
423
543
  protected get copyOptions(): CopyOption[];
424
544
  private truncateValue;
425
545
  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>;
546
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityIdInfoComponent, never>;
547
+ 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
548
  }
429
549
 
430
550
  type BrowserItem$3 = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -512,8 +632,8 @@ declare class RuntimeBrowserDataSource extends OctoGraphQlHierarchyDataSource<Br
512
632
  private checkBasicConstructionKitAvailable;
513
633
  private fetchCkModels;
514
634
  private fetchCkTypes;
515
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
516
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
635
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDataSource, never>;
636
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserDataSource>;
517
637
  }
518
638
 
519
639
  interface EntitySelectorDialogData {
@@ -528,7 +648,7 @@ interface EntitySelectorDialogResult {
528
648
  }
529
649
 
530
650
  declare class EntitySelectorDialogComponent {
531
- private readonly dialogRef;
651
+ private readonly windowRef;
532
652
  readonly treeDataSource: RuntimeBrowserDataSource;
533
653
  data: EntitySelectorDialogData;
534
654
  selectedEntity: {
@@ -539,8 +659,8 @@ declare class EntitySelectorDialogComponent {
539
659
  onNodeSelected(node: TreeItemData): void;
540
660
  onConfirm(): void;
541
661
  onCancel(): void;
542
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
543
- static ɵcmp: i0.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
662
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogComponent, never>;
663
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectorDialogComponent, "mm-entity-selector-dialog", never, {}, {}, never, never, true, never>;
544
664
  }
545
665
 
546
666
  interface EntitySelectorResult {
@@ -548,10 +668,17 @@ interface EntitySelectorResult {
548
668
  entity?: EntitySelectorDialogResult;
549
669
  }
550
670
  declare class EntitySelectorDialogService {
551
- private readonly dialogService;
671
+ private readonly windowService;
672
+ private readonly windowStateService;
673
+ /**
674
+ * Opens the entity selector as a Kendo Window so it stacks correctly above
675
+ * other Kendo Windows (e.g. the Mapping-Edit dialog calls this from its
676
+ * own Window — Kendo Dialogs would land underneath because Window and
677
+ * Dialog use different z-index ranges).
678
+ */
552
679
  openEntitySelector(data?: EntitySelectorDialogData): Promise<EntitySelectorResult>;
553
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
554
- static ɵprov: i0.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
680
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectorDialogService, never>;
681
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectorDialogService>;
555
682
  }
556
683
 
557
684
  /**
@@ -687,8 +814,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
687
814
  private isArrayValue;
688
815
  private extractArrayContent;
689
816
  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>;
817
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldFilterEditorComponent, never>;
818
+ 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
819
  }
693
820
 
694
821
  /**
@@ -707,8 +834,8 @@ declare class FieldFilterEditorComponent implements OnChanges {
707
834
  */
708
835
  declare class OctoLoaderComponent {
709
836
  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>;
837
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OctoLoaderComponent, never>;
838
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OctoLoaderComponent, "mm-octo-loader", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
712
839
  }
713
840
 
714
841
  declare enum AttributeValueTypeDto {
@@ -904,8 +1031,8 @@ declare class PropertyConverterService {
904
1031
  * Check if string is ISO date format
905
1032
  */
906
1033
  private isIsoDateString;
907
- static ɵfac: i0.ɵɵFactoryDeclaration<PropertyConverterService, never>;
908
- static ɵprov: i0.ɵɵInjectableDeclaration<PropertyConverterService>;
1034
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyConverterService, never>;
1035
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PropertyConverterService>;
909
1036
  }
910
1037
 
911
1038
  /**
@@ -963,8 +1090,8 @@ declare class PropertyGridComponent implements OnInit, OnChanges {
963
1090
  * Handle binary download request from property value display
964
1091
  */
965
1092
  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>;
1093
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyGridComponent, never>;
1094
+ 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; }; }, { "propertyChange": "propertyChange"; "saveRequested": "saveRequested"; "binaryDownload": "binaryDownload"; }, never, never, true, never>;
968
1095
  }
969
1096
 
970
1097
  /**
@@ -1080,8 +1207,8 @@ declare class PropertyValueDisplayComponent implements OnInit, OnChanges {
1080
1207
  * Handle download button click
1081
1208
  */
1082
1209
  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>;
1210
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyValueDisplayComponent, never>;
1211
+ 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
1212
  }
1086
1213
 
1087
1214
  interface RecordProperty {
@@ -1168,8 +1295,8 @@ declare class RecordDetailDialogComponent implements OnInit {
1168
1295
  private getObjectProperties;
1169
1296
  private inferType;
1170
1297
  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>;
1298
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RecordDetailDialogComponent, never>;
1299
+ 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>;
1173
1300
  }
1174
1301
 
1175
1302
  /**
@@ -1272,8 +1399,8 @@ declare class EntityDetailComponent implements OnInit, OnDestroy {
1272
1399
  onSelectSourceAttribute(mapping: DataPointMappingItem): Promise<void>;
1273
1400
  onSelectTargetAttribute(mapping: DataPointMappingItem): Promise<void>;
1274
1401
  onSaveAllMappings(): Promise<void>;
1275
- static ɵfac: i0.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
1276
- static ɵcmp: i0.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, {}, {}, never, never, true, never>;
1402
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityDetailComponent, never>;
1403
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityDetailComponent, "mm-entity-detail", never, {}, {}, never, never, true, never>;
1277
1404
  }
1278
1405
 
1279
1406
  declare const botService: {
@@ -1614,8 +1741,8 @@ declare class CkTypeEntitiesDataSourceDirective extends OctoGraphQlDataSource<Rt
1614
1741
  constructor();
1615
1742
  setRtCkTypeId(ckTypeId: string): void;
1616
1743
  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>;
1744
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CkTypeEntitiesDataSourceDirective, never>;
1745
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CkTypeEntitiesDataSourceDirective, "[mmCkTypeEntitiesDataSource]", ["mmCkTypeEntitiesDataSource"], {}, {}, never, never, true, never>;
1619
1746
  }
1620
1747
 
1621
1748
  /**
@@ -1629,8 +1756,8 @@ declare class TypeHelperService {
1629
1756
  * @returns True for runtime entity, false otherwise.
1630
1757
  */
1631
1758
  isRuntimeEntity(item: unknown): item is RtEntityDto;
1632
- static ɵfac: i0.ɵɵFactoryDeclaration<TypeHelperService, never>;
1633
- static ɵprov: i0.ɵɵInjectableDeclaration<TypeHelperService>;
1759
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TypeHelperService, never>;
1760
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TypeHelperService>;
1634
1761
  }
1635
1762
 
1636
1763
  interface CreateInput {
@@ -1724,7 +1851,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1724
1851
  private readonly entitySelectorDialog;
1725
1852
  private readonly attributeSelectorDialog;
1726
1853
  dataMappings: DataPointMappingItem[];
1727
- sourceDataPoints: string[];
1728
1854
  /**
1729
1855
  * Optional expression validator function passed through to EntityDetailViewComponent → DataMappingListComponent.
1730
1856
  */
@@ -1831,11 +1957,6 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1831
1957
  * Tracks in-memory changes to a mapping (no server save yet).
1832
1958
  */
1833
1959
  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
1960
  /**
1840
1961
  * Opens attribute selector for the source entity's attributes.
1841
1962
  */
@@ -1848,8 +1969,8 @@ declare class RuntimeBrowserDetailsComponent implements OnChanges, AfterViewInit
1848
1969
  * Saves all DataPointMapping entities (attributes + MapsTo associations).
1849
1970
  */
1850
1971
  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>;
1972
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserDetailsComponent, never>;
1973
+ 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
1974
  }
1854
1975
 
1855
1976
  type BrowserItem$1 = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -1870,14 +1991,14 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1870
1991
  private isSelectedItemAnRtEntity;
1871
1992
  private isLoading;
1872
1993
  private isEditing;
1873
- messages: i0.InputSignal<Partial<RuntimeBrowserMessages>>;
1874
- showDataMapping: i0.InputSignal<boolean>;
1994
+ messages: _angular_core.InputSignal<Partial<RuntimeBrowserMessages>>;
1995
+ showDataMapping: _angular_core.InputSignal<boolean>;
1875
1996
  /**
1876
1997
  * Optional expression validator function for DataPointMapping expressions.
1877
1998
  * Passed through to RuntimeBrowserDetailsComponent → EntityDetailViewComponent → DataMappingListComponent.
1878
1999
  */
1879
- expressionValidator: i0.InputSignal<ExpressionValidatorFn | undefined>;
1880
- protected readonly resolvedMessages: i0.Signal<RuntimeBrowserMessages>;
2000
+ expressionValidator: _angular_core.InputSignal<ExpressionValidatorFn | undefined>;
2001
+ protected readonly resolvedMessages: _angular_core.Signal<RuntimeBrowserMessages>;
1881
2002
  treeDetail: BaseTreeDetailComponent<BrowserItem$1>;
1882
2003
  detailsPanel: RuntimeBrowserDetailsComponent;
1883
2004
  protected get leftToolbarActions(): CommandItem[];
@@ -1964,8 +2085,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1964
2085
  protected refreshTreeAfterCreation(parentInfo?: {
1965
2086
  parentRtId?: string;
1966
2087
  }): 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>;
2088
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserComponent, never>;
2089
+ 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
2090
  }
1970
2091
 
1971
2092
  /**
@@ -1973,8 +2094,8 @@ declare class RuntimeBrowserComponent implements AfterViewInit {
1973
2094
  * Use as the parent component when mounting runtime browser routes as children.
1974
2095
  */
1975
2096
  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>;
2097
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserOutletComponent, never>;
2098
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserOutletComponent, "mm-runtime-browser-outlet", never, {}, {}, never, never, true, never>;
1978
2099
  }
1979
2100
 
1980
2101
  /**
@@ -1984,8 +2105,8 @@ declare class RuntimeBrowserOutletComponent {
1984
2105
  declare class RuntimeBrowserPageComponent {
1985
2106
  private readonly injectedMessages;
1986
2107
  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>;
2108
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserPageComponent, never>;
2109
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeBrowserPageComponent, "mm-runtime-browser-page", never, {}, {}, never, never, true, never>;
1989
2110
  }
1990
2111
 
1991
2112
  /** Options for creating runtime browser routes. */
@@ -2078,8 +2199,8 @@ declare class AssociationValidationService {
2078
2199
  private toLowerCamelCase;
2079
2200
  /** Clears the role cache (e.g. on tenant switch). */
2080
2201
  clearCache(): void;
2081
- static ɵfac: i0.ɵɵFactoryDeclaration<AssociationValidationService, never>;
2082
- static ɵprov: i0.ɵɵInjectableDeclaration<AssociationValidationService>;
2202
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AssociationValidationService, never>;
2203
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AssociationValidationService>;
2083
2204
  }
2084
2205
 
2085
2206
  type BrowserItem = RtEntityDto | CkModelDto | CkTypeDto | {
@@ -2122,8 +2243,8 @@ declare class RuntimeBrowserStateService {
2122
2243
  * Get unique identifier for a tree item
2123
2244
  */
2124
2245
  private getItemId;
2125
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
2126
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
2246
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeBrowserStateService, never>;
2247
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeBrowserStateService>;
2127
2248
  }
2128
2249
 
2129
2250
  /**
@@ -2182,16 +2303,16 @@ declare class DataMappingOverviewComponent implements OnInit {
2182
2303
  rtId: string;
2183
2304
  ckTypeId: string;
2184
2305
  }>;
2185
- readonly mappings: i0.WritableSignal<DataPointMappingOverviewItem[]>;
2186
- readonly loading: i0.WritableSignal<boolean>;
2187
- readonly selectedMapping: i0.WritableSignal<DataPointMappingOverviewItem | null>;
2306
+ readonly mappings: _angular_core.WritableSignal<DataPointMappingOverviewItem[]>;
2307
+ readonly loading: _angular_core.WritableSignal<boolean>;
2308
+ readonly selectedMapping: _angular_core.WritableSignal<DataPointMappingOverviewItem | null>;
2188
2309
  pageSize: number;
2189
2310
  skip: number;
2190
- readonly gridData: i0.Signal<{
2311
+ readonly gridData: _angular_core.Signal<{
2191
2312
  data: DataPointMappingOverviewItem[];
2192
2313
  total: number;
2193
2314
  }>;
2194
- readonly summary: i0.Signal<MappingOverviewSummary>;
2315
+ readonly summary: _angular_core.Signal<MappingOverviewSummary>;
2195
2316
  protected readonly refreshIcon: _progress_kendo_svg_icons.SVGIcon;
2196
2317
  protected readonly checkIcon: _progress_kendo_svg_icons.SVGIcon;
2197
2318
  protected readonly warnIcon: _progress_kendo_svg_icons.SVGIcon;
@@ -2210,8 +2331,544 @@ declare class DataMappingOverviewComponent implements OnInit {
2210
2331
  * Updates items in-place and triggers signal update.
2211
2332
  */
2212
2333
  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>;
2334
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataMappingOverviewComponent, never>;
2335
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataMappingOverviewComponent, "mm-data-mapping-overview", never, {}, { "navigateToEntity": "navigateToEntity"; }, never, never, true, never>;
2336
+ }
2337
+
2338
+ /**
2339
+ * Generic configuration that drives the Mapping Coverage Tree.
2340
+ *
2341
+ * The tree displays any entity hierarchy reachable via a single association role
2342
+ * (defaults to `System/ParentChild` between `Basic/Tree` and `Basic/TreeNode`).
2343
+ * Mapping counts are computed from the number of inbound associations with
2344
+ * `mappingRoleId` (defaults to `System.Communication/MapsTo`).
2345
+ */
2346
+ interface MappingCoverageTreeConfig {
2347
+ /** CK type of root entities the user can pick (e.g. `Basic/Tree`). */
2348
+ rootCkTypeId: string;
2349
+ /** CK type of child nodes in the hierarchy (e.g. `Basic/TreeNode`). */
2350
+ childCkTypeId: string;
2351
+ /** Association role connecting parent to child (e.g. `System/ParentChild`). Inbound direction is used. */
2352
+ childRoleId: string;
2353
+ /** Association role connecting target entities to their DataPointMappings. */
2354
+ mappingRoleId: string;
2355
+ /** Association role connecting DataPointMappings back to their source entities. */
2356
+ mappingSourceRoleId: string;
2357
+ /** CK type of the mapping entity (e.g. `System.Communication/DataPointMapping`). */
2358
+ mappingCkTypeId: string;
2359
+ /** Outbound role name used when creating a new mapping with a MapsTo association. */
2360
+ mappingTargetOutboundRoleName: string;
2361
+ /** Outbound role name used when creating/updating a new mapping with a MapsFrom association. */
2362
+ mappingSourceOutboundRoleName: string;
2363
+ /** CK type of the pipeline used to drive validation (defaults to System.Communication/Pipeline). */
2364
+ validationPipelineCkTypeId: string;
2365
+ /** CK type of pipeline executions whose OutputData carries the validation report. */
2366
+ validationExecutionCkTypeId: string;
2367
+ /** Association role linking a PipelineExecution to its Pipeline (defaults to System.Communication/ExecutedPipeline). */
2368
+ validationExecutesRoleId: string;
2369
+ /**
2370
+ * CK types whose entities can act as mapping sources. Used by the Orphan
2371
+ * Sources tab to list unmapped candidates (e.g. `Loxone/Control`,
2372
+ * `MQTT/Topic`, `OpcUa/Node`). Empty list hides the tab.
2373
+ */
2374
+ sourceCandidateCkTypeIds: string[];
2375
+ }
2376
+ /**
2377
+ * Default configuration: Basic/Tree + Basic/TreeNode driven by System/ParentChild,
2378
+ * mappings via System.Communication/MapsTo.
2379
+ */
2380
+ declare const DEFAULT_MAPPING_COVERAGE_TREE_CONFIG: MappingCoverageTreeConfig;
2381
+ /**
2382
+ * Reference to a runtime entity used in the coverage tree (root, node, source, target).
2383
+ */
2384
+ interface CoverageEntityRef {
2385
+ rtId: string;
2386
+ ckTypeId: string;
2387
+ name: string;
2388
+ description?: string;
2389
+ }
2390
+ /**
2391
+ * Coverage validation status calculated by the ValidateDataPointCoverage pipeline
2392
+ * node. Maps to the JSON `status` field in its emitted report.
2393
+ */
2394
+ type CoverageNodeStatus = 'ok' | 'warning' | 'error' | 'info';
2395
+ /**
2396
+ * Per-node detail loaded from the latest validation execution's OutputData. Held
2397
+ * in a `Map<rtId, …>` by the component and consulted by the data source when
2398
+ * decorating tree items.
2399
+ */
2400
+ interface CoverageValidationDetail {
2401
+ status: CoverageNodeStatus;
2402
+ /**
2403
+ * Worst status found in the node's subtree (including the node itself).
2404
+ * Used to colour the tree icon so an `info` node with red descendants is
2405
+ * still visually flagged as red — the user sees where to drill in without
2406
+ * expanding every branch.
2407
+ */
2408
+ subtreeStatus: CoverageNodeStatus;
2409
+ /** Aggregate counts of each status in the subtree (including this node). */
2410
+ subtreeCounts: {
2411
+ ok: number;
2412
+ warning: number;
2413
+ error: number;
2414
+ info: number;
2415
+ };
2416
+ required: string[];
2417
+ recommended: string[];
2418
+ present: string[];
2419
+ missingRequired: string[];
2420
+ missingRecommended: string[];
2421
+ }
2422
+ /**
2423
+ * Payload attached to every tree item in the coverage tree. Stored as the `item`
2424
+ * of a `TreeItemDataTyped<CoverageNodePayload>` so the host can render and react.
2425
+ */
2426
+ interface CoverageNodePayload extends CoverageEntityRef {
2427
+ /** Number of inbound mappings (DataPointMappings pointing to this node). */
2428
+ mappingCount: number;
2429
+ /** Whether this node has structural children (drives expand chevron). */
2430
+ hasChildren: boolean;
2431
+ /** True for the synthetic root entity (the picked Tree). */
2432
+ isRoot: boolean;
2433
+ /** Validation status from the latest validation report (when loaded). */
2434
+ validationStatus: CoverageNodeStatus | null;
2435
+ /** Full validation detail (missing/present lists) when loaded. */
2436
+ validationDetail: CoverageValidationDetail | null;
2437
+ }
2438
+ type CoverageTreeItem = TreeItemDataTyped<CoverageNodePayload>;
2439
+ /**
2440
+ * Flat view-model for a DataPointMapping shown in the detail panel.
2441
+ */
2442
+ interface CoverageMappingItem {
2443
+ rtId: string;
2444
+ ckTypeId: string;
2445
+ name: string;
2446
+ enabled: boolean;
2447
+ sourceAttributePath: string;
2448
+ targetAttributePath: string;
2449
+ mappingExpression: string;
2450
+ sourceRtId?: string;
2451
+ sourceCkTypeId?: string;
2452
+ sourceName?: string;
2453
+ }
2454
+ interface CoverageTreeIcons {
2455
+ rootIcon: SVGIcon;
2456
+ nodeIcon: SVGIcon;
2457
+ nodeWithMappingsIcon?: SVGIcon;
2458
+ }
2459
+ /**
2460
+ * Counts emitted by the ValidateDataPointCoverage pipeline node in the
2461
+ * <c>summary</c> object of its JSON report. Mirrors the C# `SummaryCounters`
2462
+ * record so the UI can render the totals without recomputing.
2463
+ */
2464
+ interface CoverageReportSummary {
2465
+ ok: number;
2466
+ warning: number;
2467
+ error: number;
2468
+ info: number;
2469
+ total: number;
2470
+ }
2471
+ /**
2472
+ * One step in the parent chain of an OrphanCandidate (closest parent first).
2473
+ * Loaded via 3 nested `targets(direction: OUTBOUND, role: $childRoleId)` hops
2474
+ * in `getOrphanCandidates.graphql` so the orphan tab can show where each
2475
+ * source sits in the structural tree without a follow-up query.
2476
+ */
2477
+ interface OrphanCandidateParent {
2478
+ rtId: string;
2479
+ ckTypeId: string;
2480
+ name: string;
2481
+ }
2482
+ /**
2483
+ * Source candidate listed in the Orphan Sources tab. Carries the inbound
2484
+ * MapsFrom mapping count so the tab can split the catalogue into mapped vs
2485
+ * unmapped entries without an extra round trip.
2486
+ */
2487
+ interface OrphanCandidate {
2488
+ rtId: string;
2489
+ ckTypeId: string;
2490
+ name: string;
2491
+ description?: string;
2492
+ mappingCount: number;
2493
+ /**
2494
+ * Ancestors via the configured `childRoleId` (default System/ParentChild),
2495
+ * ordered from immediate parent (index 0) to root-most known ancestor.
2496
+ * Empty when the source has no parents reachable within 3 hops or when
2497
+ * the parent walk failed (e.g. `childCkTypeId` did not match the parent's
2498
+ * concrete type). The UI displays this as a breadcrumb under the entity
2499
+ * name; absence is silent (no parent → no breadcrumb).
2500
+ */
2501
+ parentPath: OrphanCandidateParent[];
2502
+ }
2503
+
2504
+ /**
2505
+ * Generic hierarchy data source for the Mapping Coverage Tree.
2506
+ *
2507
+ * Configure with `setRoot(...)` and `setConfig(...)` before passing to a
2508
+ * `<mm-tree-view>` instance. The data source resolves child nodes through the
2509
+ * configured `childRoleId` / `childCkTypeId` and decorates each item with the
2510
+ * number of inbound mappings (via `mappingRoleId`).
2511
+ */
2512
+ declare class MappingCoverageTreeDataSource extends HierarchyDataSourceBase<CoverageNodePayload> {
2513
+ private readonly getCoverageNodeGQL;
2514
+ private _root;
2515
+ private _config;
2516
+ private _rootMappingCount;
2517
+ private _validationMap;
2518
+ setRoot(root: CoverageEntityRef | null): void;
2519
+ setConfig(config: MappingCoverageTreeConfig): void;
2520
+ /**
2521
+ * Inject the validation report (rtId → status detail) loaded from the
2522
+ * latest PipelineExecution. Pass an empty map to clear the overlay.
2523
+ * The caller must trigger a tree refresh after updating the map.
2524
+ */
2525
+ setValidationMap(map: ReadonlyMap<string, CoverageValidationDetail>): void;
2526
+ getValidationMap(): ReadonlyMap<string, CoverageValidationDetail>;
2527
+ getRoot(): CoverageEntityRef | null;
2528
+ getRootMappingCount(): number;
2529
+ fetchRootNodes(): Promise<CoverageTreeItem[]>;
2530
+ fetchChildren(item: TreeItemDataTyped<CoverageNodePayload>): Promise<CoverageTreeItem[]>;
2531
+ /**
2532
+ * Reloads the coverage payload (mapping count / hasChildren flag) for a single
2533
+ * entity. Used after CRUD operations on mappings so the badge updates without
2534
+ * collapsing the surrounding subtree.
2535
+ */
2536
+ refreshNode(rtId: string, ckTypeId: string): Promise<CoverageNodePayload | null>;
2537
+ private buildItem;
2538
+ private queryNode;
2539
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeDataSource, never>;
2540
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingCoverageTreeDataSource>;
2541
+ }
2542
+
2543
+ interface RootCandidate {
2544
+ rtId: string;
2545
+ ckTypeId: string;
2546
+ name: string;
2547
+ description: string;
2548
+ }
2549
+ interface PipelineCandidate {
2550
+ rtId: string;
2551
+ ckTypeId: string;
2552
+ name: string;
2553
+ }
2554
+ /**
2555
+ * A bucket of orphan candidates sharing the same immediate parent. Produced
2556
+ * by `orphanGroupedList` when the "group by parent" toggle is on.
2557
+ */
2558
+ interface OrphanGroup {
2559
+ /** Stable key — parent's CkTypeId@RtId, or `__no_parent__` for the catch-all bucket. */
2560
+ key: string;
2561
+ /** Human-readable label rendered as the section heading. */
2562
+ label: string;
2563
+ items: OrphanCandidate[];
2564
+ }
2565
+ /**
2566
+ * Master-detail component that visualises mapping coverage on a generic entity
2567
+ * hierarchy (defaults: Basic/Tree + Basic/TreeNode, mappings via
2568
+ * System.Communication/MapsTo). The user picks a root, browses the hierarchy on
2569
+ * the left and inspects / edits DataPointMappings on the right.
2570
+ *
2571
+ * Phase 1: tree + counts + read-only mapping list + CRUD (add new mapping,
2572
+ * relink source via {@link EntitySelectorDialogService}, delete).
2573
+ */
2574
+ declare class MappingCoverageTreeComponent implements OnInit {
2575
+ private readonly entitySelector;
2576
+ private readonly editDialog;
2577
+ private readonly confirmation;
2578
+ private readonly communicationService;
2579
+ private readonly getEntitiesByCkType;
2580
+ private readonly getNodeMappingsGQL;
2581
+ private readonly getRuntimeEntityByIdGQL;
2582
+ private readonly getLatestValidationGQL;
2583
+ private readonly getOrphanCandidatesGQL;
2584
+ private readonly createEntitiesGQL;
2585
+ private readonly deleteEntitiesGQL;
2586
+ private readonly updateEntitiesGQL;
2587
+ protected readonly dataSource: MappingCoverageTreeDataSource;
2588
+ protected treeView: TreeComponent;
2589
+ /** Optional override for non-default hierarchies / mapping roles. */
2590
+ config: MappingCoverageTreeConfig;
2591
+ /** Pre-select a root on first show (e.g. via route param). */
2592
+ initialRoot: CoverageEntityRef | null;
2593
+ /**
2594
+ * Current tenant ID. Required for the "Run Validation" pipeline trigger
2595
+ * which calls a tenant-scoped REST endpoint on the Communication Controller.
2596
+ * When not provided, the Run button is hidden and the user has to trigger
2597
+ * the pipeline externally.
2598
+ */
2599
+ tenantId: string | null;
2600
+ readonly entitySelected: EventEmitter<CoverageEntityRef>;
2601
+ protected readonly icons: {
2602
+ refresh: _progress_kendo_svg_icons.SVGIcon;
2603
+ folderOpen: _progress_kendo_svg_icons.SVGIcon;
2604
+ plus: _progress_kendo_svg_icons.SVGIcon;
2605
+ pencil: _progress_kendo_svg_icons.SVGIcon;
2606
+ trash: _progress_kendo_svg_icons.SVGIcon;
2607
+ link: _progress_kendo_svg_icons.SVGIcon;
2608
+ };
2609
+ protected readonly rootCandidates: _angular_core.WritableSignal<RootCandidate[]>;
2610
+ protected readonly selectedRoot: _angular_core.WritableSignal<RootCandidate | null>;
2611
+ protected readonly selectedNode: _angular_core.WritableSignal<CoverageNodePayload | null>;
2612
+ protected readonly mappings: _angular_core.WritableSignal<CoverageMappingItem[]>;
2613
+ protected readonly mappingsLoading: _angular_core.WritableSignal<boolean>;
2614
+ protected readonly mappingsError: _angular_core.WritableSignal<string | null>;
2615
+ protected readonly validationPipelines: _angular_core.WritableSignal<PipelineCandidate[]>;
2616
+ protected readonly selectedPipeline: _angular_core.WritableSignal<PipelineCandidate | null>;
2617
+ protected readonly validationSummary: _angular_core.WritableSignal<CoverageReportSummary | null>;
2618
+ protected readonly validationExecutedAt: _angular_core.WritableSignal<string | null>;
2619
+ protected readonly validationLoading: _angular_core.WritableSignal<boolean>;
2620
+ protected readonly validationError: _angular_core.WritableSignal<string | null>;
2621
+ protected readonly validationRunning: _angular_core.WritableSignal<boolean>;
2622
+ /** Active tab: 'coverage' shows the tree, 'orphans' shows the unmapped sources. */
2623
+ protected readonly activeTab: _angular_core.WritableSignal<"coverage" | "orphans">;
2624
+ /** Source CK type currently inspected for orphans. */
2625
+ protected readonly orphanCkType: _angular_core.WritableSignal<string | null>;
2626
+ protected readonly orphanCandidates: _angular_core.WritableSignal<OrphanCandidate[]>;
2627
+ protected readonly orphanLoading: _angular_core.WritableSignal<boolean>;
2628
+ protected readonly orphanError: _angular_core.WritableSignal<string | null>;
2629
+ protected readonly orphanHideMapped: _angular_core.WritableSignal<boolean>;
2630
+ protected readonly orphanFilteredList: _angular_core.Signal<OrphanCandidate[]>;
2631
+ protected readonly orphanStats: _angular_core.Signal<{
2632
+ total: number;
2633
+ unmapped: number;
2634
+ mapped: number;
2635
+ }>;
2636
+ /**
2637
+ * Which parent CK type to group by, or null for a flat list. We let the user
2638
+ * pick the type instead of just "immediate parent" because Loxone-style trees
2639
+ * include intermediate buckets (Loxone/Category) where each parent rtId is
2640
+ * unique per room — grouping by Category produces dozens of look-alike
2641
+ * sections ("Stellantrieb" appears N times, once per room). The user almost
2642
+ * always wants Loxone/Room or whichever level genuinely partitions the data,
2643
+ * so we expose all parent types seen in the loaded data and let them choose.
2644
+ */
2645
+ protected readonly orphanGroupParentType: _angular_core.WritableSignal<string | null>;
2646
+ /**
2647
+ * Distinct parent CK type ids found in the loaded candidates, sorted so the
2648
+ * deepest type (root-most ancestor) comes first. For Loxone-Controls this is
2649
+ * Loxone/Room first, then Loxone/Category — usually the deeper one is also
2650
+ * the more meaningful grouping context.
2651
+ */
2652
+ protected readonly orphanAvailableParentTypes: _angular_core.Signal<string[]>;
2653
+ protected readonly orphanGroupedList: _angular_core.Signal<OrphanGroup[]>;
2654
+ protected readonly summaryLine: _angular_core.Signal<string | null>;
2655
+ ngOnInit(): Promise<void>;
2656
+ protected onPipelineSelectChange(rtId: string): void;
2657
+ protected refreshValidation(): Promise<void>;
2658
+ protected clearValidation(): void;
2659
+ protected selectTab(tab: 'coverage' | 'orphans'): void;
2660
+ protected onOrphanCkTypeChange(ckTypeId: string): void;
2661
+ protected refreshOrphans(): Promise<void>;
2662
+ protected toggleOrphanHideMapped(): void;
2663
+ protected onOrphanGroupParentTypeChange(value: string): void;
2664
+ /**
2665
+ * Returns the parent chain ordered for breadcrumb display: root-most ancestor
2666
+ * first, immediate parent last. `parentPath` itself is stored immediate-first
2667
+ * (so `parentPath[0]` cheaply reports the grouping key), but humans read
2668
+ * breadcrumbs from outside in.
2669
+ */
2670
+ protected breadcrumbFor(item: OrphanCandidate): OrphanCandidateParent[];
2671
+ /**
2672
+ * Fetches all entities of the selected source CK type and tags each with
2673
+ * its inbound MapsFrom DataPointMapping count. The view filters the list
2674
+ * down to mappingCount === 0 by default, but the user can flip the toggle
2675
+ * to see all candidates (mapped + unmapped) for verification.
2676
+ */
2677
+ private loadOrphanCandidates;
2678
+ /**
2679
+ * Opens the mapping editor pre-populated with the orphan as source and lets
2680
+ * the user pick the target + attribute paths. Creates the DataPointMapping
2681
+ * entity atomically on save (both MapsFrom and MapsTo wired up in one
2682
+ * mutation). Cancel leaves nothing behind.
2683
+ */
2684
+ protected createMappingFromOrphan(orphan: OrphanCandidate): Promise<void>;
2685
+ protected trackOrphanByRtId(_index: number, item: OrphanCandidate): string;
2686
+ /**
2687
+ * Triggers the selected validation pipeline on the Communication Controller
2688
+ * and, when it completes, automatically refreshes the coverage report so the
2689
+ * tree colour-codes update. Requires {@link tenantId} to be set.
2690
+ *
2691
+ * Polling strategy: every 1.5 s, fetch the latest execution metadata for the
2692
+ * pipeline. When `dateTime` differs from the snapshot taken before the run,
2693
+ * we know a new execution finished — refresh and stop. Aborts after 60 s.
2694
+ */
2695
+ protected runValidation(): Promise<void>;
2696
+ private refreshTreeOverlay;
2697
+ private loadValidationPipelines;
2698
+ protected refreshRoots(): Promise<void>;
2699
+ protected pickRoot(): Promise<void>;
2700
+ protected selectRoot(root: RootCandidate): Promise<void>;
2701
+ protected onRootSelectChange(rtId: string): void;
2702
+ protected onNodeSelected(item: TreeItemData): Promise<void>;
2703
+ protected refreshSelected(): Promise<void>;
2704
+ protected addMapping(): Promise<void>;
2705
+ /**
2706
+ * Opens the focused edit dialog for one mapping and, on save, persists
2707
+ * attribute and (if changed) MapsFrom- / MapsTo-association updates in a
2708
+ * single UpdateRuntimeEntities mutation.
2709
+ */
2710
+ protected editMapping(mapping: CoverageMappingItem): Promise<void>;
2711
+ private saveEditedMapping;
2712
+ protected deleteMapping(mapping: CoverageMappingItem): Promise<void>;
2713
+ protected trackByRtId(_index: number, item: {
2714
+ rtId: string;
2715
+ }): string;
2716
+ private loadRootCandidates;
2717
+ private loadMappingsForSelected;
2718
+ /**
2719
+ * Resolves source entity names by issuing a parallel `getRuntimeEntityById`
2720
+ * per unique (rtId, ckTypeId) pair. Updates the mappings signal in-place so
2721
+ * the detail panel re-renders with names. Failures are silent — the row
2722
+ * still falls back to displaying the source rtId.
2723
+ */
2724
+ private resolveSourceNames;
2725
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingCoverageTreeComponent, never>;
2726
+ 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>;
2727
+ }
2728
+
2729
+ /**
2730
+ * Editable view-model for one DataPointMapping. The fields mirror the CK
2731
+ * attributes (Name, Enabled, SourceAttributePath, MappingExpression,
2732
+ * TargetAttributePath) plus both the MapsFrom source-entity reference and
2733
+ * the MapsTo target-entity reference. The `_originalSource*` and
2734
+ * `_originalTarget*` snapshots let the caller decide whether the
2735
+ * corresponding association needs an update on save.
2736
+ *
2737
+ * `rtId === ''` denotes a not-yet-persisted mapping (orphan-tab "Map…"
2738
+ * flow). The caller branches on this to choose CreateEntities vs.
2739
+ * UpdateRuntimeEntities.
2740
+ */
2741
+ interface MappingEditValue {
2742
+ rtId: string;
2743
+ ckTypeId: string;
2744
+ name: string;
2745
+ enabled: boolean;
2746
+ sourceRtId?: string;
2747
+ sourceCkTypeId?: string;
2748
+ sourceName?: string;
2749
+ sourceAttributePath: string;
2750
+ mappingExpression: string;
2751
+ /** MapsTo target entity reference. Empty for new mappings until the user picks one. */
2752
+ targetRtId?: string;
2753
+ targetCkTypeId?: string;
2754
+ targetName?: string;
2755
+ targetAttributePath: string;
2756
+ /** Source rtId at dialog-open time — used to detect MapsFrom changes. */
2757
+ _originalSourceRtId?: string;
2758
+ _originalSourceCkTypeId?: string;
2759
+ /** Target rtId at dialog-open time — used to detect MapsTo changes. */
2760
+ _originalTargetRtId?: string;
2761
+ _originalTargetCkTypeId?: string;
2762
+ }
2763
+ interface MappingEditDialogData {
2764
+ mapping: MappingEditValue;
2765
+ title?: string;
2766
+ /**
2767
+ * Default CK type id for the Target Attribute Path autocomplete when the
2768
+ * mapping has no target picked yet. Once the user picks a target entity,
2769
+ * the model's `targetCkTypeId` takes over.
2770
+ * @deprecated Set `mapping.targetCkTypeId` instead; this is kept for
2771
+ * backward compatibility with the original (target-fixed) usage where
2772
+ * the dialog was always opened for a specific tree node.
2773
+ */
2774
+ targetCkTypeId?: string;
2775
+ }
2776
+ type MappingEditDialogResult = {
2777
+ confirmed: true;
2778
+ mapping: MappingEditValue;
2779
+ } | {
2780
+ confirmed: false;
2781
+ };
2782
+ /**
2783
+ * Focused single-mapping editor dialog. The host renders this via
2784
+ * `MappingEditDialogService.open(...)` and awaits the resulting promise:
2785
+ * `confirmed=true` means the user saved (caller persists), `confirmed=false`
2786
+ * means cancel.
2787
+ */
2788
+ declare class MappingEditDialogComponent {
2789
+ private readonly windowRef;
2790
+ private readonly entitySelector;
2791
+ private readonly attributeSelectorDialog;
2792
+ private readonly attributeService;
2793
+ protected readonly icons: {
2794
+ link: _progress_kendo_svg_icons.SVGIcon;
2795
+ browse: _progress_kendo_svg_icons.SVGIcon;
2796
+ regenerate: _progress_kendo_svg_icons.SVGIcon;
2797
+ };
2798
+ /** Set by the service before the dialog content is shown. */
2799
+ data: MappingEditDialogData;
2800
+ /** Reactive working copy — the form binds to this. */
2801
+ protected readonly model: _angular_core.WritableSignal<MappingEditValue>;
2802
+ /** Target CK-type attribute catalogue. The source side is now handled by
2803
+ * the dedicated {@link DataPointPickerComponent}, which loads runtime state
2804
+ * names from the entity itself instead of CK schema attributes. */
2805
+ private readonly targetAttributes;
2806
+ private readonly targetFilter;
2807
+ protected readonly targetAttributesLoading: _angular_core.WritableSignal<boolean>;
2808
+ protected readonly targetAttributeList: _angular_core.Signal<AttributeItem[]>;
2809
+ /**
2810
+ * Effective target CK type id — prefers the value picked by the user via
2811
+ * {@link pickTarget}; falls back to the optional {@link MappingEditDialogData.targetCkTypeId}
2812
+ * legacy default. Drives the Target Attribute Path autocomplete dropdown.
2813
+ */
2814
+ protected readonly effectiveTargetCkTypeId: _angular_core.Signal<string | undefined>;
2815
+ initialise(data: MappingEditDialogData): void;
2816
+ /**
2817
+ * Enabled when at least one labelled side of the mapping is filled enough
2818
+ * to produce a meaningful name. We require *some* identifying info on each
2819
+ * end so the generated name isn't just "(unset) → (unset)".
2820
+ */
2821
+ protected canGenerateName(): boolean;
2822
+ /**
2823
+ * Writes a deterministic, human-readable name into the mapping based on the
2824
+ * current source/target selection. Format:
2825
+ * `{sourceName} {sourcePath} → {targetName} {targetPath}`
2826
+ * Falls back to rtId fragments when names are missing. The user can still
2827
+ * edit the result freely — this just gives them a sensible starting point
2828
+ * so they don't have to invent a name from scratch when finishing an
2829
+ * orphan-tab mapping.
2830
+ */
2831
+ protected generateName(): void;
2832
+ protected isValid(): boolean;
2833
+ protected pickSource(): Promise<void>;
2834
+ protected pickTarget(): Promise<void>;
2835
+ protected onSourceAttributePathChange(value: string): void;
2836
+ protected onTargetAttributePathChange(value: string | null): void;
2837
+ protected onTargetAttributeFilter(filter: string): void;
2838
+ protected onSave(): void;
2839
+ protected onCancel(): void;
2840
+ /**
2841
+ * Fetches the CK-schema attribute catalogue for the target side and stores
2842
+ * it for the target combobox dropdown. Navigation properties are excluded —
2843
+ * they drown out the direct attributes; the browse button below opens the
2844
+ * full {@link AttributeSelectorDialog} for users who need a deep path.
2845
+ *
2846
+ * (The source side now uses {@link DataPointPickerComponent}, which queries
2847
+ * the runtime entity's States RecordArray directly — runtime data points,
2848
+ * not CK schema attributes, are what the runtime engine matches against.)
2849
+ */
2850
+ private loadTargetAttributes;
2851
+ protected browseTargetAttribute(): Promise<void>;
2852
+ private emptyValue;
2853
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogComponent, never>;
2854
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MappingEditDialogComponent, "mm-mapping-edit-dialog", never, {}, {}, never, never, true, never>;
2855
+ }
2856
+
2857
+ declare class MappingEditDialogService {
2858
+ private readonly windowService;
2859
+ private readonly windowStateService;
2860
+ /**
2861
+ * Opens the focused mapping editor as a resizable Kendo Window and returns
2862
+ * the user's choice. The window's size is persisted across sessions via
2863
+ * `WindowStateService` (same pattern as the AttributeSelectorDialog and the
2864
+ * EntitySelectDialog).
2865
+ *
2866
+ * The host is responsible for persisting changes when `confirmed=true` — the
2867
+ * dialog itself only mutates a local copy.
2868
+ */
2869
+ open(data: MappingEditDialogData): Promise<MappingEditDialogResult>;
2870
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MappingEditDialogService, never>;
2871
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MappingEditDialogService>;
2215
2872
  }
2216
2873
 
2217
2874
  /**
@@ -2264,11 +2921,11 @@ declare class RuntimeEntityVariableDialogComponent {
2264
2921
  protected readonly trashIcon: _progress_kendo_svg_icons.SVGIcon;
2265
2922
  /** Data passed to the dialog (set by service) */
2266
2923
  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>;
2924
+ readonly selectedCkType: _angular_core.WritableSignal<CkTypeSelectorItem | null>;
2925
+ readonly selectedEntity: _angular_core.WritableSignal<RuntimeEntityItem | null>;
2926
+ readonly variableMappings: _angular_core.WritableSignal<RuntimeEntityVariableMapping[]>;
2927
+ readonly entityDataSource: _angular_core.Signal<RuntimeEntitySelectDataSource | null>;
2928
+ readonly entityDialogDataSource: _angular_core.Signal<RuntimeEntityDialogDataSource | null>;
2272
2929
  private readonly VALID_NAME_REGEX;
2273
2930
  onCkTypeSelected(ckType: CkTypeSelectorItem): void;
2274
2931
  onCkTypeCleared(): void;
@@ -2284,8 +2941,8 @@ declare class RuntimeEntityVariableDialogComponent {
2284
2941
  private addAttributeMappings;
2285
2942
  private attributePathToVariableName;
2286
2943
  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>;
2944
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogComponent, never>;
2945
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RuntimeEntityVariableDialogComponent, "mm-runtime-entity-variable-dialog", never, {}, {}, never, never, true, never>;
2289
2946
  }
2290
2947
 
2291
2948
  interface RuntimeEntityVariableResult {
@@ -2301,8 +2958,8 @@ declare class RuntimeEntityVariableDialogService {
2301
2958
  * @returns Promise with confirmation status and dialog result
2302
2959
  */
2303
2960
  openRuntimeEntityVariableDialog(data?: RuntimeEntityVariableDialogData): Promise<RuntimeEntityVariableResult>;
2304
- static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
2305
- static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
2961
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RuntimeEntityVariableDialogService, never>;
2962
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RuntimeEntityVariableDialogService>;
2306
2963
  }
2307
2964
 
2308
2965
  declare class TenantSwitcherComponent {
@@ -2322,8 +2979,8 @@ declare class TenantSwitcherComponent {
2322
2979
  onSelectTenant(tenantId: string): void;
2323
2980
  onRefresh(event: MouseEvent): void;
2324
2981
  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>;
2982
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TenantSwitcherComponent, never>;
2983
+ 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
2984
  }
2328
2985
 
2329
2986
  /**
@@ -2332,5 +2989,5 @@ declare class TenantSwitcherComponent {
2332
2989
  */
2333
2990
  declare function provideOctoUi(): EnvironmentProviders;
2334
2991
 
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 };
2992
+ export { AssociationValidationService, AttributeSelectorDialogComponent, AttributeSelectorDialogService, AttributeSortSelectorDialogComponent, AttributeSortSelectorDialogService, AttributeValueTypeDto, CkTypeSelectorDialogComponent, CkTypeSelectorDialogService, CkTypeSelectorInputComponent, DEFAULT_DATA_POINT, DEFAULT_MAPPING_COVERAGE_TREE_CONFIG, 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 };
2993
+ export type { AttributeItemLike, AttributeSelectorDialogData, AttributeSelectorDialogResult, AttributeSelectorResult, AttributeSortItem, AttributeSortSelectorDialogData, AttributeSortSelectorDialogResult, AttributeSortSelectorResult, BinaryDownloadEvent, BrowserItem, BrowserState, CkAssociationRole, CkTypeSelectorDialogData, CkTypeSelectorDialogResult, CkTypeSelectorResult, CoverageEntityRef, CoverageMappingItem, CoverageNodePayload, CoverageTreeIcons, CoverageTreeItem, DataPointMappingItem, DataPointMappingOverviewItem, EntitySelectorDialogData, EntitySelectorDialogResult, EntitySelectorResult, ExpressionValidationResult, ExpressionValidatorFn, FieldFilterItem, FilterVariable, MappingCoverageTreeConfig, MappingEditDialogData, MappingEditDialogResult, MappingEditValue, MappingOverviewSummary, MoveValidationResult, PropertyChangeEvent, PropertyGridConfig, PropertyGridItem, RtEntityId, RuntimeBrowserMessages, RuntimeBrowserRouteOptions, RuntimeEntityVariableDialogData, RuntimeEntityVariableDialogResult, RuntimeEntityVariableMapping, RuntimeEntityVariableResult, SortOption, ValidationMessage };